<?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>106377</bug_id>
          
          <creation_ts>2013-01-08 14:05:21 -0800</creation_ts>
          <short_desc>IndexedDB: Allow createIndex/createObjectStore to be asynchronous</short_desc>
          <delta_ts>2013-01-09 23:34:43 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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>
          <dependson>106117</dependson>
    
    <dependson>106148</dependson>
          <blocked>99774</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alec Flett">alecflett</reporter>
          <assigned_to name="Alec Flett">alecflett</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>dgrogan</cc>
    
    <cc>jsbell</cc>
    
    <cc>peter+ews</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>802607</commentid>
    <comment_count>0</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-08 14:05:21 -0800</bug_when>
    <thetext>IndexedDB: Allow createIndex/createObjectStore to be asynchronous</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802725</commentid>
    <comment_count>1</comment_count>
      <attachid>181784</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-08 15:25:48 -0800</bug_when>
    <thetext>Created attachment 181784
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802743</commentid>
    <comment_count>2</comment_count>
      <attachid>181784</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-08 15:39:46 -0800</bug_when>
    <thetext>Comment on attachment 181784
Patch

oops, forgot one file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802745</commentid>
    <comment_count>3</comment_count>
      <attachid>181791</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-08 15:42:18 -0800</bug_when>
    <thetext>Created attachment 181791
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802751</commentid>
    <comment_count>4</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-08 15:44:31 -0800</bug_when>
    <thetext>jsbell@ / dgrogan@ - one more big review? Lots of code removal in this one :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802841</commentid>
    <comment_count>5</comment_count>
      <attachid>181791</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2013-01-08 17:21:21 -0800</bug_when>
    <thetext>Comment on attachment 181791
Patch

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

Overall LGTM...

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:640
&gt; +            return false;

This changes the semantics of this method from &quot;plow ahead in case of error&quot; to &quot;fail the load completely&quot;. I don&apos;t disagree with this change, but it&apos;s orthogonal to the rest of the patch, isn&apos;t it? (Also, I&apos;d rather that we just implemented the FIXME if we&apos;re going to change the behavior.)

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:1017
&gt; +            return false;

Ditto.

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:1037
&gt;      return indexes;

Should be return true ?

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:56
&gt; +    const RefPtr&lt;IDBBackingStore&gt; m_backingStore;

Not for this patch (because it&apos;s consistent with other Operations), but given that we can get to the backing store via the transaction which is passed into perform(), we can probably eliminate this member from this and other Operations.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:1347
&gt; +    m_metadata.objectStores.clear();

Is this ever called with non-empty m_metadata.objectStores?

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h:108
&gt;      class VersionChangeOperation;

Remove this from IDBDatabaseBackendImpl class while the others are moving out too?

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h:111
&gt;      class VersionChangeAbortOperation;

Ditto?

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.h:46
&gt; +namespace IDBObjectStoreBackendImpl {

May want to add a FIXME indicating that this is temporary, and things in this namespace will move to ... ?

&gt; Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp:-50
&gt; -TEST(IDBDatabaseBackendTest, BackingStoreRetention)

Any way to change this test rather than removing it? E.g. creating an IDBTransactionBackendImpl which holds a reference?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802844</commentid>
    <comment_count>6</comment_count>
      <attachid>181791</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-01-08 17:25:13 -0800</bug_when>
    <thetext>Comment on attachment 181791
Patch

Attachment 181791 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15763293</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802864</commentid>
    <comment_count>7</comment_count>
      <attachid>181791</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-08 18:04:56 -0800</bug_when>
    <thetext>Comment on attachment 181791
Patch

Attachment 181791 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15764284</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803865</commentid>
    <comment_count>8</comment_count>
      <attachid>182026</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-09 17:21:05 -0800</bug_when>
    <thetext>Created attachment 182026
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803869</commentid>
    <comment_count>9</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-09 17:22:27 -0800</bug_when>
    <thetext>showed the updated IDBDatabaseBackendTest to jsbell in person he sez &quot;lgtm&quot;

All other issues have been addressed.

tony@ - r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803877</commentid>
    <comment_count>10</comment_count>
      <attachid>182026</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-09 17:35:16 -0800</bug_when>
    <thetext>Comment on attachment 182026
Patch

Attachment 182026 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15761681</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803907</commentid>
    <comment_count>11</comment_count>
      <attachid>182026</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-01-09 18:09:04 -0800</bug_when>
    <thetext>Comment on attachment 182026
Patch

Attachment 182026 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/15762748</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803908</commentid>
    <comment_count>12</comment_count>
      <attachid>182037</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-09 18:09:12 -0800</bug_when>
    <thetext>Created attachment 182037
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803913</commentid>
    <comment_count>13</comment_count>
      <attachid>182040</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-09 18:12:49 -0800</bug_when>
    <thetext>Created attachment 182040
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803920</commentid>
    <comment_count>14</comment_count>
      <attachid>182040</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2013-01-09 18:28:15 -0800</bug_when>
    <thetext>Comment on attachment 182040
Patch

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

&gt; Source/WebCore/ChangeLog:35
&gt; +        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp: Add all create/delete operations.

Nit: I would say where these are copied from.

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:608
&gt; +// FIXME: This should do some error handling rather than plowing ahead when bad data is encountered.

Are there security implications of plowing ahead when bad data is encountered?

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h:69
&gt; +    virtual PassRefPtr&lt;IDBObjectStoreBackendInterface&gt; createObjectStore(int64_t id, const String&amp; name, const IDBKeyPath&amp;, bool autoIncrement, IDBTransactionBackendInterface*, ExceptionCode&amp;)  { ASSERT_NOT_REACHED(); return 0; }
&gt; +    virtual void createObjectStore(int64_t transactionId, int64_t objectStoreId, const String&amp; name, const IDBKeyPath&amp;, bool autoIncrement);
&gt; +    virtual void deleteObjectStore(int64_t, IDBTransactionBackendInterface*, ExceptionCode&amp;) { ASSERT_NOT_REACHED(); }
&gt; +    virtual void deleteObjectStore(int64_t transactionId, int64_t objectStoreId);

Should these have OVERRIDE?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803984</commentid>
    <comment_count>15</comment_count>
      <attachid>182040</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-01-09 19:48:14 -0800</bug_when>
    <thetext>Comment on attachment 182040
Patch

Attachment 182040 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15758795</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804047</commentid>
    <comment_count>16</comment_count>
      <attachid>182061</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-09 21:55:49 -0800</bug_when>
    <thetext>Created attachment 182061
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804092</commentid>
    <comment_count>17</comment_count>
      <attachid>182061</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-09 23:07:37 -0800</bug_when>
    <thetext>Comment on attachment 182061
Patch for landing

Rejecting attachment 182061 from commit-queue.

New failing tests:
inspector-protocol/debugger-terminate-dedicated-worker-while-paused.html
Full output: http://queues.webkit.org/results/15774678</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804102</commentid>
    <comment_count>18</comment_count>
      <attachid>182061</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-09 23:27:11 -0800</bug_when>
    <thetext>Comment on attachment 182061
Patch for landing

sigh. Those are not my failures. trying again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804105</commentid>
    <comment_count>19</comment_count>
      <attachid>182061</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-09 23:34:38 -0800</bug_when>
    <thetext>Comment on attachment 182061
Patch for landing

Clearing flags on attachment: 182061

Committed r139289: &lt;http://trac.webkit.org/changeset/139289&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804106</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-09 23:34:43 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181784</attachid>
            <date>2013-01-08 15:25:48 -0800</date>
            <delta_ts>2013-01-08 15:39:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106377-20130108152253.patch</filename>
            <type>text/plain</type>
            <size>89185</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MDEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmI4MzAwNTdiNmQxYTg2
MzkxNzc1OGE0ZmI2ODdmNWMzM2MyYjQ4OS4uZjhmNGQzZWNlYTcxOWEzZTE1MTcwNGE0YTBkZGQx
ZmRlYzI1MDQ5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOCBAQAorMjAxMy0wMS0wOCAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBB
bGxvdyBjcmVhdGVJbmRleC9jcmVhdGVPYmplY3RTdG9yZSB0byBiZSBhc3luY2hyb25vdXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjM3NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1pZ3JhdGUgaW1w
bGVtZW50YXRpb25zIG9mIGNyZWF0ZUluZGV4L2RlbGV0ZUluZGV4LAorICAgICAgICBjcmVhdGVP
YmplY3RTdG9yZS9kZWxldGVPYmplY3RTdG9yZSBvdmVyIHRvIElEQkRhdGFiYXNlQmFja2VuZElt
cGwsCisgICAgICAgIHNvIHRoYXQgdGhleSBjYW4gYmUgYXN5bmNocm9ub3VzIGluIG11bHRpLXBy
b2Nlc3MgcG9ydHMuCisKKyAgICAgICAgSGFzIHRoZSBzaWRlIGVmZmVjdCBvZiByZW1vdmluZyB0
aGUgbGFzdCBjb25zdW1lcnMgb2YKKyAgICAgICAgSURCSW5kZXhCYWNrZW5kSW1wbCBhbmQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC4gVGhlIGZvcm1lcgorICAgICAgICBpcyByZW1vdmVkIGNv
bXBsZXRlIGFuZCB0aGUgbGF0dGVyIGJlY29tZXMgYSB0ZW1wb3JhcnkgbmFtZXNwYWNlCisgICAg
ICAgIHBlbmRpbmcgYSBmdXJ0aGVyIG1vcmUgbWVjaGFuaWNhbCBjb2RlIHNodWZmbGUuCisKKyAg
ICAgICAgQSBrZXkgcmVmYWN0b3JpbmcgZWZmZWN0IGlzIHRoYXQgdGhlIElEQkRhdGFiYXNlQmFj
a2VuZEltcGwKKyAgICAgICAgbm93IGNvbnRhaW5zIHRoZSBhdXRob3JpdGF0aXZlIElEQkRhdGFi
YXNlTWV0YWRhdGEgaGllcmFyY2h5LAorICAgICAgICBhbmQgdXBkYXRlcyB0byBpdCBhcmUgY29u
c29saWRhdGVkIGluIG9uZSBwbGFjZSByYXRoZXIgdGhhbgorICAgICAgICBzY2F0dGVyZWQgYWNy
b3NzIGEgcGFyYWxsZWwgb2JqZWN0IHRyZWUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRo
aXMgaXMganVzdCByZWZhY3RvcmluZy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkJhY2tpbmdTdG9yZS5jcHA6IFNpbXBsaWZ5IG9iamVjdHN0b3JlL2luZGV4IGxvYWRpbmcgYW5k
IHByb3BhZ2F0ZSBlcnJvcnMuCisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6Omdl
dE9iamVjdFN0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldElu
ZGV4ZXMpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgor
ICAgICAgICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6IERlcGVuZGVuY3kgY2xlYW51cC4KKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oOiBEZXBlbmRlbmN5IGNsZWFu
dXAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZS5jcHA6IEZyb250ZW5kIElEQk9iamVjdFN0b3JlcyBubyBsb25nZXIgaG9sZCBvbnRv
IGJhY2tlbmQgb2JqZWN0cy4KKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVhdGVP
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0
U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZElt
cGwuY3BwOiBBZGQgYWxsIGNyZWF0ZS9kZWxldGUgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNv
cmU6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KToKKyAgICAgICAgKENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KToKKyAgICAgICAgKERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpDcmVhdGVPYmplY3RTdG9y
ZUFib3J0T3BlcmF0aW9uKToKKyAgICAgICAgKENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRp
b246OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoRGVsZXRlT2Jq
ZWN0U3RvcmVBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChDcmVhdGVJbmRleE9wZXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNyZWF0ZUluZGV4T3BlcmF0aW9uOjpDcmVhdGVJbmRleE9wZXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERlbGV0ZUluZGV4T3BlcmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246OkRlbGV0ZUluZGV4T3BlcmF0aW9uKToKKyAg
ICAgICAgKENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q3Jl
YXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0
ZUluZGV4QWJvcnRPcGVyYXRpb246OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24pOgorICAgICAg
ICAoRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVJ
bmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5k
ZXhBYm9ydE9wZXJhdGlvbjo6RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHZXRPcGVyYXRpb246OkdldE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3JlYXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9u
OjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
OjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRl
bGV0ZURhdGFiYXNlRmluYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6bG9hZE9iamVjdFN0b3Jlcyk6IExvYWQgZGlyZWN0bHkgaW50byBtZXRhZGF0YSBmcm9t
IGJhY2tpbmcgc3RvcmUuCisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3Jl
QWJvcnRPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKElEQkRhdGFiYXNlQmFja2VuZEltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUp
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6SURCT2JqZWN0U3RvcmUpOiBG
cm9udGVuZCBJREJJbmRleCBvYmplY3RzIG5vIGxvbmdlciBob2xkIG9udG8gYmFja2VuZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCk6IAorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmU6OmNyZWF0ZSk6CisgICAgICAgIChJREJPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTMtMDEtMDcgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBJbnRyb2R1Y2UgSFRNTFBhcnNlck9wdGlvbnMg
dG8gZW5jYXBzdWxhdGUgSFRNTCBwYXJzZXIgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCAxMjc1NDMwMTM5MjNmNGVkMTJmOTNlYzhhNDQ1ZWRkNzIyN2Y2ZTBmLi4xZTRjMTZl
NmNhZjg1NzJjZjIxOGZhOGI4MGY0YzhkNzcwNGYzNGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEzLTAxLTA4ICBBbGVjIEZsZXR0ICA8YWxlY2ZsZXR0
QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IEFsbG93IGNyZWF0ZUluZGV4L2Ny
ZWF0ZU9iamVjdFN0b3JlIHRvIGJlIGFzeW5jaHJvbm91cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2Mzc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHRoaXMgdGVzdCBhcyBpdCBtYWtlcyBu
byBzZW5zZSBvbmNlIHRoZSBvYmplY3RzdG9yZS9pbmRleAorICAgICAgICBoaWVyYXJjaHkgaXMg
Z29uZS4KKworICAgICAgICAqIHRlc3RzL0lEQkRhdGFiYXNlQmFja2VuZFRlc3QuY3BwOgorCiAy
MDEzLTAxLTA3ICBBbG9rIFByaXlhZGFyc2hpICA8YWxva3BAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gRml4IFBsYXRmb3JtQ29udGV4dFNraWE6OnNldERyYXdpbmdUb0ltYWdl
QnVmZmVyIGFidXNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmNwcAppbmRleCAyMDJmMDUwZjYyZDQwMzJkY2Y3ODM5MzVmMWJkMzli
YTg3ODczMWUzLi45MDVkNTlmMDdhMGIzMGMzYzI2ODYxMzdlMDIzYjdlMmY3YjE5N2M1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9y
ZS5jcHAKQEAgLTYwNSwxMyArNjA1LDE0IEBAIHN0YXRpYyBib29sIGNoZWNrT2JqZWN0U3RvcmVB
bmRNZXRhRGF0YVR5cGUoY29uc3QgTGV2ZWxEQkl0ZXJhdG9yKiBpdCwgY29uc3QgVmVjCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLVZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJCYWNr
aW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQpCitib29sIElEQkJh
Y2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgSURCRGF0YWJh
c2VNZXRhZGF0YTo6T2JqZWN0U3RvcmVNYXAqIG9iamVjdFN0b3JlcykKIHsKICAgICBJREJfVFJB
Q0UoIklEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzIik7Ci0gICAgVmVjdG9yPElEQk9i
amVjdFN0b3JlTWV0YWRhdGE+IG9iamVjdFN0b3JlczsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
c3RhcnRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgMSwg
MCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRh
S2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCk7CiAKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVz
LT5pc0VtcHR5KCkpOworCiAgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2RiLT5j
cmVhdGVJdGVyYXRvcigpOwogICAgIGl0LT5zZWVrKHN0YXJ0S2V5KTsKICAgICB3aGlsZSAoaXQt
PmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMCkgewpAQCAt
NjM2LDMzICs2MzcsMzMgQEAgVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQkJhY2tp
bmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2UKICAgICAgICAgaXQtPm5l
eHQoKTsKICAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0Lmdl
dCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpLZXlQ
YXRoKSkgewogICAgICAgICAgICAgSU5URVJOQUxfQ09OU0lTVEVOQ1lfRVJST1IoR2V0T2JqZWN0
U3RvcmVzKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIElEQktleVBhdGgga2V5UGF0aCA9IGRlY29kZUlEQktleVBhdGgo
aXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwogCiAgICAgICAgIGl0LT5u
ZXh0KCk7CiAgICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5n
ZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6QXV0
b0luY3JlbWVudCkpIHsKICAgICAgICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZX0VSUk9SKEdl
dE9iamVjdFN0b3Jlcyk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogICAgICAgICBib29sIGF1dG9JbmNyZW1lbnQgPSBkZWNvZGVCb29s
KGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKIAogICAgICAgICBpdC0+
bmV4dCgpOyAvLyBJcyBldmljYXRibGUuCiAgICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFu
ZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleTo6RXZpY3RhYmxlKSkgewogICAgICAgICAgICAgSU5URVJOQUxfQ09OU0lT
VEVOQ1lfRVJST1IoR2V0T2JqZWN0U3RvcmVzKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgaXQtPm5leHQoKTsgLy8g
TGFzdCB2ZXJzaW9uLgogICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5
cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6Okxhc3RWZXJzaW9uKSkgewogICAgICAgICAgICAgSU5URVJOQUxfQ09OU0lTVEVOQ1lfRVJS
T1IoR2V0T2JqZWN0U3RvcmVzKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgaXQtPm5leHQoKTsgLy8gTWF4aW11bSBp
bmRleCBpZCBhbGxvY2F0ZWQuCiAgICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFE
YXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6TWF4SW5kZXhJZCkpIHsKICAgICAgICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZ
X0VSUk9SKEdldE9iamVjdFN0b3Jlcyk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpbnQ2NF90IG1heEluZGV4SWQgPSBk
ZWNvZGVJbnQoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwogCkBAIC02
NzUsNyArNjc2LDcgQEAgVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQkJhY2tpbmdT
dG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2UKICAgICAgICAgICAgIC8vIFNv
IHRoaXMgY2hlY2sgaXMgb25seSByZWxldmFudCBmb3Igc3RyaW5nLXR5cGUga2V5UGF0aHMuCiAg
ICAgICAgICAgICBpZiAoIWhhc0tleVBhdGggJiYgKGtleVBhdGgudHlwZSgpID09IElEQktleVBh
dGg6OlN0cmluZ1R5cGUgJiYgIWtleVBhdGguc3RyaW5nKCkuaXNFbXB0eSgpKSkgewogICAgICAg
ICAgICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZX0VSUk9SKEdldE9iamVjdFN0b3Jlcyk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFoYXNLZXlQYXRoKQogICAgICAgICAgICAgICAg
IGtleVBhdGggPSBJREJLZXlQYXRoKCk7CkBAIC02OTEsOSArNjkyLDEyIEBAIFZlY3RvcjxJREJP
YmplY3RTdG9yZU1ldGFkYXRhPiBJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2
NF90IGRhdGFiYXNlCiAgICAgICAgICAgICBpdC0+bmV4dCgpOwogICAgICAgICB9CiAKLSAgICAg
ICAgb2JqZWN0U3RvcmVzLmFwcGVuZChJREJPYmplY3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0b3Jl
TmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgbWF4SW5kZXhJZCkp
OworICAgICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKG9iamVjdFN0b3JlTmFt
ZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgbWF4SW5kZXhJZCk7Cisg
ICAgICAgIGlmICghZ2V0SW5kZXhlcyhkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAmbWV0YWRh
dGEuaW5kZXhlcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG9iamVjdFN0
b3Jlcy0+c2V0KG9iamVjdFN0b3JlSWQsIG1ldGFkYXRhKTsKICAgICB9Ci0gICAgcmV0dXJuIG9i
amVjdFN0b3JlczsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogV0FSTl9VTlVTRURfUkVUVVJOIHN0
YXRpYyBib29sIHNldE1heE9iamVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCkBAIC05Nzks
MTQgKzk4MywxMyBAQCBzdGF0aWMgYm9vbCBjaGVja0luZGV4QW5kTWV0YURhdGFLZXkoY29uc3Qg
TGV2ZWxEQkl0ZXJhdG9yKiBpdCwgY29uc3QgVmVjdG9yPGNoYQogfQogCiAKLVZlY3RvcjxJREJJ
bmRleE1ldGFkYXRhPiBJREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCitib29sIElEQkJhY2tpbmdTdG9yZTo6Z2V0SW5k
ZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXAqIGluZGV4ZXMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJC
YWNraW5nU3RvcmU6OmdldEluZGV4ZXMiKTsKLSAgICBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4g
aW5kZXhlczsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBJbmRleE1ldGFEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCwgMCk7CiAgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCArIDEsIDAsIDApOwogCi0gICAgQVNTRVJUKGluZGV4ZXMuaXNFbXB0
eSgpKTsKKyAgICBBU1NFUlQoaW5kZXhlcy0+aXNFbXB0eSgpKTsKIAogICAgIE93blB0cjxMZXZl
bERCSXRlcmF0b3I+IGl0ID0gbV9kYi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBpdC0+c2Vlayhz
dGFydEtleSk7CkBAIC0xMDExLDE0ICsxMDE0LDE0IEBAIFZlY3RvcjxJREJJbmRleE1ldGFkYXRh
PiBJREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
CiAgICAgICAgIGl0LT5uZXh0KCk7IC8vIHVuaXF1ZSBmbGFnCiAgICAgICAgIGlmICghY2hlY2tJ
bmRleEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRleElkLCBJbmRleE1ldGFE
YXRhS2V5OjpVbmlxdWUpKSB7CiAgICAgICAgICAgICBJTlRFUk5BTF9DT05TSVNURU5DWV9FUlJP
UihHZXRJbmRleGVzKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgIGJvb2wgaW5kZXhVbmlxdWUgPSBkZWNvZGVCb29sKGl0
LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKIAogICAgICAgICBpdC0+bmV4
dCgpOyAvLyBrZXlQYXRoCiAgICAgICAgIGlmICghY2hlY2tJbmRleEFuZE1ldGFEYXRhS2V5KGl0
LmdldCgpLCBzdG9wS2V5LCBpbmRleElkLCBJbmRleE1ldGFEYXRhS2V5OjpLZXlQYXRoKSkgewog
ICAgICAgICAgICAgSU5URVJOQUxfQ09OU0lTVEVOQ1lfRVJST1IoR2V0SW5kZXhlcyk7Ci0gICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
ICAgICBJREJLZXlQYXRoIGtleVBhdGggPSBkZWNvZGVJREJLZXlQYXRoKGl0LT52YWx1ZSgpLmJl
Z2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKIApAQCAtMTAyOSw3ICsxMDMyLDcgQEAgVmVjdG9y
PElEQkluZGV4TWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3QKICAgICAgICAgICAgIGl0LT5uZXh0KCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpbmRleGVzLmFwcGVuZChJREJJbmRleE1ldGFkYXRhKGluZGV4TmFtZSwgaW5kZXhJ
ZCwga2V5UGF0aCwgaW5kZXhVbmlxdWUsIGluZGV4TXVsdGlFbnRyeSkpOworICAgICAgICBpbmRl
eGVzLT5zZXQoaW5kZXhJZCwgSURCSW5kZXhNZXRhZGF0YShpbmRleE5hbWUsIGluZGV4SWQsIGtl
eVBhdGgsIGluZGV4VW5pcXVlLCBpbmRleE11bHRpRW50cnkpKTsKICAgICB9CiAgICAgcmV0dXJu
IGluZGV4ZXM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkJhY2tpbmdTdG9yZS5oCmluZGV4IDJmOTljYTMxNzE5NjFiMDQ0MTgyYWNjYWMzYjA5MmNjZjYx
MWFlMDYuLjkyYzJkYjA0MmQ0OThjZDdlNjRhMDllOTMxYzMzZGJhNjU1ODFlMDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCkBA
IC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJh
c2VJbnRWZXJzaW9uKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IHJvd0lk
LCBpbnQ2NF90IGludFZlcnNpb24pOwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShj
b25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgdmlydHVhbCBWZWN0b3I8SURCT2JqZWN0U3RvcmVN
ZXRhZGF0YT4gZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCk7CisgICAgYm9vbCBn
ZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBJREJEYXRhYmFzZU1ldGFkYXRhOjpP
YmplY3RTdG9yZU1hcCopIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2aXJ0dWFsIGJvb2wgY3Jl
YXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpOwogICAgIHZpcnR1YWwgYm9vbCBkZWxl
dGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIApAQCAt
ODUsNyArODUsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2Vu
ZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUsIGJv
b2wgY2hlY2tDdXJyZW50KSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdmlydHVhbCBib29sIGtl
eUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNv
cmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIsIGJvb2wmIGZvdW5kKSBXQVJOX1VO
VVNFRF9SRVRVUk47CiAKLSAgICB2aXJ0dWFsIFZlY3RvcjxJREJJbmRleE1ldGFkYXRhPiBnZXRJ
bmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKICAgICB2
aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJv
b2wgaXNNdWx0aUVudHJ5KTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwogICAgIHZpcnR1YWwgdm9pZCBwdXRJbmRleERhdGFG
b3JSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYs
IGNvbnN0IFJlY29yZElkZW50aWZpZXImKTsKQEAgLTE2OSw2ICsxNjgsNyBAQCBwcm90ZWN0ZWQ6
CiAKIHByaXZhdGU6CiAgICAgYm9vbCBmaW5kS2V5SW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQ
cmltYXJ5S2V5LCBib29sJiBmb3VuZCk7CisgICAgYm9vbCBnZXRJbmRleGVzKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJ
bmRleE1hcCopIFdBUk5fVU5VU0VEX1JFVFVSTjsKIAogICAgIFN0cmluZyBtX2lkZW50aWZpZXI7
CiAgICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW1wbD4gbV9mYWN0b3J5OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZElt
cGwuY3BwCmluZGV4IGZlYWI1YzVlM2EzNjQ1ZjA5OTQ0MDA5YjAzYzlmY2Q2MDRkYzZiMWEuLjY0
YzRhYWI2ZjM2ZTcyOTNlNWY2YTVhYmYyZmQzMGI4MGU0OGFmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5j
cHAKQEAgLTMwLDEwICszMCwxMCBAQAogCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCiAj
aW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKICNpbmNsdWRlICJJREJEYXRhYmFz
ZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5jbHVkZSAiSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKICNpbmNsdWRl
ICJJREJUcmFjaW5nLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFj
a2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJh
Y2tlbmRJbXBsLmgKaW5kZXggOTY2OGRmZDNhNDYzMWUzMzhmNDdlMzU0NzYzNzFmMTYxNjZmYzNj
MS4uNzEyYzJiNDMxNTc3MzA0Mzc5Y2JjMzkyMzVlYTY1N2RhMWUxMjI4MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1w
bC5oCkBAIC00MSw5ICs0MSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQkRh
dGFiYXNlQmFja2VuZEltcGw7Ci1jbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOwogY2xhc3MgSURC
S2V5UmFuZ2U7Ci1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOwogCiBjbGFzcyBJREJD
dXJzb3JCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlIHsKIHB1
YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
LmNwcAppbmRleCBlYmRlMGYxNDYzMmNkNjBiNjQxMmFhOGQ3NzdhZDk2M2JlNGUzYmYyLi43NDY0
NmQwMDgxNzVkYmE0ZTE1Yzk0N2QxNTI2OTk5OTI3ZGFmZmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0xODQsMTQgKzE4NCwx
MCBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0
U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjbwogICAgIH0KIAogICAgIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCA9IG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCArIDE7Ci0gICAgUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmVCYWNrZW5kID0gbV9iYWNr
ZW5kLT5jcmVhdGVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkLCBuYW1lLCBrZXlQYXRoLCBhdXRv
SW5jcmVtZW50LCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0g
ICAgaWYgKCFvYmplY3RTdG9yZUJhY2tlbmQpIHsKLSAgICAgICAgQVNTRVJUKGVjKTsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIG1fYmFja2VuZC0+Y3JlYXRlT2JqZWN0U3RvcmUobV92
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlkKCksIG9iamVjdFN0b3JlSWQsIG5hbWUsIGtleVBh
dGgsIGF1dG9JbmNyZW1lbnQpOwogCiAgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtZXRhZGF0
YShuYW1lLCBvYmplY3RTdG9yZUlkLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U6Ok1pbmltdW1JbmRleElkKTsKLSAgICBSZWZQdHI8SURCT2Jq
ZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YSwg
b2JqZWN0U3RvcmVCYWNrZW5kLnJlbGVhc2UoKSwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24u
Z2V0KCkpOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBJREJPYmpl
Y3RTdG9yZTo6Y3JlYXRlKG1ldGFkYXRhLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQo
KSk7CiAgICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG1ldGFkYXRhLmlkLCBtZXRhZGF0
YSk7CiAgICAgKyttX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQ7CiAKQEAgLTIxNiwxMSArMjEy
LDkgQEAgdm9pZCBJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1f
YmFja2VuZC0+ZGVsZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCwgbV92ZXJzaW9uQ2hhbmdl
VHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmICghZWMpIHsKLSAgICAgICAgbV92
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlRGVsZXRlZChuYW1lKTsKLSAgICAg
ICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlSWQpOwotICAgIH0K
KyAgICBtX2JhY2tlbmQtPmRlbGV0ZU9iamVjdFN0b3JlKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uLT5pZCgpLCBvYmplY3RTdG9yZUlkKTsKKyAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
bi0+b2JqZWN0U3RvcmVEZWxldGVkKG5hbWUpOworICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVz
LnJlbW92ZShvYmplY3RTdG9yZUlkKTsKIH0KIAogUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4g
SURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzY29wZSwgY29uc3QgU3RyaW5nJiBtb2RlU3RyaW5nLCBF
eGNlcHRpb25Db2RlJiBlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggMGQxZGRiMGRmZWJj
MDVkY2U1MDdiZTA5ZDQyMWMyNmQyNjhiNGUwZS4uNjRlNGZlYzI3NTdlYzhmY2ZlNjk2NDcyNjc3
OTg2YzVmZDBkNTIyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTMyLDcgKzMyLDYgQEAK
ICNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNl
RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVk
ZSAiSURCSW5kZXhCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuaCIKICNpbmNsdWRlICJJREJUcmFjaW5nLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5oIgpAQCAtNDAsNDAgKzM5LDQwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVy
YXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK2Ns
YXNzIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gYmFja2luZ1N0b3JlLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RT
dG9yZU1ldGFkYXRhKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVP
YmplY3RTdG9yZU9wZXJhdGlvbihkYXRhYmFzZSwgb2JqZWN0U3RvcmUpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihiYWNraW5nU3RvcmUs
IG9iamVjdFN0b3JlTWV0YWRhdGEpKTsKICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0o
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwogcHJpdmF0ZToKLSAgICBDcmVhdGVPYmplY3RT
dG9yZU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQotICAg
ICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCi0gICAgICAgICwgbV9vYmplY3RTdG9yZShvYmpl
Y3RTdG9yZSkKKyAgICBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBv
YmplY3RTdG9yZU1ldGFkYXRhKQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9y
ZSkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlTWV0YWRhdGEob2JqZWN0U3RvcmVNZXRhZGF0YSkK
ICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0
YWJhc2U7Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3Rv
cmU7CisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Cisg
ICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7CiB9
OwogCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZU9wZXJh
dGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworY2xh
c3MgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0
b3JlTWV0YWRhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZU9i
amVjdFN0b3JlT3BlcmF0aW9uKGRhdGFiYXNlLCBvYmplY3RTdG9yZSkpOworICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwg
b2JqZWN0U3RvcmVNZXRhZGF0YSkpOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CiBwcml2YXRlOgotICAgIERlbGV0ZU9iamVjdFN0
b3JlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2Us
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCi0gICAg
ICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlKG9iamVj
dFN0b3JlKQorICAgIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlTWV0YWRhdGEpCisgICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3Jl
KQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RTdG9yZU1ldGFkYXRhKQog
ICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRh
YmFzZTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9y
ZTsKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAg
ICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsKIH07
CiAKIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24g
OiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKQEAgLTEwMCw0
MCArOTksNDAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IG1f
ZGF0YWJhc2VDYWxsYmFja3M7CiB9OwogCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpD
cmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbiB7CitjbGFzcyBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0
aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3Bl
cmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFz
ZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+
IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENy
ZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlv
bihkYXRhYmFzZSwgb2JqZWN0U3RvcmVJZCkpOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CiBwcml2YXRlOgotICAgIENyZWF0ZU9i
amVjdFN0b3JlQWJvcnRPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RT
dG9yZSkKKyAgICBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKICAg
ICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2Jq
ZWN0U3RvcmUpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCiAgICAg
ewogICAgIH0KIAotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNl
OwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwor
ICAgIGNvbnN0IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOworICAg
IGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwogfTsKIAotY2xhc3MgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworY2xhc3MgRGVsZXRlT2JqZWN0U3Rv
cmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVy
YXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
SW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2Jq
ZWN0U3RvcmUpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBk
YXRhYmFzZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUpCiAgICAg
ewogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVy
YXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlKSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgRGVsZXRl
T2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElt
cGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlKQorICAgIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKICAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNl
KQotICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCisgICAgICAgICwgbV9vYmpl
Y3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0b3JlTWV0YWRhdGEpCiAgICAgewogICAgIH0KIAogICAg
IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOwotICAgIFJlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOworICAgIElEQk9iamVjdFN0
b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9yZU1ldGFkYXRhOwogfTsKIAogY2xhc3MgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CkBAIC0xNTYsNiArMTU1LDg2IEBAIHBy
aXZhdGU6CiAgICAgaW50NjRfdCBtX3ByZXZpb3VzSW50VmVyc2lvbjsKIH07CiAKK2NsYXNzIENy
ZWF0ZUluZGV4T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9w
ZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+
IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFk
YXRhJiBpbmRleE1ldGFkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
cmVhdGVJbmRleE9wZXJhdGlvbihiYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0
YWRhdGEpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCopOworcHJpdmF0ZToKKyAgICBDcmVhdGVJbmRleE9wZXJhdGlvbihQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCisgICAgICAgIDogbV9iYWNr
aW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RT
dG9yZUlkKQorICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQorICAgIHsK
KyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9y
ZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBJREJJbmRl
eE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKK307CisKK2NsYXNzIERlbGV0ZUluZGV4T3BlcmF0
aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3Bl
cmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZUluZGV4T3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Citwcml2YXRlOgorICAgIERlbGV0ZUluZGV4T3Bl
cmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQorICAgICAgICA6IG1fYmFja2luZ1N0b3Jl
KGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkK
KyAgICAgICAgLCBtX2luZGV4SWQoaW5kZXhJZCkKKyAgICB7CisgICAgfQorCisgICAgY29uc3Qg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgaW50NjRf
dCBtX29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgaW50NjRfdCBtX2luZGV4SWQ7Cit9OworCitj
bGFzcyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZUlu
ZGV4QWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKTsKKyAg
ICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCop
OworcHJpdmF0ZToKKyAgICBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkKQorICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgICAgICwg
bV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4
SWQpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiBtX2RhdGFiYXNlOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAg
IGNvbnN0IGludDY0X3QgbV9pbmRleElkOworfTsKKworY2xhc3MgRGVsZXRlSW5kZXhBYm9ydE9w
ZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0
YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5k
ZXhNZXRhZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlSW5k
ZXhBYm9ydE9wZXJhdGlvbihkYXRhYmFzZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkp
OworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKik7Citwcml2YXRlOgorICAgIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24oUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgICAgICA6IG1fZGF0
YWJhc2UoZGF0YWJhc2UpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQp
CisgICAgICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAgeworICAgIH0K
KworICAgIGNvbnN0IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOwor
ICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEgbV9pbmRleE1ldGFkYXRhOworfTsKKwogY2xhc3MgR2V0T3BlcmF0aW9uIDogcHVibGlj
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgY29uc3QgSURCRGF0
YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKQpAQCAtMTc1LDYgKzI1NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICwgbV9j
dXJzb3JUeXBlKGN1cnNvclR5cGUpCiAgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQog
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmpl
Y3RTdG9yZUlkKSk7CiAgICAgICAgIEFTU0VSVChtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9i
amVjdFN0b3JlSWQpLmlkID09IG9iamVjdFN0b3JlSWQpOwogICAgIH0KIApAQCAtNDA1LDYgKzQ4
NSw0NiBAQCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNv
bnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0bwogICAgIEFTU0VSVCghbV9tZXRhZGF0YS5u
YW1lLmlzTnVsbCgpKTsKIH0KIAordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRPYmpl
Y3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgaW50NjRf
dCBuZXdNYXhPYmplY3RTdG9yZUlkKQoreworICAgIEFTU0VSVCghbV9tZXRhZGF0YS5vYmplY3RT
dG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmUuaWQpKTsKKyAgICBpZiAobmV3TWF4T2JqZWN0U3Rv
cmVJZCAhPSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgQVNT
RVJUKG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCA8IG5ld01heE9iamVjdFN0b3JlSWQpOwor
ICAgICAgICBtX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQgPSBuZXdNYXhPYmplY3RTdG9yZUlk
OworICAgIH0KKyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmUuaWQs
IG9iamVjdFN0b3JlKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVP
YmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAgQVNTRVJUKG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBtX21ldGFkYXRh
Lm9iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmVJZCk7Cit9CisKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6YWRkSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJ
bmRleE1ldGFkYXRhJiBpbmRleCwgaW50NjRfdCBuZXdNYXhJbmRleElkKQoreworICAgIEFTU0VS
VChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3Rv
cmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVCghb2JqZWN0U3RvcmUuaW5kZXhl
cy5jb250YWlucyhpbmRleC5pZCkpOworICAgIG9iamVjdFN0b3JlLmluZGV4ZXMuc2V0KGluZGV4
LmlkLCBpbmRleCk7CisgICAgaWYgKG5ld01heEluZGV4SWQgIT0gSURCSW5kZXhNZXRhZGF0YTo6
SW52YWxpZElkKSB7CisgICAgICAgIEFTU0VSVChvYmplY3RTdG9yZS5tYXhJbmRleElkIDwgbmV3
TWF4SW5kZXhJZCk7CisgICAgICAgIG9iamVjdFN0b3JlLm1heEluZGV4SWQgPSBuZXdNYXhJbmRl
eElkOworICAgIH0KKyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVJ
ZCwgb2JqZWN0U3RvcmUpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92
ZUluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQoreworICAgIEFT
U0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Cisg
ICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0
U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZS5pbmRl
eGVzLmNvbnRhaW5zKGluZGV4SWQpKTsKKyAgICBvYmplY3RTdG9yZS5pbmRleGVzLnJlbW92ZShp
bmRleElkKTsKKyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVJZCwg
b2JqZWN0U3RvcmUpOworfQorCiBib29sIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5JbnRl
cm5hbCgpCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CkBAIC00MTIsMTAgKzUzMiw4IEBA
IGJvb2wgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKCkKICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKHN1Y2Nlc3MgPT0gKG1fbWV0YWRhdGEuaWQgIT0gSW52YWxpZElkKSwgInN1
Y2Nlc3MgPSAlcywgbV9pZCA9ICVsbGQiLCBzdWNjZXNzID8gInRydWUiIDogImZhbHNlIiwgc3Rh
dGljX2Nhc3Q8bG9uZyBsb25nPihtX21ldGFkYXRhLmlkKSk7CiAgICAgaWYgKCFvaykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdWNjZXNzKSB7Ci0gICAgICAgIGxvYWRPYmplY3RT
dG9yZXMoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChzdWNjZXNzKQor
ICAgICAgICByZXR1cm4gbG9hZE9iamVjdFN0b3JlcygpOwogICAgIHJldHVybiBtX2JhY2tpbmdT
dG9yZS0+Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShtX21ldGFkYXRhLm5hbWUsIG1fbWV0YWRh
dGEudmVyc2lvbiwgbV9tZXRhZGF0YS5pbnRWZXJzaW9uLCBtX21ldGFkYXRhLmlkKTsKIH0KIApA
QCAtNDMwLDY0ICs1NDgsMTEyIEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpiYWNraW5nU3RvcmUoKSBjb25zdAogCiBJREJEYXRhYmFzZU1ldGFk
YXRhIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKIHsKLSAgICAvLyBG
SVhNRTogRmlndXJlIG91dCBhIHdheSB0byBrZWVwIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdl
dChOKS5pbmRleGVzIHVwIHRvIGRhdGUgcmF0aGVyIHRoYW4gcmVnZW5lcmF0aW5nIHRoaXMgZXZl
cnkgdGltZS4KLSAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fbWV0YWRhdGEpOwot
ICAgIGZvciAoT2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9y
ZXMuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1l
dGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQoaXQtPnZhbHVlLT5pZCgpLCBpdC0+dmFsdWUtPm1ldGFk
YXRhKCkpOwotICAgIHJldHVybiBtZXRhZGF0YTsKKyAgICByZXR1cm4gbV9tZXRhZGF0YTsKIH0K
IAotUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQogewot
ICAgIEFTU0VSVCghbV9vYmplY3RTdG9yZXMuY29udGFpbnMoaWQpKTsKLQotICAgIFJlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhKG5hbWUsIGlkLCBr
ZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6Ok1p
bmltdW1JbmRleElkKSk7Ci0gICAgQVNTRVJUKG9iamVjdFN0b3JlLT5uYW1lKCkgPT0gbmFtZSk7
CisgICAgSURCX1RSQUNFKCJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9y
ZSIpOworICAgIEFTU0VSVCghbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0
U3RvcmVJZCkpOwogCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5z
YWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7
Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJ
T05fQ0hBTkdFKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rp
b25JZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwogCi0gICAgLy8gRklYTUU6IEZpeCBlZGdl
IGNhc2VzIGFyb3VuZCB0cmFuc2FjdGlvbiBhYm9ydHMgdGhhdCBwcmV2ZW50IHRoaXMgZnJvbSBq
dXN0IGJlaW5nIEFTU0VSVChpZCA9PSBtX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQgKyAxKQot
ICAgIEFTU0VSVChpZCA+IG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCk7Ci0gICAgbV9tZXRh
ZGF0YS5tYXhPYmplY3RTdG9yZUlkID0gaWQ7CisgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBv
YmplY3RTdG9yZU1ldGFkYXRhKG5hbWUsIG9iamVjdFN0b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNy
ZW1lbnQsIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6TWluaW11bUluZGV4SWQpOwog
Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENyZWF0ZU9iamVjdFN0b3JlT3Bl
cmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmUpLCBDcmVhdGVPYmplY3RTdG9yZUFib3J0
T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmUpKSkgewotICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENyZWF0ZU9iamVj
dFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlTWV0YWRh
dGEpLCBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0
U3RvcmVJZCkpOwogCi0gICAgbV9vYmplY3RTdG9yZXMuc2V0KGlkLCBvYmplY3RTdG9yZSk7Ci0g
ICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKKyAgICBhZGRPYmplY3RTdG9yZShvYmpl
Y3RTdG9yZU1ldGFkYXRhLCBvYmplY3RTdG9yZUlkKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKK3ZvaWQgQ3JlYXRlT2JqZWN0U3RvcmVPcGVy
YXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7
CiAgICAgSURCX1RSQUNFKCJDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbiIpOwotICAgIGlmICgh
bV9kYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9u
LT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlLT5pZCgpLCBtX29iamVjdFN0
b3JlLT5pZCgpLCBtX29iamVjdFN0b3JlLT5uYW1lKCksIG1fb2JqZWN0U3RvcmUtPmtleVBhdGgo
KSwgbV9vYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpKSkgewotICAgICAgICBSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9y
IGNyZWF0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIsIG1fb2JqZWN0U3RvcmUtPm5hbWUoKS51dGY4
KCkuZGF0YSgpKSk7CisgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUo
dHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIHRyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpLT5pZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuaWQsIG1fb2JqZWN0U3RvcmVNZXRh
ZGF0YS5uYW1lLCBtX29iamVjdFN0b3JlTWV0YWRhdGEua2V5UGF0aCwgbV9vYmplY3RTdG9yZU1l
dGFkYXRhLmF1dG9JbmNyZW1lbnQpKSB7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9y
PiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3IgY3JlYXRpbmcgb2Jq
ZWN0IHN0b3JlICclcycuIiwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEo
KSkpOwogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IucmVsZWFzZSgpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShpbnQ2NF90IGlkKQordm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RT
dG9yZXMuZ2V0KGlkKTsKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRl
bGV0ZU9iamVjdFN0b3JlIik7CisgICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNv
bnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
JiBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVj
dFN0b3JlSWQpOworCisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0
aW9uSWQpKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1f
dHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24t
Pm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOworCisgICAgdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKG1f
YmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSwgIERlbGV0ZU9iamVjdFN0b3JlQWJv
cnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7CisgICAgcmVt
b3ZlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRy
eSkKIHsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZXMuY29udGFpbnMoaWQpKTsKKyAgICBJREJf
VFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4Iik7CisgICAgQVNTRVJU
KG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gbV9vYmplY3RTdG9yZXMuZ2V0KGlkKTsKLSAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKKyAgICBBU1NFUlQoIW9iamVj
dFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkpOworICAgIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEgaW5kZXhNZXRhZGF0YShuYW1lLCBpbmRleElkLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRp
RW50cnkpOworCisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9u
SWQpKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJh
bnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKICAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1v
ZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOwogCi0gICAgaWYgKCF0cmFu
c2FjdGlvbi0+c2NoZWR1bGVUYXNrKERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUo
dGhpcywgb2JqZWN0U3RvcmUpLCBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVh
dGUodGhpcywgb2JqZWN0U3RvcmUpKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxl
VGFzayhDcmVhdGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBvYmplY3RT
dG9yZUlkLCBpbmRleE1ldGFkYXRhKSwgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRl
KHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKTsKKworICAgIGFkZEluZGV4KG9iamVjdFN0
b3JlSWQsIGluZGV4TWV0YWRhdGEsIGluZGV4SWQpOworfQorCisKK3ZvaWQgQ3JlYXRlSW5kZXhP
cGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24p
Cit7CisgICAgSURCX1RSQUNFKCJDcmVhdGVJbmRleE9wZXJhdGlvbiIpOworICAgIGlmICghbV9i
YWNraW5nU3RvcmUtPmNyZWF0ZUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+aWQoKSwgbV9vYmplY3RTdG9yZUlkLCBt
X2luZGV4TWV0YWRhdGEuaWQsIG1faW5kZXhNZXRhZGF0YS5uYW1lLCBtX2luZGV4TWV0YWRhdGEu
a2V5UGF0aCwgbV9pbmRleE1ldGFkYXRhLnVuaXF1ZSwgbV9pbmRleE1ldGFkYXRhLm11bHRpRW50
cnkpKSB7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIklu
dGVybmFsIGVycm9yIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZSBpbmRleCAnJXMnLiIsIG1faW5kZXhN
ZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgbV9vYmplY3RTdG9yZXMucmVtb3ZlKGlkKTsKK30KKwordm9pZCBDcmVhdGVJbmRleEFib3J0
T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9u
KQoreworICAgIElEQl9UUkFDRSgiQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbiIpOworICAgIEFT
U0VSVCghdHJhbnNhY3Rpb24pOworICAgIG1fZGF0YWJhc2UtPnJlbW92ZUluZGV4KG1fb2JqZWN0
U3RvcmVJZCwgbV9pbmRleElkKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpk
ZWxldGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkKQoreworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6ZGVsZXRlSW5kZXgiKTsKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29u
dGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEg
b2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7
CisKKyAgICBBU1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7Cisg
ICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IG9iamVjdFN0b3JlLmlu
ZGV4ZXMuZ2V0KGluZGV4SWQpOworCisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5z
KHRyYW5zYWN0aW9uSWQpKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2Fj
dGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBBU1NFUlQodHJh
bnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOworCisg
ICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhEZWxldGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRl
KG1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSwgRGVsZXRlSW5kZXhBYm9y
dE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsK
KworICAgIHJlbW92ZUluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOworfQorCit2b2lkIERl
bGV0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRy
YW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiRGVsZXRlSW5kZXhPcGVyYXRpb24iKTsKKyAg
ICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlSW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5pZCgpLCBtX29iamVjdFN0b3Jl
SWQsIG1faW5kZXhJZCk7Cit9CisKK3ZvaWQgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJf
VFJBQ0UoIkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24iKTsKKyAgICBBU1NFUlQoIXRyYW5zYWN0
aW9uKTsKKyAgICBtX2RhdGFiYXNlLT5hZGRJbmRleChtX29iamVjdFN0b3JlSWQsIG1faW5kZXhN
ZXRhZGF0YSwgSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKTsKIH0KIAogdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpjb21taXQoaW50NjRfdCB0cmFuc2FjdGlvbklkKQpAQCAtNTA4LDcg
KzY3NCw3IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Z2V0KGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpCiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rp
b25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKIAot
ICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soR2V0T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNr
aW5nU3RvcmUsIG1ldGFkYXRhKCksIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBr
ZXlPbmx5ID8gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5T25seSA6IElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U6OktleUFuZFZhbHVlLCBjYWxsYmFja3MpKTsKKyAgICB0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKEdldE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBtX21l
dGFkYXRhLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwga2V5T25seSA/IElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleU9ubHkgOiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
OjpLZXlBbmRWYWx1ZSwgY2FsbGJhY2tzKSk7CiB9CiAKIHZvaWQgR2V0T3BlcmF0aW9uOjpwZXJm
b3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQpAQCAtNjA3LDcgKzc3
Myw3IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHV0KGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBWCiAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CiAg
ICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05M
WSk7CiAKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlTWV0YWRh
dGEgPSBtZXRhZGF0YSgpLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisgICAgY29u
c3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0
YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwogCiAgICAgQVNTRVJUKG9iamVjdFN0
b3JlTWV0YWRhdGEuYXV0b0luY3JlbWVudCB8fCBrZXkuZ2V0KCkpOwogCkBAIC03MTUsOCArODgx
LDggQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFMKICAgICBWZWN0b3I8T3duUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKICAgICBTdHJp
bmcgZXJyb3JNZXNzYWdlOwogICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNlOwotICAg
IEFTU0VSVChtZXRhZGF0YSgpLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7
Ci0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9
IG1ldGFkYXRhKCkub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKyAgICBBU1NFUlQo
bV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBtX21ldGFk
YXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CiAgICAgYm9vbCBiYWNraW5nU3Rv
cmVTdWNjZXNzID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bWFrZUluZGV4V3JpdGVycyh0
cmFuc2FjdGlvbiwgc3RvcmUuZ2V0KCksIGlkKCksIG9iamVjdFN0b3JlTWV0YWRhdGEsIHByaW1h
cnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JN
ZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKICAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3Mp
IHsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tp
bmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7CkBAIC04MDMsNyArOTY5LDcg
QEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjb3VudChpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwKICAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmNvdW50Iik7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRy
YW5zYWN0aW9uSWQpKTsKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlv
biA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBBU1NFUlQobWV0YWRh
dGEoKS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIEFTU0VSVCht
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CiAgICAgdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzayhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0
b3JlLCBpZCgpLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7
CiB9CiAKQEAgLTg0Myw3ICsxMDA5LDYgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpk
ZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3QKIHZvaWQg
RGVsZXRlUmFuZ2VPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCog
dHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJEZWxldGVSYW5nZU9wZXJhdGlvbiIpOwot
CiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3Ig
PSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9r
ZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKICAgICBpZiAoYmFja2luZ1N0b3JlQ3Vy
c29yKSB7CiAgICAgICAgIGRvIHsKQEAgLTg3MiwxMiArMTAzNywxMiBAQCB2b2lkIENsZWFyT3Bl
cmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQog
ICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKK3ZvaWQgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRp
b246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7CiAg
ICAgSURCX1RSQUNFKCJEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbiIpOwotICAgIGJvb2wgb2sg
PSBtX2RhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2UtPmlkKCksIG1fb2JqZWN0
U3RvcmUtPmlkKCkpOworICAgIGJvb2wgb2sgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0
U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIHRyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLT5pZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuaWQpOwogICAgIGlmICgh
b2spIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmlu
Zzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBkZWxldGluZyBvYmplY3Qgc3RvcmUgJyVzJy4iLCBt
X29iamVjdFN0b3JlLT5uYW1lKCkudXRmOCgpLmRhdGEoKSkpOworICAgICAgICBSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9y
IGRlbGV0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5uYW1l
LnV0ZjgoKS5kYXRhKCkpKTsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKICAg
ICB9CiB9CkBAIC0xMTMyLDcgKzEyOTcsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmRlbGV0ZURhdGFiYXNlRmluYWwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYQogICAg
IG1fbWV0YWRhdGEudmVyc2lvbiA9IE5vU3RyaW5nVmVyc2lvbjsKICAgICBtX21ldGFkYXRhLmlk
ID0gSW52YWxpZElkOwogICAgIG1fbWV0YWRhdGEuaW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0
YWRhdGE6Ok5vSW50VmVyc2lvbjsKLSAgICBtX29iamVjdFN0b3Jlcy5jbGVhcigpOworICAgIG1f
bWV0YWRhdGEub2JqZWN0U3RvcmVzLmNsZWFyKCk7CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
KTsKIH0KIApAQCAtMTE3NywzNSArMTM0MiwyOSBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OmNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENhbGxiYWNrcwog
ICAgIG1fY2xvc2luZ0Nvbm5lY3Rpb24gPSBmYWxzZTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKK2Jvb2wgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6bG9hZE9iamVjdFN0b3JlcygpCiB7Ci0gICAgVmVjdG9yPGludDY0X3Q+IGlkczsKLSAgICBW
ZWN0b3I8U3RyaW5nPiBuYW1lczsKLSAgICBWZWN0b3I8SURCS2V5UGF0aD4ga2V5UGF0aHM7Ci0g
ICAgVmVjdG9yPGJvb2w+IGF1dG9JbmNyZW1lbnRGbGFnczsKLSAgICBWZWN0b3I8aW50NjRfdD4g
bWF4SW5kZXhJZHM7Ci0gICAgVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IG9iamVjdFN0
b3JlcyA9IG1fYmFja2luZ1N0b3JlLT5nZXRPYmplY3RTdG9yZXMobV9tZXRhZGF0YS5pZCk7Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFN0b3Jlcy5zaXplKCk7IGkrKykKLSAg
ICAgICAgbV9vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3Jlc1tpXS5pZCwgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3Jlc1tpXSkpOworICAgIG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmNsZWFyKCk7CisgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5n
ZXRPYmplY3RTdG9yZXMobV9tZXRhZGF0YS5pZCwgJm1fbWV0YWRhdGEub2JqZWN0U3RvcmVzKTsK
IH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0
T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9u
KQordm9pZCBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogeworICAgIElEQl9UUkFDRSgiQ3JlYXRl
T2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiIpOwogICAgIEFTU0VSVCghdHJhbnNhY3Rpb24pOwot
ICAgIEFTU0VSVChtX2RhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlucyhtX29iamVjdFN0
b3JlLT5pZCgpKSk7Ci0gICAgbV9kYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMucmVtb3ZlKG1fb2Jq
ZWN0U3RvcmUtPmlkKCkpOworICAgIG1fZGF0YWJhc2UtPnJlbW92ZU9iamVjdFN0b3JlKG1fb2Jq
ZWN0U3RvcmVJZCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6RGVsZXRlT2Jq
ZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KiB0cmFuc2FjdGlvbikKK3ZvaWQgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKKyAgICBJREJf
VFJBQ0UoIkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24iKTsKICAgICBBU1NFUlQoIXRy
YW5zYWN0aW9uKTsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRh
aW5zKG1fb2JqZWN0U3RvcmUtPmlkKCkpKTsKLSAgICBtX2RhdGFiYXNlLT5tX29iamVjdFN0b3Jl
cy5zZXQobV9vYmplY3RTdG9yZS0+aWQoKSwgbV9vYmplY3RTdG9yZSk7CisgICAgbV9kYXRhYmFz
ZS0+YWRkT2JqZWN0U3RvcmUobV9vYmplY3RTdG9yZU1ldGFkYXRhLCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhOjpJbnZhbGlkSWQpOwogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZl
cnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKiB0cmFuc2FjdGlvbikKIHsKKyAgICBJREJfVFJBQ0UoIlZlcnNpb25DaGFuZ2VBYm9ydE9w
ZXJhdGlvbiIpOwogICAgIEFTU0VSVCghdHJhbnNhY3Rpb24pOwogICAgIG1fZGF0YWJhc2UtPm1f
bWV0YWRhdGEudmVyc2lvbiA9IG1fcHJldmlvdXNWZXJzaW9uOwogICAgIG1fZGF0YWJhc2UtPm1f
bWV0YWRhdGEuaW50VmVyc2lvbiA9IG1fcHJldmlvdXNJbnRWZXJzaW9uOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5oCmluZGV4IDk0NGI4MzAwYzdlMzIyM2JkZDM0NGJiNWJhODFkMWMzYjE0ZmExNjIuLmRlODJj
M2Q0MDkzYWE4YjU1OWJhNzY0ZDVlM2JmNThhZDU0YWVlNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgK
QEAgLTQwLDcgKzQwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCQmFja2luZ1N0
b3JlOwogY2xhc3MgSURCRGF0YWJhc2U7CiBjbGFzcyBJREJGYWN0b3J5QmFja2VuZEltcGw7Ci1j
bGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOwogY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDsKIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKIGNsYXNzIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CkBAIC01NCwxNiArNTMsMjAgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKICAgICBpbnQ2NF90IGlkKCkg
Y29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5pZDsgfQorICAgIHZvaWQgYWRkT2JqZWN0U3RvcmUo
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIGludDY0X3QgbmV3TWF4T2JqZWN0U3RvcmVJ
ZCk7CisgICAgdm9pZCByZW1vdmVPYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwor
ICAgIHZvaWQgYWRkSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1l
dGFkYXRhJiwgaW50NjRfdCBuZXdNYXhJbmRleElkKTsKKyAgICB2b2lkIHJlbW92ZUluZGV4KGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKIAogICAgIHZvaWQgb3BlbkNv
bm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24pOwogICAg
IHZvaWQgZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAogICAgIC8v
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZQogICAgIHZpcnR1YWwgSURCRGF0YWJhc2VNZXRh
ZGF0YSBtZXRhZGF0YSgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgaWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9v
bCBhdXRvSW5jcmVtZW50KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2
b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3Rv
cmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGlkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSAgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50KTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpOwogICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBtZXRob2QgaW4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzkyMy4KICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVUcmFuc2FjdGlv
bihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3Rv
cmVJZHMsIElEQlRyYW5zYWN0aW9uOjpNb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVHJh
bnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgdW5zaWduZWQg
c2hvcnQgbW9kZSk7CkBAIC03MiwxMCArNzUsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydChp
bnQ2NF90IHRyYW5zYWN0aW9uSWQpOwogCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUluZGV4KGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBi
b29sIG11bHRpRW50cnkpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktl
eVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCk7CiAKLSAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG9iamVjdFN0b3JlKGludDY0X3QgaWQpOwogICAgIElEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KICAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZChQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKICAgICB2b2lkIHRyYW5zYWN0aW9u
RmluaXNoZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CkBAIC05Niwy
MCArOTgsMTYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgb3BlbkludGVybmFsKCk7CiAgICAgdm9p
ZCBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pOwotICAgIHZvaWQgbG9hZE9iamVjdFN0b3Jlcygp
OworICAgIGJvb2wgbG9hZE9iamVjdFN0b3JlcygpOwogICAgIHNpemVfdCBjb25uZWN0aW9uQ291
bnQoKTsKICAgICB2b2lkIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKIAogICAgIGJvb2wgaXNEZWxl
dGVEYXRhYmFzZUJsb2NrZWQoKTsKICAgICB2b2lkIGRlbGV0ZURhdGFiYXNlRmluYWwoUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+KTsKIAotICAgIGNsYXNzIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0
aW9uOwotICAgIGNsYXNzIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOwogICAgIGNsYXNzIFZl
cnNpb25DaGFuZ2VPcGVyYXRpb247CiAKICAgICAvLyBXaGVuIGEgInZlcnNpb25jaGFuZ2UiIHRy
YW5zYWN0aW9uIGFib3J0cywgdGhlc2UgcmVzdG9yZSB0aGUgYmFjay1lbmQgb2JqZWN0IGhpZXJh
cmNoeS4KLSAgICBjbGFzcyBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOwotICAgIGNs
YXNzIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb247CiAgICAgY2xhc3MgVmVyc2lvbkNo
YW5nZUFib3J0T3BlcmF0aW9uOwogCiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNr
aW5nU3RvcmU7CkBAIC0xMTksOSArMTE3LDYgQEAgcHJpdmF0ZToKICAgICAvLyBUaGlzIG1pZ2h0
IG5vdCBuZWVkIHRvIGJlIGEgUmVmUHRyIHNpbmNlIHRoZSBmYWN0b3J5J3MgbGlmZXRpbWUgaXMg
dGhhdCBvZiB0aGUgcGFnZSBncm91cCwgYnV0IGl0J3MgYmV0dGVyIHRvIGJlIGNvbnNlcnZpdGl2
ZSB0aGFuIHNvcnJ5LgogICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2VuZEltcGw+IG1fZmFjdG9y
eTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gPiBPYmplY3RTdG9yZU1hcDsKLSAgICBPYmplY3RTdG9yZU1hcCBtX29iamVj
dFN0b3JlczsKLQogICAgIE93blB0cjxJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBtX3RyYW5z
YWN0aW9uQ29vcmRpbmF0b3I7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk0MGM1ZTdlMThiYmE0YTgwNTU2NGU0YmU4NDZm
OTMyNDczYjgxYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJJ
REJDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW1wbC5oIgotI2luY2x1
ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2Vw
dGlvbi5oIgotI2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0j
aW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmgiCi0jaW5jbHVkZSAiSURCVHJhY2luZy5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JREJJbmRleEJhY2tlbmRJ
bXBsOjpJREJJbmRleEJhY2tlbmRJbXBsKGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRh
dGFiYXNlLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBtZXRhZGF0YSkKLSAgICA6IG1fZGF0YWJh
c2UoZGF0YWJhc2UpCi0gICAgLCBtX21ldGFkYXRhKG1ldGFkYXRhKQotewotfQotCi1JREJJbmRl
eEJhY2tlbmRJbXBsOjp+SURCSW5kZXhCYWNrZW5kSW1wbCgpCi17Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1w
bC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTkzOTk5ZTE2MzNkNGY3ZmE3MWU5
YjY4NzRkZTE4MTAxYzIwZTlhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2Vu
ZEltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElE
QkluZGV4QmFja2VuZEltcGxfaAotI2RlZmluZSBJREJJbmRleEJhY2tlbmRJbXBsX2gKLQotI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRl
ICJJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJLZXlQYXRoLmgiCi0j
aW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJ
REJCYWNraW5nU3RvcmU7Ci1jbGFzcyBJREJLZXk7Ci1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOwotCi1jbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsIDogcHVibGljIElEQkluZGV4QmFj
a2VuZEludGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW1wbD4gY3JlYXRlKGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNl
LCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBtZXRhZGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSURCSW5kZXhCYWNrZW5kSW1wbChkYXRhYmFzZSwgbWV0YWRhdGEpKTsK
LSAgICB9Ci0gICAgdmlydHVhbCB+SURCSW5kZXhCYWNrZW5kSW1wbCgpOwotCi0gICAgaW50NjRf
dCBpZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9tZXRhZGF0YS5pZCAhPSBJbnZh
bGlkSWQpOwotICAgICAgICByZXR1cm4gbV9tZXRhZGF0YS5pZDsKLSAgICB9Ci0KLSAgICAvLyBJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2UKLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlv
bkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5LZXlDdXJzb3IoUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0KLSAgICBJREJJbmRleE1l
dGFkYXRhIG1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YTsgfQotICAgIGNvbnN0
IFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbWV0YWRhdGEubmFtZTsgfQotICAgIGNvbnN0IElE
QktleVBhdGgmIGtleVBhdGgoKSB7IHJldHVybiBtX21ldGFkYXRhLmtleVBhdGg7IH0KLSAgICBj
b25zdCBib29sJiB1bmlxdWUoKSB7IHJldHVybiBtX21ldGFkYXRhLnVuaXF1ZTsgfQotICAgIGNv
bnN0IGJvb2wmIG11bHRpRW50cnkoKSB7IHJldHVybiBtX21ldGFkYXRhLm11bHRpRW50cnk7IH0K
LQotcHJpdmF0ZToKLSAgICBJREJJbmRleEJhY2tlbmRJbXBsKGNvbnN0IElEQkRhdGFiYXNlQmFj
a2VuZEltcGwqLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJik7Ci0KLSAgICBzdGF0aWMgY29uc3Qg
aW50NjRfdCBJbnZhbGlkSWQgPSAwOwotCi0gICAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+
IGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UtPmJhY2tpbmdTdG9yZSgp
OyB9Ci0gICAgaW50NjRfdCBkYXRhYmFzZUlkKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS0+
aWQoKTsgfQotCi0gICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogbV9kYXRhYmFzZTsK
LQotICAgIElEQkluZGV4TWV0YWRhdGEgbV9tZXRhZGF0YTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJJbmRleEJhY2tlbmRJbXBsX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNw
cAppbmRleCA4OTEyNTNkOWUwNGM5MWU5NWFlZWIyMzA0NTQ1ZjI0NjZhMDI3MjVlLi5mNTBmZTFl
YmI4MDgyZTIxNzZmOGQ0ZmVkMzBkOWFhYjAzMjU1ZjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC00OSwxMyArNDks
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQg
ZGVmYXVsdERpcmVjdGlvbiA9IElEQkN1cnNvcjo6TkVYVDsKIAotSURCT2JqZWN0U3RvcmU6OklE
Qk9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG1ldGFkYXRhLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gaWRiT2JqZWN0U3RvcmUsIElE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK0lEQk9iamVjdFN0b3JlOjpJREJPYmplY3RTdG9y
ZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0YSwgSURCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uKQogICAgIDogbV9tZXRhZGF0YShtZXRhZGF0YSkKLSAgICAsIG1fYmFja2Vu
ZChpZGJPYmplY3RTdG9yZSkKICAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAg
LCBtX2RlbGV0ZWQoZmFsc2UpCiB7Ci0gICAgQVNTRVJUKG1fYmFja2VuZCk7CiAgICAgQVNTRVJU
KG1fdHJhbnNhY3Rpb24pOwogICAgIC8vIFdlIHBhc3MgYSByZWZlcmVuY2UgdG8gdGhpcyBvYmpl
Y3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgogICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVu
dCgpOwpAQCAtMzg1LDkgKzM4Myw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0
b3JlOjpjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0CiAgICAgfQog
CiAgICAgaW50NjRfdCBpbmRleElkID0gbV9tZXRhZGF0YS5tYXhJbmRleElkICsgMTsKLSAgICBt
X2JhY2tlbmQtPmNyZWF0ZUluZGV4KGluZGV4SWQsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVs
dGlFbnRyeSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgaWYgKGVjKQotICAg
ICAgICByZXR1cm4gMDsKKyAgICBiYWNrZW5kREIoKS0+Y3JlYXRlSW5kZXgobV90cmFuc2FjdGlv
bi0+aWQoKSwgaWQoKSwgaW5kZXhJZCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5
KTsKIAogICAgICsrbV9tZXRhZGF0YS5tYXhJbmRleElkOwogCkBAIC00NjYsMTQgKzQ2MiwxMyBA
QCB2b2lkIElEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5k
LT5kZWxldGVJbmRleChpbmRleElkLCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAg
ICBpZiAoIWVjKSB7Ci0gICAgICAgIElEQkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhN
YXAuZmluZChuYW1lKTsKLSAgICAgICAgaWYgKGl0ICE9IG1faW5kZXhNYXAuZW5kKCkpIHsKLSAg
ICAgICAgICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5yZW1vdmUoaXQtPnZhbHVlLT5pZCgpKTsKLSAg
ICAgICAgICAgIGl0LT52YWx1ZS0+bWFya0RlbGV0ZWQoKTsKLSAgICAgICAgICAgIG1faW5kZXhN
YXAucmVtb3ZlKG5hbWUpOwotICAgICAgICB9CisgICAgYmFja2VuZERCKCktPmRlbGV0ZUluZGV4
KG1fdHJhbnNhY3Rpb24tPmlkKCksIGlkKCksIGluZGV4SWQpOworCisgICAgSURCSW5kZXhNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9pbmRleE1hcC5maW5kKG5hbWUpOworICAgIGlmIChpdCAhPSBtX2lu
ZGV4TWFwLmVuZCgpKSB7CisgICAgICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5yZW1vdmUoaXQtPnZh
bHVlLT5pZCgpKTsKKyAgICAgICAgaXQtPnZhbHVlLT5tYXJrRGVsZXRlZCgpOworICAgICAgICBt
X2luZGV4TWFwLnJlbW92ZShuYW1lKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCmluZGV4IDdlMmY3MmZhZWE4NTE5
M2MzMDkzZWQ2M2Q4NWFhMmE1MDJmM2MwMjcuLjZkZmQ5Nzg4YTUwOGM2Yjk4NTIwZGUwZjQxZDMx
ZGQxM2ZkYTI3YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkRpY3Rpb25hcnku
aCIKICNpbmNsdWRlICJJREJDdXJzb3IuaCIKICNpbmNsdWRlICJJREJJbmRleC5oIgotI2luY2x1
ZGUgIklEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQktleS5oIgogI2lu
Y2x1ZGUgIklEQktleVJhbmdlLmgiCiAjaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKQEAgLTUyLDkg
KzUxLDkgQEAgY2xhc3MgSURCQW55OwogCiBjbGFzcyBJREJPYmplY3RTdG9yZSA6IHB1YmxpYyBT
Y3JpcHRXcmFwcGFibGUsIHB1YmxpYyBSZWZDb3VudGVkPElEQk9iamVjdFN0b3JlPiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZShjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0YSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlKGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEmIG1ldGFkYXRhLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24p
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQk9iamVjdFN0b3JlKG1ldGFk
YXRhLCBiYWNrZW5kLCB0cmFuc2FjdGlvbikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IElEQk9iamVjdFN0b3JlKG1ldGFkYXRhLCB0cmFuc2FjdGlvbikpOwogICAgIH0KICAgICB+SURC
T2JqZWN0U3RvcmUoKSB7IH0KIApAQCAtMTA5LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICBJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqIGJhY2tlbmREQigpIGNvbnN0OwogCiBwcml2YXRlOgot
ICAgIElEQk9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4sIElEQlRyYW5zYWN0aW9uKik7Cisg
ICAgSURCT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIElEQlRyYW5z
YWN0aW9uKik7CiAKICAgICBpbnQ2NF90IGZpbmRJbmRleElkKGNvbnN0IFN0cmluZyYgbmFtZSkg
Y29uc3Q7CiAgICAgYm9vbCBjb250YWluc0luZGV4KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QK
QEAgLTExOCw3ICsxMTcsNiBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEgbV9tZXRhZGF0YTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBtX2JhY2tlbmQ7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0
aW9uOwogICAgIGJvb2wgbV9kZWxldGVkOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmlu
ZGV4IGU2Y2U4M2MzNWIzOGMwNGVjZWFmYTc4YTlhYWQ1NWZmODBhZmI3YjEuLmQyNGI2N2ZkOWJj
YTA5MTIwNzFkNWI5MDkxODA2ZDk3YTZhYjFlNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
Y3BwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIK
ICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJh
c2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbXBsLmgiCiAjaW5jbHVk
ZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgogI2luY2x1ZGUgIklEQktleVJh
bmdlLmgiCkBAIC00NCw5OCArNDMsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUluZGV4T3BlcmF0aW9uIDogcHVibGlj
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgQ3JlYXRlSW5kZXhPcGVyYXRpb24ob2JqZWN0U3RvcmUsIGluZGV4KSk7
Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqKTsKLXByaXZhdGU6Ci0gICAgQ3JlYXRlSW5kZXhPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBpbmRleCkKLSAgICAgICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQot
ICAgICAgICAsIG1faW5kZXgoaW5kZXgpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwotICAgIFJlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbXBsPiBtX2luZGV4OwotfTsKLQotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6RGVsZXRlSW5kZXhPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+IGluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVJ
bmRleE9wZXJhdGlvbihvYmplY3RTdG9yZSwgaW5kZXgpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2
b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBE
ZWxldGVJbmRleE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQotICAg
ICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0gICAgICAgICwgbV9pbmRleChpbmRl
eCkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7
Ci19OwotCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJbmRleEFib3J0
T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlv
bihvYmplY3RTdG9yZSwgaW5kZXgpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0o
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBDcmVhdGVJbmRleEFi
b3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCi0gICAgICAgIDog
bV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAgICAgICAgLCBtX2luZGV4KGluZGV4KQotICAg
IHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmpl
Y3RTdG9yZTsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsKLX07Ci0K
LWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRp
b24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVy
YXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKG9iamVj
dFN0b3JlLCBpbmRleCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIERlbGV0ZUluZGV4QWJvcnRPcGVy
YXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKLSAgICAgICAgOiBtX29iamVj
dFN0b3JlKG9iamVjdFN0b3JlKQotICAgICAgICAsIG1faW5kZXgoaW5kZXgpCi0gICAgewotICAg
IH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3Jl
OwotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBtX2luZGV4OwotfTsKLQotCi1JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjp+SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCgpCi17Ci19
Ci0KLUlEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwo
Y29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UsIGNvbnN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGEmIG1ldGFkYXRhKQotICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKLSAgICAs
IG1fbWV0YWRhdGEobWV0YWRhdGEpCi17Ci0gICAgbG9hZEluZGV4ZXMoKTsKLX0KLQotSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjptZXRhZGF0YSgpIGNv
bnN0Ci17Ci0gICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtZXRhZGF0YShtX21ldGFkYXRhKTsK
LSAgICBmb3IgKEluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1faW5kZXhlcy5iZWdpbigp
OyBpdCAhPSBtX2luZGV4ZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1ldGFkYXRhLmluZGV4ZXMu
c2V0KGl0LT5rZXksIGl0LT52YWx1ZS0+bWV0YWRhdGEoKSk7Ci0gICAgcmV0dXJuIG1ldGFkYXRh
OwotfQotCiBib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyOjp2ZXJp
ZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBib29sJiBjYW5BZGRLZXlzLCBjb25zdCBJ
REJLZXkqIHByaW1hcnlLZXksIFN0cmluZyogZXJyb3JNZXNzYWdlKSBjb25zdAogewogICAgIGNh
bkFkZEtleXMgPSBmYWxzZTsKQEAgLTIxMiw4NiArMTE5LDYgQEAgYm9vbCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjptYWtlSW5kZXhXcml0ZXJzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGludDY0X3Qg
aWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1
bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0
cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQVNTRVJUX1dJVEhfTUVT
U0FHRSghbV9pbmRleGVzLmNvbnRhaW5zKGlkKSwgIkluZGV4ZXMgYWxyZWFkeSBjb250YWluICcl
cyciLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKG1fZGF0YWJhc2UsIElEQklu
ZGV4TWV0YWRhdGEobmFtZSwgaWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSkpOwotICAg
IEFTU0VSVChpbmRleC0+bmFtZSgpID09IG5hbWUpOwotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0g
SURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKLSAgICBBU1NFUlQoaWQgPiBtX21ldGFk
YXRhLm1heEluZGV4SWQpOwotICAgIG1fbWV0YWRhdGEubWF4SW5kZXhJZCA9IGlkOwotCi0gICAg
aWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENyZWF0ZUluZGV4T3BlcmF0aW9uOjpjcmVh
dGUodGhpcywgaW5kZXgpLCBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywg
aW5kZXgpKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlv
bkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIG1faW5kZXhl
cy5zZXQoaWQsIGluZGV4KTsKLSAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwotfQotCi12b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3Jt
KElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFD
RSgiQ3JlYXRlSW5kZXhPcGVyYXRpb24iKTsKLSAgICBpZiAoIW1fb2JqZWN0U3RvcmUtPmJhY2tp
bmdTdG9yZSgpLT5jcmVhdGVJbmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBt
X2luZGV4LT5pZCgpLCBtX2luZGV4LT5uYW1lKCksIG1faW5kZXgtPmtleVBhdGgoKSwgbV9pbmRl
eC0+dW5pcXVlKCksIG1faW5kZXgtPm11bHRpRW50cnkoKSkpIHsKLSAgICAgICAgdHJhbnNhY3Rp
b24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igd2hlbiB0cnlpbmcg
dG8gY3JlYXRlIGluZGV4ICclcycuIiwgbV9pbmRleC0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmRleChpbnQ2NF90IGluZGV4
SWQpCi17Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXggPSBtX2lu
ZGV4ZXMuZ2V0KGluZGV4SWQpOwotICAgIEFTU0VSVChpbmRleCk7Ci0gICAgcmV0dXJuIGluZGV4
LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJ
bmRleChpbnQ2NF90IGluZGV4SWQsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJh
bnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVChtX2luZGV4ZXMu
Y29udGFpbnMoaW5kZXhJZCkpOwotCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGlu
ZGV4ID0gbV9pbmRleGVzLmdldChpbmRleElkKTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9t
KHRyYW5zYWN0aW9uUHRyKTsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJU
cmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOwotCi0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2No
ZWR1bGVUYXNrKERlbGV0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgaW5kZXgpLCBEZWxl
dGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgaW5kZXgpKSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9pbmRleGVzLnJlbW92ZShpbmRleElkKTsKLX0KLQot
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJf
VFJBQ0UoIkRlbGV0ZUluZGV4T3BlcmF0aW9uIik7Ci0gICAgbV9vYmplY3RTdG9yZS0+YmFja2lu
Z1N0b3JlKCktPmRlbGV0ZUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksIG1f
aW5kZXgtPmlkKCkpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmxvYWRJ
bmRleGVzKCkKLXsKLSAgICBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gaW5kZXhlcyA9IGJhY2tp
bmdTdG9yZSgpLT5nZXRJbmRleGVzKGRhdGFiYXNlSWQoKSwgbV9tZXRhZGF0YS5pZCk7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1f
aW5kZXhlcy5zZXQoaW5kZXhlc1tpXS5pZCwgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKG1f
ZGF0YWJhc2UsIGluZGV4ZXNbaV0pKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCghdHJhbnNhY3Rpb24pOwotICAg
IEFTU0VSVChtX29iamVjdFN0b3JlLT5tX2luZGV4ZXMuY29udGFpbnMobV9pbmRleC0+aWQoKSkp
OwotICAgIG1fb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5yZW1vdmUobV9pbmRleC0+aWQoKSk7Ci19
Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhBYm9ydE9wZXJh
dGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsK
LSAgICBBU1NFUlQoIXRyYW5zYWN0aW9uKTsKLSAgICBBU1NFUlQoIW1fb2JqZWN0U3RvcmUtPm1f
aW5kZXhlcy5jb250YWlucyhtX2luZGV4LT5pZCgpKSk7Ci0gICAgbV9vYmplY3RTdG9yZS0+bV9p
bmRleGVzLnNldChtX2luZGV4LT5pZCgpLCBtX2luZGV4KTsKLX0KLQogUGFzc1JlZlB0cjxJREJL
ZXk+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKQogewogICAgIGNvbnN0IGludDY0X3QgbWF4R2VuZXJhdG9yVmFsdWUgPSA5MDA3MTk5
MjU0NzQwOTkyTEw7IC8vIE1heGltdW0gaW50ZWdlciBzdG9yYWJsZSBhcyBFQ01BU2NyaXB0IG51
bWJlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAppbmRleCBiM2UyZTU1MDE2ZTEzMTJmMzM5MGEw
MTc2ZGVlNzgxNjlhOTgyYmRlLi41YWYxMzA0NWNiYzE4ZGQ3MjQxMWI5OTkwOTMyYjdjZmVkODlk
ZTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCkBAIC0zOSw1MyArMzksMTEgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKLWNsYXNzIElE
QkluZGV4QmFja2VuZEltcGw7CiBjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOwogY2xh
c3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOwogc3RydWN0IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGE7CiAKLWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwgOiBwdWJsaWMgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBjcmVhdGUoY29uc3QgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbCogZGF0YWJhc2UsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG1ldGFk
YXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsKGRhdGFiYXNlLCBtZXRhZGF0YSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsKCk7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50NjRfdCwg
UmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+ID4gSW5kZXhNYXA7Ci0KLSAgICBzdGF0aWMgY29u
c3QgaW50NjRfdCBJbnZhbGlkSWQgPSAwOwotICAgIGludDY0X3QgaWQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEuaWQgIT0gSW52YWxpZElkKTsKLSAgICAgICAgcmV0
dXJuIG1fbWV0YWRhdGEuaWQ7Ci0gICAgfQotCi0gICAgLy8gSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwg
dm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElE
QktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPElu
ZGV4S2V5cz4mKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoaW50NjRfdCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVs
dGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFBy
aW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+
JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0
X3Q+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IGluZGV4KGludDY0X3QpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90LCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSURCQ3Vyc29y
OjpEaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
RXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KLQotICAgIHN0YXRpYyBib29sIHBvcHVsYXRlSW5kZXgoSURC
QmFja2luZ1N0b3JlJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOwotCi0gICAgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0OwotICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIHsgcmV0
dXJuIG1fbWV0YWRhdGEubmFtZTsgfQotICAgIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgoKSBj
b25zdCB7IHJldHVybiBtX21ldGFkYXRhLmtleVBhdGg7IH0KLSAgICBjb25zdCBib29sJiBhdXRv
SW5jcmVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5hdXRvSW5jcmVtZW50OyB9Ci0K
LSAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhYmFzZS0+YmFja2luZ1N0b3JlKCk7IH0KLSAgICBpbnQ2NF90IGRhdGFiYXNl
SWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlLT5pZCgpOyB9CituYW1lc3BhY2UgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbCB7CiAKICAgICBjbGFzcyBJbmRleFdyaXRlciB7CiAgICAgcHVi
bGljOgpAQCAtMTA5LDI3ICs2NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzIG1faW5kZXhLZXlzOwogICAgIH07CiAKLSAgICBz
dGF0aWMgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4sIElEQkJhY2tpbmdTdG9yZSosIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURC
T2JqZWN0U3RvcmVNZXRhZGF0YSYsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29s
IGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3Qg
VmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYsIFZlY3Rv
cjxPd25QdHI8SW5kZXhXcml0ZXI+ID4qIGluZGV4V3JpdGVycywgU3RyaW5nKiBlcnJvck1lc3Nh
Z2UsIGJvb2wmIGNvbXBsZXRlZCkgV0FSTl9VTlVTRURfUkVUVVJOOwotCi0gICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCS2V5PiBnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4s
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICBzdGF0aWMgYm9vbCB1cGRhdGVLZXlHZW5l
cmF0b3IoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgSURCS2V5KiwgYm9vbCBjaGVja0N1cnJlbnQpOwotCi1wcml2YXRlOgotICAgIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCosIGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmKTsKLQotICAgIHZvaWQgbG9hZEluZGV4ZXMoKTsK
LQotICAgIGNsYXNzIENyZWF0ZUluZGV4T3BlcmF0aW9uOwotICAgIGNsYXNzIERlbGV0ZUluZGV4
T3BlcmF0aW9uOwotCi0gICAgLy8gV2hlbiBhICJ2ZXJzaW9uY2hhbmdlIiB0cmFuc2FjdGlvbiBh
Ym9ydHMsIHRoZXNlIHJlc3RvcmUgdGhlIGJhY2stZW5kIG9iamVjdCBoaWVyYXJjaHkuCi0gICAg
Y2xhc3MgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjsKLSAgICBjbGFzcyBEZWxldGVJbmRleEFi
b3J0T3BlcmF0aW9uOwotCi0gICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogbV9kYXRh
YmFzZTsKKyAgICBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiwgSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25z
dCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXks
IGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBj
b25zdCBWZWN0b3I8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+Jiwg
VmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiogaW5kZXhXcml0ZXJzLCBTdHJpbmcqIGVycm9y
TWVzc2FnZSwgYm9vbCYgY29tcGxldGVkKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAKLSAgICBJREJP
YmplY3RTdG9yZU1ldGFkYXRhIG1fbWV0YWRhdGE7Ci0gICAgSW5kZXhNYXAgbV9pbmRleGVzOwor
ICAgIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICBib29sIHVwZGF0ZUtleUdlbmVy
YXRvcihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXkqLCBib29sIGNoZWNrQ3VycmVudCk7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbi5jcHAKaW5kZXggYWZhNDVlMjRiMDQxZWY4MjVjNjU3YTYxMTk1MTQwZDE0NTc0
MTJmMS4uMjZlZmQwZmIzYjExOTZmZDE3ODJlMWVkNzJlNDM1ZjRjNzg4MDk5YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcApA
QCAtMTIyLDExICsxMjIsNiBAQCBJREJUcmFuc2FjdGlvbjo6fklEQlRyYW5zYWN0aW9uKCkKICAg
ICBBU1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7CiB9CiAKLUlEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSogSURCVHJhbnNhY3Rpb246OmJhY2tlbmQoKSBjb25zdAotewotICAgIHJldHVy
biBtX2JhY2tlbmQuZ2V0KCk7Ci19Ci0KIGNvbnN0IFN0cmluZyYgSURCVHJhbnNhY3Rpb246Om1v
ZGUoKSBjb25zdAogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtMTc2LDEyICsxNzEs
OSBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3Rv
cmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
LSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJh
Y2tlbmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWQsIGVjKTsKLSAgICBB
U1NFUlQoIWVjICYmIG9iamVjdFN0b3JlQmFja2VuZCk7Ci0KICAgICBjb25zdCBJREJEYXRhYmFz
ZU1ldGFkYXRhJiBtZXRhZGF0YSA9IG1fZGF0YWJhc2UtPm1ldGFkYXRhKCk7CiAKLSAgICBSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZSht
ZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLCBvYmplY3RTdG9yZUJhY2tl
bmQsIHRoaXMpOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBJREJP
YmplY3RTdG9yZTo6Y3JlYXRlKG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJ
ZCksIHRoaXMpOwogICAgIG9iamVjdFN0b3JlQ3JlYXRlZChuYW1lLCBvYmplY3RTdG9yZSk7CiAg
ICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCmluZGV4IGRmNDFiYmIwZWY1MzM4
MWMwY2UyNzFiN2RkNDU2ZmRiZjllZTA0MDkuLmRmM2JiMGNjY2E1OTY0ZDQ2ODg3OTRmMWZiNjJi
ODZlMDIwNzA2NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb24uaApAQCAtNzEsNyArNzEsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE1v
ZGUgc3RyaW5nVG9Nb2RlKGNvbnN0IFN0cmluZyYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgbW9kZVRvU3Ry
aW5nKE1vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogYmFja2VuZCgpIGNvbnN0OwogICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZSogYmFja2VuZERCKCkgY29uc3Q7CiAKICAgICBpbnQ2NF90IGlkKCkgY29uc3QgeyByZXR1cm4g
bV9pZDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCA3ODJmNDY1ODI4YzgyN2Yy
ZmU2YzhiNmUzNjdlMTc1ZTdhYmYwOTQyLi4xYjBjYTRiYmNjMGVhNTVlM2M3NDYyMmU5NmE1MzE3
NjMwNDRhYmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAtMzIsNyArMzIsNiBA
QAogI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5j
bHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQlRyYWNpbmcu
aCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCiAKQEAgLTcwLDE4ICs2
OSw2IEBAIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6On5JREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKCkKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7CiB9CiAKLVBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpvYmplY3RTdG9yZShpbnQ2NF90IGlkLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAo
bV9zdGF0ZSA9PSBGaW5pc2hlZCkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gbV9kYXRhYmFzZS0+
b2JqZWN0U3RvcmUoaWQpOwotICAgIEFTU0VSVChvYmplY3RTdG9yZSk7Ci0gICAgcmV0dXJuIG9i
amVjdFN0b3JlLnJlbGVhc2UoKTsKLX0KLQogYm9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpzY2hlZHVsZVRhc2soVGFza1R5cGUgdHlwZSwgUGFzc093blB0cjxPcGVyYXRpb24+IHRhc2ss
IFBhc3NPd25QdHI8T3BlcmF0aW9uPiBhYm9ydFRhc2spCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0g
RmluaXNoZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKaW5kZXggYzc5ZGVmZjQ4ODQ4MDRmN2Yz
N2FmMDMyMzU0MDc4OTI3MzkxYTNiMS4uMjEyMjBhYzYwNmZiYmFkNGE1N2VhMjhlYmVkZGVkYTA2
MjE4ODQ3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaApAQCAtNTIsNyArNTIsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCgpOwogCiAgICAgLy8g
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoaW50NjRfdCwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IG9iamVjdFN0b3JlKGludDY0X3QsIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCk7CiAgICAgdm9pZCBjb21t
aXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FsbGJhY2tzKElEQlRyYW5zYWN0aW9uQ2FsbGJh
Y2tzKiBjYWxsYmFja3MpIHsgbV9jYWxsYmFja3MgPSBjYWxsYmFja3M7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCA4NmY4NjIwMTUwMzViOTk5NWVjMjFhZjEyYjM5ZDY5ZDlmYjQ2YWFlLi5iYTgwMGQy
YjQzNmZkOTYwNjQyNmE4NjhkYWU1MjYzYzI3ZTQ2OGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03
MzUsOCArNzM1LDYgQEAKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZS5oJywKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleC5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgnLAot
ICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwJywK
LSAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgnLAog
ICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5o
JywKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwJywKICAgICAgICAg
ICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaCcsCkBAIC01NDYwLDcgKzU0NTgsNyBAQAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlYXJjaFNtYWxsR3JheS5w
bmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlYXJjaFNtYWxs
V2hpdGUucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWFy
Y2hOZXh0LnBuZycsCi0gICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2Vh
cmNoUHJldi5wbmcnLCAgICAgICAgICAgIAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1l
bmQvSW1hZ2VzL3NlYXJjaFByZXYucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQt
ZW5kL0ltYWdlcy9zZWdtZW50LnBuZycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvc2VnbWVudEVuZC5wbmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1l
bmQvSW1hZ2VzL3NlZ21lbnRIb3Zlci5wbmcnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA1YjlkY2NmNjRiNzMxYTgzYWU2NTljZGQ1NDcwZTBl
NjIxNDcxMzU2Li42ODU2ODRlNmYwZmY5Y2FjM2Y3ZDBkZjA2ODdmMjNiMGU0ZTliNDZkIDEwMDc1
NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMjQ5ODUs
MTQgKzI0OTg1LDYgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkluZGV4QmFja2VuZEltcGwuY3BwIgot
CQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9k
dWxlc1xpbmRleGVkZGJcSURCSW5kZXhCYWNrZW5kSW1wbC5oIgotCQkJCQk+Ci0JCQkJPC9GaWxl
PgotCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURC
SW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzA0MWNh
NWYyN2EwMDk5Y2U4ZWE4Nzk4MzAzMTRhNDgyYzZkODhiMC4uZWY1NGRkNjRhYjFiNGRlZWE4NjQy
M2M0YzQ0YTBlYjM0YTAxMjlhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzQ5NSw4ICszNDk1LDYgQEAKIAkJOTcxMkE1RDQx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3QjE1MDA0RURBMDA0
OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgfTsKIAkJOTcxMkE1RDUx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTdDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRl
eC5jcHAgKi87IH07CiAJCTk3MTJBNUQ2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1N0QxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmggKi87IH07Ci0JCTk3MTJBNUQ4MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTdGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRl
eEJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKLQkJOTcxMkE1RDkxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkluZGV4QmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3MTJBNTgwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBs
LmggKi87IH07CiAJCTk3MTJBNURBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3MTJBNTgxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCAq
LzsgfTsKIAkJOTcxMkE1REIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4MjE1MDA0RURBMDA0
OEFGMTAgLyogSURCS2V5LmNwcCAqLzsgfTsKIAkJOTcxMkE1REMxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTcxMkE1ODMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5oICovOyB9OwpAQCAtMTA4MTYsOCAr
MTA4MTQsNiBAQAogCQk5NzEyQTU3QzE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCSW5kZXguY3BwOyBwYXRoID0g
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5NzEyQTU3RDE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gSURCSW5kZXguaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTdFMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJJbmRleC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCSW5k
ZXguaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU3RjE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhC
YWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJJ
bmRleEJhY2tlbmRJbXBsLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFj
a2VuZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU4MDE1MDA0
RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBJREJJbmRleEJhY2tlbmRJbXBsLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTk3MTJBNTgxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
Lmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1ODIxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQktleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJLZXku
Y3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTcxMkE1ODMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJLZXkuaDsgcGF0aCA9IE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgxMzcsOCAr
MTgxMzMsNiBAQAogCQkJCTk3MTJBNTdDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5jcHAg
Ki8sCiAJCQkJOTcxMkE1N0QxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmggKi8sCiAJCQkJ
OTcxMkE1N0UxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmlkbCAqLywKLQkJCQk5NzEyQTU3
RjE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgKi8sCi0JCQkJOTcx
MkE1ODAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEltcGwuaCAqLywKIAkJCQk5
NzEyQTU4MTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggKi8s
CiAJCQkJOTcxMkE1ODIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5jcHAgKi8sCiAJCQkJOTcx
MkE1ODMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5oICovLApAQCAtMjQxNDUsNyArMjQxMzks
NiBAQAogCQkJCTk3MTJBNUQyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZElt
cGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUQ0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1RDYxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmggaW4gSGVhZGVycyAqLywKLQkJCQk5NzEyQTVEOTE1
MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTcxMkE1REExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEludGVyZmFjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1REMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1REYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBh
dGguaCBpbiBIZWFkZXJzICovLApAQCAtMjczOTksNyArMjczOTIsNiBAQAogCQkJCTk3MTJBNUQx
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTcxMkE1RDMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNUQ1MTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJJbmRleC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5NzEyQTVEODE1MDA0RURBMDA0OEFG
MTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEyQTVE
QjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJB
NURFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk3MTJBNUUyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5jcHAgaW4gU291cmNlcyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VC
YWNrZW5kVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkRhdGFiYXNl
QmFja2VuZFRlc3QuY3BwCmluZGV4IDZlZjg1YzNkOTM0Njg0MTQ0ODk0MjZjZWY2ZTVkOTQzYjA1
YWE3MTIuLjBmMzE2Njk4OTdmMGU0YjJjNzI5NTg3YmMwY2E5MGY3ZDVhZDg5NjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VCYWNrZW5kVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRhYmFzZUJhY2tlbmRU
ZXN0LmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tz
UHJveHkuaCIKICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJ
REJGYWtlQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW1wbC5oIgog
I2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJXZWJJREJE
YXRhYmFzZUNhbGxiYWNrc0ltcGwuaCIKICNpbmNsdWRlICJXZWJJREJEYXRhYmFzZUltcGwuaCIK
QEAgLTQ3LDMyICs0Niw2IEBAIHVzaW5nIFdlYktpdDo6V2ViSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsOwogCiBuYW1lc3BhY2UgewogCi1URVNUKElEQkRhdGFiYXNlQmFja2VuZFRlc3QsIEJhY2tp
bmdTdG9yZVJldGVudGlvbikKLXsKLSAgICBSZWZQdHI8SURCRmFrZUJhY2tpbmdTdG9yZT4gYmFj
a2luZ1N0b3JlID0gYWRvcHRSZWYobmV3IElEQkZha2VCYWNraW5nU3RvcmUoKSk7Ci0gICAgRVhQ
RUNUX1RSVUUoYmFja2luZ1N0b3JlLT5oYXNPbmVSZWYoKSk7Ci0KLSAgICBJREJGYWN0b3J5QmFj
a2VuZEltcGwqIGZhY3RvcnkgPSAwOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiBkYiA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZSgiZGIiLCBiYWNraW5nU3RvcmUu
Z2V0KCksIGZhY3RvcnksICJ1bmlxdWVpZCIpOwotICAgIEVYUEVDVF9HVChiYWNraW5nU3RvcmUt
PnJlZkNvdW50KCksIDEpOwotCi0gICAgY29uc3QgYm9vbCBhdXRvSW5jcmVtZW50ID0gZmFsc2U7
Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IHN0b3JlID0gSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKGRiLmdldCgpLCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
KCJzdG9yZSIsIDEsIElEQktleVBhdGgoImtleVBhdGgiKSwgYXV0b0luY3JlbWVudCwgMCkpOwot
ICAgIEVYUEVDVF9HVChiYWNraW5nU3RvcmUtPnJlZkNvdW50KCksIDEpOwotCi0gICAgY29uc3Qg
Ym9vbCB1bmlxdWUgPSBmYWxzZTsKLSAgICBjb25zdCBib29sIG11bHRpRW50cnkgPSBmYWxzZTsK
LSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBJREJJbmRleEJhY2tlbmRJ
bXBsOjpjcmVhdGUoZGIuZ2V0KCksIElEQkluZGV4TWV0YWRhdGEoImluZGV4IiwgLTEsIElEQktl
eVBhdGgoImtleVBhdGgiKSwgdW5pcXVlLCBtdWx0aUVudHJ5KSk7Ci0gICAgRVhQRUNUX0dUKGJh
Y2tpbmdTdG9yZS0+cmVmQ291bnQoKSwgMSk7Ci0KLSAgICBkYi5jbGVhcigpOwotICAgIEVYUEVD
VF9UUlVFKGJhY2tpbmdTdG9yZS0+aGFzT25lUmVmKCkpOwotICAgIHN0b3JlLmNsZWFyKCk7Ci0g
ICAgRVhQRUNUX1RSVUUoYmFja2luZ1N0b3JlLT5oYXNPbmVSZWYoKSk7Ci0gICAgaW5kZXguY2xl
YXIoKTsKLSAgICBFWFBFQ1RfVFJVRShiYWNraW5nU3RvcmUtPmhhc09uZVJlZigpKTsKLX0KLQog
Y2xhc3MgTW9ja0lEQkNhbGxiYWNrcyA6IHB1YmxpYyBJREJDYWxsYmFja3MgewogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1vY2tJREJDYWxsYmFja3M+IGNyZWF0ZSgpIHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBNb2NrSURCQ2FsbGJhY2tzKCkpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181791</attachid>
            <date>2013-01-08 15:42:18 -0800</date>
            <delta_ts>2013-01-09 17:21:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106377-20130108153922.patch</filename>
            <type>text/plain</type>
            <size>91186</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MDEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmI4MzAwNTdiNmQxYTg2
MzkxNzc1OGE0ZmI2ODdmNWMzM2MyYjQ4OS4uZjhmNGQzZWNlYTcxOWEzZTE1MTcwNGE0YTBkZGQx
ZmRlYzI1MDQ5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOCBAQAorMjAxMy0wMS0wOCAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBB
bGxvdyBjcmVhdGVJbmRleC9jcmVhdGVPYmplY3RTdG9yZSB0byBiZSBhc3luY2hyb25vdXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjM3NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1pZ3JhdGUgaW1w
bGVtZW50YXRpb25zIG9mIGNyZWF0ZUluZGV4L2RlbGV0ZUluZGV4LAorICAgICAgICBjcmVhdGVP
YmplY3RTdG9yZS9kZWxldGVPYmplY3RTdG9yZSBvdmVyIHRvIElEQkRhdGFiYXNlQmFja2VuZElt
cGwsCisgICAgICAgIHNvIHRoYXQgdGhleSBjYW4gYmUgYXN5bmNocm9ub3VzIGluIG11bHRpLXBy
b2Nlc3MgcG9ydHMuCisKKyAgICAgICAgSGFzIHRoZSBzaWRlIGVmZmVjdCBvZiByZW1vdmluZyB0
aGUgbGFzdCBjb25zdW1lcnMgb2YKKyAgICAgICAgSURCSW5kZXhCYWNrZW5kSW1wbCBhbmQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC4gVGhlIGZvcm1lcgorICAgICAgICBpcyByZW1vdmVkIGNv
bXBsZXRlIGFuZCB0aGUgbGF0dGVyIGJlY29tZXMgYSB0ZW1wb3JhcnkgbmFtZXNwYWNlCisgICAg
ICAgIHBlbmRpbmcgYSBmdXJ0aGVyIG1vcmUgbWVjaGFuaWNhbCBjb2RlIHNodWZmbGUuCisKKyAg
ICAgICAgQSBrZXkgcmVmYWN0b3JpbmcgZWZmZWN0IGlzIHRoYXQgdGhlIElEQkRhdGFiYXNlQmFj
a2VuZEltcGwKKyAgICAgICAgbm93IGNvbnRhaW5zIHRoZSBhdXRob3JpdGF0aXZlIElEQkRhdGFi
YXNlTWV0YWRhdGEgaGllcmFyY2h5LAorICAgICAgICBhbmQgdXBkYXRlcyB0byBpdCBhcmUgY29u
c29saWRhdGVkIGluIG9uZSBwbGFjZSByYXRoZXIgdGhhbgorICAgICAgICBzY2F0dGVyZWQgYWNy
b3NzIGEgcGFyYWxsZWwgb2JqZWN0IHRyZWUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRo
aXMgaXMganVzdCByZWZhY3RvcmluZy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkJhY2tpbmdTdG9yZS5jcHA6IFNpbXBsaWZ5IG9iamVjdHN0b3JlL2luZGV4IGxvYWRpbmcgYW5k
IHByb3BhZ2F0ZSBlcnJvcnMuCisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6Omdl
dE9iamVjdFN0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldElu
ZGV4ZXMpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgor
ICAgICAgICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6IERlcGVuZGVuY3kgY2xlYW51cC4KKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oOiBEZXBlbmRlbmN5IGNsZWFu
dXAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZS5jcHA6IEZyb250ZW5kIElEQk9iamVjdFN0b3JlcyBubyBsb25nZXIgaG9sZCBvbnRv
IGJhY2tlbmQgb2JqZWN0cy4KKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVhdGVP
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0
U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZElt
cGwuY3BwOiBBZGQgYWxsIGNyZWF0ZS9kZWxldGUgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNv
cmU6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KToKKyAgICAgICAgKENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KToKKyAgICAgICAgKERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpDcmVhdGVPYmplY3RTdG9y
ZUFib3J0T3BlcmF0aW9uKToKKyAgICAgICAgKENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRp
b246OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoRGVsZXRlT2Jq
ZWN0U3RvcmVBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChDcmVhdGVJbmRleE9wZXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNyZWF0ZUluZGV4T3BlcmF0aW9uOjpDcmVhdGVJbmRleE9wZXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERlbGV0ZUluZGV4T3BlcmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246OkRlbGV0ZUluZGV4T3BlcmF0aW9uKToKKyAg
ICAgICAgKENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q3Jl
YXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0
ZUluZGV4QWJvcnRPcGVyYXRpb246OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24pOgorICAgICAg
ICAoRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVJ
bmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5k
ZXhBYm9ydE9wZXJhdGlvbjo6RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHZXRPcGVyYXRpb246OkdldE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3JlYXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9u
OjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
OjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRl
bGV0ZURhdGFiYXNlRmluYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6bG9hZE9iamVjdFN0b3Jlcyk6IExvYWQgZGlyZWN0bHkgaW50byBtZXRhZGF0YSBmcm9t
IGJhY2tpbmcgc3RvcmUuCisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3Jl
QWJvcnRPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKElEQkRhdGFiYXNlQmFja2VuZEltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUp
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6SURCT2JqZWN0U3RvcmUpOiBG
cm9udGVuZCBJREJJbmRleCBvYmplY3RzIG5vIGxvbmdlciBob2xkIG9udG8gYmFja2VuZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCk6IAorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmU6OmNyZWF0ZSk6CisgICAgICAgIChJREJPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTMtMDEtMDcgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBJbnRyb2R1Y2UgSFRNTFBhcnNlck9wdGlvbnMg
dG8gZW5jYXBzdWxhdGUgSFRNTCBwYXJzZXIgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCAxMjc1NDMwMTM5MjNmNGVkMTJmOTNlYzhhNDQ1ZWRkNzIyN2Y2ZTBmLi4xZTRjMTZl
NmNhZjg1NzJjZjIxOGZhOGI4MGY0YzhkNzcwNGYzNGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEzLTAxLTA4ICBBbGVjIEZsZXR0ICA8YWxlY2ZsZXR0
QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IEFsbG93IGNyZWF0ZUluZGV4L2Ny
ZWF0ZU9iamVjdFN0b3JlIHRvIGJlIGFzeW5jaHJvbm91cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2Mzc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHRoaXMgdGVzdCBhcyBpdCBtYWtlcyBu
byBzZW5zZSBvbmNlIHRoZSBvYmplY3RzdG9yZS9pbmRleAorICAgICAgICBoaWVyYXJjaHkgaXMg
Z29uZS4KKworICAgICAgICAqIHRlc3RzL0lEQkRhdGFiYXNlQmFja2VuZFRlc3QuY3BwOgorCiAy
MDEzLTAxLTA3ICBBbG9rIFByaXlhZGFyc2hpICA8YWxva3BAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gRml4IFBsYXRmb3JtQ29udGV4dFNraWE6OnNldERyYXdpbmdUb0ltYWdl
QnVmZmVyIGFidXNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmNwcAppbmRleCAyMDJmMDUwZjYyZDQwMzJkY2Y3ODM5MzVmMWJkMzli
YTg3ODczMWUzLi45MDVkNTlmMDdhMGIzMGMzYzI2ODYxMzdlMDIzYjdlMmY3YjE5N2M1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9y
ZS5jcHAKQEAgLTYwNSwxMyArNjA1LDE0IEBAIHN0YXRpYyBib29sIGNoZWNrT2JqZWN0U3RvcmVB
bmRNZXRhRGF0YVR5cGUoY29uc3QgTGV2ZWxEQkl0ZXJhdG9yKiBpdCwgY29uc3QgVmVjCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLVZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJCYWNr
aW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQpCitib29sIElEQkJh
Y2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgSURCRGF0YWJh
c2VNZXRhZGF0YTo6T2JqZWN0U3RvcmVNYXAqIG9iamVjdFN0b3JlcykKIHsKICAgICBJREJfVFJB
Q0UoIklEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzIik7Ci0gICAgVmVjdG9yPElEQk9i
amVjdFN0b3JlTWV0YWRhdGE+IG9iamVjdFN0b3JlczsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
c3RhcnRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgMSwg
MCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRh
S2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCk7CiAKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVz
LT5pc0VtcHR5KCkpOworCiAgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2RiLT5j
cmVhdGVJdGVyYXRvcigpOwogICAgIGl0LT5zZWVrKHN0YXJ0S2V5KTsKICAgICB3aGlsZSAoaXQt
PmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMCkgewpAQCAt
NjM2LDMzICs2MzcsMzMgQEAgVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQkJhY2tp
bmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2UKICAgICAgICAgaXQtPm5l
eHQoKTsKICAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0Lmdl
dCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpLZXlQ
YXRoKSkgewogICAgICAgICAgICAgSU5URVJOQUxfQ09OU0lTVEVOQ1lfRVJST1IoR2V0T2JqZWN0
U3RvcmVzKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIElEQktleVBhdGgga2V5UGF0aCA9IGRlY29kZUlEQktleVBhdGgo
aXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwogCiAgICAgICAgIGl0LT5u
ZXh0KCk7CiAgICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5n
ZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6QXV0
b0luY3JlbWVudCkpIHsKICAgICAgICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZX0VSUk9SKEdl
dE9iamVjdFN0b3Jlcyk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogICAgICAgICBib29sIGF1dG9JbmNyZW1lbnQgPSBkZWNvZGVCb29s
KGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKIAogICAgICAgICBpdC0+
bmV4dCgpOyAvLyBJcyBldmljYXRibGUuCiAgICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFu
ZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleTo6RXZpY3RhYmxlKSkgewogICAgICAgICAgICAgSU5URVJOQUxfQ09OU0lT
VEVOQ1lfRVJST1IoR2V0T2JqZWN0U3RvcmVzKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgaXQtPm5leHQoKTsgLy8g
TGFzdCB2ZXJzaW9uLgogICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5
cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6Okxhc3RWZXJzaW9uKSkgewogICAgICAgICAgICAgSU5URVJOQUxfQ09OU0lTVEVOQ1lfRVJS
T1IoR2V0T2JqZWN0U3RvcmVzKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgaXQtPm5leHQoKTsgLy8gTWF4aW11bSBp
bmRleCBpZCBhbGxvY2F0ZWQuCiAgICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFE
YXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6TWF4SW5kZXhJZCkpIHsKICAgICAgICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZ
X0VSUk9SKEdldE9iamVjdFN0b3Jlcyk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpbnQ2NF90IG1heEluZGV4SWQgPSBk
ZWNvZGVJbnQoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwogCkBAIC02
NzUsNyArNjc2LDcgQEAgVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQkJhY2tpbmdT
dG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2UKICAgICAgICAgICAgIC8vIFNv
IHRoaXMgY2hlY2sgaXMgb25seSByZWxldmFudCBmb3Igc3RyaW5nLXR5cGUga2V5UGF0aHMuCiAg
ICAgICAgICAgICBpZiAoIWhhc0tleVBhdGggJiYgKGtleVBhdGgudHlwZSgpID09IElEQktleVBh
dGg6OlN0cmluZ1R5cGUgJiYgIWtleVBhdGguc3RyaW5nKCkuaXNFbXB0eSgpKSkgewogICAgICAg
ICAgICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZX0VSUk9SKEdldE9iamVjdFN0b3Jlcyk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFoYXNLZXlQYXRoKQogICAgICAgICAgICAgICAg
IGtleVBhdGggPSBJREJLZXlQYXRoKCk7CkBAIC02OTEsOSArNjkyLDEyIEBAIFZlY3RvcjxJREJP
YmplY3RTdG9yZU1ldGFkYXRhPiBJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2
NF90IGRhdGFiYXNlCiAgICAgICAgICAgICBpdC0+bmV4dCgpOwogICAgICAgICB9CiAKLSAgICAg
ICAgb2JqZWN0U3RvcmVzLmFwcGVuZChJREJPYmplY3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0b3Jl
TmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgbWF4SW5kZXhJZCkp
OworICAgICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKG9iamVjdFN0b3JlTmFt
ZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgbWF4SW5kZXhJZCk7Cisg
ICAgICAgIGlmICghZ2V0SW5kZXhlcyhkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAmbWV0YWRh
dGEuaW5kZXhlcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG9iamVjdFN0
b3Jlcy0+c2V0KG9iamVjdFN0b3JlSWQsIG1ldGFkYXRhKTsKICAgICB9Ci0gICAgcmV0dXJuIG9i
amVjdFN0b3JlczsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogV0FSTl9VTlVTRURfUkVUVVJOIHN0
YXRpYyBib29sIHNldE1heE9iamVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCkBAIC05Nzks
MTQgKzk4MywxMyBAQCBzdGF0aWMgYm9vbCBjaGVja0luZGV4QW5kTWV0YURhdGFLZXkoY29uc3Qg
TGV2ZWxEQkl0ZXJhdG9yKiBpdCwgY29uc3QgVmVjdG9yPGNoYQogfQogCiAKLVZlY3RvcjxJREJJ
bmRleE1ldGFkYXRhPiBJREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCitib29sIElEQkJhY2tpbmdTdG9yZTo6Z2V0SW5k
ZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXAqIGluZGV4ZXMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJC
YWNraW5nU3RvcmU6OmdldEluZGV4ZXMiKTsKLSAgICBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4g
aW5kZXhlczsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBJbmRleE1ldGFEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCwgMCk7CiAgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCArIDEsIDAsIDApOwogCi0gICAgQVNTRVJUKGluZGV4ZXMuaXNFbXB0
eSgpKTsKKyAgICBBU1NFUlQoaW5kZXhlcy0+aXNFbXB0eSgpKTsKIAogICAgIE93blB0cjxMZXZl
bERCSXRlcmF0b3I+IGl0ID0gbV9kYi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBpdC0+c2Vlayhz
dGFydEtleSk7CkBAIC0xMDExLDE0ICsxMDE0LDE0IEBAIFZlY3RvcjxJREJJbmRleE1ldGFkYXRh
PiBJREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
CiAgICAgICAgIGl0LT5uZXh0KCk7IC8vIHVuaXF1ZSBmbGFnCiAgICAgICAgIGlmICghY2hlY2tJ
bmRleEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRleElkLCBJbmRleE1ldGFE
YXRhS2V5OjpVbmlxdWUpKSB7CiAgICAgICAgICAgICBJTlRFUk5BTF9DT05TSVNURU5DWV9FUlJP
UihHZXRJbmRleGVzKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgIGJvb2wgaW5kZXhVbmlxdWUgPSBkZWNvZGVCb29sKGl0
LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKIAogICAgICAgICBpdC0+bmV4
dCgpOyAvLyBrZXlQYXRoCiAgICAgICAgIGlmICghY2hlY2tJbmRleEFuZE1ldGFEYXRhS2V5KGl0
LmdldCgpLCBzdG9wS2V5LCBpbmRleElkLCBJbmRleE1ldGFEYXRhS2V5OjpLZXlQYXRoKSkgewog
ICAgICAgICAgICAgSU5URVJOQUxfQ09OU0lTVEVOQ1lfRVJST1IoR2V0SW5kZXhlcyk7Ci0gICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
ICAgICBJREJLZXlQYXRoIGtleVBhdGggPSBkZWNvZGVJREJLZXlQYXRoKGl0LT52YWx1ZSgpLmJl
Z2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKIApAQCAtMTAyOSw3ICsxMDMyLDcgQEAgVmVjdG9y
PElEQkluZGV4TWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3QKICAgICAgICAgICAgIGl0LT5uZXh0KCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpbmRleGVzLmFwcGVuZChJREJJbmRleE1ldGFkYXRhKGluZGV4TmFtZSwgaW5kZXhJ
ZCwga2V5UGF0aCwgaW5kZXhVbmlxdWUsIGluZGV4TXVsdGlFbnRyeSkpOworICAgICAgICBpbmRl
eGVzLT5zZXQoaW5kZXhJZCwgSURCSW5kZXhNZXRhZGF0YShpbmRleE5hbWUsIGluZGV4SWQsIGtl
eVBhdGgsIGluZGV4VW5pcXVlLCBpbmRleE11bHRpRW50cnkpKTsKICAgICB9CiAgICAgcmV0dXJu
IGluZGV4ZXM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkJhY2tpbmdTdG9yZS5oCmluZGV4IDJmOTljYTMxNzE5NjFiMDQ0MTgyYWNjYWMzYjA5MmNjZjYx
MWFlMDYuLjkyYzJkYjA0MmQ0OThjZDdlNjRhMDllOTMxYzMzZGJhNjU1ODFlMDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCkBA
IC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJh
c2VJbnRWZXJzaW9uKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IHJvd0lk
LCBpbnQ2NF90IGludFZlcnNpb24pOwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShj
b25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgdmlydHVhbCBWZWN0b3I8SURCT2JqZWN0U3RvcmVN
ZXRhZGF0YT4gZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCk7CisgICAgYm9vbCBn
ZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBJREJEYXRhYmFzZU1ldGFkYXRhOjpP
YmplY3RTdG9yZU1hcCopIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2aXJ0dWFsIGJvb2wgY3Jl
YXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpOwogICAgIHZpcnR1YWwgYm9vbCBkZWxl
dGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIApAQCAt
ODUsNyArODUsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2Vu
ZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUsIGJv
b2wgY2hlY2tDdXJyZW50KSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdmlydHVhbCBib29sIGtl
eUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNv
cmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIsIGJvb2wmIGZvdW5kKSBXQVJOX1VO
VVNFRF9SRVRVUk47CiAKLSAgICB2aXJ0dWFsIFZlY3RvcjxJREJJbmRleE1ldGFkYXRhPiBnZXRJ
bmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKICAgICB2
aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJv
b2wgaXNNdWx0aUVudHJ5KTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwogICAgIHZpcnR1YWwgdm9pZCBwdXRJbmRleERhdGFG
b3JSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYs
IGNvbnN0IFJlY29yZElkZW50aWZpZXImKTsKQEAgLTE2OSw2ICsxNjgsNyBAQCBwcm90ZWN0ZWQ6
CiAKIHByaXZhdGU6CiAgICAgYm9vbCBmaW5kS2V5SW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQ
cmltYXJ5S2V5LCBib29sJiBmb3VuZCk7CisgICAgYm9vbCBnZXRJbmRleGVzKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJ
bmRleE1hcCopIFdBUk5fVU5VU0VEX1JFVFVSTjsKIAogICAgIFN0cmluZyBtX2lkZW50aWZpZXI7
CiAgICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW1wbD4gbV9mYWN0b3J5OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZElt
cGwuY3BwCmluZGV4IGZlYWI1YzVlM2EzNjQ1ZjA5OTQ0MDA5YjAzYzlmY2Q2MDRkYzZiMWEuLjY0
YzRhYWI2ZjM2ZTcyOTNlNWY2YTVhYmYyZmQzMGI4MGU0OGFmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5j
cHAKQEAgLTMwLDEwICszMCwxMCBAQAogCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCiAj
aW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKICNpbmNsdWRlICJJREJEYXRhYmFz
ZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5jbHVkZSAiSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKICNpbmNsdWRl
ICJJREJUcmFjaW5nLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFj
a2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJh
Y2tlbmRJbXBsLmgKaW5kZXggOTY2OGRmZDNhNDYzMWUzMzhmNDdlMzU0NzYzNzFmMTYxNjZmYzNj
MS4uNzEyYzJiNDMxNTc3MzA0Mzc5Y2JjMzkyMzVlYTY1N2RhMWUxMjI4MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1w
bC5oCkBAIC00MSw5ICs0MSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQkRh
dGFiYXNlQmFja2VuZEltcGw7Ci1jbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOwogY2xhc3MgSURC
S2V5UmFuZ2U7Ci1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOwogCiBjbGFzcyBJREJD
dXJzb3JCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlIHsKIHB1
YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
LmNwcAppbmRleCBlYmRlMGYxNDYzMmNkNjBiNjQxMmFhOGQ3NzdhZDk2M2JlNGUzYmYyLi43NDY0
NmQwMDgxNzVkYmE0ZTE1Yzk0N2QxNTI2OTk5OTI3ZGFmZmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0xODQsMTQgKzE4NCwx
MCBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0
U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjbwogICAgIH0KIAogICAgIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCA9IG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCArIDE7Ci0gICAgUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmVCYWNrZW5kID0gbV9iYWNr
ZW5kLT5jcmVhdGVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkLCBuYW1lLCBrZXlQYXRoLCBhdXRv
SW5jcmVtZW50LCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0g
ICAgaWYgKCFvYmplY3RTdG9yZUJhY2tlbmQpIHsKLSAgICAgICAgQVNTRVJUKGVjKTsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIG1fYmFja2VuZC0+Y3JlYXRlT2JqZWN0U3RvcmUobV92
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlkKCksIG9iamVjdFN0b3JlSWQsIG5hbWUsIGtleVBh
dGgsIGF1dG9JbmNyZW1lbnQpOwogCiAgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtZXRhZGF0
YShuYW1lLCBvYmplY3RTdG9yZUlkLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U6Ok1pbmltdW1JbmRleElkKTsKLSAgICBSZWZQdHI8SURCT2Jq
ZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YSwg
b2JqZWN0U3RvcmVCYWNrZW5kLnJlbGVhc2UoKSwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24u
Z2V0KCkpOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBJREJPYmpl
Y3RTdG9yZTo6Y3JlYXRlKG1ldGFkYXRhLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQo
KSk7CiAgICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG1ldGFkYXRhLmlkLCBtZXRhZGF0
YSk7CiAgICAgKyttX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQ7CiAKQEAgLTIxNiwxMSArMjEy
LDkgQEAgdm9pZCBJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1f
YmFja2VuZC0+ZGVsZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCwgbV92ZXJzaW9uQ2hhbmdl
VHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmICghZWMpIHsKLSAgICAgICAgbV92
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlRGVsZXRlZChuYW1lKTsKLSAgICAg
ICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlSWQpOwotICAgIH0K
KyAgICBtX2JhY2tlbmQtPmRlbGV0ZU9iamVjdFN0b3JlKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uLT5pZCgpLCBvYmplY3RTdG9yZUlkKTsKKyAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
bi0+b2JqZWN0U3RvcmVEZWxldGVkKG5hbWUpOworICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVz
LnJlbW92ZShvYmplY3RTdG9yZUlkKTsKIH0KIAogUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4g
SURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzY29wZSwgY29uc3QgU3RyaW5nJiBtb2RlU3RyaW5nLCBF
eGNlcHRpb25Db2RlJiBlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggMGQxZGRiMGRmZWJj
MDVkY2U1MDdiZTA5ZDQyMWMyNmQyNjhiNGUwZS4uNjRlNGZlYzI3NTdlYzhmY2ZlNjk2NDcyNjc3
OTg2YzVmZDBkNTIyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTMyLDcgKzMyLDYgQEAK
ICNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNl
RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVk
ZSAiSURCSW5kZXhCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuaCIKICNpbmNsdWRlICJJREJUcmFjaW5nLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5oIgpAQCAtNDAsNDAgKzM5LDQwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVy
YXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK2Ns
YXNzIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gYmFja2luZ1N0b3JlLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RT
dG9yZU1ldGFkYXRhKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVP
YmplY3RTdG9yZU9wZXJhdGlvbihkYXRhYmFzZSwgb2JqZWN0U3RvcmUpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihiYWNraW5nU3RvcmUs
IG9iamVjdFN0b3JlTWV0YWRhdGEpKTsKICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0o
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwogcHJpdmF0ZToKLSAgICBDcmVhdGVPYmplY3RT
dG9yZU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQotICAg
ICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCi0gICAgICAgICwgbV9vYmplY3RTdG9yZShvYmpl
Y3RTdG9yZSkKKyAgICBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBv
YmplY3RTdG9yZU1ldGFkYXRhKQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9y
ZSkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlTWV0YWRhdGEob2JqZWN0U3RvcmVNZXRhZGF0YSkK
ICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0
YWJhc2U7Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3Rv
cmU7CisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Cisg
ICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7CiB9
OwogCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZU9wZXJh
dGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworY2xh
c3MgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0
b3JlTWV0YWRhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZU9i
amVjdFN0b3JlT3BlcmF0aW9uKGRhdGFiYXNlLCBvYmplY3RTdG9yZSkpOworICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwg
b2JqZWN0U3RvcmVNZXRhZGF0YSkpOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CiBwcml2YXRlOgotICAgIERlbGV0ZU9iamVjdFN0
b3JlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2Us
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCi0gICAg
ICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlKG9iamVj
dFN0b3JlKQorICAgIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlTWV0YWRhdGEpCisgICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3Jl
KQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RTdG9yZU1ldGFkYXRhKQog
ICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRh
YmFzZTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9y
ZTsKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAg
ICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsKIH07
CiAKIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24g
OiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKQEAgLTEwMCw0
MCArOTksNDAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IG1f
ZGF0YWJhc2VDYWxsYmFja3M7CiB9OwogCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpD
cmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbiB7CitjbGFzcyBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0
aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3Bl
cmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFz
ZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+
IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENy
ZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlv
bihkYXRhYmFzZSwgb2JqZWN0U3RvcmVJZCkpOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CiBwcml2YXRlOgotICAgIENyZWF0ZU9i
amVjdFN0b3JlQWJvcnRPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RT
dG9yZSkKKyAgICBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKICAg
ICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2Jq
ZWN0U3RvcmUpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCiAgICAg
ewogICAgIH0KIAotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNl
OwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwor
ICAgIGNvbnN0IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOworICAg
IGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwogfTsKIAotY2xhc3MgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworY2xhc3MgRGVsZXRlT2JqZWN0U3Rv
cmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVy
YXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
SW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2Jq
ZWN0U3RvcmUpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBk
YXRhYmFzZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUpCiAgICAg
ewogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVy
YXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlKSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgRGVsZXRl
T2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElt
cGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlKQorICAgIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKICAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNl
KQotICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCisgICAgICAgICwgbV9vYmpl
Y3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0b3JlTWV0YWRhdGEpCiAgICAgewogICAgIH0KIAogICAg
IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOwotICAgIFJlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOworICAgIElEQk9iamVjdFN0
b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9yZU1ldGFkYXRhOwogfTsKIAogY2xhc3MgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CkBAIC0xNTYsNiArMTU1LDg2IEBAIHBy
aXZhdGU6CiAgICAgaW50NjRfdCBtX3ByZXZpb3VzSW50VmVyc2lvbjsKIH07CiAKK2NsYXNzIENy
ZWF0ZUluZGV4T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9w
ZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+
IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFk
YXRhJiBpbmRleE1ldGFkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
cmVhdGVJbmRleE9wZXJhdGlvbihiYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0
YWRhdGEpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCopOworcHJpdmF0ZToKKyAgICBDcmVhdGVJbmRleE9wZXJhdGlvbihQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCisgICAgICAgIDogbV9iYWNr
aW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RT
dG9yZUlkKQorICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQorICAgIHsK
KyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9y
ZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBJREJJbmRl
eE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKK307CisKK2NsYXNzIERlbGV0ZUluZGV4T3BlcmF0
aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3Bl
cmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZUluZGV4T3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Citwcml2YXRlOgorICAgIERlbGV0ZUluZGV4T3Bl
cmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQorICAgICAgICA6IG1fYmFja2luZ1N0b3Jl
KGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkK
KyAgICAgICAgLCBtX2luZGV4SWQoaW5kZXhJZCkKKyAgICB7CisgICAgfQorCisgICAgY29uc3Qg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgaW50NjRf
dCBtX29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgaW50NjRfdCBtX2luZGV4SWQ7Cit9OworCitj
bGFzcyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZUlu
ZGV4QWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKTsKKyAg
ICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCop
OworcHJpdmF0ZToKKyAgICBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkKQorICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgICAgICwg
bV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4
SWQpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiBtX2RhdGFiYXNlOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAg
IGNvbnN0IGludDY0X3QgbV9pbmRleElkOworfTsKKworY2xhc3MgRGVsZXRlSW5kZXhBYm9ydE9w
ZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0
YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5k
ZXhNZXRhZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlSW5k
ZXhBYm9ydE9wZXJhdGlvbihkYXRhYmFzZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkp
OworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKik7Citwcml2YXRlOgorICAgIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24oUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgICAgICA6IG1fZGF0
YWJhc2UoZGF0YWJhc2UpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQp
CisgICAgICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAgeworICAgIH0K
KworICAgIGNvbnN0IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOwor
ICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEgbV9pbmRleE1ldGFkYXRhOworfTsKKwogY2xhc3MgR2V0T3BlcmF0aW9uIDogcHVibGlj
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgY29uc3QgSURCRGF0
YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKQpAQCAtMTc1LDYgKzI1NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICwgbV9j
dXJzb3JUeXBlKGN1cnNvclR5cGUpCiAgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQog
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmpl
Y3RTdG9yZUlkKSk7CiAgICAgICAgIEFTU0VSVChtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9i
amVjdFN0b3JlSWQpLmlkID09IG9iamVjdFN0b3JlSWQpOwogICAgIH0KIApAQCAtNDA1LDYgKzQ4
NSw0NiBAQCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNv
bnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0bwogICAgIEFTU0VSVCghbV9tZXRhZGF0YS5u
YW1lLmlzTnVsbCgpKTsKIH0KIAordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRPYmpl
Y3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgaW50NjRf
dCBuZXdNYXhPYmplY3RTdG9yZUlkKQoreworICAgIEFTU0VSVCghbV9tZXRhZGF0YS5vYmplY3RT
dG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmUuaWQpKTsKKyAgICBpZiAobmV3TWF4T2JqZWN0U3Rv
cmVJZCAhPSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgQVNT
RVJUKG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCA8IG5ld01heE9iamVjdFN0b3JlSWQpOwor
ICAgICAgICBtX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQgPSBuZXdNYXhPYmplY3RTdG9yZUlk
OworICAgIH0KKyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmUuaWQs
IG9iamVjdFN0b3JlKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVP
YmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAgQVNTRVJUKG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBtX21ldGFkYXRh
Lm9iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmVJZCk7Cit9CisKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6YWRkSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJ
bmRleE1ldGFkYXRhJiBpbmRleCwgaW50NjRfdCBuZXdNYXhJbmRleElkKQoreworICAgIEFTU0VS
VChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3Rv
cmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVCghb2JqZWN0U3RvcmUuaW5kZXhl
cy5jb250YWlucyhpbmRleC5pZCkpOworICAgIG9iamVjdFN0b3JlLmluZGV4ZXMuc2V0KGluZGV4
LmlkLCBpbmRleCk7CisgICAgaWYgKG5ld01heEluZGV4SWQgIT0gSURCSW5kZXhNZXRhZGF0YTo6
SW52YWxpZElkKSB7CisgICAgICAgIEFTU0VSVChvYmplY3RTdG9yZS5tYXhJbmRleElkIDwgbmV3
TWF4SW5kZXhJZCk7CisgICAgICAgIG9iamVjdFN0b3JlLm1heEluZGV4SWQgPSBuZXdNYXhJbmRl
eElkOworICAgIH0KKyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVJ
ZCwgb2JqZWN0U3RvcmUpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92
ZUluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQoreworICAgIEFT
U0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Cisg
ICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0
U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZS5pbmRl
eGVzLmNvbnRhaW5zKGluZGV4SWQpKTsKKyAgICBvYmplY3RTdG9yZS5pbmRleGVzLnJlbW92ZShp
bmRleElkKTsKKyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVJZCwg
b2JqZWN0U3RvcmUpOworfQorCiBib29sIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5JbnRl
cm5hbCgpCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CkBAIC00MTIsMTAgKzUzMiw4IEBA
IGJvb2wgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKCkKICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKHN1Y2Nlc3MgPT0gKG1fbWV0YWRhdGEuaWQgIT0gSW52YWxpZElkKSwgInN1
Y2Nlc3MgPSAlcywgbV9pZCA9ICVsbGQiLCBzdWNjZXNzID8gInRydWUiIDogImZhbHNlIiwgc3Rh
dGljX2Nhc3Q8bG9uZyBsb25nPihtX21ldGFkYXRhLmlkKSk7CiAgICAgaWYgKCFvaykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdWNjZXNzKSB7Ci0gICAgICAgIGxvYWRPYmplY3RT
dG9yZXMoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChzdWNjZXNzKQor
ICAgICAgICByZXR1cm4gbG9hZE9iamVjdFN0b3JlcygpOwogICAgIHJldHVybiBtX2JhY2tpbmdT
dG9yZS0+Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShtX21ldGFkYXRhLm5hbWUsIG1fbWV0YWRh
dGEudmVyc2lvbiwgbV9tZXRhZGF0YS5pbnRWZXJzaW9uLCBtX21ldGFkYXRhLmlkKTsKIH0KIApA
QCAtNDMwLDY0ICs1NDgsMTEyIEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpiYWNraW5nU3RvcmUoKSBjb25zdAogCiBJREJEYXRhYmFzZU1ldGFk
YXRhIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKIHsKLSAgICAvLyBG
SVhNRTogRmlndXJlIG91dCBhIHdheSB0byBrZWVwIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdl
dChOKS5pbmRleGVzIHVwIHRvIGRhdGUgcmF0aGVyIHRoYW4gcmVnZW5lcmF0aW5nIHRoaXMgZXZl
cnkgdGltZS4KLSAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fbWV0YWRhdGEpOwot
ICAgIGZvciAoT2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9y
ZXMuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1l
dGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQoaXQtPnZhbHVlLT5pZCgpLCBpdC0+dmFsdWUtPm1ldGFk
YXRhKCkpOwotICAgIHJldHVybiBtZXRhZGF0YTsKKyAgICByZXR1cm4gbV9tZXRhZGF0YTsKIH0K
IAotUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQogewot
ICAgIEFTU0VSVCghbV9vYmplY3RTdG9yZXMuY29udGFpbnMoaWQpKTsKLQotICAgIFJlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhKG5hbWUsIGlkLCBr
ZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6Ok1p
bmltdW1JbmRleElkKSk7Ci0gICAgQVNTRVJUKG9iamVjdFN0b3JlLT5uYW1lKCkgPT0gbmFtZSk7
CisgICAgSURCX1RSQUNFKCJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9y
ZSIpOworICAgIEFTU0VSVCghbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0
U3RvcmVJZCkpOwogCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5z
YWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7
Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJ
T05fQ0hBTkdFKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rp
b25JZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwogCi0gICAgLy8gRklYTUU6IEZpeCBlZGdl
IGNhc2VzIGFyb3VuZCB0cmFuc2FjdGlvbiBhYm9ydHMgdGhhdCBwcmV2ZW50IHRoaXMgZnJvbSBq
dXN0IGJlaW5nIEFTU0VSVChpZCA9PSBtX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQgKyAxKQot
ICAgIEFTU0VSVChpZCA+IG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCk7Ci0gICAgbV9tZXRh
ZGF0YS5tYXhPYmplY3RTdG9yZUlkID0gaWQ7CisgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBv
YmplY3RTdG9yZU1ldGFkYXRhKG5hbWUsIG9iamVjdFN0b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNy
ZW1lbnQsIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6TWluaW11bUluZGV4SWQpOwog
Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENyZWF0ZU9iamVjdFN0b3JlT3Bl
cmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmUpLCBDcmVhdGVPYmplY3RTdG9yZUFib3J0
T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmUpKSkgewotICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENyZWF0ZU9iamVj
dFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlTWV0YWRh
dGEpLCBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0
U3RvcmVJZCkpOwogCi0gICAgbV9vYmplY3RTdG9yZXMuc2V0KGlkLCBvYmplY3RTdG9yZSk7Ci0g
ICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKKyAgICBhZGRPYmplY3RTdG9yZShvYmpl
Y3RTdG9yZU1ldGFkYXRhLCBvYmplY3RTdG9yZUlkKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKK3ZvaWQgQ3JlYXRlT2JqZWN0U3RvcmVPcGVy
YXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7
CiAgICAgSURCX1RSQUNFKCJDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbiIpOwotICAgIGlmICgh
bV9kYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9u
LT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlLT5pZCgpLCBtX29iamVjdFN0
b3JlLT5pZCgpLCBtX29iamVjdFN0b3JlLT5uYW1lKCksIG1fb2JqZWN0U3RvcmUtPmtleVBhdGgo
KSwgbV9vYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpKSkgewotICAgICAgICBSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9y
IGNyZWF0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIsIG1fb2JqZWN0U3RvcmUtPm5hbWUoKS51dGY4
KCkuZGF0YSgpKSk7CisgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUo
dHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIHRyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpLT5pZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuaWQsIG1fb2JqZWN0U3RvcmVNZXRh
ZGF0YS5uYW1lLCBtX29iamVjdFN0b3JlTWV0YWRhdGEua2V5UGF0aCwgbV9vYmplY3RTdG9yZU1l
dGFkYXRhLmF1dG9JbmNyZW1lbnQpKSB7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9y
PiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3IgY3JlYXRpbmcgb2Jq
ZWN0IHN0b3JlICclcycuIiwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEo
KSkpOwogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IucmVsZWFzZSgpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShpbnQ2NF90IGlkKQordm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RT
dG9yZXMuZ2V0KGlkKTsKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRl
bGV0ZU9iamVjdFN0b3JlIik7CisgICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNv
bnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
JiBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVj
dFN0b3JlSWQpOworCisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0
aW9uSWQpKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1f
dHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24t
Pm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOworCisgICAgdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKG1f
YmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSwgIERlbGV0ZU9iamVjdFN0b3JlQWJv
cnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7CisgICAgcmVt
b3ZlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRy
eSkKIHsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZXMuY29udGFpbnMoaWQpKTsKKyAgICBJREJf
VFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4Iik7CisgICAgQVNTRVJU
KG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gbV9vYmplY3RTdG9yZXMuZ2V0KGlkKTsKLSAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKKyAgICBBU1NFUlQoIW9iamVj
dFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkpOworICAgIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEgaW5kZXhNZXRhZGF0YShuYW1lLCBpbmRleElkLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRp
RW50cnkpOworCisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9u
SWQpKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJh
bnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKICAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1v
ZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOwogCi0gICAgaWYgKCF0cmFu
c2FjdGlvbi0+c2NoZWR1bGVUYXNrKERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUo
dGhpcywgb2JqZWN0U3RvcmUpLCBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVh
dGUodGhpcywgb2JqZWN0U3RvcmUpKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxl
VGFzayhDcmVhdGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBvYmplY3RT
dG9yZUlkLCBpbmRleE1ldGFkYXRhKSwgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRl
KHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKTsKKworICAgIGFkZEluZGV4KG9iamVjdFN0
b3JlSWQsIGluZGV4TWV0YWRhdGEsIGluZGV4SWQpOworfQorCisKK3ZvaWQgQ3JlYXRlSW5kZXhP
cGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24p
Cit7CisgICAgSURCX1RSQUNFKCJDcmVhdGVJbmRleE9wZXJhdGlvbiIpOworICAgIGlmICghbV9i
YWNraW5nU3RvcmUtPmNyZWF0ZUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+aWQoKSwgbV9vYmplY3RTdG9yZUlkLCBt
X2luZGV4TWV0YWRhdGEuaWQsIG1faW5kZXhNZXRhZGF0YS5uYW1lLCBtX2luZGV4TWV0YWRhdGEu
a2V5UGF0aCwgbV9pbmRleE1ldGFkYXRhLnVuaXF1ZSwgbV9pbmRleE1ldGFkYXRhLm11bHRpRW50
cnkpKSB7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIklu
dGVybmFsIGVycm9yIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZSBpbmRleCAnJXMnLiIsIG1faW5kZXhN
ZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgbV9vYmplY3RTdG9yZXMucmVtb3ZlKGlkKTsKK30KKwordm9pZCBDcmVhdGVJbmRleEFib3J0
T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9u
KQoreworICAgIElEQl9UUkFDRSgiQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbiIpOworICAgIEFT
U0VSVCghdHJhbnNhY3Rpb24pOworICAgIG1fZGF0YWJhc2UtPnJlbW92ZUluZGV4KG1fb2JqZWN0
U3RvcmVJZCwgbV9pbmRleElkKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpk
ZWxldGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkKQoreworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6ZGVsZXRlSW5kZXgiKTsKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29u
dGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEg
b2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7
CisKKyAgICBBU1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7Cisg
ICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IG9iamVjdFN0b3JlLmlu
ZGV4ZXMuZ2V0KGluZGV4SWQpOworCisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5z
KHRyYW5zYWN0aW9uSWQpKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2Fj
dGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBBU1NFUlQodHJh
bnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOworCisg
ICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhEZWxldGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRl
KG1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSwgRGVsZXRlSW5kZXhBYm9y
dE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsK
KworICAgIHJlbW92ZUluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOworfQorCit2b2lkIERl
bGV0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRy
YW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiRGVsZXRlSW5kZXhPcGVyYXRpb24iKTsKKyAg
ICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlSW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5pZCgpLCBtX29iamVjdFN0b3Jl
SWQsIG1faW5kZXhJZCk7Cit9CisKK3ZvaWQgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJf
VFJBQ0UoIkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24iKTsKKyAgICBBU1NFUlQoIXRyYW5zYWN0
aW9uKTsKKyAgICBtX2RhdGFiYXNlLT5hZGRJbmRleChtX29iamVjdFN0b3JlSWQsIG1faW5kZXhN
ZXRhZGF0YSwgSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKTsKIH0KIAogdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpjb21taXQoaW50NjRfdCB0cmFuc2FjdGlvbklkKQpAQCAtNTA4LDcg
KzY3NCw3IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Z2V0KGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpCiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rp
b25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKIAot
ICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soR2V0T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNr
aW5nU3RvcmUsIG1ldGFkYXRhKCksIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBr
ZXlPbmx5ID8gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5T25seSA6IElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U6OktleUFuZFZhbHVlLCBjYWxsYmFja3MpKTsKKyAgICB0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKEdldE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBtX21l
dGFkYXRhLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwga2V5T25seSA/IElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleU9ubHkgOiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
OjpLZXlBbmRWYWx1ZSwgY2FsbGJhY2tzKSk7CiB9CiAKIHZvaWQgR2V0T3BlcmF0aW9uOjpwZXJm
b3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQpAQCAtNjA3LDcgKzc3
Myw3IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHV0KGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBWCiAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CiAg
ICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05M
WSk7CiAKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlTWV0YWRh
dGEgPSBtZXRhZGF0YSgpLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisgICAgY29u
c3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0
YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwogCiAgICAgQVNTRVJUKG9iamVjdFN0
b3JlTWV0YWRhdGEuYXV0b0luY3JlbWVudCB8fCBrZXkuZ2V0KCkpOwogCkBAIC03MTUsOCArODgx
LDggQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFMKICAgICBWZWN0b3I8T3duUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKICAgICBTdHJp
bmcgZXJyb3JNZXNzYWdlOwogICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNlOwotICAg
IEFTU0VSVChtZXRhZGF0YSgpLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7
Ci0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9
IG1ldGFkYXRhKCkub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKyAgICBBU1NFUlQo
bV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBtX21ldGFk
YXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CiAgICAgYm9vbCBiYWNraW5nU3Rv
cmVTdWNjZXNzID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bWFrZUluZGV4V3JpdGVycyh0
cmFuc2FjdGlvbiwgc3RvcmUuZ2V0KCksIGlkKCksIG9iamVjdFN0b3JlTWV0YWRhdGEsIHByaW1h
cnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JN
ZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKICAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3Mp
IHsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tp
bmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7CkBAIC04MDMsNyArOTY5LDcg
QEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjb3VudChpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwKICAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmNvdW50Iik7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRy
YW5zYWN0aW9uSWQpKTsKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlv
biA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBBU1NFUlQobWV0YWRh
dGEoKS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIEFTU0VSVCht
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CiAgICAgdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzayhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0
b3JlLCBpZCgpLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7
CiB9CiAKQEAgLTg0Myw3ICsxMDA5LDYgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpk
ZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3QKIHZvaWQg
RGVsZXRlUmFuZ2VPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCog
dHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJEZWxldGVSYW5nZU9wZXJhdGlvbiIpOwot
CiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3Ig
PSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9r
ZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKICAgICBpZiAoYmFja2luZ1N0b3JlQ3Vy
c29yKSB7CiAgICAgICAgIGRvIHsKQEAgLTg3MiwxMiArMTAzNywxMiBAQCB2b2lkIENsZWFyT3Bl
cmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQog
ICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKK3ZvaWQgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRp
b246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7CiAg
ICAgSURCX1RSQUNFKCJEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbiIpOwotICAgIGJvb2wgb2sg
PSBtX2RhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2UtPmlkKCksIG1fb2JqZWN0
U3RvcmUtPmlkKCkpOworICAgIGJvb2wgb2sgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0
U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIHRyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLT5pZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuaWQpOwogICAgIGlmICgh
b2spIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmlu
Zzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBkZWxldGluZyBvYmplY3Qgc3RvcmUgJyVzJy4iLCBt
X29iamVjdFN0b3JlLT5uYW1lKCkudXRmOCgpLmRhdGEoKSkpOworICAgICAgICBSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9y
IGRlbGV0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5uYW1l
LnV0ZjgoKS5kYXRhKCkpKTsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKICAg
ICB9CiB9CkBAIC0xMTMyLDcgKzEyOTcsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmRlbGV0ZURhdGFiYXNlRmluYWwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYQogICAg
IG1fbWV0YWRhdGEudmVyc2lvbiA9IE5vU3RyaW5nVmVyc2lvbjsKICAgICBtX21ldGFkYXRhLmlk
ID0gSW52YWxpZElkOwogICAgIG1fbWV0YWRhdGEuaW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0
YWRhdGE6Ok5vSW50VmVyc2lvbjsKLSAgICBtX29iamVjdFN0b3Jlcy5jbGVhcigpOworICAgIG1f
bWV0YWRhdGEub2JqZWN0U3RvcmVzLmNsZWFyKCk7CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
KTsKIH0KIApAQCAtMTE3NywzNSArMTM0MiwyOSBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OmNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENhbGxiYWNrcwog
ICAgIG1fY2xvc2luZ0Nvbm5lY3Rpb24gPSBmYWxzZTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKK2Jvb2wgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6bG9hZE9iamVjdFN0b3JlcygpCiB7Ci0gICAgVmVjdG9yPGludDY0X3Q+IGlkczsKLSAgICBW
ZWN0b3I8U3RyaW5nPiBuYW1lczsKLSAgICBWZWN0b3I8SURCS2V5UGF0aD4ga2V5UGF0aHM7Ci0g
ICAgVmVjdG9yPGJvb2w+IGF1dG9JbmNyZW1lbnRGbGFnczsKLSAgICBWZWN0b3I8aW50NjRfdD4g
bWF4SW5kZXhJZHM7Ci0gICAgVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IG9iamVjdFN0
b3JlcyA9IG1fYmFja2luZ1N0b3JlLT5nZXRPYmplY3RTdG9yZXMobV9tZXRhZGF0YS5pZCk7Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFN0b3Jlcy5zaXplKCk7IGkrKykKLSAg
ICAgICAgbV9vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3Jlc1tpXS5pZCwgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3Jlc1tpXSkpOworICAgIG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmNsZWFyKCk7CisgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5n
ZXRPYmplY3RTdG9yZXMobV9tZXRhZGF0YS5pZCwgJm1fbWV0YWRhdGEub2JqZWN0U3RvcmVzKTsK
IH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0
T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9u
KQordm9pZCBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogeworICAgIElEQl9UUkFDRSgiQ3JlYXRl
T2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiIpOwogICAgIEFTU0VSVCghdHJhbnNhY3Rpb24pOwot
ICAgIEFTU0VSVChtX2RhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlucyhtX29iamVjdFN0
b3JlLT5pZCgpKSk7Ci0gICAgbV9kYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMucmVtb3ZlKG1fb2Jq
ZWN0U3RvcmUtPmlkKCkpOworICAgIG1fZGF0YWJhc2UtPnJlbW92ZU9iamVjdFN0b3JlKG1fb2Jq
ZWN0U3RvcmVJZCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6RGVsZXRlT2Jq
ZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KiB0cmFuc2FjdGlvbikKK3ZvaWQgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKKyAgICBJREJf
VFJBQ0UoIkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24iKTsKICAgICBBU1NFUlQoIXRy
YW5zYWN0aW9uKTsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRh
aW5zKG1fb2JqZWN0U3RvcmUtPmlkKCkpKTsKLSAgICBtX2RhdGFiYXNlLT5tX29iamVjdFN0b3Jl
cy5zZXQobV9vYmplY3RTdG9yZS0+aWQoKSwgbV9vYmplY3RTdG9yZSk7CisgICAgbV9kYXRhYmFz
ZS0+YWRkT2JqZWN0U3RvcmUobV9vYmplY3RTdG9yZU1ldGFkYXRhLCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhOjpJbnZhbGlkSWQpOwogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZl
cnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKiB0cmFuc2FjdGlvbikKIHsKKyAgICBJREJfVFJBQ0UoIlZlcnNpb25DaGFuZ2VBYm9ydE9w
ZXJhdGlvbiIpOwogICAgIEFTU0VSVCghdHJhbnNhY3Rpb24pOwogICAgIG1fZGF0YWJhc2UtPm1f
bWV0YWRhdGEudmVyc2lvbiA9IG1fcHJldmlvdXNWZXJzaW9uOwogICAgIG1fZGF0YWJhc2UtPm1f
bWV0YWRhdGEuaW50VmVyc2lvbiA9IG1fcHJldmlvdXNJbnRWZXJzaW9uOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5oCmluZGV4IDk0NGI4MzAwYzdlMzIyM2JkZDM0NGJiNWJhODFkMWMzYjE0ZmExNjIuLmRlODJj
M2Q0MDkzYWE4YjU1OWJhNzY0ZDVlM2JmNThhZDU0YWVlNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgK
QEAgLTQwLDcgKzQwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCQmFja2luZ1N0
b3JlOwogY2xhc3MgSURCRGF0YWJhc2U7CiBjbGFzcyBJREJGYWN0b3J5QmFja2VuZEltcGw7Ci1j
bGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOwogY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDsKIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKIGNsYXNzIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CkBAIC01NCwxNiArNTMsMjAgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKICAgICBpbnQ2NF90IGlkKCkg
Y29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5pZDsgfQorICAgIHZvaWQgYWRkT2JqZWN0U3RvcmUo
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIGludDY0X3QgbmV3TWF4T2JqZWN0U3RvcmVJ
ZCk7CisgICAgdm9pZCByZW1vdmVPYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwor
ICAgIHZvaWQgYWRkSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1l
dGFkYXRhJiwgaW50NjRfdCBuZXdNYXhJbmRleElkKTsKKyAgICB2b2lkIHJlbW92ZUluZGV4KGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKIAogICAgIHZvaWQgb3BlbkNv
bm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24pOwogICAg
IHZvaWQgZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAogICAgIC8v
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZQogICAgIHZpcnR1YWwgSURCRGF0YWJhc2VNZXRh
ZGF0YSBtZXRhZGF0YSgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgaWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9v
bCBhdXRvSW5jcmVtZW50KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2
b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3Rv
cmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGlkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSAgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50KTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpOwogICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBtZXRob2QgaW4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzkyMy4KICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVUcmFuc2FjdGlv
bihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3Rv
cmVJZHMsIElEQlRyYW5zYWN0aW9uOjpNb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVHJh
bnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgdW5zaWduZWQg
c2hvcnQgbW9kZSk7CkBAIC03MiwxMCArNzUsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydChp
bnQ2NF90IHRyYW5zYWN0aW9uSWQpOwogCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUluZGV4KGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBi
b29sIG11bHRpRW50cnkpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktl
eVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCk7CiAKLSAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG9iamVjdFN0b3JlKGludDY0X3QgaWQpOwogICAgIElEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KICAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZChQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKICAgICB2b2lkIHRyYW5zYWN0aW9u
RmluaXNoZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CkBAIC05Niwy
MCArOTgsMTYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgb3BlbkludGVybmFsKCk7CiAgICAgdm9p
ZCBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pOwotICAgIHZvaWQgbG9hZE9iamVjdFN0b3Jlcygp
OworICAgIGJvb2wgbG9hZE9iamVjdFN0b3JlcygpOwogICAgIHNpemVfdCBjb25uZWN0aW9uQ291
bnQoKTsKICAgICB2b2lkIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKIAogICAgIGJvb2wgaXNEZWxl
dGVEYXRhYmFzZUJsb2NrZWQoKTsKICAgICB2b2lkIGRlbGV0ZURhdGFiYXNlRmluYWwoUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+KTsKIAotICAgIGNsYXNzIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0
aW9uOwotICAgIGNsYXNzIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOwogICAgIGNsYXNzIFZl
cnNpb25DaGFuZ2VPcGVyYXRpb247CiAKICAgICAvLyBXaGVuIGEgInZlcnNpb25jaGFuZ2UiIHRy
YW5zYWN0aW9uIGFib3J0cywgdGhlc2UgcmVzdG9yZSB0aGUgYmFjay1lbmQgb2JqZWN0IGhpZXJh
cmNoeS4KLSAgICBjbGFzcyBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOwotICAgIGNs
YXNzIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb247CiAgICAgY2xhc3MgVmVyc2lvbkNo
YW5nZUFib3J0T3BlcmF0aW9uOwogCiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNr
aW5nU3RvcmU7CkBAIC0xMTksOSArMTE3LDYgQEAgcHJpdmF0ZToKICAgICAvLyBUaGlzIG1pZ2h0
IG5vdCBuZWVkIHRvIGJlIGEgUmVmUHRyIHNpbmNlIHRoZSBmYWN0b3J5J3MgbGlmZXRpbWUgaXMg
dGhhdCBvZiB0aGUgcGFnZSBncm91cCwgYnV0IGl0J3MgYmV0dGVyIHRvIGJlIGNvbnNlcnZpdGl2
ZSB0aGFuIHNvcnJ5LgogICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2VuZEltcGw+IG1fZmFjdG9y
eTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gPiBPYmplY3RTdG9yZU1hcDsKLSAgICBPYmplY3RTdG9yZU1hcCBtX29iamVj
dFN0b3JlczsKLQogICAgIE93blB0cjxJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBtX3RyYW5z
YWN0aW9uQ29vcmRpbmF0b3I7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk0MGM1ZTdlMThiYmE0YTgwNTU2NGU0YmU4NDZm
OTMyNDczYjgxYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJJ
REJDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW1wbC5oIgotI2luY2x1
ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2Vw
dGlvbi5oIgotI2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0j
aW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmgiCi0jaW5jbHVkZSAiSURCVHJhY2luZy5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JREJJbmRleEJhY2tlbmRJ
bXBsOjpJREJJbmRleEJhY2tlbmRJbXBsKGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRh
dGFiYXNlLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBtZXRhZGF0YSkKLSAgICA6IG1fZGF0YWJh
c2UoZGF0YWJhc2UpCi0gICAgLCBtX21ldGFkYXRhKG1ldGFkYXRhKQotewotfQotCi1JREJJbmRl
eEJhY2tlbmRJbXBsOjp+SURCSW5kZXhCYWNrZW5kSW1wbCgpCi17Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1w
bC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTkzOTk5ZTE2MzNkNGY3ZmE3MWU5
YjY4NzRkZTE4MTAxYzIwZTlhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2Vu
ZEltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElE
QkluZGV4QmFja2VuZEltcGxfaAotI2RlZmluZSBJREJJbmRleEJhY2tlbmRJbXBsX2gKLQotI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRl
ICJJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJLZXlQYXRoLmgiCi0j
aW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJ
REJCYWNraW5nU3RvcmU7Ci1jbGFzcyBJREJLZXk7Ci1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOwotCi1jbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsIDogcHVibGljIElEQkluZGV4QmFj
a2VuZEludGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW1wbD4gY3JlYXRlKGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNl
LCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBtZXRhZGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSURCSW5kZXhCYWNrZW5kSW1wbChkYXRhYmFzZSwgbWV0YWRhdGEpKTsK
LSAgICB9Ci0gICAgdmlydHVhbCB+SURCSW5kZXhCYWNrZW5kSW1wbCgpOwotCi0gICAgaW50NjRf
dCBpZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9tZXRhZGF0YS5pZCAhPSBJbnZh
bGlkSWQpOwotICAgICAgICByZXR1cm4gbV9tZXRhZGF0YS5pZDsKLSAgICB9Ci0KLSAgICAvLyBJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2UKLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlv
bkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5LZXlDdXJzb3IoUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0KLSAgICBJREJJbmRleE1l
dGFkYXRhIG1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YTsgfQotICAgIGNvbnN0
IFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbWV0YWRhdGEubmFtZTsgfQotICAgIGNvbnN0IElE
QktleVBhdGgmIGtleVBhdGgoKSB7IHJldHVybiBtX21ldGFkYXRhLmtleVBhdGg7IH0KLSAgICBj
b25zdCBib29sJiB1bmlxdWUoKSB7IHJldHVybiBtX21ldGFkYXRhLnVuaXF1ZTsgfQotICAgIGNv
bnN0IGJvb2wmIG11bHRpRW50cnkoKSB7IHJldHVybiBtX21ldGFkYXRhLm11bHRpRW50cnk7IH0K
LQotcHJpdmF0ZToKLSAgICBJREJJbmRleEJhY2tlbmRJbXBsKGNvbnN0IElEQkRhdGFiYXNlQmFj
a2VuZEltcGwqLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJik7Ci0KLSAgICBzdGF0aWMgY29uc3Qg
aW50NjRfdCBJbnZhbGlkSWQgPSAwOwotCi0gICAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+
IGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UtPmJhY2tpbmdTdG9yZSgp
OyB9Ci0gICAgaW50NjRfdCBkYXRhYmFzZUlkKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS0+
aWQoKTsgfQotCi0gICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogbV9kYXRhYmFzZTsK
LQotICAgIElEQkluZGV4TWV0YWRhdGEgbV9tZXRhZGF0YTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJJbmRleEJhY2tlbmRJbXBsX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNw
cAppbmRleCA4OTEyNTNkOWUwNGM5MWU5NWFlZWIyMzA0NTQ1ZjI0NjZhMDI3MjVlLi5mNTBmZTFl
YmI4MDgyZTIxNzZmOGQ0ZmVkMzBkOWFhYjAzMjU1ZjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC00OSwxMyArNDks
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQg
ZGVmYXVsdERpcmVjdGlvbiA9IElEQkN1cnNvcjo6TkVYVDsKIAotSURCT2JqZWN0U3RvcmU6OklE
Qk9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG1ldGFkYXRhLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gaWRiT2JqZWN0U3RvcmUsIElE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK0lEQk9iamVjdFN0b3JlOjpJREJPYmplY3RTdG9y
ZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0YSwgSURCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uKQogICAgIDogbV9tZXRhZGF0YShtZXRhZGF0YSkKLSAgICAsIG1fYmFja2Vu
ZChpZGJPYmplY3RTdG9yZSkKICAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAg
LCBtX2RlbGV0ZWQoZmFsc2UpCiB7Ci0gICAgQVNTRVJUKG1fYmFja2VuZCk7CiAgICAgQVNTRVJU
KG1fdHJhbnNhY3Rpb24pOwogICAgIC8vIFdlIHBhc3MgYSByZWZlcmVuY2UgdG8gdGhpcyBvYmpl
Y3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgogICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVu
dCgpOwpAQCAtMzg1LDkgKzM4Myw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0
b3JlOjpjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0CiAgICAgfQog
CiAgICAgaW50NjRfdCBpbmRleElkID0gbV9tZXRhZGF0YS5tYXhJbmRleElkICsgMTsKLSAgICBt
X2JhY2tlbmQtPmNyZWF0ZUluZGV4KGluZGV4SWQsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVs
dGlFbnRyeSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgaWYgKGVjKQotICAg
ICAgICByZXR1cm4gMDsKKyAgICBiYWNrZW5kREIoKS0+Y3JlYXRlSW5kZXgobV90cmFuc2FjdGlv
bi0+aWQoKSwgaWQoKSwgaW5kZXhJZCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5
KTsKIAogICAgICsrbV9tZXRhZGF0YS5tYXhJbmRleElkOwogCkBAIC00NjYsMTQgKzQ2MiwxMyBA
QCB2b2lkIElEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5k
LT5kZWxldGVJbmRleChpbmRleElkLCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAg
ICBpZiAoIWVjKSB7Ci0gICAgICAgIElEQkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhN
YXAuZmluZChuYW1lKTsKLSAgICAgICAgaWYgKGl0ICE9IG1faW5kZXhNYXAuZW5kKCkpIHsKLSAg
ICAgICAgICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5yZW1vdmUoaXQtPnZhbHVlLT5pZCgpKTsKLSAg
ICAgICAgICAgIGl0LT52YWx1ZS0+bWFya0RlbGV0ZWQoKTsKLSAgICAgICAgICAgIG1faW5kZXhN
YXAucmVtb3ZlKG5hbWUpOwotICAgICAgICB9CisgICAgYmFja2VuZERCKCktPmRlbGV0ZUluZGV4
KG1fdHJhbnNhY3Rpb24tPmlkKCksIGlkKCksIGluZGV4SWQpOworCisgICAgSURCSW5kZXhNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9pbmRleE1hcC5maW5kKG5hbWUpOworICAgIGlmIChpdCAhPSBtX2lu
ZGV4TWFwLmVuZCgpKSB7CisgICAgICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5yZW1vdmUoaXQtPnZh
bHVlLT5pZCgpKTsKKyAgICAgICAgaXQtPnZhbHVlLT5tYXJrRGVsZXRlZCgpOworICAgICAgICBt
X2luZGV4TWFwLnJlbW92ZShuYW1lKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCmluZGV4IDdlMmY3MmZhZWE4NTE5
M2MzMDkzZWQ2M2Q4NWFhMmE1MDJmM2MwMjcuLjZkZmQ5Nzg4YTUwOGM2Yjk4NTIwZGUwZjQxZDMx
ZGQxM2ZkYTI3YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkRpY3Rpb25hcnku
aCIKICNpbmNsdWRlICJJREJDdXJzb3IuaCIKICNpbmNsdWRlICJJREJJbmRleC5oIgotI2luY2x1
ZGUgIklEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQktleS5oIgogI2lu
Y2x1ZGUgIklEQktleVJhbmdlLmgiCiAjaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKQEAgLTUyLDkg
KzUxLDkgQEAgY2xhc3MgSURCQW55OwogCiBjbGFzcyBJREJPYmplY3RTdG9yZSA6IHB1YmxpYyBT
Y3JpcHRXcmFwcGFibGUsIHB1YmxpYyBSZWZDb3VudGVkPElEQk9iamVjdFN0b3JlPiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZShjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0YSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlKGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEmIG1ldGFkYXRhLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24p
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQk9iamVjdFN0b3JlKG1ldGFk
YXRhLCBiYWNrZW5kLCB0cmFuc2FjdGlvbikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IElEQk9iamVjdFN0b3JlKG1ldGFkYXRhLCB0cmFuc2FjdGlvbikpOwogICAgIH0KICAgICB+SURC
T2JqZWN0U3RvcmUoKSB7IH0KIApAQCAtMTA5LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICBJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqIGJhY2tlbmREQigpIGNvbnN0OwogCiBwcml2YXRlOgot
ICAgIElEQk9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4sIElEQlRyYW5zYWN0aW9uKik7Cisg
ICAgSURCT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIElEQlRyYW5z
YWN0aW9uKik7CiAKICAgICBpbnQ2NF90IGZpbmRJbmRleElkKGNvbnN0IFN0cmluZyYgbmFtZSkg
Y29uc3Q7CiAgICAgYm9vbCBjb250YWluc0luZGV4KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QK
QEAgLTExOCw3ICsxMTcsNiBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEgbV9tZXRhZGF0YTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBtX2JhY2tlbmQ7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0
aW9uOwogICAgIGJvb2wgbV9kZWxldGVkOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmlu
ZGV4IGU2Y2U4M2MzNWIzOGMwNGVjZWFmYTc4YTlhYWQ1NWZmODBhZmI3YjEuLmQyNGI2N2ZkOWJj
YTA5MTIwNzFkNWI5MDkxODA2ZDk3YTZhYjFlNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
Y3BwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIK
ICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJh
c2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbXBsLmgiCiAjaW5jbHVk
ZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgogI2luY2x1ZGUgIklEQktleVJh
bmdlLmgiCkBAIC00NCw5OCArNDMsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUluZGV4T3BlcmF0aW9uIDogcHVibGlj
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgQ3JlYXRlSW5kZXhPcGVyYXRpb24ob2JqZWN0U3RvcmUsIGluZGV4KSk7
Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqKTsKLXByaXZhdGU6Ci0gICAgQ3JlYXRlSW5kZXhPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBpbmRleCkKLSAgICAgICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQot
ICAgICAgICAsIG1faW5kZXgoaW5kZXgpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwotICAgIFJlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbXBsPiBtX2luZGV4OwotfTsKLQotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6RGVsZXRlSW5kZXhPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+IGluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVJ
bmRleE9wZXJhdGlvbihvYmplY3RTdG9yZSwgaW5kZXgpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2
b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBE
ZWxldGVJbmRleE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQotICAg
ICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0gICAgICAgICwgbV9pbmRleChpbmRl
eCkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7
Ci19OwotCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJbmRleEFib3J0
T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlv
bihvYmplY3RTdG9yZSwgaW5kZXgpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0o
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBDcmVhdGVJbmRleEFi
b3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCi0gICAgICAgIDog
bV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAgICAgICAgLCBtX2luZGV4KGluZGV4KQotICAg
IHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmpl
Y3RTdG9yZTsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsKLX07Ci0K
LWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRp
b24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVy
YXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKG9iamVj
dFN0b3JlLCBpbmRleCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIERlbGV0ZUluZGV4QWJvcnRPcGVy
YXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKLSAgICAgICAgOiBtX29iamVj
dFN0b3JlKG9iamVjdFN0b3JlKQotICAgICAgICAsIG1faW5kZXgoaW5kZXgpCi0gICAgewotICAg
IH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3Jl
OwotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBtX2luZGV4OwotfTsKLQotCi1JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjp+SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCgpCi17Ci19
Ci0KLUlEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwo
Y29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UsIGNvbnN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGEmIG1ldGFkYXRhKQotICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKLSAgICAs
IG1fbWV0YWRhdGEobWV0YWRhdGEpCi17Ci0gICAgbG9hZEluZGV4ZXMoKTsKLX0KLQotSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjptZXRhZGF0YSgpIGNv
bnN0Ci17Ci0gICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtZXRhZGF0YShtX21ldGFkYXRhKTsK
LSAgICBmb3IgKEluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1faW5kZXhlcy5iZWdpbigp
OyBpdCAhPSBtX2luZGV4ZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1ldGFkYXRhLmluZGV4ZXMu
c2V0KGl0LT5rZXksIGl0LT52YWx1ZS0+bWV0YWRhdGEoKSk7Ci0gICAgcmV0dXJuIG1ldGFkYXRh
OwotfQotCiBib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyOjp2ZXJp
ZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBib29sJiBjYW5BZGRLZXlzLCBjb25zdCBJ
REJLZXkqIHByaW1hcnlLZXksIFN0cmluZyogZXJyb3JNZXNzYWdlKSBjb25zdAogewogICAgIGNh
bkFkZEtleXMgPSBmYWxzZTsKQEAgLTIxMiw4NiArMTE5LDYgQEAgYm9vbCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjptYWtlSW5kZXhXcml0ZXJzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGludDY0X3Qg
aWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1
bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0
cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQVNTRVJUX1dJVEhfTUVT
U0FHRSghbV9pbmRleGVzLmNvbnRhaW5zKGlkKSwgIkluZGV4ZXMgYWxyZWFkeSBjb250YWluICcl
cyciLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKG1fZGF0YWJhc2UsIElEQklu
ZGV4TWV0YWRhdGEobmFtZSwgaWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSkpOwotICAg
IEFTU0VSVChpbmRleC0+bmFtZSgpID09IG5hbWUpOwotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0g
SURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKLSAgICBBU1NFUlQoaWQgPiBtX21ldGFk
YXRhLm1heEluZGV4SWQpOwotICAgIG1fbWV0YWRhdGEubWF4SW5kZXhJZCA9IGlkOwotCi0gICAg
aWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENyZWF0ZUluZGV4T3BlcmF0aW9uOjpjcmVh
dGUodGhpcywgaW5kZXgpLCBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywg
aW5kZXgpKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlv
bkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIG1faW5kZXhl
cy5zZXQoaWQsIGluZGV4KTsKLSAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwotfQotCi12b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3Jt
KElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFD
RSgiQ3JlYXRlSW5kZXhPcGVyYXRpb24iKTsKLSAgICBpZiAoIW1fb2JqZWN0U3RvcmUtPmJhY2tp
bmdTdG9yZSgpLT5jcmVhdGVJbmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBt
X2luZGV4LT5pZCgpLCBtX2luZGV4LT5uYW1lKCksIG1faW5kZXgtPmtleVBhdGgoKSwgbV9pbmRl
eC0+dW5pcXVlKCksIG1faW5kZXgtPm11bHRpRW50cnkoKSkpIHsKLSAgICAgICAgdHJhbnNhY3Rp
b24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igd2hlbiB0cnlpbmcg
dG8gY3JlYXRlIGluZGV4ICclcycuIiwgbV9pbmRleC0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmRleChpbnQ2NF90IGluZGV4
SWQpCi17Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXggPSBtX2lu
ZGV4ZXMuZ2V0KGluZGV4SWQpOwotICAgIEFTU0VSVChpbmRleCk7Ci0gICAgcmV0dXJuIGluZGV4
LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJ
bmRleChpbnQ2NF90IGluZGV4SWQsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJh
bnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVChtX2luZGV4ZXMu
Y29udGFpbnMoaW5kZXhJZCkpOwotCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGlu
ZGV4ID0gbV9pbmRleGVzLmdldChpbmRleElkKTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9t
KHRyYW5zYWN0aW9uUHRyKTsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJU
cmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOwotCi0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2No
ZWR1bGVUYXNrKERlbGV0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgaW5kZXgpLCBEZWxl
dGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgaW5kZXgpKSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9pbmRleGVzLnJlbW92ZShpbmRleElkKTsKLX0KLQot
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJf
VFJBQ0UoIkRlbGV0ZUluZGV4T3BlcmF0aW9uIik7Ci0gICAgbV9vYmplY3RTdG9yZS0+YmFja2lu
Z1N0b3JlKCktPmRlbGV0ZUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksIG1f
aW5kZXgtPmlkKCkpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmxvYWRJ
bmRleGVzKCkKLXsKLSAgICBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gaW5kZXhlcyA9IGJhY2tp
bmdTdG9yZSgpLT5nZXRJbmRleGVzKGRhdGFiYXNlSWQoKSwgbV9tZXRhZGF0YS5pZCk7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1f
aW5kZXhlcy5zZXQoaW5kZXhlc1tpXS5pZCwgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKG1f
ZGF0YWJhc2UsIGluZGV4ZXNbaV0pKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCghdHJhbnNhY3Rpb24pOwotICAg
IEFTU0VSVChtX29iamVjdFN0b3JlLT5tX2luZGV4ZXMuY29udGFpbnMobV9pbmRleC0+aWQoKSkp
OwotICAgIG1fb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5yZW1vdmUobV9pbmRleC0+aWQoKSk7Ci19
Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhBYm9ydE9wZXJh
dGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsK
LSAgICBBU1NFUlQoIXRyYW5zYWN0aW9uKTsKLSAgICBBU1NFUlQoIW1fb2JqZWN0U3RvcmUtPm1f
aW5kZXhlcy5jb250YWlucyhtX2luZGV4LT5pZCgpKSk7Ci0gICAgbV9vYmplY3RTdG9yZS0+bV9p
bmRleGVzLnNldChtX2luZGV4LT5pZCgpLCBtX2luZGV4KTsKLX0KLQogUGFzc1JlZlB0cjxJREJL
ZXk+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKQogewogICAgIGNvbnN0IGludDY0X3QgbWF4R2VuZXJhdG9yVmFsdWUgPSA5MDA3MTk5
MjU0NzQwOTkyTEw7IC8vIE1heGltdW0gaW50ZWdlciBzdG9yYWJsZSBhcyBFQ01BU2NyaXB0IG51
bWJlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAppbmRleCBiM2UyZTU1MDE2ZTEzMTJmMzM5MGEw
MTc2ZGVlNzgxNjlhOTgyYmRlLi41YWYxMzA0NWNiYzE4ZGQ3MjQxMWI5OTkwOTMyYjdjZmVkODlk
ZTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCkBAIC0zOSw1MyArMzksMTEgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKLWNsYXNzIElE
QkluZGV4QmFja2VuZEltcGw7CiBjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOwogY2xh
c3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOwogc3RydWN0IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGE7CiAKLWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwgOiBwdWJsaWMgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBjcmVhdGUoY29uc3QgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbCogZGF0YWJhc2UsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG1ldGFk
YXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsKGRhdGFiYXNlLCBtZXRhZGF0YSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsKCk7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50NjRfdCwg
UmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+ID4gSW5kZXhNYXA7Ci0KLSAgICBzdGF0aWMgY29u
c3QgaW50NjRfdCBJbnZhbGlkSWQgPSAwOwotICAgIGludDY0X3QgaWQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEuaWQgIT0gSW52YWxpZElkKTsKLSAgICAgICAgcmV0
dXJuIG1fbWV0YWRhdGEuaWQ7Ci0gICAgfQotCi0gICAgLy8gSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwg
dm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElE
QktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPElu
ZGV4S2V5cz4mKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoaW50NjRfdCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVs
dGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFBy
aW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+
JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0
X3Q+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IGluZGV4KGludDY0X3QpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90LCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSURCQ3Vyc29y
OjpEaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
RXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KLQotICAgIHN0YXRpYyBib29sIHBvcHVsYXRlSW5kZXgoSURC
QmFja2luZ1N0b3JlJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOwotCi0gICAgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0OwotICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIHsgcmV0
dXJuIG1fbWV0YWRhdGEubmFtZTsgfQotICAgIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgoKSBj
b25zdCB7IHJldHVybiBtX21ldGFkYXRhLmtleVBhdGg7IH0KLSAgICBjb25zdCBib29sJiBhdXRv
SW5jcmVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5hdXRvSW5jcmVtZW50OyB9Ci0K
LSAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhYmFzZS0+YmFja2luZ1N0b3JlKCk7IH0KLSAgICBpbnQ2NF90IGRhdGFiYXNl
SWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlLT5pZCgpOyB9CituYW1lc3BhY2UgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbCB7CiAKICAgICBjbGFzcyBJbmRleFdyaXRlciB7CiAgICAgcHVi
bGljOgpAQCAtMTA5LDI3ICs2NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzIG1faW5kZXhLZXlzOwogICAgIH07CiAKLSAgICBz
dGF0aWMgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4sIElEQkJhY2tpbmdTdG9yZSosIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURC
T2JqZWN0U3RvcmVNZXRhZGF0YSYsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29s
IGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3Qg
VmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYsIFZlY3Rv
cjxPd25QdHI8SW5kZXhXcml0ZXI+ID4qIGluZGV4V3JpdGVycywgU3RyaW5nKiBlcnJvck1lc3Nh
Z2UsIGJvb2wmIGNvbXBsZXRlZCkgV0FSTl9VTlVTRURfUkVUVVJOOwotCi0gICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCS2V5PiBnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4s
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICBzdGF0aWMgYm9vbCB1cGRhdGVLZXlHZW5l
cmF0b3IoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgSURCS2V5KiwgYm9vbCBjaGVja0N1cnJlbnQpOwotCi1wcml2YXRlOgotICAgIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCosIGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmKTsKLQotICAgIHZvaWQgbG9hZEluZGV4ZXMoKTsK
LQotICAgIGNsYXNzIENyZWF0ZUluZGV4T3BlcmF0aW9uOwotICAgIGNsYXNzIERlbGV0ZUluZGV4
T3BlcmF0aW9uOwotCi0gICAgLy8gV2hlbiBhICJ2ZXJzaW9uY2hhbmdlIiB0cmFuc2FjdGlvbiBh
Ym9ydHMsIHRoZXNlIHJlc3RvcmUgdGhlIGJhY2stZW5kIG9iamVjdCBoaWVyYXJjaHkuCi0gICAg
Y2xhc3MgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjsKLSAgICBjbGFzcyBEZWxldGVJbmRleEFi
b3J0T3BlcmF0aW9uOwotCi0gICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogbV9kYXRh
YmFzZTsKKyAgICBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiwgSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25z
dCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXks
IGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBj
b25zdCBWZWN0b3I8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+Jiwg
VmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiogaW5kZXhXcml0ZXJzLCBTdHJpbmcqIGVycm9y
TWVzc2FnZSwgYm9vbCYgY29tcGxldGVkKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAKLSAgICBJREJP
YmplY3RTdG9yZU1ldGFkYXRhIG1fbWV0YWRhdGE7Ci0gICAgSW5kZXhNYXAgbV9pbmRleGVzOwor
ICAgIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICBib29sIHVwZGF0ZUtleUdlbmVy
YXRvcihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXkqLCBib29sIGNoZWNrQ3VycmVudCk7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbi5jcHAKaW5kZXggYWZhNDVlMjRiMDQxZWY4MjVjNjU3YTYxMTk1MTQwZDE0NTc0
MTJmMS4uMjZlZmQwZmIzYjExOTZmZDE3ODJlMWVkNzJlNDM1ZjRjNzg4MDk5YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcApA
QCAtMTIyLDExICsxMjIsNiBAQCBJREJUcmFuc2FjdGlvbjo6fklEQlRyYW5zYWN0aW9uKCkKICAg
ICBBU1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7CiB9CiAKLUlEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSogSURCVHJhbnNhY3Rpb246OmJhY2tlbmQoKSBjb25zdAotewotICAgIHJldHVy
biBtX2JhY2tlbmQuZ2V0KCk7Ci19Ci0KIGNvbnN0IFN0cmluZyYgSURCVHJhbnNhY3Rpb246Om1v
ZGUoKSBjb25zdAogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtMTc2LDEyICsxNzEs
OSBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3Rv
cmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
LSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJh
Y2tlbmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWQsIGVjKTsKLSAgICBB
U1NFUlQoIWVjICYmIG9iamVjdFN0b3JlQmFja2VuZCk7Ci0KICAgICBjb25zdCBJREJEYXRhYmFz
ZU1ldGFkYXRhJiBtZXRhZGF0YSA9IG1fZGF0YWJhc2UtPm1ldGFkYXRhKCk7CiAKLSAgICBSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZSht
ZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLCBvYmplY3RTdG9yZUJhY2tl
bmQsIHRoaXMpOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBJREJP
YmplY3RTdG9yZTo6Y3JlYXRlKG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJ
ZCksIHRoaXMpOwogICAgIG9iamVjdFN0b3JlQ3JlYXRlZChuYW1lLCBvYmplY3RTdG9yZSk7CiAg
ICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCmluZGV4IGRmNDFiYmIwZWY1MzM4
MWMwY2UyNzFiN2RkNDU2ZmRiZjllZTA0MDkuLmRmM2JiMGNjY2E1OTY0ZDQ2ODg3OTRmMWZiNjJi
ODZlMDIwNzA2NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb24uaApAQCAtNzEsNyArNzEsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE1v
ZGUgc3RyaW5nVG9Nb2RlKGNvbnN0IFN0cmluZyYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgbW9kZVRvU3Ry
aW5nKE1vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogYmFja2VuZCgpIGNvbnN0OwogICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZSogYmFja2VuZERCKCkgY29uc3Q7CiAKICAgICBpbnQ2NF90IGlkKCkgY29uc3QgeyByZXR1cm4g
bV9pZDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCA3ODJmNDY1ODI4YzgyN2Yy
ZmU2YzhiNmUzNjdlMTc1ZTdhYmYwOTQyLi4xYjBjYTRiYmNjMGVhNTVlM2M3NDYyMmU5NmE1MzE3
NjMwNDRhYmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAtMzIsNyArMzIsNiBA
QAogI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5j
bHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQlRyYWNpbmcu
aCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCiAKQEAgLTcwLDE4ICs2
OSw2IEBAIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6On5JREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKCkKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7CiB9CiAKLVBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpvYmplY3RTdG9yZShpbnQ2NF90IGlkLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAo
bV9zdGF0ZSA9PSBGaW5pc2hlZCkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gbV9kYXRhYmFzZS0+
b2JqZWN0U3RvcmUoaWQpOwotICAgIEFTU0VSVChvYmplY3RTdG9yZSk7Ci0gICAgcmV0dXJuIG9i
amVjdFN0b3JlLnJlbGVhc2UoKTsKLX0KLQogYm9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpzY2hlZHVsZVRhc2soVGFza1R5cGUgdHlwZSwgUGFzc093blB0cjxPcGVyYXRpb24+IHRhc2ss
IFBhc3NPd25QdHI8T3BlcmF0aW9uPiBhYm9ydFRhc2spCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0g
RmluaXNoZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKaW5kZXggYzc5ZGVmZjQ4ODQ4MDRmN2Yz
N2FmMDMyMzU0MDc4OTI3MzkxYTNiMS4uMjEyMjBhYzYwNmZiYmFkNGE1N2VhMjhlYmVkZGVkYTA2
MjE4ODQ3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaApAQCAtNTIsNyArNTIsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCgpOwogCiAgICAgLy8g
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoaW50NjRfdCwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IG9iamVjdFN0b3JlKGludDY0X3QsIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCk7CiAgICAgdm9pZCBjb21t
aXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FsbGJhY2tzKElEQlRyYW5zYWN0aW9uQ2FsbGJh
Y2tzKiBjYWxsYmFja3MpIHsgbV9jYWxsYmFja3MgPSBjYWxsYmFja3M7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCA4NmY4NjIwMTUwMzViOTk5NWVjMjFhZjEyYjM5ZDY5ZDlmYjQ2YWFlLi5iYTgwMGQy
YjQzNmZkOTYwNjQyNmE4NjhkYWU1MjYzYzI3ZTQ2OGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03
MzUsOCArNzM1LDYgQEAKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZS5oJywKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleC5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgnLAot
ICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwJywK
LSAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgnLAog
ICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5o
JywKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwJywKICAgICAgICAg
ICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaCcsCkBAIC01NDYwLDcgKzU0NTgsNyBAQAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlYXJjaFNtYWxsR3JheS5w
bmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlYXJjaFNtYWxs
V2hpdGUucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWFy
Y2hOZXh0LnBuZycsCi0gICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2Vh
cmNoUHJldi5wbmcnLCAgICAgICAgICAgIAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1l
bmQvSW1hZ2VzL3NlYXJjaFByZXYucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQt
ZW5kL0ltYWdlcy9zZWdtZW50LnBuZycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvc2VnbWVudEVuZC5wbmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1l
bmQvSW1hZ2VzL3NlZ21lbnRIb3Zlci5wbmcnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA1YjlkY2NmNjRiNzMxYTgzYWU2NTljZGQ1NDcwZTBl
NjIxNDcxMzU2Li42ODU2ODRlNmYwZmY5Y2FjM2Y3ZDBkZjA2ODdmMjNiMGU0ZTliNDZkIDEwMDc1
NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMjQ5ODUs
MTQgKzI0OTg1LDYgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkluZGV4QmFja2VuZEltcGwuY3BwIgot
CQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9k
dWxlc1xpbmRleGVkZGJcSURCSW5kZXhCYWNrZW5kSW1wbC5oIgotCQkJCQk+Ci0JCQkJPC9GaWxl
PgotCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURC
SW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzA0MWNh
NWYyN2EwMDk5Y2U4ZWE4Nzk4MzAzMTRhNDgyYzZkODhiMC4uZWY1NGRkNjRhYjFiNGRlZWE4NjQy
M2M0YzQ0YTBlYjM0YTAxMjlhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzQ5NSw4ICszNDk1LDYgQEAKIAkJOTcxMkE1RDQx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3QjE1MDA0RURBMDA0
OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgfTsKIAkJOTcxMkE1RDUx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTdDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRl
eC5jcHAgKi87IH07CiAJCTk3MTJBNUQ2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1N0QxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmggKi87IH07Ci0JCTk3MTJBNUQ4MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTdGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRl
eEJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKLQkJOTcxMkE1RDkxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkluZGV4QmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3MTJBNTgwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBs
LmggKi87IH07CiAJCTk3MTJBNURBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3MTJBNTgxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCAq
LzsgfTsKIAkJOTcxMkE1REIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4MjE1MDA0RURBMDA0
OEFGMTAgLyogSURCS2V5LmNwcCAqLzsgfTsKIAkJOTcxMkE1REMxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTcxMkE1ODMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5oICovOyB9OwpAQCAtMTA4MTYsOCAr
MTA4MTQsNiBAQAogCQk5NzEyQTU3QzE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCSW5kZXguY3BwOyBwYXRoID0g
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5NzEyQTU3RDE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gSURCSW5kZXguaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTdFMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJJbmRleC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCSW5k
ZXguaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU3RjE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhC
YWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJJ
bmRleEJhY2tlbmRJbXBsLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFj
a2VuZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU4MDE1MDA0
RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBJREJJbmRleEJhY2tlbmRJbXBsLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTk3MTJBNTgxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
Lmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1ODIxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQktleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJLZXku
Y3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTcxMkE1ODMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJLZXkuaDsgcGF0aCA9IE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgxMzcsOCAr
MTgxMzMsNiBAQAogCQkJCTk3MTJBNTdDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5jcHAg
Ki8sCiAJCQkJOTcxMkE1N0QxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmggKi8sCiAJCQkJ
OTcxMkE1N0UxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmlkbCAqLywKLQkJCQk5NzEyQTU3
RjE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgKi8sCi0JCQkJOTcx
MkE1ODAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEltcGwuaCAqLywKIAkJCQk5
NzEyQTU4MTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggKi8s
CiAJCQkJOTcxMkE1ODIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5jcHAgKi8sCiAJCQkJOTcx
MkE1ODMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5oICovLApAQCAtMjQxNDUsNyArMjQxMzks
NiBAQAogCQkJCTk3MTJBNUQyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZElt
cGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUQ0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1RDYxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmggaW4gSGVhZGVycyAqLywKLQkJCQk5NzEyQTVEOTE1
MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTcxMkE1REExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEludGVyZmFjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1REMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1REYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBh
dGguaCBpbiBIZWFkZXJzICovLApAQCAtMjczOTksNyArMjczOTIsNiBAQAogCQkJCTk3MTJBNUQx
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTcxMkE1RDMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNUQ1MTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJJbmRleC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5NzEyQTVEODE1MDA0RURBMDA0OEFG
MTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEyQTVE
QjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJB
NURFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk3MTJBNUUyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5jcHAgaW4gU291cmNlcyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VC
YWNrZW5kVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkRhdGFiYXNl
QmFja2VuZFRlc3QuY3BwCmluZGV4IDZlZjg1YzNkOTM0Njg0MTQ0ODk0MjZjZWY2ZTVkOTQzYjA1
YWE3MTIuLjBmMzE2Njk4OTdmMGU0YjJjNzI5NTg3YmMwY2E5MGY3ZDVhZDg5NjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VCYWNrZW5kVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRhYmFzZUJhY2tlbmRU
ZXN0LmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tz
UHJveHkuaCIKICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJ
REJGYWtlQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW1wbC5oIgog
I2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJXZWJJREJE
YXRhYmFzZUNhbGxiYWNrc0ltcGwuaCIKICNpbmNsdWRlICJXZWJJREJEYXRhYmFzZUltcGwuaCIK
QEAgLTQ3LDMyICs0Niw2IEBAIHVzaW5nIFdlYktpdDo6V2ViSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsOwogCiBuYW1lc3BhY2UgewogCi1URVNUKElEQkRhdGFiYXNlQmFja2VuZFRlc3QsIEJhY2tp
bmdTdG9yZVJldGVudGlvbikKLXsKLSAgICBSZWZQdHI8SURCRmFrZUJhY2tpbmdTdG9yZT4gYmFj
a2luZ1N0b3JlID0gYWRvcHRSZWYobmV3IElEQkZha2VCYWNraW5nU3RvcmUoKSk7Ci0gICAgRVhQ
RUNUX1RSVUUoYmFja2luZ1N0b3JlLT5oYXNPbmVSZWYoKSk7Ci0KLSAgICBJREJGYWN0b3J5QmFj
a2VuZEltcGwqIGZhY3RvcnkgPSAwOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiBkYiA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZSgiZGIiLCBiYWNraW5nU3RvcmUu
Z2V0KCksIGZhY3RvcnksICJ1bmlxdWVpZCIpOwotICAgIEVYUEVDVF9HVChiYWNraW5nU3RvcmUt
PnJlZkNvdW50KCksIDEpOwotCi0gICAgY29uc3QgYm9vbCBhdXRvSW5jcmVtZW50ID0gZmFsc2U7
Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IHN0b3JlID0gSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKGRiLmdldCgpLCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
KCJzdG9yZSIsIDEsIElEQktleVBhdGgoImtleVBhdGgiKSwgYXV0b0luY3JlbWVudCwgMCkpOwot
ICAgIEVYUEVDVF9HVChiYWNraW5nU3RvcmUtPnJlZkNvdW50KCksIDEpOwotCi0gICAgY29uc3Qg
Ym9vbCB1bmlxdWUgPSBmYWxzZTsKLSAgICBjb25zdCBib29sIG11bHRpRW50cnkgPSBmYWxzZTsK
LSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBJREJJbmRleEJhY2tlbmRJ
bXBsOjpjcmVhdGUoZGIuZ2V0KCksIElEQkluZGV4TWV0YWRhdGEoImluZGV4IiwgLTEsIElEQktl
eVBhdGgoImtleVBhdGgiKSwgdW5pcXVlLCBtdWx0aUVudHJ5KSk7Ci0gICAgRVhQRUNUX0dUKGJh
Y2tpbmdTdG9yZS0+cmVmQ291bnQoKSwgMSk7Ci0KLSAgICBkYi5jbGVhcigpOwotICAgIEVYUEVD
VF9UUlVFKGJhY2tpbmdTdG9yZS0+aGFzT25lUmVmKCkpOwotICAgIHN0b3JlLmNsZWFyKCk7Ci0g
ICAgRVhQRUNUX1RSVUUoYmFja2luZ1N0b3JlLT5oYXNPbmVSZWYoKSk7Ci0gICAgaW5kZXguY2xl
YXIoKTsKLSAgICBFWFBFQ1RfVFJVRShiYWNraW5nU3RvcmUtPmhhc09uZVJlZigpKTsKLX0KLQog
Y2xhc3MgTW9ja0lEQkNhbGxiYWNrcyA6IHB1YmxpYyBJREJDYWxsYmFja3MgewogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1vY2tJREJDYWxsYmFja3M+IGNyZWF0ZSgpIHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBNb2NrSURCQ2FsbGJhY2tzKCkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCmluZGV4IGY5NjUwNzNjMGFm
M2VjMmFmZjczNDM4MGUyNGQ3ODVmNjYxMTk4NmMuLjNlZDcyNGJiNGViMGEyYmJmODhiNjQ2MWE1
MmZmNDI3YjY4ZWJiMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
SURCRmFrZUJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
SURCRmFrZUJhY2tpbmdTdG9yZS5oCkBAIC0zOSw3ICszOSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKFRyYW5zYWN0aW9uKiwgaW50NjRf
dCByb3dJZCwgaW50NjRfdCB2ZXJzaW9uKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpIE9WRVJSSURF
IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIFZlY3RvcjxJREJPYmplY3RTdG9yZU1l
dGFkYXRhPiBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkKSBPVkVSUklERSB7IHJl
dHVybiBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4oKTsgfQogICAgIHZpcnR1YWwgYm9v
bCBjcmVhdGVPYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
LCBib29sIGF1dG9JbmNyZW1lbnQpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9OwogCiAgICAg
dmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9CkBAIC00OCw3ICs0Nyw2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJy
ZW50TnVtYmVyKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkgT1ZFUlJJREUg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3Jl
KFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQktleSYsIFJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllciwg
Ym9vbCYgZm91bmQpIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgVmVj
dG9yPElEQkluZGV4TWV0YWRhdGE+IGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFIHsgcmV0dXJuIFZlY3RvcjxJREJJbmRleE1ldGFk
YXRhPigpOyB9CiAgICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KFRyYW5zYWN0aW9uKiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBpc1VuaXF1ZSwgYm9v
bCBpc011bHRpRW50cnkpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9OwogICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVJbmRleChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBwdXRJbmRleERhdGFGb3JSZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJL
ZXkmLCBjb25zdCBSZWNvcmRJZGVudGlmaWVyJikgT1ZFUlJJREUgeyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182026</attachid>
            <date>2013-01-09 17:21:05 -0800</date>
            <delta_ts>2013-01-09 18:09:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106377-20130109171808.patch</filename>
            <type>text/plain</type>
            <size>87925</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzA5NWQ3YjZjMjkxNmU5
MTE4MmZlZDhiODgzYTNmNGFmMjM2ZTc3ZS4uYzJiZWZmZTg3ZDcyNDYxYTZhMzRkMDNmZGM2Yjc0
ZTk1N2ZkNzJmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOCBAQAorMjAxMy0wMS0wOCAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBB
bGxvdyBjcmVhdGVJbmRleC9jcmVhdGVPYmplY3RTdG9yZSB0byBiZSBhc3luY2hyb25vdXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjM3NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1pZ3JhdGUgaW1w
bGVtZW50YXRpb25zIG9mIGNyZWF0ZUluZGV4L2RlbGV0ZUluZGV4LAorICAgICAgICBjcmVhdGVP
YmplY3RTdG9yZS9kZWxldGVPYmplY3RTdG9yZSBvdmVyIHRvIElEQkRhdGFiYXNlQmFja2VuZElt
cGwsCisgICAgICAgIHNvIHRoYXQgdGhleSBjYW4gYmUgYXN5bmNocm9ub3VzIGluIG11bHRpLXBy
b2Nlc3MgcG9ydHMuCisKKyAgICAgICAgSGFzIHRoZSBzaWRlIGVmZmVjdCBvZiByZW1vdmluZyB0
aGUgbGFzdCBjb25zdW1lcnMgb2YKKyAgICAgICAgSURCSW5kZXhCYWNrZW5kSW1wbCBhbmQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC4gVGhlIGZvcm1lcgorICAgICAgICBpcyByZW1vdmVkIGNv
bXBsZXRlIGFuZCB0aGUgbGF0dGVyIGJlY29tZXMgYSB0ZW1wb3JhcnkgbmFtZXNwYWNlCisgICAg
ICAgIHBlbmRpbmcgYSBmdXJ0aGVyIG1vcmUgbWVjaGFuaWNhbCBjb2RlIHNodWZmbGUuCisKKyAg
ICAgICAgQSBrZXkgcmVmYWN0b3JpbmcgZWZmZWN0IGlzIHRoYXQgdGhlIElEQkRhdGFiYXNlQmFj
a2VuZEltcGwKKyAgICAgICAgbm93IGNvbnRhaW5zIHRoZSBhdXRob3JpdGF0aXZlIElEQkRhdGFi
YXNlTWV0YWRhdGEgaGllcmFyY2h5LAorICAgICAgICBhbmQgdXBkYXRlcyB0byBpdCBhcmUgY29u
c29saWRhdGVkIGluIG9uZSBwbGFjZSByYXRoZXIgdGhhbgorICAgICAgICBzY2F0dGVyZWQgYWNy
b3NzIGEgcGFyYWxsZWwgb2JqZWN0IHRyZWUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRo
aXMgaXMganVzdCByZWZhY3RvcmluZy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkJhY2tpbmdTdG9yZS5jcHA6IFNpbXBsaWZ5IG9iamVjdHN0b3JlL2luZGV4IGxvYWRpbmcgYW5k
IHByb3BhZ2F0ZSBlcnJvcnMuCisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6Omdl
dE9iamVjdFN0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldElu
ZGV4ZXMpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgor
ICAgICAgICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6IERlcGVuZGVuY3kgY2xlYW51cC4KKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oOiBEZXBlbmRlbmN5IGNsZWFu
dXAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZS5jcHA6IEZyb250ZW5kIElEQk9iamVjdFN0b3JlcyBubyBsb25nZXIgaG9sZCBvbnRv
IGJhY2tlbmQgb2JqZWN0cy4KKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVhdGVP
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0
U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZElt
cGwuY3BwOiBBZGQgYWxsIGNyZWF0ZS9kZWxldGUgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNv
cmU6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KToKKyAgICAgICAgKENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KToKKyAgICAgICAgKERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpDcmVhdGVPYmplY3RTdG9y
ZUFib3J0T3BlcmF0aW9uKToKKyAgICAgICAgKENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRp
b246OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoRGVsZXRlT2Jq
ZWN0U3RvcmVBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChDcmVhdGVJbmRleE9wZXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNyZWF0ZUluZGV4T3BlcmF0aW9uOjpDcmVhdGVJbmRleE9wZXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERlbGV0ZUluZGV4T3BlcmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246OkRlbGV0ZUluZGV4T3BlcmF0aW9uKToKKyAg
ICAgICAgKENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q3Jl
YXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0
ZUluZGV4QWJvcnRPcGVyYXRpb246OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24pOgorICAgICAg
ICAoRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVJ
bmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5k
ZXhBYm9ydE9wZXJhdGlvbjo6RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHZXRPcGVyYXRpb246OkdldE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3JlYXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9u
OjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
OjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRl
bGV0ZURhdGFiYXNlRmluYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6bG9hZE9iamVjdFN0b3Jlcyk6IExvYWQgZGlyZWN0bHkgaW50byBtZXRhZGF0YSBmcm9t
IGJhY2tpbmcgc3RvcmUuCisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3Jl
QWJvcnRPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKElEQkRhdGFiYXNlQmFja2VuZEltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUp
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6SURCT2JqZWN0U3RvcmUpOiBG
cm9udGVuZCBJREJJbmRleCBvYmplY3RzIG5vIGxvbmdlciBob2xkIG9udG8gYmFja2VuZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCk6IAorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmU6OmNyZWF0ZSk6CisgICAgICAgIChJREJPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTMtMDEtMDggIEFuZHJlYXMgS2xpbmcg
IDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEhlYXAtdXNlLWFmdGVyLWZyZWUgaW4gYm9v
bCBXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDAwYzgwMzVmNWZkZDUwMDA4OGQ2MTdhMjU0NTE3OTBkOTg1NDY3
YjUuLjlmOTA0N2Y4ZjExMTNhYjRhZTUxMTMxMjdhOTBiNTRmZGY0NDFlZmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDEtMDggIEFsZWMgRmxldHQg
IDxhbGVjZmxldHRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogQWxsb3cgY3Jl
YXRlSW5kZXgvY3JlYXRlT2JqZWN0U3RvcmUgdG8gYmUgYXN5bmNocm9ub3VzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYzNzcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdGhpcyB0ZXN0IGFz
IGl0IG1ha2VzIG5vIHNlbnNlIG9uY2UgdGhlIG9iamVjdHN0b3JlL2luZGV4CisgICAgICAgIGhp
ZXJhcmNoeSBpcyBnb25lLgorCisgICAgICAgICogdGVzdHMvSURCRGF0YWJhc2VCYWNrZW5kVGVz
dC5jcHA6CisKIDIwMTMtMDEtMDggIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlbW92ZWQgdGhlIG5lZWQgZm9yIHRoZSBQcm9wb3NlZERhdGFiYXNlIG1lY2hhbmlz
bS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tp
bmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5n
U3RvcmUuY3BwCmluZGV4IDIwMmYwNTBmNjJkNDAzMmRjZjc4MzkzNWYxYmQzOWJhODc4NzMxZTMu
LmRhNDg0OTk3MTgzMTE2N2JmYWNmZTkyZDdhNTAxNjlkZDExNjQyMjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcApAQCAt
NjA1LDEzICs2MDUsMTUgQEAgc3RhdGljIGJvb2wgY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRh
VHlwZShjb25zdCBMZXZlbERCSXRlcmF0b3IqIGl0LCBjb25zdCBWZWMKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6
Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCkKKy8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBkbyBzb21lIGVycm9yIGhhbmRsaW5nIHJhdGhlciB0aGFuIHBsb3dpbmcgYWhlYWQgd2hlbiBi
YWQgZGF0YSBpcyBlbmNvdW50ZXJlZC4KK3ZvaWQgSURCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RT
dG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9y
ZU1hcCogb2JqZWN0U3RvcmVzKQogewogICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpn
ZXRPYmplY3RTdG9yZXMiKTsKLSAgICBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gb2Jq
ZWN0U3RvcmVzOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IE9iamVjdFN0b3Jl
TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCAxLCAwKTsKICAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gc3RvcEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRh
YmFzZUlkKTsKIAorICAgIEFTU0VSVChvYmplY3RTdG9yZXMtPmlzRW1wdHkoKSk7CisKICAgICBP
d25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAg
aXQtPnNlZWsoc3RhcnRLZXkpOwogICAgIHdoaWxlIChpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVL
ZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwKSB7CkBAIC02OTEsOSArNjkzLDEwIEBAIFZlY3Rv
cjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3Jl
cyhpbnQ2NF90IGRhdGFiYXNlCiAgICAgICAgICAgICBpdC0+bmV4dCgpOwogICAgICAgICB9CiAK
LSAgICAgICAgb2JqZWN0U3RvcmVzLmFwcGVuZChJREJPYmplY3RTdG9yZU1ldGFkYXRhKG9iamVj
dFN0b3JlTmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgbWF4SW5k
ZXhJZCkpOworICAgICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKG9iamVjdFN0
b3JlTmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgbWF4SW5kZXhJ
ZCk7CisgICAgICAgIGdldEluZGV4ZXMoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgJm1ldGFk
YXRhLmluZGV4ZXMpOworICAgICAgICBvYmplY3RTdG9yZXMtPnNldChvYmplY3RTdG9yZUlkLCBt
ZXRhZGF0YSk7CiAgICAgfQotICAgIHJldHVybiBvYmplY3RTdG9yZXM7CiB9CiAKIFdBUk5fVU5V
U0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBzZXRNYXhPYmplY3RTdG9yZUlkKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKQpAQCAtOTc5LDE0ICs5ODIsMTQgQEAgc3RhdGljIGJvb2wgY2hlY2tJbmRleEFuZE1ldGFE
YXRhS2V5KGNvbnN0IExldmVsREJJdGVyYXRvciogaXQsIGNvbnN0IFZlY3RvcjxjaGEKIH0KIAog
Ci1WZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gSURCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQorLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGRvIHNvbWUgZXJyb3IgaGFuZGxpbmcgcmF0aGVyIHRoYW4gcGxvd2luZyBhaGVhZCB3
aGVuIGJhZCBkYXRhIGlzIGVuY291bnRlcmVkLgordm9pZCBJREJCYWNraW5nU3RvcmU6OmdldElu
ZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIElEQk9iamVj
dFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwKiBpbmRleGVzKQogewogICAgIElEQl9UUkFDRSgiSURC
QmFja2luZ1N0b3JlOjpnZXRJbmRleGVzIik7Ci0gICAgVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+
IGluZGV4ZXM7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gSW5kZXhNZXRhRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDAsIDApOwogICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQgKyAxLCAwLCAwKTsKIAotICAgIEFTU0VSVChpbmRleGVzLmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUKGluZGV4ZXMtPmlzRW1wdHkoKSk7CiAKICAgICBPd25QdHI8TGV2
ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgaXQtPnNlZWso
c3RhcnRLZXkpOwpAQCAtMTAyOSw5ICsxMDMyLDggQEAgVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+
IElEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QK
ICAgICAgICAgICAgIGl0LT5uZXh0KCk7CiAgICAgICAgIH0KIAotICAgICAgICBpbmRleGVzLmFw
cGVuZChJREJJbmRleE1ldGFkYXRhKGluZGV4TmFtZSwgaW5kZXhJZCwga2V5UGF0aCwgaW5kZXhV
bmlxdWUsIGluZGV4TXVsdGlFbnRyeSkpOworICAgICAgICBpbmRleGVzLT5zZXQoaW5kZXhJZCwg
SURCSW5kZXhNZXRhZGF0YShpbmRleE5hbWUsIGluZGV4SWQsIGtleVBhdGgsIGluZGV4VW5pcXVl
LCBpbmRleE11bHRpRW50cnkpKTsKICAgICB9Ci0gICAgcmV0dXJuIGluZGV4ZXM7CiB9CiAKIFdB
Uk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBzZXRNYXhJbmRleElkKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDJmOTljYTMxNzE5NjFiMDQ0MTgyYWNjYWMz
YjA5MmNjZjYxMWFlMDYuLjY2YjcyZjRkOTk5Y2FmOWM3MzNmNzk4MTkyNTY4ZTZiNTY5YjM3MDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZS5oCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRl
SURCRGF0YWJhc2VJbnRWZXJzaW9uKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pOwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVE
YXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgdmlydHVhbCBWZWN0b3I8SURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YT4gZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCk7Cisg
ICAgdm9pZCBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBJREJEYXRhYmFzZU1l
dGFkYXRhOjpPYmplY3RTdG9yZU1hcCopOwogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RT
dG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0
aCYsIGJvb2wgYXV0b0luY3JlbWVudCk7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZU9iamVjdFN0
b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCkgV0FSTl9VTlVTRURfUkVUVVJOOwogCkBAIC04NSw3ICs4NSw2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJy
ZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdTdGF0ZSwgYm9vbCBjaGVja0N1
cnJlbnQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5P
YmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFJlY29yZElkZW50aWZp
ZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllciwgYm9vbCYgZm91bmQpIFdBUk5fVU5VU0VEX1JFVFVS
TjsKIAotICAgIHZpcnR1YWwgVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+IGdldEluZGV4ZXMoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwogICAgIHZpcnR1YWwgYm9v
bCBjcmVhdGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRp
RW50cnkpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCk7CiAgICAgdmlydHVhbCB2b2lkIHB1dEluZGV4RGF0YUZvclJlY29yZChJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgUmVj
b3JkSWRlbnRpZmllciYpOwpAQCAtMTY5LDYgKzE2OCw3IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0
ZToKICAgICBib29sIGZpbmRLZXlJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1hcnlLZXks
IGJvb2wmIGZvdW5kKTsKKyAgICB2b2lkIGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwKik7
CiAKICAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwogICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2Vu
ZEltcGw+IG1fZmFjdG9yeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAppbmRleCBmZWFiNWM1ZTNhMzY0NWYw
OTk0NDAwOWIwM2M5ZmNkNjA0ZGM2YjFhLi42NGM0YWFiNmYzNmU3MjkzZTVmNmE1YWJmMmZkMzBi
ODBlNDhhZmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCkBAIC0zMCwxMCArMzAsMTAgQEAKIAogI2lu
Y2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgorI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUVy
cm9yLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJREJL
ZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKICNpbmNs
dWRlICJJREJSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSURCVHJhY2luZy5oIgogI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCmluZGV4IDk2NjhkZmQzYTQ2
MzFlMzM4ZjQ3ZTM1NDc2MzcxZjE2MTY2ZmMzYzEuLjcxMmMyYjQzMTU3NzMwNDM3OWNiYzM5MjM1
ZWE2NTdkYTFlMTIyODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaApAQCAtNDEsOSArNDEsNyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOwotY2xhc3MgSURC
SW5kZXhCYWNrZW5kSW1wbDsKIGNsYXNzIElEQktleVJhbmdlOwotY2xhc3MgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDsKIAogY2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGwgOiBwdWJsaWMgSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZSB7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKaW5kZXggZWJkZTBmMTQ2MzJjZDYwYjY0
MTJhYThkNzc3YWQ5NjNiZTRlM2JmMi4uNzQ2NDZkMDA4MTc1ZGJhNGUxNWM5NDdkMTUyNjk5OTky
N2RhZmZkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmNwcApAQCAtMTg0LDE0ICsxODQsMTAgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY28K
ICAgICB9CiAKICAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBtX21ldGFkYXRhLm1heE9iamVj
dFN0b3JlSWQgKyAxOwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+
IG9iamVjdFN0b3JlQmFja2VuZCA9IG1fYmFja2VuZC0+Y3JlYXRlT2JqZWN0U3RvcmUob2JqZWN0
U3RvcmVJZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgbV92ZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmICghb2JqZWN0U3RvcmVCYWNrZW5kKSB7
Ci0gICAgICAgIEFTU0VSVChlYyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBtX2Jh
Y2tlbmQtPmNyZWF0ZU9iamVjdFN0b3JlKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5pZCgp
LCBvYmplY3RTdG9yZUlkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KTsKIAogICAgIElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEobmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0
aCwgYXV0b0luY3JlbWVudCwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpNaW5pbXVt
SW5kZXhJZCk7Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9i
amVjdFN0b3JlOjpjcmVhdGUobWV0YWRhdGEsIG9iamVjdFN0b3JlQmFja2VuZC5yZWxlYXNlKCks
IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YSwgbV92
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIG1fbWV0YWRhdGEub2JqZWN0U3Rv
cmVzLnNldChtZXRhZGF0YS5pZCwgbWV0YWRhdGEpOwogICAgICsrbV9tZXRhZGF0YS5tYXhPYmpl
Y3RTdG9yZUlkOwogCkBAIC0yMTYsMTEgKzIxMiw5IEBAIHZvaWQgSURCRGF0YWJhc2U6OmRlbGV0
ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmQtPmRlbGV0ZU9iamVjdFN0b3JlKG9i
amVjdFN0b3JlSWQsIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsK
LSAgICBpZiAoIWVjKSB7Ci0gICAgICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5vYmpl
Y3RTdG9yZURlbGV0ZWQobmFtZSk7Ci0gICAgICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJl
bW92ZShvYmplY3RTdG9yZUlkKTsKLSAgICB9CisgICAgbV9iYWNrZW5kLT5kZWxldGVPYmplY3RT
dG9yZShtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aWQoKSwgb2JqZWN0U3RvcmVJZCk7Cisg
ICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlRGVsZXRlZChuYW1lKTsK
KyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmVJZCk7CiB9CiAK
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2NvcGUs
IGNvbnN0IFN0cmluZyYgbW9kZVN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuY3BwCmluZGV4IDBkMWRkYjBkZmViYzA1ZGNlNTA3YmUwOWQ0MjFjMjZkMjY4YjRlMGUu
LjkyYzkxOGM5YTA2MTQwYjIwN2MzNzdkYzdkMGVjNTE5ODZmOTY5NmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZElt
cGwuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQkluZGV4QmFja2VuZEltcGwuaCIKICNp
bmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCVHJhY2lu
Zy5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKQEAgLTQwLDQwICsz
OSw0MCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CitjbGFzcyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlv
biA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJh
dGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2Us
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCisgICAg
c3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBj
cmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgY29uc3QgSURC
T2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oZGF0YWJhc2Us
IG9iamVjdFN0b3JlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlT2JqZWN0
U3RvcmVPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7CiAgICAg
fQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsK
IHByaXZhdGU6Ci0gICAgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKLSAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQot
ICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCisgICAgQ3JlYXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgY29u
c3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICAgICAg
OiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9vYmplY3RTdG9yZU1l
dGFkYXRhKG9iamVjdFN0b3JlTWV0YWRhdGEpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOwotICAgIFJlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEgbV9vYmplY3RTdG9yZU1ldGFkYXRhOwogfTsKIAotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK2NsYXNzIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
IDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0
aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICBz
dGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNy
ZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihkYXRhYmFzZSwg
b2JqZWN0U3RvcmUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVPYmplY3RT
dG9yZU9wZXJhdGlvbihiYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlTWV0YWRhdGEpKTsKICAgICB9
CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwog
cHJpdmF0ZToKLSAgICBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlKQotICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCi0g
ICAgICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAgICBEZWxldGVPYmplY3RTdG9y
ZU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBjb25z
dCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgICAgICA6
IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlTWV0
YWRhdGEob2JqZWN0U3RvcmVNZXRhZGF0YSkKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7CiB9OwogCiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6Ok9wZXJhdGlvbiB7CkBAIC0xMDAsNDAgKzk5LDQwIEBAIHByaXZhdGU6CiAgICAgUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tzOwogfTsKIAotY2xh
c3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlv
biA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworY2xhc3Mg
Q3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9u
KGRhdGFiYXNlLCBvYmplY3RTdG9yZSkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENy
ZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlSWQpKTsK
ICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCopOwogcHJpdmF0ZToKLSAgICBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCisgICAgQ3JlYXRlT2JqZWN0U3RvcmVB
Ym9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiAgICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkK
LSAgICAgICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQorICAgICAgICAsIG1fb2JqZWN0
U3RvcmVJZChvYmplY3RTdG9yZUlkKQogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKKyAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJ
ZDsKIH07CiAKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3Jl
QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0
aW9uIHsKK2NsYXNzIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQorICAgIHN0YXRpYyBQYXNzT3du
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGNvbnN0IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEmIG9iamVjdFN0b3JlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKGRhdGFiYXNlLCBvYmplY3RTdG9yZSkp
OwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKik7CiBwcml2YXRlOgotICAgIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICBEZWxldGVPYmplY3RTdG9y
ZUFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJh
c2UsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCiAg
ICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlKG9i
amVjdFN0b3JlKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RTdG9yZU1l
dGFkYXRhKQogICAgIHsKICAgICB9CiAKICAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4gbV9kYXRhYmFzZTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9v
YmplY3RTdG9yZTsKKyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmVNZXRh
ZGF0YTsKIH07CiAKIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VB
Ym9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRp
b24gewpAQCAtMTU2LDYgKzE1NSw4NiBAQCBwcml2YXRlOgogICAgIGludDY0X3QgbV9wcmV2aW91
c0ludFZlcnNpb247CiB9OwogCitjbGFzcyBDcmVhdGVJbmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRl
KFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlSW5kZXhPcGVyYXRpb24oYmFja2luZ1N0
b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7CisgICAgfQorICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKK3ByaXZhdGU6CisgICAg
Q3JlYXRlSW5kZXhPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRl
eE1ldGFkYXRhKQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAg
ICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2luZGV4TWV0
YWRhdGEoaW5kZXhNZXRhZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgaW50NjRfdCBtX29iamVj
dFN0b3JlSWQ7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Cit9
OworCitjbGFzcyBEZWxldGVJbmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVJbmRl
eE9wZXJhdGlvbihiYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKTsKKyAgICB9
CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwor
cHJpdmF0ZToKKyAgICBEZWxldGVJbmRleE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCkKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9v
YmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4SWQp
CisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFj
a2luZ1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0
IGludDY0X3QgbV9pbmRleElkOworfTsKKworY2xhc3MgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlv
biA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJh
dGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2Us
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKGRhdGFiYXNlLCBv
YmplY3RTdG9yZUlkLCBpbmRleElkKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
KElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKK3ByaXZhdGU6CisgICAgQ3JlYXRlSW5kZXhB
Ym9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKKyAgICAgICAgOiBtX2Rh
dGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlk
KQorICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQorICAgIHsKKyAgICB9CisKKyAgICBjb25z
dCBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKyAgICBjb25zdCBp
bnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKK307
CisKK2NsYXNzIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9i
amVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOworcHJpdmF0ZToKKyAgICBEZWxldGVJ
bmRleEFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0
YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5k
ZXhNZXRhZGF0YSkKKyAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1f
b2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShp
bmRleE1ldGFkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3Rv
cmVJZDsKKyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKK307CisK
IGNsYXNzIEdldE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29y
VHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKQEAgLTE3NSw2ICsyNTQs
NyBAQCBwcml2YXRlOgogICAgICAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQogICAgICAg
ICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKICAgICB7CisgICAgICAgIEFTU0VSVChtZXRhZGF0
YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwogICAgICAgICBBU1NFUlQo
bWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKS5pZCA9PSBvYmplY3RTdG9y
ZUlkKTsKICAgICB9CiAKQEAgLTQwNSw2ICs0ODUsNDYgQEAgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdT
dG8KICAgICBBU1NFUlQoIW1fbWV0YWRhdGEubmFtZS5pc051bGwoKSk7CiB9CiAKK3ZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6YWRkT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmUsIGludDY0X3QgbmV3TWF4T2JqZWN0U3RvcmVJZCkKK3sKKyAg
ICBBU1NFUlQoIW1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLmlk
KSk7CisgICAgaWYgKG5ld01heE9iamVjdFN0b3JlSWQgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0
YTo6SW52YWxpZElkKSB7CisgICAgICAgIEFTU0VSVChtX21ldGFkYXRhLm1heE9iamVjdFN0b3Jl
SWQgPCBuZXdNYXhPYmplY3RTdG9yZUlkKTsKKyAgICAgICAgbV9tZXRhZGF0YS5tYXhPYmplY3RT
dG9yZUlkID0gbmV3TWF4T2JqZWN0U3RvcmVJZDsKKyAgICB9CisgICAgbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlLmlkLCBvYmplY3RTdG9yZSk7Cit9CisKK3ZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9y
ZUlkKQoreworICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmpl
Y3RTdG9yZUlkKSk7CisgICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0
b3JlSWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFkZEluZGV4KGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXgsIGludDY0X3Qg
bmV3TWF4SW5kZXhJZCkKK3sKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29u
dGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0
U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisKKyAg
ICBBU1NFUlQoIW9iamVjdFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5kZXguaWQpKTsKKyAgICBv
YmplY3RTdG9yZS5pbmRleGVzLnNldChpbmRleC5pZCwgaW5kZXgpOworICAgIGlmIChuZXdNYXhJ
bmRleElkICE9IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICBBU1NFUlQo
b2JqZWN0U3RvcmUubWF4SW5kZXhJZCA8IG5ld01heEluZGV4SWQpOworICAgICAgICBvYmplY3RT
dG9yZS5tYXhJbmRleElkID0gbmV3TWF4SW5kZXhJZDsKKyAgICB9CisgICAgbV9tZXRhZGF0YS5v
YmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlSWQsIG9iamVjdFN0b3JlKTsKK30KKwordm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCkKK3sKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
Y29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2Jq
ZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisK
KyAgICBBU1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7CisgICAg
b2JqZWN0U3RvcmUuaW5kZXhlcy5yZW1vdmUoaW5kZXhJZCk7CisgICAgbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlSWQsIG9iamVjdFN0b3JlKTsKK30KKwogYm9vbCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwoKQogewogICAgIGJvb2wgc3VjY2VzcyA9
IGZhbHNlOwpAQCAtNDEzLDcgKzUzMyw3IEBAIGJvb2wgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
b3BlbkludGVybmFsKCkKICAgICBpZiAoIW9rKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKHN1Y2Nlc3MpIHsKLSAgICAgICAgbG9hZE9iamVjdFN0b3JlcygpOworICAgICAgICBtX2Jh
Y2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVzKG1fbWV0YWRhdGEuaWQsICZtX21ldGFkYXRhLm9i
amVjdFN0b3Jlcyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gbV9i
YWNraW5nU3RvcmUtPmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEobV9tZXRhZGF0YS5uYW1lLCBt
X21ldGFkYXRhLnZlcnNpb24sIG1fbWV0YWRhdGEuaW50VmVyc2lvbiwgbV9tZXRhZGF0YS5pZCk7
CkBAIC00MzAsNjQgKzU1MCwxMTIgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmJhY2tpbmdTdG9yZSgpIGNvbnN0CiAKIElEQkRhdGFiYXNlTWV0
YWRhdGEgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEoKSBjb25zdAogewotICAgIC8v
IEZJWE1FOiBGaWd1cmUgb3V0IGEgd2F5IHRvIGtlZXAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
Z2V0KE4pLmluZGV4ZXMgdXAgdG8gZGF0ZSByYXRoZXIgdGhhbiByZWdlbmVyYXRpbmcgdGhpcyBl
dmVyeSB0aW1lLgotICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEobV9tZXRhZGF0YSk7
Ci0gICAgZm9yIChPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29iamVjdFN0
b3Jlcy5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkKLSAgICAgICAg
bWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChpdC0+dmFsdWUtPmlkKCksIGl0LT52YWx1ZS0+bWV0
YWRhdGEoKSk7Ci0gICAgcmV0dXJuIG1ldGFkYXRhOworICAgIHJldHVybiBtX21ldGFkYXRhOwog
fQogCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZShp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCiB7
Ci0gICAgQVNTRVJUKCFtX29iamVjdFN0b3Jlcy5jb250YWlucyhpZCkpOwotCi0gICAgUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMsIElEQk9iamVjdFN0b3JlTWV0YWRhdGEobmFtZSwgaWQs
IGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6
TWluaW11bUluZGV4SWQpKTsKLSAgICBBU1NFUlQob2JqZWN0U3RvcmUtPm5hbWUoKSA9PSBuYW1l
KTsKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0
b3JlIik7CisgICAgQVNTRVJUKCFtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmpl
Y3RTdG9yZUlkKSk7CiAKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJh
bnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRy
KTsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVS
U0lPTl9DSEFOR0UpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2Fj
dGlvbklkKSk7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBt
X3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CiAKLSAgICAvLyBGSVhNRTogRml4IGVk
Z2UgY2FzZXMgYXJvdW5kIHRyYW5zYWN0aW9uIGFib3J0cyB0aGF0IHByZXZlbnQgdGhpcyBmcm9t
IGp1c3QgYmVpbmcgQVNTRVJUKGlkID09IG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCArIDEp
Ci0gICAgQVNTRVJUKGlkID4gbV9tZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlkKTsKLSAgICBtX21l
dGFkYXRhLm1heE9iamVjdFN0b3JlSWQgPSBpZDsKKyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRh
IG9iamVjdFN0b3JlTWV0YWRhdGEobmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0aCwgYXV0b0lu
Y3JlbWVudCwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpNaW5pbXVtSW5kZXhJZCk7
CiAKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3JlYXRlT2JqZWN0U3RvcmVP
cGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZSksIENyZWF0ZU9iamVjdFN0b3JlQWJv
cnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZSkpKSB7Ci0gICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQorICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3JlYXRlT2Jq
ZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVNZXRh
ZGF0YSksIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmpl
Y3RTdG9yZUlkKSk7CiAKLSAgICBtX29iamVjdFN0b3Jlcy5zZXQoaWQsIG9iamVjdFN0b3JlKTsK
LSAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOworICAgIGFkZE9iamVjdFN0b3JlKG9i
amVjdFN0b3JlTWV0YWRhdGEsIG9iamVjdFN0b3JlSWQpOwogfQogCi12b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQordm9pZCBDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikK
IHsKICAgICBJREJfVFJBQ0UoIkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7Ci0gICAgaWYg
KCFtX2RhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2UtPmlkKCksIG1fb2JqZWN0
U3RvcmUtPmlkKCksIG1fb2JqZWN0U3RvcmUtPm5hbWUoKSwgbV9vYmplY3RTdG9yZS0+a2V5UGF0
aCgpLCBtX29iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCkpKSB7Ci0gICAgICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJy
b3IgY3JlYXRpbmcgb2JqZWN0IHN0b3JlICclcycuIiwgbV9vYmplY3RTdG9yZS0+bmFtZSgpLnV0
ZjgoKS5kYXRhKCkpKTsKKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9y
ZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgdHJhbnNhY3Rpb24tPmRh
dGFiYXNlKCktPmlkKCksIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCwgbV9vYmplY3RTdG9yZU1l
dGFkYXRhLm5hbWUsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5rZXlQYXRoLCBtX29iamVjdFN0b3Jl
TWV0YWRhdGEuYXV0b0luY3JlbWVudCkpIHsKKyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJy
b3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBjcmVhdGluZyBv
YmplY3Qgc3RvcmUgJyVzJy4iLCBtX29iamVjdFN0b3JlTWV0YWRhdGEubmFtZS51dGY4KCkuZGF0
YSgpKSk7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogfQogCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9iamVjdFN0b3JlKGludDY0X3QgaWQpCit2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewotICAgIHJldHVybiBtX29iamVj
dFN0b3Jlcy5nZXQoaWQpOworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
ZGVsZXRlT2JqZWN0U3RvcmUiKTsKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
Y29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEmIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2Jq
ZWN0U3RvcmVJZCk7CisKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNh
Y3Rpb25JZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0g
bV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIEFTU0VSVCh0cmFuc2FjdGlv
bi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CisKKyAgICB0cmFu
c2FjdGlvbi0+c2NoZWR1bGVUYXNrKERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUo
bV9iYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlTWV0YWRhdGEpLCAgRGVsZXRlT2JqZWN0U3RvcmVB
Ym9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlTWV0YWRhdGEpKTsKKyAgICBy
ZW1vdmVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGlkLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVu
dHJ5KQogewotICAgIEFTU0VSVChtX29iamVjdFN0b3Jlcy5jb250YWlucyhpZCkpOworICAgIElE
Ql9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgiKTsKKyAgICBBU1NF
UlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAg
IGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9i
amVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jlcy5nZXQoaWQpOwotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOworICAgIEFTU0VSVCghb2Jq
ZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7CisgICAgY29uc3QgSURCSW5kZXhN
ZXRhZGF0YSBpbmRleE1ldGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVs
dGlFbnRyeSk7CisKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rp
b25JZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+
bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CiAKLSAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0
ZSh0aGlzLCBvYmplY3RTdG9yZSksIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNy
ZWF0ZSh0aGlzLCBvYmplY3RTdG9yZSkpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1
bGVUYXNrKENyZWF0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIG9iamVj
dFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpLCBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVh
dGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCkpOworCisgICAgYWRkSW5kZXgob2JqZWN0
U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSwgaW5kZXhJZCk7Cit9CisKKwordm9pZCBDcmVhdGVJbmRl
eE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlv
bikKK3sKKyAgICBJREJfVFJBQ0UoIkNyZWF0ZUluZGV4T3BlcmF0aW9uIik7CisgICAgaWYgKCFt
X2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5pZCgpLCBtX29iamVjdFN0b3JlSWQs
IG1faW5kZXhNZXRhZGF0YS5pZCwgbV9pbmRleE1ldGFkYXRhLm5hbWUsIG1faW5kZXhNZXRhZGF0
YS5rZXlQYXRoLCBtX2luZGV4TWV0YWRhdGEudW5pcXVlLCBtX2luZGV4TWV0YWRhdGEubXVsdGlF
bnRyeSkpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgi
SW50ZXJuYWwgZXJyb3Igd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGluZGV4ICclcycuIiwgbV9pbmRl
eE1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBtX29iamVjdFN0b3Jlcy5yZW1vdmUoaWQpOworfQorCit2b2lkIENyZWF0ZUluZGV4QWJv
cnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rp
b24pCit7CisgICAgSURCX1RSQUNFKCJDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uIik7CisgICAg
QVNTRVJUKCF0cmFuc2FjdGlvbik7CisgICAgbV9kYXRhYmFzZS0+cmVtb3ZlSW5kZXgobV9vYmpl
Y3RTdG9yZUlkLCBtX2luZGV4SWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQpCit7CisgICAgSURCX1RSQUNFKCJJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpkZWxldGVJbmRleCIpOworICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5j
b250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlk
KTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsK
KyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhID0gb2JqZWN0U3RvcmUu
aW5kZXhlcy5nZXQoaW5kZXhJZCk7CisKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFp
bnModHJhbnNhY3Rpb25JZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5z
YWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIEFTU0VSVCh0
cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CisK
KyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKERlbGV0ZUluZGV4T3BlcmF0aW9uOjpjcmVh
dGUobV9iYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpLCBEZWxldGVJbmRleEFi
b3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkp
OworCisgICAgcmVtb3ZlSW5kZXgob2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7Cit9CisKK3ZvaWQg
RGVsZXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCog
dHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJEZWxldGVJbmRleE9wZXJhdGlvbiIpOwor
ICAgIG1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPmlkKCksIG1fb2JqZWN0U3Rv
cmVJZCwgbV9pbmRleElkKTsKK30KKwordm9pZCBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQoreworICAgIElE
Ql9UUkFDRSgiRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbiIpOworICAgIEFTU0VSVCghdHJhbnNh
Y3Rpb24pOworICAgIG1fZGF0YWJhc2UtPmFkZEluZGV4KG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRl
eE1ldGFkYXRhLCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpOwogfQogCiB2b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCkBAIC01MDgs
NyArNjc2LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpnZXQoaW50NjRfdCB0cmFu
c2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGkKICAgICBBU1NFUlQobV90cmFuc2Fj
dGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpOwogICAgIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwog
Ci0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhHZXRPcGVyYXRpb246OmNyZWF0ZShtX2Jh
Y2tpbmdTdG9yZSwgbWV0YWRhdGEoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2Us
IGtleU9ubHkgPyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5IDogSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZTo6S2V5QW5kVmFsdWUsIGNhbGxiYWNrcykpOworICAgIHRyYW5zYWN0
aW9uLT5zY2hlZHVsZVRhc2soR2V0T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIG1f
bWV0YWRhdGEsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBrZXlPbmx5ID8gSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5T25seSA6IElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6OktleUFuZFZhbHVlLCBjYWxsYmFja3MpKTsKIH0KIAogdm9pZCBHZXRPcGVyYXRpb246OnBl
cmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCkBAIC02MDcsNyAr
Nzc1LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwdXQoaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFYKICAgICBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsK
ICAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9P
TkxZKTsKIAotICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRh
ZGF0YSA9IG1ldGFkYXRhKCkub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKyAgICBj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBtX21ldGFk
YXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CiAKICAgICBBU1NFUlQob2JqZWN0
U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50IHx8IGtleS5nZXQoKSk7CiAKQEAgLTcxNSw4ICs4
ODMsOCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0UwogICAgIFZlY3RvcjxPd25QdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOwogICAgIFN0
cmluZyBlcnJvck1lc3NhZ2U7CiAgICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRzID0gZmFsc2U7Ci0g
ICAgQVNTRVJUKG1ldGFkYXRhKCkub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQp
KTsKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRh
ID0gbWV0YWRhdGEoKS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworICAgIEFTU0VS
VChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAg
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKICAgICBib29sIGJhY2tpbmdT
dG9yZVN1Y2Nlc3MgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjptYWtlSW5kZXhXcml0ZXJz
KHRyYW5zYWN0aW9uLCBzdG9yZS5nZXQoKSwgaWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgcHJp
bWFyeUtleSwgZmFsc2UsIGluZGV4SWRzLCBpbmRleEtleXMsICZpbmRleFdyaXRlcnMsICZlcnJv
ck1lc3NhZ2UsIG9iZXlzQ29uc3RyYWludHMpOwogICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2Vz
cykgewogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFj
a2luZyBzdG9yZSBlcnJvciB1cGRhdGluZyBpbmRleCBrZXlzLiIpKTsKQEAgLTgwMyw3ICs5NzEs
NyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvdW50KGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLAogICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6Y291bnQiKTsKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnMo
dHJhbnNhY3Rpb25JZCkpOwogICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0
aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIEFTU0VSVChtZXRh
ZGF0YSgpLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgQVNTRVJU
KG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKICAgICB0
cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENvdW50T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5n
U3RvcmUsIGlkKCksIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3Mp
KTsKIH0KIApAQCAtODQzLDcgKzEwMTEsNiBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdAogdm9p
ZCBEZWxldGVSYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIkRlbGV0ZVJhbmdlT3BlcmF0aW9uIik7
Ci0KICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNv
ciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBt
X2tleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwogICAgIGlmIChiYWNraW5nU3RvcmVD
dXJzb3IpIHsKICAgICAgICAgZG8gewpAQCAtODcyLDEyICsxMDM5LDEyIEBAIHZvaWQgQ2xlYXJP
cGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24p
CiAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQordm9pZCBEZWxldGVPYmplY3RTdG9yZU9wZXJh
dGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsK
ICAgICBJREJfVFJBQ0UoIkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7Ci0gICAgYm9vbCBv
ayA9IG1fZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZSh0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZS0+aWQoKSwgbV9vYmpl
Y3RTdG9yZS0+aWQoKSk7CisgICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmpl
Y3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCktPmlkKCksIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCk7CiAgICAgaWYg
KCFvaykgewotICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3Ry
aW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIGRlbGV0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIs
IG1fb2JqZWN0U3RvcmUtPm5hbWUoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJy
b3IgZGVsZXRpbmcgb2JqZWN0IHN0b3JlICclcycuIiwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5h
bWUudXRmOCgpLmRhdGEoKSkpOwogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IpOwog
ICAgIH0KIH0KQEAgLTExMzIsNyArMTI5OSw3IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6ZGVsZXRlRGF0YWJhc2VGaW5hbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhCiAg
ICAgbV9tZXRhZGF0YS52ZXJzaW9uID0gTm9TdHJpbmdWZXJzaW9uOwogICAgIG1fbWV0YWRhdGEu
aWQgPSBJbnZhbGlkSWQ7CiAgICAgbV9tZXRhZGF0YS5pbnRWZXJzaW9uID0gSURCRGF0YWJhc2VN
ZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOwotICAgIG1fb2JqZWN0U3RvcmVzLmNsZWFyKCk7CisgICAg
bV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY2xlYXIoKTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2Vz
cygpOwogfQogCkBAIC0xMTc3LDM1ICsxMzQ0LDIzIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tz
CiAgICAgbV9jbG9zaW5nQ29ubmVjdGlvbiA9IGZhbHNlOwogfQogCi12b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmxvYWRPYmplY3RTdG9yZXMoKQotewotICAgIFZlY3RvcjxpbnQ2NF90PiBp
ZHM7Ci0gICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7Ci0gICAgVmVjdG9yPElEQktleVBhdGg+IGtl
eVBhdGhzOwotICAgIFZlY3Rvcjxib29sPiBhdXRvSW5jcmVtZW50RmxhZ3M7Ci0gICAgVmVjdG9y
PGludDY0X3Q+IG1heEluZGV4SWRzOwotICAgIFZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRh
PiBvYmplY3RTdG9yZXMgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVzKG1fbWV0YWRh
dGEuaWQpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTdG9yZXMuc2l6ZSgp
OyBpKyspCi0gICAgICAgIG1fb2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZXNbaV0uaWQsIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZXNbaV0pKTsK
LX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0
T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9u
KQordm9pZCBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogeworICAgIElEQl9UUkFDRSgiQ3JlYXRl
T2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiIpOwogICAgIEFTU0VSVCghdHJhbnNhY3Rpb24pOwot
ICAgIEFTU0VSVChtX2RhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlucyhtX29iamVjdFN0
b3JlLT5pZCgpKSk7Ci0gICAgbV9kYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMucmVtb3ZlKG1fb2Jq
ZWN0U3RvcmUtPmlkKCkpOworICAgIG1fZGF0YWJhc2UtPnJlbW92ZU9iamVjdFN0b3JlKG1fb2Jq
ZWN0U3RvcmVJZCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6RGVsZXRlT2Jq
ZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KiB0cmFuc2FjdGlvbikKK3ZvaWQgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKKyAgICBJREJf
VFJBQ0UoIkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24iKTsKICAgICBBU1NFUlQoIXRy
YW5zYWN0aW9uKTsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRh
aW5zKG1fb2JqZWN0U3RvcmUtPmlkKCkpKTsKLSAgICBtX2RhdGFiYXNlLT5tX29iamVjdFN0b3Jl
cy5zZXQobV9vYmplY3RTdG9yZS0+aWQoKSwgbV9vYmplY3RTdG9yZSk7CisgICAgbV9kYXRhYmFz
ZS0+YWRkT2JqZWN0U3RvcmUobV9vYmplY3RTdG9yZU1ldGFkYXRhLCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhOjpJbnZhbGlkSWQpOwogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZl
cnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKiB0cmFuc2FjdGlvbikKIHsKKyAgICBJREJfVFJBQ0UoIlZlcnNpb25DaGFuZ2VBYm9ydE9w
ZXJhdGlvbiIpOwogICAgIEFTU0VSVCghdHJhbnNhY3Rpb24pOwogICAgIG1fZGF0YWJhc2UtPm1f
bWV0YWRhdGEudmVyc2lvbiA9IG1fcHJldmlvdXNWZXJzaW9uOwogICAgIG1fZGF0YWJhc2UtPm1f
bWV0YWRhdGEuaW50VmVyc2lvbiA9IG1fcHJldmlvdXNJbnRWZXJzaW9uOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5oCmluZGV4IDk0NGI4MzAwYzdlMzIyM2JkZDM0NGJiNWJhODFkMWMzYjE0ZmExNjIuLjIwMzVl
MjA3N2QxMTY3MzAxOWY2ZTQ2ZTY4NjZlOTA4ZjE1NjVlNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgK
QEAgLTQwLDcgKzQwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCQmFja2luZ1N0
b3JlOwogY2xhc3MgSURCRGF0YWJhc2U7CiBjbGFzcyBJREJGYWN0b3J5QmFja2VuZEltcGw7Ci1j
bGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOwogY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDsKIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKIGNsYXNzIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CkBAIC01NCwxNiArNTMsMjAgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKICAgICBpbnQ2NF90IGlkKCkg
Y29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5pZDsgfQorICAgIHZvaWQgYWRkT2JqZWN0U3RvcmUo
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIGludDY0X3QgbmV3TWF4T2JqZWN0U3RvcmVJ
ZCk7CisgICAgdm9pZCByZW1vdmVPYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwor
ICAgIHZvaWQgYWRkSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1l
dGFkYXRhJiwgaW50NjRfdCBuZXdNYXhJbmRleElkKTsKKyAgICB2b2lkIHJlbW92ZUluZGV4KGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKIAogICAgIHZvaWQgb3BlbkNv
bm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24pOwogICAg
IHZvaWQgZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAogICAgIC8v
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZQogICAgIHZpcnR1YWwgSURCRGF0YWJhc2VNZXRh
ZGF0YSBtZXRhZGF0YSgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgaWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9v
bCBhdXRvSW5jcmVtZW50KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2
b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3Rv
cmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGlkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSAgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50KTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpOwogICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBtZXRob2QgaW4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzkyMy4KICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVUcmFuc2FjdGlv
bihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3Rv
cmVJZHMsIElEQlRyYW5zYWN0aW9uOjpNb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVHJh
bnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgdW5zaWduZWQg
c2hvcnQgbW9kZSk7CkBAIC03MiwxMCArNzUsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydChp
bnQ2NF90IHRyYW5zYWN0aW9uSWQpOwogCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUluZGV4KGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBi
b29sIG11bHRpRW50cnkpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktl
eVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCk7CiAKLSAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG9iamVjdFN0b3JlKGludDY0X3QgaWQpOwogICAgIElEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KICAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZChQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKICAgICB2b2lkIHRyYW5zYWN0aW9u
RmluaXNoZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CkBAIC05Niwy
MCArOTgsMTUgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgb3BlbkludGVybmFsKCk7CiAgICAgdm9p
ZCBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pOwotICAgIHZvaWQgbG9hZE9iamVjdFN0b3Jlcygp
OwogICAgIHNpemVfdCBjb25uZWN0aW9uQ291bnQoKTsKICAgICB2b2lkIHByb2Nlc3NQZW5kaW5n
Q2FsbHMoKTsKIAogICAgIGJvb2wgaXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKTsKICAgICB2b2lk
IGRlbGV0ZURhdGFiYXNlRmluYWwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAotICAgIGNs
YXNzIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOwotICAgIGNsYXNzIERlbGV0ZU9iamVjdFN0
b3JlT3BlcmF0aW9uOwogICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VPcGVyYXRpb247CiAKICAgICAv
LyBXaGVuIGEgInZlcnNpb25jaGFuZ2UiIHRyYW5zYWN0aW9uIGFib3J0cywgdGhlc2UgcmVzdG9y
ZSB0aGUgYmFjay1lbmQgb2JqZWN0IGhpZXJhcmNoeS4KLSAgICBjbGFzcyBDcmVhdGVPYmplY3RT
dG9yZUFib3J0T3BlcmF0aW9uOwotICAgIGNsYXNzIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVy
YXRpb247CiAgICAgY2xhc3MgVmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOwogCiAgICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CkBAIC0xMTksOSArMTE2LDYgQEAg
cHJpdmF0ZToKICAgICAvLyBUaGlzIG1pZ2h0IG5vdCBuZWVkIHRvIGJlIGEgUmVmUHRyIHNpbmNl
IHRoZSBmYWN0b3J5J3MgbGlmZXRpbWUgaXMgdGhhdCBvZiB0aGUgcGFnZSBncm91cCwgYnV0IGl0
J3MgYmV0dGVyIHRvIGJlIGNvbnNlcnZpdGl2ZSB0aGFuIHNvcnJ5LgogICAgIFJlZlB0cjxJREJG
YWN0b3J5QmFja2VuZEltcGw+IG1fZmFjdG9yeTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQ2
NF90LCBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gPiBPYmplY3RTdG9yZU1hcDsK
LSAgICBPYmplY3RTdG9yZU1hcCBtX29iamVjdFN0b3JlczsKLQogICAgIE93blB0cjxJREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yPiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CiAgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
SW5kZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJJbmRleEJhY2tlbmRJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk0
MGM1ZTdlMThiYmE0YTgwNTU2NGU0YmU4NDZmOTMyNDczYjgxYS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5k
SW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJC
YWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJD
dXJzb3JCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIK
LSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQktleS5oIgot
I2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKLSNpbmNs
dWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCVHJhY2luZy5o
IgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1JREJJbmRleEJhY2tlbmRJbXBsOjpJREJJbmRleEJhY2tlbmRJbXBsKGNvbnN0
IElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlLCBjb25zdCBJREJJbmRleE1ldGFkYXRh
JiBtZXRhZGF0YSkKLSAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCi0gICAgLCBtX21ldGFkYXRh
KG1ldGFkYXRhKQotewotfQotCi1JREJJbmRleEJhY2tlbmRJbXBsOjp+SURCSW5kZXhCYWNrZW5k
SW1wbCgpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxYTkzOTk5ZTE2MzNkNGY3ZmE3MWU5YjY4NzRkZTE4MTAxYzIwZTlhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkluZGV4QmFja2VuZEltcGxfaAotI2RlZmluZSBJ
REJJbmRleEJhY2tlbmRJbXBsX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0j
aW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQkRhdGFi
YXNlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCIK
LSNpbmNsdWRlICJJREJLZXlQYXRoLmgiCi0jaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJCYWNraW5nU3RvcmU7Ci1jbGFzcyBJREJLZXk7
Ci1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOwotCi1jbGFzcyBJREJJbmRleEJhY2tl
bmRJbXBsIDogcHVibGljIElEQkluZGV4QmFja2VuZEludGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gY3JlYXRlKGNvbnN0IElEQkRh
dGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBtZXRh
ZGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXhCYWNrZW5k
SW1wbChkYXRhYmFzZSwgbWV0YWRhdGEpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+SURCSW5kZXhC
YWNrZW5kSW1wbCgpOwotCi0gICAgaW50NjRfdCBpZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBB
U1NFUlQobV9tZXRhZGF0YS5pZCAhPSBJbnZhbGlkSWQpOwotICAgICAgICByZXR1cm4gbV9tZXRh
ZGF0YS5pZDsKLSAgICB9Ci0KLSAgICAvLyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UKLSAgICB2
aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQg
c2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lk
IG9wZW5LZXlDdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRp
cmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAg
IHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29k
ZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0S2V5KFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyB9Ci0KLSAgICBJREJJbmRleE1ldGFkYXRhIG1ldGFkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9tZXRhZGF0YTsgfQotICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbWV0
YWRhdGEubmFtZTsgfQotICAgIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgoKSB7IHJldHVybiBt
X21ldGFkYXRhLmtleVBhdGg7IH0KLSAgICBjb25zdCBib29sJiB1bmlxdWUoKSB7IHJldHVybiBt
X21ldGFkYXRhLnVuaXF1ZTsgfQotICAgIGNvbnN0IGJvb2wmIG11bHRpRW50cnkoKSB7IHJldHVy
biBtX21ldGFkYXRhLm11bHRpRW50cnk7IH0KLQotcHJpdmF0ZToKLSAgICBJREJJbmRleEJhY2tl
bmRJbXBsKGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEltcGwqLCBjb25zdCBJREJJbmRleE1ldGFk
YXRhJik7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAwOwotCi0gICAg
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YWJhc2UtPmJhY2tpbmdTdG9yZSgpOyB9Ci0gICAgaW50NjRfdCBkYXRhYmFzZUlkKCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS0+aWQoKTsgfQotCi0gICAgY29uc3QgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbCogbV9kYXRhYmFzZTsKLQotICAgIElEQkluZGV4TWV0YWRhdGEgbV9tZXRh
ZGF0YTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAv
LyBJREJJbmRleEJhY2tlbmRJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCA4OTEyNTNkOWUwNGM5MWU5NWFlZWIy
MzA0NTQ1ZjI0NjZhMDI3MjVlLi5mNTBmZTFlYmI4MDgyZTIxNzZmOGQ0ZmVkMzBkOWFhYjAzMjU1
ZjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuY3BwCkBAIC00OSwxMyArNDksMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBz
dGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZGVmYXVsdERpcmVjdGlvbiA9IElEQkN1cnNvcjo6
TkVYVDsKIAotSURCT2JqZWN0U3RvcmU6OklEQk9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGEmIG1ldGFkYXRhLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZT4gaWRiT2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK0lE
Qk9iamVjdFN0b3JlOjpJREJPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
JiBtZXRhZGF0YSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQogICAgIDogbV9tZXRhZGF0
YShtZXRhZGF0YSkKLSAgICAsIG1fYmFja2VuZChpZGJPYmplY3RTdG9yZSkKICAgICAsIG1fdHJh
bnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAgLCBtX2RlbGV0ZWQoZmFsc2UpCiB7Ci0gICAgQVNT
RVJUKG1fYmFja2VuZCk7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOwogICAgIC8vIFdlIHBh
c3MgYSByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgog
ICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOwpAQCAtMzg1LDkgKzM4Myw3IEBAIFBhc3NS
ZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0CiAgICAgfQogCiAgICAgaW50NjRfdCBpbmRleElkID0gbV9tZXRh
ZGF0YS5tYXhJbmRleElkICsgMTsKLSAgICBtX2JhY2tlbmQtPmNyZWF0ZUluZGV4KGluZGV4SWQs
IG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSwgbV90cmFuc2FjdGlvbi0+YmFja2Vu
ZCgpLCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gMDsKKyAgICBiYWNrZW5kREIo
KS0+Y3JlYXRlSW5kZXgobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgaW5kZXhJZCwgbmFtZSwg
a2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KTsKIAogICAgICsrbV9tZXRhZGF0YS5tYXhJbmRl
eElkOwogCkBAIC00NjYsMTQgKzQ2MiwxMyBAQCB2b2lkIElEQk9iamVjdFN0b3JlOjpkZWxldGVJ
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kLT5kZWxldGVJbmRleChpbmRleElkLCBtX3RyYW5z
YWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoIWVjKSB7Ci0gICAgICAgIElEQkluZGV4
TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKLSAgICAgICAgaWYgKGl0
ICE9IG1faW5kZXhNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5y
ZW1vdmUoaXQtPnZhbHVlLT5pZCgpKTsKLSAgICAgICAgICAgIGl0LT52YWx1ZS0+bWFya0RlbGV0
ZWQoKTsKLSAgICAgICAgICAgIG1faW5kZXhNYXAucmVtb3ZlKG5hbWUpOwotICAgICAgICB9Cisg
ICAgYmFja2VuZERCKCktPmRlbGV0ZUluZGV4KG1fdHJhbnNhY3Rpb24tPmlkKCksIGlkKCksIGlu
ZGV4SWQpOworCisgICAgSURCSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbmRleE1hcC5maW5k
KG5hbWUpOworICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKSB7CisgICAgICAgIG1fbWV0
YWRhdGEuaW5kZXhlcy5yZW1vdmUoaXQtPnZhbHVlLT5pZCgpKTsKKyAgICAgICAgaXQtPnZhbHVl
LT5tYXJrRGVsZXRlZCgpOworICAgICAgICBtX2luZGV4TWFwLnJlbW92ZShuYW1lKTsKICAgICB9
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5oCmluZGV4IDdlMmY3MmZhZWE4NTE5M2MzMDkzZWQ2M2Q4NWFhMmE1MDJmM2MwMjcuLjZk
ZmQ5Nzg4YTUwOGM2Yjk4NTIwZGUwZjQxZDMxZGQxM2ZkYTI3YWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaApAQCAtMjksNyArMjks
NiBAQAogI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJJREJDdXJzb3IuaCIKICNp
bmNsdWRlICJJREJJbmRleC5oIgotI2luY2x1ZGUgIklEQkluZGV4QmFja2VuZEludGVyZmFjZS5o
IgogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCiAjaW5jbHVk
ZSAiSURCTWV0YWRhdGEuaCIKQEAgLTUyLDkgKzUxLDkgQEAgY2xhc3MgSURCQW55OwogCiBjbGFz
cyBJREJPYmplY3RTdG9yZSA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBSZWZDb3Vu
dGVkPElEQk9iamVjdFN0b3JlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmU+IGNyZWF0ZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0
YSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZT4gY3JlYXRlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG1ldGFkYXRhLCBJ
REJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IElEQk9iamVjdFN0b3JlKG1ldGFkYXRhLCBiYWNrZW5kLCB0cmFuc2FjdGlvbikpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQk9iamVjdFN0b3JlKG1ldGFkYXRhLCB0cmFu
c2FjdGlvbikpOwogICAgIH0KICAgICB+SURCT2JqZWN0U3RvcmUoKSB7IH0KIApAQCAtMTA5LDcg
KzEwOCw3IEBAIHB1YmxpYzoKICAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqIGJhY2tl
bmREQigpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIElEQk9iamVjdFN0b3JlKGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEmLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZT4sIElEQlRyYW5zYWN0aW9uKik7CisgICAgSURCT2JqZWN0U3RvcmUoY29uc3QgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSYsIElEQlRyYW5zYWN0aW9uKik7CiAKICAgICBpbnQ2NF90IGZpbmRJ
bmRleElkKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CiAgICAgYm9vbCBjb250YWluc0luZGV4
KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKQEAgLTExOCw3ICsxMTcsNiBAQCBwcml2YXRlOgog
ICAgIH0KIAogICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9tZXRhZGF0YTsKLSAgICBSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7CiAgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwogICAgIGJvb2wgbV9kZWxldGVkOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IGU2Y2U4M2MzNWIzOGMwNGVjZWFmYTc4YTlh
YWQ1NWZmODBhZmI3YjEuLmQyNGI2N2ZkOWJjYTA5MTIwNzFkNWI5MDkxODA2ZDk3YTZhYjFlNjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVk
ZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJJ
bmRleEJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSURCS2V5
UGF0aC5oIgogI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCkBAIC00NCw5OCArNDMsNiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNy
ZWF0ZUluZGV4T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9w
ZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBp
bmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlSW5kZXhPcGVy
YXRpb24ob2JqZWN0U3RvcmUsIGluZGV4KSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgQ3JlYXRlSW5k
ZXhPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RT
dG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKLSAgICAgICAgOiBt
X29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQotICAgICAgICAsIG1faW5kZXgoaW5kZXgpCi0gICAg
ewotICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVj
dFN0b3JlOwotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBtX2luZGV4OwotfTsKLQot
Y2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhPcGVyYXRpb24gOiBw
dWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+
IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVJbmRleE9wZXJhdGlvbihvYmplY3RTdG9yZSwgaW5k
ZXgpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBEZWxldGVJbmRleE9wZXJhdGlvbihQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEltcGw+IGluZGV4KQotICAgICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0U3Rv
cmUpCi0gICAgICAgICwgbV9pbmRleChpbmRleCkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7Ci19OwotCi1jbGFzcyBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25Q
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiBpbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbihvYmplY3RTdG9yZSwgaW5kZXgpKTsKLSAgICB9
Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwot
cHJpdmF0ZToKLSAgICBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gaW5kZXgpCi0gICAgICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAg
ICAgICAgLCBtX2luZGV4KGluZGV4KQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKLSAgICBSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW1wbD4gbV9pbmRleDsKLX07Ci0KLWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxl
dGVJbmRleEFib3J0T3BlcmF0aW9uKG9iamVjdFN0b3JlLCBpbmRleCkpOwotICAgIH0KLSAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRl
OgotICAgIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiBpbmRleCkKLSAgICAgICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQotICAgICAgICAs
IG1faW5kZXgoaW5kZXgpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bXBsPiBtX2luZGV4OwotfTsKLQotCi1JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjp+SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbCgpCi17Ci19Ci0KLUlEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCog
ZGF0YWJhc2UsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG1ldGFkYXRhKQotICAgIDog
bV9kYXRhYmFzZShkYXRhYmFzZSkKLSAgICAsIG1fbWV0YWRhdGEobWV0YWRhdGEpCi17Ci0gICAg
bG9hZEluZGV4ZXMoKTsKLX0KLQotSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjptZXRhZGF0YSgpIGNvbnN0Ci17Ci0gICAgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSBtZXRhZGF0YShtX21ldGFkYXRhKTsKLSAgICBmb3IgKEluZGV4TWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX2luZGV4ZXMuZW5kKCk7ICsraXQp
Ci0gICAgICAgIG1ldGFkYXRhLmluZGV4ZXMuc2V0KGl0LT5rZXksIGl0LT52YWx1ZS0+bWV0YWRh
dGEoKSk7Ci0gICAgcmV0dXJuIG1ldGFkYXRhOwotfQotCiBib29sIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OkluZGV4V3JpdGVyOjp2ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlJiBi
YWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBib29sJiBjYW5BZGRLZXlzLCBjb25zdCBJREJLZXkqIHByaW1hcnlLZXksIFN0cmluZyogZXJy
b3JNZXNzYWdlKSBjb25zdAogewogICAgIGNhbkFkZEtleXMgPSBmYWxzZTsKQEAgLTIxMiw4NiAr
MTE5LDYgQEAgYm9vbCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjptYWtlSW5kZXhXcml0ZXJz
KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmNyZWF0ZUluZGV4KGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
SURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV9pbmRleGVzLmNvbnRhaW5zKGlkKSwg
IkluZGV4ZXMgYWxyZWFkeSBjb250YWluICclcyciLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotCi0g
ICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1w
bDo6Y3JlYXRlKG1fZGF0YWJhc2UsIElEQkluZGV4TWV0YWRhdGEobmFtZSwgaWQsIGtleVBhdGgs
IHVuaXF1ZSwgbXVsdGlFbnRyeSkpOwotICAgIEFTU0VSVChpbmRleC0+bmFtZSgpID09IG5hbWUp
OwotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0g
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgQVNT
RVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdF
KTsKLSAgICBBU1NFUlQoaWQgPiBtX21ldGFkYXRhLm1heEluZGV4SWQpOwotICAgIG1fbWV0YWRh
dGEubWF4SW5kZXhJZCA9IGlkOwotCi0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNr
KENyZWF0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgaW5kZXgpLCBDcmVhdGVJbmRleEFi
b3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgaW5kZXgpKSkgewotICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIG1faW5kZXhlcy5zZXQoaWQsIGluZGV4KTsKLSAgICByZXR1cm4g
aW5kZXgucmVsZWFzZSgpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNy
ZWF0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRy
YW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiQ3JlYXRlSW5kZXhPcGVyYXRpb24iKTsKLSAg
ICBpZiAoIW1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbmRleCh0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJ
ZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX2luZGV4LT5pZCgpLCBtX2luZGV4LT5uYW1lKCks
IG1faW5kZXgtPmtleVBhdGgoKSwgbV9pbmRleC0+dW5pcXVlKCksIG1faW5kZXgtPm11bHRpRW50
cnkoKSkpIHsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgi
SW50ZXJuYWwgZXJyb3Igd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGluZGV4ICclcycuIiwgbV9pbmRl
eC0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0K
LVBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjppbmRleChpbnQ2NF90IGluZGV4SWQpCi17Ci0gICAgUmVmUHRyPElEQkluZGV4QmFj
a2VuZEludGVyZmFjZT4gaW5kZXggPSBtX2luZGV4ZXMuZ2V0KGluZGV4SWQpOwotICAgIEFTU0VS
VChpbmRleCk7Ci0gICAgcmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChpbnQ2NF90IGluZGV4SWQsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIEFTU0VSVChtX2luZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkpOwotCi0gICAgUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gbV9pbmRleGVzLmdldChpbmRleElkKTsK
LSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAgICBBU1NFUlQo
dHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOwot
Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKERlbGV0ZUluZGV4T3BlcmF0aW9u
OjpjcmVhdGUodGhpcywgaW5kZXgpLCBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUo
dGhpcywgaW5kZXgpKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFu
c2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9pbmRl
eGVzLnJlbW92ZShpbmRleElkKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIkRlbGV0ZUluZGV4T3BlcmF0aW9uIik7
Ci0gICAgbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0ZUluZGV4KHRyYW5zYWN0
aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlk
KCksIG1fb2JqZWN0U3RvcmUtPmlkKCksIG1faW5kZXgtPmlkKCkpOwotfQotCi12b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmxvYWRJbmRleGVzKCkKLXsKLSAgICBWZWN0b3I8SURCSW5k
ZXhNZXRhZGF0YT4gaW5kZXhlcyA9IGJhY2tpbmdTdG9yZSgpLT5nZXRJbmRleGVzKGRhdGFiYXNl
SWQoKSwgbV9tZXRhZGF0YS5pZCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4
ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1faW5kZXhlcy5zZXQoaW5kZXhlc1tpXS5pZCwgSURC
SW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKG1fZGF0YWJhc2UsIGluZGV4ZXNbaV0pKTsKLX0KLQot
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9u
OjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAg
IEFTU0VSVCghdHJhbnNhY3Rpb24pOwotICAgIEFTU0VSVChtX29iamVjdFN0b3JlLT5tX2luZGV4
ZXMuY29udGFpbnMobV9pbmRleC0+aWQoKSkpOwotICAgIG1fb2JqZWN0U3RvcmUtPm1faW5kZXhl
cy5yZW1vdmUobV9pbmRleC0+aWQoKSk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQoIXRyYW5zYWN0aW9uKTsKLSAg
ICBBU1NFUlQoIW1fb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhtX2luZGV4LT5pZCgp
KSk7Ci0gICAgbV9vYmplY3RTdG9yZS0+bV9pbmRleGVzLnNldChtX2luZGV4LT5pZCgpLCBtX2lu
ZGV4KTsKLX0KLQogUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24sIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewogICAgIGNvbnN0IGludDY0X3Qg
bWF4R2VuZXJhdG9yVmFsdWUgPSA5MDA3MTk5MjU0NzQwOTkyTEw7IC8vIE1heGltdW0gaW50ZWdl
ciBzdG9yYWJsZSBhcyBFQ01BU2NyaXB0IG51bWJlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApp
bmRleCBiM2UyZTU1MDE2ZTEzMTJmMzM5MGEwMTc2ZGVlNzgxNjlhOTgyYmRlLi45NzBmYzQ5YTJl
Njk5MTU4MTAwMjVlNDBlMDkzZmM5YzBkYjkxOWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5o
CkBAIC0zOSw1MyArMzksMTIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDsKLWNsYXNzIElEQkluZGV4QmFja2VuZEltcGw7CiBjbGFzcyBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOwogY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlOwogc3RydWN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGE7CiAKLWNsYXNzIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwgOiBwdWJsaWMgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBjcmVhdGUoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UsIGNvbnN0IElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEmIG1ldGFkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGRhdGFiYXNlLCBtZXRhZGF0YSkp
OwotICAgIH0KLSAgICB2aXJ0dWFsIH5JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKCk7Ci0KLSAg
ICB0eXBlZGVmIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+ID4g
SW5kZXhNYXA7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAwOwotICAg
IGludDY0X3QgaWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEuaWQg
IT0gSW52YWxpZElkKTsKLSAgICAgICAgcmV0dXJuIG1fbWV0YWRhdGEuaWQ7Ci0gICAgfQotCi0g
ICAgLy8gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIGdl
dChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFj
ZT4gY3JlYXRlSW5kZXgoaW50NjRfdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQ
YXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtl
eXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90
PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRl
eGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4KGludDY0X3QpOwotICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVJbmRleChpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVm
UHRyPElEQktleVJhbmdlPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLQotICAgIHN0
YXRpYyBib29sIHBvcHVsYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlJiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1w
bD4pOwotCi0gICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0OwotICAg
IGNvbnN0IFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbWV0YWRhdGEubmFtZTsgfQotICAgIGNv
bnN0IElEQktleVBhdGgmIGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmtleVBh
dGg7IH0KLSAgICBjb25zdCBib29sJiBhdXRvSW5jcmVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9t
ZXRhZGF0YS5hdXRvSW5jcmVtZW50OyB9Ci0KLSAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS0+YmFja2luZ1N0b3Jl
KCk7IH0KLSAgICBpbnQ2NF90IGRhdGFiYXNlSWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNl
LT5pZCgpOyB9CisvLyBGSVhNRTogdGhpcyBuYW1lc3BhY2UgaXMgdGVtcG9yYXJ5IHVudGlsIHdl
IG1vdmUgaXRzIGNvbnRlbnRzIG91dCB0byB0aGVpciBvd24gaG9tZS4KK25hbWVzcGFjZSBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsIHsKIAogICAgIGNsYXNzIEluZGV4V3JpdGVyIHsKICAgICBw
dWJsaWM6CkBAIC0xMDksMjcgKzY4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMgbV9pbmRleEtleXM7CiAgICAgfTsKIAotICAg
IHN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiwgSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIGJv
b2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25z
dCBWZWN0b3I8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+JiwgVmVj
dG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiogaW5kZXhXcml0ZXJzLCBTdHJpbmcqIGVycm9yTWVz
c2FnZSwgYm9vbCYgY29tcGxldGVkKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0KLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJLZXk+IGdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIHN0YXRpYyBib29sIHVwZGF0ZUtleUdl
bmVyYXRvcihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4sIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXkqLCBib29sIGNoZWNrQ3VycmVudCk7Ci0KLXByaXZhdGU6Ci0gICAg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiwg
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYpOwotCi0gICAgdm9pZCBsb2FkSW5kZXhlcygp
OwotCi0gICAgY2xhc3MgQ3JlYXRlSW5kZXhPcGVyYXRpb247Ci0gICAgY2xhc3MgRGVsZXRlSW5k
ZXhPcGVyYXRpb247Ci0KLSAgICAvLyBXaGVuIGEgInZlcnNpb25jaGFuZ2UiIHRyYW5zYWN0aW9u
IGFib3J0cywgdGhlc2UgcmVzdG9yZSB0aGUgYmFjay1lbmQgb2JqZWN0IGhpZXJhcmNoeS4KLSAg
ICBjbGFzcyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOwotICAgIGNsYXNzIERlbGV0ZUluZGV4
QWJvcnRPcGVyYXRpb247Ci0KLSAgICBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBtX2Rh
dGFiYXNlOworICAgIGJvb2wgbWFrZUluZGV4V3JpdGVycyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+LCBJREJCYWNraW5nU3RvcmUqLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtl
eSwgYm9vbCBrZXlXYXNHZW5lcmF0ZWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMs
IGNvbnN0IFZlY3RvcjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4m
LCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJy
b3JNZXNzYWdlLCBib29sJiBjb21wbGV0ZWQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIAotICAgIElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEgbV9tZXRhZGF0YTsKLSAgICBJbmRleE1hcCBtX2luZGV4ZXM7
CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IGdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIGJvb2wgdXBkYXRlS2V5R2Vu
ZXJhdG9yKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiwgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSosIGJvb2wgY2hlY2tDdXJyZW50KTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmNwcAppbmRleCBhZmE0NWUyNGIwNDFlZjgyNWM2NTdhNjExOTUxNDBkMTQ1
NzQxMmYxLi4yNmVmZDBmYjNiMTE5NmZkMTc4MmUxZWQ3MmU0MzVmNGM3ODgwOTlhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3Bw
CkBAIC0xMjIsMTEgKzEyMiw2IEBAIElEQlRyYW5zYWN0aW9uOjp+SURCVHJhbnNhY3Rpb24oKQog
ICAgIEFTU0VSVChtX3N0YXRlID09IEZpbmlzaGVkKTsKIH0KIAotSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiBJREJUcmFuc2FjdGlvbjo6YmFja2VuZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fYmFja2VuZC5nZXQoKTsKLX0KLQogY29uc3QgU3RyaW5nJiBJREJUcmFuc2FjdGlvbjo6
bW9kZSgpIGNvbnN0CiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC0xNzYsMTIgKzE3
MSw5IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0aW9uOjpvYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwCiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IAotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3Jl
QmFja2VuZCA9IG1fYmFja2VuZC0+b2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCwgZWMpOwotICAg
IEFTU0VSVCghZWMgJiYgb2JqZWN0U3RvcmVCYWNrZW5kKTsKLQogICAgIGNvbnN0IElEQkRhdGFi
YXNlTWV0YWRhdGEmIG1ldGFkYXRhID0gbV9kYXRhYmFzZS0+bWV0YWRhdGEoKTsKIAotICAgIFJl
ZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRl
KG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCksIG9iamVjdFN0b3JlQmFj
a2VuZCwgdGhpcyk7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElE
Qk9iamVjdFN0b3JlOjpjcmVhdGUobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9y
ZUlkKSwgdGhpcyk7CiAgICAgb2JqZWN0U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3JlKTsK
ICAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKaW5kZXggZGY0MWJiYjBlZjUz
MzgxYzBjZTI3MWI3ZGQ0NTZmZGJmOWVlMDQwOS4uZGYzYmIwY2NjYTU5NjRkNDY4ODc5NGYxZmI2
MmI4NmUwMjA3MDY2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5oCkBAIC03MSw3ICs3MSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
TW9kZSBzdHJpbmdUb01vZGUoY29uc3QgU3RyaW5nJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBtb2RlVG9T
dHJpbmcoTW9kZSwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiBiYWNrZW5kKCkgY29uc3Q7CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlKiBiYWNrZW5kREIoKSBjb25zdDsKIAogICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVy
biBtX2lkOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCmluZGV4IDc4MmY0NjU4MjhjODI3
ZjJmZTZjOGI2ZTM2N2UxNzVlN2FiZjA5NDIuLjFiMGNhNGJiY2MwZWE1NWUzYzc0NjIyZTk2YTUz
MTc2MzA0NGFiZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCkBAIC0zMiw3ICszMiw2
IEBACiAjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNp
bmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCVHJhY2lu
Zy5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKIApAQCAtNzAsMTgg
KzY5LDYgQEAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6fklEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwoKQogICAgIEFTU0VSVChtX3N0YXRlID09IEZpbmlzaGVkKTsKIH0KIAotUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6Om9iamVjdFN0b3JlKGludDY0X3QgaWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlm
IChtX3N0YXRlID09IEZpbmlzaGVkKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBtX2RhdGFiYXNl
LT5vYmplY3RTdG9yZShpZCk7Ci0gICAgQVNTRVJUKG9iamVjdFN0b3JlKTsKLSAgICByZXR1cm4g
b2JqZWN0U3RvcmUucmVsZWFzZSgpOwotfQotCiBib29sIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OnNjaGVkdWxlVGFzayhUYXNrVHlwZSB0eXBlLCBQYXNzT3duUHRyPE9wZXJhdGlvbj4gdGFz
aywgUGFzc093blB0cjxPcGVyYXRpb24+IGFib3J0VGFzaykKIHsKICAgICBpZiAobV9zdGF0ZSA9
PSBGaW5pc2hlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAppbmRleCBjNzlkZWZmNDg4NDgwNGY3
ZjM3YWYwMzIzNTQwNzg5MjczOTFhM2IxLi4yMTIyMGFjNjA2ZmJiYWQ0YTU3ZWEyOGViZWRkZWRh
MDYyMTg4NDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCkBAIC01Miw3ICs1Miw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKCk7CiAKICAgICAv
LyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShpbnQ2NF90LCBFeGNl
cHRpb25Db2RlJik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoaW50NjRfdCwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKICAgICB2b2lkIGNv
bW1pdCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDYWxsYmFja3MoSURCVHJhbnNhY3Rpb25DYWxs
YmFja3MqIGNhbGxiYWNrcykgeyBtX2NhbGxiYWNrcyA9IGNhbGxiYWNrczsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IDIyY2Q3NGU4OGZiNGNjNTUxNWY0NTA2M2RmYjNmZmEyMmE3ZTMxODEuLjYxMGJl
NThiOThkYzYzMmNiZWMxZjM0ZGQxY2Q0YWE0ZmRiMzc2MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTczNiw4ICs3MzYsNiBAQAogICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4LmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaCcs
Ci0gICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAn
LAotICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaCcs
CiAgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
LmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAnLAogICAgICAg
ICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5oJywKQEAgLTU0NjUsNyArNTQ2Myw3IEBA
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VhcmNoU21hbGxHcmF5
LnBuZycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VhcmNoU21h
bGxXaGl0ZS5wbmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3Nl
YXJjaE5leHQucG5nJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9z
ZWFyY2hQcmV2LnBuZycsICAgICAgICAgICAgCisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250
LWVuZC9JbWFnZXMvc2VhcmNoUHJldi5wbmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvSW1hZ2VzL3NlZ21lbnQucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQt
ZW5kL0ltYWdlcy9zZWdtZW50RW5kLnBuZycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250
LWVuZC9JbWFnZXMvc2VnbWVudEhvdmVyLnBuZycsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDliODMxNzkwNTI3ODJkNDg0ZGE4NzdlMWUyOWY0
ZjVhMWI1N2ZlM2IuLjIwZjZlMTc3OWEzYTdiYmIwNDFkYmY4ZTljNWE4YTY4ZTE4ZTYxYWIgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0yNDk4
NSwxNCArMjQ5ODUsNiBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJCVJl
bGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAi
Ci0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxN
b2R1bGVzXGluZGV4ZWRkYlxJREJJbmRleEJhY2tlbmRJbXBsLmgiCi0JCQkJCT4KLQkJCQk8L0Zp
bGU+Ci0JCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlNmJk
NGQ4ZTA3NGU3YTY3Y2FhMTRlNzA3Y2M0NzJlOGVmYjhhOTRlLi5mYTAzMGNmYmU5YTdkYjBjODM1
M2Y4ZmY4YTM5NGZkZDRlYmU3ZjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNDk1LDggKzM0OTUsNiBAQAogCQk5NzEyQTVE
NDE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTdCMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oICovOyB9OwogCQk5NzEyQTVE
NTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1N0MxNTAwNEVEQTAwNDhBRjEwIC8qIElEQklu
ZGV4LmNwcCAqLzsgfTsKIAkJOTcxMkE1RDYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3RDE1
MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguaCAqLzsgfTsKLQkJOTcxMkE1RDgxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1N0YxNTAwNEVEQTAwNDhBRjEwIC8qIElEQklu
ZGV4QmFja2VuZEltcGwuY3BwICovOyB9OwotCQk5NzEyQTVEOTE1MDA0RURBMDA0OEFGMTAgLyog
SURCSW5kZXhCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTcxMkE1ODAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZElt
cGwuaCAqLzsgfTsKIAkJOTcxMkE1REExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTcxMkE1ODExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEludGVyZmFjZS5o
ICovOyB9OwogCQk5NzEyQTVEQjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTgyMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJLZXkuY3BwICovOyB9OwogCQk5NzEyQTVEQzE1MDA0RURBMDA0OEFGMTAg
LyogSURCS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzEyQTU4MzE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5LmggKi87IH07CkBAIC0xMDgxOSw4
ICsxMDgxNyw2IEBACiAJCTk3MTJBNTdDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJJbmRleC5jcHA7IHBhdGgg
PSBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTk3MTJBNTdEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJJbmRleC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVk
ZGIvSURCSW5kZXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1N0UxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJJ
bmRleC5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3MTJBNTdGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRl
eEJhY2tlbmRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElE
QkluZGV4QmFja2VuZEltcGwuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhC
YWNrZW5kSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3MTJBNTgwMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IElEQkluZGV4QmFja2VuZEltcGwuaDsgcGF0aCA9IE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTcxMkE1ODExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEludGVyZmFjZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2UuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU4MjE1MDA0RURBMDA0OEFGMTAg
LyogSURCS2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQktl
eS5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5NzEyQTU4MzE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQktleS5oOyBwYXRoID0gTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODE1MSw4
ICsxODE0Nyw2IEBACiAJCQkJOTcxMkE1N0MxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmNw
cCAqLywKIAkJCQk5NzEyQTU3RDE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguaCAqLywKIAkJ
CQk5NzEyQTU3RTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguaWRsICovLAotCQkJCTk3MTJB
NTdGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmNwcCAqLywKLQkJCQk5
NzEyQTU4MDE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5oICovLAogCQkJ
CTk3MTJBNTgxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCAq
LywKIAkJCQk5NzEyQTU4MjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5LmNwcCAqLywKIAkJCQk5
NzEyQTU4MzE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5LmggKi8sCkBAIC0yNDE3Miw3ICsyNDE2
Niw2IEBACiAJCQkJOTcxMkE1RDIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5k
SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1RDQxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVENjE1
MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguaCBpbiBIZWFkZXJzICovLAotCQkJCTk3MTJBNUQ5
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NzEyQTVEQTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVEQzE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVERjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5
UGF0aC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzQyNiw3ICsyNzQxOSw2IEBACiAJCQkJOTcxMkE1
RDExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5NzEyQTVEMzE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJ
bnRlcmZhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTcxMkE1RDUxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkluZGV4LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTk3MTJBNUQ4MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJB
NURCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTcx
MkE1REUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTcxMkE1RTIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmNwcCBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRhYmFz
ZUJhY2tlbmRUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJh
c2VCYWNrZW5kVGVzdC5jcHAKaW5kZXggNmVmODVjM2Q5MzQ2ODQxNDQ4OTQyNmNlZjZlNWQ5NDNi
MDVhYTcxMi4uN2NkNjQ0YTQxMjBjYjhmNzdkYzk2ZjVjMmUwZmIzOTczN2I0ODI4OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRhYmFzZUJhY2tlbmRUZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkRhdGFiYXNlQmFja2Vu
ZFRlc3QuY3BwCkBAIC0zMCw4ICszMCw3IEBACiAjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFj
a3NQcm94eS5oIgogI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUg
IklEQkZha2VCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbXBsLmgi
Ci0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJXZWJJREJEYXRhYmFzZUNhbGxiYWNr
c0ltcGwuaCIKICNpbmNsdWRlICJXZWJJREJEYXRhYmFzZUltcGwuaCIKIApAQCAtNTYsMjEgKzU1
LDggQEAgVEVTVChJREJEYXRhYmFzZUJhY2tlbmRUZXN0LCBCYWNraW5nU3RvcmVSZXRlbnRpb24p
CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRiID0gSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Y3JlYXRlKCJkYiIsIGJhY2tpbmdTdG9yZS5nZXQoKSwgZmFjdG9yeSwgInVuaXF1
ZWlkIik7CiAgICAgRVhQRUNUX0dUKGJhY2tpbmdTdG9yZS0+cmVmQ291bnQoKSwgMSk7CiAKLSAg
ICBjb25zdCBib29sIGF1dG9JbmNyZW1lbnQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gc3RvcmUgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVh
dGUoZGIuZ2V0KCksIElEQk9iamVjdFN0b3JlTWV0YWRhdGEoInN0b3JlIiwgMSwgSURCS2V5UGF0
aCgia2V5UGF0aCIpLCBhdXRvSW5jcmVtZW50LCAwKSk7Ci0gICAgRVhQRUNUX0dUKGJhY2tpbmdT
dG9yZS0+cmVmQ291bnQoKSwgMSk7Ci0KLSAgICBjb25zdCBib29sIHVuaXF1ZSA9IGZhbHNlOwot
ICAgIGNvbnN0IGJvb2wgbXVsdGlFbnRyeSA9IGZhbHNlOwotICAgIFJlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBpbmRleCA9IElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShkYi5nZXQoKSwg
SURCSW5kZXhNZXRhZGF0YSgiaW5kZXgiLCAtMSwgSURCS2V5UGF0aCgia2V5UGF0aCIpLCB1bmlx
dWUsIG11bHRpRW50cnkpKTsKLSAgICBFWFBFQ1RfR1QoYmFja2luZ1N0b3JlLT5yZWZDb3VudCgp
LCAxKTsKLQogICAgIGRiLmNsZWFyKCk7CiAgICAgRVhQRUNUX1RSVUUoYmFja2luZ1N0b3JlLT5o
YXNPbmVSZWYoKSk7Ci0gICAgc3RvcmUuY2xlYXIoKTsKLSAgICBFWFBFQ1RfVFJVRShiYWNraW5n
U3RvcmUtPmhhc09uZVJlZigpKTsKLSAgICBpbmRleC5jbGVhcigpOwotICAgIEVYUEVDVF9UUlVF
KGJhY2tpbmdTdG9yZS0+aGFzT25lUmVmKCkpOwogfQogCiBjbGFzcyBNb2NrSURCQ2FsbGJhY2tz
IDogcHVibGljIElEQkNhbGxiYWNrcyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCmluZGV4IGY5NjUwNzNjMGFmM2VjMmFmZjczNDM4
MGUyNGQ3ODVmNjYxMTk4NmMuLjNlZDcyNGJiNGViMGEyYmJmODhiNjQ2MWE1MmZmNDI3YjY4ZWJi
MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tp
bmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tp
bmdTdG9yZS5oCkBAIC0zOSw3ICszOSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgdXBk
YXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKFRyYW5zYWN0aW9uKiwgaW50NjRfdCByb3dJZCwgaW50
NjRfdCB2ZXJzaW9uKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpIE9WRVJSSURFIHsgcmV0dXJuIGZh
bHNlOyB9CiAKLSAgICB2aXJ0dWFsIFZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBnZXRP
YmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkKSBPVkVSUklERSB7IHJldHVybiBWZWN0b3I8
SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4oKTsgfQogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmpl
Y3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9J
bmNyZW1lbnQpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9OwogCiAgICAgdmlydHVhbCB2b2lk
IGNsZWFyT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9CkBAIC00OCw3ICs0Nyw2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKFRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKFRyYW5zYWN0aW9u
KiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eSYsIFJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllciwgYm9vbCYgZm91bmQp
IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgVmVjdG9yPElEQkluZGV4
TWV0YWRhdGE+IGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpIE9WRVJSSURFIHsgcmV0dXJuIFZlY3RvcjxJREJJbmRleE1ldGFkYXRhPigpOyB9CiAg
ICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50
cnkpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9OwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJ
bmRleChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgdm9pZCBwdXRJ
bmRleERhdGFGb3JSZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBS
ZWNvcmRJZGVudGlmaWVyJikgT1ZFUlJJREUgeyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182037</attachid>
            <date>2013-01-09 18:09:12 -0800</date>
            <delta_ts>2013-01-09 18:12:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106377-20130109180615.patch</filename>
            <type>text/plain</type>
            <size>87935</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzA5NWQ3YjZjMjkxNmU5
MTE4MmZlZDhiODgzYTNmNGFmMjM2ZTc3ZS4uYzJiZWZmZTg3ZDcyNDYxYTZhMzRkMDNmZGM2Yjc0
ZTk1N2ZkNzJmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOCBAQAorMjAxMy0wMS0wOCAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBB
bGxvdyBjcmVhdGVJbmRleC9jcmVhdGVPYmplY3RTdG9yZSB0byBiZSBhc3luY2hyb25vdXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjM3NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1pZ3JhdGUgaW1w
bGVtZW50YXRpb25zIG9mIGNyZWF0ZUluZGV4L2RlbGV0ZUluZGV4LAorICAgICAgICBjcmVhdGVP
YmplY3RTdG9yZS9kZWxldGVPYmplY3RTdG9yZSBvdmVyIHRvIElEQkRhdGFiYXNlQmFja2VuZElt
cGwsCisgICAgICAgIHNvIHRoYXQgdGhleSBjYW4gYmUgYXN5bmNocm9ub3VzIGluIG11bHRpLXBy
b2Nlc3MgcG9ydHMuCisKKyAgICAgICAgSGFzIHRoZSBzaWRlIGVmZmVjdCBvZiByZW1vdmluZyB0
aGUgbGFzdCBjb25zdW1lcnMgb2YKKyAgICAgICAgSURCSW5kZXhCYWNrZW5kSW1wbCBhbmQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC4gVGhlIGZvcm1lcgorICAgICAgICBpcyByZW1vdmVkIGNv
bXBsZXRlIGFuZCB0aGUgbGF0dGVyIGJlY29tZXMgYSB0ZW1wb3JhcnkgbmFtZXNwYWNlCisgICAg
ICAgIHBlbmRpbmcgYSBmdXJ0aGVyIG1vcmUgbWVjaGFuaWNhbCBjb2RlIHNodWZmbGUuCisKKyAg
ICAgICAgQSBrZXkgcmVmYWN0b3JpbmcgZWZmZWN0IGlzIHRoYXQgdGhlIElEQkRhdGFiYXNlQmFj
a2VuZEltcGwKKyAgICAgICAgbm93IGNvbnRhaW5zIHRoZSBhdXRob3JpdGF0aXZlIElEQkRhdGFi
YXNlTWV0YWRhdGEgaGllcmFyY2h5LAorICAgICAgICBhbmQgdXBkYXRlcyB0byBpdCBhcmUgY29u
c29saWRhdGVkIGluIG9uZSBwbGFjZSByYXRoZXIgdGhhbgorICAgICAgICBzY2F0dGVyZWQgYWNy
b3NzIGEgcGFyYWxsZWwgb2JqZWN0IHRyZWUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRo
aXMgaXMganVzdCByZWZhY3RvcmluZy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkJhY2tpbmdTdG9yZS5jcHA6IFNpbXBsaWZ5IG9iamVjdHN0b3JlL2luZGV4IGxvYWRpbmcgYW5k
IHByb3BhZ2F0ZSBlcnJvcnMuCisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6Omdl
dE9iamVjdFN0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldElu
ZGV4ZXMpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgor
ICAgICAgICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6IERlcGVuZGVuY3kgY2xlYW51cC4KKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oOiBEZXBlbmRlbmN5IGNsZWFu
dXAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZS5jcHA6IEZyb250ZW5kIElEQk9iamVjdFN0b3JlcyBubyBsb25nZXIgaG9sZCBvbnRv
IGJhY2tlbmQgb2JqZWN0cy4KKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVhdGVP
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0
U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZElt
cGwuY3BwOiBBZGQgYWxsIGNyZWF0ZS9kZWxldGUgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNv
cmU6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KToKKyAgICAgICAgKENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KToKKyAgICAgICAgKERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpDcmVhdGVPYmplY3RTdG9y
ZUFib3J0T3BlcmF0aW9uKToKKyAgICAgICAgKENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRp
b246OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoRGVsZXRlT2Jq
ZWN0U3RvcmVBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChDcmVhdGVJbmRleE9wZXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNyZWF0ZUluZGV4T3BlcmF0aW9uOjpDcmVhdGVJbmRleE9wZXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERlbGV0ZUluZGV4T3BlcmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246OkRlbGV0ZUluZGV4T3BlcmF0aW9uKToKKyAg
ICAgICAgKENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q3Jl
YXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0
ZUluZGV4QWJvcnRPcGVyYXRpb246OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24pOgorICAgICAg
ICAoRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVJ
bmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5k
ZXhBYm9ydE9wZXJhdGlvbjo6RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHZXRPcGVyYXRpb246OkdldE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3JlYXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9u
OjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
OjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRl
bGV0ZURhdGFiYXNlRmluYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6bG9hZE9iamVjdFN0b3Jlcyk6IExvYWQgZGlyZWN0bHkgaW50byBtZXRhZGF0YSBmcm9t
IGJhY2tpbmcgc3RvcmUuCisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3Jl
QWJvcnRPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKElEQkRhdGFiYXNlQmFja2VuZEltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUp
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6SURCT2JqZWN0U3RvcmUpOiBG
cm9udGVuZCBJREJJbmRleCBvYmplY3RzIG5vIGxvbmdlciBob2xkIG9udG8gYmFja2VuZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCk6IAorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmU6OmNyZWF0ZSk6CisgICAgICAgIChJREJPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTMtMDEtMDggIEFuZHJlYXMgS2xpbmcg
IDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEhlYXAtdXNlLWFmdGVyLWZyZWUgaW4gYm9v
bCBXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDAwYzgwMzVmNWZkZDUwMDA4OGQ2MTdhMjU0NTE3OTBkOTg1NDY3
YjUuLjlmOTA0N2Y4ZjExMTNhYjRhZTUxMTMxMjdhOTBiNTRmZGY0NDFlZmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDEtMDggIEFsZWMgRmxldHQg
IDxhbGVjZmxldHRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogQWxsb3cgY3Jl
YXRlSW5kZXgvY3JlYXRlT2JqZWN0U3RvcmUgdG8gYmUgYXN5bmNocm9ub3VzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYzNzcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdGhpcyB0ZXN0IGFz
IGl0IG1ha2VzIG5vIHNlbnNlIG9uY2UgdGhlIG9iamVjdHN0b3JlL2luZGV4CisgICAgICAgIGhp
ZXJhcmNoeSBpcyBnb25lLgorCisgICAgICAgICogdGVzdHMvSURCRGF0YWJhc2VCYWNrZW5kVGVz
dC5jcHA6CisKIDIwMTMtMDEtMDggIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlbW92ZWQgdGhlIG5lZWQgZm9yIHRoZSBQcm9wb3NlZERhdGFiYXNlIG1lY2hhbmlz
bS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tp
bmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5n
U3RvcmUuY3BwCmluZGV4IDIwMmYwNTBmNjJkNDAzMmRjZjc4MzkzNWYxYmQzOWJhODc4NzMxZTMu
LmRhNDg0OTk3MTgzMTE2N2JmYWNmZTkyZDdhNTAxNjlkZDExNjQyMjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcApAQCAt
NjA1LDEzICs2MDUsMTUgQEAgc3RhdGljIGJvb2wgY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRh
VHlwZShjb25zdCBMZXZlbERCSXRlcmF0b3IqIGl0LCBjb25zdCBWZWMKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6
Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCkKKy8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBkbyBzb21lIGVycm9yIGhhbmRsaW5nIHJhdGhlciB0aGFuIHBsb3dpbmcgYWhlYWQgd2hlbiBi
YWQgZGF0YSBpcyBlbmNvdW50ZXJlZC4KK3ZvaWQgSURCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RT
dG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9y
ZU1hcCogb2JqZWN0U3RvcmVzKQogewogICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpn
ZXRPYmplY3RTdG9yZXMiKTsKLSAgICBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gb2Jq
ZWN0U3RvcmVzOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IE9iamVjdFN0b3Jl
TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCAxLCAwKTsKICAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gc3RvcEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRh
YmFzZUlkKTsKIAorICAgIEFTU0VSVChvYmplY3RTdG9yZXMtPmlzRW1wdHkoKSk7CisKICAgICBP
d25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAg
aXQtPnNlZWsoc3RhcnRLZXkpOwogICAgIHdoaWxlIChpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVL
ZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwKSB7CkBAIC02OTEsOSArNjkzLDEwIEBAIFZlY3Rv
cjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3Jl
cyhpbnQ2NF90IGRhdGFiYXNlCiAgICAgICAgICAgICBpdC0+bmV4dCgpOwogICAgICAgICB9CiAK
LSAgICAgICAgb2JqZWN0U3RvcmVzLmFwcGVuZChJREJPYmplY3RTdG9yZU1ldGFkYXRhKG9iamVj
dFN0b3JlTmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgbWF4SW5k
ZXhJZCkpOworICAgICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKG9iamVjdFN0
b3JlTmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgbWF4SW5kZXhJ
ZCk7CisgICAgICAgIGdldEluZGV4ZXMoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgJm1ldGFk
YXRhLmluZGV4ZXMpOworICAgICAgICBvYmplY3RTdG9yZXMtPnNldChvYmplY3RTdG9yZUlkLCBt
ZXRhZGF0YSk7CiAgICAgfQotICAgIHJldHVybiBvYmplY3RTdG9yZXM7CiB9CiAKIFdBUk5fVU5V
U0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBzZXRNYXhPYmplY3RTdG9yZUlkKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKQpAQCAtOTc5LDE0ICs5ODIsMTQgQEAgc3RhdGljIGJvb2wgY2hlY2tJbmRleEFuZE1ldGFE
YXRhS2V5KGNvbnN0IExldmVsREJJdGVyYXRvciogaXQsIGNvbnN0IFZlY3RvcjxjaGEKIH0KIAog
Ci1WZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gSURCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQorLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGRvIHNvbWUgZXJyb3IgaGFuZGxpbmcgcmF0aGVyIHRoYW4gcGxvd2luZyBhaGVhZCB3
aGVuIGJhZCBkYXRhIGlzIGVuY291bnRlcmVkLgordm9pZCBJREJCYWNraW5nU3RvcmU6OmdldElu
ZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIElEQk9iamVj
dFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwKiBpbmRleGVzKQogewogICAgIElEQl9UUkFDRSgiSURC
QmFja2luZ1N0b3JlOjpnZXRJbmRleGVzIik7Ci0gICAgVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+
IGluZGV4ZXM7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gSW5kZXhNZXRhRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDAsIDApOwogICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQgKyAxLCAwLCAwKTsKIAotICAgIEFTU0VSVChpbmRleGVzLmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUKGluZGV4ZXMtPmlzRW1wdHkoKSk7CiAKICAgICBPd25QdHI8TGV2
ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgaXQtPnNlZWso
c3RhcnRLZXkpOwpAQCAtMTAyOSw5ICsxMDMyLDggQEAgVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+
IElEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QK
ICAgICAgICAgICAgIGl0LT5uZXh0KCk7CiAgICAgICAgIH0KIAotICAgICAgICBpbmRleGVzLmFw
cGVuZChJREJJbmRleE1ldGFkYXRhKGluZGV4TmFtZSwgaW5kZXhJZCwga2V5UGF0aCwgaW5kZXhV
bmlxdWUsIGluZGV4TXVsdGlFbnRyeSkpOworICAgICAgICBpbmRleGVzLT5zZXQoaW5kZXhJZCwg
SURCSW5kZXhNZXRhZGF0YShpbmRleE5hbWUsIGluZGV4SWQsIGtleVBhdGgsIGluZGV4VW5pcXVl
LCBpbmRleE11bHRpRW50cnkpKTsKICAgICB9Ci0gICAgcmV0dXJuIGluZGV4ZXM7CiB9CiAKIFdB
Uk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBzZXRNYXhJbmRleElkKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDJmOTljYTMxNzE5NjFiMDQ0MTgyYWNjYWMz
YjA5MmNjZjYxMWFlMDYuLjY2YjcyZjRkOTk5Y2FmOWM3MzNmNzk4MTkyNTY4ZTZiNTY5YjM3MDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZS5oCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRl
SURCRGF0YWJhc2VJbnRWZXJzaW9uKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pOwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVE
YXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgdmlydHVhbCBWZWN0b3I8SURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YT4gZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCk7Cisg
ICAgdm9pZCBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBJREJEYXRhYmFzZU1l
dGFkYXRhOjpPYmplY3RTdG9yZU1hcCopOwogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RT
dG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0
aCYsIGJvb2wgYXV0b0luY3JlbWVudCk7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZU9iamVjdFN0
b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCkgV0FSTl9VTlVTRURfUkVUVVJOOwogCkBAIC04NSw3ICs4NSw2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJy
ZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdTdGF0ZSwgYm9vbCBjaGVja0N1
cnJlbnQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5P
YmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFJlY29yZElkZW50aWZp
ZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllciwgYm9vbCYgZm91bmQpIFdBUk5fVU5VU0VEX1JFVFVS
TjsKIAotICAgIHZpcnR1YWwgVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+IGdldEluZGV4ZXMoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwogICAgIHZpcnR1YWwgYm9v
bCBjcmVhdGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRp
RW50cnkpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCk7CiAgICAgdmlydHVhbCB2b2lkIHB1dEluZGV4RGF0YUZvclJlY29yZChJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgUmVj
b3JkSWRlbnRpZmllciYpOwpAQCAtMTY5LDYgKzE2OCw3IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0
ZToKICAgICBib29sIGZpbmRLZXlJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1hcnlLZXks
IGJvb2wmIGZvdW5kKTsKKyAgICB2b2lkIGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwKik7
CiAKICAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwogICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2Vu
ZEltcGw+IG1fZmFjdG9yeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAppbmRleCBmZWFiNWM1ZTNhMzY0NWYw
OTk0NDAwOWIwM2M5ZmNkNjA0ZGM2YjFhLi42NGM0YWFiNmYzNmU3MjkzZTVmNmE1YWJmMmZkMzBi
ODBlNDhhZmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCkBAIC0zMCwxMCArMzAsMTAgQEAKIAogI2lu
Y2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgorI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUVy
cm9yLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJREJL
ZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKICNpbmNs
dWRlICJJREJSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSURCVHJhY2luZy5oIgogI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCmluZGV4IDk2NjhkZmQzYTQ2
MzFlMzM4ZjQ3ZTM1NDc2MzcxZjE2MTY2ZmMzYzEuLjcxMmMyYjQzMTU3NzMwNDM3OWNiYzM5MjM1
ZWE2NTdkYTFlMTIyODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaApAQCAtNDEsOSArNDEsNyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOwotY2xhc3MgSURC
SW5kZXhCYWNrZW5kSW1wbDsKIGNsYXNzIElEQktleVJhbmdlOwotY2xhc3MgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDsKIAogY2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGwgOiBwdWJsaWMgSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZSB7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKaW5kZXggZWJkZTBmMTQ2MzJjZDYwYjY0
MTJhYThkNzc3YWQ5NjNiZTRlM2JmMi4uNzQ2NDZkMDA4MTc1ZGJhNGUxNWM5NDdkMTUyNjk5OTky
N2RhZmZkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmNwcApAQCAtMTg0LDE0ICsxODQsMTAgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY28K
ICAgICB9CiAKICAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBtX21ldGFkYXRhLm1heE9iamVj
dFN0b3JlSWQgKyAxOwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+
IG9iamVjdFN0b3JlQmFja2VuZCA9IG1fYmFja2VuZC0+Y3JlYXRlT2JqZWN0U3RvcmUob2JqZWN0
U3RvcmVJZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgbV92ZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmICghb2JqZWN0U3RvcmVCYWNrZW5kKSB7
Ci0gICAgICAgIEFTU0VSVChlYyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBtX2Jh
Y2tlbmQtPmNyZWF0ZU9iamVjdFN0b3JlKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5pZCgp
LCBvYmplY3RTdG9yZUlkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KTsKIAogICAgIElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEobmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0
aCwgYXV0b0luY3JlbWVudCwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpNaW5pbXVt
SW5kZXhJZCk7Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9i
amVjdFN0b3JlOjpjcmVhdGUobWV0YWRhdGEsIG9iamVjdFN0b3JlQmFja2VuZC5yZWxlYXNlKCks
IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YSwgbV92
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIG1fbWV0YWRhdGEub2JqZWN0U3Rv
cmVzLnNldChtZXRhZGF0YS5pZCwgbWV0YWRhdGEpOwogICAgICsrbV9tZXRhZGF0YS5tYXhPYmpl
Y3RTdG9yZUlkOwogCkBAIC0yMTYsMTEgKzIxMiw5IEBAIHZvaWQgSURCRGF0YWJhc2U6OmRlbGV0
ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmQtPmRlbGV0ZU9iamVjdFN0b3JlKG9i
amVjdFN0b3JlSWQsIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsK
LSAgICBpZiAoIWVjKSB7Ci0gICAgICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5vYmpl
Y3RTdG9yZURlbGV0ZWQobmFtZSk7Ci0gICAgICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJl
bW92ZShvYmplY3RTdG9yZUlkKTsKLSAgICB9CisgICAgbV9iYWNrZW5kLT5kZWxldGVPYmplY3RT
dG9yZShtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aWQoKSwgb2JqZWN0U3RvcmVJZCk7Cisg
ICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlRGVsZXRlZChuYW1lKTsK
KyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmVJZCk7CiB9CiAK
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2NvcGUs
IGNvbnN0IFN0cmluZyYgbW9kZVN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuY3BwCmluZGV4IDBkMWRkYjBkZmViYzA1ZGNlNTA3YmUwOWQ0MjFjMjZkMjY4YjRlMGUu
LjkyYzkxOGM5YTA2MTQwYjIwN2MzNzdkYzdkMGVjNTE5ODZmOTY5NmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZElt
cGwuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQkluZGV4QmFja2VuZEltcGwuaCIKICNp
bmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCVHJhY2lu
Zy5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKQEAgLTQwLDQwICsz
OSw0MCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CitjbGFzcyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlv
biA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJh
dGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2Us
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCisgICAg
c3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBj
cmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgY29uc3QgSURC
T2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oZGF0YWJhc2Us
IG9iamVjdFN0b3JlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlT2JqZWN0
U3RvcmVPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7CiAgICAg
fQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsK
IHByaXZhdGU6Ci0gICAgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKLSAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQot
ICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCisgICAgQ3JlYXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgY29u
c3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICAgICAg
OiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9vYmplY3RTdG9yZU1l
dGFkYXRhKG9iamVjdFN0b3JlTWV0YWRhdGEpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOwotICAgIFJlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEgbV9vYmplY3RTdG9yZU1ldGFkYXRhOwogfTsKIAotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK2NsYXNzIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
IDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0
aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICBz
dGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNy
ZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihkYXRhYmFzZSwg
b2JqZWN0U3RvcmUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVPYmplY3RT
dG9yZU9wZXJhdGlvbihiYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlTWV0YWRhdGEpKTsKICAgICB9
CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwog
cHJpdmF0ZToKLSAgICBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlKQotICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCi0g
ICAgICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAgICBEZWxldGVPYmplY3RTdG9y
ZU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBjb25z
dCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgICAgICA6
IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlTWV0
YWRhdGEob2JqZWN0U3RvcmVNZXRhZGF0YSkKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7CiB9OwogCiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6Ok9wZXJhdGlvbiB7CkBAIC0xMDAsNDAgKzk5LDQwIEBAIHByaXZhdGU6CiAgICAgUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tzOwogfTsKIAotY2xh
c3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlv
biA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworY2xhc3Mg
Q3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9u
KGRhdGFiYXNlLCBvYmplY3RTdG9yZSkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENy
ZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlSWQpKTsK
ICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCopOwogcHJpdmF0ZToKLSAgICBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCisgICAgQ3JlYXRlT2JqZWN0U3RvcmVB
Ym9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiAgICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkK
LSAgICAgICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQorICAgICAgICAsIG1fb2JqZWN0
U3RvcmVJZChvYmplY3RTdG9yZUlkKQogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKKyAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJ
ZDsKIH07CiAKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3Jl
QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0
aW9uIHsKK2NsYXNzIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQorICAgIHN0YXRpYyBQYXNzT3du
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGNvbnN0IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEmIG9iamVjdFN0b3JlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKGRhdGFiYXNlLCBvYmplY3RTdG9yZSkp
OwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKik7CiBwcml2YXRlOgotICAgIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICBEZWxldGVPYmplY3RTdG9y
ZUFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJh
c2UsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCiAg
ICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlKG9i
amVjdFN0b3JlKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RTdG9yZU1l
dGFkYXRhKQogICAgIHsKICAgICB9CiAKICAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4gbV9kYXRhYmFzZTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9v
YmplY3RTdG9yZTsKKyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmVNZXRh
ZGF0YTsKIH07CiAKIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VB
Ym9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRp
b24gewpAQCAtMTU2LDYgKzE1NSw4NiBAQCBwcml2YXRlOgogICAgIGludDY0X3QgbV9wcmV2aW91
c0ludFZlcnNpb247CiB9OwogCitjbGFzcyBDcmVhdGVJbmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRl
KFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlSW5kZXhPcGVyYXRpb24oYmFja2luZ1N0
b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7CisgICAgfQorICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKK3ByaXZhdGU6CisgICAg
Q3JlYXRlSW5kZXhPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRl
eE1ldGFkYXRhKQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAg
ICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2luZGV4TWV0
YWRhdGEoaW5kZXhNZXRhZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgaW50NjRfdCBtX29iamVj
dFN0b3JlSWQ7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Cit9
OworCitjbGFzcyBEZWxldGVJbmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVJbmRl
eE9wZXJhdGlvbihiYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKTsKKyAgICB9
CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwor
cHJpdmF0ZToKKyAgICBEZWxldGVJbmRleE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCkKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9v
YmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4SWQp
CisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFj
a2luZ1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0
IGludDY0X3QgbV9pbmRleElkOworfTsKKworY2xhc3MgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlv
biA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJh
dGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2Us
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKGRhdGFiYXNlLCBv
YmplY3RTdG9yZUlkLCBpbmRleElkKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
KElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKK3ByaXZhdGU6CisgICAgQ3JlYXRlSW5kZXhB
Ym9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKKyAgICAgICAgOiBtX2Rh
dGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlk
KQorICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQorICAgIHsKKyAgICB9CisKKyAgICBjb25z
dCBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKyAgICBjb25zdCBp
bnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKK307
CisKK2NsYXNzIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9i
amVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOworcHJpdmF0ZToKKyAgICBEZWxldGVJ
bmRleEFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0
YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5k
ZXhNZXRhZGF0YSkKKyAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1f
b2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShp
bmRleE1ldGFkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3Rv
cmVJZDsKKyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKK307CisK
IGNsYXNzIEdldE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29y
VHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKQEAgLTE3NSw2ICsyNTQs
NyBAQCBwcml2YXRlOgogICAgICAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQogICAgICAg
ICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKICAgICB7CisgICAgICAgIEFTU0VSVChtZXRhZGF0
YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwogICAgICAgICBBU1NFUlQo
bWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKS5pZCA9PSBvYmplY3RTdG9y
ZUlkKTsKICAgICB9CiAKQEAgLTQwNSw2ICs0ODUsNDYgQEAgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdT
dG8KICAgICBBU1NFUlQoIW1fbWV0YWRhdGEubmFtZS5pc051bGwoKSk7CiB9CiAKK3ZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6YWRkT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmUsIGludDY0X3QgbmV3TWF4T2JqZWN0U3RvcmVJZCkKK3sKKyAg
ICBBU1NFUlQoIW1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLmlk
KSk7CisgICAgaWYgKG5ld01heE9iamVjdFN0b3JlSWQgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0
YTo6SW52YWxpZElkKSB7CisgICAgICAgIEFTU0VSVChtX21ldGFkYXRhLm1heE9iamVjdFN0b3Jl
SWQgPCBuZXdNYXhPYmplY3RTdG9yZUlkKTsKKyAgICAgICAgbV9tZXRhZGF0YS5tYXhPYmplY3RT
dG9yZUlkID0gbmV3TWF4T2JqZWN0U3RvcmVJZDsKKyAgICB9CisgICAgbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlLmlkLCBvYmplY3RTdG9yZSk7Cit9CisKK3ZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9y
ZUlkKQoreworICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmpl
Y3RTdG9yZUlkKSk7CisgICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0
b3JlSWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFkZEluZGV4KGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXgsIGludDY0X3Qg
bmV3TWF4SW5kZXhJZCkKK3sKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29u
dGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0
U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisKKyAg
ICBBU1NFUlQoIW9iamVjdFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5kZXguaWQpKTsKKyAgICBv
YmplY3RTdG9yZS5pbmRleGVzLnNldChpbmRleC5pZCwgaW5kZXgpOworICAgIGlmIChuZXdNYXhJ
bmRleElkICE9IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICBBU1NFUlQo
b2JqZWN0U3RvcmUubWF4SW5kZXhJZCA8IG5ld01heEluZGV4SWQpOworICAgICAgICBvYmplY3RT
dG9yZS5tYXhJbmRleElkID0gbmV3TWF4SW5kZXhJZDsKKyAgICB9CisgICAgbV9tZXRhZGF0YS5v
YmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlSWQsIG9iamVjdFN0b3JlKTsKK30KKwordm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCkKK3sKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
Y29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2Jq
ZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisK
KyAgICBBU1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7CisgICAg
b2JqZWN0U3RvcmUuaW5kZXhlcy5yZW1vdmUoaW5kZXhJZCk7CisgICAgbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlSWQsIG9iamVjdFN0b3JlKTsKK30KKwogYm9vbCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwoKQogewogICAgIGJvb2wgc3VjY2VzcyA9
IGZhbHNlOwpAQCAtNDEzLDcgKzUzMyw3IEBAIGJvb2wgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
b3BlbkludGVybmFsKCkKICAgICBpZiAoIW9rKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKHN1Y2Nlc3MpIHsKLSAgICAgICAgbG9hZE9iamVjdFN0b3JlcygpOworICAgICAgICBtX2Jh
Y2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVzKG1fbWV0YWRhdGEuaWQsICZtX21ldGFkYXRhLm9i
amVjdFN0b3Jlcyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gbV9i
YWNraW5nU3RvcmUtPmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEobV9tZXRhZGF0YS5uYW1lLCBt
X21ldGFkYXRhLnZlcnNpb24sIG1fbWV0YWRhdGEuaW50VmVyc2lvbiwgbV9tZXRhZGF0YS5pZCk7
CkBAIC00MzAsNjQgKzU1MCwxMTIgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmJhY2tpbmdTdG9yZSgpIGNvbnN0CiAKIElEQkRhdGFiYXNlTWV0
YWRhdGEgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEoKSBjb25zdAogewotICAgIC8v
IEZJWE1FOiBGaWd1cmUgb3V0IGEgd2F5IHRvIGtlZXAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
Z2V0KE4pLmluZGV4ZXMgdXAgdG8gZGF0ZSByYXRoZXIgdGhhbiByZWdlbmVyYXRpbmcgdGhpcyBl
dmVyeSB0aW1lLgotICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEobV9tZXRhZGF0YSk7
Ci0gICAgZm9yIChPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29iamVjdFN0
b3Jlcy5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkKLSAgICAgICAg
bWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChpdC0+dmFsdWUtPmlkKCksIGl0LT52YWx1ZS0+bWV0
YWRhdGEoKSk7Ci0gICAgcmV0dXJuIG1ldGFkYXRhOworICAgIHJldHVybiBtX21ldGFkYXRhOwog
fQogCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZShp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCiB7
Ci0gICAgQVNTRVJUKCFtX29iamVjdFN0b3Jlcy5jb250YWlucyhpZCkpOwotCi0gICAgUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMsIElEQk9iamVjdFN0b3JlTWV0YWRhdGEobmFtZSwgaWQs
IGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6
TWluaW11bUluZGV4SWQpKTsKLSAgICBBU1NFUlQob2JqZWN0U3RvcmUtPm5hbWUoKSA9PSBuYW1l
KTsKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0
b3JlIik7CisgICAgQVNTRVJUKCFtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmpl
Y3RTdG9yZUlkKSk7CiAKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJh
bnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRy
KTsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVS
U0lPTl9DSEFOR0UpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2Fj
dGlvbklkKSk7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBt
X3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CiAKLSAgICAvLyBGSVhNRTogRml4IGVk
Z2UgY2FzZXMgYXJvdW5kIHRyYW5zYWN0aW9uIGFib3J0cyB0aGF0IHByZXZlbnQgdGhpcyBmcm9t
IGp1c3QgYmVpbmcgQVNTRVJUKGlkID09IG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCArIDEp
Ci0gICAgQVNTRVJUKGlkID4gbV9tZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlkKTsKLSAgICBtX21l
dGFkYXRhLm1heE9iamVjdFN0b3JlSWQgPSBpZDsKKyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRh
IG9iamVjdFN0b3JlTWV0YWRhdGEobmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0aCwgYXV0b0lu
Y3JlbWVudCwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpNaW5pbXVtSW5kZXhJZCk7
CiAKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3JlYXRlT2JqZWN0U3RvcmVP
cGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZSksIENyZWF0ZU9iamVjdFN0b3JlQWJv
cnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZSkpKSB7Ci0gICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQorICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3JlYXRlT2Jq
ZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVNZXRh
ZGF0YSksIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmpl
Y3RTdG9yZUlkKSk7CiAKLSAgICBtX29iamVjdFN0b3Jlcy5zZXQoaWQsIG9iamVjdFN0b3JlKTsK
LSAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOworICAgIGFkZE9iamVjdFN0b3JlKG9i
amVjdFN0b3JlTWV0YWRhdGEsIG9iamVjdFN0b3JlSWQpOwogfQogCi12b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQordm9pZCBDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikK
IHsKICAgICBJREJfVFJBQ0UoIkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7Ci0gICAgaWYg
KCFtX2RhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2UtPmlkKCksIG1fb2JqZWN0
U3RvcmUtPmlkKCksIG1fb2JqZWN0U3RvcmUtPm5hbWUoKSwgbV9vYmplY3RTdG9yZS0+a2V5UGF0
aCgpLCBtX29iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCkpKSB7Ci0gICAgICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJy
b3IgY3JlYXRpbmcgb2JqZWN0IHN0b3JlICclcycuIiwgbV9vYmplY3RTdG9yZS0+bmFtZSgpLnV0
ZjgoKS5kYXRhKCkpKTsKKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9y
ZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgdHJhbnNhY3Rpb24tPmRh
dGFiYXNlKCktPmlkKCksIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCwgbV9vYmplY3RTdG9yZU1l
dGFkYXRhLm5hbWUsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5rZXlQYXRoLCBtX29iamVjdFN0b3Jl
TWV0YWRhdGEuYXV0b0luY3JlbWVudCkpIHsKKyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJy
b3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBjcmVhdGluZyBv
YmplY3Qgc3RvcmUgJyVzJy4iLCBtX29iamVjdFN0b3JlTWV0YWRhdGEubmFtZS51dGY4KCkuZGF0
YSgpKSk7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogfQogCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9iamVjdFN0b3JlKGludDY0X3QgaWQpCit2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewotICAgIHJldHVybiBtX29iamVj
dFN0b3Jlcy5nZXQoaWQpOworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
ZGVsZXRlT2JqZWN0U3RvcmUiKTsKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
Y29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEmIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2Jq
ZWN0U3RvcmVJZCk7CisKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNh
Y3Rpb25JZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0g
bV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIEFTU0VSVCh0cmFuc2FjdGlv
bi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CisKKyAgICB0cmFu
c2FjdGlvbi0+c2NoZWR1bGVUYXNrKERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUo
bV9iYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlTWV0YWRhdGEpLCAgRGVsZXRlT2JqZWN0U3RvcmVB
Ym9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlTWV0YWRhdGEpKTsKKyAgICBy
ZW1vdmVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGlkLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVu
dHJ5KQogewotICAgIEFTU0VSVChtX29iamVjdFN0b3Jlcy5jb250YWlucyhpZCkpOworICAgIElE
Ql9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgiKTsKKyAgICBBU1NF
UlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAg
IGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9i
amVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jlcy5nZXQoaWQpOwotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOworICAgIEFTU0VSVCghb2Jq
ZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7CisgICAgY29uc3QgSURCSW5kZXhN
ZXRhZGF0YSBpbmRleE1ldGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVs
dGlFbnRyeSk7CisKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rp
b25JZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+
bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CiAKLSAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0
ZSh0aGlzLCBvYmplY3RTdG9yZSksIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNy
ZWF0ZSh0aGlzLCBvYmplY3RTdG9yZSkpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1
bGVUYXNrKENyZWF0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIG9iamVj
dFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpLCBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVh
dGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCkpOworCisgICAgYWRkSW5kZXgob2JqZWN0
U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSwgaW5kZXhJZCk7Cit9CisKKwordm9pZCBDcmVhdGVJbmRl
eE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlv
bikKK3sKKyAgICBJREJfVFJBQ0UoIkNyZWF0ZUluZGV4T3BlcmF0aW9uIik7CisgICAgaWYgKCFt
X2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5pZCgpLCBtX29iamVjdFN0b3JlSWQs
IG1faW5kZXhNZXRhZGF0YS5pZCwgbV9pbmRleE1ldGFkYXRhLm5hbWUsIG1faW5kZXhNZXRhZGF0
YS5rZXlQYXRoLCBtX2luZGV4TWV0YWRhdGEudW5pcXVlLCBtX2luZGV4TWV0YWRhdGEubXVsdGlF
bnRyeSkpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgi
SW50ZXJuYWwgZXJyb3Igd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGluZGV4ICclcycuIiwgbV9pbmRl
eE1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBtX29iamVjdFN0b3Jlcy5yZW1vdmUoaWQpOworfQorCit2b2lkIENyZWF0ZUluZGV4QWJv
cnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rp
b24pCit7CisgICAgSURCX1RSQUNFKCJDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uIik7CisgICAg
QVNTRVJUKCF0cmFuc2FjdGlvbik7CisgICAgbV9kYXRhYmFzZS0+cmVtb3ZlSW5kZXgobV9vYmpl
Y3RTdG9yZUlkLCBtX2luZGV4SWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQpCit7CisgICAgSURCX1RSQUNFKCJJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpkZWxldGVJbmRleCIpOworICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5j
b250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlk
KTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsK
KyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhID0gb2JqZWN0U3RvcmUu
aW5kZXhlcy5nZXQoaW5kZXhJZCk7CisKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFp
bnModHJhbnNhY3Rpb25JZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5z
YWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIEFTU0VSVCh0
cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CisK
KyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKERlbGV0ZUluZGV4T3BlcmF0aW9uOjpjcmVh
dGUobV9iYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpLCBEZWxldGVJbmRleEFi
b3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkp
OworCisgICAgcmVtb3ZlSW5kZXgob2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7Cit9CisKK3ZvaWQg
RGVsZXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCog
dHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJEZWxldGVJbmRleE9wZXJhdGlvbiIpOwor
ICAgIG1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPmlkKCksIG1fb2JqZWN0U3Rv
cmVJZCwgbV9pbmRleElkKTsKK30KKwordm9pZCBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQoreworICAgIElE
Ql9UUkFDRSgiRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbiIpOworICAgIEFTU0VSVCghdHJhbnNh
Y3Rpb24pOworICAgIG1fZGF0YWJhc2UtPmFkZEluZGV4KG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRl
eE1ldGFkYXRhLCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpOwogfQogCiB2b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCkBAIC01MDgs
NyArNjc2LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpnZXQoaW50NjRfdCB0cmFu
c2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGkKICAgICBBU1NFUlQobV90cmFuc2Fj
dGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpOwogICAgIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwog
Ci0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhHZXRPcGVyYXRpb246OmNyZWF0ZShtX2Jh
Y2tpbmdTdG9yZSwgbWV0YWRhdGEoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2Us
IGtleU9ubHkgPyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5IDogSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZTo6S2V5QW5kVmFsdWUsIGNhbGxiYWNrcykpOworICAgIHRyYW5zYWN0
aW9uLT5zY2hlZHVsZVRhc2soR2V0T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIG1f
bWV0YWRhdGEsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBrZXlPbmx5ID8gSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5T25seSA6IElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6OktleUFuZFZhbHVlLCBjYWxsYmFja3MpKTsKIH0KIAogdm9pZCBHZXRPcGVyYXRpb246OnBl
cmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCkBAIC02MDcsNyAr
Nzc1LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwdXQoaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFYKICAgICBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsK
ICAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9P
TkxZKTsKIAotICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRh
ZGF0YSA9IG1ldGFkYXRhKCkub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKyAgICBj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBtX21ldGFk
YXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CiAKICAgICBBU1NFUlQob2JqZWN0
U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50IHx8IGtleS5nZXQoKSk7CiAKQEAgLTcxNSw4ICs4
ODMsOCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0UwogICAgIFZlY3RvcjxPd25QdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOwogICAgIFN0
cmluZyBlcnJvck1lc3NhZ2U7CiAgICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRzID0gZmFsc2U7Ci0g
ICAgQVNTRVJUKG1ldGFkYXRhKCkub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQp
KTsKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRh
ID0gbWV0YWRhdGEoKS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworICAgIEFTU0VS
VChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAg
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKICAgICBib29sIGJhY2tpbmdT
dG9yZVN1Y2Nlc3MgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjptYWtlSW5kZXhXcml0ZXJz
KHRyYW5zYWN0aW9uLCBzdG9yZS5nZXQoKSwgaWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgcHJp
bWFyeUtleSwgZmFsc2UsIGluZGV4SWRzLCBpbmRleEtleXMsICZpbmRleFdyaXRlcnMsICZlcnJv
ck1lc3NhZ2UsIG9iZXlzQ29uc3RyYWludHMpOwogICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2Vz
cykgewogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFj
a2luZyBzdG9yZSBlcnJvciB1cGRhdGluZyBpbmRleCBrZXlzLiIpKTsKQEAgLTgwMyw3ICs5NzEs
NyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvdW50KGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLAogICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6Y291bnQiKTsKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnMo
dHJhbnNhY3Rpb25JZCkpOwogICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0
aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIEFTU0VSVChtZXRh
ZGF0YSgpLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgQVNTRVJU
KG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKICAgICB0
cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENvdW50T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5n
U3RvcmUsIGlkKCksIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3Mp
KTsKIH0KIApAQCAtODQzLDcgKzEwMTEsNiBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdAogdm9p
ZCBEZWxldGVSYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIkRlbGV0ZVJhbmdlT3BlcmF0aW9uIik7
Ci0KICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNv
ciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBt
X2tleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwogICAgIGlmIChiYWNraW5nU3RvcmVD
dXJzb3IpIHsKICAgICAgICAgZG8gewpAQCAtODcyLDEyICsxMDM5LDEyIEBAIHZvaWQgQ2xlYXJP
cGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24p
CiAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQordm9pZCBEZWxldGVPYmplY3RTdG9yZU9wZXJh
dGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsK
ICAgICBJREJfVFJBQ0UoIkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7Ci0gICAgYm9vbCBv
ayA9IG1fZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZSh0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZS0+aWQoKSwgbV9vYmpl
Y3RTdG9yZS0+aWQoKSk7CisgICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmpl
Y3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCktPmlkKCksIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCk7CiAgICAgaWYg
KCFvaykgewotICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3Ry
aW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIGRlbGV0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIs
IG1fb2JqZWN0U3RvcmUtPm5hbWUoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJy
b3IgZGVsZXRpbmcgb2JqZWN0IHN0b3JlICclcycuIiwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5h
bWUudXRmOCgpLmRhdGEoKSkpOwogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IpOwog
ICAgIH0KIH0KQEAgLTExMzIsNyArMTI5OSw3IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6ZGVsZXRlRGF0YWJhc2VGaW5hbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhCiAg
ICAgbV9tZXRhZGF0YS52ZXJzaW9uID0gTm9TdHJpbmdWZXJzaW9uOwogICAgIG1fbWV0YWRhdGEu
aWQgPSBJbnZhbGlkSWQ7CiAgICAgbV9tZXRhZGF0YS5pbnRWZXJzaW9uID0gSURCRGF0YWJhc2VN
ZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOwotICAgIG1fb2JqZWN0U3RvcmVzLmNsZWFyKCk7CisgICAg
bV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY2xlYXIoKTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2Vz
cygpOwogfQogCkBAIC0xMTc3LDM1ICsxMzQ0LDIzIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tz
CiAgICAgbV9jbG9zaW5nQ29ubmVjdGlvbiA9IGZhbHNlOwogfQogCi12b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmxvYWRPYmplY3RTdG9yZXMoKQotewotICAgIFZlY3RvcjxpbnQ2NF90PiBp
ZHM7Ci0gICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7Ci0gICAgVmVjdG9yPElEQktleVBhdGg+IGtl
eVBhdGhzOwotICAgIFZlY3Rvcjxib29sPiBhdXRvSW5jcmVtZW50RmxhZ3M7Ci0gICAgVmVjdG9y
PGludDY0X3Q+IG1heEluZGV4SWRzOwotICAgIFZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRh
PiBvYmplY3RTdG9yZXMgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVzKG1fbWV0YWRh
dGEuaWQpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTdG9yZXMuc2l6ZSgp
OyBpKyspCi0gICAgICAgIG1fb2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZXNbaV0uaWQsIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZXNbaV0pKTsK
LX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0
T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9u
KQordm9pZCBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogeworICAgIElEQl9UUkFDRSgiQ3JlYXRl
T2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiIpOwogICAgIEFTU0VSVCghdHJhbnNhY3Rpb24pOwot
ICAgIEFTU0VSVChtX2RhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlucyhtX29iamVjdFN0
b3JlLT5pZCgpKSk7Ci0gICAgbV9kYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMucmVtb3ZlKG1fb2Jq
ZWN0U3RvcmUtPmlkKCkpOworICAgIG1fZGF0YWJhc2UtPnJlbW92ZU9iamVjdFN0b3JlKG1fb2Jq
ZWN0U3RvcmVJZCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6RGVsZXRlT2Jq
ZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KiB0cmFuc2FjdGlvbikKK3ZvaWQgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKKyAgICBJREJf
VFJBQ0UoIkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24iKTsKICAgICBBU1NFUlQoIXRy
YW5zYWN0aW9uKTsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRh
aW5zKG1fb2JqZWN0U3RvcmUtPmlkKCkpKTsKLSAgICBtX2RhdGFiYXNlLT5tX29iamVjdFN0b3Jl
cy5zZXQobV9vYmplY3RTdG9yZS0+aWQoKSwgbV9vYmplY3RTdG9yZSk7CisgICAgbV9kYXRhYmFz
ZS0+YWRkT2JqZWN0U3RvcmUobV9vYmplY3RTdG9yZU1ldGFkYXRhLCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhOjpJbnZhbGlkSWQpOwogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZl
cnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKiB0cmFuc2FjdGlvbikKIHsKKyAgICBJREJfVFJBQ0UoIlZlcnNpb25DaGFuZ2VBYm9ydE9w
ZXJhdGlvbiIpOwogICAgIEFTU0VSVCghdHJhbnNhY3Rpb24pOwogICAgIG1fZGF0YWJhc2UtPm1f
bWV0YWRhdGEudmVyc2lvbiA9IG1fcHJldmlvdXNWZXJzaW9uOwogICAgIG1fZGF0YWJhc2UtPm1f
bWV0YWRhdGEuaW50VmVyc2lvbiA9IG1fcHJldmlvdXNJbnRWZXJzaW9uOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5oCmluZGV4IDk0NGI4MzAwYzdlMzIyM2JkZDM0NGJiNWJhODFkMWMzYjE0ZmExNjIuLjM0N2Yy
M2VkMWJhYzUxNzljOGY2NjcxNjNiMDI4MzU3YTYzZmYyOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgK
QEAgLTQwLDcgKzQwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCQmFja2luZ1N0
b3JlOwogY2xhc3MgSURCRGF0YWJhc2U7CiBjbGFzcyBJREJGYWN0b3J5QmFja2VuZEltcGw7Ci1j
bGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOwogY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDsKIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKIGNsYXNzIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CkBAIC01NCwxNiArNTMsMjAgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKICAgICBpbnQ2NF90IGlkKCkg
Y29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5pZDsgfQorICAgIHZvaWQgYWRkT2JqZWN0U3RvcmUo
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIGludDY0X3QgbmV3TWF4T2JqZWN0U3RvcmVJ
ZCk7CisgICAgdm9pZCByZW1vdmVPYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwor
ICAgIHZvaWQgYWRkSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1l
dGFkYXRhJiwgaW50NjRfdCBuZXdNYXhJbmRleElkKTsKKyAgICB2b2lkIHJlbW92ZUluZGV4KGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKIAogICAgIHZvaWQgb3BlbkNv
bm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24pOwogICAg
IHZvaWQgZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAogICAgIC8v
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZQogICAgIHZpcnR1YWwgSURCRGF0YWJhc2VNZXRh
ZGF0YSBtZXRhZGF0YSgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgaWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9v
bCBhdXRvSW5jcmVtZW50KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2
b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3Rv
cmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGlkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSAgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUo
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCk7CisgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKTsKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgbWV0aG9k
IGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM5MjMuCiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gY3JlYXRl
VHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4m
IG9iamVjdFN0b3JlSWRzLCBJREJUcmFuc2FjdGlvbjo6TW9kZSk7CiAgICAgdmlydHVhbCB2b2lk
IGNyZWF0ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMs
IHVuc2lnbmVkIHNob3J0IG1vZGUpOwpAQCAtNzIsMTAgKzc1LDkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBjb21taXQoaW50NjRfdCB0cmFuc2FjdGlvbklkKTsKICAgICB2aXJ0dWFsIHZv
aWQgYWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjcmVh
dGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29s
IHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAg
dmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSk7CisgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwogCi0gICAgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZShpbnQ2NF90IGlkKTsKICAgICBJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3QgeyByZXR1cm4g
bV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9CiAgICAgdm9pZCB0cmFuc2FjdGlvblN0
YXJ0ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAgICAgdm9pZCB0
cmFuc2FjdGlvbkZpbmlzaGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4p
OwpAQCAtOTYsMjAgKzk4LDE1IEBAIHByaXZhdGU6CiAKICAgICBib29sIG9wZW5JbnRlcm5hbCgp
OwogICAgIHZvaWQgcnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKTsKLSAgICB2b2lkIGxvYWRPYmpl
Y3RTdG9yZXMoKTsKICAgICBzaXplX3QgY29ubmVjdGlvbkNvdW50KCk7CiAgICAgdm9pZCBwcm9j
ZXNzUGVuZGluZ0NhbGxzKCk7CiAKICAgICBib29sIGlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCk7
CiAgICAgdm9pZCBkZWxldGVEYXRhYmFzZUZpbmFsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7
CiAKLSAgICBjbGFzcyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjsKLSAgICBjbGFzcyBEZWxl
dGVPYmplY3RTdG9yZU9wZXJhdGlvbjsKICAgICBjbGFzcyBWZXJzaW9uQ2hhbmdlT3BlcmF0aW9u
OwogCiAgICAgLy8gV2hlbiBhICJ2ZXJzaW9uY2hhbmdlIiB0cmFuc2FjdGlvbiBhYm9ydHMsIHRo
ZXNlIHJlc3RvcmUgdGhlIGJhY2stZW5kIG9iamVjdCBoaWVyYXJjaHkuCi0gICAgY2xhc3MgQ3Jl
YXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjsKLSAgICBjbGFzcyBEZWxldGVPYmplY3RTdG9y
ZUFib3J0T3BlcmF0aW9uOwogICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjsK
IAogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwpAQCAtMTE5LDkg
KzExNiw2IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyBtaWdodCBub3QgbmVlZCB0byBiZSBhIFJl
ZlB0ciBzaW5jZSB0aGUgZmFjdG9yeSdzIGxpZmV0aW1lIGlzIHRoYXQgb2YgdGhlIHBhZ2UgZ3Jv
dXAsIGJ1dCBpdCdzIGJldHRlciB0byBiZSBjb25zZXJ2aXRpdmUgdGhhbiBzb3JyeS4KICAgICBS
ZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBtX2ZhY3Rvcnk7CiAKLSAgICB0eXBlZGVmIEhh
c2hNYXA8aW50NjRfdCwgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+ID4gT2JqZWN0
U3RvcmVNYXA7Ci0gICAgT2JqZWN0U3RvcmVNYXAgbV9vYmplY3RTdG9yZXM7Ci0KICAgICBPd25Q
dHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcj4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yOwog
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBtX3J1bm5pbmdWZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb247CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDg5NDBjNWU3ZTE4YmJhNGE4MDU1NjRlNGJlODQ2ZjkzMjQ3M2I4MWEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQklu
ZGV4QmFja2VuZEltcGwuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5j
bHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5j
bHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJ
REJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQk1ldGFkYXRh
LmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklE
QlRyYWNpbmcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotSURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5k
SW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSwgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYgbWV0YWRhdGEpCi0gICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICwg
bV9tZXRhZGF0YShtZXRhZGF0YSkKLXsKLX0KLQotSURCSW5kZXhCYWNrZW5kSW1wbDo6fklEQklu
ZGV4QmFja2VuZEltcGwoKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMWE5Mzk5OWUxNjMzZDRmN2ZhNzFlOWI2ODc0ZGUxODEwMWMyMGU5YS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJJbmRleEJhY2tlbmRJbXBsX2gK
LSNkZWZpbmUgSURCSW5kZXhCYWNrZW5kSW1wbF9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKLQotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRl
ICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW50
ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCS2V5UGF0aC5oIgotI2luY2x1ZGUgIklEQk1ldGFkYXRh
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlOwotY2xh
c3MgSURCS2V5OwotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKLQotY2xhc3MgSURC
SW5kZXhCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UgewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShj
b25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSwgY29uc3QgSURCSW5kZXhNZXRh
ZGF0YSYgbWV0YWRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQklu
ZGV4QmFja2VuZEltcGwoZGF0YWJhc2UsIG1ldGFkYXRhKSk7Ci0gICAgfQotICAgIHZpcnR1YWwg
fklEQkluZGV4QmFja2VuZEltcGwoKTsKLQotICAgIGludDY0X3QgaWQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEuaWQgIT0gSW52YWxpZElkKTsKLSAgICAgICAgcmV0
dXJuIG1fbWV0YWRhdGEuaWQ7Ci0gICAgfQotCi0gICAgLy8gSURCSW5kZXhCYWNrZW5kSW50ZXJm
YWNlCi0gICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4s
IHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZp
cnR1YWwgdm9pZCBvcGVuS2V5Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25l
ZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lk
IGdldEtleShQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQotCi0gICAgSURCSW5kZXhNZXRhZGF0YSBtZXRhZGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KLSAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSB7IHJl
dHVybiBtX21ldGFkYXRhLm5hbWU7IH0KLSAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKCkg
eyByZXR1cm4gbV9tZXRhZGF0YS5rZXlQYXRoOyB9Ci0gICAgY29uc3QgYm9vbCYgdW5pcXVlKCkg
eyByZXR1cm4gbV9tZXRhZGF0YS51bmlxdWU7IH0KLSAgICBjb25zdCBib29sJiBtdWx0aUVudHJ5
KCkgeyByZXR1cm4gbV9tZXRhZGF0YS5tdWx0aUVudHJ5OyB9Ci0KLXByaXZhdGU6Ci0gICAgSURC
SW5kZXhCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiwgY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYpOwotCi0gICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0g
MDsKLQotICAgIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSBjb25z
dCB7IHJldHVybiBtX2RhdGFiYXNlLT5iYWNraW5nU3RvcmUoKTsgfQotICAgIGludDY0X3QgZGF0
YWJhc2VJZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UtPmlkKCk7IH0KLQotICAgIGNvbnN0
IElEQkRhdGFiYXNlQmFja2VuZEltcGwqIG1fZGF0YWJhc2U7Ci0KLSAgICBJREJJbmRleE1ldGFk
YXRhIG1fbWV0YWRhdGE7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgot
Ci0jZW5kaWYgLy8gSURCSW5kZXhCYWNrZW5kSW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggODkxMjUzZDllMDRj
OTFlOTVhZWViMjMwNDU0NWYyNDY2YTAyNzI1ZS4uZjUwZmUxZWJiODA4MmUyMTc2ZjhkNGZlZDMw
ZDlhYWIwMzI1NWY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtNDksMTMgKzQ5LDExIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRlZmF1bHREaXJlY3Rpb24gPSBJ
REJDdXJzb3I6Ok5FWFQ7CiAKLUlEQk9iamVjdFN0b3JlOjpJREJPYmplY3RTdG9yZShjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0YSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U+IGlkYk9iamVjdFN0b3JlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24pCitJREJPYmplY3RTdG9yZTo6SURCT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSYgbWV0YWRhdGEsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKICAgICA6
IG1fbWV0YWRhdGEobWV0YWRhdGEpCi0gICAgLCBtX2JhY2tlbmQoaWRiT2JqZWN0U3RvcmUpCiAg
ICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQogICAgICwgbV9kZWxldGVkKGZhbHNlKQog
ewotICAgIEFTU0VSVChtX2JhY2tlbmQpOwogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKICAg
ICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4gYmUg
YWRvcHRlZC4KICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKQEAgLTM4NSw5ICszODMs
NyBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dAogICAgIH0KIAogICAgIGludDY0X3QgaW5kZXhJ
ZCA9IG1fbWV0YWRhdGEubWF4SW5kZXhJZCArIDE7Ci0gICAgbV9iYWNrZW5kLT5jcmVhdGVJbmRl
eChpbmRleElkLCBuYW1lLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnksIG1fdHJhbnNhY3Rp
b24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuIDA7CisgICAg
YmFja2VuZERCKCktPmNyZWF0ZUluZGV4KG1fdHJhbnNhY3Rpb24tPmlkKCksIGlkKCksIGluZGV4
SWQsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7CiAKICAgICArK21fbWV0YWRh
dGEubWF4SW5kZXhJZDsKIApAQCAtNDY2LDE0ICs0NjIsMTMgQEAgdm9pZCBJREJPYmplY3RTdG9y
ZTo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZC0+ZGVsZXRlSW5kZXgoaW5kZXhJ
ZCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgaWYgKCFlYykgewotICAgICAg
ICBJREJJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4TWFwLmZpbmQobmFtZSk7Ci0gICAg
ICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICBtX21ldGFkYXRh
LmluZGV4ZXMucmVtb3ZlKGl0LT52YWx1ZS0+aWQoKSk7Ci0gICAgICAgICAgICBpdC0+dmFsdWUt
Pm1hcmtEZWxldGVkKCk7Ci0gICAgICAgICAgICBtX2luZGV4TWFwLnJlbW92ZShuYW1lKTsKLSAg
ICAgICAgfQorICAgIGJhY2tlbmREQigpLT5kZWxldGVJbmRleChtX3RyYW5zYWN0aW9uLT5pZCgp
LCBpZCgpLCBpbmRleElkKTsKKworICAgIElEQkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5k
ZXhNYXAuZmluZChuYW1lKTsKKyAgICBpZiAoaXQgIT0gbV9pbmRleE1hcC5lbmQoKSkgeworICAg
ICAgICBtX21ldGFkYXRhLmluZGV4ZXMucmVtb3ZlKGl0LT52YWx1ZS0+aWQoKSk7CisgICAgICAg
IGl0LT52YWx1ZS0+bWFya0RlbGV0ZWQoKTsKKyAgICAgICAgbV9pbmRleE1hcC5yZW1vdmUobmFt
ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaAppbmRleCA3ZTJmNzJmYWVhODUxOTNjMzA5M2VkNjNkODVhYTJhNTAy
ZjNjMDI3Li42ZGZkOTc4OGE1MDhjNmI5ODUyMGRlMGY0MWQzMWRkMTNmZGEyN2FmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKQEAg
LTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiSURCQ3Vy
c29yLmgiCiAjaW5jbHVkZSAiSURCSW5kZXguaCIKLSNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJJREJLZXlSYW5nZS5o
IgogI2luY2x1ZGUgIklEQk1ldGFkYXRhLmgiCkBAIC01Miw5ICs1MSw5IEBAIGNsYXNzIElEQkFu
eTsKIAogY2xhc3MgSURCT2JqZWN0U3RvcmUgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJs
aWMgUmVmQ291bnRlZDxJREJPYmplY3RTdG9yZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlPiBjcmVhdGUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSYgbWV0YWRhdGEsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBi
YWNrZW5kLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBt
ZXRhZGF0YSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJREJPYmplY3RTdG9yZShtZXRhZGF0YSwgYmFja2VuZCwgdHJhbnNh
Y3Rpb24pKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJPYmplY3RTdG9yZShtZXRh
ZGF0YSwgdHJhbnNhY3Rpb24pKTsKICAgICB9CiAgICAgfklEQk9iamVjdFN0b3JlKCkgeyB9CiAK
QEAgLTEwOSw3ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlKiBiYWNrZW5kREIoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBJREJPYmplY3RTdG9yZShj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U+LCBJREJUcmFuc2FjdGlvbiopOworICAgIElEQk9iamVjdFN0b3JlKGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBJREJUcmFuc2FjdGlvbiopOwogCiAgICAgaW50
NjRfdCBmaW5kSW5kZXhJZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIGJvb2wgY29u
dGFpbnNJbmRleChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CkBAIC0xMTgsNyArMTE3LDYgQEAg
cHJpdmF0ZToKICAgICB9CiAKICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fbWV0YWRhdGE7
Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOwog
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKICAgICBib29sIG1fZGVs
ZXRlZDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCBlNmNlODNjMzViMzhjMDRl
Y2VhZmE3OGE5YWFkNTVmZjgwYWZiN2IxLi5kMjRiNjdmZDliY2EwOTEyMDcxZDViOTA5MTgwNmQ5
N2E2YWIxZTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtMzQsNyArMzQsNiBA
QAogI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5j
bHVkZSAiSURCSW5kZXhCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1
ZGUgIklEQktleVBhdGguaCIKICNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgpAQCAtNDQsOTggKzQz
LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpDcmVhdGVJbmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gaW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0
ZUluZGV4T3BlcmF0aW9uKG9iamVjdFN0b3JlLCBpbmRleCkpOwotICAgIH0KLSAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAg
IENyZWF0ZUluZGV4T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCi0g
ICAgICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAgICAgICAgLCBtX2luZGV4KGlu
ZGV4KQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gbV9vYmplY3RTdG9yZTsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRl
eDsKLX07Ci0KLWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkRlbGV0ZUluZGV4T3Bl
cmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlSW5kZXhPcGVyYXRpb24ob2JqZWN0
U3RvcmUsIGluZGV4KSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgRGVsZXRlSW5kZXhPcGVyYXRpb24o
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1Jl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKLSAgICAgICAgOiBtX29iamVjdFN0b3Jl
KG9iamVjdFN0b3JlKQotICAgICAgICAsIG1faW5kZXgoaW5kZXgpCi0gICAgewotICAgIH0KLQot
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwotICAg
IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBtX2luZGV4OwotfTsKLQotY2xhc3MgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRp
YyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRl
KFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24ob2JqZWN0U3RvcmUsIGluZGV4
KSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbihQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4KQotICAgICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0
U3RvcmUpCi0gICAgICAgICwgbV9pbmRleChpbmRleCkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7Ci19OwotCi1jbGFzcyBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbihvYmplY3RTdG9yZSwgaW5kZXgpKTsKLSAg
ICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCop
OwotcHJpdmF0ZToKLSAgICBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW1wbD4gaW5kZXgpCi0gICAgICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkK
LSAgICAgICAgLCBtX2luZGV4KGluZGV4KQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKLSAgICBSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsKLX07Ci0KLQotSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6fklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoKQotewotfQotCi1JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGNvbnN0IElEQkRhdGFiYXNlQmFj
a2VuZEltcGwqIGRhdGFiYXNlLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0
YSkKLSAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCi0gICAgLCBtX21ldGFkYXRhKG1ldGFkYXRh
KQotewotICAgIGxvYWRJbmRleGVzKCk7Ci19Ci0KLUlEQk9iamVjdFN0b3JlTWV0YWRhdGEgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bWV0YWRhdGEoKSBjb25zdAotewotICAgIElEQk9iamVj
dFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEobV9tZXRhZGF0YSk7Ci0gICAgZm9yIChJbmRleE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9pbmRleGVzLmVu
ZCgpOyArK2l0KQotICAgICAgICBtZXRhZGF0YS5pbmRleGVzLnNldChpdC0+a2V5LCBpdC0+dmFs
dWUtPm1ldGFkYXRhKCkpOwotICAgIHJldHVybiBtZXRhZGF0YTsKLX0KLQogYm9vbCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleFdyaXRlcjo6dmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tp
bmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgYm9vbCYgY2FuQWRkS2V5cywgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBT
dHJpbmcqIGVycm9yTWVzc2FnZSkgY29uc3QKIHsKICAgICBjYW5BZGRLZXlzID0gZmFsc2U7CkBA
IC0yMTIsODYgKzExOSw2IEBAIGJvb2wgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bWFrZUlu
ZGV4V3JpdGVycyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLVBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50
cnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1faW5kZXhlcy5jb250
YWlucyhpZCksICJJbmRleGVzIGFscmVhZHkgY29udGFpbiAnJXMnIiwgbmFtZS51dGY4KCkuZGF0
YSgpKTsKLQotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IElEQkluZGV4
QmFja2VuZEltcGw6OmNyZWF0ZShtX2RhdGFiYXNlLCBJREJJbmRleE1ldGFkYXRhKG5hbWUsIGlk
LCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkpKTsKLSAgICBBU1NFUlQoaW5kZXgtPm5hbWUo
KSA9PSBuYW1lKTsKLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIp
OwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJT
SU9OX0NIQU5HRSk7Ci0gICAgQVNTRVJUKGlkID4gbV9tZXRhZGF0YS5tYXhJbmRleElkKTsKLSAg
ICBtX21ldGFkYXRhLm1heEluZGV4SWQgPSBpZDsKLQotICAgIGlmICghdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhDcmVhdGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGluZGV4KSwgQ3Jl
YXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGluZGV4KSkpIHsKLSAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBtX2luZGV4ZXMuc2V0KGlkLCBpbmRleCk7Ci0g
ICAgcmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpDcmVhdGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIkNyZWF0ZUluZGV4T3BlcmF0
aW9uIik7Ci0gICAgaWYgKCFtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+Y3JlYXRlSW5k
ZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUt
PmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9pbmRleC0+aWQoKSwgbV9pbmRl
eC0+bmFtZSgpLCBtX2luZGV4LT5rZXlQYXRoKCksIG1faW5kZXgtPnVuaXF1ZSgpLCBtX2luZGV4
LT5tdWx0aUVudHJ5KCkpKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5n
Ojpmb3JtYXQoIkludGVybmFsIGVycm9yIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZSBpbmRleCAnJXMn
LiIsIG1faW5kZXgtPm5hbWUoKS51dGY4KCkuZGF0YSgpKSkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotfQotCi1QYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6aW5kZXgoaW50NjRfdCBpbmRleElkKQotewotICAgIFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4ID0gbV9pbmRleGVzLmdldChpbmRleElkKTsK
LSAgICBBU1NFUlQoaW5kZXgpOwotICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7Ci19Ci0KLXZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgoaW50NjRfdCBpbmRleElk
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBBU1NFUlQobV9pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsK
LQotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IG1faW5kZXhlcy5nZXQo
aW5kZXhJZCk7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0g
ICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05f
Q0hBTkdFKTsKLQotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhEZWxldGVJbmRl
eE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGluZGV4KSwgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlv
bjo6Y3JlYXRlKHRoaXMsIGluZGV4KSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIG1faW5kZXhlcy5yZW1vdmUoaW5kZXhJZCk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJEZWxldGVJbmRleE9w
ZXJhdGlvbiIpOwotICAgIG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJbmRl
eCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+
ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX2luZGV4LT5pZCgpKTsKLX0KLQot
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpsb2FkSW5kZXhlcygpCi17Ci0gICAgVmVj
dG9yPElEQkluZGV4TWV0YWRhdGE+IGluZGV4ZXMgPSBiYWNraW5nU3RvcmUoKS0+Z2V0SW5kZXhl
cyhkYXRhYmFzZUlkKCksIG1fbWV0YWRhdGEuaWQpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBpbmRleGVzLnNpemUoKTsgKytpKQotICAgICAgICBtX2luZGV4ZXMuc2V0KGluZGV4ZXNb
aV0uaWQsIElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2RhdGFiYXNlLCBpbmRleGVzW2ld
KSk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhBYm9y
dE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlv
bikKLXsKLSAgICBBU1NFUlQoIXRyYW5zYWN0aW9uKTsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9y
ZS0+bV9pbmRleGVzLmNvbnRhaW5zKG1faW5kZXgtPmlkKCkpKTsKLSAgICBtX29iamVjdFN0b3Jl
LT5tX2luZGV4ZXMucmVtb3ZlKG1faW5kZXgtPmlkKCkpOwotfQotCi12b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKCF0cmFuc2Fj
dGlvbik7Ci0gICAgQVNTRVJUKCFtX29iamVjdFN0b3JlLT5tX2luZGV4ZXMuY29udGFpbnMobV9p
bmRleC0+aWQoKSkpOwotICAgIG1fb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5zZXQobV9pbmRleC0+
aWQoKSwgbV9pbmRleCk7Ci19Ci0KIFBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9u
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKICAgICBjb25z
dCBpbnQ2NF90IG1heEdlbmVyYXRvclZhbHVlID0gOTAwNzE5OTI1NDc0MDk5MkxMOyAvLyBNYXhp
bXVtIGludGVnZXIgc3RvcmFibGUgYXMgRUNNQVNjcmlwdCBudW1iZXIuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsLmgKaW5kZXggYjNlMmU1NTAxNmUxMzEyZjMzOTBhMDE3NmRlZTc4MTY5YTk4MmJkZS4u
OTcwZmM0OWEyZTY5OTE1ODEwMDI1ZTQwZTA5M2ZjOWMwZGI5MTlmNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuaApAQCAtMzksNTMgKzM5LDEyIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7Ci1jbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOwog
Y2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDsKIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZTsKIHN0cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOwogCi1jbGFzcyBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsIDogcHVibGljIElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gY3JlYXRlKGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNl
LCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0YSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChkYXRhYmFzZSwg
bWV0YWRhdGEpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bCgpOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiA+IEluZGV4TWFwOwotCi0gICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElk
ID0gMDsKLSAgICBpbnQ2NF90IGlkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX21l
dGFkYXRhLmlkICE9IEludmFsaWRJZCk7Ci0gICAgICAgIHJldHVybiBtX21ldGFkYXRhLmlkOwot
ICAgIH0KLQotICAgIC8vIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZQotICAgIHZpcnR1
YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNv
bnN0IFZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JikgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGludDY0X3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0
b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSopIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSopIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleChpbnQ2NF90KTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdmlydHVhbCB2b2lkIG9wZW5DdXJz
b3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIElEQkN1cnNvcjo6RGlyZWN0aW9uLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5
cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50KFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
Ci0KLSAgICBzdGF0aWMgYm9vbCBwb3B1bGF0ZUluZGV4KElEQkJhY2tpbmdTdG9yZSYsIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+KTsKLQotICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEoKSBj
b25zdDsKLSAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX21ldGFkYXRhLm5hbWU7
IH0KLSAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9tZXRh
ZGF0YS5rZXlQYXRoOyB9Ci0gICAgY29uc3QgYm9vbCYgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWV0YWRhdGEuYXV0b0luY3JlbWVudDsgfQotCi0gICAgUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UtPmJh
Y2tpbmdTdG9yZSgpOyB9Ci0gICAgaW50NjRfdCBkYXRhYmFzZUlkKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhYmFzZS0+aWQoKTsgfQorLy8gRklYTUU6IHRoaXMgbmFtZXNwYWNlIGlzIHRlbXBvcmFy
eSB1bnRpbCB3ZSBtb3ZlIGl0cyBjb250ZW50cyBvdXQgdG8gdGhlaXIgb3duIGhvbWUuCituYW1l
c3BhY2UgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCB7CiAKICAgICBjbGFzcyBJbmRleFdyaXRl
ciB7CiAgICAgcHVibGljOgpAQCAtMTA5LDI3ICs2OCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzIG1faW5kZXhLZXlzOwogICAg
IH07CiAKLSAgICBzdGF0aWMgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4sIElEQkJhY2tpbmdTdG9yZSosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmlt
YXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRl
eElkcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhL
ZXlzPiYsIFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4qIGluZGV4V3JpdGVycywgU3RyaW5n
KiBlcnJvck1lc3NhZ2UsIGJvb2wmIGNvbXBsZXRlZCkgV0FSTl9VTlVTRURfUkVUVVJOOwotCi0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICBzdGF0aWMgYm9vbCB1
cGRhdGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+LCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5KiwgYm9vbCBjaGVja0N1cnJlbnQpOwotCi1wcml2
YXRlOgotICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbCosIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmKTsKLQotICAgIHZvaWQgbG9h
ZEluZGV4ZXMoKTsKLQotICAgIGNsYXNzIENyZWF0ZUluZGV4T3BlcmF0aW9uOwotICAgIGNsYXNz
IERlbGV0ZUluZGV4T3BlcmF0aW9uOwotCi0gICAgLy8gV2hlbiBhICJ2ZXJzaW9uY2hhbmdlIiB0
cmFuc2FjdGlvbiBhYm9ydHMsIHRoZXNlIHJlc3RvcmUgdGhlIGJhY2stZW5kIG9iamVjdCBoaWVy
YXJjaHkuCi0gICAgY2xhc3MgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjsKLSAgICBjbGFzcyBE
ZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOwotCi0gICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbCogbV9kYXRhYmFzZTsKKyAgICBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiwgSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgUGFzc1JlZlB0cjxJREJLZXk+
IHByaW1hcnlLZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4m
IGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJ
bmRleEtleXM+JiwgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiogaW5kZXhXcml0ZXJzLCBT
dHJpbmcqIGVycm9yTWVzc2FnZSwgYm9vbCYgY29tcGxldGVkKSBXQVJOX1VOVVNFRF9SRVRVUk47
CiAKLSAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fbWV0YWRhdGE7Ci0gICAgSW5kZXhNYXAg
bV9pbmRleGVzOworICAgIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5lcmF0ZUtleShQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZT4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4s
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICBib29sIHVw
ZGF0ZUtleUdlbmVyYXRvcihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4sIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkqLCBib29sIGNoZWNrQ3VycmVudCk7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggYWZhNDVlMjRiMDQxZWY4MjVjNjU3YTYx
MTk1MTQwZDE0NTc0MTJmMS4uMjZlZmQwZmIzYjExOTZmZDE3ODJlMWVkNzJlNDM1ZjRjNzg4MDk5
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmNwcApAQCAtMTIyLDExICsxMjIsNiBAQCBJREJUcmFuc2FjdGlvbjo6fklEQlRyYW5z
YWN0aW9uKCkKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7CiB9CiAKLUlEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogSURCVHJhbnNhY3Rpb246OmJhY2tlbmQoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7Ci19Ci0KIGNvbnN0IFN0cmluZyYgSURCVHJh
bnNhY3Rpb246Om1vZGUoKSBjb25zdAogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAt
MTc2LDEyICsxNzEsOSBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJUcmFuc2FjdGlv
bjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcAogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBv
YmplY3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWQs
IGVjKTsKLSAgICBBU1NFUlQoIWVjICYmIG9iamVjdFN0b3JlQmFja2VuZCk7Ci0KICAgICBjb25z
dCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSA9IG1fZGF0YWJhc2UtPm1ldGFkYXRhKCk7
CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3Rv
cmU6OmNyZWF0ZShtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLCBvYmpl
Y3RTdG9yZUJhY2tlbmQsIHRoaXMpOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0
U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQo
b2JqZWN0U3RvcmVJZCksIHRoaXMpOwogICAgIG9iamVjdFN0b3JlQ3JlYXRlZChuYW1lLCBvYmpl
Y3RTdG9yZSk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCmluZGV4IGRm
NDFiYmIwZWY1MzM4MWMwY2UyNzFiN2RkNDU2ZmRiZjllZTA0MDkuLmRmM2JiMGNjY2E1OTY0ZDQ2
ODg3OTRmMWZiNjJiODZlMDIwNzA2NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaApAQCAtNzEsNyArNzEsNiBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIE1vZGUgc3RyaW5nVG9Nb2RlKGNvbnN0IFN0cmluZyYsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbW9kZVRvU3RyaW5nKE1vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogYmFja2VuZCgpIGNvbnN0OwogICAgIElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZSogYmFja2VuZERCKCkgY29uc3Q7CiAKICAgICBpbnQ2NF90IGlkKCkgY29u
c3QgeyByZXR1cm4gbV9pZDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCA3ODJm
NDY1ODI4YzgyN2YyZmU2YzhiNmUzNjdlMTc1ZTdhYmYwOTQyLi4xYjBjYTRiYmNjMGVhNTVlM2M3
NDYyMmU5NmE1MzE3NjMwNDRhYmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAt
MzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCiAjaW5jbHVk
ZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0
aW9uLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUg
IklEQlRyYWNpbmcuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCiAK
QEAgLTcwLDE4ICs2OSw2IEBAIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6On5JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKCkKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7CiB9CiAK
LVBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShpbnQ2NF90IGlkLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkgewotICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0g
bV9kYXRhYmFzZS0+b2JqZWN0U3RvcmUoaWQpOwotICAgIEFTU0VSVChvYmplY3RTdG9yZSk7Ci0g
ICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKLX0KLQogYm9vbCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpzY2hlZHVsZVRhc2soVGFza1R5cGUgdHlwZSwgUGFzc093blB0cjxPcGVy
YXRpb24+IHRhc2ssIFBhc3NPd25QdHI8T3BlcmF0aW9uPiBhYm9ydFRhc2spCiB7CiAgICAgaWYg
KG1fc3RhdGUgPT0gRmluaXNoZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKaW5kZXggYzc5ZGVm
ZjQ4ODQ4MDRmN2YzN2FmMDMyMzU0MDc4OTI3MzkxYTNiMS4uMjEyMjBhYzYwNmZiYmFkNGE1N2Vh
MjhlYmVkZGVkYTA2MjE4ODQ3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaApAQCAtNTIsNyAr
NTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCgp
OwogCiAgICAgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlCi0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoaW50
NjRfdCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGludDY0X3QsIEV4Y2VwdGlvbkNvZGUm
KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCk7CiAg
ICAgdm9pZCBjb21taXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FsbGJhY2tzKElEQlRyYW5z
YWN0aW9uQ2FsbGJhY2tzKiBjYWxsYmFja3MpIHsgbV9jYWxsYmFja3MgPSBjYWxsYmFja3M7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCAyMmNkNzRlODhmYjRjYzU1MTVmNDUwNjNkZmIzZmZhMjJhN2Uz
MTgxLi42MTBiZTU4Yjk4ZGM2MzJjYmVjMWYzNGRkMWNkNGFhNGZkYjM3NjAyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCkBAIC03MzYsOCArNzM2LDYgQEAKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oJywKICAgICAgICAgICAgICdNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleC5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4LmgnLAotICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2Vu
ZEltcGwuY3BwJywKLSAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tl
bmRJbXBsLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2Vu
ZEludGVyZmFjZS5oJywKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3Bw
JywKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaCcsCkBAIC01NDY1LDcg
KzU0NjMsNyBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlYXJj
aFNtYWxsR3JheS5wbmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2Vz
L3NlYXJjaFNtYWxsV2hpdGUucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5k
L0ltYWdlcy9zZWFyY2hOZXh0LnBuZycsCi0gICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvc2VhcmNoUHJldi5wbmcnLCAgICAgICAgICAgIAorICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlYXJjaFByZXYucG5nJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWdtZW50LnBuZycsCiAgICAgICAgICAgICAnaW5zcGVj
dG9yL2Zyb250LWVuZC9JbWFnZXMvc2VnbWVudEVuZC5wbmcnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlZ21lbnRIb3Zlci5wbmcnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA5YjgzMTc5MDUyNzgyZDQ4NGRh
ODc3ZTFlMjlmNGY1YTFiNTdmZTNiLi4yMGY2ZTE3NzlhM2E3YmJiMDQxZGJmOGU5YzVhOGE2OGUx
OGU2MWFiIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agpAQCAtMjQ5ODUsMTQgKzI0OTg1LDYgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8Rmls
ZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkluZGV4QmFja2Vu
ZEltcGwuY3BwIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZl
UGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCSW5kZXhCYWNrZW5kSW1wbC5oIgotCQkJCQk+
Ci0JCQkJPC9GaWxlPgotCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xp
bmRleGVkZGJcSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggZTZiZDRkOGUwNzRlN2E2N2NhYTE0ZTcwN2NjNDcyZThlZmI4YTk0ZS4uZmEwMzBjZmJl
OWE3ZGIwYzgzNTNmOGZmOGEzOTRmZGQ0ZWJlN2YzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzQ5NSw4ICszNDk1LDYgQEAK
IAkJOTcxMkE1RDQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3
QjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgfTsK
IAkJOTcxMkE1RDUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTdDMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJJbmRleC5jcHAgKi87IH07CiAJCTk3MTJBNUQ2MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJJbmRleC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTcxMkE1N0QxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmggKi87IH07Ci0JCTk3MTJBNUQ4
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTdGMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKLQkJOTcxMkE1RDkxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTgwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRl
eEJhY2tlbmRJbXBsLmggKi87IH07CiAJCTk3MTJBNURBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJ
bmRleEJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3MTJBNTgxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2UuaCAqLzsgfTsKIAkJOTcxMkE1REIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4
MjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5LmNwcCAqLzsgfTsKIAkJOTcxMkE1REMxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTcxMkE1ODMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5oICovOyB9OwpA
QCAtMTA4MTksOCArMTA4MTcsNiBAQAogCQk5NzEyQTU3QzE1MDA0RURBMDA0OEFGMTAgLyogSURC
SW5kZXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCSW5kZXgu
Y3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5NzEyQTU3RDE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCSW5kZXguaDsgcGF0aCA9IE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkluZGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3
MTJBNTdFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBu
YW1lID0gSURCSW5kZXguaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU3RjE1MDA0RURBMDA0OEFGMTAg
LyogSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBJREJJbmRleEJhY2tlbmRJbXBsLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4QmFja2VuZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5
NzEyQTU4MDE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJJbmRleEJhY2tlbmRJbXBsLmg7IHBhdGggPSBN
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk3MTJBNTgxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCSW5kZXhCYWNr
ZW5kSW50ZXJmYWNlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1ODIxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQktleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBJREJLZXkuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1ODMxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QktleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJLZXkuaDsgcGF0aCA9
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTgxNTEsOCArMTgxNDcsNiBAQAogCQkJCTk3MTJBNTdDMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJJbmRleC5jcHAgKi8sCiAJCQkJOTcxMkE1N0QxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4
LmggKi8sCiAJCQkJOTcxMkE1N0UxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmlkbCAqLywK
LQkJCQk5NzEyQTU3RjE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAg
Ki8sCi0JCQkJOTcxMkE1ODAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEltcGwu
aCAqLywKIAkJCQk5NzEyQTU4MTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW50
ZXJmYWNlLmggKi8sCiAJCQkJOTcxMkE1ODIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5jcHAg
Ki8sCiAJCQkJOTcxMkE1ODMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5oICovLApAQCAtMjQx
NzIsNyArMjQxNjYsNiBAQAogCQkJCTk3MTJBNUQyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0
b3J5QmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUQ0MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTcxMkE1RDYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmggaW4gSGVhZGVycyAqLywKLQkJ
CQk5NzEyQTVEOTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTcxMkE1REExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1REMxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQktleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1REYxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQktleVBhdGguaCBpbiBIZWFkZXJzICovLApAQCAtMjc0MjYsNyArMjc0MTksNiBAQAog
CQkJCTk3MTJBNUQxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTcxMkE1RDMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNUQ1MTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJJbmRleC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5NzEyQTVEODE1
MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5NzEyQTVEQjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk3MTJBNURFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTk3MTJBNUUyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
SURCRGF0YWJhc2VCYWNrZW5kVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0lEQkRhdGFiYXNlQmFja2VuZFRlc3QuY3BwCmluZGV4IDZlZjg1YzNkOTM0Njg0MTQ0ODk0MjZj
ZWY2ZTVkOTQzYjA1YWE3MTIuLjdjZDY0NGE0MTIwY2I4Zjc3ZGM5NmY1YzJlMGZiMzk3MzdiNDgy
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VC
YWNrZW5kVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRh
YmFzZUJhY2tlbmRUZXN0LmNwcApAQCAtMzAsOCArMzAsNyBAQAogI2luY2x1ZGUgIklEQkRhdGFi
YXNlQ2FsbGJhY2tzUHJveHkuaCIKICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwuaCIK
ICNpbmNsdWRlICJJREJGYWtlQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCSW5kZXhCYWNr
ZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKKyNpbmNs
dWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiV2ViSURCRGF0YWJh
c2VDYWxsYmFja3NJbXBsLmgiCiAjaW5jbHVkZSAiV2ViSURCRGF0YWJhc2VJbXBsLmgiCiAKQEAg
LTU2LDIxICs1NSw4IEBAIFRFU1QoSURCRGF0YWJhc2VCYWNrZW5kVGVzdCwgQmFja2luZ1N0b3Jl
UmV0ZW50aW9uKQogICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYiA9IElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZSgiZGIiLCBiYWNraW5nU3RvcmUuZ2V0KCksIGZhY3Rv
cnksICJ1bmlxdWVpZCIpOwogICAgIEVYUEVDVF9HVChiYWNraW5nU3RvcmUtPnJlZkNvdW50KCks
IDEpOwogCi0gICAgY29uc3QgYm9vbCBhdXRvSW5jcmVtZW50ID0gZmFsc2U7Ci0gICAgUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IHN0b3JlID0gSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6Y3JlYXRlKGRiLmdldCgpLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhKCJzdG9yZSIsIDEs
IElEQktleVBhdGgoImtleVBhdGgiKSwgYXV0b0luY3JlbWVudCwgMCkpOwotICAgIEVYUEVDVF9H
VChiYWNraW5nU3RvcmUtPnJlZkNvdW50KCksIDEpOwotCi0gICAgY29uc3QgYm9vbCB1bmlxdWUg
PSBmYWxzZTsKLSAgICBjb25zdCBib29sIG11bHRpRW50cnkgPSBmYWxzZTsKLSAgICBSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUo
ZGIuZ2V0KCksIElEQkluZGV4TWV0YWRhdGEoImluZGV4IiwgLTEsIElEQktleVBhdGgoImtleVBh
dGgiKSwgdW5pcXVlLCBtdWx0aUVudHJ5KSk7Ci0gICAgRVhQRUNUX0dUKGJhY2tpbmdTdG9yZS0+
cmVmQ291bnQoKSwgMSk7Ci0KICAgICBkYi5jbGVhcigpOwogICAgIEVYUEVDVF9UUlVFKGJhY2tp
bmdTdG9yZS0+aGFzT25lUmVmKCkpOwotICAgIHN0b3JlLmNsZWFyKCk7Ci0gICAgRVhQRUNUX1RS
VUUoYmFja2luZ1N0b3JlLT5oYXNPbmVSZWYoKSk7Ci0gICAgaW5kZXguY2xlYXIoKTsKLSAgICBF
WFBFQ1RfVFJVRShiYWNraW5nU3RvcmUtPmhhc09uZVJlZigpKTsKIH0KIAogY2xhc3MgTW9ja0lE
QkNhbGxiYWNrcyA6IHB1YmxpYyBJREJDYWxsYmFja3MgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAppbmRleCBmOTY1MDczYzBhZjNl
YzJhZmY3MzQzODBlMjRkNzg1ZjY2MTE5ODZjLi4zZWQ3MjRiYjRlYjBhMmJiZjg4YjY0NjFhNTJm
ZjQyN2I2OGViYjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lE
QkZha2VCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lE
QkZha2VCYWNraW5nU3RvcmUuaApAQCAtMzksNyArMzksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihUcmFuc2FjdGlvbiosIGludDY0X3Qg
cm93SWQsIGludDY0X3QgdmVyc2lvbikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKSBPVkVSUklERSB7
IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRh
ZGF0YT4gZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCkgT1ZFUlJJREUgeyByZXR1
cm4gVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+KCk7IH0KICAgICB2aXJ0dWFsIGJvb2wg
Y3JlYXRlT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwg
Ym9vbCBhdXRvSW5jcmVtZW50KSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfTsKIAogICAgIHZp
cnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFIHsgfQpAQCAtNDgsNyArNDcsNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlcihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpIE9WRVJSSURFIHsg
cmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJLZXkmLCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIsIGJv
b2wmIGZvdW5kKSBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIFZlY3Rv
cjxJREJJbmRleE1ldGFkYXRhPiBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKSBPVkVSUklERSB7IHJldHVybiBWZWN0b3I8SURCSW5kZXhNZXRhZGF0
YT4oKTsgfQogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRleChUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wg
aXNNdWx0aUVudHJ5KSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfTsKICAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlSW5kZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKSBPVkVSUklERSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
JiwgY29uc3QgUmVjb3JkSWRlbnRpZmllciYpIE9WRVJSSURFIHsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182040</attachid>
            <date>2013-01-09 18:12:49 -0800</date>
            <delta_ts>2013-01-09 21:55:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106377-20130109180953.patch</filename>
            <type>text/plain</type>
            <size>87945</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzA5NWQ3YjZjMjkxNmU5
MTE4MmZlZDhiODgzYTNmNGFmMjM2ZTc3ZS4uYzJiZWZmZTg3ZDcyNDYxYTZhMzRkMDNmZGM2Yjc0
ZTk1N2ZkNzJmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOCBAQAorMjAxMy0wMS0wOCAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBB
bGxvdyBjcmVhdGVJbmRleC9jcmVhdGVPYmplY3RTdG9yZSB0byBiZSBhc3luY2hyb25vdXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjM3NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1pZ3JhdGUgaW1w
bGVtZW50YXRpb25zIG9mIGNyZWF0ZUluZGV4L2RlbGV0ZUluZGV4LAorICAgICAgICBjcmVhdGVP
YmplY3RTdG9yZS9kZWxldGVPYmplY3RTdG9yZSBvdmVyIHRvIElEQkRhdGFiYXNlQmFja2VuZElt
cGwsCisgICAgICAgIHNvIHRoYXQgdGhleSBjYW4gYmUgYXN5bmNocm9ub3VzIGluIG11bHRpLXBy
b2Nlc3MgcG9ydHMuCisKKyAgICAgICAgSGFzIHRoZSBzaWRlIGVmZmVjdCBvZiByZW1vdmluZyB0
aGUgbGFzdCBjb25zdW1lcnMgb2YKKyAgICAgICAgSURCSW5kZXhCYWNrZW5kSW1wbCBhbmQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC4gVGhlIGZvcm1lcgorICAgICAgICBpcyByZW1vdmVkIGNv
bXBsZXRlIGFuZCB0aGUgbGF0dGVyIGJlY29tZXMgYSB0ZW1wb3JhcnkgbmFtZXNwYWNlCisgICAg
ICAgIHBlbmRpbmcgYSBmdXJ0aGVyIG1vcmUgbWVjaGFuaWNhbCBjb2RlIHNodWZmbGUuCisKKyAg
ICAgICAgQSBrZXkgcmVmYWN0b3JpbmcgZWZmZWN0IGlzIHRoYXQgdGhlIElEQkRhdGFiYXNlQmFj
a2VuZEltcGwKKyAgICAgICAgbm93IGNvbnRhaW5zIHRoZSBhdXRob3JpdGF0aXZlIElEQkRhdGFi
YXNlTWV0YWRhdGEgaGllcmFyY2h5LAorICAgICAgICBhbmQgdXBkYXRlcyB0byBpdCBhcmUgY29u
c29saWRhdGVkIGluIG9uZSBwbGFjZSByYXRoZXIgdGhhbgorICAgICAgICBzY2F0dGVyZWQgYWNy
b3NzIGEgcGFyYWxsZWwgb2JqZWN0IHRyZWUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRo
aXMgaXMganVzdCByZWZhY3RvcmluZy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkJhY2tpbmdTdG9yZS5jcHA6IFNpbXBsaWZ5IG9iamVjdHN0b3JlL2luZGV4IGxvYWRpbmcgYW5k
IHByb3BhZ2F0ZSBlcnJvcnMuCisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6Omdl
dE9iamVjdFN0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldElu
ZGV4ZXMpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgor
ICAgICAgICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6IERlcGVuZGVuY3kgY2xlYW51cC4KKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oOiBEZXBlbmRlbmN5IGNsZWFu
dXAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZS5jcHA6IEZyb250ZW5kIElEQk9iamVjdFN0b3JlcyBubyBsb25nZXIgaG9sZCBvbnRv
IGJhY2tlbmQgb2JqZWN0cy4KKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVhdGVP
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0
U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZElt
cGwuY3BwOiBBZGQgYWxsIGNyZWF0ZS9kZWxldGUgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNv
cmU6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KToKKyAgICAgICAgKENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KToKKyAgICAgICAgKERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpDcmVhdGVPYmplY3RTdG9y
ZUFib3J0T3BlcmF0aW9uKToKKyAgICAgICAgKENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRp
b246OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoRGVsZXRlT2Jq
ZWN0U3RvcmVBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChDcmVhdGVJbmRleE9wZXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNyZWF0ZUluZGV4T3BlcmF0aW9uOjpDcmVhdGVJbmRleE9wZXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERlbGV0ZUluZGV4T3BlcmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246OkRlbGV0ZUluZGV4T3BlcmF0aW9uKToKKyAg
ICAgICAgKENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q3Jl
YXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0
ZUluZGV4QWJvcnRPcGVyYXRpb246OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24pOgorICAgICAg
ICAoRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVJ
bmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5k
ZXhBYm9ydE9wZXJhdGlvbjo6RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHZXRPcGVyYXRpb246OkdldE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3JlYXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9u
OjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
OjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRl
bGV0ZURhdGFiYXNlRmluYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6bG9hZE9iamVjdFN0b3Jlcyk6IExvYWQgZGlyZWN0bHkgaW50byBtZXRhZGF0YSBmcm9t
IGJhY2tpbmcgc3RvcmUuCisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3Jl
QWJvcnRPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKElEQkRhdGFiYXNlQmFja2VuZEltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUp
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6SURCT2JqZWN0U3RvcmUpOiBG
cm9udGVuZCBJREJJbmRleCBvYmplY3RzIG5vIGxvbmdlciBob2xkIG9udG8gYmFja2VuZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCk6IAorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmU6OmNyZWF0ZSk6CisgICAgICAgIChJREJPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTMtMDEtMDggIEFuZHJlYXMgS2xpbmcg
IDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEhlYXAtdXNlLWFmdGVyLWZyZWUgaW4gYm9v
bCBXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDAwYzgwMzVmNWZkZDUwMDA4OGQ2MTdhMjU0NTE3OTBkOTg1NDY3
YjUuLjlmOTA0N2Y4ZjExMTNhYjRhZTUxMTMxMjdhOTBiNTRmZGY0NDFlZmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDEtMDggIEFsZWMgRmxldHQg
IDxhbGVjZmxldHRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogQWxsb3cgY3Jl
YXRlSW5kZXgvY3JlYXRlT2JqZWN0U3RvcmUgdG8gYmUgYXN5bmNocm9ub3VzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYzNzcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdGhpcyB0ZXN0IGFz
IGl0IG1ha2VzIG5vIHNlbnNlIG9uY2UgdGhlIG9iamVjdHN0b3JlL2luZGV4CisgICAgICAgIGhp
ZXJhcmNoeSBpcyBnb25lLgorCisgICAgICAgICogdGVzdHMvSURCRGF0YWJhc2VCYWNrZW5kVGVz
dC5jcHA6CisKIDIwMTMtMDEtMDggIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlbW92ZWQgdGhlIG5lZWQgZm9yIHRoZSBQcm9wb3NlZERhdGFiYXNlIG1lY2hhbmlz
bS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tp
bmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5n
U3RvcmUuY3BwCmluZGV4IDIwMmYwNTBmNjJkNDAzMmRjZjc4MzkzNWYxYmQzOWJhODc4NzMxZTMu
LmRhNDg0OTk3MTgzMTE2N2JmYWNmZTkyZDdhNTAxNjlkZDExNjQyMjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcApAQCAt
NjA1LDEzICs2MDUsMTUgQEAgc3RhdGljIGJvb2wgY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRh
VHlwZShjb25zdCBMZXZlbERCSXRlcmF0b3IqIGl0LCBjb25zdCBWZWMKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6
Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCkKKy8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBkbyBzb21lIGVycm9yIGhhbmRsaW5nIHJhdGhlciB0aGFuIHBsb3dpbmcgYWhlYWQgd2hlbiBi
YWQgZGF0YSBpcyBlbmNvdW50ZXJlZC4KK3ZvaWQgSURCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RT
dG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9y
ZU1hcCogb2JqZWN0U3RvcmVzKQogewogICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpn
ZXRPYmplY3RTdG9yZXMiKTsKLSAgICBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gb2Jq
ZWN0U3RvcmVzOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IE9iamVjdFN0b3Jl
TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCAxLCAwKTsKICAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gc3RvcEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRh
YmFzZUlkKTsKIAorICAgIEFTU0VSVChvYmplY3RTdG9yZXMtPmlzRW1wdHkoKSk7CisKICAgICBP
d25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAg
aXQtPnNlZWsoc3RhcnRLZXkpOwogICAgIHdoaWxlIChpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVL
ZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwKSB7CkBAIC02OTEsOSArNjkzLDEwIEBAIFZlY3Rv
cjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3Jl
cyhpbnQ2NF90IGRhdGFiYXNlCiAgICAgICAgICAgICBpdC0+bmV4dCgpOwogICAgICAgICB9CiAK
LSAgICAgICAgb2JqZWN0U3RvcmVzLmFwcGVuZChJREJPYmplY3RTdG9yZU1ldGFkYXRhKG9iamVj
dFN0b3JlTmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgbWF4SW5k
ZXhJZCkpOworICAgICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKG9iamVjdFN0
b3JlTmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgbWF4SW5kZXhJ
ZCk7CisgICAgICAgIGdldEluZGV4ZXMoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgJm1ldGFk
YXRhLmluZGV4ZXMpOworICAgICAgICBvYmplY3RTdG9yZXMtPnNldChvYmplY3RTdG9yZUlkLCBt
ZXRhZGF0YSk7CiAgICAgfQotICAgIHJldHVybiBvYmplY3RTdG9yZXM7CiB9CiAKIFdBUk5fVU5V
U0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBzZXRNYXhPYmplY3RTdG9yZUlkKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKQpAQCAtOTc5LDE0ICs5ODIsMTQgQEAgc3RhdGljIGJvb2wgY2hlY2tJbmRleEFuZE1ldGFE
YXRhS2V5KGNvbnN0IExldmVsREJJdGVyYXRvciogaXQsIGNvbnN0IFZlY3RvcjxjaGEKIH0KIAog
Ci1WZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gSURCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQorLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGRvIHNvbWUgZXJyb3IgaGFuZGxpbmcgcmF0aGVyIHRoYW4gcGxvd2luZyBhaGVhZCB3
aGVuIGJhZCBkYXRhIGlzIGVuY291bnRlcmVkLgordm9pZCBJREJCYWNraW5nU3RvcmU6OmdldElu
ZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIElEQk9iamVj
dFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwKiBpbmRleGVzKQogewogICAgIElEQl9UUkFDRSgiSURC
QmFja2luZ1N0b3JlOjpnZXRJbmRleGVzIik7Ci0gICAgVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+
IGluZGV4ZXM7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gSW5kZXhNZXRhRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDAsIDApOwogICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQgKyAxLCAwLCAwKTsKIAotICAgIEFTU0VSVChpbmRleGVzLmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUKGluZGV4ZXMtPmlzRW1wdHkoKSk7CiAKICAgICBPd25QdHI8TGV2
ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgaXQtPnNlZWso
c3RhcnRLZXkpOwpAQCAtMTAyOSw5ICsxMDMyLDggQEAgVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+
IElEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QK
ICAgICAgICAgICAgIGl0LT5uZXh0KCk7CiAgICAgICAgIH0KIAotICAgICAgICBpbmRleGVzLmFw
cGVuZChJREJJbmRleE1ldGFkYXRhKGluZGV4TmFtZSwgaW5kZXhJZCwga2V5UGF0aCwgaW5kZXhV
bmlxdWUsIGluZGV4TXVsdGlFbnRyeSkpOworICAgICAgICBpbmRleGVzLT5zZXQoaW5kZXhJZCwg
SURCSW5kZXhNZXRhZGF0YShpbmRleE5hbWUsIGluZGV4SWQsIGtleVBhdGgsIGluZGV4VW5pcXVl
LCBpbmRleE11bHRpRW50cnkpKTsKICAgICB9Ci0gICAgcmV0dXJuIGluZGV4ZXM7CiB9CiAKIFdB
Uk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBzZXRNYXhJbmRleElkKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDJmOTljYTMxNzE5NjFiMDQ0MTgyYWNjYWMz
YjA5MmNjZjYxMWFlMDYuLjY2YjcyZjRkOTk5Y2FmOWM3MzNmNzk4MTkyNTY4ZTZiNTY5YjM3MDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZS5oCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRl
SURCRGF0YWJhc2VJbnRWZXJzaW9uKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pOwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVE
YXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgdmlydHVhbCBWZWN0b3I8SURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YT4gZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCk7Cisg
ICAgdm9pZCBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBJREJEYXRhYmFzZU1l
dGFkYXRhOjpPYmplY3RTdG9yZU1hcCopOwogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RT
dG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0
aCYsIGJvb2wgYXV0b0luY3JlbWVudCk7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZU9iamVjdFN0
b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCkgV0FSTl9VTlVTRURfUkVUVVJOOwogCkBAIC04NSw3ICs4NSw2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJy
ZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdTdGF0ZSwgYm9vbCBjaGVja0N1
cnJlbnQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5P
YmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFJlY29yZElkZW50aWZp
ZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllciwgYm9vbCYgZm91bmQpIFdBUk5fVU5VU0VEX1JFVFVS
TjsKIAotICAgIHZpcnR1YWwgVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+IGdldEluZGV4ZXMoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwogICAgIHZpcnR1YWwgYm9v
bCBjcmVhdGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRp
RW50cnkpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCk7CiAgICAgdmlydHVhbCB2b2lkIHB1dEluZGV4RGF0YUZvclJlY29yZChJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgUmVj
b3JkSWRlbnRpZmllciYpOwpAQCAtMTY5LDYgKzE2OCw3IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0
ZToKICAgICBib29sIGZpbmRLZXlJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1hcnlLZXks
IGJvb2wmIGZvdW5kKTsKKyAgICB2b2lkIGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwKik7
CiAKICAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwogICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2Vu
ZEltcGw+IG1fZmFjdG9yeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAppbmRleCBmZWFiNWM1ZTNhMzY0NWYw
OTk0NDAwOWIwM2M5ZmNkNjA0ZGM2YjFhLi42NGM0YWFiNmYzNmU3MjkzZTVmNmE1YWJmMmZkMzBi
ODBlNDhhZmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCkBAIC0zMCwxMCArMzAsMTAgQEAKIAogI2lu
Y2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgorI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUVy
cm9yLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJREJL
ZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKICNpbmNs
dWRlICJJREJSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSURCVHJhY2luZy5oIgogI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCmluZGV4IDk2NjhkZmQzYTQ2
MzFlMzM4ZjQ3ZTM1NDc2MzcxZjE2MTY2ZmMzYzEuLjcxMmMyYjQzMTU3NzMwNDM3OWNiYzM5MjM1
ZWE2NTdkYTFlMTIyODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaApAQCAtNDEsOSArNDEsNyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOwotY2xhc3MgSURC
SW5kZXhCYWNrZW5kSW1wbDsKIGNsYXNzIElEQktleVJhbmdlOwotY2xhc3MgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDsKIAogY2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGwgOiBwdWJsaWMgSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZSB7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKaW5kZXggZWJkZTBmMTQ2MzJjZDYwYjY0
MTJhYThkNzc3YWQ5NjNiZTRlM2JmMi4uNzQ2NDZkMDA4MTc1ZGJhNGUxNWM5NDdkMTUyNjk5OTky
N2RhZmZkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmNwcApAQCAtMTg0LDE0ICsxODQsMTAgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY28K
ICAgICB9CiAKICAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBtX21ldGFkYXRhLm1heE9iamVj
dFN0b3JlSWQgKyAxOwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+
IG9iamVjdFN0b3JlQmFja2VuZCA9IG1fYmFja2VuZC0+Y3JlYXRlT2JqZWN0U3RvcmUob2JqZWN0
U3RvcmVJZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgbV92ZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmICghb2JqZWN0U3RvcmVCYWNrZW5kKSB7
Ci0gICAgICAgIEFTU0VSVChlYyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBtX2Jh
Y2tlbmQtPmNyZWF0ZU9iamVjdFN0b3JlKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5pZCgp
LCBvYmplY3RTdG9yZUlkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KTsKIAogICAgIElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEobmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0
aCwgYXV0b0luY3JlbWVudCwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpNaW5pbXVt
SW5kZXhJZCk7Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9i
amVjdFN0b3JlOjpjcmVhdGUobWV0YWRhdGEsIG9iamVjdFN0b3JlQmFja2VuZC5yZWxlYXNlKCks
IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YSwgbV92
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIG1fbWV0YWRhdGEub2JqZWN0U3Rv
cmVzLnNldChtZXRhZGF0YS5pZCwgbWV0YWRhdGEpOwogICAgICsrbV9tZXRhZGF0YS5tYXhPYmpl
Y3RTdG9yZUlkOwogCkBAIC0yMTYsMTEgKzIxMiw5IEBAIHZvaWQgSURCRGF0YWJhc2U6OmRlbGV0
ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmQtPmRlbGV0ZU9iamVjdFN0b3JlKG9i
amVjdFN0b3JlSWQsIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsK
LSAgICBpZiAoIWVjKSB7Ci0gICAgICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5vYmpl
Y3RTdG9yZURlbGV0ZWQobmFtZSk7Ci0gICAgICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJl
bW92ZShvYmplY3RTdG9yZUlkKTsKLSAgICB9CisgICAgbV9iYWNrZW5kLT5kZWxldGVPYmplY3RT
dG9yZShtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aWQoKSwgb2JqZWN0U3RvcmVJZCk7Cisg
ICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlRGVsZXRlZChuYW1lKTsK
KyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmVJZCk7CiB9CiAK
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2NvcGUs
IGNvbnN0IFN0cmluZyYgbW9kZVN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuY3BwCmluZGV4IDBkMWRkYjBkZmViYzA1ZGNlNTA3YmUwOWQ0MjFjMjZkMjY4YjRlMGUu
LjkyYzkxOGM5YTA2MTQwYjIwN2MzNzdkYzdkMGVjNTE5ODZmOTY5NmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZElt
cGwuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQkluZGV4QmFja2VuZEltcGwuaCIKICNp
bmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCVHJhY2lu
Zy5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKQEAgLTQwLDQwICsz
OSw0MCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CitjbGFzcyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlv
biA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJh
dGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2Us
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCisgICAg
c3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBj
cmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgY29uc3QgSURC
T2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oZGF0YWJhc2Us
IG9iamVjdFN0b3JlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlT2JqZWN0
U3RvcmVPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7CiAgICAg
fQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsK
IHByaXZhdGU6Ci0gICAgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKLSAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQot
ICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCisgICAgQ3JlYXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgY29u
c3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICAgICAg
OiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9vYmplY3RTdG9yZU1l
dGFkYXRhKG9iamVjdFN0b3JlTWV0YWRhdGEpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOwotICAgIFJlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEgbV9vYmplY3RTdG9yZU1ldGFkYXRhOwogfTsKIAotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK2NsYXNzIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
IDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0
aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICBz
dGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNy
ZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihkYXRhYmFzZSwg
b2JqZWN0U3RvcmUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVPYmplY3RT
dG9yZU9wZXJhdGlvbihiYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlTWV0YWRhdGEpKTsKICAgICB9
CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwog
cHJpdmF0ZToKLSAgICBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlKQotICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCi0g
ICAgICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAgICBEZWxldGVPYmplY3RTdG9y
ZU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBjb25z
dCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgICAgICA6
IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlTWV0
YWRhdGEob2JqZWN0U3RvcmVNZXRhZGF0YSkKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7CiB9OwogCiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6Ok9wZXJhdGlvbiB7CkBAIC0xMDAsNDAgKzk5LDQwIEBAIHByaXZhdGU6CiAgICAgUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tzOwogfTsKIAotY2xh
c3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlv
biA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworY2xhc3Mg
Q3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9u
KGRhdGFiYXNlLCBvYmplY3RTdG9yZSkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENy
ZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlSWQpKTsK
ICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCopOwogcHJpdmF0ZToKLSAgICBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCisgICAgQ3JlYXRlT2JqZWN0U3RvcmVB
Ym9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiAgICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkK
LSAgICAgICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQorICAgICAgICAsIG1fb2JqZWN0
U3RvcmVJZChvYmplY3RTdG9yZUlkKQogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKKyAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJ
ZDsKIH07CiAKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3Jl
QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0
aW9uIHsKK2NsYXNzIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQorICAgIHN0YXRpYyBQYXNzT3du
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGNvbnN0IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEmIG9iamVjdFN0b3JlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKGRhdGFiYXNlLCBvYmplY3RTdG9yZSkp
OwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKik7CiBwcml2YXRlOgotICAgIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICBEZWxldGVPYmplY3RTdG9y
ZUFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJh
c2UsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCiAg
ICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlKG9i
amVjdFN0b3JlKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RTdG9yZU1l
dGFkYXRhKQogICAgIHsKICAgICB9CiAKICAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4gbV9kYXRhYmFzZTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9v
YmplY3RTdG9yZTsKKyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmVNZXRh
ZGF0YTsKIH07CiAKIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VB
Ym9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRp
b24gewpAQCAtMTU2LDYgKzE1NSw4NiBAQCBwcml2YXRlOgogICAgIGludDY0X3QgbV9wcmV2aW91
c0ludFZlcnNpb247CiB9OwogCitjbGFzcyBDcmVhdGVJbmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRl
KFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlSW5kZXhPcGVyYXRpb24oYmFja2luZ1N0
b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7CisgICAgfQorICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKK3ByaXZhdGU6CisgICAg
Q3JlYXRlSW5kZXhPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRl
eE1ldGFkYXRhKQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAg
ICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2luZGV4TWV0
YWRhdGEoaW5kZXhNZXRhZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgaW50NjRfdCBtX29iamVj
dFN0b3JlSWQ7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Cit9
OworCitjbGFzcyBEZWxldGVJbmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVJbmRl
eE9wZXJhdGlvbihiYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKTsKKyAgICB9
CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwor
cHJpdmF0ZToKKyAgICBEZWxldGVJbmRleE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCkKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9v
YmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4SWQp
CisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFj
a2luZ1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0
IGludDY0X3QgbV9pbmRleElkOworfTsKKworY2xhc3MgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlv
biA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJh
dGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2Us
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKGRhdGFiYXNlLCBv
YmplY3RTdG9yZUlkLCBpbmRleElkKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
KElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKK3ByaXZhdGU6CisgICAgQ3JlYXRlSW5kZXhB
Ym9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKKyAgICAgICAgOiBtX2Rh
dGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlk
KQorICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQorICAgIHsKKyAgICB9CisKKyAgICBjb25z
dCBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKyAgICBjb25zdCBp
bnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKK307
CisKK2NsYXNzIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9i
amVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOworcHJpdmF0ZToKKyAgICBEZWxldGVJ
bmRleEFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0
YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5k
ZXhNZXRhZGF0YSkKKyAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1f
b2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShp
bmRleE1ldGFkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3Rv
cmVJZDsKKyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKK307CisK
IGNsYXNzIEdldE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29y
VHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKQEAgLTE3NSw2ICsyNTQs
NyBAQCBwcml2YXRlOgogICAgICAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQogICAgICAg
ICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKICAgICB7CisgICAgICAgIEFTU0VSVChtZXRhZGF0
YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwogICAgICAgICBBU1NFUlQo
bWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKS5pZCA9PSBvYmplY3RTdG9y
ZUlkKTsKICAgICB9CiAKQEAgLTQwNSw2ICs0ODUsNDYgQEAgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdT
dG8KICAgICBBU1NFUlQoIW1fbWV0YWRhdGEubmFtZS5pc051bGwoKSk7CiB9CiAKK3ZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6YWRkT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmUsIGludDY0X3QgbmV3TWF4T2JqZWN0U3RvcmVJZCkKK3sKKyAg
ICBBU1NFUlQoIW1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLmlk
KSk7CisgICAgaWYgKG5ld01heE9iamVjdFN0b3JlSWQgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0
YTo6SW52YWxpZElkKSB7CisgICAgICAgIEFTU0VSVChtX21ldGFkYXRhLm1heE9iamVjdFN0b3Jl
SWQgPCBuZXdNYXhPYmplY3RTdG9yZUlkKTsKKyAgICAgICAgbV9tZXRhZGF0YS5tYXhPYmplY3RT
dG9yZUlkID0gbmV3TWF4T2JqZWN0U3RvcmVJZDsKKyAgICB9CisgICAgbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlLmlkLCBvYmplY3RTdG9yZSk7Cit9CisKK3ZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9y
ZUlkKQoreworICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmpl
Y3RTdG9yZUlkKSk7CisgICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0
b3JlSWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFkZEluZGV4KGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXgsIGludDY0X3Qg
bmV3TWF4SW5kZXhJZCkKK3sKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29u
dGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0
U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisKKyAg
ICBBU1NFUlQoIW9iamVjdFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5kZXguaWQpKTsKKyAgICBv
YmplY3RTdG9yZS5pbmRleGVzLnNldChpbmRleC5pZCwgaW5kZXgpOworICAgIGlmIChuZXdNYXhJ
bmRleElkICE9IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICBBU1NFUlQo
b2JqZWN0U3RvcmUubWF4SW5kZXhJZCA8IG5ld01heEluZGV4SWQpOworICAgICAgICBvYmplY3RT
dG9yZS5tYXhJbmRleElkID0gbmV3TWF4SW5kZXhJZDsKKyAgICB9CisgICAgbV9tZXRhZGF0YS5v
YmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlSWQsIG9iamVjdFN0b3JlKTsKK30KKwordm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCkKK3sKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
Y29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2Jq
ZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisK
KyAgICBBU1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7CisgICAg
b2JqZWN0U3RvcmUuaW5kZXhlcy5yZW1vdmUoaW5kZXhJZCk7CisgICAgbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlSWQsIG9iamVjdFN0b3JlKTsKK30KKwogYm9vbCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwoKQogewogICAgIGJvb2wgc3VjY2VzcyA9
IGZhbHNlOwpAQCAtNDEzLDcgKzUzMyw3IEBAIGJvb2wgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
b3BlbkludGVybmFsKCkKICAgICBpZiAoIW9rKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKHN1Y2Nlc3MpIHsKLSAgICAgICAgbG9hZE9iamVjdFN0b3JlcygpOworICAgICAgICBtX2Jh
Y2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVzKG1fbWV0YWRhdGEuaWQsICZtX21ldGFkYXRhLm9i
amVjdFN0b3Jlcyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gbV9i
YWNraW5nU3RvcmUtPmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEobV9tZXRhZGF0YS5uYW1lLCBt
X21ldGFkYXRhLnZlcnNpb24sIG1fbWV0YWRhdGEuaW50VmVyc2lvbiwgbV9tZXRhZGF0YS5pZCk7
CkBAIC00MzAsNjQgKzU1MCwxMTIgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmJhY2tpbmdTdG9yZSgpIGNvbnN0CiAKIElEQkRhdGFiYXNlTWV0
YWRhdGEgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEoKSBjb25zdAogewotICAgIC8v
IEZJWE1FOiBGaWd1cmUgb3V0IGEgd2F5IHRvIGtlZXAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
Z2V0KE4pLmluZGV4ZXMgdXAgdG8gZGF0ZSByYXRoZXIgdGhhbiByZWdlbmVyYXRpbmcgdGhpcyBl
dmVyeSB0aW1lLgotICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEobV9tZXRhZGF0YSk7
Ci0gICAgZm9yIChPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29iamVjdFN0
b3Jlcy5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkKLSAgICAgICAg
bWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChpdC0+dmFsdWUtPmlkKCksIGl0LT52YWx1ZS0+bWV0
YWRhdGEoKSk7Ci0gICAgcmV0dXJuIG1ldGFkYXRhOworICAgIHJldHVybiBtX21ldGFkYXRhOwog
fQogCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZShp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCiB7
Ci0gICAgQVNTRVJUKCFtX29iamVjdFN0b3Jlcy5jb250YWlucyhpZCkpOwotCi0gICAgUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMsIElEQk9iamVjdFN0b3JlTWV0YWRhdGEobmFtZSwgaWQs
IGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6
TWluaW11bUluZGV4SWQpKTsKLSAgICBBU1NFUlQob2JqZWN0U3RvcmUtPm5hbWUoKSA9PSBuYW1l
KTsKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0
b3JlIik7CisgICAgQVNTRVJUKCFtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmpl
Y3RTdG9yZUlkKSk7CiAKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJh
bnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRy
KTsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVS
U0lPTl9DSEFOR0UpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2Fj
dGlvbklkKSk7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBt
X3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CiAKLSAgICAvLyBGSVhNRTogRml4IGVk
Z2UgY2FzZXMgYXJvdW5kIHRyYW5zYWN0aW9uIGFib3J0cyB0aGF0IHByZXZlbnQgdGhpcyBmcm9t
IGp1c3QgYmVpbmcgQVNTRVJUKGlkID09IG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCArIDEp
Ci0gICAgQVNTRVJUKGlkID4gbV9tZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlkKTsKLSAgICBtX21l
dGFkYXRhLm1heE9iamVjdFN0b3JlSWQgPSBpZDsKKyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRh
IG9iamVjdFN0b3JlTWV0YWRhdGEobmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0aCwgYXV0b0lu
Y3JlbWVudCwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpNaW5pbXVtSW5kZXhJZCk7
CiAKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3JlYXRlT2JqZWN0U3RvcmVP
cGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZSksIENyZWF0ZU9iamVjdFN0b3JlQWJv
cnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZSkpKSB7Ci0gICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQorICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3JlYXRlT2Jq
ZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVNZXRh
ZGF0YSksIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmpl
Y3RTdG9yZUlkKSk7CiAKLSAgICBtX29iamVjdFN0b3Jlcy5zZXQoaWQsIG9iamVjdFN0b3JlKTsK
LSAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOworICAgIGFkZE9iamVjdFN0b3JlKG9i
amVjdFN0b3JlTWV0YWRhdGEsIG9iamVjdFN0b3JlSWQpOwogfQogCi12b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQordm9pZCBDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikK
IHsKICAgICBJREJfVFJBQ0UoIkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7Ci0gICAgaWYg
KCFtX2RhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2UtPmlkKCksIG1fb2JqZWN0
U3RvcmUtPmlkKCksIG1fb2JqZWN0U3RvcmUtPm5hbWUoKSwgbV9vYmplY3RTdG9yZS0+a2V5UGF0
aCgpLCBtX29iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCkpKSB7Ci0gICAgICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJy
b3IgY3JlYXRpbmcgb2JqZWN0IHN0b3JlICclcycuIiwgbV9vYmplY3RTdG9yZS0+bmFtZSgpLnV0
ZjgoKS5kYXRhKCkpKTsKKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9y
ZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgdHJhbnNhY3Rpb24tPmRh
dGFiYXNlKCktPmlkKCksIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCwgbV9vYmplY3RTdG9yZU1l
dGFkYXRhLm5hbWUsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5rZXlQYXRoLCBtX29iamVjdFN0b3Jl
TWV0YWRhdGEuYXV0b0luY3JlbWVudCkpIHsKKyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJy
b3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBjcmVhdGluZyBv
YmplY3Qgc3RvcmUgJyVzJy4iLCBtX29iamVjdFN0b3JlTWV0YWRhdGEubmFtZS51dGY4KCkuZGF0
YSgpKSk7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogfQogCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9iamVjdFN0b3JlKGludDY0X3QgaWQpCit2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewotICAgIHJldHVybiBtX29iamVj
dFN0b3Jlcy5nZXQoaWQpOworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
ZGVsZXRlT2JqZWN0U3RvcmUiKTsKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
Y29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEmIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2Jq
ZWN0U3RvcmVJZCk7CisKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNh
Y3Rpb25JZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0g
bV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIEFTU0VSVCh0cmFuc2FjdGlv
bi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CisKKyAgICB0cmFu
c2FjdGlvbi0+c2NoZWR1bGVUYXNrKERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUo
bV9iYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlTWV0YWRhdGEpLCAgRGVsZXRlT2JqZWN0U3RvcmVB
Ym9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlTWV0YWRhdGEpKTsKKyAgICBy
ZW1vdmVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGlkLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVu
dHJ5KQogewotICAgIEFTU0VSVChtX29iamVjdFN0b3Jlcy5jb250YWlucyhpZCkpOworICAgIElE
Ql9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgiKTsKKyAgICBBU1NF
UlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAg
IGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9i
amVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jlcy5nZXQoaWQpOwotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOworICAgIEFTU0VSVCghb2Jq
ZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7CisgICAgY29uc3QgSURCSW5kZXhN
ZXRhZGF0YSBpbmRleE1ldGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVs
dGlFbnRyeSk7CisKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rp
b25JZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+
bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CiAKLSAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0
ZSh0aGlzLCBvYmplY3RTdG9yZSksIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNy
ZWF0ZSh0aGlzLCBvYmplY3RTdG9yZSkpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1
bGVUYXNrKENyZWF0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIG9iamVj
dFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpLCBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVh
dGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCkpOworCisgICAgYWRkSW5kZXgob2JqZWN0
U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSwgaW5kZXhJZCk7Cit9CisKKwordm9pZCBDcmVhdGVJbmRl
eE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlv
bikKK3sKKyAgICBJREJfVFJBQ0UoIkNyZWF0ZUluZGV4T3BlcmF0aW9uIik7CisgICAgaWYgKCFt
X2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5pZCgpLCBtX29iamVjdFN0b3JlSWQs
IG1faW5kZXhNZXRhZGF0YS5pZCwgbV9pbmRleE1ldGFkYXRhLm5hbWUsIG1faW5kZXhNZXRhZGF0
YS5rZXlQYXRoLCBtX2luZGV4TWV0YWRhdGEudW5pcXVlLCBtX2luZGV4TWV0YWRhdGEubXVsdGlF
bnRyeSkpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgi
SW50ZXJuYWwgZXJyb3Igd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGluZGV4ICclcycuIiwgbV9pbmRl
eE1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBtX29iamVjdFN0b3Jlcy5yZW1vdmUoaWQpOworfQorCit2b2lkIENyZWF0ZUluZGV4QWJv
cnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rp
b24pCit7CisgICAgSURCX1RSQUNFKCJDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uIik7CisgICAg
QVNTRVJUKCF0cmFuc2FjdGlvbik7CisgICAgbV9kYXRhYmFzZS0+cmVtb3ZlSW5kZXgobV9vYmpl
Y3RTdG9yZUlkLCBtX2luZGV4SWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQpCit7CisgICAgSURCX1RSQUNFKCJJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpkZWxldGVJbmRleCIpOworICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5j
b250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlk
KTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsK
KyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhID0gb2JqZWN0U3RvcmUu
aW5kZXhlcy5nZXQoaW5kZXhJZCk7CisKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFp
bnModHJhbnNhY3Rpb25JZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5z
YWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIEFTU0VSVCh0
cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CisK
KyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKERlbGV0ZUluZGV4T3BlcmF0aW9uOjpjcmVh
dGUobV9iYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpLCBEZWxldGVJbmRleEFi
b3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkp
OworCisgICAgcmVtb3ZlSW5kZXgob2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7Cit9CisKK3ZvaWQg
RGVsZXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCog
dHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJEZWxldGVJbmRleE9wZXJhdGlvbiIpOwor
ICAgIG1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPmlkKCksIG1fb2JqZWN0U3Rv
cmVJZCwgbV9pbmRleElkKTsKK30KKwordm9pZCBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQoreworICAgIElE
Ql9UUkFDRSgiRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbiIpOworICAgIEFTU0VSVCghdHJhbnNh
Y3Rpb24pOworICAgIG1fZGF0YWJhc2UtPmFkZEluZGV4KG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRl
eE1ldGFkYXRhLCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpOwogfQogCiB2b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCkBAIC01MDgs
NyArNjc2LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpnZXQoaW50NjRfdCB0cmFu
c2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGkKICAgICBBU1NFUlQobV90cmFuc2Fj
dGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpOwogICAgIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwog
Ci0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhHZXRPcGVyYXRpb246OmNyZWF0ZShtX2Jh
Y2tpbmdTdG9yZSwgbWV0YWRhdGEoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2Us
IGtleU9ubHkgPyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5IDogSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZTo6S2V5QW5kVmFsdWUsIGNhbGxiYWNrcykpOworICAgIHRyYW5zYWN0
aW9uLT5zY2hlZHVsZVRhc2soR2V0T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIG1f
bWV0YWRhdGEsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBrZXlPbmx5ID8gSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5T25seSA6IElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6OktleUFuZFZhbHVlLCBjYWxsYmFja3MpKTsKIH0KIAogdm9pZCBHZXRPcGVyYXRpb246OnBl
cmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCkBAIC02MDcsNyAr
Nzc1LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwdXQoaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFYKICAgICBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsK
ICAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9P
TkxZKTsKIAotICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRh
ZGF0YSA9IG1ldGFkYXRhKCkub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKyAgICBj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBtX21ldGFk
YXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CiAKICAgICBBU1NFUlQob2JqZWN0
U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50IHx8IGtleS5nZXQoKSk7CiAKQEAgLTcxNSw4ICs4
ODMsOCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0UwogICAgIFZlY3RvcjxPd25QdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOwogICAgIFN0
cmluZyBlcnJvck1lc3NhZ2U7CiAgICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRzID0gZmFsc2U7Ci0g
ICAgQVNTRVJUKG1ldGFkYXRhKCkub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQp
KTsKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRh
ID0gbWV0YWRhdGEoKS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworICAgIEFTU0VS
VChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAg
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKICAgICBib29sIGJhY2tpbmdT
dG9yZVN1Y2Nlc3MgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjptYWtlSW5kZXhXcml0ZXJz
KHRyYW5zYWN0aW9uLCBzdG9yZS5nZXQoKSwgaWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgcHJp
bWFyeUtleSwgZmFsc2UsIGluZGV4SWRzLCBpbmRleEtleXMsICZpbmRleFdyaXRlcnMsICZlcnJv
ck1lc3NhZ2UsIG9iZXlzQ29uc3RyYWludHMpOwogICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2Vz
cykgewogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFj
a2luZyBzdG9yZSBlcnJvciB1cGRhdGluZyBpbmRleCBrZXlzLiIpKTsKQEAgLTgwMyw3ICs5NzEs
NyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvdW50KGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLAogICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6Y291bnQiKTsKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnMo
dHJhbnNhY3Rpb25JZCkpOwogICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0
aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIEFTU0VSVChtZXRh
ZGF0YSgpLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgQVNTRVJU
KG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKICAgICB0
cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENvdW50T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5n
U3RvcmUsIGlkKCksIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3Mp
KTsKIH0KIApAQCAtODQzLDcgKzEwMTEsNiBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdAogdm9p
ZCBEZWxldGVSYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIkRlbGV0ZVJhbmdlT3BlcmF0aW9uIik7
Ci0KICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNv
ciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBt
X2tleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwogICAgIGlmIChiYWNraW5nU3RvcmVD
dXJzb3IpIHsKICAgICAgICAgZG8gewpAQCAtODcyLDEyICsxMDM5LDEyIEBAIHZvaWQgQ2xlYXJP
cGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24p
CiAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQordm9pZCBEZWxldGVPYmplY3RTdG9yZU9wZXJh
dGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsK
ICAgICBJREJfVFJBQ0UoIkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7Ci0gICAgYm9vbCBv
ayA9IG1fZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZSh0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZS0+aWQoKSwgbV9vYmpl
Y3RTdG9yZS0+aWQoKSk7CisgICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmpl
Y3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCktPmlkKCksIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCk7CiAgICAgaWYg
KCFvaykgewotICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3Ry
aW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIGRlbGV0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIs
IG1fb2JqZWN0U3RvcmUtPm5hbWUoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJy
b3IgZGVsZXRpbmcgb2JqZWN0IHN0b3JlICclcycuIiwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5h
bWUudXRmOCgpLmRhdGEoKSkpOwogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IpOwog
ICAgIH0KIH0KQEAgLTExMzIsNyArMTI5OSw3IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6ZGVsZXRlRGF0YWJhc2VGaW5hbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhCiAg
ICAgbV9tZXRhZGF0YS52ZXJzaW9uID0gTm9TdHJpbmdWZXJzaW9uOwogICAgIG1fbWV0YWRhdGEu
aWQgPSBJbnZhbGlkSWQ7CiAgICAgbV9tZXRhZGF0YS5pbnRWZXJzaW9uID0gSURCRGF0YWJhc2VN
ZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOwotICAgIG1fb2JqZWN0U3RvcmVzLmNsZWFyKCk7CisgICAg
bV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY2xlYXIoKTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2Vz
cygpOwogfQogCkBAIC0xMTc3LDM1ICsxMzQ0LDIzIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tz
CiAgICAgbV9jbG9zaW5nQ29ubmVjdGlvbiA9IGZhbHNlOwogfQogCi12b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmxvYWRPYmplY3RTdG9yZXMoKQotewotICAgIFZlY3RvcjxpbnQ2NF90PiBp
ZHM7Ci0gICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7Ci0gICAgVmVjdG9yPElEQktleVBhdGg+IGtl
eVBhdGhzOwotICAgIFZlY3Rvcjxib29sPiBhdXRvSW5jcmVtZW50RmxhZ3M7Ci0gICAgVmVjdG9y
PGludDY0X3Q+IG1heEluZGV4SWRzOwotICAgIFZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRh
PiBvYmplY3RTdG9yZXMgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVzKG1fbWV0YWRh
dGEuaWQpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTdG9yZXMuc2l6ZSgp
OyBpKyspCi0gICAgICAgIG1fb2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZXNbaV0uaWQsIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZXNbaV0pKTsK
LX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0
T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9u
KQordm9pZCBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogeworICAgIElEQl9UUkFDRSgiQ3JlYXRl
T2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiIpOwogICAgIEFTU0VSVCghdHJhbnNhY3Rpb24pOwot
ICAgIEFTU0VSVChtX2RhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlucyhtX29iamVjdFN0
b3JlLT5pZCgpKSk7Ci0gICAgbV9kYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMucmVtb3ZlKG1fb2Jq
ZWN0U3RvcmUtPmlkKCkpOworICAgIG1fZGF0YWJhc2UtPnJlbW92ZU9iamVjdFN0b3JlKG1fb2Jq
ZWN0U3RvcmVJZCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6RGVsZXRlT2Jq
ZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KiB0cmFuc2FjdGlvbikKK3ZvaWQgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKKyAgICBJREJf
VFJBQ0UoIkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24iKTsKICAgICBBU1NFUlQoIXRy
YW5zYWN0aW9uKTsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRh
aW5zKG1fb2JqZWN0U3RvcmUtPmlkKCkpKTsKLSAgICBtX2RhdGFiYXNlLT5tX29iamVjdFN0b3Jl
cy5zZXQobV9vYmplY3RTdG9yZS0+aWQoKSwgbV9vYmplY3RTdG9yZSk7CisgICAgbV9kYXRhYmFz
ZS0+YWRkT2JqZWN0U3RvcmUobV9vYmplY3RTdG9yZU1ldGFkYXRhLCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhOjpJbnZhbGlkSWQpOwogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZl
cnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKiB0cmFuc2FjdGlvbikKIHsKKyAgICBJREJfVFJBQ0UoIlZlcnNpb25DaGFuZ2VBYm9ydE9w
ZXJhdGlvbiIpOwogICAgIEFTU0VSVCghdHJhbnNhY3Rpb24pOwogICAgIG1fZGF0YWJhc2UtPm1f
bWV0YWRhdGEudmVyc2lvbiA9IG1fcHJldmlvdXNWZXJzaW9uOwogICAgIG1fZGF0YWJhc2UtPm1f
bWV0YWRhdGEuaW50VmVyc2lvbiA9IG1fcHJldmlvdXNJbnRWZXJzaW9uOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5oCmluZGV4IDk0NGI4MzAwYzdlMzIyM2JkZDM0NGJiNWJhODFkMWMzYjE0ZmExNjIuLjM0N2Yy
M2VkMWJhYzUxNzljOGY2NjcxNjNiMDI4MzU3YTYzZmYyOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgK
QEAgLTQwLDcgKzQwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCQmFja2luZ1N0
b3JlOwogY2xhc3MgSURCRGF0YWJhc2U7CiBjbGFzcyBJREJGYWN0b3J5QmFja2VuZEltcGw7Ci1j
bGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOwogY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDsKIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKIGNsYXNzIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CkBAIC01NCwxNiArNTMsMjAgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKICAgICBpbnQ2NF90IGlkKCkg
Y29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5pZDsgfQorICAgIHZvaWQgYWRkT2JqZWN0U3RvcmUo
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIGludDY0X3QgbmV3TWF4T2JqZWN0U3RvcmVJ
ZCk7CisgICAgdm9pZCByZW1vdmVPYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwor
ICAgIHZvaWQgYWRkSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1l
dGFkYXRhJiwgaW50NjRfdCBuZXdNYXhJbmRleElkKTsKKyAgICB2b2lkIHJlbW92ZUluZGV4KGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKIAogICAgIHZvaWQgb3BlbkNv
bm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24pOwogICAg
IHZvaWQgZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAogICAgIC8v
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZQogICAgIHZpcnR1YWwgSURCRGF0YWJhc2VNZXRh
ZGF0YSBtZXRhZGF0YSgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgaWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9v
bCBhdXRvSW5jcmVtZW50KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2
b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3Rv
cmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGlkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSAgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUo
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCk7CisgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKTsKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgbWV0aG9k
IGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM5MjMuCiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gY3JlYXRl
VHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4m
IG9iamVjdFN0b3JlSWRzLCBJREJUcmFuc2FjdGlvbjo6TW9kZSk7CiAgICAgdmlydHVhbCB2b2lk
IGNyZWF0ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMs
IHVuc2lnbmVkIHNob3J0IG1vZGUpOwpAQCAtNzIsMTAgKzc1LDkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBjb21taXQoaW50NjRfdCB0cmFuc2FjdGlvbklkKTsKICAgICB2aXJ0dWFsIHZv
aWQgYWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjcmVh
dGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29s
IHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAg
dmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSk7CisgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwogCi0gICAgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZShpbnQ2NF90IGlkKTsKICAgICBJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3QgeyByZXR1cm4g
bV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9CiAgICAgdm9pZCB0cmFuc2FjdGlvblN0
YXJ0ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAgICAgdm9pZCB0
cmFuc2FjdGlvbkZpbmlzaGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4p
OwpAQCAtOTYsMjAgKzk4LDE1IEBAIHByaXZhdGU6CiAKICAgICBib29sIG9wZW5JbnRlcm5hbCgp
OwogICAgIHZvaWQgcnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKTsKLSAgICB2b2lkIGxvYWRPYmpl
Y3RTdG9yZXMoKTsKICAgICBzaXplX3QgY29ubmVjdGlvbkNvdW50KCk7CiAgICAgdm9pZCBwcm9j
ZXNzUGVuZGluZ0NhbGxzKCk7CiAKICAgICBib29sIGlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCk7
CiAgICAgdm9pZCBkZWxldGVEYXRhYmFzZUZpbmFsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7
CiAKLSAgICBjbGFzcyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjsKLSAgICBjbGFzcyBEZWxl
dGVPYmplY3RTdG9yZU9wZXJhdGlvbjsKICAgICBjbGFzcyBWZXJzaW9uQ2hhbmdlT3BlcmF0aW9u
OwogCiAgICAgLy8gV2hlbiBhICJ2ZXJzaW9uY2hhbmdlIiB0cmFuc2FjdGlvbiBhYm9ydHMsIHRo
ZXNlIHJlc3RvcmUgdGhlIGJhY2stZW5kIG9iamVjdCBoaWVyYXJjaHkuCi0gICAgY2xhc3MgQ3Jl
YXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjsKLSAgICBjbGFzcyBEZWxldGVPYmplY3RTdG9y
ZUFib3J0T3BlcmF0aW9uOwogICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjsK
IAogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwpAQCAtMTE5LDkg
KzExNiw2IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyBtaWdodCBub3QgbmVlZCB0byBiZSBhIFJl
ZlB0ciBzaW5jZSB0aGUgZmFjdG9yeSdzIGxpZmV0aW1lIGlzIHRoYXQgb2YgdGhlIHBhZ2UgZ3Jv
dXAsIGJ1dCBpdCdzIGJldHRlciB0byBiZSBjb25zZXJ2aXRpdmUgdGhhbiBzb3JyeS4KICAgICBS
ZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBtX2ZhY3Rvcnk7CiAKLSAgICB0eXBlZGVmIEhh
c2hNYXA8aW50NjRfdCwgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+ID4gT2JqZWN0
U3RvcmVNYXA7Ci0gICAgT2JqZWN0U3RvcmVNYXAgbV9vYmplY3RTdG9yZXM7Ci0KICAgICBPd25Q
dHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcj4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yOwog
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBtX3J1bm5pbmdWZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb247CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDg5NDBjNWU3ZTE4YmJhNGE4MDU1NjRlNGJlODQ2ZjkzMjQ3M2I4MWEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQklu
ZGV4QmFja2VuZEltcGwuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5j
bHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5j
bHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJ
REJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQk1ldGFkYXRh
LmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklE
QlRyYWNpbmcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotSURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5k
SW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSwgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYgbWV0YWRhdGEpCi0gICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICwg
bV9tZXRhZGF0YShtZXRhZGF0YSkKLXsKLX0KLQotSURCSW5kZXhCYWNrZW5kSW1wbDo6fklEQklu
ZGV4QmFja2VuZEltcGwoKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMWE5Mzk5OWUxNjMzZDRmN2ZhNzFlOWI2ODc0ZGUxODEwMWMyMGU5YS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJJbmRleEJhY2tlbmRJbXBsX2gK
LSNkZWZpbmUgSURCSW5kZXhCYWNrZW5kSW1wbF9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKLQotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRl
ICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW50
ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCS2V5UGF0aC5oIgotI2luY2x1ZGUgIklEQk1ldGFkYXRh
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlOwotY2xh
c3MgSURCS2V5OwotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKLQotY2xhc3MgSURC
SW5kZXhCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UgewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShj
b25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSwgY29uc3QgSURCSW5kZXhNZXRh
ZGF0YSYgbWV0YWRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQklu
ZGV4QmFja2VuZEltcGwoZGF0YWJhc2UsIG1ldGFkYXRhKSk7Ci0gICAgfQotICAgIHZpcnR1YWwg
fklEQkluZGV4QmFja2VuZEltcGwoKTsKLQotICAgIGludDY0X3QgaWQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEuaWQgIT0gSW52YWxpZElkKTsKLSAgICAgICAgcmV0
dXJuIG1fbWV0YWRhdGEuaWQ7Ci0gICAgfQotCi0gICAgLy8gSURCSW5kZXhCYWNrZW5kSW50ZXJm
YWNlCi0gICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4s
IHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZp
cnR1YWwgdm9pZCBvcGVuS2V5Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25l
ZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lk
IGdldEtleShQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQotCi0gICAgSURCSW5kZXhNZXRhZGF0YSBtZXRhZGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KLSAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSB7IHJl
dHVybiBtX21ldGFkYXRhLm5hbWU7IH0KLSAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKCkg
eyByZXR1cm4gbV9tZXRhZGF0YS5rZXlQYXRoOyB9Ci0gICAgY29uc3QgYm9vbCYgdW5pcXVlKCkg
eyByZXR1cm4gbV9tZXRhZGF0YS51bmlxdWU7IH0KLSAgICBjb25zdCBib29sJiBtdWx0aUVudHJ5
KCkgeyByZXR1cm4gbV9tZXRhZGF0YS5tdWx0aUVudHJ5OyB9Ci0KLXByaXZhdGU6Ci0gICAgSURC
SW5kZXhCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiwgY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYpOwotCi0gICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0g
MDsKLQotICAgIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSBjb25z
dCB7IHJldHVybiBtX2RhdGFiYXNlLT5iYWNraW5nU3RvcmUoKTsgfQotICAgIGludDY0X3QgZGF0
YWJhc2VJZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UtPmlkKCk7IH0KLQotICAgIGNvbnN0
IElEQkRhdGFiYXNlQmFja2VuZEltcGwqIG1fZGF0YWJhc2U7Ci0KLSAgICBJREJJbmRleE1ldGFk
YXRhIG1fbWV0YWRhdGE7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgot
Ci0jZW5kaWYgLy8gSURCSW5kZXhCYWNrZW5kSW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggODkxMjUzZDllMDRj
OTFlOTVhZWViMjMwNDU0NWYyNDY2YTAyNzI1ZS4uZjUwZmUxZWJiODA4MmUyMTc2ZjhkNGZlZDMw
ZDlhYWIwMzI1NWY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtNDksMTMgKzQ5LDExIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRlZmF1bHREaXJlY3Rpb24gPSBJ
REJDdXJzb3I6Ok5FWFQ7CiAKLUlEQk9iamVjdFN0b3JlOjpJREJPYmplY3RTdG9yZShjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0YSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U+IGlkYk9iamVjdFN0b3JlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24pCitJREJPYmplY3RTdG9yZTo6SURCT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSYgbWV0YWRhdGEsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKICAgICA6
IG1fbWV0YWRhdGEobWV0YWRhdGEpCi0gICAgLCBtX2JhY2tlbmQoaWRiT2JqZWN0U3RvcmUpCiAg
ICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQogICAgICwgbV9kZWxldGVkKGZhbHNlKQog
ewotICAgIEFTU0VSVChtX2JhY2tlbmQpOwogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKICAg
ICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4gYmUg
YWRvcHRlZC4KICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKQEAgLTM4NSw5ICszODMs
NyBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dAogICAgIH0KIAogICAgIGludDY0X3QgaW5kZXhJ
ZCA9IG1fbWV0YWRhdGEubWF4SW5kZXhJZCArIDE7Ci0gICAgbV9iYWNrZW5kLT5jcmVhdGVJbmRl
eChpbmRleElkLCBuYW1lLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnksIG1fdHJhbnNhY3Rp
b24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuIDA7CisgICAg
YmFja2VuZERCKCktPmNyZWF0ZUluZGV4KG1fdHJhbnNhY3Rpb24tPmlkKCksIGlkKCksIGluZGV4
SWQsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7CiAKICAgICArK21fbWV0YWRh
dGEubWF4SW5kZXhJZDsKIApAQCAtNDY2LDE0ICs0NjIsMTMgQEAgdm9pZCBJREJPYmplY3RTdG9y
ZTo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZC0+ZGVsZXRlSW5kZXgoaW5kZXhJ
ZCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgaWYgKCFlYykgewotICAgICAg
ICBJREJJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4TWFwLmZpbmQobmFtZSk7Ci0gICAg
ICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICBtX21ldGFkYXRh
LmluZGV4ZXMucmVtb3ZlKGl0LT52YWx1ZS0+aWQoKSk7Ci0gICAgICAgICAgICBpdC0+dmFsdWUt
Pm1hcmtEZWxldGVkKCk7Ci0gICAgICAgICAgICBtX2luZGV4TWFwLnJlbW92ZShuYW1lKTsKLSAg
ICAgICAgfQorICAgIGJhY2tlbmREQigpLT5kZWxldGVJbmRleChtX3RyYW5zYWN0aW9uLT5pZCgp
LCBpZCgpLCBpbmRleElkKTsKKworICAgIElEQkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5k
ZXhNYXAuZmluZChuYW1lKTsKKyAgICBpZiAoaXQgIT0gbV9pbmRleE1hcC5lbmQoKSkgeworICAg
ICAgICBtX21ldGFkYXRhLmluZGV4ZXMucmVtb3ZlKGl0LT52YWx1ZS0+aWQoKSk7CisgICAgICAg
IGl0LT52YWx1ZS0+bWFya0RlbGV0ZWQoKTsKKyAgICAgICAgbV9pbmRleE1hcC5yZW1vdmUobmFt
ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaAppbmRleCA3ZTJmNzJmYWVhODUxOTNjMzA5M2VkNjNkODVhYTJhNTAy
ZjNjMDI3Li42ZGZkOTc4OGE1MDhjNmI5ODUyMGRlMGY0MWQzMWRkMTNmZGEyN2FmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKQEAg
LTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiSURCQ3Vy
c29yLmgiCiAjaW5jbHVkZSAiSURCSW5kZXguaCIKLSNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJJREJLZXlSYW5nZS5o
IgogI2luY2x1ZGUgIklEQk1ldGFkYXRhLmgiCkBAIC01Miw5ICs1MSw5IEBAIGNsYXNzIElEQkFu
eTsKIAogY2xhc3MgSURCT2JqZWN0U3RvcmUgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJs
aWMgUmVmQ291bnRlZDxJREJPYmplY3RTdG9yZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlPiBjcmVhdGUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSYgbWV0YWRhdGEsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBi
YWNrZW5kLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBt
ZXRhZGF0YSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJREJPYmplY3RTdG9yZShtZXRhZGF0YSwgYmFja2VuZCwgdHJhbnNh
Y3Rpb24pKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJPYmplY3RTdG9yZShtZXRh
ZGF0YSwgdHJhbnNhY3Rpb24pKTsKICAgICB9CiAgICAgfklEQk9iamVjdFN0b3JlKCkgeyB9CiAK
QEAgLTEwOSw3ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlKiBiYWNrZW5kREIoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBJREJPYmplY3RTdG9yZShj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U+LCBJREJUcmFuc2FjdGlvbiopOworICAgIElEQk9iamVjdFN0b3JlKGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBJREJUcmFuc2FjdGlvbiopOwogCiAgICAgaW50
NjRfdCBmaW5kSW5kZXhJZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIGJvb2wgY29u
dGFpbnNJbmRleChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CkBAIC0xMTgsNyArMTE3LDYgQEAg
cHJpdmF0ZToKICAgICB9CiAKICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fbWV0YWRhdGE7
Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOwog
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKICAgICBib29sIG1fZGVs
ZXRlZDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCBlNmNlODNjMzViMzhjMDRl
Y2VhZmE3OGE5YWFkNTVmZjgwYWZiN2IxLi5kMjRiNjdmZDliY2EwOTEyMDcxZDViOTA5MTgwNmQ5
N2E2YWIxZTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtMzQsNyArMzQsNiBA
QAogI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5j
bHVkZSAiSURCSW5kZXhCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1
ZGUgIklEQktleVBhdGguaCIKICNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgpAQCAtNDQsOTggKzQz
LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpDcmVhdGVJbmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gaW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0
ZUluZGV4T3BlcmF0aW9uKG9iamVjdFN0b3JlLCBpbmRleCkpOwotICAgIH0KLSAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAg
IENyZWF0ZUluZGV4T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCi0g
ICAgICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAgICAgICAgLCBtX2luZGV4KGlu
ZGV4KQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gbV9vYmplY3RTdG9yZTsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRl
eDsKLX07Ci0KLWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkRlbGV0ZUluZGV4T3Bl
cmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlSW5kZXhPcGVyYXRpb24ob2JqZWN0
U3RvcmUsIGluZGV4KSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgRGVsZXRlSW5kZXhPcGVyYXRpb24o
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1Jl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKLSAgICAgICAgOiBtX29iamVjdFN0b3Jl
KG9iamVjdFN0b3JlKQotICAgICAgICAsIG1faW5kZXgoaW5kZXgpCi0gICAgewotICAgIH0KLQot
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwotICAg
IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBtX2luZGV4OwotfTsKLQotY2xhc3MgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRp
YyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRl
KFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24ob2JqZWN0U3RvcmUsIGluZGV4
KSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbihQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4KQotICAgICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0
U3RvcmUpCi0gICAgICAgICwgbV9pbmRleChpbmRleCkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7Ci19OwotCi1jbGFzcyBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbihvYmplY3RTdG9yZSwgaW5kZXgpKTsKLSAg
ICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCop
OwotcHJpdmF0ZToKLSAgICBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW1wbD4gaW5kZXgpCi0gICAgICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkK
LSAgICAgICAgLCBtX2luZGV4KGluZGV4KQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKLSAgICBSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsKLX07Ci0KLQotSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6fklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoKQotewotfQotCi1JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGNvbnN0IElEQkRhdGFiYXNlQmFj
a2VuZEltcGwqIGRhdGFiYXNlLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0
YSkKLSAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCi0gICAgLCBtX21ldGFkYXRhKG1ldGFkYXRh
KQotewotICAgIGxvYWRJbmRleGVzKCk7Ci19Ci0KLUlEQk9iamVjdFN0b3JlTWV0YWRhdGEgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bWV0YWRhdGEoKSBjb25zdAotewotICAgIElEQk9iamVj
dFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEobV9tZXRhZGF0YSk7Ci0gICAgZm9yIChJbmRleE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9pbmRleGVzLmVu
ZCgpOyArK2l0KQotICAgICAgICBtZXRhZGF0YS5pbmRleGVzLnNldChpdC0+a2V5LCBpdC0+dmFs
dWUtPm1ldGFkYXRhKCkpOwotICAgIHJldHVybiBtZXRhZGF0YTsKLX0KLQogYm9vbCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleFdyaXRlcjo6dmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tp
bmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgYm9vbCYgY2FuQWRkS2V5cywgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBT
dHJpbmcqIGVycm9yTWVzc2FnZSkgY29uc3QKIHsKICAgICBjYW5BZGRLZXlzID0gZmFsc2U7CkBA
IC0yMTIsODYgKzExOSw2IEBAIGJvb2wgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bWFrZUlu
ZGV4V3JpdGVycyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLVBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50
cnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1faW5kZXhlcy5jb250
YWlucyhpZCksICJJbmRleGVzIGFscmVhZHkgY29udGFpbiAnJXMnIiwgbmFtZS51dGY4KCkuZGF0
YSgpKTsKLQotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IElEQkluZGV4
QmFja2VuZEltcGw6OmNyZWF0ZShtX2RhdGFiYXNlLCBJREJJbmRleE1ldGFkYXRhKG5hbWUsIGlk
LCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkpKTsKLSAgICBBU1NFUlQoaW5kZXgtPm5hbWUo
KSA9PSBuYW1lKTsKLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIp
OwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJT
SU9OX0NIQU5HRSk7Ci0gICAgQVNTRVJUKGlkID4gbV9tZXRhZGF0YS5tYXhJbmRleElkKTsKLSAg
ICBtX21ldGFkYXRhLm1heEluZGV4SWQgPSBpZDsKLQotICAgIGlmICghdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhDcmVhdGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGluZGV4KSwgQ3Jl
YXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGluZGV4KSkpIHsKLSAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBtX2luZGV4ZXMuc2V0KGlkLCBpbmRleCk7Ci0g
ICAgcmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpDcmVhdGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIkNyZWF0ZUluZGV4T3BlcmF0
aW9uIik7Ci0gICAgaWYgKCFtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+Y3JlYXRlSW5k
ZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUt
PmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9pbmRleC0+aWQoKSwgbV9pbmRl
eC0+bmFtZSgpLCBtX2luZGV4LT5rZXlQYXRoKCksIG1faW5kZXgtPnVuaXF1ZSgpLCBtX2luZGV4
LT5tdWx0aUVudHJ5KCkpKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5n
Ojpmb3JtYXQoIkludGVybmFsIGVycm9yIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZSBpbmRleCAnJXMn
LiIsIG1faW5kZXgtPm5hbWUoKS51dGY4KCkuZGF0YSgpKSkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotfQotCi1QYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6aW5kZXgoaW50NjRfdCBpbmRleElkKQotewotICAgIFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4ID0gbV9pbmRleGVzLmdldChpbmRleElkKTsK
LSAgICBBU1NFUlQoaW5kZXgpOwotICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7Ci19Ci0KLXZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgoaW50NjRfdCBpbmRleElk
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBBU1NFUlQobV9pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsK
LQotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IG1faW5kZXhlcy5nZXQo
aW5kZXhJZCk7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0g
ICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05f
Q0hBTkdFKTsKLQotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhEZWxldGVJbmRl
eE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGluZGV4KSwgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlv
bjo6Y3JlYXRlKHRoaXMsIGluZGV4KSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIG1faW5kZXhlcy5yZW1vdmUoaW5kZXhJZCk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJEZWxldGVJbmRleE9w
ZXJhdGlvbiIpOwotICAgIG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJbmRl
eCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+
ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX2luZGV4LT5pZCgpKTsKLX0KLQot
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpsb2FkSW5kZXhlcygpCi17Ci0gICAgVmVj
dG9yPElEQkluZGV4TWV0YWRhdGE+IGluZGV4ZXMgPSBiYWNraW5nU3RvcmUoKS0+Z2V0SW5kZXhl
cyhkYXRhYmFzZUlkKCksIG1fbWV0YWRhdGEuaWQpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBpbmRleGVzLnNpemUoKTsgKytpKQotICAgICAgICBtX2luZGV4ZXMuc2V0KGluZGV4ZXNb
aV0uaWQsIElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2RhdGFiYXNlLCBpbmRleGVzW2ld
KSk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhBYm9y
dE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlv
bikKLXsKLSAgICBBU1NFUlQoIXRyYW5zYWN0aW9uKTsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9y
ZS0+bV9pbmRleGVzLmNvbnRhaW5zKG1faW5kZXgtPmlkKCkpKTsKLSAgICBtX29iamVjdFN0b3Jl
LT5tX2luZGV4ZXMucmVtb3ZlKG1faW5kZXgtPmlkKCkpOwotfQotCi12b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKCF0cmFuc2Fj
dGlvbik7Ci0gICAgQVNTRVJUKCFtX29iamVjdFN0b3JlLT5tX2luZGV4ZXMuY29udGFpbnMobV9p
bmRleC0+aWQoKSkpOwotICAgIG1fb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5zZXQobV9pbmRleC0+
aWQoKSwgbV9pbmRleCk7Ci19Ci0KIFBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9u
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKICAgICBjb25z
dCBpbnQ2NF90IG1heEdlbmVyYXRvclZhbHVlID0gOTAwNzE5OTI1NDc0MDk5MkxMOyAvLyBNYXhp
bXVtIGludGVnZXIgc3RvcmFibGUgYXMgRUNNQVNjcmlwdCBudW1iZXIuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsLmgKaW5kZXggYjNlMmU1NTAxNmUxMzEyZjMzOTBhMDE3NmRlZTc4MTY5YTk4MmJkZS4u
OTcwZmM0OWEyZTY5OTE1ODEwMDI1ZTQwZTA5M2ZjOWMwZGI5MTlmNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuaApAQCAtMzksNTMgKzM5LDEyIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7Ci1jbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOwog
Y2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDsKIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZTsKIHN0cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOwogCi1jbGFzcyBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsIDogcHVibGljIElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gY3JlYXRlKGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNl
LCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0YSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChkYXRhYmFzZSwg
bWV0YWRhdGEpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bCgpOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiA+IEluZGV4TWFwOwotCi0gICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElk
ID0gMDsKLSAgICBpbnQ2NF90IGlkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX21l
dGFkYXRhLmlkICE9IEludmFsaWRJZCk7Ci0gICAgICAgIHJldHVybiBtX21ldGFkYXRhLmlkOwot
ICAgIH0KLQotICAgIC8vIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZQotICAgIHZpcnR1
YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNv
bnN0IFZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JikgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGludDY0X3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0
b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSopIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSopIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleChpbnQ2NF90KTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdmlydHVhbCB2b2lkIG9wZW5DdXJz
b3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIElEQkN1cnNvcjo6RGlyZWN0aW9uLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5
cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50KFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
Ci0KLSAgICBzdGF0aWMgYm9vbCBwb3B1bGF0ZUluZGV4KElEQkJhY2tpbmdTdG9yZSYsIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+KTsKLQotICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEoKSBj
b25zdDsKLSAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX21ldGFkYXRhLm5hbWU7
IH0KLSAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9tZXRh
ZGF0YS5rZXlQYXRoOyB9Ci0gICAgY29uc3QgYm9vbCYgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWV0YWRhdGEuYXV0b0luY3JlbWVudDsgfQotCi0gICAgUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UtPmJh
Y2tpbmdTdG9yZSgpOyB9Ci0gICAgaW50NjRfdCBkYXRhYmFzZUlkKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhYmFzZS0+aWQoKTsgfQorLy8gRklYTUU6IHRoaXMgbmFtZXNwYWNlIGlzIHRlbXBvcmFy
eSB1bnRpbCB3ZSBtb3ZlIGl0cyBjb250ZW50cyBvdXQgdG8gdGhlaXIgb3duIGhvbWUuCituYW1l
c3BhY2UgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCB7CiAKICAgICBjbGFzcyBJbmRleFdyaXRl
ciB7CiAgICAgcHVibGljOgpAQCAtMTA5LDI3ICs2OCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzIG1faW5kZXhLZXlzOwogICAg
IH07CiAKLSAgICBzdGF0aWMgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4sIElEQkJhY2tpbmdTdG9yZSosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmlt
YXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRl
eElkcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhL
ZXlzPiYsIFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4qIGluZGV4V3JpdGVycywgU3RyaW5n
KiBlcnJvck1lc3NhZ2UsIGJvb2wmIGNvbXBsZXRlZCkgV0FSTl9VTlVTRURfUkVUVVJOOwotCi0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICBzdGF0aWMgYm9vbCB1
cGRhdGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+LCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5KiwgYm9vbCBjaGVja0N1cnJlbnQpOwotCi1wcml2
YXRlOgotICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbCosIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmKTsKLQotICAgIHZvaWQgbG9h
ZEluZGV4ZXMoKTsKLQotICAgIGNsYXNzIENyZWF0ZUluZGV4T3BlcmF0aW9uOwotICAgIGNsYXNz
IERlbGV0ZUluZGV4T3BlcmF0aW9uOwotCi0gICAgLy8gV2hlbiBhICJ2ZXJzaW9uY2hhbmdlIiB0
cmFuc2FjdGlvbiBhYm9ydHMsIHRoZXNlIHJlc3RvcmUgdGhlIGJhY2stZW5kIG9iamVjdCBoaWVy
YXJjaHkuCi0gICAgY2xhc3MgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjsKLSAgICBjbGFzcyBE
ZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOwotCi0gICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbCogbV9kYXRhYmFzZTsKKyAgICBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiwgSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgUGFzc1JlZlB0cjxJREJLZXk+
IHByaW1hcnlLZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4m
IGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJ
bmRleEtleXM+JiwgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiogaW5kZXhXcml0ZXJzLCBT
dHJpbmcqIGVycm9yTWVzc2FnZSwgYm9vbCYgY29tcGxldGVkKSBXQVJOX1VOVVNFRF9SRVRVUk47
CiAKLSAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fbWV0YWRhdGE7Ci0gICAgSW5kZXhNYXAg
bV9pbmRleGVzOworICAgIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5lcmF0ZUtleShQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZT4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4s
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICBib29sIHVw
ZGF0ZUtleUdlbmVyYXRvcihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4sIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkqLCBib29sIGNoZWNrQ3VycmVudCk7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggYWZhNDVlMjRiMDQxZWY4MjVjNjU3YTYx
MTk1MTQwZDE0NTc0MTJmMS4uMjZlZmQwZmIzYjExOTZmZDE3ODJlMWVkNzJlNDM1ZjRjNzg4MDk5
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmNwcApAQCAtMTIyLDExICsxMjIsNiBAQCBJREJUcmFuc2FjdGlvbjo6fklEQlRyYW5z
YWN0aW9uKCkKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7CiB9CiAKLUlEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogSURCVHJhbnNhY3Rpb246OmJhY2tlbmQoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7Ci19Ci0KIGNvbnN0IFN0cmluZyYgSURCVHJh
bnNhY3Rpb246Om1vZGUoKSBjb25zdAogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAt
MTc2LDEyICsxNzEsOSBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJUcmFuc2FjdGlv
bjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcAogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBv
YmplY3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWQs
IGVjKTsKLSAgICBBU1NFUlQoIWVjICYmIG9iamVjdFN0b3JlQmFja2VuZCk7Ci0KICAgICBjb25z
dCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSA9IG1fZGF0YWJhc2UtPm1ldGFkYXRhKCk7
CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3Rv
cmU6OmNyZWF0ZShtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLCBvYmpl
Y3RTdG9yZUJhY2tlbmQsIHRoaXMpOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0
U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQo
b2JqZWN0U3RvcmVJZCksIHRoaXMpOwogICAgIG9iamVjdFN0b3JlQ3JlYXRlZChuYW1lLCBvYmpl
Y3RTdG9yZSk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCmluZGV4IGRm
NDFiYmIwZWY1MzM4MWMwY2UyNzFiN2RkNDU2ZmRiZjllZTA0MDkuLmRmM2JiMGNjY2E1OTY0ZDQ2
ODg3OTRmMWZiNjJiODZlMDIwNzA2NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaApAQCAtNzEsNyArNzEsNiBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIE1vZGUgc3RyaW5nVG9Nb2RlKGNvbnN0IFN0cmluZyYsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbW9kZVRvU3RyaW5nKE1vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogYmFja2VuZCgpIGNvbnN0OwogICAgIElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZSogYmFja2VuZERCKCkgY29uc3Q7CiAKICAgICBpbnQ2NF90IGlkKCkgY29u
c3QgeyByZXR1cm4gbV9pZDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCA3ODJm
NDY1ODI4YzgyN2YyZmU2YzhiNmUzNjdlMTc1ZTdhYmYwOTQyLi4xYjBjYTRiYmNjMGVhNTVlM2M3
NDYyMmU5NmE1MzE3NjMwNDRhYmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAt
MzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCiAjaW5jbHVk
ZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0
aW9uLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUg
IklEQlRyYWNpbmcuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCiAK
QEAgLTcwLDE4ICs2OSw2IEBAIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6On5JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKCkKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7CiB9CiAK
LVBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShpbnQ2NF90IGlkLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkgewotICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0g
bV9kYXRhYmFzZS0+b2JqZWN0U3RvcmUoaWQpOwotICAgIEFTU0VSVChvYmplY3RTdG9yZSk7Ci0g
ICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKLX0KLQogYm9vbCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpzY2hlZHVsZVRhc2soVGFza1R5cGUgdHlwZSwgUGFzc093blB0cjxPcGVy
YXRpb24+IHRhc2ssIFBhc3NPd25QdHI8T3BlcmF0aW9uPiBhYm9ydFRhc2spCiB7CiAgICAgaWYg
KG1fc3RhdGUgPT0gRmluaXNoZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKaW5kZXggYzc5ZGVm
ZjQ4ODQ4MDRmN2YzN2FmMDMyMzU0MDc4OTI3MzkxYTNiMS4uMGI1YjY0MGFkZWNlNGRmODExYjg0
MjdmM2M3MDcyZTVmNmNmMzQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaApAQCAtNTIsNyAr
NTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCgp
OwogCiAgICAgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlCi0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoaW50
NjRfdCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGludDY0X3QsIEV4Y2VwdGlvbkNvZGUm
KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgdm9pZCBh
Ym9ydCgpOwogICAgIHZvaWQgY29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldENhbGxiYWNr
cyhJREJUcmFuc2FjdGlvbkNhbGxiYWNrcyogY2FsbGJhY2tzKSB7IG1fY2FsbGJhY2tzID0gY2Fs
bGJhY2tzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMjJjZDc0ZTg4ZmI0Y2M1NTE1ZjQ1MDYzZGZi
M2ZmYTIyYTdlMzE4MS4uNjEwYmU1OGI5OGRjNjMyY2JlYzFmMzRkZDFjZDRhYTRmZGIzNzYwMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtNzM2LDggKzczNiw2IEBACiAgICAgICAgICAgICAnTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCcsCiAgICAgICAgICAgICAn
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleC5oJywKLSAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbXBsLmNwcCcsCi0gICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURC
SW5kZXhCYWNrZW5kSW1wbC5oJywKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbnRlcmZhY2UuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5LmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmgnLApA
QCAtNTQ2NSw3ICs1NDYzLDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0lt
YWdlcy9zZWFyY2hTbWFsbEdyYXkucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQt
ZW5kL0ltYWdlcy9zZWFyY2hTbWFsbFdoaXRlLnBuZycsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L2Zyb250LWVuZC9JbWFnZXMvc2VhcmNoTmV4dC5wbmcnLAotICAgICAgICAgICAgJ2luc3BlY3Rv
ci9mcm9udC1lbmQvSW1hZ2VzL3NlYXJjaFByZXYucG5nJywgICAgICAgICAgICAKKyAgICAgICAg
ICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWFyY2hQcmV2LnBuZycsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VnbWVudC5wbmcnLAogICAgICAgICAg
ICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlZ21lbnRFbmQucG5nJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWdtZW50SG92ZXIucG5nJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggOWI4MzE3OTA1
Mjc4MmQ0ODRkYTg3N2UxZTI5ZjRmNWExYjU3ZmUzYi4uMjBmNmUxNzc5YTNhN2JiYjA0MWRiZjhl
OWM1YThhNjhlMThlNjFhYiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKQEAgLTI0OTg1LDE0ICsyNDk4NSw2IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+
CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJJ
bmRleEJhY2tlbmRJbXBsLmNwcCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8RmlsZQotCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkluZGV4QmFja2VuZEltcGwu
aCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XE1vZHVsZXNcaW5kZXhlZGRiXElEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIgogCQkJCQk+CiAJ
CQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGU2YmQ0ZDhlMDc0ZTdhNjdjYWExNGU3MDdjYzQ3MmU4ZWZiOGE5NGUu
LmZhMDMwY2ZiZTlhN2RiMGM4MzUzZjhmZjhhMzk0ZmRkNGViZTdmMzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM0OTUsOCAr
MzQ5NSw2IEBACiAJCTk3MTJBNUQ0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTcxMkE1N0IxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
LmggKi87IH07CiAJCTk3MTJBNUQ1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3QzE1MDA0
RURBMDA0OEFGMTAgLyogSURCSW5kZXguY3BwICovOyB9OwogCQk5NzEyQTVENjE1MDA0RURBMDA0
OEFGMTAgLyogSURCSW5kZXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3MTJBNTdEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5oICovOyB9Owot
CQk5NzEyQTVEODE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3RjE1MDA0
RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgKi87IH07Ci0JCTk3MTJBNUQ5
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4MDE1MDA0RURBMDA0OEFGMTAg
LyogSURCSW5kZXhCYWNrZW5kSW1wbC5oICovOyB9OwogCQk5NzEyQTVEQTE1MDA0RURBMDA0OEFG
MTAgLyogSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4MTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5k
ZXhCYWNrZW5kSW50ZXJmYWNlLmggKi87IH07CiAJCTk3MTJBNURCMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJLZXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTcxMkE1ODIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5jcHAgKi87IH07CiAJCTk3MTJB
NURDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTgzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXku
aCAqLzsgfTsKQEAgLTEwODE5LDggKzEwODE3LDYgQEAKIAkJOTcxMkE1N0MxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkluZGV4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IElEQkluZGV4LmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1N0QxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkluZGV4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkluZGV4Lmg7IHBh
dGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5NzEyQTU3RTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgbmFtZSA9IElEQkluZGV4LmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTcxMkE1N0YxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gSURCSW5kZXhCYWNrZW5kSW1wbC5jcHA7IHBhdGggPSBNb2R1bGVz
L2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOTcxMkE1ODAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEltcGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCSW5kZXhCYWNrZW5kSW1wbC5o
OyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU4MTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5k
ZXhCYWNrZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElE
QkluZGV4QmFja2VuZEludGVyZmFjZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCSW5k
ZXhCYWNrZW5kSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJB
NTgyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gSURCS2V5LmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTgzMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCS2V5
Lmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE4MTUxLDggKzE4MTQ3LDYgQEAKIAkJCQk5NzEyQTU3QzE1MDA0RURBMDA0
OEFGMTAgLyogSURCSW5kZXguY3BwICovLAogCQkJCTk3MTJBNTdEMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJJbmRleC5oICovLAogCQkJCTk3MTJBNTdFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRl
eC5pZGwgKi8sCi0JCQkJOTcxMkE1N0YxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2Vu
ZEltcGwuY3BwICovLAotCQkJCTk3MTJBNTgwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJh
Y2tlbmRJbXBsLmggKi8sCiAJCQkJOTcxMkE1ODExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4
QmFja2VuZEludGVyZmFjZS5oICovLAogCQkJCTk3MTJBNTgyMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJLZXkuY3BwICovLAogCQkJCTk3MTJBNTgzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuaCAq
LywKQEAgLTI0MTcyLDcgKzI0MTY2LDYgQEAKIAkJCQk5NzEyQTVEMjE1MDA0RURBMDA0OEFGMTAg
LyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVENDE1
MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3MTJBNUQ2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJOTcxMkE1RDkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZElt
cGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNURBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJ
bmRleEJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNURDMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNURGMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoLmggaW4gSGVhZGVycyAqLywKQEAgLTI3NDI2LDcgKzI3
NDE5LDYgQEAKIAkJCQk5NzEyQTVEMTE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNUQzMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEy
QTVENTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
OTcxMkE1RDgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEltcGwuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTcxMkE1REIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5NzEyQTVERTE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0aC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEyQTVFMjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5
UmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0lEQkRhdGFiYXNlQmFja2VuZFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9JREJEYXRhYmFzZUJhY2tlbmRUZXN0LmNwcAppbmRleCA2ZWY4NWMzZDkzNDY4
NDE0NDg5NDI2Y2VmNmU1ZDk0M2IwNWFhNzEyLi43Y2Q2NDRhNDEyMGNiOGY3N2RjOTZmNWMyZTBm
YjM5NzM3YjQ4Mjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lE
QkRhdGFiYXNlQmFja2VuZFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvSURCRGF0YWJhc2VCYWNrZW5kVGVzdC5jcHAKQEAgLTMwLDggKzMwLDcgQEAKICNpbmNsdWRl
ICJJREJEYXRhYmFzZUNhbGxiYWNrc1Byb3h5LmgiCiAjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRmFrZUJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIklE
QkluZGV4QmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIldl
YklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIgogI2luY2x1ZGUgIldlYklEQkRhdGFiYXNlSW1w
bC5oIgogCkBAIC01NiwyMSArNTUsOCBAQCBURVNUKElEQkRhdGFiYXNlQmFja2VuZFRlc3QsIEJh
Y2tpbmdTdG9yZVJldGVudGlvbikKICAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4g
ZGIgPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGUoImRiIiwgYmFja2luZ1N0b3JlLmdl
dCgpLCBmYWN0b3J5LCAidW5pcXVlaWQiKTsKICAgICBFWFBFQ1RfR1QoYmFja2luZ1N0b3JlLT5y
ZWZDb3VudCgpLCAxKTsKIAotICAgIGNvbnN0IGJvb2wgYXV0b0luY3JlbWVudCA9IGZhbHNlOwot
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBzdG9yZSA9IElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmNyZWF0ZShkYi5nZXQoKSwgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSgi
c3RvcmUiLCAxLCBJREJLZXlQYXRoKCJrZXlQYXRoIiksIGF1dG9JbmNyZW1lbnQsIDApKTsKLSAg
ICBFWFBFQ1RfR1QoYmFja2luZ1N0b3JlLT5yZWZDb3VudCgpLCAxKTsKLQotICAgIGNvbnN0IGJv
b2wgdW5pcXVlID0gZmFsc2U7Ci0gICAgY29uc3QgYm9vbCBtdWx0aUVudHJ5ID0gZmFsc2U7Ci0g
ICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1w
bDo6Y3JlYXRlKGRiLmdldCgpLCBJREJJbmRleE1ldGFkYXRhKCJpbmRleCIsIC0xLCBJREJLZXlQ
YXRoKCJrZXlQYXRoIiksIHVuaXF1ZSwgbXVsdGlFbnRyeSkpOwotICAgIEVYUEVDVF9HVChiYWNr
aW5nU3RvcmUtPnJlZkNvdW50KCksIDEpOwotCiAgICAgZGIuY2xlYXIoKTsKICAgICBFWFBFQ1Rf
VFJVRShiYWNraW5nU3RvcmUtPmhhc09uZVJlZigpKTsKLSAgICBzdG9yZS5jbGVhcigpOwotICAg
IEVYUEVDVF9UUlVFKGJhY2tpbmdTdG9yZS0+aGFzT25lUmVmKCkpOwotICAgIGluZGV4LmNsZWFy
KCk7Ci0gICAgRVhQRUNUX1RSVUUoYmFja2luZ1N0b3JlLT5oYXNPbmVSZWYoKSk7CiB9CiAKIGNs
YXNzIE1vY2tJREJDYWxsYmFja3MgOiBwdWJsaWMgSURCQ2FsbGJhY2tzIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKaW5kZXggZjk2
NTA3M2MwYWYzZWMyYWZmNzM0MzgwZTI0ZDc4NWY2NjExOTg2Yy4uM2VkNzI0YmI0ZWIwYTJiYmY4
OGI2NDYxYTUyZmY0MjdiNjhlYmIzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKQEAgLTM5LDcgKzM5LDYgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oVHJhbnNhY3Rpb24q
LCBpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IHZlcnNpb24pIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSkg
T1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgVmVjdG9yPElEQk9iamVj
dFN0b3JlTWV0YWRhdGE+IGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQpIE9WRVJS
SURFIHsgcmV0dXJuIFZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPigpOyB9CiAgICAgdmly
dHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURC
S2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH07
CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBPVkVSUklERSB7IH0KQEAgLTQ4
LDcgKzQ3LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBtYXliZVVwZGF0ZUtleUdlbmVy
YXRvckN1cnJlbnROdW1iZXIoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdOdW1iZXIsIGJvb2wgY2hlY2tDdXJyZW50KSBP
VkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2Jq
ZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVu
dGlmaWVyLCBib29sJiBmb3VuZCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmly
dHVhbCBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyByZXR1cm4gVmVjdG9yPElEQklu
ZGV4TWV0YWRhdGE+KCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoVHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGlzVW5p
cXVlLCBib29sIGlzTXVsdGlFbnRyeSkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH07CiAgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkgT1ZFUlJJREUgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIHB1dEluZGV4RGF0YUZvclJlY29yZChUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleSYsIGNvbnN0IFJlY29yZElkZW50aWZpZXImKSBPVkVSUklERSB7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182061</attachid>
            <date>2013-01-09 21:55:49 -0800</date>
            <delta_ts>2013-01-09 23:34:38 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-106377-20130109215252.patch</filename>
            <type>text/plain</type>
            <size>90308</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzA5NWQ3YjZjMjkxNmU5
MTE4MmZlZDhiODgzYTNmNGFmMjM2ZTc3ZS4uYzk4ODU1YmJmYWI0NjRmYTMzYzEzNjg3ZTE1YjJj
Yjk1ZTk2ZTYxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOCBAQAorMjAxMy0wMS0wOCAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBB
bGxvdyBjcmVhdGVJbmRleC9jcmVhdGVPYmplY3RTdG9yZSB0byBiZSBhc3luY2hyb25vdXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjM3NworCisg
ICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCisKKyAgICAgICAgTWlncmF0ZSBpbXBsZW1l
bnRhdGlvbnMgb2YgY3JlYXRlSW5kZXgvZGVsZXRlSW5kZXgsCisgICAgICAgIGNyZWF0ZU9iamVj
dFN0b3JlL2RlbGV0ZU9iamVjdFN0b3JlIG92ZXIgdG8gSURCRGF0YWJhc2VCYWNrZW5kSW1wbCwK
KyAgICAgICAgc28gdGhhdCB0aGV5IGNhbiBiZSBhc3luY2hyb25vdXMgaW4gbXVsdGktcHJvY2Vz
cyBwb3J0cy4KKworICAgICAgICBIYXMgdGhlIHNpZGUgZWZmZWN0IG9mIHJlbW92aW5nIHRoZSBs
YXN0IGNvbnN1bWVycyBvZgorICAgICAgICBJREJJbmRleEJhY2tlbmRJbXBsIGFuZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLiBUaGUgZm9ybWVyCisgICAgICAgIGlzIHJlbW92ZWQgY29tcGxl
dGUgYW5kIHRoZSBsYXR0ZXIgYmVjb21lcyBhIHRlbXBvcmFyeSBuYW1lc3BhY2UKKyAgICAgICAg
cGVuZGluZyBhIGZ1cnRoZXIgbW9yZSBtZWNoYW5pY2FsIGNvZGUgc2h1ZmZsZS4KKworICAgICAg
ICBBIGtleSByZWZhY3RvcmluZyBlZmZlY3QgaXMgdGhhdCB0aGUgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbAorICAgICAgICBub3cgY29udGFpbnMgdGhlIGF1dGhvcml0YXRpdmUgSURCRGF0YWJhc2VN
ZXRhZGF0YSBoaWVyYXJjaHksCisgICAgICAgIGFuZCB1cGRhdGVzIHRvIGl0IGFyZSBjb25zb2xp
ZGF0ZWQgaW4gb25lIHBsYWNlIHJhdGhlciB0aGFuCisgICAgICAgIHNjYXR0ZXJlZCBhY3Jvc3Mg
YSBwYXJhbGxlbCBvYmplY3QgdHJlZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBp
cyBqdXN0IHJlZmFjdG9yaW5nLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQmFj
a2luZ1N0b3JlLmNwcDogU2ltcGxpZnkgb2JqZWN0c3RvcmUvaW5kZXggbG9hZGluZyBhbmQgcHJv
cGFnYXRlIGVycm9ycy4KKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Z2V0T2Jq
ZWN0U3RvcmVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhl
cyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmg6CisgICAg
ICAgIChJREJCYWNraW5nU3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvckJhY2tlbmRJbXBsLmNwcDogRGVwZW5kZW5jeSBjbGVhbnVwLgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmg6IERlcGVuZGVuY3kgY2xlYW51cC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlLmNwcDogRnJvbnRlbmQgSURCT2JqZWN0U3RvcmVzIG5vIGxvbmdlciBob2xkIG9udG8gYmFj
a2VuZCBvYmplY3RzLgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9y
ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5j
cHA6IEFkZCBhbGwgY3JlYXRlL2RlbGV0ZUluZGV4IG9wZXJhdGlvbnMgZnJvbSBJREJJbmRleEJh
Y2tlbmRJbXBsLgorICAgICAgICAoV2ViQ29yZTo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6
Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24pOgorICAgICAgICAoQ3JlYXRlT2JqZWN0U3RvcmVP
cGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6
RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24pOgorICAgICAgICAoRGVsZXRlT2JqZWN0U3RvcmVP
cGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJh
dGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRP
cGVyYXRpb246OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoQ3Jl
YXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVP
YmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVs
ZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJh
dGlvbik6CisgICAgICAgIChEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKToKKyAgICAg
ICAgKENyZWF0ZUluZGV4T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0ZUluZGV4
T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3JlYXRlSW5kZXhPcGVyYXRp
b246OkNyZWF0ZUluZGV4T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
RGVsZXRlSW5kZXhPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVy
YXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVJbmRleE9wZXJhdGlvbjo6
RGVsZXRlSW5kZXhPcGVyYXRpb24pOgorICAgICAgICAoQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Q3JlYXRlSW5k
ZXhBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpEZWxldGVJbmRleEFi
b3J0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6R2V0T3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFkZE9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92
ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmFkZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJl
bW92ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9w
ZW5JbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpt
ZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVh
dGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVPYmplY3RTdG9yZU9wZXJh
dGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVJbmRleE9wZXJh
dGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVJbmRleEFib3J0T3BlcmF0
aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4T3BlcmF0aW9uOjpw
ZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb246OnBl
cmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Z2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnB1dCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y291bnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RGVsZXRlUmFuZ2VPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2VGaW5hbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKTogTG9hZCBk
aXJlY3RseSBpbnRvIG1ldGFkYXRhIGZyb20gYmFja2luZyBzdG9yZS4KKyAgICAgICAgKFdlYkNv
cmU6OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlQWJvcnRP
cGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSURCRGF0YWJh
c2VCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCSW5kZXhCYWNrZW5kSW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlOjpJREJPYmplY3RTdG9yZSk6IEZyb250ZW5kIElEQkluZGV4IG9iamVjdHMgbm8gbG9u
Z2VyIGhvbGQgb250byBiYWNrZW5kLgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6
OmNyZWF0ZUluZGV4KTogCisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6ZGVsZXRl
SW5kZXgpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y3JlYXRlKToKKyAgICAgICAgKElEQk9i
amVjdFN0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZSk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaDoKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDoKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZSk6Cisg
ICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwog
MjAxMy0wMS0wOCAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAg
SGVhcC11c2UtYWZ0ZXItZnJlZSBpbiBib29sIFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmVTZWxlY3Rvci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMDBjODAzNWY1ZmRk
NTAwMDg4ZDYxN2EyNTQ1MTc5MGQ5ODU0NjdiNS4uYTk4YmJhZDZiNjAwN2U3NDYzMTBiNjFiYTU1
NTFlNTZmNGYyY2QyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBA
QAorMjAxMy0wMS0wOCAgQWxlYyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgSW5kZXhlZERCOiBBbGxvdyBjcmVhdGVJbmRleC9jcmVhdGVPYmplY3RTdG9yZSB0byBi
ZSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwNjM3NworCisgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCisKKyAgICAg
ICAgUmVtb3ZlIHRoaXMgdGVzdCBhcyBpdCBtYWtlcyBubyBzZW5zZSBvbmNlIHRoZSBvYmplY3Rz
dG9yZS9pbmRleAorICAgICAgICBoaWVyYXJjaHkgaXMgZ29uZS4KKworICAgICAgICAqIHRlc3Rz
L0lEQkRhdGFiYXNlQmFja2VuZFRlc3QuY3BwOgorCiAyMDEzLTAxLTA4ICBNYXJrIExhbSAgPG1h
cmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmVkIHRoZSBuZWVkIGZvciB0aGUgUHJv
cG9zZWREYXRhYmFzZSBtZWNoYW5pc20uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDZiZjk0MmM5
ODU5NjY0MDBmZDFhMjFhZmM0MWM2YzkyNWVhY2Q5NmQuLjk5ZTMwMWI3YmI4ODgwZTQ2Nzk4ZjRm
ZThjZDc4ZTgzNTE2NWU3N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC04MjUsNyArODI1LDYg
QEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZS5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAKLSAgICBNb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAogICAgIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQktleS5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5jcHAKICAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KaW5kZXggYmFlMjg3OGEwYmZmNDVlYzVmOTYwY2RkZWRlZDAwMzFhYmVmMTk3Ny4uZWEx
YzM0Yzc1NzViMTJlZjQzY2I5ZTEwM2U5NWYwZTE0NjUzZGUwMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCkBAIC0xODcwLDggKzE4NzAsNiBAQCB3ZWJjb3JlX21vZHVsZXNfc291cmNl
cyArPSBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2UuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3Rvcnku
aCBcCi0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1w
bC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2Vu
ZEltcGwuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNr
ZW5kSW50ZXJmYWNlLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQklu
ZGV4LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5n
U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0
b3JlLmNwcAppbmRleCAyMDJmMDUwZjYyZDQwMzJkY2Y3ODM5MzVmMWJkMzliYTg3ODczMWUzLi5k
YTQ4NDk5NzE4MzExNjdiZmFjZmU5MmQ3YTUwMTY5ZGQxMTY0MjIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTYw
NSwxMyArNjA1LDE1IEBAIHN0YXRpYyBib29sIGNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5
cGUoY29uc3QgTGV2ZWxEQkl0ZXJhdG9yKiBpdCwgY29uc3QgVmVjCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLVZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJCYWNraW5nU3RvcmU6Omdl
dE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQpCisvLyBGSVhNRTogVGhpcyBzaG91bGQg
ZG8gc29tZSBlcnJvciBoYW5kbGluZyByYXRoZXIgdGhhbiBwbG93aW5nIGFoZWFkIHdoZW4gYmFk
IGRhdGEgaXMgZW5jb3VudGVyZWQuCit2b2lkIElEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3Rv
cmVzKGludDY0X3QgZGF0YWJhc2VJZCwgSURCRGF0YWJhc2VNZXRhZGF0YTo6T2JqZWN0U3RvcmVN
YXAqIG9iamVjdFN0b3JlcykKIHsKICAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6Z2V0
T2JqZWN0U3RvcmVzIik7Ci0gICAgVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IG9iamVj
dFN0b3JlczsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgMSwgMCk7CiAgICAgY29uc3QgVmVjdG9yPGNo
YXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJh
c2VJZCk7CiAKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVzLT5pc0VtcHR5KCkpOworCiAgICAgT3du
UHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOwogICAgIGl0
LT5zZWVrKHN0YXJ0S2V5KTsKICAgICB3aGlsZSAoaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5
cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMCkgewpAQCAtNjkxLDkgKzY5MywxMCBAQCBWZWN0b3I8
SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gSURCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMo
aW50NjRfdCBkYXRhYmFzZQogICAgICAgICAgICAgaXQtPm5leHQoKTsKICAgICAgICAgfQogCi0g
ICAgICAgIG9iamVjdFN0b3Jlcy5hcHBlbmQoSURCT2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RT
dG9yZU5hbWUsIG9iamVjdFN0b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIG1heEluZGV4
SWQpKTsKKyAgICAgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtZXRhZGF0YShvYmplY3RTdG9y
ZU5hbWUsIG9iamVjdFN0b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIG1heEluZGV4SWQp
OworICAgICAgICBnZXRJbmRleGVzKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsICZtZXRhZGF0
YS5pbmRleGVzKTsKKyAgICAgICAgb2JqZWN0U3RvcmVzLT5zZXQob2JqZWN0U3RvcmVJZCwgbWV0
YWRhdGEpOwogICAgIH0KLSAgICByZXR1cm4gb2JqZWN0U3RvcmVzOwogfQogCiBXQVJOX1VOVVNF
RF9SRVRVUk4gc3RhdGljIGJvb2wgc2V0TWF4T2JqZWN0U3RvcmVJZChMZXZlbERCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCkKQEAgLTk3OSwxNCArOTgyLDE0IEBAIHN0YXRpYyBib29sIGNoZWNrSW5kZXhBbmRNZXRhRGF0
YUtleShjb25zdCBMZXZlbERCSXRlcmF0b3IqIGl0LCBjb25zdCBWZWN0b3I8Y2hhCiB9CiAKIAot
VmVjdG9yPElEQkluZGV4TWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKKy8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBkbyBzb21lIGVycm9yIGhhbmRsaW5nIHJhdGhlciB0aGFuIHBsb3dpbmcgYWhlYWQgd2hl
biBiYWQgZGF0YSBpcyBlbmNvdW50ZXJlZC4KK3ZvaWQgSURCQmFja2luZ1N0b3JlOjpnZXRJbmRl
eGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBJREJPYmplY3RT
dG9yZU1ldGFkYXRhOjpJbmRleE1hcCogaW5kZXhlcykKIHsKICAgICBJREJfVFJBQ0UoIklEQkJh
Y2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyIpOwotICAgIFZlY3RvcjxJREJJbmRleE1ldGFkYXRhPiBp
bmRleGVzOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IEluZGV4TWV0YURhdGFL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAwKTsKICAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gc3RvcEtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkICsgMSwgMCwgMCk7CiAKLSAgICBBU1NFUlQoaW5kZXhlcy5pc0VtcHR5
KCkpOworICAgIEFTU0VSVChpbmRleGVzLT5pc0VtcHR5KCkpOwogCiAgICAgT3duUHRyPExldmVs
REJJdGVyYXRvcj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOwogICAgIGl0LT5zZWVrKHN0
YXJ0S2V5KTsKQEAgLTEwMjksOSArMTAzMiw4IEBAIFZlY3RvcjxJREJJbmRleE1ldGFkYXRhPiBJ
REJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90CiAg
ICAgICAgICAgICBpdC0+bmV4dCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaW5kZXhlcy5hcHBl
bmQoSURCSW5kZXhNZXRhZGF0YShpbmRleE5hbWUsIGluZGV4SWQsIGtleVBhdGgsIGluZGV4VW5p
cXVlLCBpbmRleE11bHRpRW50cnkpKTsKKyAgICAgICAgaW5kZXhlcy0+c2V0KGluZGV4SWQsIElE
QkluZGV4TWV0YWRhdGEoaW5kZXhOYW1lLCBpbmRleElkLCBrZXlQYXRoLCBpbmRleFVuaXF1ZSwg
aW5kZXhNdWx0aUVudHJ5KSk7CiAgICAgfQotICAgIHJldHVybiBpbmRleGVzOwogfQogCiBXQVJO
X1VOVVNFRF9SRVRVUk4gc3RhdGljIGJvb2wgc2V0TWF4SW5kZXhJZChMZXZlbERCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJCYWNraW5nU3RvcmUuaAppbmRleCAyZjk5Y2EzMTcxOTYxYjA0NDE4MmFjY2FjM2Iw
OTJjY2Y2MTFhZTA2Li42NmI3MmY0ZDk5OWNhZjljNzMzZjc5ODE5MjU2OGU2YjU2OWIzNzA3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3Rv
cmUuaApAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHVwZGF0ZUlE
QkRhdGFiYXNlSW50VmVyc2lvbihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRf
dCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0
YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIHZpcnR1YWwgVmVjdG9yPElEQk9iamVj
dFN0b3JlTWV0YWRhdGE+IGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQpOworICAg
IHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgSURCRGF0YWJhc2VNZXRh
ZGF0YTo6T2JqZWN0U3RvcmVNYXAqKTsKICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3Rv
cmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
LCBib29sIGF1dG9JbmNyZW1lbnQpOwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVPYmplY3RTdG9y
ZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIApAQCAtODUsNyArODUsNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJy
ZW50KSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2Jq
ZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNvcmRJZGVudGlmaWVy
KiBmb3VuZFJlY29yZElkZW50aWZpZXIsIGJvb2wmIGZvdW5kKSBXQVJOX1VOVVNFRF9SRVRVUk47
CiAKLSAgICB2aXJ0dWFsIFZlY3RvcjxJREJJbmRleE1ldGFkYXRhPiBnZXRJbmRleGVzKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKICAgICB2aXJ0dWFsIGJvb2wg
Y3JlYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVu
dHJ5KTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQpOwogICAgIHZpcnR1YWwgdm9pZCBwdXRJbmRleERhdGFGb3JSZWNvcmQoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFJlY29y
ZElkZW50aWZpZXImKTsKQEAgLTE2OSw2ICsxNjgsNyBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6
CiAgICAgYm9vbCBmaW5kS2V5SW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5JiwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5LCBi
b29sJiBmb3VuZCk7CisgICAgdm9pZCBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcCopOwog
CiAgICAgU3RyaW5nIG1faWRlbnRpZmllcjsKICAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJ
bXBsPiBtX2ZhY3Rvcnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKaW5kZXggZmVhYjVjNWUzYTM2NDVmMDk5
NDQwMDliMDNjOWZjZDYwNGRjNmIxYS4uNjRjNGFhYjZmMzZlNzI5M2U1ZjZhNWFiZjJmZDMwYjgw
ZTQ4YWZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApAQCAtMzAsMTAgKzMwLDEwIEBACiAKICNpbmNs
dWRlICJJREJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKKyNpbmNs
dWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJv
ci5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSURCS2V5
UmFuZ2UuaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVk
ZSAiSURCUmVxdWVzdC5oIgogI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKICNpbmNsdWRlICJJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAppbmRleCA5NjY4ZGZkM2E0NjMx
ZTMzOGY0N2UzNTQ3NjM3MWYxNjE2NmZjM2MxLi43MTJjMmI0MzE1NzczMDQzNzljYmMzOTIzNWVh
NjU3ZGExZTEyMjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKQEAgLTQxLDkgKzQxLDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKLWNsYXNzIElEQklu
ZGV4QmFja2VuZEltcGw7CiBjbGFzcyBJREJLZXlSYW5nZTsKLWNsYXNzIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw7CiAKIGNsYXNzIElEQkN1cnNvckJhY2tlbmRJbXBsIDogcHVibGljIElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2UgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4IGViZGUwZjE0NjMyY2Q2MGI2NDEy
YWE4ZDc3N2FkOTYzYmU0ZTNiZjIuLjc0NjQ2ZDAwODE3NWRiYTRlMTVjOTQ3ZDE1MjY5OTk5Mjdk
YWZmZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZS5jcHAKQEAgLTE4NCwxNCArMTg0LDEwIEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+
IElEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvCiAg
ICAgfQogCiAgICAgaW50NjRfdCBvYmplY3RTdG9yZUlkID0gbV9tZXRhZGF0YS5tYXhPYmplY3RT
dG9yZUlkICsgMTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBv
YmplY3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPmNyZWF0ZU9iamVjdFN0b3JlKG9iamVjdFN0
b3JlSWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIG1fdmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoIW9iamVjdFN0b3JlQmFja2VuZCkgewot
ICAgICAgICBBU1NFUlQoZWMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgbV9iYWNr
ZW5kLT5jcmVhdGVPYmplY3RTdG9yZShtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aWQoKSwg
b2JqZWN0U3RvcmVJZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCk7CiAKICAgICBJREJP
YmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKG5hbWUsIG9iamVjdFN0b3JlSWQsIGtleVBhdGgs
IGF1dG9JbmNyZW1lbnQsIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6TWluaW11bUlu
ZGV4SWQpOwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBJREJPYmpl
Y3RTdG9yZTo6Y3JlYXRlKG1ldGFkYXRhLCBvYmplY3RTdG9yZUJhY2tlbmQucmVsZWFzZSgpLCBt
X3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpjcmVhdGUobWV0YWRhdGEsIG1fdmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uLmdldCgpKTsKICAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jl
cy5zZXQobWV0YWRhdGEuaWQsIG1ldGFkYXRhKTsKICAgICArK21fbWV0YWRhdGEubWF4T2JqZWN0
U3RvcmVJZDsKIApAQCAtMjE2LDExICsyMTIsOSBAQCB2b2lkIElEQkRhdGFiYXNlOjpkZWxldGVP
YmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kLT5kZWxldGVPYmplY3RTdG9yZShvYmpl
Y3RTdG9yZUlkLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0g
ICAgaWYgKCFlYykgewotICAgICAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+b2JqZWN0
U3RvcmVEZWxldGVkKG5hbWUpOwotICAgICAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1v
dmUob2JqZWN0U3RvcmVJZCk7Ci0gICAgfQorICAgIG1fYmFja2VuZC0+ZGVsZXRlT2JqZWN0U3Rv
cmUobV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlkKCksIG9iamVjdFN0b3JlSWQpOworICAg
IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5vYmplY3RTdG9yZURlbGV0ZWQobmFtZSk7Cisg
ICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlSWQpOwogfQogCiBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHNjb3BlLCBj
b25zdCBTdHJpbmcmIG1vZGVTdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcAppbmRleCAwZDFkZGIwZGZlYmMwNWRjZTUwN2JlMDlkNDIxYzI2ZDI2OGI0ZTBlLi45
MmM5MThjOWEwNjE0MGIyMDdjMzc3ZGM3ZDBlYzUxOTg2Zjk2OTZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBs
LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJREJGYWN0
b3J5QmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbXBsLmgiCiAjaW5j
bHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQlRyYWNpbmcu
aCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgiCkBAIC00MCw0MCArMzks
NDAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpPcGVyYXRpb24geworY2xhc3MgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24g
OiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRp
b24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQorICAgIHN0
YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3Jl
YXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGRhdGFiYXNlLCBv
YmplY3RTdG9yZSkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZU9iamVjdFN0
b3JlT3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVNZXRhZGF0YSkpOwogICAgIH0K
ICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CiBw
cml2YXRlOgotICAgIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4gb2JqZWN0U3RvcmUpCi0gICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKLSAg
ICAgICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQorICAgIENyZWF0ZU9iamVjdFN0b3Jl
T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0
IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCisgICAgICAgIDog
bV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVNZXRh
ZGF0YShvYmplY3RTdG9yZU1ldGFkYXRhKQogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
IG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsKIH07CiAKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbiB7CitjbGFzcyBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbiA6
IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
bj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oZGF0YWJhc2UsIG9i
amVjdFN0b3JlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7CiAgICAgfQog
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKIHBy
aXZhdGU6Ci0gICAgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiBvYmplY3RTdG9yZSkKLSAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAg
ICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCisgICAgRGVsZXRlT2JqZWN0U3RvcmVP
cGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICAgICAgOiBt
X2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9vYmplY3RTdG9yZU1ldGFk
YXRhKG9iamVjdFN0b3JlTWV0YWRhdGEpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5n
U3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEg
bV9vYmplY3RTdG9yZU1ldGFkYXRhOwogfTsKIAogY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpPcGVyYXRpb24gewpAQCAtMTAwLDQwICs5OSw0MCBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsKIH07CiAKLWNsYXNz
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24g
OiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK2NsYXNzIENy
ZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihk
YXRhYmFzZSwgb2JqZWN0U3RvcmUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVh
dGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKGRhdGFiYXNlLCBvYmplY3RTdG9yZUlkKSk7CiAg
ICAgfQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
KTsKIHByaXZhdGU6Ci0gICAgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQorICAgIENyZWF0ZU9iamVjdFN0b3JlQWJv
cnRPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKQogICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCi0g
ICAgICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAgICAgICAgLCBtX29iamVjdFN0
b3JlSWQob2JqZWN0U3RvcmVJZCkKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CisgICAgY29uc3QgUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+IG1fZGF0YWJhc2U7CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7
CiB9OwogCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZUFi
b3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
biB7CitjbGFzcyBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICBzdGF0aWMgUGFzc093blB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25zdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhJiBvYmplY3RTdG9yZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihkYXRhYmFzZSwgb2JqZWN0U3RvcmUpKTsK
ICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCopOwogcHJpdmF0ZToKLSAgICBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCisgICAgRGVsZXRlT2JqZWN0U3RvcmVB
Ym9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
LCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQogICAg
ICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCi0gICAgICAgICwgbV9vYmplY3RTdG9yZShvYmpl
Y3RTdG9yZSkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlTWV0YWRhdGEob2JqZWN0U3RvcmVNZXRh
ZGF0YSkKICAgICB7CiAgICAgfQogCiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+
IG1fZGF0YWJhc2U7Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2Jq
ZWN0U3RvcmU7CisgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0YWRh
dGE7CiB9OwogCiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlQWJv
cnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9u
IHsKQEAgLTE1Niw2ICsxNTUsODYgQEAgcHJpdmF0ZToKICAgICBpbnQ2NF90IG1fcHJldmlvdXNJ
bnRWZXJzaW9uOwogfTsKIAorY2xhc3MgQ3JlYXRlSW5kZXhPcGVyYXRpb24gOiBwdWJsaWMgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZUluZGV4T3BlcmF0aW9uKGJhY2tpbmdTdG9y
ZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZv
aWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Citwcml2YXRlOgorICAgIENy
ZWF0ZUluZGV4T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3Rv
cmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhN
ZXRhZGF0YSkKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAg
ICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleE1ldGFk
YXRhKGluZGV4TWV0YWRhdGEpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJC
YWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RT
dG9yZUlkOworICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOworfTsK
KworY2xhc3MgRGVsZXRlSW5kZXhPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlSW5kZXhP
cGVyYXRpb24oYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSk7CisgICAgfQor
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKK3By
aXZhdGU6CisgICAgRGVsZXRlSW5kZXhPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQp
CisgICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fb2Jq
ZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQor
ICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tp
bmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBp
bnQ2NF90IG1faW5kZXhJZDsKK307CisKK2NsYXNzIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24g
OiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRp
b24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbihkYXRhYmFzZSwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Citwcml2YXRlOgorICAgIENyZWF0ZUluZGV4QWJv
cnRPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCisgICAgICAgIDogbV9kYXRh
YmFzZShkYXRhYmFzZSkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkK
KyAgICAgICAgLCBtX2luZGV4SWQoaW5kZXhJZCkKKyAgICB7CisgICAgfQorCisgICAgY29uc3Qg
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7CisgICAgY29uc3QgaW50
NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgaW50NjRfdCBtX2luZGV4SWQ7Cit9Owor
CitjbGFzcyBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKGRhdGFiYXNlLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKK3ByaXZhdGU6CisgICAgRGVsZXRlSW5k
ZXhBYm9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFi
YXNlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4
TWV0YWRhdGEpCisgICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICAgICAgLCBtX29i
amVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2luZGV4TWV0YWRhdGEoaW5k
ZXhNZXRhZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZEltcGw+IG1fZGF0YWJhc2U7CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3Jl
SWQ7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Cit9OworCiBj
bGFzcyBHZXRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3Bl
cmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4g
YmFja2luZ1N0b3JlLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5
cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCkBAIC0xNzUsNiArMjU0LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgLCBtX2N1cnNvclR5cGUoY3Vyc29yVHlwZSkKICAgICAgICAg
LCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCiAgICAgeworICAgICAgICBBU1NFUlQobWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKICAgICAgICAgQVNTRVJUKG1l
dGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCkuaWQgPT0gb2JqZWN0U3RvcmVJ
ZCk7CiAgICAgfQogCkBAIC00MDUsNiArNDg1LDQ2IEBAIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OklEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3Rv
CiAgICAgQVNTRVJUKCFtX21ldGFkYXRhLm5hbWUuaXNOdWxsKCkpOwogfQogCit2b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmFkZE9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGEmIG9iamVjdFN0b3JlLCBpbnQ2NF90IG5ld01heE9iamVjdFN0b3JlSWQpCit7CisgICAg
QVNTRVJUKCFtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZS5pZCkp
OworICAgIGlmIChuZXdNYXhPYmplY3RTdG9yZUlkICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6
OkludmFsaWRJZCkgeworICAgICAgICBBU1NFUlQobV9tZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlk
IDwgbmV3TWF4T2JqZWN0U3RvcmVJZCk7CisgICAgICAgIG1fbWV0YWRhdGEubWF4T2JqZWN0U3Rv
cmVJZCA9IG5ld01heE9iamVjdFN0b3JlSWQ7CisgICAgfQorICAgIG1fbWV0YWRhdGEub2JqZWN0
U3RvcmVzLnNldChvYmplY3RTdG9yZS5pZCwgb2JqZWN0U3RvcmUpOworfQorCit2b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCkKK3sKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0
U3RvcmVJZCkpOworICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9y
ZUlkKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRJbmRleChpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4LCBpbnQ2NF90IG5l
d01heEluZGV4SWQpCit7CisgICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRh
aW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0
b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworCisgICAg
QVNTRVJUKCFvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4LmlkKSk7CisgICAgb2Jq
ZWN0U3RvcmUuaW5kZXhlcy5zZXQoaW5kZXguaWQsIGluZGV4KTsKKyAgICBpZiAobmV3TWF4SW5k
ZXhJZCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgQVNTRVJUKG9i
amVjdFN0b3JlLm1heEluZGV4SWQgPCBuZXdNYXhJbmRleElkKTsKKyAgICAgICAgb2JqZWN0U3Rv
cmUubWF4SW5kZXhJZCA9IG5ld01heEluZGV4SWQ7CisgICAgfQorICAgIG1fbWV0YWRhdGEub2Jq
ZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZUlkLCBvYmplY3RTdG9yZSk7Cit9CisKK3ZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQpCit7CisgICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNv
bnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVj
dFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworCisg
ICAgQVNTRVJUKG9iamVjdFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkpOworICAgIG9i
amVjdFN0b3JlLmluZGV4ZXMucmVtb3ZlKGluZGV4SWQpOworICAgIG1fbWV0YWRhdGEub2JqZWN0
U3RvcmVzLnNldChvYmplY3RTdG9yZUlkLCBvYmplY3RTdG9yZSk7Cit9CisKIGJvb2wgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKCkKIHsKICAgICBib29sIHN1Y2Nlc3MgPSBm
YWxzZTsKQEAgLTQxMyw3ICs1MzMsNyBAQCBib29sIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9w
ZW5JbnRlcm5hbCgpCiAgICAgaWYgKCFvaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlm
IChzdWNjZXNzKSB7Ci0gICAgICAgIGxvYWRPYmplY3RTdG9yZXMoKTsKKyAgICAgICAgbV9iYWNr
aW5nU3RvcmUtPmdldE9iamVjdFN0b3JlcyhtX21ldGFkYXRhLmlkLCAmbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIG1fYmFj
a2luZ1N0b3JlLT5jcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKG1fbWV0YWRhdGEubmFtZSwgbV9t
ZXRhZGF0YS52ZXJzaW9uLCBtX21ldGFkYXRhLmludFZlcnNpb24sIG1fbWV0YWRhdGEuaWQpOwpA
QCAtNDMwLDY0ICs1NTAsMTEyIEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpiYWNraW5nU3RvcmUoKSBjb25zdAogCiBJREJEYXRhYmFzZU1ldGFk
YXRhIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKIHsKLSAgICAvLyBG
SVhNRTogRmlndXJlIG91dCBhIHdheSB0byBrZWVwIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdl
dChOKS5pbmRleGVzIHVwIHRvIGRhdGUgcmF0aGVyIHRoYW4gcmVnZW5lcmF0aW5nIHRoaXMgZXZl
cnkgdGltZS4KLSAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fbWV0YWRhdGEpOwot
ICAgIGZvciAoT2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9y
ZXMuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1l
dGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQoaXQtPnZhbHVlLT5pZCgpLCBpdC0+dmFsdWUtPm1ldGFk
YXRhKCkpOwotICAgIHJldHVybiBtZXRhZGF0YTsKKyAgICByZXR1cm4gbV9tZXRhZGF0YTsKIH0K
IAotUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQogewot
ICAgIEFTU0VSVCghbV9vYmplY3RTdG9yZXMuY29udGFpbnMoaWQpKTsKLQotICAgIFJlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhKG5hbWUsIGlkLCBr
ZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6Ok1p
bmltdW1JbmRleElkKSk7Ci0gICAgQVNTRVJUKG9iamVjdFN0b3JlLT5uYW1lKCkgPT0gbmFtZSk7
CisgICAgSURCX1RSQUNFKCJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9y
ZSIpOworICAgIEFTU0VSVCghbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0
U3RvcmVJZCkpOwogCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5z
YWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7
Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJ
T05fQ0hBTkdFKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rp
b25JZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwogCi0gICAgLy8gRklYTUU6IEZpeCBlZGdl
IGNhc2VzIGFyb3VuZCB0cmFuc2FjdGlvbiBhYm9ydHMgdGhhdCBwcmV2ZW50IHRoaXMgZnJvbSBq
dXN0IGJlaW5nIEFTU0VSVChpZCA9PSBtX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQgKyAxKQot
ICAgIEFTU0VSVChpZCA+IG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCk7Ci0gICAgbV9tZXRh
ZGF0YS5tYXhPYmplY3RTdG9yZUlkID0gaWQ7CisgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBv
YmplY3RTdG9yZU1ldGFkYXRhKG5hbWUsIG9iamVjdFN0b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNy
ZW1lbnQsIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6TWluaW11bUluZGV4SWQpOwog
Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENyZWF0ZU9iamVjdFN0b3JlT3Bl
cmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmUpLCBDcmVhdGVPYmplY3RTdG9yZUFib3J0
T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmUpKSkgewotICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENyZWF0ZU9iamVj
dFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlTWV0YWRh
dGEpLCBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0
U3RvcmVJZCkpOwogCi0gICAgbV9vYmplY3RTdG9yZXMuc2V0KGlkLCBvYmplY3RTdG9yZSk7Ci0g
ICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKKyAgICBhZGRPYmplY3RTdG9yZShvYmpl
Y3RTdG9yZU1ldGFkYXRhLCBvYmplY3RTdG9yZUlkKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKK3ZvaWQgQ3JlYXRlT2JqZWN0U3RvcmVPcGVy
YXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7
CiAgICAgSURCX1RSQUNFKCJDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbiIpOwotICAgIGlmICgh
bV9kYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9u
LT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlLT5pZCgpLCBtX29iamVjdFN0
b3JlLT5pZCgpLCBtX29iamVjdFN0b3JlLT5uYW1lKCksIG1fb2JqZWN0U3RvcmUtPmtleVBhdGgo
KSwgbV9vYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpKSkgewotICAgICAgICBSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9y
IGNyZWF0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIsIG1fb2JqZWN0U3RvcmUtPm5hbWUoKS51dGY4
KCkuZGF0YSgpKSk7CisgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUo
dHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIHRyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpLT5pZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuaWQsIG1fb2JqZWN0U3RvcmVNZXRh
ZGF0YS5uYW1lLCBtX29iamVjdFN0b3JlTWV0YWRhdGEua2V5UGF0aCwgbV9vYmplY3RTdG9yZU1l
dGFkYXRhLmF1dG9JbmNyZW1lbnQpKSB7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9y
PiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3IgY3JlYXRpbmcgb2Jq
ZWN0IHN0b3JlICclcycuIiwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEo
KSkpOwogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IucmVsZWFzZSgpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShpbnQ2NF90IGlkKQordm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RT
dG9yZXMuZ2V0KGlkKTsKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRl
bGV0ZU9iamVjdFN0b3JlIik7CisgICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNv
bnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
JiBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVj
dFN0b3JlSWQpOworCisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0
aW9uSWQpKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1f
dHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24t
Pm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOworCisgICAgdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKG1f
YmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSwgIERlbGV0ZU9iamVjdFN0b3JlQWJv
cnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7CisgICAgcmVt
b3ZlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRy
eSkKIHsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZXMuY29udGFpbnMoaWQpKTsKKyAgICBJREJf
VFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4Iik7CisgICAgQVNTRVJU
KG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gbV9vYmplY3RTdG9yZXMuZ2V0KGlkKTsKLSAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKKyAgICBBU1NFUlQoIW9iamVj
dFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkpOworICAgIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEgaW5kZXhNZXRhZGF0YShuYW1lLCBpbmRleElkLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRp
RW50cnkpOworCisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9u
SWQpKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJh
bnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKICAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1v
ZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOwogCi0gICAgaWYgKCF0cmFu
c2FjdGlvbi0+c2NoZWR1bGVUYXNrKERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUo
dGhpcywgb2JqZWN0U3RvcmUpLCBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVh
dGUodGhpcywgb2JqZWN0U3RvcmUpKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxl
VGFzayhDcmVhdGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBvYmplY3RT
dG9yZUlkLCBpbmRleE1ldGFkYXRhKSwgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRl
KHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKTsKKworICAgIGFkZEluZGV4KG9iamVjdFN0
b3JlSWQsIGluZGV4TWV0YWRhdGEsIGluZGV4SWQpOworfQorCisKK3ZvaWQgQ3JlYXRlSW5kZXhP
cGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24p
Cit7CisgICAgSURCX1RSQUNFKCJDcmVhdGVJbmRleE9wZXJhdGlvbiIpOworICAgIGlmICghbV9i
YWNraW5nU3RvcmUtPmNyZWF0ZUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+aWQoKSwgbV9vYmplY3RTdG9yZUlkLCBt
X2luZGV4TWV0YWRhdGEuaWQsIG1faW5kZXhNZXRhZGF0YS5uYW1lLCBtX2luZGV4TWV0YWRhdGEu
a2V5UGF0aCwgbV9pbmRleE1ldGFkYXRhLnVuaXF1ZSwgbV9pbmRleE1ldGFkYXRhLm11bHRpRW50
cnkpKSB7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIklu
dGVybmFsIGVycm9yIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZSBpbmRleCAnJXMnLiIsIG1faW5kZXhN
ZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgbV9vYmplY3RTdG9yZXMucmVtb3ZlKGlkKTsKK30KKwordm9pZCBDcmVhdGVJbmRleEFib3J0
T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9u
KQoreworICAgIElEQl9UUkFDRSgiQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbiIpOworICAgIEFT
U0VSVCghdHJhbnNhY3Rpb24pOworICAgIG1fZGF0YWJhc2UtPnJlbW92ZUluZGV4KG1fb2JqZWN0
U3RvcmVJZCwgbV9pbmRleElkKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpk
ZWxldGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkKQoreworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6ZGVsZXRlSW5kZXgiKTsKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29u
dGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEg
b2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7
CisKKyAgICBBU1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7Cisg
ICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IG9iamVjdFN0b3JlLmlu
ZGV4ZXMuZ2V0KGluZGV4SWQpOworCisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5z
KHRyYW5zYWN0aW9uSWQpKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2Fj
dGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBBU1NFUlQodHJh
bnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOworCisg
ICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhEZWxldGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRl
KG1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSwgRGVsZXRlSW5kZXhBYm9y
dE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsK
KworICAgIHJlbW92ZUluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOworfQorCit2b2lkIERl
bGV0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRy
YW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiRGVsZXRlSW5kZXhPcGVyYXRpb24iKTsKKyAg
ICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlSW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5pZCgpLCBtX29iamVjdFN0b3Jl
SWQsIG1faW5kZXhJZCk7Cit9CisKK3ZvaWQgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJf
VFJBQ0UoIkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24iKTsKKyAgICBBU1NFUlQoIXRyYW5zYWN0
aW9uKTsKKyAgICBtX2RhdGFiYXNlLT5hZGRJbmRleChtX29iamVjdFN0b3JlSWQsIG1faW5kZXhN
ZXRhZGF0YSwgSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKTsKIH0KIAogdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpjb21taXQoaW50NjRfdCB0cmFuc2FjdGlvbklkKQpAQCAtNTA4LDcg
KzY3Niw3IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Z2V0KGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpCiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rp
b25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKIAot
ICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soR2V0T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNr
aW5nU3RvcmUsIG1ldGFkYXRhKCksIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBr
ZXlPbmx5ID8gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5T25seSA6IElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U6OktleUFuZFZhbHVlLCBjYWxsYmFja3MpKTsKKyAgICB0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKEdldE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBtX21l
dGFkYXRhLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwga2V5T25seSA/IElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleU9ubHkgOiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
OjpLZXlBbmRWYWx1ZSwgY2FsbGJhY2tzKSk7CiB9CiAKIHZvaWQgR2V0T3BlcmF0aW9uOjpwZXJm
b3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQpAQCAtNjA3LDcgKzc3
NSw3IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHV0KGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBWCiAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CiAg
ICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05M
WSk7CiAKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlTWV0YWRh
dGEgPSBtZXRhZGF0YSgpLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisgICAgY29u
c3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0
YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwogCiAgICAgQVNTRVJUKG9iamVjdFN0
b3JlTWV0YWRhdGEuYXV0b0luY3JlbWVudCB8fCBrZXkuZ2V0KCkpOwogCkBAIC03MTUsOCArODgz
LDggQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFMKICAgICBWZWN0b3I8T3duUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKICAgICBTdHJp
bmcgZXJyb3JNZXNzYWdlOwogICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNlOwotICAg
IEFTU0VSVChtZXRhZGF0YSgpLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7
Ci0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9
IG1ldGFkYXRhKCkub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKyAgICBBU1NFUlQo
bV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBtX21ldGFk
YXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CiAgICAgYm9vbCBiYWNraW5nU3Rv
cmVTdWNjZXNzID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bWFrZUluZGV4V3JpdGVycyh0
cmFuc2FjdGlvbiwgc3RvcmUuZ2V0KCksIGlkKCksIG9iamVjdFN0b3JlTWV0YWRhdGEsIHByaW1h
cnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JN
ZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKICAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3Mp
IHsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tp
bmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7CkBAIC04MDMsNyArOTcxLDcg
QEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjb3VudChpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwKICAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmNvdW50Iik7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRy
YW5zYWN0aW9uSWQpKTsKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlv
biA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBBU1NFUlQobWV0YWRh
dGEoKS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIEFTU0VSVCht
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CiAgICAgdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzayhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0
b3JlLCBpZCgpLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7
CiB9CiAKQEAgLTg0Myw3ICsxMDExLDYgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpk
ZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3QKIHZvaWQg
RGVsZXRlUmFuZ2VPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCog
dHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJEZWxldGVSYW5nZU9wZXJhdGlvbiIpOwot
CiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3Ig
PSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9r
ZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKICAgICBpZiAoYmFja2luZ1N0b3JlQ3Vy
c29yKSB7CiAgICAgICAgIGRvIHsKQEAgLTg3MiwxMiArMTAzOSwxMiBAQCB2b2lkIENsZWFyT3Bl
cmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQog
ICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKK3ZvaWQgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRp
b246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7CiAg
ICAgSURCX1RSQUNFKCJEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbiIpOwotICAgIGJvb2wgb2sg
PSBtX2RhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2UtPmlkKCksIG1fb2JqZWN0
U3RvcmUtPmlkKCkpOworICAgIGJvb2wgb2sgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0
U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIHRyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLT5pZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuaWQpOwogICAgIGlmICgh
b2spIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmlu
Zzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBkZWxldGluZyBvYmplY3Qgc3RvcmUgJyVzJy4iLCBt
X29iamVjdFN0b3JlLT5uYW1lKCkudXRmOCgpLmRhdGEoKSkpOworICAgICAgICBSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9y
IGRlbGV0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5uYW1l
LnV0ZjgoKS5kYXRhKCkpKTsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKICAg
ICB9CiB9CkBAIC0xMTMyLDcgKzEyOTksNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmRlbGV0ZURhdGFiYXNlRmluYWwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYQogICAg
IG1fbWV0YWRhdGEudmVyc2lvbiA9IE5vU3RyaW5nVmVyc2lvbjsKICAgICBtX21ldGFkYXRhLmlk
ID0gSW52YWxpZElkOwogICAgIG1fbWV0YWRhdGEuaW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0
YWRhdGE6Ok5vSW50VmVyc2lvbjsKLSAgICBtX29iamVjdFN0b3Jlcy5jbGVhcigpOworICAgIG1f
bWV0YWRhdGEub2JqZWN0U3RvcmVzLmNsZWFyKCk7CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
KTsKIH0KIApAQCAtMTE3NywzNSArMTM0NCwyMyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OmNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENhbGxiYWNrcwog
ICAgIG1fY2xvc2luZ0Nvbm5lY3Rpb24gPSBmYWxzZTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKLXsKLSAgICBWZWN0b3I8aW50NjRfdD4gaWRz
OwotICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwotICAgIFZlY3RvcjxJREJLZXlQYXRoPiBrZXlQ
YXRoczsKLSAgICBWZWN0b3I8Ym9vbD4gYXV0b0luY3JlbWVudEZsYWdzOwotICAgIFZlY3Rvcjxp
bnQ2NF90PiBtYXhJbmRleElkczsKLSAgICBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4g
b2JqZWN0U3RvcmVzID0gbV9iYWNraW5nU3RvcmUtPmdldE9iamVjdFN0b3JlcyhtX21ldGFkYXRh
LmlkKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U3RvcmVzLnNpemUoKTsg
aSsrKQotICAgICAgICBtX29iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVzW2ldLmlkLCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVzW2ldKSk7Ci19
Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9w
ZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikK
K3ZvaWQgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKKyAgICBJREJfVFJBQ0UoIkNyZWF0ZU9i
amVjdFN0b3JlQWJvcnRPcGVyYXRpb24iKTsKICAgICBBU1NFUlQoIXRyYW5zYWN0aW9uKTsKLSAg
ICBBU1NFUlQobV9kYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMuY29udGFpbnMobV9vYmplY3RTdG9y
ZS0+aWQoKSkpOwotICAgIG1fZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLnJlbW92ZShtX29iamVj
dFN0b3JlLT5pZCgpKTsKKyAgICBtX2RhdGFiYXNlLT5yZW1vdmVPYmplY3RTdG9yZShtX29iamVj
dFN0b3JlSWQpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkRlbGV0ZU9iamVj
dFN0b3JlQWJvcnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCog
dHJhbnNhY3Rpb24pCit2b2lkIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OnBlcmZv
cm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7CisgICAgSURCX1RS
QUNFKCJEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIik7CiAgICAgQVNTRVJUKCF0cmFu
c2FjdGlvbik7Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlu
cyhtX29iamVjdFN0b3JlLT5pZCgpKSk7Ci0gICAgbV9kYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMu
c2V0KG1fb2JqZWN0U3RvcmUtPmlkKCksIG1fb2JqZWN0U3RvcmUpOworICAgIG1fZGF0YWJhc2Ut
PmFkZE9iamVjdFN0b3JlKG1fb2JqZWN0U3RvcmVNZXRhZGF0YSwgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YTo6SW52YWxpZElkKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJz
aW9uQ2hhbmdlQWJvcnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCogdHJhbnNhY3Rpb24pCiB7CisgICAgSURCX1RSQUNFKCJWZXJzaW9uQ2hhbmdlQWJvcnRPcGVy
YXRpb24iKTsKICAgICBBU1NFUlQoIXRyYW5zYWN0aW9uKTsKICAgICBtX2RhdGFiYXNlLT5tX21l
dGFkYXRhLnZlcnNpb24gPSBtX3ByZXZpb3VzVmVyc2lvbjsKICAgICBtX2RhdGFiYXNlLT5tX21l
dGFkYXRhLmludFZlcnNpb24gPSBtX3ByZXZpb3VzSW50VmVyc2lvbjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
aAppbmRleCA5NDRiODMwMGM3ZTMyMjNiZGQzNDRiYjViYTgxZDFjM2IxNGZhMTYyLi4zNDdmMjNl
ZDFiYWM1MTc5YzhmNjY3MTYzYjAyODM1N2E2M2ZmMjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCkBA
IC00MCw3ICs0MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIElEQkJhY2tpbmdTdG9y
ZTsKIGNsYXNzIElEQkRhdGFiYXNlOwogY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBsOwotY2xh
c3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw7CiBjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U7CiBjbGFzcyBJREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yOwpAQCAtNTQsMTYgKzUzLDIwIEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7CiAgICAgaW50NjRfdCBpZCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuaWQ7IH0KKyAgICB2b2lkIGFkZE9iamVjdFN0b3JlKGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBpbnQ2NF90IG5ld01heE9iamVjdFN0b3JlSWQp
OworICAgIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAg
ICB2b2lkIGFkZEluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRh
ZGF0YSYsIGludDY0X3QgbmV3TWF4SW5kZXhJZCk7CisgICAgdm9pZCByZW1vdmVJbmRleChpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7CiAKICAgICB2b2lkIG9wZW5Db25u
ZWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uKTsKICAgICB2
b2lkIGRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAKICAgICAvLyBJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UKICAgICB2aXJ0dWFsIElEQkRhdGFiYXNlTWV0YWRh
dGEgbWV0YWRhdGEoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGlkLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wg
YXV0b0luY3JlbWVudCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3Jl
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZT4gY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgIHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCk7CiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIG1ldGhvZCBp
biBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzOTIzLgogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZVRy
YW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBv
YmplY3RTdG9yZUlkcywgSURCVHJhbnNhY3Rpb246Ok1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1
bnNpZ25lZCBzaG9ydCBtb2RlKTsKQEAgLTcyLDEwICs3NSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgY29tbWl0KGludDY0X3QgdHJhbnNhY3Rpb25JZCk7CiAgICAgdmlydHVhbCB2b2lk
IGFib3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRl
SW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1
bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKIAotICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUoaW50NjRfdCBpZCk7CiAgICAgSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1f
dHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKTsgfQogICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFy
dGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHZvaWQgdHJh
bnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsK
QEAgLTk2LDIwICs5OCwxNSBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBvcGVuSW50ZXJuYWwoKTsK
ICAgICB2b2lkIHJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbik7Ci0gICAgdm9pZCBsb2FkT2JqZWN0
U3RvcmVzKCk7CiAgICAgc2l6ZV90IGNvbm5lY3Rpb25Db3VudCgpOwogICAgIHZvaWQgcHJvY2Vz
c1BlbmRpbmdDYWxscygpOwogCiAgICAgYm9vbCBpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpOwog
ICAgIHZvaWQgZGVsZXRlRGF0YWJhc2VGaW5hbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwog
Ci0gICAgY2xhc3MgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb247Ci0gICAgY2xhc3MgRGVsZXRl
T2JqZWN0U3RvcmVPcGVyYXRpb247CiAgICAgY2xhc3MgVmVyc2lvbkNoYW5nZU9wZXJhdGlvbjsK
IAogICAgIC8vIFdoZW4gYSAidmVyc2lvbmNoYW5nZSIgdHJhbnNhY3Rpb24gYWJvcnRzLCB0aGVz
ZSByZXN0b3JlIHRoZSBiYWNrLWVuZCBvYmplY3QgaGllcmFyY2h5LgotICAgIGNsYXNzIENyZWF0
ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb247Ci0gICAgY2xhc3MgRGVsZXRlT2JqZWN0U3RvcmVB
Ym9ydE9wZXJhdGlvbjsKICAgICBjbGFzcyBWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb247CiAK
ICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKQEAgLTExOSw5ICsx
MTYsNiBAQCBwcml2YXRlOgogICAgIC8vIFRoaXMgbWlnaHQgbm90IG5lZWQgdG8gYmUgYSBSZWZQ
dHIgc2luY2UgdGhlIGZhY3RvcnkncyBsaWZldGltZSBpcyB0aGF0IG9mIHRoZSBwYWdlIGdyb3Vw
LCBidXQgaXQncyBiZXR0ZXIgdG8gYmUgY29uc2Vydml0aXZlIHRoYW4gc29ycnkuCiAgICAgUmVm
UHRyPElEQkZhY3RvcnlCYWNrZW5kSW1wbD4gbV9mYWN0b3J5OwogCi0gICAgdHlwZWRlZiBIYXNo
TWFwPGludDY0X3QsIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiA+IE9iamVjdFN0
b3JlTWFwOwotICAgIE9iamVjdFN0b3JlTWFwIG1fb2JqZWN0U3RvcmVzOwotCiAgICAgT3duUHRy
PElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcjsKICAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gbV9ydW5uaW5nVmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4OTQwYzVlN2UxOGJiYTRhODA1NTY0ZTRiZTg0NmY5MzI0NzNiODFhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJJbmRl
eEJhY2tlbmRJbXBsLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1
ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgotI2luY2x1
ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURC
S2V5LmgiCi0jaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKLSNpbmNsdWRlICJJREJNZXRhZGF0YS5o
IgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJU
cmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUlEQkluZGV4QmFja2VuZEltcGw6OklEQkluZGV4QmFja2VuZElt
cGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UsIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEmIG1ldGFkYXRhKQotICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKLSAgICAsIG1f
bWV0YWRhdGEobWV0YWRhdGEpCi17Ci19Ci0KLUlEQkluZGV4QmFja2VuZEltcGw6On5JREJJbmRl
eEJhY2tlbmRJbXBsKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDFhOTM5OTllMTYzM2Q0ZjdmYTcxZTliNjg3NGRlMTgxMDFjMjBlOWEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oCisrKyAvZGV2L251bGwK
QEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCSW5kZXhCYWNrZW5kSW1wbF9oCi0j
ZGVmaW5lIElEQkluZGV4QmFja2VuZEltcGxfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0KLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAi
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQkluZGV4QmFja2VuZEludGVy
ZmFjZS5oIgotI2luY2x1ZGUgIklEQktleVBhdGguaCIKLSNpbmNsdWRlICJJREJNZXRhZGF0YS5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkJhY2tpbmdTdG9yZTsKLWNsYXNz
IElEQktleTsKLWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw7Ci0KLWNsYXNzIElEQklu
ZGV4QmFja2VuZEltcGwgOiBwdWJsaWMgSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBjcmVhdGUoY29u
c3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UsIGNvbnN0IElEQkluZGV4TWV0YWRh
dGEmIG1ldGFkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJbmRl
eEJhY2tlbmRJbXBsKGRhdGFiYXNlLCBtZXRhZGF0YSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5J
REJJbmRleEJhY2tlbmRJbXBsKCk7Ci0KLSAgICBpbnQ2NF90IGlkKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX21ldGFkYXRhLmlkICE9IEludmFsaWRJZCk7Ci0gICAgICAgIHJldHVy
biBtX21ldGFkYXRhLmlkOwotICAgIH0KLQotICAgIC8vIElEQkluZGV4QmFja2VuZEludGVyZmFj
ZQotICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1
bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgb3BlbktleUN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQg
c2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBn
ZXRLZXkoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KLQotICAgIElEQkluZGV4TWV0YWRhdGEgbWV0YWRhdGEoKSBjb25z
dCB7IHJldHVybiBtX21ldGFkYXRhOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgeyByZXR1
cm4gbV9tZXRhZGF0YS5uYW1lOyB9Ci0gICAgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCgpIHsg
cmV0dXJuIG1fbWV0YWRhdGEua2V5UGF0aDsgfQotICAgIGNvbnN0IGJvb2wmIHVuaXF1ZSgpIHsg
cmV0dXJuIG1fbWV0YWRhdGEudW5pcXVlOyB9Ci0gICAgY29uc3QgYm9vbCYgbXVsdGlFbnRyeSgp
IHsgcmV0dXJuIG1fbWV0YWRhdGEubXVsdGlFbnRyeTsgfQotCi1wcml2YXRlOgotICAgIElEQklu
ZGV4QmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCosIGNvbnN0IElEQklu
ZGV4TWV0YWRhdGEmKTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7
Ci0KLSAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhYmFzZS0+YmFja2luZ1N0b3JlKCk7IH0KLSAgICBpbnQ2NF90IGRhdGFi
YXNlSWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlLT5pZCgpOyB9Ci0KLSAgICBjb25zdCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsKiBtX2RhdGFiYXNlOwotCi0gICAgSURCSW5kZXhNZXRhZGF0
YSBtX21ldGFkYXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQot
I2VuZGlmIC8vIElEQkluZGV4QmFja2VuZEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IDg5MTI1M2Q5ZTA0Yzkx
ZTk1YWVlYjIzMDQ1NDVmMjQ2NmEwMjcyNWUuLmY1MGZlMWViYjgwODJlMjE3NmY4ZDRmZWQzMGQ5
YWFiMDMyNTVmOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTQ5LDEzICs0OSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkZWZhdWx0RGlyZWN0aW9uID0gSURC
Q3Vyc29yOjpORVhUOwogCi1JREJPYmplY3RTdG9yZTo6SURCT2JqZWN0U3RvcmUoY29uc3QgSURC
T2JqZWN0U3RvcmVNZXRhZGF0YSYgbWV0YWRhdGEsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBpZGJPYmplY3RTdG9yZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uKQorSURCT2JqZWN0U3RvcmU6OklEQk9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEmIG1ldGFkYXRhLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgOiBt
X21ldGFkYXRhKG1ldGFkYXRhKQotICAgICwgbV9iYWNrZW5kKGlkYk9iamVjdFN0b3JlKQogICAg
ICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKICAgICAsIG1fZGVsZXRlZChmYWxzZSkKIHsK
LSAgICBBU1NFUlQobV9iYWNrZW5kKTsKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7CiAgICAg
Ly8gV2UgcGFzcyBhIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFk
b3B0ZWQuCiAgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CkBAIC0zODUsOSArMzgzLDcg
QEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQKICAgICB9CiAKICAgICBpbnQ2NF90IGluZGV4SWQg
PSBtX21ldGFkYXRhLm1heEluZGV4SWQgKyAxOwotICAgIG1fYmFja2VuZC0+Y3JlYXRlSW5kZXgo
aW5kZXhJZCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5LCBtX3RyYW5zYWN0aW9u
LT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOworICAgIGJh
Y2tlbmREQigpLT5jcmVhdGVJbmRleChtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBpbmRleElk
LCBuYW1lLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkpOwogCiAgICAgKyttX21ldGFkYXRh
Lm1heEluZGV4SWQ7CiAKQEAgLTQ2NiwxNCArNDYyLDEzIEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6
OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmQtPmRlbGV0ZUluZGV4KGluZGV4SWQs
IG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmICghZWMpIHsKLSAgICAgICAg
SURCSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbmRleE1hcC5maW5kKG5hbWUpOwotICAgICAg
ICBpZiAoaXQgIT0gbV9pbmRleE1hcC5lbmQoKSkgewotICAgICAgICAgICAgbV9tZXRhZGF0YS5p
bmRleGVzLnJlbW92ZShpdC0+dmFsdWUtPmlkKCkpOwotICAgICAgICAgICAgaXQtPnZhbHVlLT5t
YXJrRGVsZXRlZCgpOwotICAgICAgICAgICAgbV9pbmRleE1hcC5yZW1vdmUobmFtZSk7Ci0gICAg
ICAgIH0KKyAgICBiYWNrZW5kREIoKS0+ZGVsZXRlSW5kZXgobV90cmFuc2FjdGlvbi0+aWQoKSwg
aWQoKSwgaW5kZXhJZCk7CisKKyAgICBJREJJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4
TWFwLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ICE9IG1faW5kZXhNYXAuZW5kKCkpIHsKKyAgICAg
ICAgbV9tZXRhZGF0YS5pbmRleGVzLnJlbW92ZShpdC0+dmFsdWUtPmlkKCkpOworICAgICAgICBp
dC0+dmFsdWUtPm1hcmtEZWxldGVkKCk7CisgICAgICAgIG1faW5kZXhNYXAucmVtb3ZlKG5hbWUp
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmgKaW5kZXggN2UyZjcyZmFlYTg1MTkzYzMwOTNlZDYzZDg1YWEyYTUwMmYz
YzAyNy4uNmRmZDk3ODhhNTA4YzZiOTg1MjBkZTBmNDFkMzFkZDEzZmRhMjdhZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCkBAIC0y
OSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIklEQkN1cnNv
ci5oIgogI2luY2x1ZGUgIklEQkluZGV4LmgiCi0jaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW50
ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIK
ICNpbmNsdWRlICJJREJNZXRhZGF0YS5oIgpAQCAtNTIsOSArNTEsOSBAQCBjbGFzcyBJREJBbnk7
CiAKIGNsYXNzIElEQk9iamVjdFN0b3JlIDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGlj
IFJlZkNvdW50ZWQ8SURCT2JqZWN0U3RvcmU+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEm
IG1ldGFkYXRhLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gYmFj
a2VuZCwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlPiBjcmVhdGUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgbWV0
YWRhdGEsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSURCT2JqZWN0U3RvcmUobWV0YWRhdGEsIGJhY2tlbmQsIHRyYW5zYWN0
aW9uKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCT2JqZWN0U3RvcmUobWV0YWRh
dGEsIHRyYW5zYWN0aW9uKSk7CiAgICAgfQogICAgIH5JREJPYmplY3RTdG9yZSgpIHsgfQogCkBA
IC0xMDksNyArMTA4LDcgQEAgcHVibGljOgogICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZSogYmFja2VuZERCKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgSURCT2JqZWN0U3RvcmUoY29u
c3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlPiwgSURCVHJhbnNhY3Rpb24qKTsKKyAgICBJREJPYmplY3RTdG9yZShjb25z
dCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgSURCVHJhbnNhY3Rpb24qKTsKIAogICAgIGludDY0
X3QgZmluZEluZGV4SWQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICBib29sIGNvbnRh
aW5zSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdApAQCAtMTE4LDcgKzExNyw2IEBAIHBy
aXZhdGU6CiAgICAgfQogCiAgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX21ldGFkYXRhOwot
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKICAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CiAgICAgYm9vbCBtX2RlbGV0
ZWQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggZTZjZTgzYzM1YjM4YzA0ZWNl
YWZhNzhhOWFhZDU1ZmY4MGFmYjdiMS4uZDI0YjY3ZmQ5YmNhMDkxMjA3MWQ1YjkwOTE4MDZkOTdh
NmFiMWU2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTM0LDcgKzM0LDYgQEAK
ICNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNl
QmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1
ZGUgIklEQkluZGV4QmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRl
ICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKQEAgLTQ0LDk4ICs0Myw2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6Q3JlYXRlSW5kZXhPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+IGluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVJ
bmRleE9wZXJhdGlvbihvYmplY3RTdG9yZSwgaW5kZXgpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2
b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBD
cmVhdGVJbmRleE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQotICAg
ICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0gICAgICAgICwgbV9pbmRleChpbmRl
eCkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7
Ci19OwotCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleE9wZXJh
dGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9w
ZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2Jq
ZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZUluZGV4T3BlcmF0aW9uKG9iamVjdFN0
b3JlLCBpbmRleCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIERlbGV0ZUluZGV4T3BlcmF0aW9uKFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCi0gICAgICAgIDogbV9vYmplY3RTdG9yZShv
YmplY3RTdG9yZSkKLSAgICAgICAgLCBtX2luZGV4KGluZGV4KQotICAgIHsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKLSAgICBS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsKLX07Ci0KLWNsYXNzIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKG9iamVjdFN0b3JlLCBpbmRleCkp
OwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKik7Ci1wcml2YXRlOgotICAgIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24oUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiBpbmRleCkKLSAgICAgICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0
b3JlKQotICAgICAgICAsIG1faW5kZXgoaW5kZXgpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwotICAgIFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiBtX2luZGV4OwotfTsKLQotY2xhc3MgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24ob2JqZWN0U3RvcmUsIGluZGV4KSk7Ci0gICAg
fQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsK
LXByaXZhdGU6Ci0gICAgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4KQotICAgICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0g
ICAgICAgICwgbV9pbmRleChpbmRleCkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+IG1faW5kZXg7Ci19OwotCi0KLUlEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
On5JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKCkKLXsKLX0KLQotSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKiBkYXRhYmFzZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgbWV0YWRhdGEp
Ci0gICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICwgbV9tZXRhZGF0YShtZXRhZGF0YSkK
LXsKLSAgICBsb2FkSW5kZXhlcygpOwotfQotCi1JREJPYmplY3RTdG9yZU1ldGFkYXRhIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKLXsKLSAgICBJREJPYmplY3RT
dG9yZU1ldGFkYXRhIG1ldGFkYXRhKG1fbWV0YWRhdGEpOwotICAgIGZvciAoSW5kZXhNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQo
KTsgKytpdCkKLSAgICAgICAgbWV0YWRhdGEuaW5kZXhlcy5zZXQoaXQtPmtleSwgaXQtPnZhbHVl
LT5tZXRhZGF0YSgpKTsKLSAgICByZXR1cm4gbWV0YWRhdGE7Ci19Ci0KIGJvb2wgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6OnZlcmlmeUluZGV4S2V5cyhJREJCYWNraW5n
U3RvcmUmIGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGJvb2wmIGNhbkFkZEtleXMsIGNvbnN0IElEQktleSogcHJpbWFyeUtleSwgU3Ry
aW5nKiBlcnJvck1lc3NhZ2UpIGNvbnN0CiB7CiAgICAgY2FuQWRkS2V5cyA9IGZhbHNlOwpAQCAt
MjEyLDg2ICsxMTksNiBAQCBib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om1ha2VJbmRl
eFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbgogICAgIHJldHVybiB0cnVl
OwogfQogCi1QYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX2luZGV4ZXMuY29udGFp
bnMoaWQpLCAiSW5kZXhlcyBhbHJlYWR5IGNvbnRhaW4gJyVzJyIsIG5hbWUudXRmOCgpLmRhdGEo
KSk7Ci0KLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBJREJJbmRleEJh
Y2tlbmRJbXBsOjpjcmVhdGUobV9kYXRhYmFzZSwgSURCSW5kZXhNZXRhZGF0YShuYW1lLCBpZCwg
a2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KSk7Ci0gICAgQVNTRVJUKGluZGV4LT5uYW1lKCkg
PT0gbmFtZSk7Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsK
LSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lP
Tl9DSEFOR0UpOwotICAgIEFTU0VSVChpZCA+IG1fbWV0YWRhdGEubWF4SW5kZXhJZCk7Ci0gICAg
bV9tZXRhZGF0YS5tYXhJbmRleElkID0gaWQ7Ci0KLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hl
ZHVsZVRhc2soQ3JlYXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBpbmRleCksIENyZWF0
ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBpbmRleCkpKSB7Ci0gICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgbV9pbmRleGVzLnNldChpZCwgaW5kZXgpOwotICAg
IHJldHVybiBpbmRleC5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6Q3JlYXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJDcmVhdGVJbmRleE9wZXJhdGlv
biIpOwotICAgIGlmICghbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmNyZWF0ZUluZGV4
KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5k
YXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksIG1faW5kZXgtPmlkKCksIG1faW5kZXgt
Pm5hbWUoKSwgbV9pbmRleC0+a2V5UGF0aCgpLCBtX2luZGV4LT51bmlxdWUoKSwgbV9pbmRleC0+
bXVsdGlFbnRyeSgpKSkgewotICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6
Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciB3aGVuIHRyeWluZyB0byBjcmVhdGUgaW5kZXggJyVzJy4i
LCBtX2luZGV4LT5uYW1lKCkudXRmOCgpLmRhdGEoKSkpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLX0KLQotUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmluZGV4KGludDY0X3QgaW5kZXhJZCkKLXsKLSAgICBSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9IG1faW5kZXhlcy5nZXQoaW5kZXhJZCk7Ci0g
ICAgQVNTRVJUKGluZGV4KTsKLSAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwotfQotCi12b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KGludDY0X3QgaW5kZXhJZCwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgQVNTRVJUKG1faW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7Ci0K
LSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBtX2luZGV4ZXMuZ2V0KGlu
ZGV4SWQpOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlv
biA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwotICAg
IEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NI
QU5HRSk7Ci0KLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soRGVsZXRlSW5kZXhP
cGVyYXRpb246OmNyZWF0ZSh0aGlzLCBpbmRleCksIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb246
OmNyZWF0ZSh0aGlzLCBpbmRleCkpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBtX2luZGV4ZXMucmVtb3ZlKGluZGV4SWQpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OkRlbGV0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiRGVsZXRlSW5kZXhPcGVy
YXRpb24iKTsKLSAgICBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+ZGVsZXRlSW5kZXgo
dHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRh
dGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9pbmRleC0+aWQoKSk7Ci19Ci0KLXZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bG9hZEluZGV4ZXMoKQotewotICAgIFZlY3Rv
cjxJREJJbmRleE1ldGFkYXRhPiBpbmRleGVzID0gYmFja2luZ1N0b3JlKCktPmdldEluZGV4ZXMo
ZGF0YWJhc2VJZCgpLCBtX21ldGFkYXRhLmlkKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgaW5kZXhlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9pbmRleGVzLnNldChpbmRleGVzW2ld
LmlkLCBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobV9kYXRhYmFzZSwgaW5kZXhlc1tpXSkp
OwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUluZGV4QWJvcnRP
cGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24p
Ci17Ci0gICAgQVNTRVJUKCF0cmFuc2FjdGlvbik7Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmUt
Pm1faW5kZXhlcy5jb250YWlucyhtX2luZGV4LT5pZCgpKSk7Ci0gICAgbV9vYmplY3RTdG9yZS0+
bV9pbmRleGVzLnJlbW92ZShtX2luZGV4LT5pZCgpKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCghdHJhbnNhY3Rp
b24pOwotICAgIEFTU0VSVCghbV9vYmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKG1faW5k
ZXgtPmlkKCkpKTsKLSAgICBtX29iamVjdFN0b3JlLT5tX2luZGV4ZXMuc2V0KG1faW5kZXgtPmlk
KCksIG1faW5kZXgpOwotfQotCiBQYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Z2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CiAgICAgY29uc3Qg
aW50NjRfdCBtYXhHZW5lcmF0b3JWYWx1ZSA9IDkwMDcxOTkyNTQ3NDA5OTJMTDsgLy8gTWF4aW11
bSBpbnRlZ2VyIHN0b3JhYmxlIGFzIEVDTUFTY3JpcHQgbnVtYmVyLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5oCmluZGV4IGIzZTJlNTUwMTZlMTMxMmYzMzkwYTAxNzZkZWU3ODE2OWE5ODJiZGUuLjk3
MGZjNDlhMmU2OTkxNTgxMDAyNWU0MGUwOTNmYzljMGRiOTE5ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsLmgKQEAgLTM5LDUzICszOSwxMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOwotY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbDsKIGNs
YXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw7CiBjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U7CiBzdHJ1Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTsKIAotY2xhc3MgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IGNyZWF0ZShjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSwg
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgbWV0YWRhdGEpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoZGF0YWJhc2UsIG1l
dGFkYXRhKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwo
KTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4gPiBJbmRleE1hcDsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9
IDA7Ci0gICAgaW50NjRfdCBpZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9tZXRh
ZGF0YS5pZCAhPSBJbnZhbGlkSWQpOwotICAgICAgICByZXR1cm4gbV9tZXRhZGF0YS5pZDsKLSAg
ICB9Ci0KLSAgICAvLyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UKLSAgICB2aXJ0dWFs
IHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25z
dCBWZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYpIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVm
UHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQotICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlPiBjcmVhdGVJbmRleChpbnQ2NF90LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IElEQktleVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgoaW50NjRfdCk7Ci0gICAg
dmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29y
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBJREJDdXJzb3I6OkRpcmVjdGlvbiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBl
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElE
QktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQot
Ci0gICAgc3RhdGljIGJvb2wgcG9wdWxhdGVJbmRleChJREJCYWNraW5nU3RvcmUmLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPik7Ci0KLSAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKCkgY29u
c3Q7Ci0gICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9tZXRhZGF0YS5uYW1lOyB9
Ci0gICAgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRh
dGEua2V5UGF0aDsgfQotICAgIGNvbnN0IGJvb2wmIGF1dG9JbmNyZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX21ldGFkYXRhLmF1dG9JbmNyZW1lbnQ7IH0KLQotICAgIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlLT5iYWNr
aW5nU3RvcmUoKTsgfQotICAgIGludDY0X3QgZGF0YWJhc2VJZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YWJhc2UtPmlkKCk7IH0KKy8vIEZJWE1FOiB0aGlzIG5hbWVzcGFjZSBpcyB0ZW1wb3Jhcnkg
dW50aWwgd2UgbW92ZSBpdHMgY29udGVudHMgb3V0IHRvIHRoZWlyIG93biBob21lLgorbmFtZXNw
YWNlIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwgewogCiAgICAgY2xhc3MgSW5kZXhXcml0ZXIg
ewogICAgIHB1YmxpYzoKQEAgLTEwOSwyNyArNjgsMTAgQEAgcHVibGljOgogICAgICAgICBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cyBtX2luZGV4S2V5czsKICAgICB9
OwogCi0gICAgc3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVycyhQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+LCBJREJCYWNraW5nU3RvcmUqLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFy
eUtleSwgYm9vbCBrZXlXYXNHZW5lcmF0ZWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJ
ZHMsIGNvbnN0IFZlY3RvcjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5
cz4mLCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyog
ZXJyb3JNZXNzYWdlLCBib29sJiBjb21wbGV0ZWQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLQotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gZ2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgc3RhdGljIGJvb2wgdXBk
YXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSosIGJvb2wgY2hlY2tDdXJyZW50KTsKLQotcHJpdmF0
ZToKLSAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGNvbnN0IElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwqLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJik7Ci0KLSAgICB2b2lkIGxvYWRJ
bmRleGVzKCk7Ci0KLSAgICBjbGFzcyBDcmVhdGVJbmRleE9wZXJhdGlvbjsKLSAgICBjbGFzcyBE
ZWxldGVJbmRleE9wZXJhdGlvbjsKLQotICAgIC8vIFdoZW4gYSAidmVyc2lvbmNoYW5nZSIgdHJh
bnNhY3Rpb24gYWJvcnRzLCB0aGVzZSByZXN0b3JlIHRoZSBiYWNrLWVuZCBvYmplY3QgaGllcmFy
Y2h5LgotICAgIGNsYXNzIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb247Ci0gICAgY2xhc3MgRGVs
ZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjsKLQotICAgIGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZElt
cGwqIG1fZGF0YWJhc2U7CisgICAgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIElEQkJhY2tpbmdTdG9yZSosIGludDY0X3QgZGF0YWJh
c2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIFBhc3NSZWZQdHI8SURCS2V5PiBw
cmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBp
bmRleElkcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5k
ZXhLZXlzPiYsIFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4qIGluZGV4V3JpdGVycywgU3Ry
aW5nKiBlcnJvck1lc3NhZ2UsIGJvb2wmIGNvbXBsZXRlZCkgV0FSTl9VTlVTRURfUkVUVVJOOwog
Ci0gICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX21ldGFkYXRhOwotICAgIEluZGV4TWFwIG1f
aW5kZXhlczsKKyAgICBQYXNzUmVmUHRyPElEQktleT4gZ2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgYm9vbCB1cGRh
dGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+LCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5KiwgYm9vbCBjaGVja0N1cnJlbnQpOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IGFmYTQ1ZTI0YjA0MWVmODI1YzY1N2E2MTE5
NTE0MGQxNDU3NDEyZjEuLjI2ZWZkMGZiM2IxMTk2ZmQxNzgyZTFlZDcyZTQzNWY0Yzc4ODA5OWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbi5jcHAKQEAgLTEyMiwxMSArMTIyLDYgQEAgSURCVHJhbnNhY3Rpb246On5JREJUcmFuc2Fj
dGlvbigpCiAgICAgQVNTRVJUKG1fc3RhdGUgPT0gRmluaXNoZWQpOwogfQogCi1JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIElEQlRyYW5zYWN0aW9uOjpiYWNrZW5kKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9iYWNrZW5kLmdldCgpOwotfQotCiBjb25zdCBTdHJpbmcmIElEQlRyYW5z
YWN0aW9uOjptb2RlKCkgY29uc3QKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTE3
NiwxMiArMTcxLDkgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246
Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXAKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2Jq
ZWN0U3RvcmVCYWNrZW5kID0gbV9iYWNrZW5kLT5vYmplY3RTdG9yZShvYmplY3RTdG9yZUlkLCBl
Yyk7Ci0gICAgQVNTRVJUKCFlYyAmJiBvYmplY3RTdG9yZUJhY2tlbmQpOwotCiAgICAgY29uc3Qg
SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEgPSBtX2RhdGFiYXNlLT5tZXRhZGF0YSgpOwog
Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3Jl
OjpjcmVhdGUobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKSwgb2JqZWN0
U3RvcmVCYWNrZW5kLCB0aGlzKTsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0
b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9i
amVjdFN0b3JlSWQpLCB0aGlzKTsKICAgICBvYmplY3RTdG9yZUNyZWF0ZWQobmFtZSwgb2JqZWN0
U3RvcmUpOwogICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAppbmRleCBkZjQx
YmJiMGVmNTMzODFjMGNlMjcxYjdkZDQ1NmZkYmY5ZWUwNDA5Li5kZjNiYjBjY2NhNTk2NGQ0Njg4
Nzk0ZjFmYjYyYjg2ZTAyMDcwNjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKQEAgLTcxLDcgKzcxLDYgQEAgcHVibGljOgogICAg
IHN0YXRpYyBNb2RlIHN0cmluZ1RvTW9kZShjb25zdCBTdHJpbmcmLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcm
IG1vZGVUb1N0cmluZyhNb2RlLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqIGJhY2tlbmQoKSBjb25zdDsKICAgICBJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2UqIGJhY2tlbmREQigpIGNvbnN0OwogCiAgICAgaW50NjRfdCBpZCgpIGNvbnN0
IHsgcmV0dXJuIG1faWQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKaW5kZXggNzgyZjQ2
NTgyOGM4MjdmMmZlNmM4YjZlMzY3ZTE3NWU3YWJmMDk0Mi4uMWIwY2E0YmJjYzBlYTU1ZTNjNzQ2
MjJlOTZhNTMxNzYzMDQ0YWJkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKQEAgLTMy
LDcgKzMyLDYgQEAKICNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUg
IklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlv
bi5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJ
REJUcmFjaW5nLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgogCkBA
IC03MCwxOCArNjksNiBAQCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp+SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbCgpCiAgICAgQVNTRVJUKG1fc3RhdGUgPT0gRmluaXNoZWQpOwogfQogCi1Q
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IG1f
ZGF0YWJhc2UtPm9iamVjdFN0b3JlKGlkKTsKLSAgICBBU1NFUlQob2JqZWN0U3RvcmUpOwotICAg
IHJldHVybiBvYmplY3RTdG9yZS5yZWxlYXNlKCk7Ci19Ci0KIGJvb2wgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6c2NoZWR1bGVUYXNrKFRhc2tUeXBlIHR5cGUsIFBhc3NPd25QdHI8T3BlcmF0
aW9uPiB0YXNrLCBQYXNzT3duUHRyPE9wZXJhdGlvbj4gYWJvcnRUYXNrKQogewogICAgIGlmICht
X3N0YXRlID09IEZpbmlzaGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCmluZGV4IGM3OWRlZmY0
ODg0ODA0ZjdmMzdhZjAzMjM1NDA3ODkyNzM5MWEzYjEuLjBiNWI2NDBhZGVjZTRkZjgxMWI4NDI3
ZjNjNzA3MmU1ZjZjZjM0NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKQEAgLTUyLDcgKzUy
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoKTsK
IAogICAgIC8vIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZQotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGludDY0
X3QsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShpbnQ2NF90LCBFeGNlcHRpb25Db2RlJikg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWJv
cnQoKTsKICAgICB2b2lkIGNvbW1pdCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDYWxsYmFja3Mo
SURCVHJhbnNhY3Rpb25DYWxsYmFja3MqIGNhbGxiYWNrcykgeyBtX2NhbGxiYWNrcyA9IGNhbGxi
YWNrczsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMWY0ZWJiNmUzMjUzYTkwNTVjMTVjYTU4MTg2NzJkMTBh
ZjBiNjg1OC4uYTE3NjE4OWY2N2IwNzQyNjI1ZDhiZjJhYTI2NjA4ODYwNDExNjA0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCkBAIC0zMDQyLDcgKzMwNDIsNiBAQCBlbmFibGU/KElOREVYRURfREFUQUJBU0UpIHsK
ICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggXAogICAg
ICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oIFwKICAgICAgICAgTW9kdWxlcy9pbmRl
eGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggXAotICAgICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmggXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXkuaCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmggXAogICAg
ICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oIFwKQEAgLTMwNzAsNyArMzA2
OSw2IEBAIGVuYWJsZT8oSU5ERVhFRF9EQVRBQkFTRSkgewogICAgICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAgXAogICAgICAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIFwKICAgICAgICAgTW9kdWxlcy9pbmRl
eGVkZGIvSURCSW5kZXguY3BwIFwKLSAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhC
YWNrZW5kSW1wbC5jcHAgXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwIFwK
ICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuY3BwIFwKICAgICAgICAgTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAy
MmNkNzRlODhmYjRjYzU1MTVmNDUwNjNkZmIzZmZhMjJhN2UzMTgxLi42MTBiZTU4Yjk4ZGM2MzJj
YmVjMWYzNGRkMWNkNGFhNGZkYjM3NjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03MzYsOCArNzM2
LDYgQEAKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZS5oJywKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAn
LAogICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgnLAotICAgICAgICAg
ICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwJywKLSAgICAgICAg
ICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgnLAogICAgICAgICAg
ICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oJywKICAgICAg
ICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwJywKICAgICAgICAgICAgICdNb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXkuaCcsCkBAIC01NDY1LDcgKzU0NjMsNyBAQAogICAgICAgICAg
ICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlYXJjaFNtYWxsR3JheS5wbmcnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlYXJjaFNtYWxsV2hpdGUucG5n
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWFyY2hOZXh0LnBu
ZycsCi0gICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VhcmNoUHJldi5w
bmcnLCAgICAgICAgICAgIAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2Vz
L3NlYXJjaFByZXYucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdl
cy9zZWdtZW50LnBuZycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMv
c2VnbWVudEVuZC5wbmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2Vz
L3NlZ21lbnRIb3Zlci5wbmcnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagppbmRleCA5YjgzMTc5MDUyNzgyZDQ4NGRhODc3ZTFlMjlmNGY1YTFiNTdmZTNi
Li4yMGY2ZTE3NzlhM2E3YmJiMDQxZGJmOGU5YzVhOGE2OGUxOGU2MWFiIDEwMDc1NQotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMjQ5ODUsMTQgKzI0OTg1
LDYgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkluZGV4QmFja2VuZEltcGwuY3BwIgotCQkJCQk+Ci0J
CQkJPC9GaWxlPgotCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRl
eGVkZGJcSURCSW5kZXhCYWNrZW5kSW1wbC5oIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxG
aWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCSW5kZXhCYWNr
ZW5kSW50ZXJmYWNlLmgiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZTZiZDRkOGUwNzRlN2E2
N2NhYTE0ZTcwN2NjNDcyZThlZmI4YTk0ZS4uZmEwMzBjZmJlOWE3ZGIwYzgzNTNmOGZmOGEzOTRm
ZGQ0ZWJlN2YzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMzQ5NSw4ICszNDk1LDYgQEAKIAkJOTcxMkE1RDQxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3QjE1MDA0RURBMDA0OEFGMTAgLyog
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgfTsKIAkJOTcxMkE1RDUxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkluZGV4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3MTJBNTdDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5jcHAgKi87
IH07CiAJCTk3MTJBNUQ2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1N0QxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkluZGV4LmggKi87IH07Ci0JCTk3MTJBNUQ4MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJJbmRleEJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3MTJBNTdGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJ
bXBsLmNwcCAqLzsgfTsKLQkJOTcxMkE1RDkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFj
a2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3MTJBNTgwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmggKi87IH07
CiAJCTk3MTJBNURBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTgx
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgfTsKIAkJ
OTcxMkE1REIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4MjE1MDA0RURBMDA0OEFGMTAgLyog
SURCS2V5LmNwcCAqLzsgfTsKIAkJOTcxMkE1REMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1ODMx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5oICovOyB9OwpAQCAtMTA4MTksOCArMTA4MTcsNiBA
QAogCQk5NzEyQTU3QzE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCSW5kZXguY3BwOyBwYXRoID0gTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEy
QTU3RDE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gSURCSW5kZXguaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTdFMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJJbmRleC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCSW5kZXguaWRsOyBw
YXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk5NzEyQTU3RjE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1w
bC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJJbmRleEJhY2tl
bmRJbXBsLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU4MDE1MDA0RURBMDA0OEFG
MTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBJREJJbmRleEJhY2tlbmRJbXBsLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTgx
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmg7IHBhdGgg
PSBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1ODIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJLZXkuY3BwOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTcxMkE1ODMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBJREJLZXkuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lE
QktleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgxNTEsOCArMTgxNDcsNiBA
QAogCQkJCTk3MTJBNTdDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5jcHAgKi8sCiAJCQkJ
OTcxMkE1N0QxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmggKi8sCiAJCQkJOTcxMkE1N0Ux
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmlkbCAqLywKLQkJCQk5NzEyQTU3RjE1MDA0RURB
MDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgKi8sCi0JCQkJOTcxMkE1ODAxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEltcGwuaCAqLywKIAkJCQk5NzEyQTU4MTE1
MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggKi8sCiAJCQkJOTcx
MkE1ODIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5jcHAgKi8sCiAJCQkJOTcxMkE1ODMxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQktleS5oICovLApAQCAtMjQxNzIsNyArMjQxNjYsNiBAQAogCQkJ
CTk3MTJBNUQyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3MTJBNUQ0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1RDYxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkluZGV4LmggaW4gSGVhZGVycyAqLywKLQkJCQk5NzEyQTVEOTE1MDA0RURBMDA0
OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1
REExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTcxMkE1REMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTcxMkE1REYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGguaCBpbiBI
ZWFkZXJzICovLApAQCAtMjc0MjYsNyArMjc0MTksNiBAQAogCQkJCTk3MTJBNUQxMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTcxMkE1RDMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNUQ1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRl
eC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5NzEyQTVEODE1MDA0RURBMDA0OEFGMTAgLyogSURC
SW5kZXhCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEyQTVEQjE1MDA0RURB
MDA0OEFGMTAgLyogSURCS2V5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNURFMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNUUy
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VCYWNrZW5kVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkRhdGFiYXNlQmFja2VuZFRl
c3QuY3BwCmluZGV4IDZlZjg1YzNkOTM0Njg0MTQ0ODk0MjZjZWY2ZTVkOTQzYjA1YWE3MTIuLjdj
ZDY0NGE0MTIwY2I4Zjc3ZGM5NmY1YzJlMGZiMzk3MzdiNDgyODggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VCYWNrZW5kVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRhYmFzZUJhY2tlbmRUZXN0LmNwcApA
QCAtMzAsOCArMzAsNyBAQAogI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzUHJveHkuaCIK
ICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJGYWtlQmFj
a2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUg
IklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiV2ViSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmgiCiAj
aW5jbHVkZSAiV2ViSURCRGF0YWJhc2VJbXBsLmgiCiAKQEAgLTU2LDIxICs1NSw4IEBAIFRFU1Qo
SURCRGF0YWJhc2VCYWNrZW5kVGVzdCwgQmFja2luZ1N0b3JlUmV0ZW50aW9uKQogICAgIFJlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYiA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNy
ZWF0ZSgiZGIiLCBiYWNraW5nU3RvcmUuZ2V0KCksIGZhY3RvcnksICJ1bmlxdWVpZCIpOwogICAg
IEVYUEVDVF9HVChiYWNraW5nU3RvcmUtPnJlZkNvdW50KCksIDEpOwogCi0gICAgY29uc3QgYm9v
bCBhdXRvSW5jcmVtZW50ID0gZmFsc2U7Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IHN0b3JlID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKGRiLmdldCgp
LCBJREJPYmplY3RTdG9yZU1ldGFkYXRhKCJzdG9yZSIsIDEsIElEQktleVBhdGgoImtleVBhdGgi
KSwgYXV0b0luY3JlbWVudCwgMCkpOwotICAgIEVYUEVDVF9HVChiYWNraW5nU3RvcmUtPnJlZkNv
dW50KCksIDEpOwotCi0gICAgY29uc3QgYm9vbCB1bmlxdWUgPSBmYWxzZTsKLSAgICBjb25zdCBi
b29sIG11bHRpRW50cnkgPSBmYWxzZTsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4g
aW5kZXggPSBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUoZGIuZ2V0KCksIElEQkluZGV4TWV0
YWRhdGEoImluZGV4IiwgLTEsIElEQktleVBhdGgoImtleVBhdGgiKSwgdW5pcXVlLCBtdWx0aUVu
dHJ5KSk7Ci0gICAgRVhQRUNUX0dUKGJhY2tpbmdTdG9yZS0+cmVmQ291bnQoKSwgMSk7Ci0KICAg
ICBkYi5jbGVhcigpOwogICAgIEVYUEVDVF9UUlVFKGJhY2tpbmdTdG9yZS0+aGFzT25lUmVmKCkp
OwotICAgIHN0b3JlLmNsZWFyKCk7Ci0gICAgRVhQRUNUX1RSVUUoYmFja2luZ1N0b3JlLT5oYXNP
bmVSZWYoKSk7Ci0gICAgaW5kZXguY2xlYXIoKTsKLSAgICBFWFBFQ1RfVFJVRShiYWNraW5nU3Rv
cmUtPmhhc09uZVJlZigpKTsKIH0KIAogY2xhc3MgTW9ja0lEQkNhbGxiYWNrcyA6IHB1YmxpYyBJ
REJDYWxsYmFja3MgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9J
REJGYWtlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZh
a2VCYWNraW5nU3RvcmUuaAppbmRleCBmOTY1MDczYzBhZjNlYzJhZmY3MzQzODBlMjRkNzg1ZjY2
MTE5ODZjLi4zZWQ3MjRiYjRlYjBhMmJiZjg4YjY0NjFhNTJmZjQyN2I2OGViYjMyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaApA
QCAtMzksNyArMzksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFi
YXNlSW50VmVyc2lvbihUcmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGludDY0X3QgdmVyc2lv
bikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0
YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogCi0g
ICAgdmlydHVhbCBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gZ2V0T2JqZWN0U3RvcmVz
KGludDY0X3QgZGF0YWJhc2VJZCkgT1ZFUlJJREUgeyByZXR1cm4gVmVjdG9yPElEQk9iamVjdFN0
b3JlTWV0YWRhdGE+KCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoVHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50KSBP
VkVSUklERSB7IHJldHVybiBmYWxzZTsgfTsKIAogICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVj
dFN0b3JlKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpIE9WRVJSSURFIHsgfQpAQCAtNDgsNyArNDcsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051
bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KICAgICB2
aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNvcmRJ
ZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIsIGJvb2wmIGZvdW5kKSBPVkVSUklERSB7
IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIFZlY3RvcjxJREJJbmRleE1ldGFkYXRhPiBn
ZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBPVkVS
UklERSB7IHJldHVybiBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4oKTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBjcmVhdGVJbmRleChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgSURCS2V5UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5KSBPVkVSUklE
RSB7IHJldHVybiBmYWxzZTsgfTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoVHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkKSBPVkVSUklERSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcHV0SW5kZXhEYXRhRm9y
UmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgUmVjb3JkSWRlbnRp
ZmllciYpIE9WRVJSSURFIHsgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>