<?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>61270</bug_id>
          
          <creation_ts>2011-05-23 04:05:34 -0700</creation_ts>
          <short_desc>IndexedDB: Support LevelDB transactions.</short_desc>
          <delta_ts>2011-05-26 01:48:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Hans Wennborg">hans</reporter>
          <assigned_to name="Hans Wennborg">hans</assigned_to>
          <cc>andreip</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dgrogan</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>407864</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-23 04:05:34 -0700</bug_when>
    <thetext>IndexedDB: Support LevelDB transactions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407865</commentid>
    <comment_count>1</comment_count>
      <attachid>94397</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-23 04:10:40 -0700</bug_when>
    <thetext>Created attachment 94397
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407866</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-23 04:14:11 -0700</bug_when>
    <thetext>Attachment 94397 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/leveldb/LevelDBTransaction.h:80:  get_less is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:81:  set_less is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:82:  get_greater is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:83:  set_greater is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:85:  get_balance_factor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:86:  set_balance_factor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:88:  compare_key_key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:89:  compare_key_node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:90:  compare_node_node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 9 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407867</commentid>
    <comment_count>3</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-23 04:16:45 -0700</bug_when>
    <thetext>The AVLTree code was modeled after the old IDBKeyTree class which can be seen here: http://trac.webkit.org/browser/trunk/WebCore/storage/IDBKeyTree.h?rev=65873

The style warnings for get_less, set_less, etc. are hard to avoid since AVLTree expects the functions to be named like that.

The trickiest part of this patch is probably the TransactionIterator class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407870</commentid>
    <comment_count>4</comment_count>
      <attachid>94397</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-23 04:40:23 -0700</bug_when>
    <thetext>Comment on attachment 94397
Patch

Attachment 94397 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8732046</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407872</commentid>
    <comment_count>5</comment_count>
      <attachid>94399</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-23 04:46:23 -0700</bug_when>
    <thetext>Created attachment 94399
manual patch

Manual upload; looks like the script failed to upload LevelDBWriteBatch.* for some reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407873</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-23 04:48:29 -0700</bug_when>
    <thetext>Attachment 94399 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/leveldb/LevelDBTransaction.h:80:  get_less is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:81:  set_less is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:82:  get_greater is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:83:  set_greater is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:85:  get_balance_factor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:86:  set_balance_factor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:88:  compare_key_key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:89:  compare_key_node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:90:  compare_node_node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 9 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407883</commentid>
    <comment_count>7</comment_count>
      <attachid>94399</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-05-23 05:14:18 -0700</bug_when>
    <thetext>Comment on attachment 94399
manual patch

Attachment 94399 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8723787</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407885</commentid>
    <comment_count>8</comment_count>
      <attachid>94397</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-23 05:16:41 -0700</bug_when>
    <thetext>Comment on attachment 94397
Patch

Attachment 94397 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/8722875</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407919</commentid>
    <comment_count>9</comment_count>
      <attachid>94415</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-23 06:22:05 -0700</bug_when>
    <thetext>Created attachment 94415
patch

Forgot to update project files for the other ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407921</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-23 06:24:17 -0700</bug_when>
    <thetext>Attachment 94415 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1

Source/WebCore/platform/leveldb/LevelDBTransaction.h:80:  get_less is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:81:  set_less is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:82:  get_greater is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:83:  set_greater is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:85:  get_balance_factor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:86:  set_balance_factor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:88:  compare_key_key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:89:  compare_key_node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:90:  compare_node_node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 9 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408155</commentid>
    <comment_count>11</comment_count>
      <attachid>94415</attachid>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-05-23 12:31:35 -0700</bug_when>
    <thetext>Comment on attachment 94415
patch

Great stuff Hans, thanks a lot!

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

&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:57
&gt; +        delete *iterator;

I wonder if you could store OwnPtr&lt;AVLTreeNode&gt; in your AVLTree (so the handle would be an OwnPtr instead of a raw pointer)? You wouldn&apos;t have to worry about iterating the tree and manually deleting every node.

&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:113
&gt; +    return true;

Seems to me that put() and remove() are very similar, the only differences being in how the &apos;deleted&apos; flag is being set and in the fact that the key must be fabricated from a LevelDBSlice in the remove case. Can we factor out the common bits into a helper function?

&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:143
&gt; +            writeBatch-&gt;put(node-&gt;key, node-&gt;value);

Maybe a silly idea, but what exactly is a LevelDB WriteBatch? Can we not make our transaction own one and have put() and remove() operations work directly on the batch?

&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:306
&gt; +                m_treeIterator-&gt;next();

is the next in the tree iterator guaranteed to have a non-equal key to the current key?

&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:312
&gt; +                m_dbIterator-&gt;next();

ditto...I am asking because in &apos;handleConflictsAndDeletes()&apos; you seem to take into account the situation where several calls to next() will yield records with the same key.

&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:336
&gt; +                m_treeIterator-&gt;prev(); // Iterator is at first entry &gt;= key(). Step back once to entry &lt; key.

Maybe add: &quot;this is why we don&apos;t check for the keys being the same before stepping, like we do in next() above&quot; ?

&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:396
&gt; +void LevelDBTransaction::TransactionIterator::findSmallest()

Are &apos;findSmallest/Largets&apos; best names for these methods? What happens here is that we set m_current to the relevant iterator based on which of them has the smallest/largest key value. I would therefore call them something like &apos;setCurrentIteratorToSmallest/LargestKey()&quot; or similar..

&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:406
&gt; +        else if (m_comparator-&gt;compare(m_dbIterator-&gt;key(), smallest-&gt;key()) &lt; 0)

Do you need the else? You can just combine the two conditions in the if above?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408756</commentid>
    <comment_count>12</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-24 03:32:00 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 94415 [details])
Thanks very much for the review, Andrei.

&gt; Great stuff Hans, thanks a lot!
&gt; 
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94415&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:57
&gt; &gt; +        delete *iterator;
&gt; 
&gt; I wonder if you could store OwnPtr&lt;AVLTreeNode&gt; in your AVLTree (so the handle would be an OwnPtr instead of a raw pointer)? You wouldn&apos;t have to worry about iterating the tree and manually deleting every node.

I think it would be hard to do this. It seems the way AVLTree works, there can sometimes be more than one handle to a node (as a function argument, return value, etc.), but with OwnPtr, that wouldn&apos;t work. RefPtr would work fine, but then we&apos;d introduce unnecessary overhead.

&gt; 
&gt; &gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:113
&gt; &gt; +    return true;
&gt; 
&gt; Seems to me that put() and remove() are very similar, the only differences being in how the &apos;deleted&apos; flag is being set and in the fact that the key must be fabricated from a LevelDBSlice in the remove case. Can we factor out the common bits into a helper function?

You&apos;re right. Doing this.

&gt; 
&gt; &gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:143
&gt; &gt; +            writeBatch-&gt;put(node-&gt;key, node-&gt;value);
&gt; 
&gt; Maybe a silly idea, but what exactly is a LevelDB WriteBatch? Can we not make our transaction own one and have put() and remove() operations work directly on the batch?

Yes, this was my first idea too: to just use the WriteBatch instead of a tree. However, the WriteBatch is just a list of operations, and doesn&apos;t allow for fast get-operations or iterators in key-order.

&gt; 
&gt; &gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:306
&gt; &gt; +                m_treeIterator-&gt;next();
&gt; 
&gt; is the next in the tree iterator guaranteed to have a non-equal key to the current key?

Yes. We will never have two nodes in the tree with the same key (same goes for the database).

&gt; 
&gt; &gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:312
&gt; &gt; +                m_dbIterator-&gt;next();
&gt; 
&gt; ditto...I am asking because in &apos;handleConflictsAndDeletes()&apos; you seem to take into account the situation where several calls to next() will yield records with the same key.

No, the reason that handleConflictsAndDeletes() is a loop is that e.g. the two iterators may be equal, we would step the database iterator, but it may also be that the tree iterator is on a delete marker, so then that gets stepped, and now the two iterators may be equal again, and so on and so forth.

&gt; 
&gt; &gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:336
&gt; &gt; +                m_treeIterator-&gt;prev(); // Iterator is at first entry &gt;= key(). Step back once to entry &lt; key.
&gt; 
&gt; Maybe add: &quot;this is why we don&apos;t check for the keys being the same before stepping, like we do in next() above&quot; ?

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:396
&gt; &gt; +void LevelDBTransaction::TransactionIterator::findSmallest()
&gt; 
&gt; Are &apos;findSmallest/Largets&apos; best names for these methods? What happens here is that we set m_current to the relevant iterator based on which of them has the smallest/largest key value. I would therefore call them something like &apos;setCurrentIteratorToSmallest/LargestKey()&quot; or similar..

Yeah, that&apos;s probably better.

&gt; 
&gt; &gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:406
&gt; &gt; +        else if (m_comparator-&gt;compare(m_dbIterator-&gt;key(), smallest-&gt;key()) &lt; 0)
&gt; 
&gt; Do you need the else? You can just combine the two conditions in the if above?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408757</commentid>
    <comment_count>13</comment_count>
      <attachid>94589</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-24 03:33:44 -0700</bug_when>
    <thetext>Created attachment 94589
patch

manual upload</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408758</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-24 03:36:03 -0700</bug_when>
    <thetext>Attachment 94589 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1

Source/WebCore/platform/leveldb/LevelDBTransaction.h:80:  get_less is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:81:  set_less is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:82:  get_greater is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:83:  set_greater is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:85:  get_balance_factor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:86:  set_balance_factor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:88:  compare_key_key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:89:  compare_key_node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:90:  compare_node_node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 9 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408819</commentid>
    <comment_count>15</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-05-24 07:03:55 -0700</bug_when>
    <thetext>Thanks Hans. LGTM!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408825</commentid>
    <comment_count>16</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-24 07:16:13 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Thanks Hans. LGTM!

Thanks. Steve, can you take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409269</commentid>
    <comment_count>17</comment_count>
      <attachid>94589</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-05-24 15:41:55 -0700</bug_when>
    <thetext>Comment on attachment 94589
patch

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

Some trivial drive-by comments. I think you&apos;ll need to walk me through this patch in person!

&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:72
&gt; +        v.append(*cp);

Does Vector have a method to allow you to do a memcpy and a blanket set, rather than this loop?

&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:237
&gt; +};

Spurious ;

&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:326
&gt; +                m_treeIterator-&gt;prev(); // Iterator is at first entry &gt;= key(). Step back once to entry &lt; key. This is why we don&apos;t check for the keys being the same before stepping, like we do in next() above.

Usually put comments this long on a line by themselves, and probably wrap to 80 lines

&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:364
&gt; +    for (;;) {

Usually use &apos;while (true)&apos;

&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:394
&gt; +        if (!smallest || m_comparator-&gt;compare(m_dbIterator-&gt;key(), smallest-&gt;key()) &lt; 0)

Why not combine these &apos;if&apos;s ?

&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.h:78
&gt; +        typedef LevelDBSlice key;

Do you need these typedefs? In any case, I think they should use a leading capital, as they&apos;re effectively type names.

&gt; Source/WebCore/platform/leveldb/LevelDBWriteBatch.cpp:51
&gt; +static leveldb::Slice makeSlice(const LevelDBSlice&amp; s)

Which header is this defined in? Is this the best place for it?

&gt; Source/WebCore/platform/leveldb/LevelDBWriteBatch.h:42
&gt; +class LevelDBWriteBatch {

This is a rather opaque name - it might be good to have class-level comment here explaining conceptually what a &apos;batch&apos; is.

&gt; Source/WebCore/platform/leveldb/LevelDBWriteBatch.h:61
&gt; +#endif

Should probably comment endifs, particularly when two appear together like this.

&gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:53
&gt; +template &lt;typename DbOrTransaction&gt;

&apos;DBOrTransaction&apos; or &apos;DatabaseOrTransaction&apos; I think

&gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:810
&gt; +    ASSERT(m_currentTransaction);

Pattern is to not use asserts where we&apos;d crash immediately afterwards anyway</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409557</commentid>
    <comment_count>18</comment_count>
      <attachid>94589</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-25 03:10:21 -0700</bug_when>
    <thetext>Comment on attachment 94589
patch

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

&gt;&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:72
&gt;&gt; +        v.append(*cp);
&gt; 
&gt; Does Vector have a method to allow you to do a memcpy and a blanket set, rather than this loop?

Yes, one can append a whole chunk of data at once. Doing that.

&gt;&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:237
&gt;&gt; +};
&gt; 
&gt; Spurious ;

Removed.

&gt;&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:326
&gt;&gt; +                m_treeIterator-&gt;prev(); // Iterator is at first entry &gt;= key(). Step back once to entry &lt; key. This is why we don&apos;t check for the keys being the same before stepping, like we do in next() above.
&gt; 
&gt; Usually put comments this long on a line by themselves, and probably wrap to 80 lines

Done.

&gt;&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:364
&gt;&gt; +    for (;;) {
&gt; 
&gt; Usually use &apos;while (true)&apos;

Done.

&gt;&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.cpp:394
&gt;&gt; +        if (!smallest || m_comparator-&gt;compare(m_dbIterator-&gt;key(), smallest-&gt;key()) &lt; 0)
&gt; 
&gt; Why not combine these &apos;if&apos;s ?

That would become if (m_dbIterator-&gt;isValid() &amp;&amp; (!smallest || m_comparator-&gt;compare(m_dbIterator-&gt;key(), smallest-&gt;key()) &lt; 0))
I personally find it easier to read as it is..

&gt;&gt; Source/WebCore/platform/leveldb/LevelDBTransaction.h:78
&gt;&gt; +        typedef LevelDBSlice key;
&gt; 
&gt; Do you need these typedefs? In any case, I think they should use a leading capital, as they&apos;re effectively type names.

AVLTree needs them, and expects them to be named like this.

&gt;&gt; Source/WebCore/platform/leveldb/LevelDBWriteBatch.cpp:51
&gt;&gt; +static leveldb::Slice makeSlice(const LevelDBSlice&amp; s)
&gt; 
&gt; Which header is this defined in? Is this the best place for it?

We don&apos;t want to define this in any header, since it uses leveldb::Slice which we&apos;re trying to keep inside the wrappers..

&gt;&gt; Source/WebCore/platform/leveldb/LevelDBWriteBatch.h:42
&gt;&gt; +class LevelDBWriteBatch {
&gt; 
&gt; This is a rather opaque name - it might be good to have class-level comment here explaining conceptually what a &apos;batch&apos; is.

Done.

&gt;&gt; Source/WebCore/platform/leveldb/LevelDBWriteBatch.h:61
&gt;&gt; +#endif
&gt; 
&gt; Should probably comment endifs, particularly when two appear together like this.

Done.

&gt;&gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:53

&gt; 
&gt; &apos;DBOrTransaction&apos; or &apos;DatabaseOrTransaction&apos; I think

Done.

&gt;&gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:810
&gt;&gt; +    ASSERT(m_currentTransaction);
&gt; 
&gt; Pattern is to not use asserts where we&apos;d crash immediately afterwards anyway

If you don&apos;t feel strongly about it, I&apos;d like to keep these. I see it more as documentation saying &quot;this function operates within a transaction&quot;..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409559</commentid>
    <comment_count>19</comment_count>
      <attachid>94762</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-25 03:10:55 -0700</bug_when>
    <thetext>Created attachment 94762
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409561</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-25 03:13:24 -0700</bug_when>
    <thetext>Attachment 94762 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1

Source/WebCore/platform/leveldb/LevelDBTransaction.h:80:  get_less is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:81:  set_less is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:82:  get_greater is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:83:  set_greater is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:85:  get_balance_factor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:86:  set_balance_factor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:88:  compare_key_key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:89:  compare_key_node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/leveldb/LevelDBTransaction.h:90:  compare_node_node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 9 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409705</commentid>
    <comment_count>21</comment_count>
      <attachid>94797</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-25 09:51:15 -0700</bug_when>
    <thetext>Created attachment 94797
patch

Some changes after walking through the code with Steve:

- Simplify TransactionIterator::next() and prev() by introducing a nonCurrent variable
- Use a variable to determine whether to keep looping in TransactionIterator::handleConflictsAndDeletes()
- Add comment about LevelDBWriteBatch::remove()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409713</commentid>
    <comment_count>22</comment_count>
      <attachid>94797</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-05-25 09:59:54 -0700</bug_when>
    <thetext>Comment on attachment 94797
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410288</commentid>
    <comment_count>23</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-26 01:48:32 -0700</bug_when>
    <thetext>Committed r87370: &lt;http://trac.webkit.org/changeset/87370&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94397</attachid>
            <date>2011-05-23 04:10:40 -0700</date>
            <delta_ts>2011-05-23 05:16:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61270-20110523121036.patch</filename>
            <type>text/plain</type>
            <size>70513</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxODg4NTI1NTU0YTA3OTgwNmI2NzMxMzA4MmU1YTRiYzZmOWJmMzJjLi5h
YjNlOWRlNTIxYWQyODI4NjQ2N2I3MjczNzFhNjMxYjRmMmIxNjIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTMxIEBACisyMDExLTA1LTIzICBIYW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5k
ZXhlZERCOiBTdXBwb3J0IExldmVsREIgdHJhbnNhY3Rpb25zLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEyNzAKKworICAgICAgICBJbnRyb2R1Y2Ug
TGV2ZWxEQlRyYW5zYWN0aW9uLCB3aGljaCBpbXBsZW1lbnRzIGluLW1lbW9yeSB0cmFuc2FjdGlv
bgorICAgICAgICBzdXBwb3J0IG9uIHRvcCBvZiBMZXZlbERCLCBhbmQgaG9vayB0aGlzIHVwIGZv
ciBJbmRleGVkREIgdG8gdXNlLgorCisgICAgICAgIFRoaXMgaXMgYWxsIGNvdmVyZWQgYnkgZXhp
c3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZv
cm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxE
QkRhdGFiYXNlOjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJEYXRhYmFzZTo6cHV0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJEYXRhYmFzZTo6cmVtb3ZlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxldmVsREJEYXRhYmFzZTo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6SXRl
cmF0b3JJbXBsOjpJdGVyYXRvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SXRlcmF0b3JJbXBs
Ojppc1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6Okl0ZXJhdG9ySW1wbDo6c2Vla1RvTGFzdCk6
CisgICAgICAgIChXZWJDb3JlOjpJdGVyYXRvckltcGw6OnNlZWspOgorICAgICAgICAoV2ViQ29y
ZTo6SXRlcmF0b3JJbXBsOjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okl0ZXJhdG9ySW1wbDo6
cHJldik6CisgICAgICAgIChXZWJDb3JlOjpJdGVyYXRvckltcGw6OmtleSk6CisgICAgICAgIChX
ZWJDb3JlOjpJdGVyYXRvckltcGw6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJE
YXRhYmFzZTo6Y3JlYXRlSXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFi
YXNlOjpjb21wYXJhdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRh
YmFzZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkl0ZXJhdG9yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpMZXZlbERCSXRlcmF0b3I6On5MZXZlbERCSXRlcmF0b3IpOgorICAg
ICAgICAqIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OkxldmVsREJUcmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OmNsZWFyVHJlZSk6CisgICAgICAgIChXZWJD
b3JlOjpMZXZlbERCVHJhbnNhY3Rpb246On5MZXZlbERCVHJhbnNhY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6bWFr
ZVZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OnJlbW92ZSk6
CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OmdldCk6CisgICAgICAgIChX
ZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpM
ZXZlbERCVHJhbnNhY3Rpb246OnJvbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJU
cmFuc2FjdGlvbjo6Y3JlYXRlSXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRy
YW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMZXZl
bERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6aXNWYWxpZCk6CisgICAgICAgIChXZWJDb3Jl
OjpMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6c2Vla1RvTGFzdCk6CisgICAgICAg
IChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6c2Vlayk6CisgICAg
ICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6bmV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6cHJldik6
CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6a2V5
KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjp2
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRv
cjo6aXNEZWxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJl
ZUl0ZXJhdG9yOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246
OlRyZWVJdGVyYXRvcjo6flRyZWVJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERC
VHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6VHJlZUl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6
VHJhbnNhY3Rpb25JdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rp
b246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6TGV2
ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpzZWVrVG9MYXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6c2Vl
ayk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRl
cmF0b3I6Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFu
c2FjdGlvbkl0ZXJhdG9yOjpwcmV2KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2Fj
dGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVs
REJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6dmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpoYW5kbGVDb25m
bGljdHNBbmREZWxldGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6
VHJhbnNhY3Rpb25JdGVyYXRvcjo6ZmluZFNtYWxsZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxl
dmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6ZmluZExhcmdlc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpyZWdpc3Rlckl0ZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6dW5yZWdpc3Rlckl0ZXJhdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6cmVzZXRJdGVyYXRvcnMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpBVkxUcmVlQWJzdHJhY3Rvcjo6
Z2V0X2xlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpBVkxUcmVl
QWJzdHJhY3Rvcjo6c2V0X2xlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0
aW9uOjpBVkxUcmVlQWJzdHJhY3Rvcjo6Z2V0X2dyZWF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TGV2ZWxEQlRyYW5zYWN0aW9uOjpBVkxUcmVlQWJzdHJhY3Rvcjo6c2V0X2dyZWF0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpBVkxUcmVlQWJzdHJhY3Rvcjo6Z2V0
X2JhbGFuY2VfZmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6
QVZMVHJlZUFic3RyYWN0b3I6OnNldF9iYWxhbmNlX2ZhY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpMZXZlbERCVHJhbnNhY3Rpb246OkFWTFRyZWVBYnN0cmFjdG9yOjpjb21wYXJlX2tleV9rZXkp
OgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpBVkxUcmVlQWJzdHJhY3Rv
cjo6Y29tcGFyZV9rZXlfbm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rp
b246OkFWTFRyZWVBYnN0cmFjdG9yOjpjb21wYXJlX25vZGVfbm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OkFWTFRyZWVBYnN0cmFjdG9yOjpudWxsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6flRy
YW5zYWN0aW9uSXRlcmF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldy
aXRlQmF0Y2guY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQldyaXRlQmF0Y2g6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCV3JpdGVCYXRjaDo6TGV2ZWxEQldyaXRlQmF0
Y2gpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQldyaXRlQmF0Y2g6On5MZXZlbERCV3JpdGVC
YXRjaCk6CisgICAgICAgIChXZWJDb3JlOjptYWtlU2xpY2UpOgorICAgICAgICAoV2ViQ29yZTo6
TGV2ZWxEQldyaXRlQmF0Y2g6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCV3JpdGVC
YXRjaDo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJXcml0ZUJhdGNoOjpjbGVh
cik6CisgICAgICAgICogc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmdldEludCk6CisgICAgICAgIChXZWJDb3JlOjpwdXRJbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnB1dFN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXROZXdPYmplY3RTdG9yZUlkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OmRlbGV0ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5n
U3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJC
YWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6Omdl
dE5ld1ZlcnNpb25OdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpuZXh0QXV0b0luY3JlbWVudE51bWJlcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9i
amVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmZv
ckVhY2hPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXROZXdJbmRleElk
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0
YUZvclJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbik6
CisgICAgICAgIChXZWJDb3JlOjp2ZXJzaW9uRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkxldmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OmZpbmRMYXN0SW5kZXhLZXlFcXVhbFRvKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZVRyYW5z
YWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVs
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y29tbWl0KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpyb2xsYmFjayk6Cisg
ICAgICAgICogc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogc3Rv
cmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0KToKKwogMjAxMS0wNS0yMyAgQWRhbSBCYXJ0
aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFN0cmljdCBQYXNzT3duUHRyIGJ1aWxk
IGZpeGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGFlMDVlY2QyMDgwNjgzZmQwNzgwNTk2ZDFmYTA3
YjE4NjQ1MTMwNGYuLjM1MzdlYjFkMWZmYWI0YjhhNzA3ZmYyN2NiNDQyOTRiMzc0NGE1ZTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKQEAgLTg3MSw5ICs4NzEsMTIgQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9sZXZlbGRiL0xldmVsREJDb21wYXJhdG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2xl
dmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbGV2ZWxk
Yi9MZXZlbERCRGF0YWJhc2UuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vbGV2ZWxkYi9MZXZl
bERCSXRlcmF0b3IuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJJ
dGVyYXRvci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJTbGljZS5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHAn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2guY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL21hYy9CbG9ja0V4Y2VwdGlvbnMuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvRW1w
dHlQcm90b2NvbERlZmluaXRpb25zLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuY3BwCmluZGV4IGQ1NmYyNmM3YzRhY2I0NWE4OTE3
NDFmYmUzZDkwNDk0MjhlZTU4OTUuLjM4NmY1ZGQ5OTU0ZjMwMGUyMTg3Y2Q0MThjNDA1MjJjZDI2
MmZjYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxE
QkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVs
REJEYXRhYmFzZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJMZXZlbERCQ29tcGFy
YXRvci5oIgogI2luY2x1ZGUgIkxldmVsREJJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxldmVsREJT
bGljZS5oIgorI2luY2x1ZGUgIkxldmVsREJXcml0ZUJhdGNoLmgiCiAjaW5jbHVkZSA8bGV2ZWxk
Yi9jb21wYXJhdG9yLmg+CiAjaW5jbHVkZSA8bGV2ZWxkYi9kYi5oPgogI2luY2x1ZGUgPGxldmVs
ZGIvc2xpY2UuaD4KQEAgLTExMCwxNSArMTExLDE1IEBAIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFi
YXNlPiBMZXZlbERCRGF0YWJhc2U6Om9wZW4oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QK
IAogICAgIHJlc3VsdC0+bV9kYiA9IGFkb3B0UHRyKGRiKTsKICAgICByZXN1bHQtPm1fY29tcGFy
YXRvckFkYXB0ZXIgPSBjb21wYXJhdG9yQWRhcHRlci5yZWxlYXNlKCk7CisgICAgcmVzdWx0LT5t
X2NvbXBhcmF0b3IgPSBjb21wYXJhdG9yOwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7
CiB9CiAKLQogYm9vbCBMZXZlbERCRGF0YWJhc2U6OnB1dChjb25zdCBMZXZlbERCU2xpY2UmIGtl
eSwgY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSkKIHsKICAgICBsZXZlbGRiOjpXcml0ZU9wdGlv
bnMgd3JpdGVPcHRpb25zOwotICAgIHdyaXRlT3B0aW9ucy5zeW5jID0gZmFsc2U7CisgICAgd3Jp
dGVPcHRpb25zLnN5bmMgPSB0cnVlOwogCiAgICAgcmV0dXJuIG1fZGItPlB1dCh3cml0ZU9wdGlv
bnMsIG1ha2VTbGljZShrZXkpLCBtYWtlU2xpY2UodmFsdWUpKS5vaygpOwogfQpAQCAtMTI2LDcg
KzEyNyw3IEBAIGJvb2wgTGV2ZWxEQkRhdGFiYXNlOjpwdXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBr
ZXksIGNvbnN0IFZlY3RvcjxjaGFyPiYgdmFsdWUpCiBib29sIExldmVsREJEYXRhYmFzZTo6cmVt
b3ZlKGNvbnN0IExldmVsREJTbGljZSYga2V5KQogewogICAgIGxldmVsZGI6OldyaXRlT3B0aW9u
cyB3cml0ZU9wdGlvbnM7Ci0gICAgd3JpdGVPcHRpb25zLnN5bmMgPSBmYWxzZTsKKyAgICB3cml0
ZU9wdGlvbnMuc3luYyA9IHRydWU7CiAKICAgICByZXR1cm4gbV9kYi0+RGVsZXRlKHdyaXRlT3B0
aW9ucywgbWFrZVNsaWNlKGtleSkpLm9rKCk7CiB9CkBAIC0xNDEsMTIgKzE0Miw5MCBAQCBib29s
IExldmVsREJEYXRhYmFzZTo6Z2V0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBWZWN0b3I8Y2hh
cj4mIHZhbHVlKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIExldmVsREJEYXRhYmFzZTo6
d3JpdGUoTGV2ZWxEQldyaXRlQmF0Y2gmIHdyaXRlQmF0Y2gpCit7CisgICAgbGV2ZWxkYjo6V3Jp
dGVPcHRpb25zIHdyaXRlT3B0aW9uczsKKyAgICB3cml0ZU9wdGlvbnMuc3luYyA9IHRydWU7CisK
KyAgICByZXR1cm4gbV9kYi0+V3JpdGUod3JpdGVPcHRpb25zLCB3cml0ZUJhdGNoLm1fd3JpdGVC
YXRjaC5nZXQoKSkub2soKTsKK30KKworbmFtZXNwYWNlIHsKK2NsYXNzIEl0ZXJhdG9ySW1wbCA6
IHB1YmxpYyBMZXZlbERCSXRlcmF0b3IgeworcHVibGljOgorICAgIH5JdGVyYXRvckltcGwoKSB7
IH07CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBzZWVrVG9MYXN0KCk7CisgICAgdmlydHVhbCB2b2lkIHNlZWsoY29uc3QgTGV2ZWxEQlNsaWNl
JiB0YXJnZXQpOworICAgIHZpcnR1YWwgdm9pZCBuZXh0KCk7CisgICAgdmlydHVhbCB2b2lkIHBy
ZXYoKTsKKyAgICB2aXJ0dWFsIExldmVsREJTbGljZSBrZXkoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IExldmVsREJTbGljZSB2YWx1ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBXZWJDb3JlOjpMZXZlbERCRGF0YWJhc2U7CisgICAgSXRlcmF0b3JJbXBsKFBhc3NPd25QdHI8
bGV2ZWxkYjo6SXRlcmF0b3I+KTsKKworICAgIE93blB0cjxsZXZlbGRiOjpJdGVyYXRvcj4gbV9p
dGVyYXRvcjsKK307Cit9CisKK0l0ZXJhdG9ySW1wbDo6SXRlcmF0b3JJbXBsKFBhc3NPd25QdHI8
bGV2ZWxkYjo6SXRlcmF0b3I+IGl0KQorICAgIDogbV9pdGVyYXRvcihpdCkKK3sKK30KKworYm9v
bCBJdGVyYXRvckltcGw6OmlzVmFsaWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2l0ZXJhdG9y
LT5WYWxpZCgpOworfQorCit2b2lkIEl0ZXJhdG9ySW1wbDo6c2Vla1RvTGFzdCgpCit7CisgICAg
bV9pdGVyYXRvci0+U2Vla1RvTGFzdCgpOworfQorCit2b2lkIEl0ZXJhdG9ySW1wbDo6c2Vlayhj
b25zdCBMZXZlbERCU2xpY2UmIHRhcmdldCkKK3sKKyAgICBtX2l0ZXJhdG9yLT5TZWVrKG1ha2VT
bGljZSh0YXJnZXQpKTsKK30KKwordm9pZCBJdGVyYXRvckltcGw6Om5leHQoKQoreworICAgIEFT
U0VSVChpc1ZhbGlkKCkpOworICAgIG1faXRlcmF0b3ItPk5leHQoKTsKK30KKwordm9pZCBJdGVy
YXRvckltcGw6OnByZXYoKQoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIG1faXRlcmF0
b3ItPlByZXYoKTsKK30KKworTGV2ZWxEQlNsaWNlIEl0ZXJhdG9ySW1wbDo6a2V5KCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gbWFrZUxldmVsREJTbGljZSht
X2l0ZXJhdG9yLT5rZXkoKSk7Cit9CisKK0xldmVsREJTbGljZSBJdGVyYXRvckltcGw6OnZhbHVl
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gbWFrZUxldmVs
REJTbGljZShtX2l0ZXJhdG9yLT52YWx1ZSgpKTsKK30KKwogUGFzc093blB0cjxMZXZlbERCSXRl
cmF0b3I+IExldmVsREJEYXRhYmFzZTo6Y3JlYXRlSXRlcmF0b3IoKQogewogICAgIE93blB0cjxs
ZXZlbGRiOjpJdGVyYXRvcj4gaSA9IGFkb3B0UHRyKG1fZGItPk5ld0l0ZXJhdG9yKGxldmVsZGI6
OlJlYWRPcHRpb25zKCkpKTsKICAgICBpZiAoIWkpIC8vIEZJWE1FOiBEb3VibGUgY2hlY2sgaWYg
d2UgYWN0dWFsbHkgbmVlZCB0byBjaGVjayB0aGlzLgogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gYWRvcHRQdHIobmV3IExldmVsREJJdGVyYXRvcihpLnJlbGVhc2UoKSkpOwor
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgSXRlcmF0b3JJbXBsKGkucmVsZWFzZSgpKSk7Cit9CisK
K2NvbnN0IExldmVsREJDb21wYXJhdG9yKiBMZXZlbERCRGF0YWJhc2U6OmNvbXBhcmF0b3IoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbXBhcmF0b3I7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5oCmluZGV4IDUyNmQwYjg5
NTdiZDM4NGMwZDk2M2VhYWQ1MmI0ZWZmNGIzNzVkNDMuLmNiYzI4ZjY1OTNjNzAxZTI0OWRiODdl
NmQxMzljYmJjNjVlMGNkMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xl
dmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2
ZWxkYi9MZXZlbERCRGF0YWJhc2UuaApAQCAtNDMsNiArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBMZXZlbERCQ29tcGFyYXRvcjsKIGNsYXNzIExldmVsREJJdGVyYXRvcjsKIGNs
YXNzIExldmVsREJTbGljZTsKK2NsYXNzIExldmVsREJXcml0ZUJhdGNoOwogCiBjbGFzcyBMZXZl
bERCRGF0YWJhc2UgewogcHVibGljOgpAQCAtNTIsMTIgKzUzLDE1IEBAIHB1YmxpYzoKICAgICBi
b29sIHB1dChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1
ZSk7CiAgICAgYm9vbCByZW1vdmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXkpOwogICAgIGJvb2wg
Z2V0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBWZWN0b3I8Y2hhcj4mIHZhbHVlKTsKKyAgICBi
b29sIHdyaXRlKExldmVsREJXcml0ZUJhdGNoJik7CiAgICAgUGFzc093blB0cjxMZXZlbERCSXRl
cmF0b3I+IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgY29uc3QgTGV2ZWxEQkNvbXBhcmF0b3IqIGNv
bXBhcmF0b3IoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBMZXZlbERCRGF0YWJhc2UoKTsKIAog
ICAgIE93blB0cjxsZXZlbGRiOjpEQj4gbV9kYjsKKyAgICBjb25zdCBMZXZlbERCQ29tcGFyYXRv
ciogbV9jb21wYXJhdG9yOwogICAgIE93blB0cjxsZXZlbGRiOjpDb21wYXJhdG9yPiBtX2NvbXBh
cmF0b3JBZGFwdGVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bGV2ZWxkYi9MZXZlbERCSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVs
ZGIvTGV2ZWxEQkl0ZXJhdG9yLmgKaW5kZXggNzY4YTFiNDI1ZGY5ZWI3Yzg2MTI5ZDFhODk5MTI2
ODZmOTI4NzdhOC4uMTUyNTVkNmNhYjgzMjFiYjVjZmU4M2VkZmQ3ZjQ1NmM2NWY2NzQ5ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCSXRlcmF0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJJdGVyYXRvci5o
CkBAIC0yOSwzNiArMjksMjEgQEAKICNpZiBFTkFCTEUoTEVWRUxEQikKIAogI2luY2x1ZGUgIkxl
dmVsREJTbGljZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8T3du
UHRyLmg+Ci0jaW5jbHVkZSA8VmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLWNsYXNz
IEl0ZXJhdG9yOwotfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExldmVsREJJdGVy
YXRvciB7CiBwdWJsaWM6Ci0gICAgfkxldmVsREJJdGVyYXRvcigpOwotCi0gICAgYm9vbCBpc1Zh
bGlkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZWVrVG9MYXN0KCk7Ci0gICAgdm9pZCBzZWVrKGNvbnN0
IFZlY3RvcjxjaGFyPiYgdGFyZ2V0KTsKLSAgICB2b2lkIG5leHQoKTsKLSAgICB2b2lkIHByZXYo
KTsKLSAgICBMZXZlbERCU2xpY2Uga2V5KCkgY29uc3Q7Ci0gICAgTGV2ZWxEQlNsaWNlIHZhbHVl
KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgTGV2ZWxEQkl0ZXJhdG9yKFBhc3NPd25QdHI8bGV2
ZWxkYjo6SXRlcmF0b3I+KTsKLSAgICBmcmllbmQgY2xhc3MgTGV2ZWxEQkRhdGFiYXNlOwotCi0g
ICAgT3duUHRyPGxldmVsZGI6Okl0ZXJhdG9yPiBtX2l0ZXJhdG9yOworICAgIHZpcnR1YWwgfkxl
dmVsREJJdGVyYXRvcigpIHsgfTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Vla1RvTGFzdCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2Vlayhjb25zdCBMZXZlbERCU2xpY2UmIHRhcmdldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBu
ZXh0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwcmV2KCkgPSAwOworICAgIHZpcnR1YWwgTGV2
ZWxEQlNsaWNlIGtleSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIExldmVsREJTbGljZSB2YWx1
ZSgpIGNvbnN0ID0gMDsKIH07CiAKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKExFVkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9s
ZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9s
ZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2UwMTg1NDMwMDdiNmQ3
N2E3YzliZDA4Zjk3YjM0ZDQ2YjlhYTFlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmNwcApAQCAtMCwwICsxLDQ1
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMZXZlbERCVHJhbnNh
Y3Rpb24uaCIKKworI2luY2x1ZGUgIkxldmVsREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkxldmVs
REJTbGljZS5oIgorI2luY2x1ZGUgIkxldmVsREJXcml0ZUJhdGNoLmgiCisKKyNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKKyNpZiBFTkFCTEUoTEVWRUxEQikKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitQYXNzUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gTGV2ZWxEQlRyYW5zYWN0aW9u
OjpjcmVhdGUoTGV2ZWxEQkRhdGFiYXNlKiBkYikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IExldmVsREJUcmFuc2FjdGlvbihkYikpOworfQorCitMZXZlbERCVHJhbnNhY3Rpb246OkxldmVs
REJUcmFuc2FjdGlvbihMZXZlbERCRGF0YWJhc2UqIGRiKQorICAgIDogbV9kYihkYikKKyAgICAs
IG1fY29tcGFyYXRvcihkYi0+Y29tcGFyYXRvcigpKQorICAgICwgbV9maW5pc2hlZChmYWxzZSkK
K3sKKyAgICBtX3RyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyYXRvciA9IG1fY29tcGFyYXRvcjsK
K30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OmNsZWFyVHJlZSgpCit7CisgICAgVHJlZVR5
cGU6Okl0ZXJhdG9yIGl0ZXJhdG9yOworICAgIGl0ZXJhdG9yLnN0YXJ0X2l0ZXJfbGVhc3QobV90
cmVlKTsKKworICAgIHdoaWxlICgqaXRlcmF0b3IpIHsKKyAgICAgICAgZGVsZXRlICppdGVyYXRv
cjsKKyAgICAgICAgKytpdGVyYXRvcjsKKyAgICB9CisgICAgbV90cmVlLnB1cmdlKCk7Cit9CisK
K0xldmVsREJUcmFuc2FjdGlvbjo6fkxldmVsREJUcmFuc2FjdGlvbigpCit7CisgICAgY2xlYXJU
cmVlKCk7Cit9CisKK2Jvb2wgTGV2ZWxEQlRyYW5zYWN0aW9uOjpwdXQoY29uc3QgVmVjdG9yPGNo
YXI+JiBrZXksIGNvbnN0IFZlY3RvcjxjaGFyPiYgdmFsdWUpCit7CisgICAgQVNTRVJUKCFtX2Zp
bmlzaGVkKTsKKyAgICBib29sIG5ld05vZGUgPSBmYWxzZTsKKyAgICBBVkxUcmVlTm9kZSogbm9k
ZSA9IG1fdHJlZS5zZWFyY2goa2V5KTsKKworICAgIGlmICghbm9kZSkgeworICAgICAgICBub2Rl
ID0gbmV3IEFWTFRyZWVOb2RlOworICAgICAgICBub2RlLT5rZXkgPSBrZXk7CisgICAgICAgIG1f
dHJlZS5pbnNlcnQobm9kZSk7CisgICAgICAgIG5ld05vZGUgPSB0cnVlOworICAgIH0KKyAgICBu
b2RlLT52YWx1ZSA9IHZhbHVlOworICAgIG5vZGUtPmRlbGV0ZWQgPSBmYWxzZTsKKworICAgIGlm
IChuZXdOb2RlKQorICAgICAgICByZXNldEl0ZXJhdG9ycygpOworICAgIHJldHVybiB0cnVlOwor
fQorCitzdGF0aWMgVmVjdG9yPGNoYXI+IG1ha2VWZWN0b3IoY29uc3QgTGV2ZWxEQlNsaWNlJiBz
bGljZSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gdjsKKyAgICBmb3IgKGNvbnN0IGNoYXIqIGNwID0g
c2xpY2UuYmVnaW4oKTsgY3AgIT0gc2xpY2UuZW5kKCk7ICsrY3ApCisgICAgICAgIHYuYXBwZW5k
KCpjcCk7CisgICAgcmV0dXJuIHY7Cit9CisKK2Jvb2wgTGV2ZWxEQlRyYW5zYWN0aW9uOjpyZW1v
dmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXkpCit7CisgICAgQVNTRVJUKCFtX2ZpbmlzaGVkKTsK
KyAgICBib29sIG5ld05vZGUgPSBmYWxzZTsKKyAgICBBVkxUcmVlTm9kZSogbm9kZSA9IG1fdHJl
ZS5zZWFyY2goa2V5KTsKKworICAgIGlmICghbm9kZSkgeworICAgICAgICBub2RlID0gbmV3IEFW
TFRyZWVOb2RlOworICAgICAgICBub2RlLT5rZXkgPSBtYWtlVmVjdG9yKGtleSk7CisgICAgICAg
IG1fdHJlZS5pbnNlcnQobm9kZSk7CisgICAgICAgIG5ld05vZGUgPSB0cnVlOworICAgIH0KKyAg
ICBub2RlLT52YWx1ZSA9IFZlY3RvcjxjaGFyPigpOworICAgIG5vZGUtPmRlbGV0ZWQgPSB0cnVl
OworCisgICAgaWYgKG5ld05vZGUpCisgICAgICAgIHJlc2V0SXRlcmF0b3JzKCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgTGV2ZWxEQlRyYW5zYWN0aW9uOjpnZXQoY29uc3QgTGV2ZWxE
QlNsaWNlJiBrZXksIFZlY3RvcjxjaGFyPiYgdmFsdWUpCit7CisgICAgQVNTRVJUKCFtX2Zpbmlz
aGVkKTsKKyAgICBBVkxUcmVlTm9kZSogbm9kZSA9IG1fdHJlZS5zZWFyY2goa2V5KTsKKworICAg
IGlmIChub2RlKSB7CisgICAgICAgIGlmIChub2RlLT5kZWxldGVkKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIHZhbHVlID0gbm9kZS0+dmFsdWU7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBtX2RiLT5nZXQoa2V5LCB2YWx1ZSk7Cit9CisK
K2Jvb2wgTGV2ZWxEQlRyYW5zYWN0aW9uOjpjb21taXQoKQoreworICAgIEFTU0VSVCghbV9maW5p
c2hlZCk7CisgICAgT3duUHRyPExldmVsREJXcml0ZUJhdGNoPiB3cml0ZUJhdGNoID0gTGV2ZWxE
QldyaXRlQmF0Y2g6OmNyZWF0ZSgpOworCisgICAgVHJlZVR5cGU6Okl0ZXJhdG9yIGl0ZXJhdG9y
OworICAgIGl0ZXJhdG9yLnN0YXJ0X2l0ZXJfbGVhc3QobV90cmVlKTsKKworICAgIHdoaWxlICgq
aXRlcmF0b3IpIHsKKyAgICAgICAgQVZMVHJlZU5vZGUqIG5vZGUgPSAqaXRlcmF0b3I7CisgICAg
ICAgIGlmICghbm9kZS0+ZGVsZXRlZCkKKyAgICAgICAgICAgIHdyaXRlQmF0Y2gtPnB1dChub2Rl
LT5rZXksIG5vZGUtPnZhbHVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgd3JpdGVCYXRj
aC0+cmVtb3ZlKG5vZGUtPmtleSk7CisgICAgICAgICsraXRlcmF0b3I7CisgICAgfQorCisgICAg
aWYgKCFtX2RiLT53cml0ZSgqd3JpdGVCYXRjaCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGNsZWFyVHJlZSgpOworICAgIG1fZmluaXNoZWQgPSB0cnVlOworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIExldmVsREJUcmFuc2FjdGlvbjo6cm9sbGJhY2soKQoreworICAgIEFTU0VS
VCghbV9maW5pc2hlZCk7CisgICAgbV9maW5pc2hlZCA9IHRydWU7CisgICAgY2xlYXJUcmVlKCk7
Cit9CisKK1Bhc3NPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBMZXZlbERCVHJhbnNhY3Rpb246OmNy
ZWF0ZUl0ZXJhdG9yKCkKK3sKKyAgICByZXR1cm4gVHJhbnNhY3Rpb25JdGVyYXRvcjo6Y3JlYXRl
KHRoaXMpOworfQorCitQYXNzT3duUHRyPExldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9y
PiBMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6Y3JlYXRlKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUcmVlSXRlcmF0
b3IodHJhbnNhY3Rpb24pKTsKK30KKworYm9vbCBMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVy
YXRvcjo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICptX2l0ZXJhdG9yOworfQorCit2
b2lkIExldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpzZWVrVG9MYXN0KCkKK3sKKyAg
ICBtX2l0ZXJhdG9yLnN0YXJ0X2l0ZXJfZ3JlYXRlc3QoKm1fdHJlZSk7CisgICAgaWYgKGlzVmFs
aWQoKSkKKyAgICAgICAgbV9rZXkgPSAoKm1faXRlcmF0b3IpLT5rZXk7Cit9CisKK3ZvaWQgTGV2
ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I6OnNlZWsoY29uc3QgTGV2ZWxEQlNsaWNlJiB0
YXJnZXQpCit7CisgICAgbV9pdGVyYXRvci5zdGFydF9pdGVyKCptX3RyZWUsIHRhcmdldCwgVHJl
ZVR5cGU6OkVRVUFMKTsKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgbV9pdGVyYXRvci5z
dGFydF9pdGVyKCptX3RyZWUsIHRhcmdldCwgVHJlZVR5cGU6OkdSRUFURVIpOworCisgICAgaWYg
KGlzVmFsaWQoKSkKKyAgICAgICAgbV9rZXkgPSAoKm1faXRlcmF0b3IpLT5rZXk7Cit9CisKK3Zv
aWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I6Om5leHQoKQoreworICAgIEFTU0VS
VChpc1ZhbGlkKCkpOworICAgICsrbV9pdGVyYXRvcjsKKyAgICBpZiAoaXNWYWxpZCgpKSB7Cisg
ICAgICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uLT5tX2NvbXBhcmF0b3ItPmNvbXBhcmUoKCptX2l0
ZXJhdG9yKS0+a2V5LCBtX2tleSkgPiAwKTsKKyAgICAgICAgbV9rZXkgPSAoKm1faXRlcmF0b3Ip
LT5rZXk7CisgICAgfQorfQorCit2b2lkIExldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9y
OjpwcmV2KCkKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICAtLW1faXRlcmF0b3I7Cisg
ICAgaWYgKGlzVmFsaWQoKSkgeworICAgICAgICBBU1NFUlQobV90cmVlLT5hYnN0cmFjdG9yKCku
bV9jb21wYXJhdG9yLT5jb21wYXJlKCgqbV9pdGVyYXRvciktPmtleSwgbV9rZXkpIDwgMCk7Cisg
ICAgICAgIG1fa2V5ID0gKCptX2l0ZXJhdG9yKS0+a2V5OworICAgIH0KK30KKworTGV2ZWxEQlNs
aWNlIExldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjprZXkoKSBjb25zdAoreworICAg
IEFTU0VSVChpc1ZhbGlkKCkpOworICAgIHJldHVybiBtX2tleTsKK30KKworTGV2ZWxEQlNsaWNl
IExldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjp2YWx1ZSgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKGlzVmFsaWQoKSk7CisgICAgQVNTRVJUKCFpc0RlbGV0ZWQoKSk7CisgICAgcmV0dXJu
ICgqbV9pdGVyYXRvciktPnZhbHVlOworfQorCitib29sIExldmVsREJUcmFuc2FjdGlvbjo6VHJl
ZUl0ZXJhdG9yOjppc0RlbGV0ZWQoKSBjb25zdAoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOwor
ICAgIHJldHVybiAoKm1faXRlcmF0b3IpLT5kZWxldGVkOworfQorCit2b2lkIExldmVsREJUcmFu
c2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpyZXNldCgpCit7CisgICAgLy8gRklYTUU6IEJlIGxhenk6
IHNldCBhIGZsYWcgYW5kIGRvIHRoZSBhY3R1YWwgcmVzZXQgbmV4dCB0aW1lIHdlIHVzZSB0aGUg
aXRlcmF0b3IuCisgICAgaWYgKGlzVmFsaWQoKSkgeworICAgICAgICBtX2l0ZXJhdG9yLnN0YXJ0
X2l0ZXIoKm1fdHJlZSwgbV9rZXksIFRyZWVUeXBlOjpFUVVBTCk7CisgICAgICAgIEFTU0VSVChp
c1ZhbGlkKCkpOworICAgIH0KK30KKworTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I6
On5UcmVlSXRlcmF0b3IoKQoreworICAgIG1fdHJhbnNhY3Rpb24tPnVucmVnaXN0ZXJJdGVyYXRv
cih0aGlzKTsKK307CisKK0xldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpUcmVlSXRl
cmF0b3IoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICA6IG1fdHJlZSgmdHJh
bnNhY3Rpb24tPm1fdHJlZSkKKyAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCit7Cisg
ICAgdHJhbnNhY3Rpb24tPnJlZ2lzdGVySXRlcmF0b3IodGhpcyk7Cit9CisKK1Bhc3NPd25QdHI8
TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yPiBMZXZlbERCVHJhbnNhY3Rp
b246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OmNyZWF0ZShQYXNzUmVmUHRyPExldmVsREJUcmFuc2Fj
dGlvbj4gdHJhbnNhY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUcmFuc2FjdGlv
bkl0ZXJhdG9yKHRyYW5zYWN0aW9uKSk7Cit9CisKK0xldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNh
Y3Rpb25JdGVyYXRvcjo6VHJhbnNhY3Rpb25JdGVyYXRvcihQYXNzUmVmUHRyPExldmVsREJUcmFu
c2FjdGlvbj4gdHJhbnNhY3Rpb24pCisgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQor
ICAgICwgbV9jb21wYXJhdG9yKG1fdHJhbnNhY3Rpb24tPm1fY29tcGFyYXRvcikKKyAgICAsIG1f
dHJlZUl0ZXJhdG9yKFRyZWVJdGVyYXRvcjo6Y3JlYXRlKG1fdHJhbnNhY3Rpb24uZ2V0KCkpKQor
ICAgICwgbV9kYkl0ZXJhdG9yKG1fdHJhbnNhY3Rpb24tPm1fZGItPmNyZWF0ZUl0ZXJhdG9yKCkp
CisgICAgLCBtX2N1cnJlbnQoMCkKKyAgICAsIG1fZGlyZWN0aW9uKGtGb3J3YXJkKQoreworfQor
Citib29sIExldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6aXNWYWxpZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY3VycmVudDsKK30KKwordm9pZCBMZXZlbERCVHJhbnNh
Y3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnNlZWtUb0xhc3QoKQoreworICAgIG1fdHJlZUl0
ZXJhdG9yLT5zZWVrVG9MYXN0KCk7CisgICAgbV9kYkl0ZXJhdG9yLT5zZWVrVG9MYXN0KCk7Cisg
ICAgbV9kaXJlY3Rpb24gPSBrUmV2ZXJzZTsKKworICAgIGhhbmRsZUNvbmZsaWN0c0FuZERlbGV0
ZXMoKTsKKyAgICBmaW5kTGFyZ2VzdCgpOworfQorCit2b2lkIExldmVsREJUcmFuc2FjdGlvbjo6
VHJhbnNhY3Rpb25JdGVyYXRvcjo6c2Vlayhjb25zdCBMZXZlbERCU2xpY2UmIHRhcmdldCkKK3sK
KyAgICBtX3RyZWVJdGVyYXRvci0+c2Vlayh0YXJnZXQpOworICAgIG1fZGJJdGVyYXRvci0+c2Vl
ayh0YXJnZXQpOworICAgIG1fZGlyZWN0aW9uID0ga0ZvcndhcmQ7CisKKyAgICBoYW5kbGVDb25m
bGljdHNBbmREZWxldGVzKCk7CisgICAgZmluZFNtYWxsZXN0KCk7Cit9CisKK3ZvaWQgTGV2ZWxE
QlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpuZXh0KCkKK3sKKyAgICBBU1NFUlQo
aXNWYWxpZCgpKTsKKworICAgIGlmIChtX2RpcmVjdGlvbiAhPSBrRm9yd2FyZCkgeworICAgICAg
ICAvLyBFbnN1cmUgdGhlIG5vbi1jdXJyZW50IGl0ZXJhdG9yIGlzIHBvc2l0aW9uZWQgYWZ0ZXIg
a2V5KCkuCisKKyAgICAgICAgaWYgKG1fY3VycmVudCAhPSBtX3RyZWVJdGVyYXRvci5nZXQoKSkg
eworICAgICAgICAgICAgbV90cmVlSXRlcmF0b3ItPnNlZWsobV9jdXJyZW50LT5rZXkoKSk7Cisg
ICAgICAgICAgICBpZiAobV90cmVlSXRlcmF0b3ItPmlzVmFsaWQoKSAmJiAhbV9jb21wYXJhdG9y
LT5jb21wYXJlKG1fdHJlZUl0ZXJhdG9yLT5rZXkoKSwga2V5KCkpKQorICAgICAgICAgICAgICAg
IG1fdHJlZUl0ZXJhdG9yLT5uZXh0KCk7CisKKyAgICAgICAgICAgIEFTU0VSVCghbV90cmVlSXRl
cmF0b3ItPmlzVmFsaWQoKSB8fCBtX2NvbXBhcmF0b3ItPmNvbXBhcmUobV90cmVlSXRlcmF0b3It
PmtleSgpLCBrZXkoKSkgPiAwKTsKKyAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnQgIT0gbV9k
Ykl0ZXJhdG9yLmdldCgpKSB7CisgICAgICAgICAgICBtX2RiSXRlcmF0b3ItPnNlZWsobV9jdXJy
ZW50LT5rZXkoKSk7CisgICAgICAgICAgICBpZiAobV9kYkl0ZXJhdG9yLT5pc1ZhbGlkKCkgJiYg
IW1fY29tcGFyYXRvci0+Y29tcGFyZShtX2RiSXRlcmF0b3ItPmtleSgpLCBrZXkoKSkpCisgICAg
ICAgICAgICAgICAgbV9kYkl0ZXJhdG9yLT5uZXh0KCk7CisKKyAgICAgICAgICAgIEFTU0VSVCgh
bV9kYkl0ZXJhdG9yLT5pc1ZhbGlkKCkgfHwgbV9jb21wYXJhdG9yLT5jb21wYXJlKG1fZGJJdGVy
YXRvci0+a2V5KCksIGtleSgpKSA+IDApOworICAgICAgICB9CisKKyAgICAgICAgbV9kaXJlY3Rp
b24gPSBrRm9yd2FyZDsKKyAgICB9CisKKyAgICBtX2N1cnJlbnQtPm5leHQoKTsKKyAgICBoYW5k
bGVDb25mbGljdHNBbmREZWxldGVzKCk7CisgICAgZmluZFNtYWxsZXN0KCk7Cit9CisKK3ZvaWQg
TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpwcmV2KCkKK3sKKyAgICBB
U1NFUlQoaXNWYWxpZCgpKTsKKworICAgIGlmIChtX2RpcmVjdGlvbiAhPSBrUmV2ZXJzZSkgewor
ICAgICAgICAvLyBFbnN1cmUgdGhlIG5vbi1jdXJyZW50IGl0ZXJhdG9yIGlzIHBvc2l0aW9uZWQg
YmVmb3JlIGtleSgpOworCisgICAgICAgIGlmIChtX2N1cnJlbnQgIT0gbV90cmVlSXRlcmF0b3Iu
Z2V0KCkpIHsKKyAgICAgICAgICAgIG1fdHJlZUl0ZXJhdG9yLT5zZWVrKG1fY3VycmVudC0+a2V5
KCkpOworCisgICAgICAgICAgICBpZiAobV90cmVlSXRlcmF0b3ItPmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICBtX3RyZWVJdGVyYXRvci0+cHJldigpOyAvLyBJdGVyYXRvciBpcyBhdCBmaXJz
dCBlbnRyeSA+PSBrZXkoKS4gU3RlcCBiYWNrIG9uY2UgdG8gZW50cnkgPCBrZXkuCisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV90cmVlSXRlcmF0b3ItPnNlZWtUb0xhc3QoKTsg
Ly8gSXRlcmF0b3IgaGFzIG5vIGVudHJpZXMgPj0ga2V5KCkuIFBvc2l0aW9uIGF0IGxhc3QgZW50
cnkuCisKKyAgICAgICAgICAgIEFTU0VSVCghbV90cmVlSXRlcmF0b3ItPmlzVmFsaWQoKSB8fCBt
X2NvbXBhcmF0b3ItPmNvbXBhcmUobV90cmVlSXRlcmF0b3ItPmtleSgpLCBrZXkoKSkgPCAwKTsK
KyAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnQgIT0gbV9kYkl0ZXJhdG9yLmdldCgpKSB7Cisg
ICAgICAgICAgICBtX2RiSXRlcmF0b3ItPnNlZWsobV9jdXJyZW50LT5rZXkoKSk7CisKKyAgICAg
ICAgICAgIGlmIChtX2RiSXRlcmF0b3ItPmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBtX2Ri
SXRlcmF0b3ItPnByZXYoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2Ri
SXRlcmF0b3ItPnNlZWtUb0xhc3QoKTsKKworICAgICAgICAgICAgQVNTRVJUKCFtX2RiSXRlcmF0
b3ItPmlzVmFsaWQoKSB8fCBtX2NvbXBhcmF0b3ItPmNvbXBhcmUobV9kYkl0ZXJhdG9yLT5rZXko
KSwga2V5KCkpIDwgMCk7CisgICAgICAgICB9CisKKyAgICAgICAgbV9kaXJlY3Rpb24gPSBrUmV2
ZXJzZTsKKyAgICB9CisKKyAgICBtX2N1cnJlbnQtPnByZXYoKTsKKyAgICBoYW5kbGVDb25mbGlj
dHNBbmREZWxldGVzKCk7CisgICAgZmluZExhcmdlc3QoKTsKK30KKworTGV2ZWxEQlNsaWNlIExl
dmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6a2V5KCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gbV9jdXJyZW50LT5rZXkoKTsKK30KKwor
TGV2ZWxEQlNsaWNlIExldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6dmFs
dWUoKSBjb25zdAoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIHJldHVybiBtX2N1cnJl
bnQtPnZhbHVlKCk7Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0
ZXJhdG9yOjpoYW5kbGVDb25mbGljdHNBbmREZWxldGVzKCkKK3sKKyAgICBmb3IgKDs7KSB7Cisg
ICAgICAgIGlmIChtX3RyZWVJdGVyYXRvci0+aXNWYWxpZCgpICYmIG1fZGJJdGVyYXRvci0+aXNW
YWxpZCgpICYmICFtX2NvbXBhcmF0b3ItPmNvbXBhcmUobV90cmVlSXRlcmF0b3ItPmtleSgpLCBt
X2RiSXRlcmF0b3ItPmtleSgpKSkgeworICAgICAgICAgICAgLy8gRm9yIGVxdWFsIGtleXMsIHRo
ZSB0cmVlIGl0ZXJhdG9yIHRha2VzIHByZWNlZGVuY2UsIHNvIG1vdmUgdGhlIGRhdGFiYXNlIGl0
ZXJhdG9yIGFub3RoZXIgc3RlcC4KKyAgICAgICAgICAgIGlmIChtX2RpcmVjdGlvbiA9PSBrRm9y
d2FyZCkKKyAgICAgICAgICAgICAgICBtX2RiSXRlcmF0b3ItPm5leHQoKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBtX2RiSXRlcmF0b3ItPnByZXYoKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fdHJlZUl0ZXJhdG9yLT5pc1Zh
bGlkKCkgJiYgbV90cmVlSXRlcmF0b3ItPmlzRGVsZXRlZCgpKSB7CisgICAgICAgICAgICAvLyBJ
ZiB0aGUgdHJlZSBpdGVyYXRvciBpcyBvbiBhIGRlbGV0ZSBtYXJrZXIsIHRha2UgYW5vdGhlciBz
dGVwLgorICAgICAgICAgICAgaWYgKG1fZGlyZWN0aW9uID09IGtGb3J3YXJkKQorICAgICAgICAg
ICAgICAgIG1fdHJlZUl0ZXJhdG9yLT5uZXh0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV90cmVlSXRlcmF0b3ItPnByZXYoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBMZXZlbERCVHJhbnNh
Y3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OmZpbmRTbWFsbGVzdCgpCit7CisgICAgTGV2ZWxE
Qkl0ZXJhdG9yKiBzbWFsbGVzdCA9IDA7CisKKyAgICBpZiAobV90cmVlSXRlcmF0b3ItPmlzVmFs
aWQoKSkKKyAgICAgICAgc21hbGxlc3QgPSBtX3RyZWVJdGVyYXRvci5nZXQoKTsKKworICAgIGlm
IChtX2RiSXRlcmF0b3ItPmlzVmFsaWQoKSkgeworICAgICAgICBpZiAoIXNtYWxsZXN0KQorICAg
ICAgICAgICAgc21hbGxlc3QgPSBtX2RiSXRlcmF0b3IuZ2V0KCk7CisgICAgICAgIGVsc2UgaWYg
KG1fY29tcGFyYXRvci0+Y29tcGFyZShtX2RiSXRlcmF0b3ItPmtleSgpLCBzbWFsbGVzdC0+a2V5
KCkpIDwgMCkKKyAgICAgICAgICAgIHNtYWxsZXN0ID0gbV9kYkl0ZXJhdG9yLmdldCgpOworICAg
IH0KKworICAgIG1fY3VycmVudCA9IHNtYWxsZXN0OworfQorCit2b2lkIExldmVsREJUcmFuc2Fj
dGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6ZmluZExhcmdlc3QoKQoreworICAgIExldmVsREJJ
dGVyYXRvciogbGFyZ2VzdCA9IDA7CisKKyAgICBpZiAobV90cmVlSXRlcmF0b3ItPmlzVmFsaWQo
KSkKKyAgICAgICAgbGFyZ2VzdCA9IG1fdHJlZUl0ZXJhdG9yLmdldCgpOworCisgICAgaWYgKG1f
ZGJJdGVyYXRvci0+aXNWYWxpZCgpKSB7CisgICAgICAgIGlmICghbGFyZ2VzdCkKKyAgICAgICAg
ICAgIGxhcmdlc3QgPSBtX2RiSXRlcmF0b3IuZ2V0KCk7CisgICAgICAgIGVsc2UgaWYgKG1fY29t
cGFyYXRvci0+Y29tcGFyZShtX2RiSXRlcmF0b3ItPmtleSgpLCBsYXJnZXN0LT5rZXkoKSkgPiAw
KQorICAgICAgICAgICAgbGFyZ2VzdCA9IG1fZGJJdGVyYXRvci5nZXQoKTsKKyAgICB9CisKKyAg
ICBtX2N1cnJlbnQgPSBsYXJnZXN0OworfQorCit2b2lkIExldmVsREJUcmFuc2FjdGlvbjo6cmVn
aXN0ZXJJdGVyYXRvcihUcmVlSXRlcmF0b3IqIGl0ZXJhdG9yKQoreworICAgIEFTU0VSVCghbV90
cmVlSXRlcmF0b3JzLmNvbnRhaW5zKGl0ZXJhdG9yKSk7CisgICAgbV90cmVlSXRlcmF0b3JzLmFk
ZChpdGVyYXRvcik7Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjp1bnJlZ2lzdGVySXRl
cmF0b3IoVHJlZUl0ZXJhdG9yKiBpdGVyYXRvcikKK3sKKyAgICBBU1NFUlQobV90cmVlSXRlcmF0
b3JzLmNvbnRhaW5zKGl0ZXJhdG9yKSk7CisgICAgbV90cmVlSXRlcmF0b3JzLnJlbW92ZShpdGVy
YXRvcik7Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpyZXNldEl0ZXJhdG9ycygpCit7
CisgICAgZm9yIChIYXNoU2V0PFRyZWVJdGVyYXRvcio+OjppdGVyYXRvciBpID0gbV90cmVlSXRl
cmF0b3JzLmJlZ2luKCk7IGkgIT0gbV90cmVlSXRlcmF0b3JzLmVuZCgpOyArK2kpIHsKKyAgICAg
ICAgVHJlZUl0ZXJhdG9yKiB0cmVlSXRlcmF0b3IgPSAqaTsKKyAgICAgICAgdHJlZUl0ZXJhdG9y
LT5yZXNldCgpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKExFVkVMREIpCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2Fj
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rp
b24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41MDE5MzAxYjZkYmI4YzZmMTA5ODVjMjRkODlhNTBmZDQ5M2Y5NDA4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZl
bERCVHJhbnNhY3Rpb24uaApAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGV2ZWxE
QlRyYW5zYWN0aW9uX2gKKyNkZWZpbmUgTGV2ZWxEQlRyYW5zYWN0aW9uX2gKKworI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQorI2lmIEVOQUJMRShMRVZFTERCKQorCisjaW5jbHVkZSAiTGV2
ZWxEQkNvbXBhcmF0b3IuaCIKKyNpbmNsdWRlICJMZXZlbERCSXRlcmF0b3IuaCIKKyNpbmNsdWRl
ICJMZXZlbERCU2xpY2UuaCIKKyNpbmNsdWRlIDx3dGYvQVZMVHJlZS5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBMZXZlbERCRGF0YWJhc2U7CisKK3VzaW5nIFdURjo6QVZMVHJlZTsKKworY2xh
c3MgTGV2ZWxEQlRyYW5zYWN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TGV2ZWxEQlRyYW5zYWN0
aW9uPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9u
PiBjcmVhdGUoTGV2ZWxEQkRhdGFiYXNlKik7CisKKyAgICB+TGV2ZWxEQlRyYW5zYWN0aW9uKCk7
CisgICAgYm9vbCBwdXQoY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIGNvbnN0IFZlY3RvcjxjaGFy
PiYgdmFsdWUpOworICAgIGJvb2wgcmVtb3ZlKGNvbnN0IExldmVsREJTbGljZSYga2V5KTsKKyAg
ICBib29sIGdldChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgVmVjdG9yPGNoYXI+JiB2YWx1ZSk7
CisgICAgYm9vbCBjb21taXQoKTsKKyAgICB2b2lkIHJvbGxiYWNrKCk7CisKKyAgICBQYXNzT3du
UHRyPExldmVsREJJdGVyYXRvcj4gY3JlYXRlSXRlcmF0b3IoKTsKKworcHJpdmF0ZToKKyAgICBM
ZXZlbERCVHJhbnNhY3Rpb24oTGV2ZWxEQkRhdGFiYXNlKik7CisKKyAgICBzdHJ1Y3QgQVZMVHJl
ZU5vZGUgeworICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5OworICAgICAgICBWZWN0b3I8Y2hhcj4g
dmFsdWU7CisgICAgICAgIGJvb2wgZGVsZXRlZDsKKworICAgICAgICBBVkxUcmVlTm9kZSogbGVz
czsKKyAgICAgICAgQVZMVHJlZU5vZGUqIGdyZWF0ZXI7CisgICAgICAgIGludCBiYWxhbmNlRmFj
dG9yOworICAgIH07CisKKyAgICBzdHJ1Y3QgQVZMVHJlZUFic3RyYWN0b3IgeworICAgICAgICB0
eXBlZGVmIEFWTFRyZWVOb2RlKiBoYW5kbGU7CisgICAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemU7
CisgICAgICAgIHR5cGVkZWYgTGV2ZWxEQlNsaWNlIGtleTsKKworICAgICAgICBoYW5kbGUgZ2V0
X2xlc3MoaGFuZGxlIGgpIHsgcmV0dXJuIGgtPmxlc3M7IH0KKyAgICAgICAgdm9pZCBzZXRfbGVz
cyhoYW5kbGUgaCwgaGFuZGxlIGxlc3MpIHsgaC0+bGVzcyA9IGxlc3M7IH0KKyAgICAgICAgaGFu
ZGxlIGdldF9ncmVhdGVyKGhhbmRsZSBoKSB7IHJldHVybiBoLT5ncmVhdGVyOyB9CisgICAgICAg
IHZvaWQgc2V0X2dyZWF0ZXIoaGFuZGxlIGgsIGhhbmRsZSBncmVhdGVyKSB7IGgtPmdyZWF0ZXIg
PSBncmVhdGVyOyB9CisKKyAgICAgICAgaW50IGdldF9iYWxhbmNlX2ZhY3RvcihoYW5kbGUgaCkg
eyByZXR1cm4gaC0+YmFsYW5jZUZhY3RvcjsgfQorICAgICAgICB2b2lkIHNldF9iYWxhbmNlX2Zh
Y3RvcihoYW5kbGUgaCwgaW50IGJmKSB7IGgtPmJhbGFuY2VGYWN0b3IgPSBiZjsgfQorCisgICAg
ICAgIGludCBjb21wYXJlX2tleV9rZXkoY29uc3Qga2V5JiBrYSwgY29uc3Qga2V5JiBrYikgeyBy
ZXR1cm4gbV9jb21wYXJhdG9yLT5jb21wYXJlKGthLCBrYik7IH0KKyAgICAgICAgaW50IGNvbXBh
cmVfa2V5X25vZGUoY29uc3Qga2V5JiBrLCBoYW5kbGUgaCkgeyByZXR1cm4gY29tcGFyZV9rZXlf
a2V5KGssIGgtPmtleSk7IH0KKyAgICAgICAgaW50IGNvbXBhcmVfbm9kZV9ub2RlKGhhbmRsZSBo
YSwgaGFuZGxlIGhiKSB7IHJldHVybiBjb21wYXJlX2tleV9rZXkoaGEtPmtleSwgaGItPmtleSk7
IH0KKworICAgICAgICBzdGF0aWMgaGFuZGxlIG51bGwoKSB7IHJldHVybiAwOyB9CisKKyAgICAg
ICAgY29uc3QgTGV2ZWxEQkNvbXBhcmF0b3IqIG1fY29tcGFyYXRvcjsKKyAgICB9OworCisgICAg
dHlwZWRlZiBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yPiBUcmVlVHlwZTsKKworICAgIGNsYXNz
IFRyZWVJdGVyYXRvciA6IHB1YmxpYyBMZXZlbERCSXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIFBhc3NPd25QdHI8VHJlZUl0ZXJhdG9yPiBjcmVhdGUoTGV2ZWxEQlRyYW5z
YWN0aW9uKik7CisgICAgICAgIH5UcmVlSXRlcmF0b3IoKTsKKworICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgc2Vla1RvTGFzdCgpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2Vlayhjb25zdCBMZXZlbERCU2xpY2UmKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIG5leHQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXYoKTsKKyAgICAg
ICAgdmlydHVhbCBMZXZlbERCU2xpY2Uga2V5KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgTGV2
ZWxEQlNsaWNlIHZhbHVlKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNEZWxldGVkKCkgY29uc3Q7
CisgICAgICAgIHZvaWQgcmVzZXQoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFRyZWVJdGVy
YXRvcihMZXZlbERCVHJhbnNhY3Rpb24qKTsKKyAgICAgICAgbXV0YWJsZSBUcmVlVHlwZTo6SXRl
cmF0b3IgbV9pdGVyYXRvcjsgLy8gRGVyZWZlcmVuY2luZyB0aGlzIGlzIG5vbi1jb25zdC4KKyAg
ICAgICAgVHJlZVR5cGUqIG1fdHJlZTsKKyAgICAgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBtX3Ry
YW5zYWN0aW9uOworICAgICAgICBWZWN0b3I8Y2hhcj4gbV9rZXk7CisgICAgfTsKKworICAgIGNs
YXNzIFRyYW5zYWN0aW9uSXRlcmF0b3IgOiBwdWJsaWMgTGV2ZWxEQkl0ZXJhdG9yIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIH5UcmFuc2FjdGlvbkl0ZXJhdG9yKCkgeyB9OworICAgICAgICBzdGF0
aWMgUGFzc093blB0cjxUcmFuc2FjdGlvbkl0ZXJhdG9yPiBjcmVhdGUoUGFzc1JlZlB0cjxMZXZl
bERCVHJhbnNhY3Rpb24+KTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIHZvaWQgc2Vla1RvTGFzdCgpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgc2Vlayhjb25zdCBMZXZlbERCU2xpY2UmIHRhcmdldCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBuZXh0KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmV2KCk7CisgICAgICAgIHZpcnR1YWwg
TGV2ZWxEQlNsaWNlIGtleSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIExldmVsREJTbGljZSB2
YWx1ZSgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgVHJhbnNhY3Rpb25JdGVyYXRv
cihQYXNzUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4pOworICAgICAgICB2b2lkIGhhbmRsZUNv
bmZsaWN0c0FuZERlbGV0ZXMoKTsKKyAgICAgICAgdm9pZCBmaW5kU21hbGxlc3QoKTsKKyAgICAg
ICAgdm9pZCBmaW5kTGFyZ2VzdCgpOworCisgICAgICAgIFJlZlB0cjxMZXZlbERCVHJhbnNhY3Rp
b24+IG1fdHJhbnNhY3Rpb247CisgICAgICAgIGNvbnN0IExldmVsREJDb21wYXJhdG9yKiBtX2Nv
bXBhcmF0b3I7CisgICAgICAgIE93blB0cjxUcmVlSXRlcmF0b3I+IG1fdHJlZUl0ZXJhdG9yOwor
ICAgICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBtX2RiSXRlcmF0b3I7CisgICAgICAgIExl
dmVsREJJdGVyYXRvciogbV9jdXJyZW50OworCisgICAgICAgIGVudW0gRGlyZWN0aW9uIHsKKyAg
ICAgICAgICAgIGtGb3J3YXJkLAorICAgICAgICAgICAga1JldmVyc2UKKyAgICAgICAgfTsKKyAg
ICAgICAgRGlyZWN0aW9uIG1fZGlyZWN0aW9uOworICAgIH07CisKKyAgICB2b2lkIGNsZWFyVHJl
ZSgpOworICAgIHZvaWQgcmVnaXN0ZXJJdGVyYXRvcihUcmVlSXRlcmF0b3IqKTsKKyAgICB2b2lk
IHVucmVnaXN0ZXJJdGVyYXRvcihUcmVlSXRlcmF0b3IqKTsKKyAgICB2b2lkIHJlc2V0SXRlcmF0
b3JzKCk7CisKKyAgICBMZXZlbERCRGF0YWJhc2UqIG1fZGI7CisgICAgY29uc3QgTGV2ZWxEQkNv
bXBhcmF0b3IqIG1fY29tcGFyYXRvcjsKKyAgICBUcmVlVHlwZSBtX3RyZWU7CisgICAgYm9vbCBt
X2ZpbmlzaGVkOworICAgIEhhc2hTZXQ8VHJlZUl0ZXJhdG9yKj4gbV90cmVlSXRlcmF0b3JzOwor
fTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKExFVkVMREIpCisjZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBMZXZlbERCVHJhbnNhY3Rpb25faApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXgg
M2IwZGQzMzIyYmUzNWJjMWVhYTIxMzc2ZjNiY2FhZTI5MDU4ZDk1MS4uN2FmYjlkMWQwNmVkN2Zi
MDJjMzk3ODIzOGI5Nzg3OWI3MmI3MDg3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVk
ZSAiTGV2ZWxEQkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiTGV2ZWxEQkl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiTGV2ZWxEQlNsaWNlLmgiCisjaW5jbHVkZSAiTGV2ZWxEQlRyYW5zYWN0aW9uLmgiCiAj
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIAogI2lmbmRlZiBJTlQ2NF9NQVgKQEAgLTQ5LDcg
KzUwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSURCTGV2ZWxE
QkNvZGluZzsKIAotc3RhdGljIGJvb2wgZ2V0SW50KExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0
IFZlY3RvcjxjaGFyPiYga2V5LCBpbnQ2NF90JiBmb3VuZEludCkKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBEYk9yVHJhbnNhY3Rpb24+CitzdGF0aWMgYm9vbCBnZXRJbnQoRGJPclRyYW5zYWN0aW9uKiBk
YiwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIGludDY0X3QmIGZvdW5kSW50KQogewogICAgIFZl
Y3RvcjxjaGFyPiByZXN1bHQ7CiAgICAgaWYgKCFkYi0+Z2V0KGtleSwgcmVzdWx0KSkKQEAgLTU5
LDEyICs2MSwxNCBAQCBzdGF0aWMgYm9vbCBnZXRJbnQoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29u
c3QgVmVjdG9yPGNoYXI+JiBrZXksIGludDY0X3QmIGZvdW5kSQogICAgIHJldHVybiB0cnVlOwog
fQogCi1zdGF0aWMgYm9vbCBwdXRJbnQoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgVmVjdG9y
PGNoYXI+JiBrZXksIGludDY0X3QgdmFsdWUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRGJPclRyYW5z
YWN0aW9uPgorc3RhdGljIGJvb2wgcHV0SW50KERiT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZl
Y3RvcjxjaGFyPiYga2V5LCBpbnQ2NF90IHZhbHVlKQogewogICAgIHJldHVybiBkYi0+cHV0KGtl
eSwgZW5jb2RlSW50KHZhbHVlKSk7CiB9CiAKLXN0YXRpYyBib29sIGdldFN0cmluZyhMZXZlbERC
RGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgU3RyaW5nJiBmb3VuZFN0cmlu
ZykKK3RlbXBsYXRlIDx0eXBlbmFtZSBEYk9yVHJhbnNhY3Rpb24+CitzdGF0aWMgYm9vbCBnZXRT
dHJpbmcoRGJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIFN0cmlu
ZyYgZm91bmRTdHJpbmcpCiB7CiAgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKICAgICBpZiAoIWRi
LT5nZXQoa2V5LCByZXN1bHQpKQpAQCAtNzQsNyArNzgsOCBAQCBzdGF0aWMgYm9vbCBnZXRTdHJp
bmcoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIFN0cmluZyYg
Zm91bgogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBwdXRTdHJpbmcoTGV2ZWxE
QkRhdGFiYXNlKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+IGtleSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBEYk9yVHJhbnNhY3Rpb24+CitzdGF0aWMgYm9vbCBwdXRT
dHJpbmcoRGJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+IGtleSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAoIWRiLT5wdXQoa2V5LCBlbmNvZGVTdHJpbmcodmFs
dWUpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjgzLDEyICsyODgsMTIgQEAgdm9pZCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlk
LCBWZWN0b3I8aW50NjRfdD4KICAgICB9CiB9CiAKLXN0YXRpYyBpbnQ2NF90IGdldE5ld09iamVj
dFN0b3JlSWQoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRfdCBkYXRhYmFzZUlkKQorc3RhdGlj
IGludDY0X3QgZ2V0TmV3T2JqZWN0U3RvcmVJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQpCiB7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGZyZWVM
aXN0U3RhcnRLZXkgPSBPYmplY3RTdG9yZUZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
MCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGZyZWVMaXN0U3RvcEtleSA9IE9iamVjdFN0b3Jl
RnJlZUxpc3RLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBJTlQ2NF9NQVgpOwogCi0gICAgT3duUHRy
PExldmVsREJJdGVyYXRvcj4gaXQgPSBkYi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBPd25QdHI8
TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwogICAg
IGZvciAoaXQtPnNlZWsoZnJlZUxpc3RTdGFydEtleSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFy
ZUtleXMoaXQtPmtleSgpLCBmcmVlTGlzdFN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgewogICAg
ICAgICBjb25zdCBjaGFyKiBwID0gaXQtPmtleSgpLmJlZ2luKCk7CiAgICAgICAgIGNvbnN0IGNo
YXIqIGxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOwpAQCAtMjk3LDcgKzMwMiw3IEBAIHN0YXRpYyBp
bnQ2NF90IGdldE5ld09iamVjdFN0b3JlSWQoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRfdCBk
YXRhYmFzZUlkKQogICAgICAgICBwID0gT2JqZWN0U3RvcmVGcmVlTGlzdEtleTo6ZGVjb2RlKHAs
IGxpbWl0LCAmZnJlZUxpc3RLZXkpOwogICAgICAgICBBU1NFUlQocCk7CiAKLSAgICAgICAgYm9v
bCBvayA9IGRiLT5yZW1vdmUoaXQtPmtleSgpKTsKKyAgICAgICAgYm9vbCBvayA9IHRyYW5zYWN0
aW9uLT5yZW1vdmUoaXQtPmtleSgpKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOwog
CiAgICAgICAgIHJldHVybiBmcmVlTGlzdEtleS5vYmplY3RTdG9yZUlkKCk7CkBAIC0zMDUsMTMg
KzMxMCwxMyBAQCBzdGF0aWMgaW50NjRfdCBnZXROZXdPYmplY3RTdG9yZUlkKExldmVsREJEYXRh
YmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJZCkKIAogICAgIGludDY0X3QgbWF4T2JqZWN0U3Rv
cmVJZCA9IC0xOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtYXhPYmplY3RTdG9yZUlkS2V5ID0g
RGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIERhdGFiYXNlTWV0YURhdGFL
ZXk6OmtNYXhPYmplY3RTdG9yZUlkKTsKLSAgICBpZiAoIWdldEludChkYiwgbWF4T2JqZWN0U3Rv
cmVJZEtleSwgbWF4T2JqZWN0U3RvcmVJZCkpCisgICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24s
IG1heE9iamVjdFN0b3JlSWRLZXksIG1heE9iamVjdFN0b3JlSWQpKQogICAgICAgICBtYXhPYmpl
Y3RTdG9yZUlkID0gMDsKIAogICAgIEFTU0VSVChtYXhPYmplY3RTdG9yZUlkID49IDApOwogCiAg
ICAgaW50NjRfdCBvYmplY3RTdG9yZUlkID0gbWF4T2JqZWN0U3RvcmVJZCArIDE7Ci0gICAgYm9v
bCBvayA9IHB1dEludChkYiwgbWF4T2JqZWN0U3RvcmVJZEtleSwgb2JqZWN0U3RvcmVJZCk7Cisg
ICAgYm9vbCBvayA9IHB1dEludCh0cmFuc2FjdGlvbiwgbWF4T2JqZWN0U3RvcmVJZEtleSwgb2Jq
ZWN0U3RvcmVJZCk7CiAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOwogCiAgICAgcmV0dXJuIG9i
amVjdFN0b3JlSWQ7CkBAIC0zMTksNyArMzI0LDggQEAgc3RhdGljIGludDY0X3QgZ2V0TmV3T2Jq
ZWN0U3RvcmVJZChMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQpCiAKIGJv
b2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBh
dXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpCiB7Ci0gICAgaW50
NjRfdCBvYmplY3RTdG9yZUlkID0gZ2V0TmV3T2JqZWN0U3RvcmVJZChtX2RiLmdldCgpLCBkYXRh
YmFzZUlkKTsKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCA9IGdldE5ld09iamVjdFN0b3JlSWQobV9jdXJyZW50VHJhbnNhY3Rpb24u
Z2V0KCksIGRhdGFiYXNlSWQpOwogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG5hbWVLZXkgPSBP
YmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
MCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleVBhdGhLZXkgPSBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMSk7CkBAIC0zMjksNDMg
KzMzNSw0MyBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3Jl
KGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJgogICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBtYXhJbmRleElkS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIDUpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBuYW1lc0tleSA9
IE9iamVjdFN0b3JlTmFtZXNLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBuYW1lKTsKIAotICAgIGJv
b2wgb2sgPSBwdXRTdHJpbmcobV9kYi5nZXQoKSwgbmFtZUtleSwgbmFtZSk7CisgICAgYm9vbCBv
ayA9IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbmFtZUtleSwgbmFtZSk7
CiAgICAgaWYgKCFvaykgewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIg
ZXJyb3IuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1dFN0
cmluZyhtX2RiLmdldCgpLCBrZXlQYXRoS2V5LCBrZXlQYXRoKTsKKyAgICBvayA9IHB1dFN0cmlu
ZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwga2V5UGF0aEtleSwga2V5UGF0aCk7CiAgICAg
aWYgKCFvaykgewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3Iu
Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1dEludChtX2Ri
LmdldCgpLCBhdXRvSW5jcmVtZW50S2V5LCBhdXRvSW5jcmVtZW50KTsKKyAgICBvayA9IHB1dElu
dChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgYXV0b0luY3JlbWVudEtleSwgYXV0b0luY3Jl
bWVudCk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4
ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9
IHB1dEludChtX2RiLmdldCgpLCBldmljdGFibGVLZXksIGZhbHNlKTsKKyAgICBvayA9IHB1dElu
dChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZXZpY3RhYmxlS2V5LCBmYWxzZSk7CiAgICAg
aWYgKCFvaykgewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3Iu
Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1dEludChtX2Ri
LmdldCgpLCBsYXN0VmVyc2lvbktleSwgMSk7CisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIGxhc3RWZXJzaW9uS2V5LCAxKTsKICAgICBpZiAoIW9rKSB7CiAgICAg
ICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0SW50KG1fZGIuZ2V0KCksIG1heEluZGV4
SWRLZXksIGtNaW5pbXVtSW5kZXhJZCk7CisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNh
Y3Rpb24uZ2V0KCksIG1heEluZGV4SWRLZXksIGtNaW5pbXVtSW5kZXhJZCk7CiAgICAgaWYgKCFv
aykgewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1dEludChtX2RiLmdldCgp
LCBuYW1lc0tleSwgb2JqZWN0U3RvcmVJZCk7CisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIG5hbWVzS2V5LCBvYmplY3RTdG9yZUlkKTsKICAgICBpZiAoIW9rKSB7
CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMzc2LDEyICszODIsMTEgQEAgYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZGVsZXRlUmFuZ2UoTGV2
ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBiZWdpbiwgY29uc3QgVmVjdG9y
PGNoYXI+JiBlbmQpCitzdGF0aWMgYm9vbCBkZWxldGVSYW5nZShMZXZlbERCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJlZ2luLCBjb25zdCBWZWN0b3I8Y2hh
cj4mIGVuZCkKIHsKLSAgICAvLyBGSVhNRTogTGV2ZWxEQiBtYXkgYmUgYWJsZSB0byBwcm92aWRl
IGEgYnVsayBvcGVyYXRpb24gdGhhdCB3ZSBjYW4gZG8gZmlyc3QuCi0gICAgT3duUHRyPExldmVs
REJJdGVyYXRvcj4gaXQgPSBkYi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBPd25QdHI8TGV2ZWxE
Qkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwogICAgIGZvciAo
aXQtPnNlZWsoYmVnaW4pOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwg
ZW5kKSA8IDA7IGl0LT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKCFkYi0+cmVtb3ZlKGl0LT5rZXko
KSkpCisgICAgICAgIGlmICghdHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMzkwLDE4ICszOTUsMjAgQEAgc3RhdGlj
IGJvb2wgZGVsZXRlUmFuZ2UoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+
JiBiZWdpbiwgY29uc3QgVmUKIAogdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVP
YmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsK
KyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworCiAgICAgU3RyaW5nIG9iamVjdFN0
b3JlTmFtZTsKLSAgICBnZXRTdHJpbmcobV9kYi5nZXQoKSwgT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBvYmplY3RTdG9yZU5hbWUp
OworICAgIGdldFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgT2JqZWN0U3RvcmVN
ZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBvYmplY3RT
dG9yZU5hbWUpOwogCi0gICAgaWYgKCFkZWxldGVSYW5nZShtX2RiLmdldCgpLCBPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIE9iamVj
dFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCA2KSkp
CisgICAgaWYgKCFkZWxldGVSYW5nZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgT2JqZWN0
U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBP
YmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
NikpKQogICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3IuCiAKLSAgICBwdXRT
dHJpbmcobV9kYi5nZXQoKSwgT2JqZWN0U3RvcmVGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQpLCAiIik7Ci0gICAgbV9kYi0+cmVtb3ZlKE9iamVjdFN0b3JlTmFt
ZXNLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZU5hbWUpKTsKKyAgICBwdXRTdHJp
bmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIE9iamVjdFN0b3JlRnJlZUxpc3RLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSwgIiIpOworICAgIG1fY3VycmVudFRyYW5z
YWN0aW9uLT5yZW1vdmUoT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlTmFtZSkpOwogCi0gICAgaWYgKCFkZWxldGVSYW5nZShtX2RiLmdldCgpLCBJbmRl
eEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIEluZGV4
RnJlZUxpc3RLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBJTlQ2NF9NQVgp
KSkKKyAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBJbmRl
eEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIEluZGV4
RnJlZUxpc3RLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBJTlQ2NF9NQVgp
KSkKICAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgotICAgIGlmICghZGVs
ZXRlUmFuZ2UobV9kYi5nZXQoKSwgSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIDAsIDApLCBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgSU5UNjRfTUFYLCAwKSkpCisgICAgaWYgKCFkZWxldGVSYW5nZSht
X2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIDAsIDApLCBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgSU5UNjRfTUFYLCAwKSkpCiAgICAgICAgIHJldHVybjsg
Ly8gRklYTUU6IFJlcG9ydCBlcnJvci4KIAogICAgIGNsZWFyT2JqZWN0U3RvcmUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCk7CkBAIC00MTIsNyArNDE5LDggQEAgU3RyaW5nIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKICAgICBWZWN0b3I8
Y2hhcj4gZGF0YTsKIAotICAgIGlmICghbV9kYi0+Z2V0KGxldmVsZGJLZXksIGRhdGEpKQorICAg
IEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgaWYgKCFtX2N1cnJlbnRUcmFuc2Fj
dGlvbi0+Z2V0KGxldmVsZGJLZXksIGRhdGEpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
ICAgICBpbnQ2NF90IHZlcnNpb247CkBAIC00NDUsMTggKzQ1MywxOCBAQCBwcml2YXRlOgogfTsK
IH0KIAotc3RhdGljIGludDY0X3QgZ2V0TmV3VmVyc2lvbk51bWJlcihMZXZlbERCRGF0YWJhc2Uq
IGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3N0YXRpYyBp
bnQ2NF90IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CiAgICAgY29u
c3QgVmVjdG9yPGNoYXI+IGxhc3RWZXJzaW9uS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDQpOwogCiAgICAgaW50NjRfdCBsYXN0
VmVyc2lvbiA9IC0xOwotICAgIGlmICghZ2V0SW50KGRiLCBsYXN0VmVyc2lvbktleSwgbGFzdFZl
cnNpb24pKQorICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLCBsYXN0VmVyc2lvbktleSwgbGFz
dFZlcnNpb24pKQogICAgICAgICBsYXN0VmVyc2lvbiA9IDA7CiAKICAgICBBU1NFUlQobGFzdFZl
cnNpb24gPj0gMCk7CiAKICAgICBpbnQ2NF90IHZlcnNpb24gPSBsYXN0VmVyc2lvbiArIDE7Ci0g
ICAgYm9vbCBvayA9IHB1dEludChkYiwgbGFzdFZlcnNpb25LZXksIHZlcnNpb24pOworICAgIGJv
b2wgb2sgPSBwdXRJbnQodHJhbnNhY3Rpb24sIGxhc3RWZXJzaW9uS2V5LCB2ZXJzaW9uKTsKICAg
ICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7CiAKICAgICBBU1NFUlQodmVyc2lvbiA+IGxhc3RWZXJz
aW9uKTsgLy8gRklYTUU6IFRoaW5rIGFib3V0IGhvdyB3ZSB3YW50IHRvIGhhbmRsZSB0aGUgb3Zl
cmZsb3cgc2NlbmFyaW8uCkBAIC00NjYsMTggKzQ3NCwxOSBAQCBzdGF0aWMgaW50NjRfdCBnZXRO
ZXdWZXJzaW9uTnVtYmVyKExldmVsREJEYXRhYmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NgogCiBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3JlUmVjb3Jk
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkm
IGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBy
ZWNvcmRJZGVudGlmaWVyKQogewotICAgIGludDY0X3QgdmVyc2lvbiA9IGdldE5ld1ZlcnNpb25O
dW1iZXIobV9kYi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJU
KG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBpbnQ2NF90IHZlcnNpb24gPSBnZXROZXdWZXJz
aW9uTnVtYmVyKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gb2JqZWN0U3RvcmVkYXRhS2V5ID0gT2Jq
ZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsK
IAogICAgIFZlY3RvcjxjaGFyPiB2OwogICAgIHYuYXBwZW5kKGVuY29kZVZhckludCh2ZXJzaW9u
KSk7CiAgICAgdi5hcHBlbmQoZW5jb2RlU3RyaW5nKHZhbHVlKSk7CiAKLSAgICBpZiAoIW1fZGIt
PnB1dChvYmplY3RTdG9yZWRhdGFLZXksIHYpKQorICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rp
b24tPnB1dChvYmplY3RTdG9yZWRhdGFLZXksIHYpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gZXhpc3RzRW50cnlLZXkgPSBFeGlzdHNFbnRyeUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7Ci0gICAgaWYgKCFtX2RiLT5w
dXQoZXhpc3RzRW50cnlLZXksIGVuY29kZUludCh2ZXJzaW9uKSkpCisgICAgaWYgKCFtX2N1cnJl
bnRUcmFuc2FjdGlvbi0+cHV0KGV4aXN0c0VudHJ5S2V5LCBlbmNvZGVJbnQodmVyc2lvbikpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllciogbGV2
ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxMZXZlbERCUmVjb3JkSWRlbnRpZmll
cio+KHJlY29yZElkZW50aWZpZXIpOwpAQCAtNDg4LDEwICs0OTcsMTEgQEAgYm9vbCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2IKIAogdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0
b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogeworICAgIEFT
U0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0
S2V5ID0gS2V5UHJlZml4KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLmVuY29kZSgpOwog
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gS2V5UHJlZml4KGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQgKyAxLCAwKS5lbmNvZGUoKTsKIAotICAgIGRlbGV0ZVJhbmdlKG1fZGIuZ2V0
KCksIHN0YXJ0S2V5LCBzdG9wS2V5KTsKKyAgICBkZWxldGVSYW5nZShtX2N1cnJlbnRUcmFuc2Fj
dGlvbi5nZXQoKSwgc3RhcnRLZXksIHN0b3BLZXkpOwogfQogCiBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpCkBAIC01MDEsMTcgKzUxMSwxOSBA
QCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOgogCiB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50
aWZpZXIpCiB7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKICAgICBjb25zdCBM
ZXZlbERCUmVjb3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNf
Y2FzdDxjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZpZXIpOwog
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFy
eUtleSgpKTsKLSAgICBtX2RiLT5yZW1vdmUoa2V5KTsKKyAgICBtX2N1cnJlbnRUcmFuc2FjdGlv
bi0+cmVtb3ZlKGtleSk7CiB9CiAKIGRvdWJsZSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpuZXh0
QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCkKIHsKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBzdGFydEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIG1pbklEQktleSgpKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
c3RvcEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIG1heElEQktleSgpKTsKIAotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0g
bV9kYi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9
IG1fY3VycmVudFRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwogCiAgICAgaW50IG1heE51
bWVyaWNLZXkgPSAwOwogCkBAIC01MzcsMTAgKzU0OSwxMSBAQCBkb3VibGUgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6bmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NAogCiBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3Rv
cmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eSYga2V5LCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmll
cikKIHsKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBsZXZlbGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKIAotICAgIGlm
ICghbV9kYi0+Z2V0KGxldmVsZGJLZXksIGRhdGEpKQorICAgIGlmICghbV9jdXJyZW50VHJhbnNh
Y3Rpb24tPmdldChsZXZlbGRiS2V5LCBkYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgaW50NjRfdCB2ZXJzaW9uOwpAQCAtNTU1LDEwICs1NjgsMTEgQEAgYm9vbCBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdAogCiBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmZvckVhY2hPYmplY3RTdG9y
ZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0
U3RvcmVSZWNvcmRDYWxsYmFjayYgY2FsbGJhY2spCiB7CisgICAgQVNTRVJUKG1fY3VycmVudFRy
YW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RTdG9y
ZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtaW5JREJLZXkoKSk7
CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtYXhJREJLZXkoKSk7CiAKLSAgICBPd25Q
dHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgT3du
UHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRl
cmF0b3IoKTsKICAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBj
b21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgewogICAgICAg
ICBjb25zdCBjaGFyICpwID0gaXQtPmtleSgpLmJlZ2luKCk7CiAgICAgICAgIGNvbnN0IGNoYXIg
KmxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOwpAQCAtNjIyLDEyICs2MzYsMTIgQEAgdm9pZCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUkKICAgICB9CiB9CiAKLXN0YXRpYyBpbnQ2NF90IGdldE5ld0luZGV4SWQo
TGV2ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpCitzdGF0aWMgaW50NjRfdCBnZXROZXdJbmRleElkKExldmVsREJUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQog
ewogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IEluZGV4RnJlZUxpc3RLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKTsKICAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gc3RvcEtleSA9IEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBJTlQ2NF9NQVgpOwogCi0gICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBk
Yi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRy
YW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwogICAgIGZvciAoaXQtPnNlZWsoc3RhcnRLZXkp
OyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBp
dC0+bmV4dCgpKSB7CiAgICAgICAgIGNvbnN0IGNoYXIqIHAgPSBpdC0+a2V5KCkuYmVnaW4oKTsK
ICAgICAgICAgY29uc3QgY2hhciogbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7CkBAIC02MzYsNyAr
NjUwLDcgQEAgc3RhdGljIGludDY0X3QgZ2V0TmV3SW5kZXhJZChMZXZlbERCRGF0YWJhc2UqIGRi
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2IKICAgICAgICAgcCA9IEluZGV4RnJlZUxp
c3RLZXk6OmRlY29kZShwLCBsaW1pdCwgJmZyZWVMaXN0S2V5KTsKICAgICAgICAgQVNTRVJUKHAp
OwogCi0gICAgICAgIGJvb2wgb2sgPSBkYi0+cmVtb3ZlKGl0LT5rZXkoKSk7CisgICAgICAgIGJv
b2wgb2sgPSB0cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSk7CiAgICAgICAgIEFTU0VSVF9V
TlVTRUQob2ssIG9rKTsKIAogICAgICAgICBBU1NFUlQoZnJlZUxpc3RLZXkuaW5kZXhJZCgpID49
IGtNaW5pbXVtSW5kZXhJZCk7CkBAIC02NDUsMTMgKzY1OSwxMyBAQCBzdGF0aWMgaW50NjRfdCBn
ZXROZXdJbmRleElkKExldmVsREJEYXRhYmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYgogCiAgICAgaW50NjRfdCBtYXhJbmRleElkID0gLTE7CiAgICAgY29uc3QgVmVjdG9y
PGNoYXI+IG1heEluZGV4SWRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgNSk7Ci0gICAgaWYgKCFnZXRJbnQoZGIsIG1heEluZGV4
SWRLZXksIG1heEluZGV4SWQpKQorICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLCBtYXhJbmRl
eElkS2V5LCBtYXhJbmRleElkKSkKICAgICAgICAgbWF4SW5kZXhJZCA9IGtNaW5pbXVtSW5kZXhJ
ZDsKIAogICAgIEFTU0VSVChtYXhJbmRleElkID49IDApOwogCiAgICAgaW50NjRfdCBpbmRleElk
ID0gbWF4SW5kZXhJZCArIDE7Ci0gICAgYm9vbCBvayA9IHB1dEludChkYiwgbWF4SW5kZXhJZEtl
eSwgaW5kZXhJZCk7CisgICAgYm9vbCBvayA9IHB1dEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJ
ZEtleSwgaW5kZXhJZCk7CiAgICAgaWYgKCFvaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC02NjAsMjUgKzY3NCwyNiBAQCBzdGF0aWMgaW50NjRfdCBnZXROZXdJbmRleElkKExldmVsREJE
YXRhYmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYgogCiBib29sIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0
aCwgYm9vbCBpc1VuaXF1ZSwgaW50NjRfdCYgaW5kZXhJZCkKIHsKLSAgICBpbmRleElkID0gZ2V0
TmV3SW5kZXhJZChtX2RiLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKKyAgICBB
U1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIGluZGV4SWQgPSBnZXROZXdJbmRleElk
KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsK
IAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBuYW1lS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIDApOwogICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiB1bmlxdWVLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgMSk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtl
eVBhdGhLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhJZCwgMik7CiAKLSAgICBib29sIG9rID0gcHV0U3RyaW5nKG1fZGIuZ2V0KCks
IG5hbWVLZXksIG5hbWUpOworICAgIGJvb2wgb2sgPSBwdXRTdHJpbmcobV9jdXJyZW50VHJhbnNh
Y3Rpb24uZ2V0KCksIG5hbWVLZXksIG5hbWUpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9H
X0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9kYi5nZXQoKSwgdW5pcXVlS2V5LCBpc1Vu
aXF1ZSk7CisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIHVuaXF1
ZUtleSwgaXNVbmlxdWUpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRl
cm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgb2sgPSBwdXRTdHJpbmcobV9kYi5nZXQoKSwga2V5UGF0aEtleSwga2V5UGF0aCk7Cisg
ICAgb2sgPSBwdXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGtleVBhdGhLZXks
IGtleVBhdGgpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJ
bmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02OTgsMTkgKzcx
MywyMCBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29y
ZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QgbwogICAgIEFTU0VSVChpbmRleElkID49IGtN
aW5pbXVtSW5kZXhJZCk7CiAgICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVs
REJSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29yZElkZW50
aWZpZXIqPihyZWNvcmRJZGVudGlmaWVyKTsKIAotICAgIGNvbnN0IGludDY0X3QgZ2xvYmFsU2Vx
dWVuY2VOdW1iZXIgPSBnZXROZXdWZXJzaW9uTnVtYmVyKG1fZGIuZ2V0KCksIGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQpOworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAg
Y29uc3QgaW50NjRfdCBnbG9iYWxTZXF1ZW5jZU51bWJlciA9IGdldE5ld1ZlcnNpb25OdW1iZXIo
bV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOwog
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRleERhdGFLZXkgPSBJbmRleERhdGFLZXk6OmVuY29k
ZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXksIGdsb2JhbFNlcXVlbmNl
TnVtYmVyKTsKIAogICAgIFZlY3RvcjxjaGFyPiBkYXRhOwogICAgIGRhdGEuYXBwZW5kKGVuY29k
ZVZhckludChsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+dmVyc2lvbigpKSk7CiAgICAgZGF0YS5h
cHBlbmQobGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7CiAKLSAgICByZXR1
cm4gbV9kYi0+cHV0KGluZGV4RGF0YUtleSwgZGF0YSk7CisgICAgcmV0dXJuIG1fY3VycmVudFRy
YW5zYWN0aW9uLT5wdXQoaW5kZXhEYXRhS2V5LCBkYXRhKTsKIH0KIAotc3RhdGljIGJvb2wgZmlu
ZEdyZWF0ZXN0S2V5TGVzc1RoYW4oTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgVmVjdG9yPGNo
YXI+JiB0YXJnZXQsIFZlY3RvcjxjaGFyPiYgZm91bmRLZXkpCitzdGF0aWMgYm9vbCBmaW5kR3Jl
YXRlc3RLZXlMZXNzVGhhbihMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIHRhcmdldCwgVmVjdG9yPGNoYXI+JiBmb3VuZEtleSkKIHsKLSAgICBPd25Q
dHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IGRiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIE93blB0
cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAg
ICAgaXQtPnNlZWsodGFyZ2V0KTsKIAogICAgIGlmICghaXQtPmlzVmFsaWQoKSkgewpAQCAtNzQ1
LDEyICs3NjEsMTIgQEAgU3RyaW5nIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFZp
YUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmoKICAgICByZXR1cm4gZ2V0T2Jq
ZWN0U3RvcmVSZWNvcmQoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgKnByaW1hcnlLZXkpOwog
fQogCi1zdGF0aWMgYm9vbCB2ZXJzaW9uRXhpc3RzKExldmVsREJEYXRhYmFzZSogZGIsIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IHZlcnNpb24sIGNv
bnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZFByaW1hcnlLZXkpCitzdGF0aWMgYm9vbCB2ZXJzaW9u
RXhpc3RzKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IHZlcnNpb24sIGNvbnN0IFZlY3Rvcjxj
aGFyPiYgZW5jb2RlZFByaW1hcnlLZXkpCiB7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9
IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgZW5jb2Rl
ZFByaW1hcnlLZXkpOwogICAgIFZlY3RvcjxjaGFyPiBkYXRhOwogCi0gICAgaWYgKCFkYi0+Z2V0
KGtleSwgZGF0YSkpCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+Z2V0KGtleSwgZGF0YSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBkZWNvZGVJbnQoZGF0YS5iZWdpbigpLCBk
YXRhLmVuZCgpKSA9PSB2ZXJzaW9uOwpAQCAtNzU4LDggKzc3NCw5IEBAIHN0YXRpYyBib29sIHZl
cnNpb25FeGlzdHMoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjCiAKIFBhc3NSZWZQdHI8SURCS2V5PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpn
ZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCiB7CisgICAgQVNTRVJU
KG1fY3VycmVudFRyYW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktl
eSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4
SWQsIGtleSwgMCk7Ci0gICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2RiLT5jcmVh
dGVJdGVyYXRvcigpOworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9jdXJyZW50
VHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgaXQtPnNlZWsobGV2ZWxkYktleSk7
CiAKICAgICBmb3IgKDs7KSB7CkBAIC03NzUsOSArNzkyLDkgQEAgUGFzc1JlZlB0cjxJREJLZXk+
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRh
dGFiYXMKICAgICAgICAgVmVjdG9yPGNoYXI+IGVuY29kZWRQcmltYXJ5S2V5OwogICAgICAgICBl
bmNvZGVkUHJpbWFyeUtleS5hcHBlbmQocCwgaXQtPnZhbHVlKCkuZW5kKCkgLSBwKTsKIAotICAg
ICAgICBpZiAoIXZlcnNpb25FeGlzdHMobV9kYi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgdmVyc2lvbiwgZW5jb2RlZFByaW1hcnlLZXkpKSB7CisgICAgICAgIGlmICghdmVyc2lv
bkV4aXN0cyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgdmVyc2lvbiwgZW5jb2RlZFByaW1hcnlLZXkpKSB7CiAgICAgICAgICAgICAvLyBEZWxl
dGUgc3RhbGUgaW5kZXggZGF0YSBlbnRyeSBhbmQgY29udGludWUuCi0gICAgICAgICAgICBtX2Ri
LT5yZW1vdmUoaXQtPmtleSgpKTsKKyAgICAgICAgICAgIG1fY3VycmVudFRyYW5zYWN0aW9uLT5y
ZW1vdmUoaXQtPmtleSgpKTsKICAgICAgICAgICAgIGl0LT5uZXh0KCk7CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQpAQCAtNzkwLDggKzgwNyw5IEBAIFBhc3NSZWZQdHI8SURCS2V5
PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBk
YXRhYmFzCiAKIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleChp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXkmIGtleSkKIHsKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24p
OwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbERCS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5LCAwKTsKLSAgICBPd25Q
dHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgT3du
UHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRl
cmF0b3IoKTsKIAogICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKIApAQCAtODE4LDggKzgzNiw4IEBA
IHB1YmxpYzoKICAgICBib29sIGZpcnN0U2VlaygpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ3Vyc29y
SW1wbENvbW1vbihMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tl
eSwgYm9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9w
ZW4sIGJvb2wgZm9yd2FyZCkKLSAgICAgICAgOiBtX2RiKGRiKQorICAgIEN1cnNvckltcGxDb21t
b24oTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBs
b3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBoaWdoS2V5LCBib29sIGhp
Z2hPcGVuLCBib29sIGZvcndhcmQpCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlv
bikKICAgICAgICAgLCBtX2xvd0tleShsb3dLZXkpCiAgICAgICAgICwgbV9sb3dPcGVuKGxvd09w
ZW4pCiAgICAgICAgICwgbV9oaWdoS2V5KGhpZ2hLZXkpCkBAIC04MjksNyArODQ3LDcgQEAgcHJv
dGVjdGVkOgogICAgIH0KICAgICB2aXJ0dWFsIH5DdXJzb3JJbXBsQ29tbW9uKCkge30KIAotICAg
IExldmVsREJEYXRhYmFzZSogbV9kYjsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIG1fdHJhbnNh
Y3Rpb247CiAgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gbV9pdGVyYXRvcjsKICAgICBWZWN0
b3I8Y2hhcj4gbV9sb3dLZXk7CiAgICAgYm9vbCBtX2xvd09wZW47CkBAIC04NDEsNyArODU5LDcg
QEAgcHJvdGVjdGVkOgogCiBib29sIEN1cnNvckltcGxDb21tb246OmZpcnN0U2VlaygpCiB7Ci0g
ICAgbV9pdGVyYXRvciA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgbV9pdGVyYXRvciA9
IG1fdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAKICAgICBpZiAobV9mb3J3YXJkKQog
ICAgICAgICBtX2l0ZXJhdG9yLT5zZWVrKG1fbG93S2V5KTsKQEAgLTkwMiw3ICs5MjAsNyBAQCBi
b29sIEN1cnNvckltcGxDb21tb246OmNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5KiBrZXkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgVmVjdG9yPGNoYXI+IHRyYXNo
OwotICAgICAgICBpZiAoIW1fZGItPmdldChtX2l0ZXJhdG9yLT5rZXkoKSwgdHJhc2gpKQorICAg
ICAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmdldChtX2l0ZXJhdG9yLT5rZXkoKSwgdHJhc2gpKQog
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmIChtX2ZvcndhcmQgJiYgbV9oaWdo
T3BlbiAmJiBjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2hpZ2hLZXkpID49
IDApIC8vIGhpZ2gga2V5IG5vdCBpbmNsdWRlZCBpbiByYW5nZQpAQCAtOTM3LDkgKzk1NSw5IEBA
IGJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqIGtl
eSkKIAogY2xhc3MgT2JqZWN0U3RvcmVDdXJzb3JJbXBsIDogcHVibGljIEN1cnNvckltcGxDb21t
b24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9iamVjdFN0b3JlQ3Vyc29ySW1w
bD4gY3JlYXRlKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgbG93S2V5
LCBib29sIGxvd09wZW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgaGlnaEtleSwgYm9vbCBoaWdoT3Bl
biwgYm9vbCBmb3J3YXJkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9iamVjdFN0b3JlQ3Vyc29y
SW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3Rv
cjxjaGFyPiYgbG93S2V5LCBib29sIGxvd09wZW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgaGlnaEtl
eSwgYm9vbCBoaWdoT3BlbiwgYm9vbCBmb3J3YXJkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBPYmplY3RTdG9yZUN1cnNvckltcGwoZGIsIGxvd0tleSwgbG93T3BlbiwgaGln
aEtleSwgaGlnaE9wZW4sIGZvcndhcmQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBP
YmplY3RTdG9yZUN1cnNvckltcGwodHJhbnNhY3Rpb24sIGxvd0tleSwgbG93T3BlbiwgaGlnaEtl
eSwgaGlnaE9wZW4sIGZvcndhcmQpKTsKICAgICB9CiAKICAgICAvLyBDdXJzb3JJbXBsQ29tbW9u
CkBAIC05NDksOCArOTY3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVu
dFJvdygpOwogCiBwcml2YXRlOgotICAgIE9iamVjdFN0b3JlQ3Vyc29ySW1wbChMZXZlbERCRGF0
YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25z
dCBWZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKLSAg
ICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKGRiLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXksIGhp
Z2hPcGVuLCBmb3J3YXJkKQorICAgIE9iamVjdFN0b3JlQ3Vyc29ySW1wbChMZXZlbERCVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tleSwgYm9vbCBsb3dP
cGVuLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9wZW4sIGJvb2wgZm9y
d2FyZCkKKyAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKHRyYW5zYWN0aW9uLCBsb3dLZXksIGxv
d09wZW4sIGhpZ2hLZXksIGhpZ2hPcGVuLCBmb3J3YXJkKQogICAgIHsKICAgICB9CiAKQEAgLTk4
NCw5ICsxMDAyLDkgQEAgYm9vbCBPYmplY3RTdG9yZUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93
KCkKIAogY2xhc3MgSW5kZXhLZXlDdXJzb3JJbXBsIDogcHVibGljIEN1cnNvckltcGxDb21tb24g
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4S2V5Q3Vyc29ySW1wbD4gY3Jl
YXRlKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgbG93S2V5LCBib29s
IGxvd09wZW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgaGlnaEtleSwgYm9vbCBoaWdoT3BlbiwgYm9v
bCBmb3J3YXJkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4S2V5Q3Vyc29ySW1wbD4gY3Jl
YXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYg
bG93S2V5LCBib29sIGxvd09wZW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgaGlnaEtleSwgYm9vbCBo
aWdoT3BlbiwgYm9vbCBmb3J3YXJkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJbmRleEtleUN1cnNvckltcGwoZGIsIGxvd0tleSwgbG93T3BlbiwgaGlnaEtleSwgaGlnaE9w
ZW4sIGZvcndhcmQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleEtleUN1cnNv
ckltcGwodHJhbnNhY3Rpb24sIGxvd0tleSwgbG93T3BlbiwgaGlnaEtleSwgaGlnaE9wZW4sIGZv
cndhcmQpKTsKICAgICB9CiAKICAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCkBAIC05OTcsOCArMTAx
NSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKIAogcHJp
dmF0ZToKLSAgICBJbmRleEtleUN1cnNvckltcGwoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3Qg
VmVjdG9yPGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBo
aWdoS2V5LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCi0gICAgICAgIDogQ3Vyc29ySW1w
bENvbW1vbihkYiwgbG93S2V5LCBsb3dPcGVuLCBoaWdoS2V5LCBoaWdoT3BlbiwgZm9yd2FyZCkK
KyAgICBJbmRleEtleUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
Y29uc3QgVmVjdG9yPGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNo
YXI+JiBoaWdoS2V5LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCisgICAgICAgIDogQ3Vy
c29ySW1wbENvbW1vbih0cmFuc2FjdGlvbiwgbG93S2V5LCBsb3dPcGVuLCBoaWdoS2V5LCBoaWdo
T3BlbiwgZm9yd2FyZCkKICAgICB7CiAgICAgfQogCkBAIC0xMDI4LDcgKzEwNDYsNyBAQCBib29s
IEluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgIFZlY3RvcjxjaGFyPiBw
cmltYXJ5TGV2ZWxEQktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGluZGV4RGF0YUtl
eS5kYXRhYmFzZUlkKCksIGluZGV4RGF0YUtleS5vYmplY3RTdG9yZUlkKCksICptX3ByaW1hcnlL
ZXkpOwogCiAgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAgICBpZiAoIW1fZGItPmdldChwcmlt
YXJ5TGV2ZWxEQktleSwgcmVzdWx0KSkKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmdldChwcmlt
YXJ5TGV2ZWxEQktleSwgcmVzdWx0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaW50
NjRfdCBvYmplY3RTdG9yZURhdGFWZXJzaW9uOwpAQCAtMTAzOCw3ICsxMDU2LDcgQEAgYm9vbCBJ
bmRleEtleUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKG9iamVjdFN0b3JlRGF0YVZlcnNpb24gIT0gaW5kZXhEYXRhVmVyc2lvbikg
eyAvLyBGSVhNRTogVGhpcyBpcyBwcm9iYWJseSBub3QgdmVyeSB3ZWxsIGNvdmVyZWQgYnkgdGhl
IGxheW91dCB0ZXN0cy4KLSAgICAgICAgbV9kYi0+cmVtb3ZlKG1faXRlcmF0b3ItPmtleSgpKTsK
KyAgICAgICAgbV90cmFuc2FjdGlvbi0+cmVtb3ZlKG1faXRlcmF0b3ItPmtleSgpKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTA0Nyw5ICsxMDY1LDkgQEAgYm9vbCBJbmRl
eEtleUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKIAogY2xhc3MgSW5kZXhDdXJzb3JJbXBs
IDogcHVibGljIEN1cnNvckltcGxDb21tb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEluZGV4Q3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZl
Y3RvcjxjaGFyPiYgbG93S2V5LCBib29sIGxvd09wZW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgaGln
aEtleSwgYm9vbCBoaWdoT3BlbiwgYm9vbCBmb3J3YXJkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluZGV4Q3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGNvbnN0IFZlY3RvcjxjaGFyPiYgbG93S2V5LCBib29sIGxvd09wZW4sIGNvbnN0IFZlY3Rvcjxj
aGFyPiYgaGlnaEtleSwgYm9vbCBoaWdoT3BlbiwgYm9vbCBmb3J3YXJkKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleEN1cnNvckltcGwoZGIsIGxvd0tleSwgbG93T3Bl
biwgaGlnaEtleSwgaGlnaE9wZW4sIGZvcndhcmQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbmRleEN1cnNvckltcGwodHJhbnNhY3Rpb24sIGxvd0tleSwgbG93T3BlbiwgaGlnaEtl
eSwgaGlnaE9wZW4sIGZvcndhcmQpKTsKICAgICB9CiAKICAgICAvLyBDdXJzb3JJbXBsQ29tbW9u
CkBAIC0xMDYwLDggKzEwNzgsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBsb2FkQ3VycmVudFJvdygp
OwogCiBwcml2YXRlOgotICAgIEluZGV4Q3Vyc29ySW1wbChMZXZlbERCRGF0YWJhc2UqIGRiLCBj
b25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8Y2hh
cj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKLSAgICAgICAgOiBDdXJz
b3JJbXBsQ29tbW9uKGRiLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXksIGhpZ2hPcGVuLCBmb3J3
YXJkKQorICAgIEluZGV4Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBjb25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8
Y2hhcj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKKyAgICAgICAgOiBD
dXJzb3JJbXBsQ29tbW9uKHRyYW5zYWN0aW9uLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXksIGhp
Z2hPcGVuLCBmb3J3YXJkKQogICAgIHsKICAgICB9CiAKQEAgLTEwOTYsNyArMTExNCw3IEBAIGJv
b2wgSW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgbV9wcmltYXJ5TGV2ZWxE
QktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGluZGV4RGF0YUtleS5kYXRhYmFzZUlk
KCksIGluZGV4RGF0YUtleS5vYmplY3RTdG9yZUlkKCksICptX3ByaW1hcnlLZXkpOwogCiAgICAg
VmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAgICBpZiAoIW1fZGItPmdldChtX3ByaW1hcnlMZXZlbERC
S2V5LCByZXN1bHQpKQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+Z2V0KG1fcHJpbWFyeUxldmVs
REJLZXksIHJlc3VsdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGludDY0X3Qgb2Jq
ZWN0U3RvcmVEYXRhVmVyc2lvbjsKQEAgLTExMDYsNyArMTEyNCw3IEBAIGJvb2wgSW5kZXhDdXJz
b3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
IChvYmplY3RTdG9yZURhdGFWZXJzaW9uICE9IGluZGV4RGF0YVZlcnNpb24pIHsKLSAgICAgICAg
bV9kYi0+cmVtb3ZlKG1faXRlcmF0b3ItPmtleSgpKTsKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+
cmVtb3ZlKG1faXRlcmF0b3ItPmtleSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IApAQCAtMTExNiw5ICsxMTM0LDkgQEAgYm9vbCBJbmRleEN1cnNvckltcGw6OmxvYWRDdXJyZW50
Um93KCkKIAogfQogCi1zdGF0aWMgYm9vbCBmaW5kTGFzdEluZGV4S2V5RXF1YWxUbyhMZXZlbERC
RGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIHRhcmdldCwgVmVjdG9yPGNoYXI+JiBm
b3VuZEtleSkKK3N0YXRpYyBib29sIGZpbmRMYXN0SW5kZXhLZXlFcXVhbFRvKExldmVsREJUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgdGFyZ2V0LCBWZWN0b3I8
Y2hhcj4mIGZvdW5kS2V5KQogewotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gZGIt
PmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSB0cmFu
c2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBpdC0+c2Vlayh0YXJnZXQpOwogCiAgICAg
aWYgKCFpdC0+aXNWYWxpZCgpKQpAQCAtMTEzNSw2ICsxMTUzLDcgQEAgc3RhdGljIGJvb2wgZmlu
ZExhc3RJbmRleEtleUVxdWFsVG8oTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgVmVjdG9yPGNo
YXI+JiB0YXIKIAogUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNv
cjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rp
b24pOwogICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigpOwogICAg
IGJvb2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOwogICAgIGJvb2wgZm9y
d2FyZCA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJl
Y3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUKTsKQEAgLTExNTUsNyArMTE3NCw3IEBAIFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5P
YmplY3RTdG9yZUN1cnNvCiAgICAgICAgIHVwcGVyT3BlbiA9IHRydWU7IC8vIE5vdCBpbmNsdWRl
ZC4KIAogICAgICAgICBpZiAoIWZvcndhcmQpIHsgLy8gV2UgbmVlZCBhIGtleSB0aGF0IGV4aXN0
cy4KLSAgICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW4obV9kYi5nZXQoKSwg
c3RvcEtleSwgc3RvcEtleSkpCisgICAgICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NU
aGFuKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBzdG9wS2V5LCBzdG9wS2V5KSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIHVwcGVyT3BlbiA9IGZhbHNlOwogICAg
ICAgICB9CkBAIC0xMTY0LDcgKzExODMsNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6
Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzbwogICAg
ICAgICB1cHBlck9wZW4gPSByYW5nZS0+dXBwZXJPcGVuKCk7CiAgICAgfQogCi0gICAgUmVmUHRy
PE9iamVjdFN0b3JlQ3Vyc29ySW1wbD4gY3Vyc29yID0gT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpj
cmVhdGUobV9kYi5nZXQoKSwgc3RhcnRLZXksIGxvd2VyT3Blbiwgc3RvcEtleSwgdXBwZXJPcGVu
LCBmb3J3YXJkKTsKKyAgICBSZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBjdXJzb3IgPSBP
YmplY3RTdG9yZUN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwg
c3RhcnRLZXksIGxvd2VyT3Blbiwgc3RvcEtleSwgdXBwZXJPcGVuLCBmb3J3YXJkKTsKICAgICBp
ZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xMTczLDYg
KzExOTIsNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzbwogCiBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJz
b3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJl
Y3Rpb24pCiB7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKICAgICBib29sIGxv
d2VyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+bG93ZXIoKTsKICAgICBib29sIHVwcGVyQm91bmQg
PSByYW5nZSAmJiByYW5nZS0+dXBwZXIoKTsKICAgICBib29sIGZvcndhcmQgPSAoZGlyZWN0aW9u
ID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNv
cjo6TkVYVCk7CkBAIC0xMTkzLDE4ICsxMjEzLDE4IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcihp
CiAgICAgICAgIHVwcGVyT3BlbiA9IGZhbHNlOyAvLyBJbmNsdWRlZC4KIAogICAgICAgICBpZiAo
IWZvcndhcmQpIHsgLy8gV2UgbmVlZCBhIGtleSB0aGF0IGV4aXN0cy4KLSAgICAgICAgICAgIGlm
ICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW4obV9kYi5nZXQoKSwgc3RvcEtleSwgc3RvcEtleSkp
CisgICAgICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuKG1fY3VycmVudFRyYW5z
YWN0aW9uLmdldCgpLCBzdG9wS2V5LCBzdG9wS2V5KSkKICAgICAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgICAgIHVwcGVyT3BlbiA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfSBlbHNl
IHsKICAgICAgICAgc3RvcEtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIGluZGV4SWQsICpyYW5nZS0+dXBwZXIoKSwgMCk7Ci0gICAgICAgIGlmICgh
ZmluZExhc3RJbmRleEtleUVxdWFsVG8obV9kYi5nZXQoKSwgc3RvcEtleSwgc3RvcEtleSkpIC8v
IFNlZWsgdG8gdGhlICpsYXN0KiBrZXkgaW4gdGhlIHNldCBvZiBub24tdW5pcXVlIGtleXMuCisg
ICAgICAgIGlmICghZmluZExhc3RJbmRleEtleUVxdWFsVG8obV9jdXJyZW50VHJhbnNhY3Rpb24u
Z2V0KCksIHN0b3BLZXksIHN0b3BLZXkpKSAvLyBTZWVrIHRvIHRoZSAqbGFzdCoga2V5IGluIHRo
ZSBzZXQgb2Ygbm9uLXVuaXF1ZSBrZXlzLgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IHVwcGVyT3BlbiA9IHJhbmdlLT51cHBlck9wZW4oKTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5k
ZXhLZXlDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEtleUN1cnNvckltcGw6OmNyZWF0ZShtX2Ri
LmdldCgpLCBzdGFydEtleSwgbG93ZXJPcGVuLCBzdG9wS2V5LCB1cHBlck9wZW4sIGZvcndhcmQp
OworICAgIFJlZlB0cjxJbmRleEtleUN1cnNvckltcGw+IGN1cnNvciA9IEluZGV4S2V5Q3Vyc29y
SW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBzdGFydEtleSwgbG93ZXJP
cGVuLCBzdG9wS2V5LCB1cHBlck9wZW4sIGZvcndhcmQpOwogICAgIGlmICghY3Vyc29yLT5maXJz
dFNlZWsoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTEyMTMsNiArMTIzMyw3IEBAIFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9w
ZW5JbmRleEtleUN1cnNvcihpCiAKIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+
IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlS
YW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKKyAgICBBU1NF
UlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwogICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdlICYm
IHJhbmdlLT5sb3dlcigpOwogICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT51
cHBlcigpOwogICAgIGJvb2wgZm9yd2FyZCA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhU
X05PX0RVUExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUKTsKQEAgLTEyMzMs
MzcgKzEyNTQsNTcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKGludDYKICAgICAgICAgdXBwZXJPcGVu
ID0gZmFsc2U7IC8vIEluY2x1ZGVkLgogCiAgICAgICAgIGlmICghZm9yd2FyZCkgeyAvLyBXZSBu
ZWVkIGEga2V5IHRoYXQgZXhpc3RzLgotICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlM
ZXNzVGhhbihtX2RiLmdldCgpLCBzdG9wS2V5LCBzdG9wS2V5KSkKKyAgICAgICAgICAgIGlmICgh
ZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW4obV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIHN0b3BL
ZXksIHN0b3BLZXkpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgdXBw
ZXJPcGVuID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBzdG9wS2V5
ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJ
ZCwgKnJhbmdlLT51cHBlcigpLCAwKTsKLSAgICAgICAgaWYgKCFmaW5kTGFzdEluZGV4S2V5RXF1
YWxUbyhtX2RiLmdldCgpLCBzdG9wS2V5LCBzdG9wS2V5KSkgLy8gU2VlayB0byB0aGUgKmxhc3Qq
IGtleSBpbiB0aGUgc2V0IG9mIG5vbi11bmlxdWUga2V5cy4KKyAgICAgICAgaWYgKCFmaW5kTGFz
dEluZGV4S2V5RXF1YWxUbyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgc3RvcEtleSwgc3Rv
cEtleSkpIC8vIFNlZWsgdG8gdGhlICpsYXN0KiBrZXkgaW4gdGhlIHNldCBvZiBub24tdW5pcXVl
IGtleXMuCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgdXBwZXJPcGVuID0gcmFuZ2Ut
PnVwcGVyT3BlbigpOwogICAgIH0KIAotICAgIFJlZlB0cjxJbmRleEN1cnNvckltcGw+IGN1cnNv
ciA9IEluZGV4Q3Vyc29ySW1wbDo6Y3JlYXRlKG1fZGIuZ2V0KCksIHN0YXJ0S2V5LCBsb3dlck9w
ZW4sIHN0b3BLZXksIHVwcGVyT3BlbiwgZm9yd2FyZCk7CisgICAgUmVmUHRyPEluZGV4Q3Vyc29y
SW1wbD4gY3Vyc29yID0gSW5kZXhDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJyZW50VHJhbnNhY3Rp
b24uZ2V0KCksIHN0YXJ0S2V5LCBsb3dlck9wZW4sIHN0b3BLZXksIHVwcGVyT3BlbiwgZm9yd2Fy
ZCk7CiAgICAgaWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQogICAgICAgICByZXR1cm4gMDsKIAog
ICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwogfQogCi1uYW1lc3BhY2UgewotY2xhc3MgRHVt
bXlUcmFuc2FjdGlvbiA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uIHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW4oKSB7fQotICAgIHZpcnR1YWwgdm9pZCBjb21t
aXQoKSB7fQotICAgIHZpcnR1YWwgdm9pZCByb2xsYmFjaygpIHt9Ci19OworUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVh
dGVUcmFuc2FjdGlvbigpCit7CisgICAgcmV0dXJuIFRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcyk7
CiB9CiAKLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbj4gSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6Y3JlYXRlVHJhbnNhY3Rpb24oKQorUGFzc1JlZlB0cjxJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb246OmNyZWF0ZShJREJMZXZlbERCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUcmFuc2FjdGlvbihiYWNraW5nU3RvcmUpKTsKK30KKwor
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uKElEQkxldmVs
REJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSkKKyAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tp
bmdTdG9yZSkKK3sKK30KKwordm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
bjo6YmVnaW4oKQoreworICAgIEFTU0VSVCghbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5z
YWN0aW9uKTsKKyAgICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24gPSBMZXZl
bERCVHJhbnNhY3Rpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS0+bV9kYi5nZXQoKSk7Cit9CisK
K3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCgpCit7Cisg
ICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgbV9i
YWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uLT5jb21taXQoKTsKKyAgICBtX2JhY2tp
bmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24uY2xlYXIoKTsKK30KKwordm9pZCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2soKQogewotICAgIC8vIEZJWE1F
OiBXZSBuZWVkIHRvIGltcGxlbWVudCBhIHRyYW5zYWN0aW9uIGFic3RyYWN0aW9uIHRoYXQgYWxs
b3dzIGZvciByb2xsLWJhY2tzLCBhbmQgd3JpdGUgdGVzdHMgZm9yIGl0LgotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRHVtbXlUcmFuc2FjdGlvbigpKTsKKyAgICBBU1NFUlQobV9iYWNraW5nU3Rv
cmUtPm1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50
VHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CisgICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRy
YW5zYWN0aW9uLmNsZWFyKCk7CiB9CiAKIC8vIEZJWE1FOiBkZWxldGVEYXRhYmFzZSBzaG91bGQg
YmUgcGFydCBvZiBJREJCYWNraW5nU3RvcmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDYwZjYyMWFhYzY0MGIwMTRkMTdiZTc5MmNm
YjEwMzI2MWI5NWYxMjguLjk4ZjVlYTI0MjE5MTgwNGIwZWQ0MGI0NWUxM2U0NTI3NGQ5M2ZhMTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5o
CkBAIC0zNiw2ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTGV2ZWxEQkNv
bXBhcmF0b3I7CiBjbGFzcyBMZXZlbERCRGF0YWJhc2U7CitjbGFzcyBMZXZlbERCVHJhbnNhY3Rp
b247CiAKIGNsYXNzIElEQkxldmVsREJCYWNraW5nU3RvcmUgOiBwdWJsaWMgSURCQmFja2luZ1N0
b3JlIHsKIHB1YmxpYzoKQEAgLTgwLDYgKzgxLDE5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPElE
QkZhY3RvcnlCYWNrZW5kSW1wbD4gbV9mYWN0b3J5OwogICAgIE93blB0cjxMZXZlbERCRGF0YWJh
c2U+IG1fZGI7CiAgICAgT3duUHRyPExldmVsREJDb21wYXJhdG9yPiBtX2NvbXBhcmF0b3I7Cisg
ICAgUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gbV9jdXJyZW50VHJhbnNhY3Rpb247CisKKyAg
ICBjbGFzcyBUcmFuc2FjdGlvbiA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBj
cmVhdGUoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgYmVn
aW4oKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbW1pdCgpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgcm9sbGJhY2soKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFRyYW5zYWN0aW9uKElEQkxl
dmVsREJCYWNraW5nU3RvcmUqKTsKKyAgICAgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogbV9i
YWNraW5nU3RvcmU7CisgICAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3Bw
CmluZGV4IGQ3MzY3NTgwODcwMWMwNmRlZWY2YjM5ZDljNTRmYmIxYjk4NWI0MzAuLjE1NmNiODlh
OWZiMDlkYTUwNGY0NWE5NzhlMDI3M2VhM2E2YTU2NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAtMTA2LDYgKzEw
Niw4IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6YWJvcnQoKQogICAgIGlmICht
X3N0YXRlID09IEZpbmlzaGVkKQogICAgICAgICByZXR1cm47CiAKKyAgICBib29sIHdhc1J1bm5p
bmcgPSBtX3N0YXRlID09IFJ1bm5pbmc7CisKICAgICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8g
dGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhlCiAgICAgLy8g
YWJvcnQgc3RlcHMgYmVsb3cuIFdlIHRoZXJlZm9yZSB0YWtlIGEgc2VsZiByZWZlcmVuY2UgdG8g
a2VlcCBvdXJzZWx2ZXMKICAgICAvLyBhbGl2ZSB3aGlsZSBleGVjdXRpbmcgdGhpcyBtZXRob2Qu
CkBAIC0xMTYsNyArMTE4LDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9y
dCgpCiAgICAgbV90YXNrRXZlbnRUaW1lci5zdG9wKCk7CiAKICAgICBjbG9zZU9wZW5DdXJzb3Jz
KCk7Ci0gICAgbV90cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKKyAgICBpZiAod2FzUnVubmluZykK
KyAgICAgICAgbV90cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKIAogICAgIC8vIFJ1biB0aGUgYWJv
cnQgdGFza3MsIGlmIGFueS4KICAgICB3aGlsZSAoIW1fYWJvcnRUYXNrUXVldWUuaXNFbXB0eSgp
KSB7Cg==
</data>
<flag name="commit-queue"
          id="87695"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94399</attachid>
            <date>2011-05-23 04:46:23 -0700</date>
            <delta_ts>2011-05-23 06:22:05 -0700</delta_ts>
            <desc>manual patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>77571</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxODg4NTI1Li5hYjNlOWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMx
IEBACisyMDExLTA1LTIzICBIYW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5kZXhlZERCOiBT
dXBwb3J0IExldmVsREIgdHJhbnNhY3Rpb25zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEyNzAKKworICAgICAgICBJbnRyb2R1Y2UgTGV2ZWxEQlRy
YW5zYWN0aW9uLCB3aGljaCBpbXBsZW1lbnRzIGluLW1lbW9yeSB0cmFuc2FjdGlvbgorICAgICAg
ICBzdXBwb3J0IG9uIHRvcCBvZiBMZXZlbERCLCBhbmQgaG9vayB0aGlzIHVwIGZvciBJbmRleGVk
REIgdG8gdXNlLgorCisgICAgICAgIFRoaXMgaXMgYWxsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVz
dHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vbGV2ZWxk
Yi9MZXZlbERCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFiYXNl
OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJEYXRhYmFzZTo6cHV0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxldmVsREJEYXRhYmFzZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxldmVsREJEYXRhYmFzZTo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6SXRlcmF0b3JJbXBs
OjpJdGVyYXRvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SXRlcmF0b3JJbXBsOjppc1ZhbGlk
KToKKyAgICAgICAgKFdlYkNvcmU6Okl0ZXJhdG9ySW1wbDo6c2Vla1RvTGFzdCk6CisgICAgICAg
IChXZWJDb3JlOjpJdGVyYXRvckltcGw6OnNlZWspOgorICAgICAgICAoV2ViQ29yZTo6SXRlcmF0
b3JJbXBsOjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okl0ZXJhdG9ySW1wbDo6cHJldik6Cisg
ICAgICAgIChXZWJDb3JlOjpJdGVyYXRvckltcGw6OmtleSk6CisgICAgICAgIChXZWJDb3JlOjpJ
dGVyYXRvckltcGw6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJEYXRhYmFzZTo6
Y3JlYXRlSXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFiYXNlOjpjb21w
YXJhdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkl0ZXJhdG9yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpMZXZlbERCSXRlcmF0b3I6On5MZXZlbERCSXRlcmF0b3IpOgorICAgICAgICAqIHBs
YXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpM
ZXZlbERCVHJhbnNhY3Rpb246OkxldmVsREJUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpMZXZlbERCVHJhbnNhY3Rpb246OmNsZWFyVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpMZXZl
bERCVHJhbnNhY3Rpb246On5MZXZlbERCVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
TGV2ZWxEQlRyYW5zYWN0aW9uOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVZlY3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OnJlbW92ZSk6CisgICAgICAg
IChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpM
ZXZlbERCVHJhbnNhY3Rpb246OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJh
bnNhY3Rpb246OnJvbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlv
bjo6Y3JlYXRlSXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9u
OjpUcmVlSXRlcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNh
Y3Rpb246OlRyZWVJdGVyYXRvcjo6aXNWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERC
VHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6c2Vla1RvTGFzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6c2Vlayk6CisgICAgICAgIChXZWJD
b3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6bmV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6cHJldik6CisgICAgICAg
IChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6a2V5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjp2YWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6aXNEZWxl
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9y
OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVy
YXRvcjo6flRyZWVJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rp
b246OlRyZWVJdGVyYXRvcjo6VHJlZUl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVs
REJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6VHJhbnNhY3Rp
b25JdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5z
YWN0aW9uSXRlcmF0b3I6OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5z
YWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpzZWVrVG9MYXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6c2Vlayk6CisgICAg
ICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6Om5l
eHQpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0
ZXJhdG9yOjpwcmV2KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJh
bnNhY3Rpb25JdGVyYXRvcjo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2Fj
dGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6TGV2
ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpoYW5kbGVDb25mbGljdHNBbmRE
ZWxldGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rp
b25JdGVyYXRvcjo6ZmluZFNtYWxsZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFu
c2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6ZmluZExhcmdlc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpyZWdpc3Rlckl0ZXJhdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6dW5yZWdpc3Rlckl0ZXJhdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6cmVzZXRJdGVyYXRvcnMpOgorICAgICAgICAq
IHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpBVkxUcmVlQWJzdHJhY3Rvcjo6Z2V0X2xlc3Mp
OgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpBVkxUcmVlQWJzdHJhY3Rv
cjo6c2V0X2xlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpBVkxU
cmVlQWJzdHJhY3Rvcjo6Z2V0X2dyZWF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRy
YW5zYWN0aW9uOjpBVkxUcmVlQWJzdHJhY3Rvcjo6c2V0X2dyZWF0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpBVkxUcmVlQWJzdHJhY3Rvcjo6Z2V0X2JhbGFuY2Vf
ZmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6QVZMVHJlZUFi
c3RyYWN0b3I6OnNldF9iYWxhbmNlX2ZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERC
VHJhbnNhY3Rpb246OkFWTFRyZWVBYnN0cmFjdG9yOjpjb21wYXJlX2tleV9rZXkpOgorICAgICAg
ICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpBVkxUcmVlQWJzdHJhY3Rvcjo6Y29tcGFy
ZV9rZXlfbm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OkFWTFRy
ZWVBYnN0cmFjdG9yOjpjb21wYXJlX25vZGVfbm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpMZXZl
bERCVHJhbnNhY3Rpb246OkFWTFRyZWVBYnN0cmFjdG9yOjpudWxsKToKKyAgICAgICAgKFdlYkNv
cmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6flRyYW5zYWN0aW9u
SXRlcmF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQldyaXRlQmF0Y2g6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMZXZlbERCV3JpdGVCYXRjaDo6TGV2ZWxEQldyaXRlQmF0Y2gpOgorICAg
ICAgICAoV2ViQ29yZTo6TGV2ZWxEQldyaXRlQmF0Y2g6On5MZXZlbERCV3JpdGVCYXRjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjptYWtlU2xpY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQldy
aXRlQmF0Y2g6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCV3JpdGVCYXRjaDo6cmVt
b3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJXcml0ZUJhdGNoOjpjbGVhcik6CisgICAg
ICAgICogc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdldEludCk6CisgICAgICAgIChXZWJDb3JlOjpwdXRJbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnB1dFN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpnZXROZXdPYmplY3RTdG9yZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVs
REJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmRl
bGV0ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRl
bGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmdldE9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OmdldE5ld1ZlcnNp
b25OdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0
T2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpuZXh0QXV0b0luY3JlbWVudE51bWJlcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmZvckVhY2hPYmpl
Y3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXROZXdJbmRleElkKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29y
ZCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbik6CisgICAgICAg
IChXZWJDb3JlOjp2ZXJzaW9uRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJC
YWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OmZpbmRMYXN0SW5kZXhLZXlFcXVhbFRvKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVs
REJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IpOgorICAgICAgICAo
V2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZVRyYW5zYWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb246OlRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpyb2xsYmFjayk6CisgICAgICAgICog
c3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogc3RvcmFnZS9JREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OmFib3J0KToKKwogMjAxMS0wNS0yMyAgQWRhbSBCYXJ0aCAgPGFiYXJ0
aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFN0cmljdCBQYXNzT3duUHRyIGJ1aWxkIGZpeGVzLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCmluZGV4IGFlMDVlY2QuLjM1MzdlYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTg3MSw5ICs4NzEsMTIgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJD
b21wYXJhdG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFi
YXNlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2Uu
aCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCSXRlcmF0b3IuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJJdGVyYXRvci5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJTbGljZS5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2guY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21h
Yy9CbG9ja0V4Y2VwdGlvbnMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL0NsaXBib2Fy
ZE1hYy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvRW1wdHlQcm90b2NvbERlZmluaXRp
b25zLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZl
bERCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERC
RGF0YWJhc2UuY3BwCmluZGV4IGQ1NmYyNmMuLjM4NmY1ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5jcHAKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJMZXZlbERCQ29tcGFyYXRvci5oIgogI2luY2x1ZGUgIkxldmVsREJJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIkxldmVsREJTbGljZS5oIgorI2luY2x1ZGUgIkxldmVsREJX
cml0ZUJhdGNoLmgiCiAjaW5jbHVkZSA8bGV2ZWxkYi9jb21wYXJhdG9yLmg+CiAjaW5jbHVkZSA8
bGV2ZWxkYi9kYi5oPgogI2luY2x1ZGUgPGxldmVsZGIvc2xpY2UuaD4KQEAgLTExMCwxNSArMTEx
LDE1IEBAIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBMZXZlbERCRGF0YWJhc2U6Om9wZW4o
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QKIAogICAgIHJlc3VsdC0+bV9kYiA9IGFkb3B0
UHRyKGRiKTsKICAgICByZXN1bHQtPm1fY29tcGFyYXRvckFkYXB0ZXIgPSBjb21wYXJhdG9yQWRh
cHRlci5yZWxlYXNlKCk7CisgICAgcmVzdWx0LT5tX2NvbXBhcmF0b3IgPSBjb21wYXJhdG9yOwog
CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLQogYm9vbCBMZXZlbERCRGF0YWJh
c2U6OnB1dChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1
ZSkKIHsKICAgICBsZXZlbGRiOjpXcml0ZU9wdGlvbnMgd3JpdGVPcHRpb25zOwotICAgIHdyaXRl
T3B0aW9ucy5zeW5jID0gZmFsc2U7CisgICAgd3JpdGVPcHRpb25zLnN5bmMgPSB0cnVlOwogCiAg
ICAgcmV0dXJuIG1fZGItPlB1dCh3cml0ZU9wdGlvbnMsIG1ha2VTbGljZShrZXkpLCBtYWtlU2xp
Y2UodmFsdWUpKS5vaygpOwogfQpAQCAtMTI2LDcgKzEyNyw3IEBAIGJvb2wgTGV2ZWxEQkRhdGFi
YXNlOjpwdXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIGNvbnN0IFZlY3RvcjxjaGFyPiYgdmFs
dWUpCiBib29sIExldmVsREJEYXRhYmFzZTo6cmVtb3ZlKGNvbnN0IExldmVsREJTbGljZSYga2V5
KQogewogICAgIGxldmVsZGI6OldyaXRlT3B0aW9ucyB3cml0ZU9wdGlvbnM7Ci0gICAgd3JpdGVP
cHRpb25zLnN5bmMgPSBmYWxzZTsKKyAgICB3cml0ZU9wdGlvbnMuc3luYyA9IHRydWU7CiAKICAg
ICByZXR1cm4gbV9kYi0+RGVsZXRlKHdyaXRlT3B0aW9ucywgbWFrZVNsaWNlKGtleSkpLm9rKCk7
CiB9CkBAIC0xNDEsMTIgKzE0Miw5MCBAQCBib29sIExldmVsREJEYXRhYmFzZTo6Z2V0KGNvbnN0
IExldmVsREJTbGljZSYga2V5LCBWZWN0b3I8Y2hhcj4mIHZhbHVlKQogICAgIHJldHVybiB0cnVl
OwogfQogCitib29sIExldmVsREJEYXRhYmFzZTo6d3JpdGUoTGV2ZWxEQldyaXRlQmF0Y2gmIHdy
aXRlQmF0Y2gpCit7CisgICAgbGV2ZWxkYjo6V3JpdGVPcHRpb25zIHdyaXRlT3B0aW9uczsKKyAg
ICB3cml0ZU9wdGlvbnMuc3luYyA9IHRydWU7CisKKyAgICByZXR1cm4gbV9kYi0+V3JpdGUod3Jp
dGVPcHRpb25zLCB3cml0ZUJhdGNoLm1fd3JpdGVCYXRjaC5nZXQoKSkub2soKTsKK30KKworbmFt
ZXNwYWNlIHsKK2NsYXNzIEl0ZXJhdG9ySW1wbCA6IHB1YmxpYyBMZXZlbERCSXRlcmF0b3Igewor
cHVibGljOgorICAgIH5JdGVyYXRvckltcGwoKSB7IH07CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNW
YWxpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZWVrVG9MYXN0KCk7CisgICAgdmlydHVh
bCB2b2lkIHNlZWsoY29uc3QgTGV2ZWxEQlNsaWNlJiB0YXJnZXQpOworICAgIHZpcnR1YWwgdm9p
ZCBuZXh0KCk7CisgICAgdmlydHVhbCB2b2lkIHByZXYoKTsKKyAgICB2aXJ0dWFsIExldmVsREJT
bGljZSBrZXkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExldmVsREJTbGljZSB2YWx1ZSgpIGNvbnN0
OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpMZXZlbERCRGF0YWJhc2U7
CisgICAgSXRlcmF0b3JJbXBsKFBhc3NPd25QdHI8bGV2ZWxkYjo6SXRlcmF0b3I+KTsKKworICAg
IE93blB0cjxsZXZlbGRiOjpJdGVyYXRvcj4gbV9pdGVyYXRvcjsKK307Cit9CisKK0l0ZXJhdG9y
SW1wbDo6SXRlcmF0b3JJbXBsKFBhc3NPd25QdHI8bGV2ZWxkYjo6SXRlcmF0b3I+IGl0KQorICAg
IDogbV9pdGVyYXRvcihpdCkKK3sKK30KKworYm9vbCBJdGVyYXRvckltcGw6OmlzVmFsaWQoKSBj
b25zdAoreworICAgIHJldHVybiBtX2l0ZXJhdG9yLT5WYWxpZCgpOworfQorCit2b2lkIEl0ZXJh
dG9ySW1wbDo6c2Vla1RvTGFzdCgpCit7CisgICAgbV9pdGVyYXRvci0+U2Vla1RvTGFzdCgpOwor
fQorCit2b2lkIEl0ZXJhdG9ySW1wbDo6c2Vlayhjb25zdCBMZXZlbERCU2xpY2UmIHRhcmdldCkK
K3sKKyAgICBtX2l0ZXJhdG9yLT5TZWVrKG1ha2VTbGljZSh0YXJnZXQpKTsKK30KKwordm9pZCBJ
dGVyYXRvckltcGw6Om5leHQoKQoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIG1faXRl
cmF0b3ItPk5leHQoKTsKK30KKwordm9pZCBJdGVyYXRvckltcGw6OnByZXYoKQoreworICAgIEFT
U0VSVChpc1ZhbGlkKCkpOworICAgIG1faXRlcmF0b3ItPlByZXYoKTsKK30KKworTGV2ZWxEQlNs
aWNlIEl0ZXJhdG9ySW1wbDo6a2V5KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsK
KyAgICByZXR1cm4gbWFrZUxldmVsREJTbGljZShtX2l0ZXJhdG9yLT5rZXkoKSk7Cit9CisKK0xl
dmVsREJTbGljZSBJdGVyYXRvckltcGw6OnZhbHVlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNW
YWxpZCgpKTsKKyAgICByZXR1cm4gbWFrZUxldmVsREJTbGljZShtX2l0ZXJhdG9yLT52YWx1ZSgp
KTsKK30KKwogUGFzc093blB0cjxMZXZlbERCSXRlcmF0b3I+IExldmVsREJEYXRhYmFzZTo6Y3Jl
YXRlSXRlcmF0b3IoKQogewogICAgIE93blB0cjxsZXZlbGRiOjpJdGVyYXRvcj4gaSA9IGFkb3B0
UHRyKG1fZGItPk5ld0l0ZXJhdG9yKGxldmVsZGI6OlJlYWRPcHRpb25zKCkpKTsKICAgICBpZiAo
IWkpIC8vIEZJWE1FOiBEb3VibGUgY2hlY2sgaWYgd2UgYWN0dWFsbHkgbmVlZCB0byBjaGVjayB0
aGlzLgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IExl
dmVsREJJdGVyYXRvcihpLnJlbGVhc2UoKSkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgSXRl
cmF0b3JJbXBsKGkucmVsZWFzZSgpKSk7Cit9CisKK2NvbnN0IExldmVsREJDb21wYXJhdG9yKiBM
ZXZlbERCRGF0YWJhc2U6OmNvbXBhcmF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbXBh
cmF0b3I7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVs
ZGIvTGV2ZWxEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xl
dmVsREJEYXRhYmFzZS5oCmluZGV4IDUyNmQwYjguLmNiYzI4ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuaApAQCAtNDMsNiArNDMs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBMZXZlbERCQ29tcGFyYXRvcjsKIGNsYXNz
IExldmVsREJJdGVyYXRvcjsKIGNsYXNzIExldmVsREJTbGljZTsKK2NsYXNzIExldmVsREJXcml0
ZUJhdGNoOwogCiBjbGFzcyBMZXZlbERCRGF0YWJhc2UgewogcHVibGljOgpAQCAtNTIsMTIgKzUz
LDE1IEBAIHB1YmxpYzoKICAgICBib29sIHB1dChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgY29u
c3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSk7CiAgICAgYm9vbCByZW1vdmUoY29uc3QgTGV2ZWxEQlNs
aWNlJiBrZXkpOwogICAgIGJvb2wgZ2V0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBWZWN0b3I8
Y2hhcj4mIHZhbHVlKTsKKyAgICBib29sIHdyaXRlKExldmVsREJXcml0ZUJhdGNoJik7CiAgICAg
UGFzc093blB0cjxMZXZlbERCSXRlcmF0b3I+IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgY29uc3Qg
TGV2ZWxEQkNvbXBhcmF0b3IqIGNvbXBhcmF0b3IoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBM
ZXZlbERCRGF0YWJhc2UoKTsKIAogICAgIE93blB0cjxsZXZlbGRiOjpEQj4gbV9kYjsKKyAgICBj
b25zdCBMZXZlbERCQ29tcGFyYXRvciogbV9jb21wYXJhdG9yOwogICAgIE93blB0cjxsZXZlbGRi
OjpDb21wYXJhdG9yPiBtX2NvbXBhcmF0b3JBZGFwdGVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCSXRlcmF0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCSXRlcmF0b3IuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlZTUyODFlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkl0ZXJhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGV2ZWxE
Qkl0ZXJhdG9yLmgiCi0KLSNpZiBFTkFCTEUoTEVWRUxEQikKLQotI2luY2x1ZGUgPGxldmVsZGIv
aXRlcmF0b3IuaD4KLSNpbmNsdWRlIDxsZXZlbGRiL3NsaWNlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotTGV2ZWxEQkl0ZXJh
dG9yOjp+TGV2ZWxEQkl0ZXJhdG9yKCkKLXsKLX0KLQotTGV2ZWxEQkl0ZXJhdG9yOjpMZXZlbERC
SXRlcmF0b3IoUGFzc093blB0cjxsZXZlbGRiOjpJdGVyYXRvcj4gaXQpCi0gICAgOiBtX2l0ZXJh
dG9yKGl0KQotewotfQotCi1zdGF0aWMgbGV2ZWxkYjo6U2xpY2UgbWFrZVNsaWNlKGNvbnN0IFZl
Y3RvcjxjaGFyPiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGxldmVsZGI6OlNsaWNlKHZhbHVlLmRh
dGEoKSwgdmFsdWUuc2l6ZSgpKTsKLX0KLQotc3RhdGljIExldmVsREJTbGljZSBtYWtlTGV2ZWxE
QlNsaWNlKGxldmVsZGI6OlNsaWNlIHMpCi17Ci0gICAgcmV0dXJuIExldmVsREJTbGljZShzLmRh
dGEoKSwgcy5kYXRhKCkgKyBzLnNpemUoKSk7Ci19Ci0KLWJvb2wgTGV2ZWxEQkl0ZXJhdG9yOjpp
c1ZhbGlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pdGVyYXRvci0+VmFsaWQoKTsKLX0KLQot
dm9pZCBMZXZlbERCSXRlcmF0b3I6OnNlZWtUb0xhc3QoKQotewotICAgIG1faXRlcmF0b3ItPlNl
ZWtUb0xhc3QoKTsKLX0KLQotdm9pZCBMZXZlbERCSXRlcmF0b3I6OnNlZWsoY29uc3QgVmVjdG9y
PGNoYXI+JiB0YXJnZXQpCi17Ci0gICAgbV9pdGVyYXRvci0+U2VlayhtYWtlU2xpY2UodGFyZ2V0
KSk7Ci19Ci0KLXZvaWQgTGV2ZWxEQkl0ZXJhdG9yOjpuZXh0KCkKLXsKLSAgICBtX2l0ZXJhdG9y
LT5OZXh0KCk7Ci19Ci0KLXZvaWQgTGV2ZWxEQkl0ZXJhdG9yOjpwcmV2KCkKLXsKLSAgICBtX2l0
ZXJhdG9yLT5QcmV2KCk7Ci19Ci0KLUxldmVsREJTbGljZSBMZXZlbERCSXRlcmF0b3I6OmtleSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VMZXZlbERCU2xpY2UobV9pdGVyYXRvci0+a2V5KCkp
OwotfQotCi1MZXZlbERCU2xpY2UgTGV2ZWxEQkl0ZXJhdG9yOjp2YWx1ZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1ha2VMZXZlbERCU2xpY2UobV9pdGVyYXRvci0+dmFsdWUoKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShMRVZFTERCKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCSXRlcmF0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkl0ZXJhdG9yLmgKaW5kZXgg
NzY4YTFiNC4uMTUyNTVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2
ZWxkYi9MZXZlbERCSXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZl
bGRiL0xldmVsREJJdGVyYXRvci5oCkBAIC0yOSwzNiArMjksMjEgQEAKICNpZiBFTkFCTEUoTEVW
RUxEQikKIAogI2luY2x1ZGUgIkxldmVsREJTbGljZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCi0jaW5jbHVkZSA8T3duUHRyLmg+Ci0jaW5jbHVkZSA8VmVjdG9yLmg+Ci0KLW5hbWVz
cGFjZSBsZXZlbGRiIHsKLWNsYXNzIEl0ZXJhdG9yOwotfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIExldmVsREJJdGVyYXRvciB7CiBwdWJsaWM6Ci0gICAgfkxldmVsREJJdGVyYXRv
cigpOwotCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZWVrVG9MYXN0KCk7
Ci0gICAgdm9pZCBzZWVrKGNvbnN0IFZlY3RvcjxjaGFyPiYgdGFyZ2V0KTsKLSAgICB2b2lkIG5l
eHQoKTsKLSAgICB2b2lkIHByZXYoKTsKLSAgICBMZXZlbERCU2xpY2Uga2V5KCkgY29uc3Q7Ci0g
ICAgTGV2ZWxEQlNsaWNlIHZhbHVlKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgTGV2ZWxEQkl0
ZXJhdG9yKFBhc3NPd25QdHI8bGV2ZWxkYjo6SXRlcmF0b3I+KTsKLSAgICBmcmllbmQgY2xhc3Mg
TGV2ZWxEQkRhdGFiYXNlOwotCi0gICAgT3duUHRyPGxldmVsZGI6Okl0ZXJhdG9yPiBtX2l0ZXJh
dG9yOworICAgIHZpcnR1YWwgfkxldmVsREJJdGVyYXRvcigpIHsgfTsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNWYWxpZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Vla1RvTGFzdCgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Vlayhjb25zdCBMZXZlbERCU2xpY2UmIHRhcmdldCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBuZXh0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwcmV2KCkg
PSAwOworICAgIHZpcnR1YWwgTGV2ZWxEQlNsaWNlIGtleSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIExldmVsREJTbGljZSB2YWx1ZSgpIGNvbnN0ID0gMDsKIH07CiAKLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKExFVkVMREIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UwMTg1NAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmNwcApA
QCAtMCwwICsxLDQ1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJM
ZXZlbERCVHJhbnNhY3Rpb24uaCIKKworI2luY2x1ZGUgIkxldmVsREJEYXRhYmFzZS5oIgorI2lu
Y2x1ZGUgIkxldmVsREJTbGljZS5oIgorI2luY2x1ZGUgIkxldmVsREJXcml0ZUJhdGNoLmgiCisK
KyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpZiBFTkFCTEUoTEVWRUxEQikKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gTGV2ZWxE
QlRyYW5zYWN0aW9uOjpjcmVhdGUoTGV2ZWxEQkRhdGFiYXNlKiBkYikKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IExldmVsREJUcmFuc2FjdGlvbihkYikpOworfQorCitMZXZlbERCVHJhbnNh
Y3Rpb246OkxldmVsREJUcmFuc2FjdGlvbihMZXZlbERCRGF0YWJhc2UqIGRiKQorICAgIDogbV9k
YihkYikKKyAgICAsIG1fY29tcGFyYXRvcihkYi0+Y29tcGFyYXRvcigpKQorICAgICwgbV9maW5p
c2hlZChmYWxzZSkKK3sKKyAgICBtX3RyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyYXRvciA9IG1f
Y29tcGFyYXRvcjsKK30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OmNsZWFyVHJlZSgpCit7
CisgICAgVHJlZVR5cGU6Okl0ZXJhdG9yIGl0ZXJhdG9yOworICAgIGl0ZXJhdG9yLnN0YXJ0X2l0
ZXJfbGVhc3QobV90cmVlKTsKKworICAgIHdoaWxlICgqaXRlcmF0b3IpIHsKKyAgICAgICAgZGVs
ZXRlICppdGVyYXRvcjsKKyAgICAgICAgKytpdGVyYXRvcjsKKyAgICB9CisgICAgbV90cmVlLnB1
cmdlKCk7Cit9CisKK0xldmVsREJUcmFuc2FjdGlvbjo6fkxldmVsREJUcmFuc2FjdGlvbigpCit7
CisgICAgY2xlYXJUcmVlKCk7Cit9CisKK2Jvb2wgTGV2ZWxEQlRyYW5zYWN0aW9uOjpwdXQoY29u
c3QgVmVjdG9yPGNoYXI+JiBrZXksIGNvbnN0IFZlY3RvcjxjaGFyPiYgdmFsdWUpCit7CisgICAg
QVNTRVJUKCFtX2ZpbmlzaGVkKTsKKyAgICBib29sIG5ld05vZGUgPSBmYWxzZTsKKyAgICBBVkxU
cmVlTm9kZSogbm9kZSA9IG1fdHJlZS5zZWFyY2goa2V5KTsKKworICAgIGlmICghbm9kZSkgewor
ICAgICAgICBub2RlID0gbmV3IEFWTFRyZWVOb2RlOworICAgICAgICBub2RlLT5rZXkgPSBrZXk7
CisgICAgICAgIG1fdHJlZS5pbnNlcnQobm9kZSk7CisgICAgICAgIG5ld05vZGUgPSB0cnVlOwor
ICAgIH0KKyAgICBub2RlLT52YWx1ZSA9IHZhbHVlOworICAgIG5vZGUtPmRlbGV0ZWQgPSBmYWxz
ZTsKKworICAgIGlmIChuZXdOb2RlKQorICAgICAgICByZXNldEl0ZXJhdG9ycygpOworICAgIHJl
dHVybiB0cnVlOworfQorCitzdGF0aWMgVmVjdG9yPGNoYXI+IG1ha2VWZWN0b3IoY29uc3QgTGV2
ZWxEQlNsaWNlJiBzbGljZSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gdjsKKyAgICBmb3IgKGNvbnN0
IGNoYXIqIGNwID0gc2xpY2UuYmVnaW4oKTsgY3AgIT0gc2xpY2UuZW5kKCk7ICsrY3ApCisgICAg
ICAgIHYuYXBwZW5kKCpjcCk7CisgICAgcmV0dXJuIHY7Cit9CisKK2Jvb2wgTGV2ZWxEQlRyYW5z
YWN0aW9uOjpyZW1vdmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXkpCit7CisgICAgQVNTRVJUKCFt
X2ZpbmlzaGVkKTsKKyAgICBib29sIG5ld05vZGUgPSBmYWxzZTsKKyAgICBBVkxUcmVlTm9kZSog
bm9kZSA9IG1fdHJlZS5zZWFyY2goa2V5KTsKKworICAgIGlmICghbm9kZSkgeworICAgICAgICBu
b2RlID0gbmV3IEFWTFRyZWVOb2RlOworICAgICAgICBub2RlLT5rZXkgPSBtYWtlVmVjdG9yKGtl
eSk7CisgICAgICAgIG1fdHJlZS5pbnNlcnQobm9kZSk7CisgICAgICAgIG5ld05vZGUgPSB0cnVl
OworICAgIH0KKyAgICBub2RlLT52YWx1ZSA9IFZlY3RvcjxjaGFyPigpOworICAgIG5vZGUtPmRl
bGV0ZWQgPSB0cnVlOworCisgICAgaWYgKG5ld05vZGUpCisgICAgICAgIHJlc2V0SXRlcmF0b3Jz
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTGV2ZWxEQlRyYW5zYWN0aW9uOjpnZXQo
Y29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIFZlY3RvcjxjaGFyPiYgdmFsdWUpCit7CisgICAgQVNT
RVJUKCFtX2ZpbmlzaGVkKTsKKyAgICBBVkxUcmVlTm9kZSogbm9kZSA9IG1fdHJlZS5zZWFyY2go
a2V5KTsKKworICAgIGlmIChub2RlKSB7CisgICAgICAgIGlmIChub2RlLT5kZWxldGVkKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHZhbHVlID0gbm9kZS0+dmFsdWU7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBtX2RiLT5nZXQoa2V5LCB2
YWx1ZSk7Cit9CisKK2Jvb2wgTGV2ZWxEQlRyYW5zYWN0aW9uOjpjb21taXQoKQoreworICAgIEFT
U0VSVCghbV9maW5pc2hlZCk7CisgICAgT3duUHRyPExldmVsREJXcml0ZUJhdGNoPiB3cml0ZUJh
dGNoID0gTGV2ZWxEQldyaXRlQmF0Y2g6OmNyZWF0ZSgpOworCisgICAgVHJlZVR5cGU6Okl0ZXJh
dG9yIGl0ZXJhdG9yOworICAgIGl0ZXJhdG9yLnN0YXJ0X2l0ZXJfbGVhc3QobV90cmVlKTsKKwor
ICAgIHdoaWxlICgqaXRlcmF0b3IpIHsKKyAgICAgICAgQVZMVHJlZU5vZGUqIG5vZGUgPSAqaXRl
cmF0b3I7CisgICAgICAgIGlmICghbm9kZS0+ZGVsZXRlZCkKKyAgICAgICAgICAgIHdyaXRlQmF0
Y2gtPnB1dChub2RlLT5rZXksIG5vZGUtPnZhbHVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgd3JpdGVCYXRjaC0+cmVtb3ZlKG5vZGUtPmtleSk7CisgICAgICAgICsraXRlcmF0b3I7Cisg
ICAgfQorCisgICAgaWYgKCFtX2RiLT53cml0ZSgqd3JpdGVCYXRjaCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGNsZWFyVHJlZSgpOworICAgIG1fZmluaXNoZWQgPSB0cnVlOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIExldmVsREJUcmFuc2FjdGlvbjo6cm9sbGJhY2soKQor
eworICAgIEFTU0VSVCghbV9maW5pc2hlZCk7CisgICAgbV9maW5pc2hlZCA9IHRydWU7CisgICAg
Y2xlYXJUcmVlKCk7Cit9CisKK1Bhc3NPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBMZXZlbERCVHJh
bnNhY3Rpb246OmNyZWF0ZUl0ZXJhdG9yKCkKK3sKKyAgICByZXR1cm4gVHJhbnNhY3Rpb25JdGVy
YXRvcjo6Y3JlYXRlKHRoaXMpOworfQorCitQYXNzT3duUHRyPExldmVsREJUcmFuc2FjdGlvbjo6
VHJlZUl0ZXJhdG9yPiBMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6Y3JlYXRlKExl
dmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBUcmVlSXRlcmF0b3IodHJhbnNhY3Rpb24pKTsKK30KKworYm9vbCBMZXZlbERCVHJhbnNhY3Rp
b246OlRyZWVJdGVyYXRvcjo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICptX2l0ZXJh
dG9yOworfQorCit2b2lkIExldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpzZWVrVG9M
YXN0KCkKK3sKKyAgICBtX2l0ZXJhdG9yLnN0YXJ0X2l0ZXJfZ3JlYXRlc3QoKm1fdHJlZSk7Cisg
ICAgaWYgKGlzVmFsaWQoKSkKKyAgICAgICAgbV9rZXkgPSAoKm1faXRlcmF0b3IpLT5rZXk7Cit9
CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I6OnNlZWsoY29uc3QgTGV2
ZWxEQlNsaWNlJiB0YXJnZXQpCit7CisgICAgbV9pdGVyYXRvci5zdGFydF9pdGVyKCptX3RyZWUs
IHRhcmdldCwgVHJlZVR5cGU6OkVRVUFMKTsKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAg
bV9pdGVyYXRvci5zdGFydF9pdGVyKCptX3RyZWUsIHRhcmdldCwgVHJlZVR5cGU6OkdSRUFURVIp
OworCisgICAgaWYgKGlzVmFsaWQoKSkKKyAgICAgICAgbV9rZXkgPSAoKm1faXRlcmF0b3IpLT5r
ZXk7Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I6Om5leHQoKQor
eworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgICsrbV9pdGVyYXRvcjsKKyAgICBpZiAoaXNW
YWxpZCgpKSB7CisgICAgICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uLT5tX2NvbXBhcmF0b3ItPmNv
bXBhcmUoKCptX2l0ZXJhdG9yKS0+a2V5LCBtX2tleSkgPiAwKTsKKyAgICAgICAgbV9rZXkgPSAo
Km1faXRlcmF0b3IpLT5rZXk7CisgICAgfQorfQorCit2b2lkIExldmVsREJUcmFuc2FjdGlvbjo6
VHJlZUl0ZXJhdG9yOjpwcmV2KCkKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICAtLW1f
aXRlcmF0b3I7CisgICAgaWYgKGlzVmFsaWQoKSkgeworICAgICAgICBBU1NFUlQobV90cmVlLT5h
YnN0cmFjdG9yKCkubV9jb21wYXJhdG9yLT5jb21wYXJlKCgqbV9pdGVyYXRvciktPmtleSwgbV9r
ZXkpIDwgMCk7CisgICAgICAgIG1fa2V5ID0gKCptX2l0ZXJhdG9yKS0+a2V5OworICAgIH0KK30K
KworTGV2ZWxEQlNsaWNlIExldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjprZXkoKSBj
b25zdAoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIHJldHVybiBtX2tleTsKK30KKwor
TGV2ZWxEQlNsaWNlIExldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjp2YWx1ZSgpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgQVNTRVJUKCFpc0RlbGV0ZWQoKSk7
CisgICAgcmV0dXJuICgqbV9pdGVyYXRvciktPnZhbHVlOworfQorCitib29sIExldmVsREJUcmFu
c2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjppc0RlbGV0ZWQoKSBjb25zdAoreworICAgIEFTU0VSVChp
c1ZhbGlkKCkpOworICAgIHJldHVybiAoKm1faXRlcmF0b3IpLT5kZWxldGVkOworfQorCit2b2lk
IExldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpyZXNldCgpCit7CisgICAgLy8gRklY
TUU6IEJlIGxhenk6IHNldCBhIGZsYWcgYW5kIGRvIHRoZSBhY3R1YWwgcmVzZXQgbmV4dCB0aW1l
IHdlIHVzZSB0aGUgaXRlcmF0b3IuCisgICAgaWYgKGlzVmFsaWQoKSkgeworICAgICAgICBtX2l0
ZXJhdG9yLnN0YXJ0X2l0ZXIoKm1fdHJlZSwgbV9rZXksIFRyZWVUeXBlOjpFUVVBTCk7CisgICAg
ICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIH0KK30KKworTGV2ZWxEQlRyYW5zYWN0aW9uOjpU
cmVlSXRlcmF0b3I6On5UcmVlSXRlcmF0b3IoKQoreworICAgIG1fdHJhbnNhY3Rpb24tPnVucmVn
aXN0ZXJJdGVyYXRvcih0aGlzKTsKK307CisKK0xldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJh
dG9yOjpUcmVlSXRlcmF0b3IoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICA6
IG1fdHJlZSgmdHJhbnNhY3Rpb24tPm1fdHJlZSkKKyAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNh
Y3Rpb24pCit7CisgICAgdHJhbnNhY3Rpb24tPnJlZ2lzdGVySXRlcmF0b3IodGhpcyk7Cit9CisK
K1Bhc3NPd25QdHI8TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yPiBMZXZl
bERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OmNyZWF0ZShQYXNzUmVmUHRyPExl
dmVsREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBUcmFuc2FjdGlvbkl0ZXJhdG9yKHRyYW5zYWN0aW9uKSk7Cit9CisKK0xldmVsREJUcmFuc2Fj
dGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6VHJhbnNhY3Rpb25JdGVyYXRvcihQYXNzUmVmUHRy
PExldmVsREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24pCisgICAgOiBtX3RyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uKQorICAgICwgbV9jb21wYXJhdG9yKG1fdHJhbnNhY3Rpb24tPm1fY29tcGFyYXRv
cikKKyAgICAsIG1fdHJlZUl0ZXJhdG9yKFRyZWVJdGVyYXRvcjo6Y3JlYXRlKG1fdHJhbnNhY3Rp
b24uZ2V0KCkpKQorICAgICwgbV9kYkl0ZXJhdG9yKG1fdHJhbnNhY3Rpb24tPm1fZGItPmNyZWF0
ZUl0ZXJhdG9yKCkpCisgICAgLCBtX2N1cnJlbnQoMCkKKyAgICAsIG1fZGlyZWN0aW9uKGtGb3J3
YXJkKQoreworfQorCitib29sIExldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRv
cjo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY3VycmVudDsKK30KKwordm9pZCBM
ZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnNlZWtUb0xhc3QoKQorewor
ICAgIG1fdHJlZUl0ZXJhdG9yLT5zZWVrVG9MYXN0KCk7CisgICAgbV9kYkl0ZXJhdG9yLT5zZWVr
VG9MYXN0KCk7CisgICAgbV9kaXJlY3Rpb24gPSBrUmV2ZXJzZTsKKworICAgIGhhbmRsZUNvbmZs
aWN0c0FuZERlbGV0ZXMoKTsKKyAgICBmaW5kTGFyZ2VzdCgpOworfQorCit2b2lkIExldmVsREJU
cmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6c2Vlayhjb25zdCBMZXZlbERCU2xpY2Um
IHRhcmdldCkKK3sKKyAgICBtX3RyZWVJdGVyYXRvci0+c2Vlayh0YXJnZXQpOworICAgIG1fZGJJ
dGVyYXRvci0+c2Vlayh0YXJnZXQpOworICAgIG1fZGlyZWN0aW9uID0ga0ZvcndhcmQ7CisKKyAg
ICBoYW5kbGVDb25mbGljdHNBbmREZWxldGVzKCk7CisgICAgZmluZFNtYWxsZXN0KCk7Cit9CisK
K3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpuZXh0KCkKK3sK
KyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKworICAgIGlmIChtX2RpcmVjdGlvbiAhPSBrRm9yd2Fy
ZCkgeworICAgICAgICAvLyBFbnN1cmUgdGhlIG5vbi1jdXJyZW50IGl0ZXJhdG9yIGlzIHBvc2l0
aW9uZWQgYWZ0ZXIga2V5KCkuCisKKyAgICAgICAgaWYgKG1fY3VycmVudCAhPSBtX3RyZWVJdGVy
YXRvci5nZXQoKSkgeworICAgICAgICAgICAgbV90cmVlSXRlcmF0b3ItPnNlZWsobV9jdXJyZW50
LT5rZXkoKSk7CisgICAgICAgICAgICBpZiAobV90cmVlSXRlcmF0b3ItPmlzVmFsaWQoKSAmJiAh
bV9jb21wYXJhdG9yLT5jb21wYXJlKG1fdHJlZUl0ZXJhdG9yLT5rZXkoKSwga2V5KCkpKQorICAg
ICAgICAgICAgICAgIG1fdHJlZUl0ZXJhdG9yLT5uZXh0KCk7CisKKyAgICAgICAgICAgIEFTU0VS
VCghbV90cmVlSXRlcmF0b3ItPmlzVmFsaWQoKSB8fCBtX2NvbXBhcmF0b3ItPmNvbXBhcmUobV90
cmVlSXRlcmF0b3ItPmtleSgpLCBrZXkoKSkgPiAwKTsKKyAgICAgICAgfSBlbHNlIGlmIChtX2N1
cnJlbnQgIT0gbV9kYkl0ZXJhdG9yLmdldCgpKSB7CisgICAgICAgICAgICBtX2RiSXRlcmF0b3It
PnNlZWsobV9jdXJyZW50LT5rZXkoKSk7CisgICAgICAgICAgICBpZiAobV9kYkl0ZXJhdG9yLT5p
c1ZhbGlkKCkgJiYgIW1fY29tcGFyYXRvci0+Y29tcGFyZShtX2RiSXRlcmF0b3ItPmtleSgpLCBr
ZXkoKSkpCisgICAgICAgICAgICAgICAgbV9kYkl0ZXJhdG9yLT5uZXh0KCk7CisKKyAgICAgICAg
ICAgIEFTU0VSVCghbV9kYkl0ZXJhdG9yLT5pc1ZhbGlkKCkgfHwgbV9jb21wYXJhdG9yLT5jb21w
YXJlKG1fZGJJdGVyYXRvci0+a2V5KCksIGtleSgpKSA+IDApOworICAgICAgICB9CisKKyAgICAg
ICAgbV9kaXJlY3Rpb24gPSBrRm9yd2FyZDsKKyAgICB9CisKKyAgICBtX2N1cnJlbnQtPm5leHQo
KTsKKyAgICBoYW5kbGVDb25mbGljdHNBbmREZWxldGVzKCk7CisgICAgZmluZFNtYWxsZXN0KCk7
Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpwcmV2
KCkKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKworICAgIGlmIChtX2RpcmVjdGlvbiAhPSBr
UmV2ZXJzZSkgeworICAgICAgICAvLyBFbnN1cmUgdGhlIG5vbi1jdXJyZW50IGl0ZXJhdG9yIGlz
IHBvc2l0aW9uZWQgYmVmb3JlIGtleSgpOworCisgICAgICAgIGlmIChtX2N1cnJlbnQgIT0gbV90
cmVlSXRlcmF0b3IuZ2V0KCkpIHsKKyAgICAgICAgICAgIG1fdHJlZUl0ZXJhdG9yLT5zZWVrKG1f
Y3VycmVudC0+a2V5KCkpOworCisgICAgICAgICAgICBpZiAobV90cmVlSXRlcmF0b3ItPmlzVmFs
aWQoKSkKKyAgICAgICAgICAgICAgICBtX3RyZWVJdGVyYXRvci0+cHJldigpOyAvLyBJdGVyYXRv
ciBpcyBhdCBmaXJzdCBlbnRyeSA+PSBrZXkoKS4gU3RlcCBiYWNrIG9uY2UgdG8gZW50cnkgPCBr
ZXkuCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV90cmVlSXRlcmF0b3ItPnNl
ZWtUb0xhc3QoKTsgLy8gSXRlcmF0b3IgaGFzIG5vIGVudHJpZXMgPj0ga2V5KCkuIFBvc2l0aW9u
IGF0IGxhc3QgZW50cnkuCisKKyAgICAgICAgICAgIEFTU0VSVCghbV90cmVlSXRlcmF0b3ItPmlz
VmFsaWQoKSB8fCBtX2NvbXBhcmF0b3ItPmNvbXBhcmUobV90cmVlSXRlcmF0b3ItPmtleSgpLCBr
ZXkoKSkgPCAwKTsKKyAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnQgIT0gbV9kYkl0ZXJhdG9y
LmdldCgpKSB7CisgICAgICAgICAgICBtX2RiSXRlcmF0b3ItPnNlZWsobV9jdXJyZW50LT5rZXko
KSk7CisKKyAgICAgICAgICAgIGlmIChtX2RiSXRlcmF0b3ItPmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgICAgICBtX2RiSXRlcmF0b3ItPnByZXYoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBtX2RiSXRlcmF0b3ItPnNlZWtUb0xhc3QoKTsKKworICAgICAgICAgICAgQVNTRVJU
KCFtX2RiSXRlcmF0b3ItPmlzVmFsaWQoKSB8fCBtX2NvbXBhcmF0b3ItPmNvbXBhcmUobV9kYkl0
ZXJhdG9yLT5rZXkoKSwga2V5KCkpIDwgMCk7CisgICAgICAgICB9CisKKyAgICAgICAgbV9kaXJl
Y3Rpb24gPSBrUmV2ZXJzZTsKKyAgICB9CisKKyAgICBtX2N1cnJlbnQtPnByZXYoKTsKKyAgICBo
YW5kbGVDb25mbGljdHNBbmREZWxldGVzKCk7CisgICAgZmluZExhcmdlc3QoKTsKK30KKworTGV2
ZWxEQlNsaWNlIExldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6a2V5KCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gbV9jdXJyZW50LT5r
ZXkoKTsKK30KKworTGV2ZWxEQlNsaWNlIExldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25J
dGVyYXRvcjo6dmFsdWUoKSBjb25zdAoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIHJl
dHVybiBtX2N1cnJlbnQtPnZhbHVlKCk7Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpU
cmFuc2FjdGlvbkl0ZXJhdG9yOjpoYW5kbGVDb25mbGljdHNBbmREZWxldGVzKCkKK3sKKyAgICBm
b3IgKDs7KSB7CisgICAgICAgIGlmIChtX3RyZWVJdGVyYXRvci0+aXNWYWxpZCgpICYmIG1fZGJJ
dGVyYXRvci0+aXNWYWxpZCgpICYmICFtX2NvbXBhcmF0b3ItPmNvbXBhcmUobV90cmVlSXRlcmF0
b3ItPmtleSgpLCBtX2RiSXRlcmF0b3ItPmtleSgpKSkgeworICAgICAgICAgICAgLy8gRm9yIGVx
dWFsIGtleXMsIHRoZSB0cmVlIGl0ZXJhdG9yIHRha2VzIHByZWNlZGVuY2UsIHNvIG1vdmUgdGhl
IGRhdGFiYXNlIGl0ZXJhdG9yIGFub3RoZXIgc3RlcC4KKyAgICAgICAgICAgIGlmIChtX2RpcmVj
dGlvbiA9PSBrRm9yd2FyZCkKKyAgICAgICAgICAgICAgICBtX2RiSXRlcmF0b3ItPm5leHQoKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2RiSXRlcmF0b3ItPnByZXYoKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fdHJlZUl0
ZXJhdG9yLT5pc1ZhbGlkKCkgJiYgbV90cmVlSXRlcmF0b3ItPmlzRGVsZXRlZCgpKSB7CisgICAg
ICAgICAgICAvLyBJZiB0aGUgdHJlZSBpdGVyYXRvciBpcyBvbiBhIGRlbGV0ZSBtYXJrZXIsIHRh
a2UgYW5vdGhlciBzdGVwLgorICAgICAgICAgICAgaWYgKG1fZGlyZWN0aW9uID09IGtGb3J3YXJk
KQorICAgICAgICAgICAgICAgIG1fdHJlZUl0ZXJhdG9yLT5uZXh0KCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbV90cmVlSXRlcmF0b3ItPnByZXYoKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBM
ZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OmZpbmRTbWFsbGVzdCgpCit7
CisgICAgTGV2ZWxEQkl0ZXJhdG9yKiBzbWFsbGVzdCA9IDA7CisKKyAgICBpZiAobV90cmVlSXRl
cmF0b3ItPmlzVmFsaWQoKSkKKyAgICAgICAgc21hbGxlc3QgPSBtX3RyZWVJdGVyYXRvci5nZXQo
KTsKKworICAgIGlmIChtX2RiSXRlcmF0b3ItPmlzVmFsaWQoKSkgeworICAgICAgICBpZiAoIXNt
YWxsZXN0KQorICAgICAgICAgICAgc21hbGxlc3QgPSBtX2RiSXRlcmF0b3IuZ2V0KCk7CisgICAg
ICAgIGVsc2UgaWYgKG1fY29tcGFyYXRvci0+Y29tcGFyZShtX2RiSXRlcmF0b3ItPmtleSgpLCBz
bWFsbGVzdC0+a2V5KCkpIDwgMCkKKyAgICAgICAgICAgIHNtYWxsZXN0ID0gbV9kYkl0ZXJhdG9y
LmdldCgpOworICAgIH0KKworICAgIG1fY3VycmVudCA9IHNtYWxsZXN0OworfQorCit2b2lkIExl
dmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6ZmluZExhcmdlc3QoKQorewor
ICAgIExldmVsREJJdGVyYXRvciogbGFyZ2VzdCA9IDA7CisKKyAgICBpZiAobV90cmVlSXRlcmF0
b3ItPmlzVmFsaWQoKSkKKyAgICAgICAgbGFyZ2VzdCA9IG1fdHJlZUl0ZXJhdG9yLmdldCgpOwor
CisgICAgaWYgKG1fZGJJdGVyYXRvci0+aXNWYWxpZCgpKSB7CisgICAgICAgIGlmICghbGFyZ2Vz
dCkKKyAgICAgICAgICAgIGxhcmdlc3QgPSBtX2RiSXRlcmF0b3IuZ2V0KCk7CisgICAgICAgIGVs
c2UgaWYgKG1fY29tcGFyYXRvci0+Y29tcGFyZShtX2RiSXRlcmF0b3ItPmtleSgpLCBsYXJnZXN0
LT5rZXkoKSkgPiAwKQorICAgICAgICAgICAgbGFyZ2VzdCA9IG1fZGJJdGVyYXRvci5nZXQoKTsK
KyAgICB9CisKKyAgICBtX2N1cnJlbnQgPSBsYXJnZXN0OworfQorCit2b2lkIExldmVsREJUcmFu
c2FjdGlvbjo6cmVnaXN0ZXJJdGVyYXRvcihUcmVlSXRlcmF0b3IqIGl0ZXJhdG9yKQoreworICAg
IEFTU0VSVCghbV90cmVlSXRlcmF0b3JzLmNvbnRhaW5zKGl0ZXJhdG9yKSk7CisgICAgbV90cmVl
SXRlcmF0b3JzLmFkZChpdGVyYXRvcik7Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjp1
bnJlZ2lzdGVySXRlcmF0b3IoVHJlZUl0ZXJhdG9yKiBpdGVyYXRvcikKK3sKKyAgICBBU1NFUlQo
bV90cmVlSXRlcmF0b3JzLmNvbnRhaW5zKGl0ZXJhdG9yKSk7CisgICAgbV90cmVlSXRlcmF0b3Jz
LnJlbW92ZShpdGVyYXRvcik7Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpyZXNldEl0
ZXJhdG9ycygpCit7CisgICAgZm9yIChIYXNoU2V0PFRyZWVJdGVyYXRvcio+OjppdGVyYXRvciBp
ID0gbV90cmVlSXRlcmF0b3JzLmJlZ2luKCk7IGkgIT0gbV90cmVlSXRlcmF0b3JzLmVuZCgpOyAr
K2kpIHsKKyAgICAgICAgVHJlZUl0ZXJhdG9yKiB0cmVlSXRlcmF0b3IgPSAqaTsKKyAgICAgICAg
dHJlZUl0ZXJhdG9yLT5yZXNldCgpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKExFVkVMREIpCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xl
dmVsREJUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZl
bERCVHJhbnNhY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDE5
MzAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9M
ZXZlbERCVHJhbnNhY3Rpb24uaApAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGV2
ZWxEQlRyYW5zYWN0aW9uX2gKKyNkZWZpbmUgTGV2ZWxEQlRyYW5zYWN0aW9uX2gKKworI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQorI2lmIEVOQUJMRShMRVZFTERCKQorCisjaW5jbHVkZSAi
TGV2ZWxEQkNvbXBhcmF0b3IuaCIKKyNpbmNsdWRlICJMZXZlbERCSXRlcmF0b3IuaCIKKyNpbmNs
dWRlICJMZXZlbERCU2xpY2UuaCIKKyNpbmNsdWRlIDx3dGYvQVZMVHJlZS5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBMZXZlbERCRGF0YWJhc2U7CisKK3VzaW5nIFdURjo6QVZMVHJlZTsKKwor
Y2xhc3MgTGV2ZWxEQlRyYW5zYWN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TGV2ZWxEQlRyYW5z
YWN0aW9uPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0
aW9uPiBjcmVhdGUoTGV2ZWxEQkRhdGFiYXNlKik7CisKKyAgICB+TGV2ZWxEQlRyYW5zYWN0aW9u
KCk7CisgICAgYm9vbCBwdXQoY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIGNvbnN0IFZlY3Rvcjxj
aGFyPiYgdmFsdWUpOworICAgIGJvb2wgcmVtb3ZlKGNvbnN0IExldmVsREJTbGljZSYga2V5KTsK
KyAgICBib29sIGdldChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgVmVjdG9yPGNoYXI+JiB2YWx1
ZSk7CisgICAgYm9vbCBjb21taXQoKTsKKyAgICB2b2lkIHJvbGxiYWNrKCk7CisKKyAgICBQYXNz
T3duUHRyPExldmVsREJJdGVyYXRvcj4gY3JlYXRlSXRlcmF0b3IoKTsKKworcHJpdmF0ZToKKyAg
ICBMZXZlbERCVHJhbnNhY3Rpb24oTGV2ZWxEQkRhdGFiYXNlKik7CisKKyAgICBzdHJ1Y3QgQVZM
VHJlZU5vZGUgeworICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5OworICAgICAgICBWZWN0b3I8Y2hh
cj4gdmFsdWU7CisgICAgICAgIGJvb2wgZGVsZXRlZDsKKworICAgICAgICBBVkxUcmVlTm9kZSog
bGVzczsKKyAgICAgICAgQVZMVHJlZU5vZGUqIGdyZWF0ZXI7CisgICAgICAgIGludCBiYWxhbmNl
RmFjdG9yOworICAgIH07CisKKyAgICBzdHJ1Y3QgQVZMVHJlZUFic3RyYWN0b3IgeworICAgICAg
ICB0eXBlZGVmIEFWTFRyZWVOb2RlKiBoYW5kbGU7CisgICAgICAgIHR5cGVkZWYgc2l6ZV90IHNp
emU7CisgICAgICAgIHR5cGVkZWYgTGV2ZWxEQlNsaWNlIGtleTsKKworICAgICAgICBoYW5kbGUg
Z2V0X2xlc3MoaGFuZGxlIGgpIHsgcmV0dXJuIGgtPmxlc3M7IH0KKyAgICAgICAgdm9pZCBzZXRf
bGVzcyhoYW5kbGUgaCwgaGFuZGxlIGxlc3MpIHsgaC0+bGVzcyA9IGxlc3M7IH0KKyAgICAgICAg
aGFuZGxlIGdldF9ncmVhdGVyKGhhbmRsZSBoKSB7IHJldHVybiBoLT5ncmVhdGVyOyB9CisgICAg
ICAgIHZvaWQgc2V0X2dyZWF0ZXIoaGFuZGxlIGgsIGhhbmRsZSBncmVhdGVyKSB7IGgtPmdyZWF0
ZXIgPSBncmVhdGVyOyB9CisKKyAgICAgICAgaW50IGdldF9iYWxhbmNlX2ZhY3RvcihoYW5kbGUg
aCkgeyByZXR1cm4gaC0+YmFsYW5jZUZhY3RvcjsgfQorICAgICAgICB2b2lkIHNldF9iYWxhbmNl
X2ZhY3RvcihoYW5kbGUgaCwgaW50IGJmKSB7IGgtPmJhbGFuY2VGYWN0b3IgPSBiZjsgfQorCisg
ICAgICAgIGludCBjb21wYXJlX2tleV9rZXkoY29uc3Qga2V5JiBrYSwgY29uc3Qga2V5JiBrYikg
eyByZXR1cm4gbV9jb21wYXJhdG9yLT5jb21wYXJlKGthLCBrYik7IH0KKyAgICAgICAgaW50IGNv
bXBhcmVfa2V5X25vZGUoY29uc3Qga2V5JiBrLCBoYW5kbGUgaCkgeyByZXR1cm4gY29tcGFyZV9r
ZXlfa2V5KGssIGgtPmtleSk7IH0KKyAgICAgICAgaW50IGNvbXBhcmVfbm9kZV9ub2RlKGhhbmRs
ZSBoYSwgaGFuZGxlIGhiKSB7IHJldHVybiBjb21wYXJlX2tleV9rZXkoaGEtPmtleSwgaGItPmtl
eSk7IH0KKworICAgICAgICBzdGF0aWMgaGFuZGxlIG51bGwoKSB7IHJldHVybiAwOyB9CisKKyAg
ICAgICAgY29uc3QgTGV2ZWxEQkNvbXBhcmF0b3IqIG1fY29tcGFyYXRvcjsKKyAgICB9OworCisg
ICAgdHlwZWRlZiBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yPiBUcmVlVHlwZTsKKworICAgIGNs
YXNzIFRyZWVJdGVyYXRvciA6IHB1YmxpYyBMZXZlbERCSXRlcmF0b3IgeworICAgIHB1YmxpYzoK
KyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8VHJlZUl0ZXJhdG9yPiBjcmVhdGUoTGV2ZWxEQlRy
YW5zYWN0aW9uKik7CisgICAgICAgIH5UcmVlSXRlcmF0b3IoKTsKKworICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNWYWxpZCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgc2Vla1RvTGFzdCgp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgc2Vlayhjb25zdCBMZXZlbERCU2xpY2UmKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIG5leHQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXYoKTsKKyAg
ICAgICAgdmlydHVhbCBMZXZlbERCU2xpY2Uga2V5KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwg
TGV2ZWxEQlNsaWNlIHZhbHVlKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNEZWxldGVkKCkgY29u
c3Q7CisgICAgICAgIHZvaWQgcmVzZXQoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFRyZWVJ
dGVyYXRvcihMZXZlbERCVHJhbnNhY3Rpb24qKTsKKyAgICAgICAgbXV0YWJsZSBUcmVlVHlwZTo6
SXRlcmF0b3IgbV9pdGVyYXRvcjsgLy8gRGVyZWZlcmVuY2luZyB0aGlzIGlzIG5vbi1jb25zdC4K
KyAgICAgICAgVHJlZVR5cGUqIG1fdHJlZTsKKyAgICAgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBt
X3RyYW5zYWN0aW9uOworICAgICAgICBWZWN0b3I8Y2hhcj4gbV9rZXk7CisgICAgfTsKKworICAg
IGNsYXNzIFRyYW5zYWN0aW9uSXRlcmF0b3IgOiBwdWJsaWMgTGV2ZWxEQkl0ZXJhdG9yIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIH5UcmFuc2FjdGlvbkl0ZXJhdG9yKCkgeyB9OworICAgICAgICBz
dGF0aWMgUGFzc093blB0cjxUcmFuc2FjdGlvbkl0ZXJhdG9yPiBjcmVhdGUoUGFzc1JlZlB0cjxM
ZXZlbERCVHJhbnNhY3Rpb24+KTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNv
bnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgc2Vla1RvTGFzdCgpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgc2Vlayhjb25zdCBMZXZlbERCU2xpY2UmIHRhcmdldCk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBuZXh0KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmV2KCk7CisgICAgICAgIHZpcnR1
YWwgTGV2ZWxEQlNsaWNlIGtleSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIExldmVsREJTbGlj
ZSB2YWx1ZSgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgVHJhbnNhY3Rpb25JdGVy
YXRvcihQYXNzUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4pOworICAgICAgICB2b2lkIGhhbmRs
ZUNvbmZsaWN0c0FuZERlbGV0ZXMoKTsKKyAgICAgICAgdm9pZCBmaW5kU21hbGxlc3QoKTsKKyAg
ICAgICAgdm9pZCBmaW5kTGFyZ2VzdCgpOworCisgICAgICAgIFJlZlB0cjxMZXZlbERCVHJhbnNh
Y3Rpb24+IG1fdHJhbnNhY3Rpb247CisgICAgICAgIGNvbnN0IExldmVsREJDb21wYXJhdG9yKiBt
X2NvbXBhcmF0b3I7CisgICAgICAgIE93blB0cjxUcmVlSXRlcmF0b3I+IG1fdHJlZUl0ZXJhdG9y
OworICAgICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBtX2RiSXRlcmF0b3I7CisgICAgICAg
IExldmVsREJJdGVyYXRvciogbV9jdXJyZW50OworCisgICAgICAgIGVudW0gRGlyZWN0aW9uIHsK
KyAgICAgICAgICAgIGtGb3J3YXJkLAorICAgICAgICAgICAga1JldmVyc2UKKyAgICAgICAgfTsK
KyAgICAgICAgRGlyZWN0aW9uIG1fZGlyZWN0aW9uOworICAgIH07CisKKyAgICB2b2lkIGNsZWFy
VHJlZSgpOworICAgIHZvaWQgcmVnaXN0ZXJJdGVyYXRvcihUcmVlSXRlcmF0b3IqKTsKKyAgICB2
b2lkIHVucmVnaXN0ZXJJdGVyYXRvcihUcmVlSXRlcmF0b3IqKTsKKyAgICB2b2lkIHJlc2V0SXRl
cmF0b3JzKCk7CisKKyAgICBMZXZlbERCRGF0YWJhc2UqIG1fZGI7CisgICAgY29uc3QgTGV2ZWxE
QkNvbXBhcmF0b3IqIG1fY29tcGFyYXRvcjsKKyAgICBUcmVlVHlwZSBtX3RyZWU7CisgICAgYm9v
bCBtX2ZpbmlzaGVkOworICAgIEhhc2hTZXQ8VHJlZUl0ZXJhdG9yKj4gbV90cmVlSXRlcmF0b3Jz
OworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKExFVkVMREIpCisjZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBMZXZlbERCVHJhbnNhY3Rpb25faApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRj
aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNo
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzI0NzY2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVC
YXRjaC5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJMZXZlbERCV3JpdGVCYXRjaC5oIgorCisjaWYgRU5BQkxFKExFVkVMREIpCisKKyNp
bmNsdWRlICJMZXZlbERCU2xpY2UuaCIKKyNpbmNsdWRlIDxsZXZlbGRiL3NsaWNlLmg+CisjaW5j
bHVkZSA8bGV2ZWxkYi93cml0ZV9iYXRjaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
c3NPd25QdHI8TGV2ZWxEQldyaXRlQmF0Y2g+IExldmVsREJXcml0ZUJhdGNoOjpjcmVhdGUoKQor
eworICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGV2ZWxEQldyaXRlQmF0Y2gpOworfQorCitMZXZl
bERCV3JpdGVCYXRjaDo6TGV2ZWxEQldyaXRlQmF0Y2goKQorICAgIDogbV93cml0ZUJhdGNoKGFk
b3B0UHRyKG5ldyBsZXZlbGRiOjpXcml0ZUJhdGNoKSkKK3sKK30KKworTGV2ZWxEQldyaXRlQmF0
Y2g6On5MZXZlbERCV3JpdGVCYXRjaCgpCit7Cit9CisKK3N0YXRpYyBsZXZlbGRiOjpTbGljZSBt
YWtlU2xpY2UoY29uc3QgTGV2ZWxEQlNsaWNlJiBzKQoreworICAgIHJldHVybiBsZXZlbGRiOjpT
bGljZShzLmJlZ2luKCksIHMuZW5kKCkgLSBzLmJlZ2luKCkpOworfQorCit2b2lkIExldmVsREJX
cml0ZUJhdGNoOjpwdXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIGNvbnN0IExldmVsREJTbGlj
ZSYgdmFsdWUpCit7CisgICAgbV93cml0ZUJhdGNoLT5QdXQobWFrZVNsaWNlKGtleSksIG1ha2VT
bGljZSh2YWx1ZSkpOworfQorCit2b2lkIExldmVsREJXcml0ZUJhdGNoOjpyZW1vdmUoY29uc3Qg
TGV2ZWxEQlNsaWNlJiBrZXkpCit7CisgICAgbV93cml0ZUJhdGNoLT5EZWxldGUobWFrZVNsaWNl
KGtleSkpOworfQorCit2b2lkIExldmVsREJXcml0ZUJhdGNoOjpjbGVhcigpCit7CisgICAgbV93
cml0ZUJhdGNoLT5DbGVhcigpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRjaC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRjaC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZTllZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmgKQEAgLTAsMCArMSw2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgTGV2ZWxEQldyaXRlQmF0Y2hfaAorI2RlZmluZSBMZXZlbERC
V3JpdGVCYXRjaF9oCisKKyNpZiBFTkFCTEUoTEVWRUxEQikKKworI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgbGV2ZWxkYiB7
CitjbGFzcyBXcml0ZUJhdGNoOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExl
dmVsREJTbGljZTsKKworY2xhc3MgTGV2ZWxEQldyaXRlQmF0Y2ggeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzT3duUHRyPExldmVsREJXcml0ZUJhdGNoPiBjcmVhdGUoKTsKKyAgICB+TGV2ZWxE
QldyaXRlQmF0Y2goKTsKKworICAgIHZvaWQgcHV0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBj
b25zdCBMZXZlbERCU2xpY2UmIHZhbHVlKTsKKyAgICB2b2lkIHJlbW92ZShjb25zdCBMZXZlbERC
U2xpY2UmIGtleSk7CisgICAgdm9pZCBjbGVhcigpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBMZXZlbERCRGF0YWJhc2U7CisgICAgTGV2ZWxEQldyaXRlQmF0Y2goKTsKKworICAgIE93
blB0cjxsZXZlbGRiOjpXcml0ZUJhdGNoPiBtX3dyaXRlQmF0Y2g7Cit9OworCit9CisKKyNlbmRp
ZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJC
YWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2lu
Z1N0b3JlLmNwcAppbmRleCAzYjBkZDMzLi43YWZiOWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTM4LDYgKzM4LDcgQEAK
ICNpbmNsdWRlICJMZXZlbERCRGF0YWJhc2UuaCIKICNpbmNsdWRlICJMZXZlbERCSXRlcmF0b3Iu
aCIKICNpbmNsdWRlICJMZXZlbERCU2xpY2UuaCIKKyNpbmNsdWRlICJMZXZlbERCVHJhbnNhY3Rp
b24uaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCiAjaWZuZGVmIElOVDY0X01BWApA
QCAtNDksNyArNTAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBJ
REJMZXZlbERCQ29kaW5nOwogCi1zdGF0aWMgYm9vbCBnZXRJbnQoTGV2ZWxEQkRhdGFiYXNlKiBk
YiwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIGludDY0X3QmIGZvdW5kSW50KQordGVtcGxhdGUg
PHR5cGVuYW1lIERiT3JUcmFuc2FjdGlvbj4KK3N0YXRpYyBib29sIGdldEludChEYk9yVHJhbnNh
Y3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgaW50NjRfdCYgZm91bmRJbnQpCiB7
CiAgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKICAgICBpZiAoIWRiLT5nZXQoa2V5LCByZXN1bHQp
KQpAQCAtNTksMTIgKzYxLDE0IEBAIHN0YXRpYyBib29sIGdldEludChMZXZlbERCRGF0YWJhc2Uq
IGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgaW50NjRfdCYgZm91bmRJCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyBib29sIHB1dEludChMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25z
dCBWZWN0b3I8Y2hhcj4mIGtleSwgaW50NjRfdCB2YWx1ZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBE
Yk9yVHJhbnNhY3Rpb24+CitzdGF0aWMgYm9vbCBwdXRJbnQoRGJPclRyYW5zYWN0aW9uKiBkYiwg
Y29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIGludDY0X3QgdmFsdWUpCiB7CiAgICAgcmV0dXJuIGRi
LT5wdXQoa2V5LCBlbmNvZGVJbnQodmFsdWUpKTsKIH0KIAotc3RhdGljIGJvb2wgZ2V0U3RyaW5n
KExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBTdHJpbmcmIGZv
dW5kU3RyaW5nKQordGVtcGxhdGUgPHR5cGVuYW1lIERiT3JUcmFuc2FjdGlvbj4KK3N0YXRpYyBi
b29sIGdldFN0cmluZyhEYk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtl
eSwgU3RyaW5nJiBmb3VuZFN0cmluZykKIHsKICAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwogICAg
IGlmICghZGItPmdldChrZXksIHJlc3VsdCkpCkBAIC03NCw3ICs3OCw4IEBAIHN0YXRpYyBib29s
IGdldFN0cmluZyhMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwg
U3RyaW5nJiBmb3VuCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIHB1dFN0cmlu
ZyhMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlKQordGVtcGxhdGUgPHR5cGVuYW1lIERiT3JUcmFuc2FjdGlvbj4KK3N0YXRpYyBi
b29sIHB1dFN0cmluZyhEYk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIGlmICghZGItPnB1dChrZXksIGVuY29kZVN0
cmluZyh2YWx1ZSkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yODMsMTIgKzI4OCwxMiBA
QCB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRh
dGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PgogICAgIH0KIH0KIAotc3RhdGljIGludDY0X3QgZ2V0
TmV3T2JqZWN0U3RvcmVJZChMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQp
CitzdGF0aWMgaW50NjRfdCBnZXROZXdPYmplY3RTdG9yZUlkKExldmVsREJUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCkKIHsKICAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gZnJlZUxpc3RTdGFydEtleSA9IE9iamVjdFN0b3JlRnJlZUxpc3RLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCAwKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gZnJlZUxpc3RTdG9wS2V5ID0gT2Jq
ZWN0U3RvcmVGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIElOVDY0X01BWCk7CiAKLSAg
ICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IGRiLT5jcmVhdGVJdGVyYXRvcigpOworICAg
IE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9y
KCk7CiAgICAgZm9yIChpdC0+c2VlayhmcmVlTGlzdFN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAm
JiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIGZyZWVMaXN0U3RvcEtleSkgPCAwOyBpdC0+bmV4dCgp
KSB7CiAgICAgICAgIGNvbnN0IGNoYXIqIHAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKICAgICAgICAg
Y29uc3QgY2hhciogbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7CkBAIC0yOTcsNyArMzAyLDcgQEAg
c3RhdGljIGludDY0X3QgZ2V0TmV3T2JqZWN0U3RvcmVJZChMZXZlbERCRGF0YWJhc2UqIGRiLCBp
bnQ2NF90IGRhdGFiYXNlSWQpCiAgICAgICAgIHAgPSBPYmplY3RTdG9yZUZyZWVMaXN0S2V5Ojpk
ZWNvZGUocCwgbGltaXQsICZmcmVlTGlzdEtleSk7CiAgICAgICAgIEFTU0VSVChwKTsKIAotICAg
ICAgICBib29sIG9rID0gZGItPnJlbW92ZShpdC0+a2V5KCkpOworICAgICAgICBib29sIG9rID0g
dHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG9r
LCBvayk7CiAKICAgICAgICAgcmV0dXJuIGZyZWVMaXN0S2V5Lm9iamVjdFN0b3JlSWQoKTsKQEAg
LTMwNSwxMyArMzEwLDEzIEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld09iamVjdFN0b3JlSWQoTGV2
ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRfdCBkYXRhYmFzZUlkKQogCiAgICAgaW50NjRfdCBtYXhP
YmplY3RTdG9yZUlkID0gLTE7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG1heE9iamVjdFN0b3Jl
SWRLZXkgPSBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgRGF0YWJhc2VN
ZXRhRGF0YUtleTo6a01heE9iamVjdFN0b3JlSWQpOwotICAgIGlmICghZ2V0SW50KGRiLCBtYXhP
YmplY3RTdG9yZUlkS2V5LCBtYXhPYmplY3RTdG9yZUlkKSkKKyAgICBpZiAoIWdldEludCh0cmFu
c2FjdGlvbiwgbWF4T2JqZWN0U3RvcmVJZEtleSwgbWF4T2JqZWN0U3RvcmVJZCkpCiAgICAgICAg
IG1heE9iamVjdFN0b3JlSWQgPSAwOwogCiAgICAgQVNTRVJUKG1heE9iamVjdFN0b3JlSWQgPj0g
MCk7CiAKICAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBtYXhPYmplY3RTdG9yZUlkICsgMTsK
LSAgICBib29sIG9rID0gcHV0SW50KGRiLCBtYXhPYmplY3RTdG9yZUlkS2V5LCBvYmplY3RTdG9y
ZUlkKTsKKyAgICBib29sIG9rID0gcHV0SW50KHRyYW5zYWN0aW9uLCBtYXhPYmplY3RTdG9yZUlk
S2V5LCBvYmplY3RTdG9yZUlkKTsKICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7CiAKICAgICBy
ZXR1cm4gb2JqZWN0U3RvcmVJZDsKQEAgLTMxOSw3ICszMjQsOCBAQCBzdGF0aWMgaW50NjRfdCBn
ZXROZXdPYmplY3RTdG9yZUlkKExldmVsREJEYXRhYmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJ
ZCkKIAogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2
NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRo
LCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkKIHsK
LSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBnZXROZXdPYmplY3RTdG9yZUlkKG1fZGIuZ2V0
KCksIGRhdGFiYXNlSWQpOworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAg
aW50NjRfdCBvYmplY3RTdG9yZUlkID0gZ2V0TmV3T2JqZWN0U3RvcmVJZChtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCk7CiAKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbmFt
ZUtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCAwKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5UGF0aEtleSA9IE9iamVjdFN0
b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAxKTsKQEAg
LTMyOSw0MyArMzM1LDQzIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2Jq
ZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmCiAgICAgY29uc3QgVmVj
dG9yPGNoYXI+IG1heEluZGV4SWRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgNSk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG5h
bWVzS2V5ID0gT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG5hbWUpOwog
Ci0gICAgYm9vbCBvayA9IHB1dFN0cmluZyhtX2RiLmdldCgpLCBuYW1lS2V5LCBuYW1lKTsKKyAg
ICBib29sIG9rID0gcHV0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBuYW1lS2V5
LCBuYW1lKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5k
ZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9r
ID0gcHV0U3RyaW5nKG1fZGIuZ2V0KCksIGtleVBhdGhLZXksIGtleVBhdGgpOworICAgIG9rID0g
cHV0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBrZXlQYXRoS2V5LCBrZXlQYXRo
KTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBE
QiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0
SW50KG1fZGIuZ2V0KCksIGF1dG9JbmNyZW1lbnRLZXksIGF1dG9JbmNyZW1lbnQpOworICAgIG9r
ID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBhdXRvSW5jcmVtZW50S2V5LCBh
dXRvSW5jcmVtZW50KTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJu
YWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIG9rID0gcHV0SW50KG1fZGIuZ2V0KCksIGV2aWN0YWJsZUtleSwgZmFsc2UpOworICAgIG9r
ID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBldmljdGFibGVLZXksIGZhbHNl
KTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBE
QiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0
SW50KG1fZGIuZ2V0KCksIGxhc3RWZXJzaW9uS2V5LCAxKTsKKyAgICBvayA9IHB1dEludChtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbGFzdFZlcnNpb25LZXksIDEpOwogICAgIGlmICghb2sp
IHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9kYi5nZXQoKSwg
bWF4SW5kZXhJZEtleSwga01pbmltdW1JbmRleElkKTsKKyAgICBvayA9IHB1dEludChtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgbWF4SW5kZXhJZEtleSwga01pbmltdW1JbmRleElkKTsKICAg
ICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJv
ci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0SW50KG1f
ZGIuZ2V0KCksIG5hbWVzS2V5LCBvYmplY3RTdG9yZUlkKTsKKyAgICBvayA9IHB1dEludChtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbmFtZXNLZXksIG9iamVjdFN0b3JlSWQpOwogICAgIGlm
ICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNzYsMTIgKzM4MiwxMSBAQCBib29sIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJgogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBkZWxldGVS
YW5nZShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJlZ2luLCBjb25z
dCBWZWN0b3I8Y2hhcj4mIGVuZCkKK3N0YXRpYyBib29sIGRlbGV0ZVJhbmdlKExldmVsREJUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgYmVnaW4sIGNvbnN0IFZl
Y3RvcjxjaGFyPiYgZW5kKQogewotICAgIC8vIEZJWE1FOiBMZXZlbERCIG1heSBiZSBhYmxlIHRv
IHByb3ZpZGUgYSBidWxrIG9wZXJhdGlvbiB0aGF0IHdlIGNhbiBkbyBmaXJzdC4KLSAgICBPd25Q
dHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IGRiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIE93blB0
cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAg
ICAgZm9yIChpdC0+c2VlayhiZWdpbik7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQt
PmtleSgpLCBlbmQpIDwgMDsgaXQtPm5leHQoKSkgewotICAgICAgICBpZiAoIWRiLT5yZW1vdmUo
aXQtPmtleSgpKSkKKyAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0zOTAsMTggKzM5NSwyMCBA
QCBzdGF0aWMgYm9vbCBkZWxldGVSYW5nZShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0
b3I8Y2hhcj4mIGJlZ2luLCBjb25zdCBWZQogCiB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKQogeworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisKICAgICBTdHJpbmcg
b2JqZWN0U3RvcmVOYW1lOwotICAgIGdldFN0cmluZyhtX2RiLmdldCgpLCBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIG9iamVjdFN0
b3JlTmFtZSk7CisgICAgZ2V0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCks
IG9iamVjdFN0b3JlTmFtZSk7CiAKLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fZGIuZ2V0KCksIE9i
amVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAw
KSwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIDYpKSkKKyAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgMCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCA2KSkpCiAgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFJlcG9ydCBlcnJvci4KIAot
ICAgIHB1dFN0cmluZyhtX2RiLmdldCgpLCBPYmplY3RTdG9yZUZyZWVMaXN0S2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCksICIiKTsKLSAgICBtX2RiLT5yZW1vdmUoT2JqZWN0
U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlTmFtZSkpOworICAg
IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgT2JqZWN0U3RvcmVGcmVlTGlz
dEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpLCAiIik7CisgICAgbV9jdXJy
ZW50VHJhbnNhY3Rpb24tPnJlbW92ZShPYmplY3RTdG9yZU5hbWVzS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVOYW1lKSk7CiAKLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fZGIuZ2V0
KCksIEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAw
KSwgSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIElO
VDY0X01BWCkpKQorICAgIGlmICghZGVsZXRlUmFuZ2UobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0
KCksIEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAw
KSwgSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIElO
VDY0X01BWCkpKQogICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3IuCi0gICAg
aWYgKCFkZWxldGVSYW5nZShtX2RiLmdldCgpLCBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCwgMCksIEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBJTlQ2NF9NQVgsIDApKSkKKyAgICBpZiAoIWRlbGV0
ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBJbmRleE1ldGFEYXRhS2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCwgMCksIEluZGV4TWV0YURhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBJTlQ2NF9NQVgsIDApKSkKICAgICAgICAg
cmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgogCiAgICAgY2xlYXJPYmplY3RTdG9yZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKQEAgLTQxMiw3ICs0MTksOCBAQCBTdHJpbmcgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGxldmVsZGJLZXkgPSBPYmplY3RT
dG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwogICAg
IFZlY3RvcjxjaGFyPiBkYXRhOwogCi0gICAgaWYgKCFtX2RiLT5nZXQobGV2ZWxkYktleSwgZGF0
YSkpCisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBpZiAoIW1fY3VycmVu
dFRyYW5zYWN0aW9uLT5nZXQobGV2ZWxkYktleSwgZGF0YSkpCiAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKIAogICAgIGludDY0X3QgdmVyc2lvbjsKQEAgLTQ0NSwxOCArNDUzLDE4IEBAIHByaXZh
dGU6CiB9OwogfQogCi1zdGF0aWMgaW50NjRfdCBnZXROZXdWZXJzaW9uTnVtYmVyKExldmVsREJE
YXRhYmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQor
c3RhdGljIGludDY0X3QgZ2V0TmV3VmVyc2lvbk51bWJlcihMZXZlbERCVHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsK
ICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGFzdFZlcnNpb25LZXkgPSBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgNCk7CiAKICAgICBpbnQ2
NF90IGxhc3RWZXJzaW9uID0gLTE7Ci0gICAgaWYgKCFnZXRJbnQoZGIsIGxhc3RWZXJzaW9uS2V5
LCBsYXN0VmVyc2lvbikpCisgICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24sIGxhc3RWZXJzaW9u
S2V5LCBsYXN0VmVyc2lvbikpCiAgICAgICAgIGxhc3RWZXJzaW9uID0gMDsKIAogICAgIEFTU0VS
VChsYXN0VmVyc2lvbiA+PSAwKTsKIAogICAgIGludDY0X3QgdmVyc2lvbiA9IGxhc3RWZXJzaW9u
ICsgMTsKLSAgICBib29sIG9rID0gcHV0SW50KGRiLCBsYXN0VmVyc2lvbktleSwgdmVyc2lvbik7
CisgICAgYm9vbCBvayA9IHB1dEludCh0cmFuc2FjdGlvbiwgbGFzdFZlcnNpb25LZXksIHZlcnNp
b24pOwogICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKIAogICAgIEFTU0VSVCh2ZXJzaW9uID4g
bGFzdFZlcnNpb24pOyAvLyBGSVhNRTogVGhpbmsgYWJvdXQgaG93IHdlIHdhbnQgdG8gaGFuZGxl
IHRoZSBvdmVyZmxvdyBzY2VuYXJpby4KQEAgLTQ2NiwxOCArNDc0LDE5IEBAIHN0YXRpYyBpbnQ2
NF90IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2CiAKIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3Rv
cmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQktleSYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCiB7Ci0gICAgaW50NjRfdCB2ZXJzaW9uID0gZ2V0TmV3
VmVyc2lvbk51bWJlcihtX2RiLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKKyAg
ICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIGludDY0X3QgdmVyc2lvbiA9IGdl
dE5ld1ZlcnNpb25OdW1iZXIobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBvYmplY3RTdG9yZWRhdGFL
ZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBrZXkpOwogCiAgICAgVmVjdG9yPGNoYXI+IHY7CiAgICAgdi5hcHBlbmQoZW5jb2RlVmFySW50
KHZlcnNpb24pKTsKICAgICB2LmFwcGVuZChlbmNvZGVTdHJpbmcodmFsdWUpKTsKIAotICAgIGlm
ICghbV9kYi0+cHV0KG9iamVjdFN0b3JlZGF0YUtleSwgdikpCisgICAgaWYgKCFtX2N1cnJlbnRU
cmFuc2FjdGlvbi0+cHV0KG9iamVjdFN0b3JlZGF0YUtleSwgdikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBleGlzdHNFbnRyeUtleSA9IEV4aXN0c0Vu
dHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKLSAgICBpZiAo
IW1fZGItPnB1dChleGlzdHNFbnRyeUtleSwgZW5jb2RlSW50KHZlcnNpb24pKSkKKyAgICBpZiAo
IW1fY3VycmVudFRyYW5zYWN0aW9uLT5wdXQoZXhpc3RzRW50cnlLZXksIGVuY29kZUludCh2ZXJz
aW9uKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExldmVsREJSZWNvcmRJZGVudGlm
aWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PExldmVsREJSZWNvcmRJ
ZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmllcik7CkBAIC00ODgsMTAgKzQ5NywxMSBAQCBib29s
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYgogCiB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNsZWFy
T2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7
CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gc3RhcnRLZXkgPSBLZXlQcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCkuZW5j
b2RlKCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBLZXlQcmVmaXgoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCArIDEsIDApLmVuY29kZSgpOwogCi0gICAgZGVsZXRlUmFuZ2Uo
bV9kYi5nZXQoKSwgc3RhcnRLZXksIHN0b3BLZXkpOworICAgIGRlbGV0ZVJhbmdlKG1fY3VycmVu
dFRyYW5zYWN0aW9uLmdldCgpLCBzdGFydEtleSwgc3RvcEtleSk7CiB9CiAKIFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IElEQkxldmVsREJC
YWNraW5nU3RvcmU6OmNyZWF0ZUludmFsaWRSZWNvcmRJZGVudGlmaWVyKCkKQEAgLTUwMSwxNyAr
NTExLDE5IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElk
ZW50aWZpZXI+IElEQkxldmVsREJCYWNraW5nU3RvcmU6CiAKIHZvaWQgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVj
b3JkSWRlbnRpZmllcikKIHsKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwogICAg
IGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9
IHN0YXRpY19jYXN0PGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRp
Zmllcik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGxldmVsREJSZWNvcmRJZGVudGlmaWVy
LT5wcmltYXJ5S2V5KCkpOwotICAgIG1fZGItPnJlbW92ZShrZXkpOworICAgIG1fY3VycmVudFRy
YW5zYWN0aW9uLT5yZW1vdmUoa2V5KTsKIH0KIAogZG91YmxlIElEQkxldmVsREJCYWNraW5nU3Rv
cmU6Om5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKQogeworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAg
Y29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWluSURCS2V5KCkpOwogICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBzdG9wS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgbWF4SURCS2V5KCkpOwogCi0gICAgT3duUHRyPExldmVsREJJdGVyYXRv
cj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIE93blB0cjxMZXZlbERCSXRlcmF0
b3I+IGl0ID0gbV9jdXJyZW50VHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAKICAgICBp
bnQgbWF4TnVtZXJpY0tleSA9IDA7CiAKQEAgLTUzNywxMCArNTQ5LDExIEBAIGRvdWJsZSBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0CiAKIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5P
YmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCS2V5JiBrZXksIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJ
ZGVudGlmaWVyKQogeworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgY29u
c3QgVmVjdG9yPGNoYXI+IGxldmVsZGJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwogICAgIFZlY3RvcjxjaGFyPiBkYXRhOwog
Ci0gICAgaWYgKCFtX2RiLT5nZXQobGV2ZWxkYktleSwgZGF0YSkpCisgICAgaWYgKCFtX2N1cnJl
bnRUcmFuc2FjdGlvbi0+Z2V0KGxldmVsZGJLZXksIGRhdGEpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBpbnQ2NF90IHZlcnNpb247CkBAIC01NTUsMTAgKzU2OCwxMSBAQCBib29sIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90CiAKIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Zm9yRWFjaE9i
amVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrJiBjYWxsYmFjaykKIHsKKyAgICBBU1NFUlQobV9j
dXJyZW50VHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IE9i
amVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1pbklE
QktleSgpKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IE9iamVjdFN0b3JlRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1heElEQktleSgpKTsKIAot
ICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9kYi0+Y3JlYXRlSXRlcmF0b3IoKTsK
KyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5zYWN0aW9uLT5j
cmVhdGVJdGVyYXRvcigpOwogICAgIGZvciAoaXQtPnNlZWsoc3RhcnRLZXkpOyBpdC0+aXNWYWxp
ZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBpdC0+bmV4dCgpKSB7
CiAgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKICAgICAgICAgY29u
c3QgY2hhciAqbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7CkBAIC02MjIsMTIgKzYzNiwxMiBAQCB2
b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSQogICAgIH0KIH0KIAotc3RhdGljIGludDY0X3QgZ2V0TmV3
SW5kZXhJZChMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkKK3N0YXRpYyBpbnQ2NF90IGdldE5ld0luZGV4SWQoTGV2ZWxEQlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpCiB7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gSW5kZXhGcmVlTGlz
dEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApOwogICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBzdG9wS2V5ID0gSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIElOVDY0X01BWCk7CiAKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9y
PiBpdCA9IGRiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+
IGl0ID0gdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgZm9yIChpdC0+c2Vlayhz
dGFydEtleSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5
KSA8IDA7IGl0LT5uZXh0KCkpIHsKICAgICAgICAgY29uc3QgY2hhciogcCA9IGl0LT5rZXkoKS5i
ZWdpbigpOwogICAgICAgICBjb25zdCBjaGFyKiBsaW1pdCA9IGl0LT5rZXkoKS5lbmQoKTsKQEAg
LTYzNiw3ICs2NTAsNyBAQCBzdGF0aWMgaW50NjRfdCBnZXROZXdJbmRleElkKExldmVsREJEYXRh
YmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYgogICAgICAgICBwID0gSW5k
ZXhGcmVlTGlzdEtleTo6ZGVjb2RlKHAsIGxpbWl0LCAmZnJlZUxpc3RLZXkpOwogICAgICAgICBB
U1NFUlQocCk7CiAKLSAgICAgICAgYm9vbCBvayA9IGRiLT5yZW1vdmUoaXQtPmtleSgpKTsKKyAg
ICAgICAgYm9vbCBvayA9IHRyYW5zYWN0aW9uLT5yZW1vdmUoaXQtPmtleSgpKTsKICAgICAgICAg
QVNTRVJUX1VOVVNFRChvaywgb2spOwogCiAgICAgICAgIEFTU0VSVChmcmVlTGlzdEtleS5pbmRl
eElkKCkgPj0ga01pbmltdW1JbmRleElkKTsKQEAgLTY0NSwxMyArNjU5LDEzIEBAIHN0YXRpYyBp
bnQ2NF90IGdldE5ld0luZGV4SWQoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iCiAKICAgICBpbnQ2NF90IG1heEluZGV4SWQgPSAtMTsKICAgICBjb25z
dCBWZWN0b3I8Y2hhcj4gbWF4SW5kZXhJZEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCA1KTsKLSAgICBpZiAoIWdldEludChkYiwg
bWF4SW5kZXhJZEtleSwgbWF4SW5kZXhJZCkpCisgICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24s
IG1heEluZGV4SWRLZXksIG1heEluZGV4SWQpKQogICAgICAgICBtYXhJbmRleElkID0ga01pbmlt
dW1JbmRleElkOwogCiAgICAgQVNTRVJUKG1heEluZGV4SWQgPj0gMCk7CiAKICAgICBpbnQ2NF90
IGluZGV4SWQgPSBtYXhJbmRleElkICsgMTsKLSAgICBib29sIG9rID0gcHV0SW50KGRiLCBtYXhJ
bmRleElkS2V5LCBpbmRleElkKTsKKyAgICBib29sIG9rID0gcHV0SW50KHRyYW5zYWN0aW9uLCBt
YXhJbmRleElkS2V5LCBpbmRleElkKTsKICAgICBpZiAoIW9rKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTY2MCwyNSArNjc0LDI2IEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld0luZGV4SWQo
TGV2ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iCiAKIGJv
b2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBpbnQ2NF90JiBpbmRleElkKQogewotICAgIGluZGV4
SWQgPSBnZXROZXdJbmRleElkKG1fZGIuZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQp
OworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgaW5kZXhJZCA9IGdldE5l
d0luZGV4SWQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQpOwogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG5hbWVLZXkgPSBJbmRleE1ldGFEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgMCk7CiAgICAg
Y29uc3QgVmVjdG9yPGNoYXI+IHVuaXF1ZUtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAxKTsKICAgICBjb25zdCBWZWN0b3I8
Y2hhcj4ga2V5UGF0aEtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBpbmRleElkLCAyKTsKIAotICAgIGJvb2wgb2sgPSBwdXRTdHJpbmcobV9k
Yi5nZXQoKSwgbmFtZUtleSwgbmFtZSk7CisgICAgYm9vbCBvayA9IHB1dFN0cmluZyhtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgbmFtZUtleSwgbmFtZSk7CiAgICAgaWYgKCFvaykgewogICAg
ICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1dEludChtX2RiLmdldCgpLCB1bmlxdWVL
ZXksIGlzVW5pcXVlKTsKKyAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQo
KSwgdW5pcXVlS2V5LCBpc1VuaXF1ZSk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBMT0dfRVJS
T1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBvayA9IHB1dFN0cmluZyhtX2RiLmdldCgpLCBrZXlQYXRoS2V5LCBrZXlQ
YXRoKTsKKyAgICBvayA9IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwga2V5
UGF0aEtleSwga2V5UGF0aCk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBMT0dfRVJST1IoIklu
dGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY5
OCwxOSArNzEzLDIwIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRh
Rm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvCiAgICAgQVNTRVJUKGluZGV4
SWQgPj0ga01pbmltdW1JbmRleElkKTsKICAgICBjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRpZmll
ciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBMZXZlbERCUmVj
b3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZpZXIpOwogCi0gICAgY29uc3QgaW50NjRfdCBn
bG9iYWxTZXF1ZW5jZU51bWJlciA9IGdldE5ld1ZlcnNpb25OdW1iZXIobV9kYi5nZXQoKSwgZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9u
KTsKKyAgICBjb25zdCBpbnQ2NF90IGdsb2JhbFNlcXVlbmNlTnVtYmVyID0gZ2V0TmV3VmVyc2lv
bk51bWJlcihtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4RGF0YUtleSA9IEluZGV4RGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwgZ2xvYmFs
U2VxdWVuY2VOdW1iZXIpOwogCiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAgICAgZGF0YS5hcHBl
bmQoZW5jb2RlVmFySW50KGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT52ZXJzaW9uKCkpKTsKICAg
ICBkYXRhLmFwcGVuZChsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKIAot
ICAgIHJldHVybiBtX2RiLT5wdXQoaW5kZXhEYXRhS2V5LCBkYXRhKTsKKyAgICByZXR1cm4gbV9j
dXJyZW50VHJhbnNhY3Rpb24tPnB1dChpbmRleERhdGFLZXksIGRhdGEpOwogfQogCi1zdGF0aWMg
Ym9vbCBmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbihMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIHRhcmdldCwgVmVjdG9yPGNoYXI+JiBmb3VuZEtleSkKK3N0YXRpYyBib29s
IGZpbmRHcmVhdGVzdEtleUxlc3NUaGFuKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGNvbnN0IFZlY3RvcjxjaGFyPiYgdGFyZ2V0LCBWZWN0b3I8Y2hhcj4mIGZvdW5kS2V5KQogewot
ICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gZGItPmNyZWF0ZUl0ZXJhdG9yKCk7Cisg
ICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0
b3IoKTsKICAgICBpdC0+c2Vlayh0YXJnZXQpOwogCiAgICAgaWYgKCFpdC0+aXNWYWxpZCgpKSB7
CkBAIC03NDUsMTIgKzc2MSwxMiBAQCBTdHJpbmcgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0
T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iagogICAgIHJldHVy
biBnZXRPYmplY3RTdG9yZVJlY29yZChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAqcHJpbWFy
eUtleSk7CiB9CiAKLXN0YXRpYyBib29sIHZlcnNpb25FeGlzdHMoTGV2ZWxEQkRhdGFiYXNlKiBk
YiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgdmVy
c2lvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmNvZGVkUHJpbWFyeUtleSkKK3N0YXRpYyBib29s
IHZlcnNpb25FeGlzdHMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgdmVyc2lvbiwgY29uc3Qg
VmVjdG9yPGNoYXI+JiBlbmNvZGVkUHJpbWFyeUtleSkKIHsKICAgICBjb25zdCBWZWN0b3I8Y2hh
cj4ga2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBlbmNvZGVkUHJpbWFyeUtleSk7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAKLSAgICBpZiAo
IWRiLT5nZXQoa2V5LCBkYXRhKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5nZXQoa2V5LCBkYXRh
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGRlY29kZUludChkYXRhLmJl
Z2luKCksIGRhdGEuZW5kKCkpID09IHZlcnNpb247CkBAIC03NTgsOCArNzc0LDkgQEAgc3RhdGlj
IGJvb2wgdmVyc2lvbkV4aXN0cyhMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWMKIAogUGFzc1JlZlB0cjxJREJLZXk+IElEQkxldmVsREJCYWNraW5n
U3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKIHsKKyAg
ICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBs
ZXZlbGRiS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwga2V5LCAwKTsKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1f
ZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBt
X2N1cnJlbnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBpdC0+c2VlayhsZXZl
bGRiS2V5KTsKIAogICAgIGZvciAoOzspIHsKQEAgLTc3NSw5ICs3OTIsOSBAQCBQYXNzUmVmUHRy
PElEQktleT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KGlu
dDY0X3QgZGF0YWJhcwogICAgICAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZFByaW1hcnlLZXk7CiAg
ICAgICAgIGVuY29kZWRQcmltYXJ5S2V5LmFwcGVuZChwLCBpdC0+dmFsdWUoKS5lbmQoKSAtIHAp
OwogCi0gICAgICAgIGlmICghdmVyc2lvbkV4aXN0cyhtX2RiLmdldCgpLCBkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCB2ZXJzaW9uLCBlbmNvZGVkUHJpbWFyeUtleSkpIHsKKyAgICAgICAgaWYg
KCF2ZXJzaW9uRXhpc3RzKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCB2ZXJzaW9uLCBlbmNvZGVkUHJpbWFyeUtleSkpIHsKICAgICAgICAgICAg
IC8vIERlbGV0ZSBzdGFsZSBpbmRleCBkYXRhIGVudHJ5IGFuZCBjb250aW51ZS4KLSAgICAgICAg
ICAgIG1fZGItPnJlbW92ZShpdC0+a2V5KCkpOworICAgICAgICAgICAgbV9jdXJyZW50VHJhbnNh
Y3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpOwogICAgICAgICAgICAgaXQtPm5leHQoKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC03OTAsOCArODA3LDkgQEAgUGFzc1JlZlB0
cjxJREJLZXk+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChp
bnQ2NF90IGRhdGFiYXMKIAogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJ
bkluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQogeworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFu
c2FjdGlvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGxldmVsREJLZXkgPSBJbmRleERhdGFL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXksIDApOwot
ICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9kYi0+Y3JlYXRlSXRlcmF0b3IoKTsK
KyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5zYWN0aW9uLT5j
cmVhdGVJdGVyYXRvcigpOwogCiAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogCkBAIC04MTgsOCAr
ODM2LDggQEAgcHVibGljOgogICAgIGJvb2wgZmlyc3RTZWVrKCk7CiAKIHByb3RlY3RlZDoKLSAg
ICBDdXJzb3JJbXBsQ29tbW9uKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFy
PiYgbG93S2V5LCBib29sIGxvd09wZW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgaGlnaEtleSwgYm9v
bCBoaWdoT3BlbiwgYm9vbCBmb3J3YXJkKQotICAgICAgICA6IG1fZGIoZGIpCisgICAgQ3Vyc29y
SW1wbENvbW1vbihMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8
Y2hhcj4mIGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGhpZ2hLZXks
IGJvb2wgaGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uKQogICAgICAgICAsIG1fbG93S2V5KGxvd0tleSkKICAgICAgICAgLCBtX2xvd09w
ZW4obG93T3BlbikKICAgICAgICAgLCBtX2hpZ2hLZXkoaGlnaEtleSkKQEAgLTgyOSw3ICs4NDcs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogICAgIHZpcnR1YWwgfkN1cnNvckltcGxDb21tb24oKSB7
fQogCi0gICAgTGV2ZWxEQkRhdGFiYXNlKiBtX2RiOworICAgIExldmVsREJUcmFuc2FjdGlvbiog
bV90cmFuc2FjdGlvbjsKICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBtX2l0ZXJhdG9yOwog
ICAgIFZlY3RvcjxjaGFyPiBtX2xvd0tleTsKICAgICBib29sIG1fbG93T3BlbjsKQEAgLTg0MSw3
ICs4NTksNyBAQCBwcm90ZWN0ZWQ6CiAKIGJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6Zmlyc3RTZWVr
KCkKIHsKLSAgICBtX2l0ZXJhdG9yID0gbV9kYi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBtX2l0
ZXJhdG9yID0gbV90cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKIAogICAgIGlmIChtX2Zv
cndhcmQpCiAgICAgICAgIG1faXRlcmF0b3ItPnNlZWsobV9sb3dLZXkpOwpAQCAtOTAyLDcgKzky
MCw3IEBAIGJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJL
ZXkqIGtleSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBWZWN0b3I8Y2hh
cj4gdHJhc2g7Ci0gICAgICAgIGlmICghbV9kYi0+Z2V0KG1faXRlcmF0b3ItPmtleSgpLCB0cmFz
aCkpCisgICAgICAgIGlmICghbV90cmFuc2FjdGlvbi0+Z2V0KG1faXRlcmF0b3ItPmtleSgpLCB0
cmFzaCkpCiAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKG1fZm9yd2FyZCAm
JiBtX2hpZ2hPcGVuICYmIGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1faGln
aEtleSkgPj0gMCkgLy8gaGlnaCBrZXkgbm90IGluY2x1ZGVkIGluIHJhbmdlCkBAIC05MzcsOSAr
OTU1LDkgQEAgYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElE
QktleSoga2V5KQogCiBjbGFzcyBPYmplY3RTdG9yZUN1cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29y
SW1wbENvbW1vbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVD
dXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+
JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBoaWdoS2V5LCBib29s
IGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8T2JqZWN0U3Rv
cmVDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29u
c3QgVmVjdG9yPGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+
JiBoaWdoS2V5LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IE9iamVjdFN0b3JlQ3Vyc29ySW1wbChkYiwgbG93S2V5LCBsb3dP
cGVuLCBoaWdoS2V5LCBoaWdoT3BlbiwgZm9yd2FyZCkpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IE9iamVjdFN0b3JlQ3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwgbG93S2V5LCBsb3dPcGVu
LCBoaWdoS2V5LCBoaWdoT3BlbiwgZm9yd2FyZCkpOwogICAgIH0KIAogICAgIC8vIEN1cnNvcklt
cGxDb21tb24KQEAgLTk0OSw4ICs5NjcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGxv
YWRDdXJyZW50Um93KCk7CiAKIHByaXZhdGU6Ci0gICAgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKExl
dmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgbG93S2V5LCBib29sIGxvd09w
ZW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgaGlnaEtleSwgYm9vbCBoaWdoT3BlbiwgYm9vbCBmb3J3
YXJkKQotICAgICAgICA6IEN1cnNvckltcGxDb21tb24oZGIsIGxvd0tleSwgbG93T3BlbiwgaGln
aEtleSwgaGlnaE9wZW4sIGZvcndhcmQpCisgICAgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKExldmVs
REJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgbG93S2V5LCBi
b29sIGxvd09wZW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgaGlnaEtleSwgYm9vbCBoaWdoT3Blbiwg
Ym9vbCBmb3J3YXJkKQorICAgICAgICA6IEN1cnNvckltcGxDb21tb24odHJhbnNhY3Rpb24sIGxv
d0tleSwgbG93T3BlbiwgaGlnaEtleSwgaGlnaE9wZW4sIGZvcndhcmQpCiAgICAgewogICAgIH0K
IApAQCAtOTg0LDkgKzEwMDIsOSBAQCBib29sIE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6bG9hZEN1
cnJlbnRSb3coKQogCiBjbGFzcyBJbmRleEtleUN1cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1w
bENvbW1vbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhLZXlDdXJzb3JJ
bXBsPiBjcmVhdGUoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBsb3dL
ZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBoaWdoS2V5LCBib29sIGhpZ2hP
cGVuLCBib29sIGZvcndhcmQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhLZXlDdXJzb3JJ
bXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9y
PGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBoaWdoS2V5
LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEluZGV4S2V5Q3Vyc29ySW1wbChkYiwgbG93S2V5LCBsb3dPcGVuLCBoaWdoS2V5
LCBoaWdoT3BlbiwgZm9yd2FyZCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4
S2V5Q3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwgbG93S2V5LCBsb3dPcGVuLCBoaWdoS2V5LCBoaWdo
T3BlbiwgZm9yd2FyZCkpOwogICAgIH0KIAogICAgIC8vIEN1cnNvckltcGxDb21tb24KQEAgLTk5
Nyw4ICsxMDE1LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygp
OwogCiBwcml2YXRlOgotICAgIEluZGV4S2V5Q3Vyc29ySW1wbChMZXZlbERCRGF0YWJhc2UqIGRi
LCBjb25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8
Y2hhcj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKLSAgICAgICAgOiBD
dXJzb3JJbXBsQ29tbW9uKGRiLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXksIGhpZ2hPcGVuLCBm
b3J3YXJkKQorICAgIEluZGV4S2V5Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKKyAgICAg
ICAgOiBDdXJzb3JJbXBsQ29tbW9uKHRyYW5zYWN0aW9uLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hL
ZXksIGhpZ2hPcGVuLCBmb3J3YXJkKQogICAgIHsKICAgICB9CiAKQEAgLTEwMjgsNyArMTA0Niw3
IEBAIGJvb2wgSW5kZXhLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgVmVjdG9y
PGNoYXI+IHByaW1hcnlMZXZlbERCS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoaW5k
ZXhEYXRhS2V5LmRhdGFiYXNlSWQoKSwgaW5kZXhEYXRhS2V5Lm9iamVjdFN0b3JlSWQoKSwgKm1f
cHJpbWFyeUtleSk7CiAKICAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIGlmICghbV9kYi0+
Z2V0KHByaW1hcnlMZXZlbERCS2V5LCByZXN1bHQpKQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+
Z2V0KHByaW1hcnlMZXZlbERCS2V5LCByZXN1bHQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpbnQ2NF90IG9iamVjdFN0b3JlRGF0YVZlcnNpb247CkBAIC0xMDM4LDcgKzEwNTYsNyBA
QCBib29sIEluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBpZiAob2JqZWN0U3RvcmVEYXRhVmVyc2lvbiAhPSBpbmRleERhdGFW
ZXJzaW9uKSB7IC8vIEZJWE1FOiBUaGlzIGlzIHByb2JhYmx5IG5vdCB2ZXJ5IHdlbGwgY292ZXJl
ZCBieSB0aGUgbGF5b3V0IHRlc3RzLgotICAgICAgICBtX2RiLT5yZW1vdmUobV9pdGVyYXRvci0+
a2V5KCkpOworICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZW1vdmUobV9pdGVyYXRvci0+a2V5KCkp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xMDQ3LDkgKzEwNjUsOSBAQCBi
b29sIEluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogCiBjbGFzcyBJbmRleEN1
cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENvbW1vbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5kZXhDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQkRhdGFiYXNlKiBkYiwg
Y29uc3QgVmVjdG9yPGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNo
YXI+JiBoaWdoS2V5LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SW5kZXhDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3Qg
VmVjdG9yPGNoYXI+JiBoaWdoS2V5LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4Q3Vyc29ySW1wbChkYiwgbG93S2V5
LCBsb3dPcGVuLCBoaWdoS2V5LCBoaWdoT3BlbiwgZm9yd2FyZCkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEluZGV4Q3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwgbG93S2V5LCBsb3dPcGVu
LCBoaWdoS2V5LCBoaWdoT3BlbiwgZm9yd2FyZCkpOwogICAgIH0KIAogICAgIC8vIEN1cnNvcklt
cGxDb21tb24KQEAgLTEwNjAsOCArMTA3OCw4IEBAIHB1YmxpYzoKICAgICBib29sIGxvYWRDdXJy
ZW50Um93KCk7CiAKIHByaXZhdGU6Ci0gICAgSW5kZXhDdXJzb3JJbXBsKExldmVsREJEYXRhYmFz
ZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgbG93S2V5LCBib29sIGxvd09wZW4sIGNvbnN0IFZl
Y3RvcjxjaGFyPiYgaGlnaEtleSwgYm9vbCBoaWdoT3BlbiwgYm9vbCBmb3J3YXJkKQotICAgICAg
ICA6IEN1cnNvckltcGxDb21tb24oZGIsIGxvd0tleSwgbG93T3BlbiwgaGlnaEtleSwgaGlnaE9w
ZW4sIGZvcndhcmQpCisgICAgSW5kZXhDdXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgbG93S2V5LCBib29sIGxvd09wZW4sIGNvbnN0
IFZlY3RvcjxjaGFyPiYgaGlnaEtleSwgYm9vbCBoaWdoT3BlbiwgYm9vbCBmb3J3YXJkKQorICAg
ICAgICA6IEN1cnNvckltcGxDb21tb24odHJhbnNhY3Rpb24sIGxvd0tleSwgbG93T3BlbiwgaGln
aEtleSwgaGlnaE9wZW4sIGZvcndhcmQpCiAgICAgewogICAgIH0KIApAQCAtMTA5Niw3ICsxMTE0
LDcgQEAgYm9vbCBJbmRleEN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICBtX3ByaW1h
cnlMZXZlbERCS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoaW5kZXhEYXRhS2V5LmRh
dGFiYXNlSWQoKSwgaW5kZXhEYXRhS2V5Lm9iamVjdFN0b3JlSWQoKSwgKm1fcHJpbWFyeUtleSk7
CiAKICAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIGlmICghbV9kYi0+Z2V0KG1fcHJpbWFy
eUxldmVsREJLZXksIHJlc3VsdCkpCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5nZXQobV9wcmlt
YXJ5TGV2ZWxEQktleSwgcmVzdWx0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaW50
NjRfdCBvYmplY3RTdG9yZURhdGFWZXJzaW9uOwpAQCAtMTEwNiw3ICsxMTI0LDcgQEAgYm9vbCBJ
bmRleEN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgaWYgKG9iamVjdFN0b3JlRGF0YVZlcnNpb24gIT0gaW5kZXhEYXRhVmVyc2lvbikgewot
ICAgICAgICBtX2RiLT5yZW1vdmUobV9pdGVyYXRvci0+a2V5KCkpOworICAgICAgICBtX3RyYW5z
YWN0aW9uLT5yZW1vdmUobV9pdGVyYXRvci0+a2V5KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCkBAIC0xMTE2LDkgKzExMzQsOSBAQCBib29sIEluZGV4Q3Vyc29ySW1wbDo6bG9h
ZEN1cnJlbnRSb3coKQogCiB9CiAKLXN0YXRpYyBib29sIGZpbmRMYXN0SW5kZXhLZXlFcXVhbFRv
KExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgdGFyZ2V0LCBWZWN0b3I8
Y2hhcj4mIGZvdW5kS2V5KQorc3RhdGljIGJvb2wgZmluZExhc3RJbmRleEtleUVxdWFsVG8oTGV2
ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiB0YXJnZXQs
IFZlY3RvcjxjaGFyPiYgZm91bmRLZXkpCiB7Ci0gICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4g
aXQgPSBkYi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBp
dCA9IHRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwogICAgIGl0LT5zZWVrKHRhcmdldCk7
CiAKICAgICBpZiAoIWl0LT5pc1ZhbGlkKCkpCkBAIC0xMTM1LDYgKzExNTMsNyBAQCBzdGF0aWMg
Ym9vbCBmaW5kTGFzdEluZGV4S2V5RXF1YWxUbyhMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIHRhcgogCiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwg
SURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQogeworICAgIEFTU0VSVChtX2N1cnJlbnRU
cmFuc2FjdGlvbik7CiAgICAgYm9vbCBsb3dlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPmxvd2Vy
KCk7CiAgICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPnVwcGVyKCk7CiAgICAg
Ym9vbCBmb3J3YXJkID0gKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRF
IHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQpOwpAQCAtMTE1NSw3ICsxMTc0LDcgQEAg
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc28KICAgICAgICAgdXBwZXJPcGVuID0gdHJ1ZTsgLy8gTm90
IGluY2x1ZGVkLgogCiAgICAgICAgIGlmICghZm9yd2FyZCkgeyAvLyBXZSBuZWVkIGEga2V5IHRo
YXQgZXhpc3RzLgotICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbihtX2Ri
LmdldCgpLCBzdG9wS2V5LCBzdG9wS2V5KSkKKyAgICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0
S2V5TGVzc1RoYW4obV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIHN0b3BLZXksIHN0b3BLZXkp
KQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgdXBwZXJPcGVuID0gZmFs
c2U7CiAgICAgICAgIH0KQEAgLTExNjQsNyArMTE4Myw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1
cnNvCiAgICAgICAgIHVwcGVyT3BlbiA9IHJhbmdlLT51cHBlck9wZW4oKTsKICAgICB9CiAKLSAg
ICBSZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBjdXJzb3IgPSBPYmplY3RTdG9yZUN1cnNv
ckltcGw6OmNyZWF0ZShtX2RiLmdldCgpLCBzdGFydEtleSwgbG93ZXJPcGVuLCBzdG9wS2V5LCB1
cHBlck9wZW4sIGZvcndhcmQpOworICAgIFJlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGN1
cnNvciA9IE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9u
LmdldCgpLCBzdGFydEtleSwgbG93ZXJPcGVuLCBzdG9wS2V5LCB1cHBlck9wZW4sIGZvcndhcmQp
OwogICAgIGlmICghY3Vyc29yLT5maXJzdFNlZWsoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAg
LTExNzMsNiArMTE5Miw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElE
QkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvCiAKIFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRl
eEtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0
aW9uIGRpcmVjdGlvbikKIHsKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwogICAg
IGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigpOwogICAgIGJvb2wgdXBw
ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOwogICAgIGJvb2wgZm9yd2FyZCA9IChk
aXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rpb24gPT0g
SURCQ3Vyc29yOjpORVhUKTsKQEAgLTExOTMsMTggKzEyMTMsMTggQEAgUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5
Q3Vyc29yKGkKICAgICAgICAgdXBwZXJPcGVuID0gZmFsc2U7IC8vIEluY2x1ZGVkLgogCiAgICAg
ICAgIGlmICghZm9yd2FyZCkgeyAvLyBXZSBuZWVkIGEga2V5IHRoYXQgZXhpc3RzLgotICAgICAg
ICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbihtX2RiLmdldCgpLCBzdG9wS2V5LCBz
dG9wS2V5KSkKKyAgICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW4obV9jdXJy
ZW50VHJhbnNhY3Rpb24uZ2V0KCksIHN0b3BLZXksIHN0b3BLZXkpKQogICAgICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICAgICAgdXBwZXJPcGVuID0gZmFsc2U7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgewogICAgICAgICBzdG9wS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKnJhbmdlLT51cHBlcigpLCAwKTsKLSAgICAg
ICAgaWYgKCFmaW5kTGFzdEluZGV4S2V5RXF1YWxUbyhtX2RiLmdldCgpLCBzdG9wS2V5LCBzdG9w
S2V5KSkgLy8gU2VlayB0byB0aGUgKmxhc3QqIGtleSBpbiB0aGUgc2V0IG9mIG5vbi11bmlxdWUg
a2V5cy4KKyAgICAgICAgaWYgKCFmaW5kTGFzdEluZGV4S2V5RXF1YWxUbyhtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwgc3RvcEtleSwgc3RvcEtleSkpIC8vIFNlZWsgdG8gdGhlICpsYXN0KiBr
ZXkgaW4gdGhlIHNldCBvZiBub24tdW5pcXVlIGtleXMuCiAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgdXBwZXJPcGVuID0gcmFuZ2UtPnVwcGVyT3BlbigpOwogICAgIH0KIAotICAgIFJl
ZlB0cjxJbmRleEtleUN1cnNvckltcGw+IGN1cnNvciA9IEluZGV4S2V5Q3Vyc29ySW1wbDo6Y3Jl
YXRlKG1fZGIuZ2V0KCksIHN0YXJ0S2V5LCBsb3dlck9wZW4sIHN0b3BLZXksIHVwcGVyT3Blbiwg
Zm9yd2FyZCk7CisgICAgUmVmUHRyPEluZGV4S2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhL
ZXlDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIHN0YXJ0S2V5
LCBsb3dlck9wZW4sIHN0b3BLZXksIHVwcGVyT3BlbiwgZm9yd2FyZCk7CiAgICAgaWYgKCFjdXJz
b3ItPmZpcnN0U2VlaygpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTIxMyw2ICsxMjMzLDcg
QEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKGkKIAogUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6
OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQogewor
ICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgYm9vbCBsb3dlckJvdW5kID0g
cmFuZ2UgJiYgcmFuZ2UtPmxvd2VyKCk7CiAgICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYg
cmFuZ2UtPnVwcGVyKCk7CiAgICAgYm9vbCBmb3J3YXJkID0gKGRpcmVjdGlvbiA9PSBJREJDdXJz
b3I6Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQpOwpA
QCAtMTIzMywzNyArMTI1NCw1NyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IoaW50NgogICAgICAgICB1
cHBlck9wZW4gPSBmYWxzZTsgLy8gSW5jbHVkZWQuCiAKICAgICAgICAgaWYgKCFmb3J3YXJkKSB7
IC8vIFdlIG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCi0gICAgICAgICAgICBpZiAoIWZpbmRHcmVh
dGVzdEtleUxlc3NUaGFuKG1fZGIuZ2V0KCksIHN0b3BLZXksIHN0b3BLZXkpKQorICAgICAgICAg
ICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbihtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQo
KSwgc3RvcEtleSwgc3RvcEtleSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
ICAgICB1cHBlck9wZW4gPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAg
IHN0b3BLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkLCAqcmFuZ2UtPnVwcGVyKCksIDApOwotICAgICAgICBpZiAoIWZpbmRMYXN0SW5k
ZXhLZXlFcXVhbFRvKG1fZGIuZ2V0KCksIHN0b3BLZXksIHN0b3BLZXkpKSAvLyBTZWVrIHRvIHRo
ZSAqbGFzdCoga2V5IGluIHRoZSBzZXQgb2Ygbm9uLXVuaXF1ZSBrZXlzLgorICAgICAgICBpZiAo
IWZpbmRMYXN0SW5kZXhLZXlFcXVhbFRvKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBzdG9w
S2V5LCBzdG9wS2V5KSkgLy8gU2VlayB0byB0aGUgKmxhc3QqIGtleSBpbiB0aGUgc2V0IG9mIG5v
bi11bmlxdWUga2V5cy4KICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB1cHBlck9wZW4g
PSByYW5nZS0+dXBwZXJPcGVuKCk7CiAgICAgfQogCi0gICAgUmVmUHRyPEluZGV4Q3Vyc29ySW1w
bD4gY3Vyc29yID0gSW5kZXhDdXJzb3JJbXBsOjpjcmVhdGUobV9kYi5nZXQoKSwgc3RhcnRLZXks
IGxvd2VyT3Blbiwgc3RvcEtleSwgdXBwZXJPcGVuLCBmb3J3YXJkKTsKKyAgICBSZWZQdHI8SW5k
ZXhDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRU
cmFuc2FjdGlvbi5nZXQoKSwgc3RhcnRLZXksIGxvd2VyT3Blbiwgc3RvcEtleSwgdXBwZXJPcGVu
LCBmb3J3YXJkKTsKICAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCiAgICAgICAgIHJldHVy
biAwOwogCiAgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7CiB9CiAKLW5hbWVzcGFjZSB7Ci1j
bGFzcyBEdW1teVRyYW5zYWN0aW9uIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24gewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBiZWdpbigpIHt9Ci0gICAgdmlydHVhbCB2
b2lkIGNvbW1pdCgpIHt9Ci0gICAgdmlydHVhbCB2b2lkIHJvbGxiYWNrKCkge30KLX07CitQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmNyZWF0ZVRyYW5zYWN0aW9uKCkKK3sKKyAgICByZXR1cm4gVHJhbnNhY3Rpb246OmNyZWF0
ZSh0aGlzKTsKIH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVUcmFuc2FjdGlvbigpCitQYXNzUmVmUHRyPElE
QkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbjo6Y3JlYXRlKElEQkxldmVsREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9y
ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRyYW5zYWN0aW9uKGJhY2tpbmdTdG9yZSkp
OworfQorCitJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb24o
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQorICAgIDogbV9iYWNraW5nU3Rv
cmUoYmFja2luZ1N0b3JlKQoreworfQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uOjpiZWdpbigpCit7CisgICAgQVNTRVJUKCFtX2JhY2tpbmdTdG9yZS0+bV9jdXJy
ZW50VHJhbnNhY3Rpb24pOworICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlv
biA9IExldmVsREJUcmFuc2FjdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLT5tX2RiLmdldCgp
KTsKK30KKwordm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y29tbWl0
KCkKK3sKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uKTsK
KyAgICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAg
IG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbi5jbGVhcigpOworfQorCit2b2lk
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpyb2xsYmFjaygpCiB7Ci0gICAg
Ly8gRklYTUU6IFdlIG5lZWQgdG8gaW1wbGVtZW50IGEgdHJhbnNhY3Rpb24gYWJzdHJhY3Rpb24g
dGhhdCBhbGxvd3MgZm9yIHJvbGwtYmFja3MsIGFuZCB3cml0ZSB0ZXN0cyBmb3IgaXQuCi0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBEdW1teVRyYW5zYWN0aW9uKCkpOworICAgIEFTU0VSVChtX2Jh
Y2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIG1fYmFja2luZ1N0b3JlLT5t
X2N1cnJlbnRUcmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKKyAgICBtX2JhY2tpbmdTdG9yZS0+bV9j
dXJyZW50VHJhbnNhY3Rpb24uY2xlYXIoKTsKIH0KIAogLy8gRklYTUU6IGRlbGV0ZURhdGFiYXNl
IHNob3VsZCBiZSBwYXJ0IG9mIElEQkJhY2tpbmdTdG9yZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKaW5kZXggNjBmNjIxYS4uOThmNWVhMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3Jl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgK
QEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMZXZlbERCQ29t
cGFyYXRvcjsKIGNsYXNzIExldmVsREJEYXRhYmFzZTsKK2NsYXNzIExldmVsREJUcmFuc2FjdGlv
bjsKIAogY2xhc3MgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJCYWNraW5nU3Rv
cmUgewogcHVibGljOgpAQCAtODAsNiArODEsMTkgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURC
RmFjdG9yeUJhY2tlbmRJbXBsPiBtX2ZhY3Rvcnk7CiAgICAgT3duUHRyPExldmVsREJEYXRhYmFz
ZT4gbV9kYjsKICAgICBPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IG1fY29tcGFyYXRvcjsKKyAg
ICBSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiBtX2N1cnJlbnRUcmFuc2FjdGlvbjsKKworICAg
IGNsYXNzIFRyYW5zYWN0aW9uIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24g
eworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+IGNy
ZWF0ZShJREJMZXZlbERCQmFja2luZ1N0b3JlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBiZWdp
bigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCByb2xsYmFjaygpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgVHJhbnNhY3Rpb24oSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZSopOworICAgICAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlKiBtX2Jh
Y2tpbmdTdG9yZTsKKyAgICB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAK
aW5kZXggZDczNjc1OC4uMTU2Y2I4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCkBAIC0xMDYsNiArMTA2LDggQEAgdm9p
ZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCgpCiAgICAgaWYgKG1fc3RhdGUgPT0g
RmluaXNoZWQpCiAgICAgICAgIHJldHVybjsKIAorICAgIGJvb2wgd2FzUnVubmluZyA9IG1fc3Rh
dGUgPT0gUnVubmluZzsKKwogICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVj
dCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUKICAgICAvLyBhYm9ydCBzdGVw
cyBiZWxvdy4gV2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIG91cnNl
bHZlcwogICAgIC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4KQEAgLTExNiw3
ICsxMTgsOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0KCkKICAgICBt
X3Rhc2tFdmVudFRpbWVyLnN0b3AoKTsKIAogICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKLSAgICBt
X3RyYW5zYWN0aW9uLT5yb2xsYmFjaygpOworICAgIGlmICh3YXNSdW5uaW5nKQorICAgICAgICBt
X3RyYW5zYWN0aW9uLT5yb2xsYmFjaygpOwogCiAgICAgLy8gUnVuIHRoZSBhYm9ydCB0YXNrcywg
aWYgYW55LgogICAgIHdoaWxlICghbV9hYm9ydFRhc2tRdWV1ZS5pc0VtcHR5KCkpIHsK
</data>
<flag name="commit-queue"
          id="87698"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94415</attachid>
            <date>2011-05-23 06:22:05 -0700</date>
            <delta_ts>2011-05-24 03:33:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>88034</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNTIxNTI1MS4uOGFjMzQ0MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE0NTMsNyArMTQ1Myw4IEBAIEVORElGICgpCiBJRiAoRU5BQkxFX0xFVkVMREIp
CiAgICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2xldmVs
ZGIvTGV2ZWxEQkRhdGFiYXNlLmNwcAotICAgICAgICBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJJ
dGVyYXRvci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24u
Y3BwCisgICAgICAgIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2guY3BwCiAgICAg
KQogRU5ESUYgKCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDE4ODg1MjUuLmFiM2U5ZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMzEgQEAKKzIwMTEtMDUtMjMgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbmRleGVkREI6IFN1cHBvcnQgTGV2ZWxEQiB0cmFuc2FjdGlvbnMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTI3MAorCisgICAgICAgIEludHJv
ZHVjZSBMZXZlbERCVHJhbnNhY3Rpb24sIHdoaWNoIGltcGxlbWVudHMgaW4tbWVtb3J5IHRyYW5z
YWN0aW9uCisgICAgICAgIHN1cHBvcnQgb24gdG9wIG9mIExldmVsREIsIGFuZCBob29rIHRoaXMg
dXAgZm9yIEluZGV4ZWREQiB0byB1c2UuCisKKyAgICAgICAgVGhpcyBpcyBhbGwgY292ZXJlZCBi
eSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBw
bGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
ZXZlbERCRGF0YWJhc2U6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFiYXNl
OjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFiYXNlOjpyZW1vdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFiYXNlOjp3cml0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJdGVyYXRvckltcGw6Okl0ZXJhdG9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJdGVyYXRv
ckltcGw6OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6SXRlcmF0b3JJbXBsOjpzZWVrVG9M
YXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okl0ZXJhdG9ySW1wbDo6c2Vlayk6CisgICAgICAgIChX
ZWJDb3JlOjpJdGVyYXRvckltcGw6Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6SXRlcmF0b3JJ
bXBsOjpwcmV2KToKKyAgICAgICAgKFdlYkNvcmU6Okl0ZXJhdG9ySW1wbDo6a2V5KToKKyAgICAg
ICAgKFdlYkNvcmU6Okl0ZXJhdG9ySW1wbDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6TGV2
ZWxEQkRhdGFiYXNlOjpjcmVhdGVJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERC
RGF0YWJhc2U6OmNvbXBhcmF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxE
QkRhdGFiYXNlLmg6CisgICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCSXRlcmF0b3Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJJdGVyYXRvcjo6fkxldmVsREJJdGVyYXRvcik6
CisgICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6TGV2ZWxEQlRyYW5zYWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6Y2xlYXJUcmVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6fkxldmVsREJUcmFuc2FjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OnB1dCk6CisgICAgICAgIChXZWJDb3Jl
OjptYWtlVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6cmVt
b3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6Z2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxldmVsREJUcmFuc2FjdGlvbjo6cm9sbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TGV2
ZWxEQlRyYW5zYWN0aW9uOjpjcmVhdGVJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpMZXZl
bERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjppc1ZhbGlkKToKKyAgICAgICAgKFdl
YkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpzZWVrVG9MYXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpzZWVrKToK
KyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpuZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpw
cmV2KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9y
OjprZXkpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRlcmF0
b3I6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0
ZXJhdG9yOjppc0RlbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9u
OjpUcmVlSXRlcmF0b3I6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2Fj
dGlvbjo6VHJlZUl0ZXJhdG9yOjp+VHJlZUl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okxl
dmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpUcmVlSXRlcmF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJh
dG9yOjpUcmFuc2FjdGlvbkl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFu
c2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6aXNWYWxpZCk6CisgICAgICAgIChXZWJDb3Jl
OjpMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnNlZWtUb0xhc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9y
OjpzZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rp
b25JdGVyYXRvcjo6bmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246
OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnByZXYpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRy
YW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjprZXkpOgorICAgICAgICAoV2ViQ29yZTo6
TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjp2YWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OmhhbmRs
ZUNvbmZsaWN0c0FuZERlbGV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0
aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpmaW5kU21hbGxlc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpmaW5kTGFyZ2VzdCk6
CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OnJlZ2lzdGVySXRlcmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjp1bnJlZ2lzdGVySXRlcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpyZXNldEl0ZXJhdG9y
cyk6CisgICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OkFWTFRyZWVBYnN0cmFj
dG9yOjpnZXRfbGVzcyk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OkFW
TFRyZWVBYnN0cmFjdG9yOjpzZXRfbGVzcyk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJh
bnNhY3Rpb246OkFWTFRyZWVBYnN0cmFjdG9yOjpnZXRfZ3JlYXRlcik6CisgICAgICAgIChXZWJD
b3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OkFWTFRyZWVBYnN0cmFjdG9yOjpzZXRfZ3JlYXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OkFWTFRyZWVBYnN0cmFjdG9y
OjpnZXRfYmFsYW5jZV9mYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0
aW9uOjpBVkxUcmVlQWJzdHJhY3Rvcjo6c2V0X2JhbGFuY2VfZmFjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6QVZMVHJlZUFic3RyYWN0b3I6OmNvbXBhcmVfa2V5
X2tleSk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OkFWTFRyZWVBYnN0
cmFjdG9yOjpjb21wYXJlX2tleV9ub2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFu
c2FjdGlvbjo6QVZMVHJlZUFic3RyYWN0b3I6OmNvbXBhcmVfbm9kZV9ub2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6QVZMVHJlZUFic3RyYWN0b3I6Om51bGwpOgor
ICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9y
Ojp+VHJhbnNhY3Rpb25JdGVyYXRvcik6CisgICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9MZXZl
bERCV3JpdGVCYXRjaC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCV3JpdGVCYXRjaDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJXcml0ZUJhdGNoOjpMZXZlbERCV3Jp
dGVCYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCV3JpdGVCYXRjaDo6fkxldmVsREJX
cml0ZUJhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTbGljZSk6CisgICAgICAgIChXZWJD
b3JlOjpMZXZlbERCV3JpdGVCYXRjaDo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJX
cml0ZUJhdGNoOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQldyaXRlQmF0Y2g6
OmNsZWFyKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0SW50KToKKyAgICAgICAgKFdlYkNvcmU6OnB1dEludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6cHV0U3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldE5ld09iamVjdFN0b3JlSWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6ZGVsZXRlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0TmV3VmVyc2lvbk51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpwdXRPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om5leHRBdXRvSW5jcmVtZW50TnVt
YmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0
c0luT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Zm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OmdldE5ld0lu
ZGV4SWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRl
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0SW5k
ZXhEYXRhRm9yUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRHcmVhdGVzdEtleUxlc3NU
aGFuKToKKyAgICAgICAgKFdlYkNvcmU6OnZlcnNpb25FeGlzdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6ZmluZExhc3RJbmRleEtleUVxdWFsVG8pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRl
VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJlZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OnJvbGxiYWNr
KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAg
KiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6YWJvcnQpOgorCiAyMDExLTA1LTIzICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgU3RyaWN0IFBhc3NPd25QdHIg
YnVpbGQgZml4ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAwOWRmZmUyLi44
YjJkODFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI1MTMsOSArMjUxMywx
MiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVs
ZGIvTGV2ZWxEQkNvbXBhcmF0b3IuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxk
Yi9MZXZlbERCRGF0YWJhc2UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRi
L0xldmVsREJEYXRhYmFzZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xl
dmVsREJJdGVyYXRvci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2
ZWxEQkl0ZXJhdG9yLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxE
QlNsaWNlLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5z
YWN0aW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5z
YWN0aW9uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3Jp
dGVCYXRjaC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0
ZUJhdGNoLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGFlMDVlY2QuLjM1
MzdlYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTg3MSw5ICs4NzEsMTIgQEAKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJDb21wYXJhdG9yLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vbGV2
ZWxkYi9MZXZlbERCSXRlcmF0b3IuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9sZXZlbGRi
L0xldmVsREJJdGVyYXRvci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xldmVs
REJTbGljZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2Fj
dGlvbi5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0
aW9uLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2gu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9CbG9ja0V4Y2VwdGlvbnMuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9tYWMvRW1wdHlQcm90b2NvbERlZmluaXRpb25zLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAyYzUy
NjE4Li5mMWMzNmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMTAxMSwxMiArMTAxMSw5IEBAIFNPVVJD
RVMgKz0gXAogICAgIHBsYXRmb3JtL0xhbmd1YWdlLmNwcCBcCiAgICAgcGxhdGZvcm0vTGVuZ3Ro
LmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9MaW5lRW5kaW5nLmNwcCBcCi0gICAgcGxhdGZvcm0v
bGV2ZWxkYi9MZXZlbERCQ29tcGFyYXRvci5oIFwKICAgICBwbGF0Zm9ybS9sZXZlbGRiL0xldmVs
REJEYXRhYmFzZS5jcHAgXAotICAgIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmgg
XAotICAgIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkl0ZXJhdG9yLmNwcCBcCi0gICAgcGxhdGZv
cm0vbGV2ZWxkYi9MZXZlbERCSXRlcmF0b3IuaCBcCi0gICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZl
bERCU2xpY2UuaCBcCisgICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uY3Bw
IFwKKyAgICBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmNwcCBcCiAgICAgcGxh
dGZvcm0vTGlua0hhc2guY3BwIFwKICAgICBwbGF0Zm9ybS9Mb2dnaW5nLmNwcCBcCiAgICAgcGxh
dGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAgXApAQCAtMTk4OCw2ICsxOTg1LDEyIEBAIEhFQURF
UlMgKz0gXAogICAgIHBsYXRmb3JtL0tpbGxSaW5nLmggXAogICAgIHBsYXRmb3JtL0tVUkwuaCBc
CiAgICAgcGxhdGZvcm0vTGVuZ3RoLmggXAorICAgIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkNv
bXBhcmF0b3IuaCBcCisgICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuaCBcCisg
ICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCSXRlcmF0b3IuaCBcCisgICAgcGxhdGZvcm0vbGV2
ZWxkYi9MZXZlbERCU2xpY2UuaCBcCisgICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNh
Y3Rpb24uaCBcCisgICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRjaC5oIFwKICAg
ICBwbGF0Zm9ybS90ZXh0L0JpZGlSdW5MaXN0LmggXAogICAgIHBsYXRmb3JtL3RleHQvTGluZUVu
ZGluZy5oIFwKICAgICBwbGF0Zm9ybS90ZXh0L1RleHRDaGVja2VyQ2xpZW50LmggXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQy
NzhmM2IuLjBmNWMyZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTI3NDYsMTIgKzI3NDYsMTUgQEAKIAkJOEFGNEU1NTYxMURD
NUEzNjAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEFGNEU1NTMxMURDNUEzNjAwMEVEM0RFIC8q
IFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5oICovOyB9OwogCQk4QUY0RTU1QjExREM1QTYzMDAwRUQz
REUgLyogUGVyZm9ybWFuY2VUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOEFGNEU1NTgxMURDNUE2MzAwMEVEM0RFIC8qIFBlcmZvcm1hbmNl
VGltaW5nLmNwcCAqLzsgfTsKIAkJOEFGNEU1NUMxMURDNUE2MzAwMEVEM0RFIC8qIFBlcmZvcm1h
bmNlVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4QUY0RTU1OTExREM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaCAqLzsgfTsK
KwkJOEMwRTMzNEMxMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJUcmFuc2FjdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QzBFMzM0ODEzOEE5
MkM3MDA4REE5NEYgLyogTGV2ZWxEQlRyYW5zYWN0aW9uLmNwcCAqLzsgfTsKKwkJOEMwRTMzNEQx
MzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEMwRTMzNDkxMzhBOTJDNzAwOERBOTRGIC8q
IExldmVsREJUcmFuc2FjdGlvbi5oICovOyB9OworCQk4QzBFMzM0RTEzOEE5MkM3MDA4REE5NEYg
LyogTGV2ZWxEQldyaXRlQmF0Y2guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOEMwRTMzNEExMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJXcml0ZUJh
dGNoLmNwcCAqLzsgfTsKKwkJOEMwRTMzNEYxMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJXcml0
ZUJhdGNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
QzBFMzM0QjEzOEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQldyaXRlQmF0Y2guaCAqLzsgfTsKIAkJ
OEM2RUE2MTkxMUVGN0UwNDAwRkQ4RUUzIC8qIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEM2RUE2MTcxMUVG
N0UwNDAwRkQ4RUUzIC8qIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwICovOyB9OwogCQk4QzZF
QTYxQTExRUY3RTA0MDBGRDhFRTMgLyogUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEM2RUE2MTgxMUVGN0UwNDAw
RkQ4RUUzIC8qIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCAqLzsgfTsKIAkJOENBREYyQTkxMzVD
N0IzNjAwOUVGNDNGIC8qIExldmVsREJDb21wYXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Q0FERjJBMzEzNUM3QjM2MDA5RUY0M0YgLyogTGV2
ZWxEQkNvbXBhcmF0b3IuaCAqLzsgfTsKIAkJOENBREYyQUExMzVDN0IzNjAwOUVGNDNGIC8qIExl
dmVsREJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4Q0FERjJBNDEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkRhdGFiYXNlLmNwcCAq
LzsgfTsKIAkJOENBREYyQUIxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJEYXRhYmFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOENBREYyQTUxMzVD
N0IzNjAwOUVGNDNGIC8qIExldmVsREJEYXRhYmFzZS5oICovOyB9OwotCQk4Q0FERjJBQzEzNUM3
QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDQURGMkE2MTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZl
bERCSXRlcmF0b3IuY3BwICovOyB9OwogCQk4Q0FERjJBRDEzNUM3QjM2MDA5RUY0M0YgLyogTGV2
ZWxEQkl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4Q0FERjJBNzEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkl0ZXJhdG9yLmggKi87IH07
CiAJCThDQURGMkFFMTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCU2xpY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDQURGMkE4MTM1QzdCMzYwMDlF
RjQzRiAvKiBMZXZlbERCU2xpY2UuaCAqLzsgfTsKIAkJOEY2NzU2MUIxMjg4QjE3QjAwNDdBQ0Ez
IC8qIEV2ZW50UXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDhGNjc1NjE5MTI4OEIxN0IwMDQ3QUNBMyAvKiBFdmVudFF1ZXVlLmggKi87IH07CkBA
IC05MjY2LDEyICs5MjY5LDE1IEBACiAJCThBRjRFNTU4MTFEQzVBNjMwMDBFRDNERSAvKiBQZXJm
b3JtYW5jZVRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
ZXJmb3JtYW5jZVRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThBRjRF
NTU5MTFEQzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5jZVRpbWluZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQZXJmb3JtYW5jZVRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4QUY0RTU1QTExREM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1p
bmcuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBlcmZvcm1hbmNlVGltaW5nLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOEMwRTMzNDgxMzhBOTJDNzAwOERBOTRGIC8qIExl
dmVsREJUcmFuc2FjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBMZXZlbERCVHJhbnNhY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4
QzBFMzM0OTEzOEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQlRyYW5zYWN0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExldmVsREJUcmFuc2FjdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk4QzBFMzM0QTEzOEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQldy
aXRlQmF0Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGV2ZWxE
QldyaXRlQmF0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4QzBFMzM0QjEz
OEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQldyaXRlQmF0Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTGV2ZWxEQldyaXRlQmF0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOEM2RUE2MTcxMUVGN0UwNDAwRkQ4RUUzIC8qIFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5jcHA7IHBhdGggPSBnZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QzZFQTYxODExRUY3RTA0MDBGRDhFRTMg
LyogUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg7IHBhdGggPSBnZW5lcmljL1J1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOENBREYyQTMxMzVD
N0IzNjAwOUVGNDNGIC8qIExldmVsREJDb21wYXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExldmVsREJDb21wYXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCThDQURGMkE0MTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCRGF0YWJhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGV2ZWxEQkRhdGFiYXNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOENBREYyQTUxMzVDN0IzNjAwOUVGNDNGIC8q
IExldmVsREJEYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXZl
bERCRGF0YWJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOENBREYyQTYxMzVD
N0IzNjAwOUVGNDNGIC8qIExldmVsREJJdGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBMZXZlbERCSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4Q0FERjJBNzEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkl0ZXJhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExldmVsREJJdGVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4Q0FERjJBODEzNUM3QjM2MDA5RUY0M0YgLyogTGV2
ZWxEQlNsaWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExldmVsREJTbGlj
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RjY3NTYxOTEyODhCMTdCMDA0N0FD
QTMgLyogRXZlbnRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVu
dFF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTQ4Nyw5ICsxNTQ5Mywx
MiBAQAogCQkJCThDQURGMkEzMTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCQ29tcGFyYXRvci5o
ICovLAogCQkJCThDQURGMkE0MTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCRGF0YWJhc2UuY3Bw
ICovLAogCQkJCThDQURGMkE1MTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCRGF0YWJhc2UuaCAq
LywKLQkJCQk4Q0FERjJBNjEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkl0ZXJhdG9yLmNwcCAq
LywKIAkJCQk4Q0FERjJBNzEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkl0ZXJhdG9yLmggKi8s
CiAJCQkJOENBREYyQTgxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJTbGljZS5oICovLAorCQkJ
CThDMEUzMzQ4MTM4QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCVHJhbnNhY3Rpb24uY3BwICovLAor
CQkJCThDMEUzMzQ5MTM4QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCVHJhbnNhY3Rpb24uaCAqLywK
KwkJCQk4QzBFMzM0QTEzOEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQldyaXRlQmF0Y2guY3BwICov
LAorCQkJCThDMEUzMzRCMTM4QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCV3JpdGVCYXRjaC5oICov
LAogCQkJKTsKIAkJCXBhdGggPSBsZXZlbGRiOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTIyODI4LDYgKzIyODM3LDggQEAKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkgLyog
WFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdFMkUwRjEyRjBGQzlDMDBD
MTMzNzkgLyogWFNTRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDUzNzM1MzEzN0I2NTE4
MDAwMDhEQ0UgLyogWmVyb1BvbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCThDMEUzMzREMTM4QTky
QzcwMDhEQTk0RiAvKiBMZXZlbERCVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCThD
MEUzMzRGMTM4QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCV3JpdGVCYXRjaC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC0yNDcyMyw3ICsyNDczNCw2IEBACiAJCQkJNTFCMjQxN0IwRDkzMUYzRjAwRTgzRjVD
IC8qIExlZ2FjeVdlYkFyY2hpdmVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0U2NUJFQTBF
QUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCThDQURGMkFB
MTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJOENBREYyQUMxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJJdGVyYXRvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NDczMEQ5MDEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODlCNUVBQTExMUU4MDAzRDAwRjIzNjdFIC8qIExpbmVFbmRp
bmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdBRDJGODcwRUM4OUQwNzAwOEFCMDAyIC8qIExp
bmtIYXNoLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU1MDIsNiArMjU1MTIsOCBAQAogCQkJCUUx
QkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTc3RTJFMEUxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0ZpbHRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlGRDUzNzM1MjEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJOEMwRTMzNEMxMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJUcmFu
c2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4QzBFMzM0RTEzOEE5MkM3MDA4REE5NEYg
LyogTGV2ZWxEQldyaXRlQmF0Y2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5jcHAKaW5kZXggZDU2ZjI2
Yy4uMzg2ZjVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9M
ZXZlbERCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIv
TGV2ZWxEQkRhdGFiYXNlLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkxldmVsREJD
b21wYXJhdG9yLmgiCiAjaW5jbHVkZSAiTGV2ZWxEQkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGV2
ZWxEQlNsaWNlLmgiCisjaW5jbHVkZSAiTGV2ZWxEQldyaXRlQmF0Y2guaCIKICNpbmNsdWRlIDxs
ZXZlbGRiL2NvbXBhcmF0b3IuaD4KICNpbmNsdWRlIDxsZXZlbGRiL2RiLmg+CiAjaW5jbHVkZSA8
bGV2ZWxkYi9zbGljZS5oPgpAQCAtMTEwLDE1ICsxMTEsMTUgQEAgUGFzc093blB0cjxMZXZlbERC
RGF0YWJhc2U+IExldmVsREJEYXRhYmFzZTo6b3Blbihjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBj
b25zdAogCiAgICAgcmVzdWx0LT5tX2RiID0gYWRvcHRQdHIoZGIpOwogICAgIHJlc3VsdC0+bV9j
b21wYXJhdG9yQWRhcHRlciA9IGNvbXBhcmF0b3JBZGFwdGVyLnJlbGVhc2UoKTsKKyAgICByZXN1
bHQtPm1fY29tcGFyYXRvciA9IGNvbXBhcmF0b3I7CiAKICAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2UoKTsKIH0KIAotCiBib29sIExldmVsREJEYXRhYmFzZTo6cHV0KGNvbnN0IExldmVsREJTbGlj
ZSYga2V5LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHZhbHVlKQogewogICAgIGxldmVsZGI6OldyaXRl
T3B0aW9ucyB3cml0ZU9wdGlvbnM7Ci0gICAgd3JpdGVPcHRpb25zLnN5bmMgPSBmYWxzZTsKKyAg
ICB3cml0ZU9wdGlvbnMuc3luYyA9IHRydWU7CiAKICAgICByZXR1cm4gbV9kYi0+UHV0KHdyaXRl
T3B0aW9ucywgbWFrZVNsaWNlKGtleSksIG1ha2VTbGljZSh2YWx1ZSkpLm9rKCk7CiB9CkBAIC0x
MjYsNyArMTI3LDcgQEAgYm9vbCBMZXZlbERCRGF0YWJhc2U6OnB1dChjb25zdCBMZXZlbERCU2xp
Y2UmIGtleSwgY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSkKIGJvb2wgTGV2ZWxEQkRhdGFiYXNl
OjpyZW1vdmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXkpCiB7CiAgICAgbGV2ZWxkYjo6V3JpdGVP
cHRpb25zIHdyaXRlT3B0aW9uczsKLSAgICB3cml0ZU9wdGlvbnMuc3luYyA9IGZhbHNlOworICAg
IHdyaXRlT3B0aW9ucy5zeW5jID0gdHJ1ZTsKIAogICAgIHJldHVybiBtX2RiLT5EZWxldGUod3Jp
dGVPcHRpb25zLCBtYWtlU2xpY2Uoa2V5KSkub2soKTsKIH0KQEAgLTE0MSwxMiArMTQyLDkwIEBA
IGJvb2wgTGV2ZWxEQkRhdGFiYXNlOjpnZXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIFZlY3Rv
cjxjaGFyPiYgdmFsdWUpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgTGV2ZWxEQkRhdGFi
YXNlOjp3cml0ZShMZXZlbERCV3JpdGVCYXRjaCYgd3JpdGVCYXRjaCkKK3sKKyAgICBsZXZlbGRi
OjpXcml0ZU9wdGlvbnMgd3JpdGVPcHRpb25zOworICAgIHdyaXRlT3B0aW9ucy5zeW5jID0gdHJ1
ZTsKKworICAgIHJldHVybiBtX2RiLT5Xcml0ZSh3cml0ZU9wdGlvbnMsIHdyaXRlQmF0Y2gubV93
cml0ZUJhdGNoLmdldCgpKS5vaygpOworfQorCituYW1lc3BhY2UgeworY2xhc3MgSXRlcmF0b3JJ
bXBsIDogcHVibGljIExldmVsREJJdGVyYXRvciB7CitwdWJsaWM6CisgICAgfkl0ZXJhdG9ySW1w
bCgpIHsgfTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHNlZWtUb0xhc3QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Vlayhjb25zdCBMZXZlbERC
U2xpY2UmIHRhcmdldCk7CisgICAgdmlydHVhbCB2b2lkIG5leHQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcHJldigpOworICAgIHZpcnR1YWwgTGV2ZWxEQlNsaWNlIGtleSgpIGNvbnN0OworICAgIHZp
cnR1YWwgTGV2ZWxEQlNsaWNlIHZhbHVlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIFdlYkNvcmU6OkxldmVsREJEYXRhYmFzZTsKKyAgICBJdGVyYXRvckltcGwoUGFzc093
blB0cjxsZXZlbGRiOjpJdGVyYXRvcj4pOworCisgICAgT3duUHRyPGxldmVsZGI6Okl0ZXJhdG9y
PiBtX2l0ZXJhdG9yOworfTsKK30KKworSXRlcmF0b3JJbXBsOjpJdGVyYXRvckltcGwoUGFzc093
blB0cjxsZXZlbGRiOjpJdGVyYXRvcj4gaXQpCisgICAgOiBtX2l0ZXJhdG9yKGl0KQoreworfQor
Citib29sIEl0ZXJhdG9ySW1wbDo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faXRl
cmF0b3ItPlZhbGlkKCk7Cit9CisKK3ZvaWQgSXRlcmF0b3JJbXBsOjpzZWVrVG9MYXN0KCkKK3sK
KyAgICBtX2l0ZXJhdG9yLT5TZWVrVG9MYXN0KCk7Cit9CisKK3ZvaWQgSXRlcmF0b3JJbXBsOjpz
ZWVrKGNvbnN0IExldmVsREJTbGljZSYgdGFyZ2V0KQoreworICAgIG1faXRlcmF0b3ItPlNlZWso
bWFrZVNsaWNlKHRhcmdldCkpOworfQorCit2b2lkIEl0ZXJhdG9ySW1wbDo6bmV4dCgpCit7Cisg
ICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgbV9pdGVyYXRvci0+TmV4dCgpOworfQorCit2b2lk
IEl0ZXJhdG9ySW1wbDo6cHJldigpCit7CisgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgbV9p
dGVyYXRvci0+UHJldigpOworfQorCitMZXZlbERCU2xpY2UgSXRlcmF0b3JJbXBsOjprZXkoKSBj
b25zdAoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIHJldHVybiBtYWtlTGV2ZWxEQlNs
aWNlKG1faXRlcmF0b3ItPmtleSgpKTsKK30KKworTGV2ZWxEQlNsaWNlIEl0ZXJhdG9ySW1wbDo6
dmFsdWUoKSBjb25zdAoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIHJldHVybiBtYWtl
TGV2ZWxEQlNsaWNlKG1faXRlcmF0b3ItPnZhbHVlKCkpOworfQorCiBQYXNzT3duUHRyPExldmVs
REJJdGVyYXRvcj4gTGV2ZWxEQkRhdGFiYXNlOjpjcmVhdGVJdGVyYXRvcigpCiB7CiAgICAgT3du
UHRyPGxldmVsZGI6Okl0ZXJhdG9yPiBpID0gYWRvcHRQdHIobV9kYi0+TmV3SXRlcmF0b3IobGV2
ZWxkYjo6UmVhZE9wdGlvbnMoKSkpOwogICAgIGlmICghaSkgLy8gRklYTUU6IERvdWJsZSBjaGVj
ayBpZiB3ZSBhY3R1YWxseSBuZWVkIHRvIGNoZWNrIHRoaXMuCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGV2ZWxEQkl0ZXJhdG9yKGkucmVsZWFzZSgp
KSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJdGVyYXRvckltcGwoaS5yZWxlYXNlKCkpKTsK
K30KKworY29uc3QgTGV2ZWxEQkNvbXBhcmF0b3IqIExldmVsREJEYXRhYmFzZTo6Y29tcGFyYXRv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29tcGFyYXRvcjsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmgKaW5kZXggNTI2
ZDBiOC4uY2JjMjhmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxk
Yi9MZXZlbERCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRi
L0xldmVsREJEYXRhYmFzZS5oCkBAIC00Myw2ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIExldmVsREJDb21wYXJhdG9yOwogY2xhc3MgTGV2ZWxEQkl0ZXJhdG9yOwogY2xhc3Mg
TGV2ZWxEQlNsaWNlOworY2xhc3MgTGV2ZWxEQldyaXRlQmF0Y2g7CiAKIGNsYXNzIExldmVsREJE
YXRhYmFzZSB7CiBwdWJsaWM6CkBAIC01MiwxMiArNTMsMTUgQEAgcHVibGljOgogICAgIGJvb2wg
cHV0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHZhbHVlKTsK
ICAgICBib29sIHJlbW92ZShjb25zdCBMZXZlbERCU2xpY2UmIGtleSk7CiAgICAgYm9vbCBnZXQo
Y29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIFZlY3RvcjxjaGFyPiYgdmFsdWUpOworICAgIGJvb2wg
d3JpdGUoTGV2ZWxEQldyaXRlQmF0Y2gmKTsKICAgICBQYXNzT3duUHRyPExldmVsREJJdGVyYXRv
cj4gY3JlYXRlSXRlcmF0b3IoKTsKKyAgICBjb25zdCBMZXZlbERCQ29tcGFyYXRvciogY29tcGFy
YXRvcigpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIExldmVsREJEYXRhYmFzZSgpOwogCiAgICAg
T3duUHRyPGxldmVsZGI6OkRCPiBtX2RiOworICAgIGNvbnN0IExldmVsREJDb21wYXJhdG9yKiBt
X2NvbXBhcmF0b3I7CiAgICAgT3duUHRyPGxldmVsZGI6OkNvbXBhcmF0b3I+IG1fY29tcGFyYXRv
ckFkYXB0ZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZl
bGRiL0xldmVsREJJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRi
L0xldmVsREJJdGVyYXRvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNTI4
MWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERC
SXRlcmF0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMZXZlbERCSXRlcmF0b3IuaCIKLQotI2lmIEVOQUJM
RShMRVZFTERCKQotCi0jaW5jbHVkZSA8bGV2ZWxkYi9pdGVyYXRvci5oPgotI2luY2x1ZGUgPGxl
dmVsZGIvc2xpY2UuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1MZXZlbERCSXRlcmF0b3I6On5MZXZlbERCSXRlcmF0b3IoKQot
ewotfQotCi1MZXZlbERCSXRlcmF0b3I6OkxldmVsREJJdGVyYXRvcihQYXNzT3duUHRyPGxldmVs
ZGI6Okl0ZXJhdG9yPiBpdCkKLSAgICA6IG1faXRlcmF0b3IoaXQpCi17Ci19Ci0KLXN0YXRpYyBs
ZXZlbGRiOjpTbGljZSBtYWtlU2xpY2UoY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gbGV2ZWxkYjo6U2xpY2UodmFsdWUuZGF0YSgpLCB2YWx1ZS5zaXplKCkpOwotfQot
Ci1zdGF0aWMgTGV2ZWxEQlNsaWNlIG1ha2VMZXZlbERCU2xpY2UobGV2ZWxkYjo6U2xpY2UgcykK
LXsKLSAgICByZXR1cm4gTGV2ZWxEQlNsaWNlKHMuZGF0YSgpLCBzLmRhdGEoKSArIHMuc2l6ZSgp
KTsKLX0KLQotYm9vbCBMZXZlbERCSXRlcmF0b3I6OmlzVmFsaWQoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2l0ZXJhdG9yLT5WYWxpZCgpOwotfQotCi12b2lkIExldmVsREJJdGVyYXRvcjo6c2Vl
a1RvTGFzdCgpCi17Ci0gICAgbV9pdGVyYXRvci0+U2Vla1RvTGFzdCgpOwotfQotCi12b2lkIExl
dmVsREJJdGVyYXRvcjo6c2Vlayhjb25zdCBWZWN0b3I8Y2hhcj4mIHRhcmdldCkKLXsKLSAgICBt
X2l0ZXJhdG9yLT5TZWVrKG1ha2VTbGljZSh0YXJnZXQpKTsKLX0KLQotdm9pZCBMZXZlbERCSXRl
cmF0b3I6Om5leHQoKQotewotICAgIG1faXRlcmF0b3ItPk5leHQoKTsKLX0KLQotdm9pZCBMZXZl
bERCSXRlcmF0b3I6OnByZXYoKQotewotICAgIG1faXRlcmF0b3ItPlByZXYoKTsKLX0KLQotTGV2
ZWxEQlNsaWNlIExldmVsREJJdGVyYXRvcjo6a2V5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFr
ZUxldmVsREJTbGljZShtX2l0ZXJhdG9yLT5rZXkoKSk7Ci19Ci0KLUxldmVsREJTbGljZSBMZXZl
bERCSXRlcmF0b3I6OnZhbHVlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZUxldmVsREJTbGlj
ZShtX2l0ZXJhdG9yLT52YWx1ZSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKExFVkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9sZXZlbGRiL0xldmVsREJJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bGV2ZWxkYi9MZXZlbERCSXRlcmF0b3IuaAppbmRleCA3NjhhMWI0Li4xNTI1NWQ2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJJdGVyYXRvci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkl0ZXJhdG9yLmgKQEAg
LTI5LDM2ICsyOSwyMSBAQAogI2lmIEVOQUJMRShMRVZFTERCKQogCiAjaW5jbHVkZSAiTGV2ZWxE
QlNsaWNlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDxPd25QdHIu
aD4KLSNpbmNsdWRlIDxWZWN0b3IuaD4KLQotbmFtZXNwYWNlIGxldmVsZGIgewotY2xhc3MgSXRl
cmF0b3I7Ci19CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTGV2ZWxEQkl0ZXJhdG9y
IHsKIHB1YmxpYzoKLSAgICB+TGV2ZWxEQkl0ZXJhdG9yKCk7Ci0KLSAgICBib29sIGlzVmFsaWQo
KSBjb25zdDsKLSAgICB2b2lkIHNlZWtUb0xhc3QoKTsKLSAgICB2b2lkIHNlZWsoY29uc3QgVmVj
dG9yPGNoYXI+JiB0YXJnZXQpOwotICAgIHZvaWQgbmV4dCgpOwotICAgIHZvaWQgcHJldigpOwot
ICAgIExldmVsREJTbGljZSBrZXkoKSBjb25zdDsKLSAgICBMZXZlbERCU2xpY2UgdmFsdWUoKSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICBMZXZlbERCSXRlcmF0b3IoUGFzc093blB0cjxsZXZlbGRi
OjpJdGVyYXRvcj4pOwotICAgIGZyaWVuZCBjbGFzcyBMZXZlbERCRGF0YWJhc2U7Ci0KLSAgICBP
d25QdHI8bGV2ZWxkYjo6SXRlcmF0b3I+IG1faXRlcmF0b3I7CisgICAgdmlydHVhbCB+TGV2ZWxE
Qkl0ZXJhdG9yKCkgeyB9OworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZWVrVG9MYXN0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZWVr
KGNvbnN0IExldmVsREJTbGljZSYgdGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG5leHQo
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHByZXYoKSA9IDA7CisgICAgdmlydHVhbCBMZXZlbERC
U2xpY2Uga2V5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgTGV2ZWxEQlNsaWNlIHZhbHVlKCkg
Y29uc3QgPSAwOwogfTsKIAotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBF
TkFCTEUoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVs
ZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVs
ZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4zZTAxODU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uY3BwCkBAIC0wLDAgKzEsNDUzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxldmVsREJUcmFuc2FjdGlvbi5oIgorCisj
aW5jbHVkZSAiTGV2ZWxEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiTGV2ZWxEQlNsaWNlLmgiCisj
aW5jbHVkZSAiTGV2ZWxEQldyaXRlQmF0Y2guaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorI2lmIEVOQUJMRShMRVZFTERCKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NS
ZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiBMZXZlbERCVHJhbnNhY3Rpb246OmNyZWF0ZShMZXZl
bERCRGF0YWJhc2UqIGRiKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGV2ZWxEQlRyYW5z
YWN0aW9uKGRiKSk7Cit9CisKK0xldmVsREJUcmFuc2FjdGlvbjo6TGV2ZWxEQlRyYW5zYWN0aW9u
KExldmVsREJEYXRhYmFzZSogZGIpCisgICAgOiBtX2RiKGRiKQorICAgICwgbV9jb21wYXJhdG9y
KGRiLT5jb21wYXJhdG9yKCkpCisgICAgLCBtX2ZpbmlzaGVkKGZhbHNlKQoreworICAgIG1fdHJl
ZS5hYnN0cmFjdG9yKCkubV9jb21wYXJhdG9yID0gbV9jb21wYXJhdG9yOworfQorCit2b2lkIExl
dmVsREJUcmFuc2FjdGlvbjo6Y2xlYXJUcmVlKCkKK3sKKyAgICBUcmVlVHlwZTo6SXRlcmF0b3Ig
aXRlcmF0b3I7CisgICAgaXRlcmF0b3Iuc3RhcnRfaXRlcl9sZWFzdChtX3RyZWUpOworCisgICAg
d2hpbGUgKCppdGVyYXRvcikgeworICAgICAgICBkZWxldGUgKml0ZXJhdG9yOworICAgICAgICAr
K2l0ZXJhdG9yOworICAgIH0KKyAgICBtX3RyZWUucHVyZ2UoKTsKK30KKworTGV2ZWxEQlRyYW5z
YWN0aW9uOjp+TGV2ZWxEQlRyYW5zYWN0aW9uKCkKK3sKKyAgICBjbGVhclRyZWUoKTsKK30KKwor
Ym9vbCBMZXZlbERCVHJhbnNhY3Rpb246OnB1dChjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgY29u
c3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIW1fZmluaXNoZWQpOworICAg
IGJvb2wgbmV3Tm9kZSA9IGZhbHNlOworICAgIEFWTFRyZWVOb2RlKiBub2RlID0gbV90cmVlLnNl
YXJjaChrZXkpOworCisgICAgaWYgKCFub2RlKSB7CisgICAgICAgIG5vZGUgPSBuZXcgQVZMVHJl
ZU5vZGU7CisgICAgICAgIG5vZGUtPmtleSA9IGtleTsKKyAgICAgICAgbV90cmVlLmluc2VydChu
b2RlKTsKKyAgICAgICAgbmV3Tm9kZSA9IHRydWU7CisgICAgfQorICAgIG5vZGUtPnZhbHVlID0g
dmFsdWU7CisgICAgbm9kZS0+ZGVsZXRlZCA9IGZhbHNlOworCisgICAgaWYgKG5ld05vZGUpCisg
ICAgICAgIHJlc2V0SXRlcmF0b3JzKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBW
ZWN0b3I8Y2hhcj4gbWFrZVZlY3Rvcihjb25zdCBMZXZlbERCU2xpY2UmIHNsaWNlKQoreworICAg
IFZlY3RvcjxjaGFyPiB2OworICAgIGZvciAoY29uc3QgY2hhciogY3AgPSBzbGljZS5iZWdpbigp
OyBjcCAhPSBzbGljZS5lbmQoKTsgKytjcCkKKyAgICAgICAgdi5hcHBlbmQoKmNwKTsKKyAgICBy
ZXR1cm4gdjsKK30KKworYm9vbCBMZXZlbERCVHJhbnNhY3Rpb246OnJlbW92ZShjb25zdCBMZXZl
bERCU2xpY2UmIGtleSkKK3sKKyAgICBBU1NFUlQoIW1fZmluaXNoZWQpOworICAgIGJvb2wgbmV3
Tm9kZSA9IGZhbHNlOworICAgIEFWTFRyZWVOb2RlKiBub2RlID0gbV90cmVlLnNlYXJjaChrZXkp
OworCisgICAgaWYgKCFub2RlKSB7CisgICAgICAgIG5vZGUgPSBuZXcgQVZMVHJlZU5vZGU7Cisg
ICAgICAgIG5vZGUtPmtleSA9IG1ha2VWZWN0b3Ioa2V5KTsKKyAgICAgICAgbV90cmVlLmluc2Vy
dChub2RlKTsKKyAgICAgICAgbmV3Tm9kZSA9IHRydWU7CisgICAgfQorICAgIG5vZGUtPnZhbHVl
ID0gVmVjdG9yPGNoYXI+KCk7CisgICAgbm9kZS0+ZGVsZXRlZCA9IHRydWU7CisKKyAgICBpZiAo
bmV3Tm9kZSkKKyAgICAgICAgcmVzZXRJdGVyYXRvcnMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBMZXZlbERCVHJhbnNhY3Rpb246OmdldChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwg
VmVjdG9yPGNoYXI+JiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIW1fZmluaXNoZWQpOworICAgIEFW
TFRyZWVOb2RlKiBub2RlID0gbV90cmVlLnNlYXJjaChrZXkpOworCisgICAgaWYgKG5vZGUpIHsK
KyAgICAgICAgaWYgKG5vZGUtPmRlbGV0ZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgdmFsdWUgPSBub2RlLT52YWx1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIG1fZGItPmdldChrZXksIHZhbHVlKTsKK30KKworYm9vbCBMZXZlbERC
VHJhbnNhY3Rpb246OmNvbW1pdCgpCit7CisgICAgQVNTRVJUKCFtX2ZpbmlzaGVkKTsKKyAgICBP
d25QdHI8TGV2ZWxEQldyaXRlQmF0Y2g+IHdyaXRlQmF0Y2ggPSBMZXZlbERCV3JpdGVCYXRjaDo6
Y3JlYXRlKCk7CisKKyAgICBUcmVlVHlwZTo6SXRlcmF0b3IgaXRlcmF0b3I7CisgICAgaXRlcmF0
b3Iuc3RhcnRfaXRlcl9sZWFzdChtX3RyZWUpOworCisgICAgd2hpbGUgKCppdGVyYXRvcikgewor
ICAgICAgICBBVkxUcmVlTm9kZSogbm9kZSA9ICppdGVyYXRvcjsKKyAgICAgICAgaWYgKCFub2Rl
LT5kZWxldGVkKQorICAgICAgICAgICAgd3JpdGVCYXRjaC0+cHV0KG5vZGUtPmtleSwgbm9kZS0+
dmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3cml0ZUJhdGNoLT5yZW1vdmUobm9k
ZS0+a2V5KTsKKyAgICAgICAgKytpdGVyYXRvcjsKKyAgICB9CisKKyAgICBpZiAoIW1fZGItPndy
aXRlKCp3cml0ZUJhdGNoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2xlYXJUcmVl
KCk7CisgICAgbV9maW5pc2hlZCA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
TGV2ZWxEQlRyYW5zYWN0aW9uOjpyb2xsYmFjaygpCit7CisgICAgQVNTRVJUKCFtX2ZpbmlzaGVk
KTsKKyAgICBtX2ZpbmlzaGVkID0gdHJ1ZTsKKyAgICBjbGVhclRyZWUoKTsKK30KKworUGFzc093
blB0cjxMZXZlbERCSXRlcmF0b3I+IExldmVsREJUcmFuc2FjdGlvbjo6Y3JlYXRlSXRlcmF0b3Io
KQoreworICAgIHJldHVybiBUcmFuc2FjdGlvbkl0ZXJhdG9yOjpjcmVhdGUodGhpcyk7Cit9CisK
K1Bhc3NPd25QdHI8TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I+IExldmVsREJUcmFu
c2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRyZWVJdGVyYXRvcih0cmFuc2FjdGlv
bikpOworfQorCitib29sIExldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjppc1ZhbGlk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1faXRlcmF0b3I7Cit9CisKK3ZvaWQgTGV2ZWxEQlRy
YW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I6OnNlZWtUb0xhc3QoKQoreworICAgIG1faXRlcmF0b3Iu
c3RhcnRfaXRlcl9ncmVhdGVzdCgqbV90cmVlKTsKKyAgICBpZiAoaXNWYWxpZCgpKQorICAgICAg
ICBtX2tleSA9ICgqbV9pdGVyYXRvciktPmtleTsKK30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rp
b246OlRyZWVJdGVyYXRvcjo6c2Vlayhjb25zdCBMZXZlbERCU2xpY2UmIHRhcmdldCkKK3sKKyAg
ICBtX2l0ZXJhdG9yLnN0YXJ0X2l0ZXIoKm1fdHJlZSwgdGFyZ2V0LCBUcmVlVHlwZTo6RVFVQUwp
OworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICBtX2l0ZXJhdG9yLnN0YXJ0X2l0ZXIoKm1f
dHJlZSwgdGFyZ2V0LCBUcmVlVHlwZTo6R1JFQVRFUik7CisKKyAgICBpZiAoaXNWYWxpZCgpKQor
ICAgICAgICBtX2tleSA9ICgqbV9pdGVyYXRvciktPmtleTsKK30KKwordm9pZCBMZXZlbERCVHJh
bnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6bmV4dCgpCit7CisgICAgQVNTRVJUKGlzVmFsaWQoKSk7
CisgICAgKyttX2l0ZXJhdG9yOworICAgIGlmIChpc1ZhbGlkKCkpIHsKKyAgICAgICAgQVNTRVJU
KG1fdHJhbnNhY3Rpb24tPm1fY29tcGFyYXRvci0+Y29tcGFyZSgoKm1faXRlcmF0b3IpLT5rZXks
IG1fa2V5KSA+IDApOworICAgICAgICBtX2tleSA9ICgqbV9pdGVyYXRvciktPmtleTsKKyAgICB9
Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I6OnByZXYoKQorewor
ICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIC0tbV9pdGVyYXRvcjsKKyAgICBpZiAoaXNWYWxp
ZCgpKSB7CisgICAgICAgIEFTU0VSVChtX3RyZWUtPmFic3RyYWN0b3IoKS5tX2NvbXBhcmF0b3It
PmNvbXBhcmUoKCptX2l0ZXJhdG9yKS0+a2V5LCBtX2tleSkgPCAwKTsKKyAgICAgICAgbV9rZXkg
PSAoKm1faXRlcmF0b3IpLT5rZXk7CisgICAgfQorfQorCitMZXZlbERCU2xpY2UgTGV2ZWxEQlRy
YW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I6OmtleSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzVmFs
aWQoKSk7CisgICAgcmV0dXJuIG1fa2V5OworfQorCitMZXZlbERCU2xpY2UgTGV2ZWxEQlRyYW5z
YWN0aW9uOjpUcmVlSXRlcmF0b3I6OnZhbHVlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNWYWxp
ZCgpKTsKKyAgICBBU1NFUlQoIWlzRGVsZXRlZCgpKTsKKyAgICByZXR1cm4gKCptX2l0ZXJhdG9y
KS0+dmFsdWU7Cit9CisKK2Jvb2wgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I6Omlz
RGVsZXRlZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgcmV0dXJuICgq
bV9pdGVyYXRvciktPmRlbGV0ZWQ7Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVl
SXRlcmF0b3I6OnJlc2V0KCkKK3sKKyAgICAvLyBGSVhNRTogQmUgbGF6eTogc2V0IGEgZmxhZyBh
bmQgZG8gdGhlIGFjdHVhbCByZXNldCBuZXh0IHRpbWUgd2UgdXNlIHRoZSBpdGVyYXRvci4KKyAg
ICBpZiAoaXNWYWxpZCgpKSB7CisgICAgICAgIG1faXRlcmF0b3Iuc3RhcnRfaXRlcigqbV90cmVl
LCBtX2tleSwgVHJlZVR5cGU6OkVRVUFMKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7Cisg
ICAgfQorfQorCitMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6flRyZWVJdGVyYXRv
cigpCit7CisgICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3Rlckl0ZXJhdG9yKHRoaXMpOworfTsK
KworTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I6OlRyZWVJdGVyYXRvcihMZXZlbERC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAgIDogbV90cmVlKCZ0cmFuc2FjdGlvbi0+bV90
cmVlKQorICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKK3sKKyAgICB0cmFuc2FjdGlv
bi0+cmVnaXN0ZXJJdGVyYXRvcih0aGlzKTsKK30KKworUGFzc093blB0cjxMZXZlbERCVHJhbnNh
Y3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I+IExldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rp
b25JdGVyYXRvcjo6Y3JlYXRlKFBhc3NSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiB0cmFuc2Fj
dGlvbikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRyYW5zYWN0aW9uSXRlcmF0b3IodHJh
bnNhY3Rpb24pKTsKK30KKworTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9y
OjpUcmFuc2FjdGlvbkl0ZXJhdG9yKFBhc3NSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiB0cmFu
c2FjdGlvbikKKyAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgLCBtX2NvbXBh
cmF0b3IobV90cmFuc2FjdGlvbi0+bV9jb21wYXJhdG9yKQorICAgICwgbV90cmVlSXRlcmF0b3Io
VHJlZUl0ZXJhdG9yOjpjcmVhdGUobV90cmFuc2FjdGlvbi5nZXQoKSkpCisgICAgLCBtX2RiSXRl
cmF0b3IobV90cmFuc2FjdGlvbi0+bV9kYi0+Y3JlYXRlSXRlcmF0b3IoKSkKKyAgICAsIG1fY3Vy
cmVudCgwKQorICAgICwgbV9kaXJlY3Rpb24oa0ZvcndhcmQpCit7Cit9CisKK2Jvb2wgTGV2ZWxE
QlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjppc1ZhbGlkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jdXJyZW50OworfQorCit2b2lkIExldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNh
Y3Rpb25JdGVyYXRvcjo6c2Vla1RvTGFzdCgpCit7CisgICAgbV90cmVlSXRlcmF0b3ItPnNlZWtU
b0xhc3QoKTsKKyAgICBtX2RiSXRlcmF0b3ItPnNlZWtUb0xhc3QoKTsKKyAgICBtX2RpcmVjdGlv
biA9IGtSZXZlcnNlOworCisgICAgaGFuZGxlQ29uZmxpY3RzQW5kRGVsZXRlcygpOworICAgIGZp
bmRMYXJnZXN0KCk7Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0
ZXJhdG9yOjpzZWVrKGNvbnN0IExldmVsREJTbGljZSYgdGFyZ2V0KQoreworICAgIG1fdHJlZUl0
ZXJhdG9yLT5zZWVrKHRhcmdldCk7CisgICAgbV9kYkl0ZXJhdG9yLT5zZWVrKHRhcmdldCk7Cisg
ICAgbV9kaXJlY3Rpb24gPSBrRm9yd2FyZDsKKworICAgIGhhbmRsZUNvbmZsaWN0c0FuZERlbGV0
ZXMoKTsKKyAgICBmaW5kU21hbGxlc3QoKTsKK30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246
OlRyYW5zYWN0aW9uSXRlcmF0b3I6Om5leHQoKQoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOwor
CisgICAgaWYgKG1fZGlyZWN0aW9uICE9IGtGb3J3YXJkKSB7CisgICAgICAgIC8vIEVuc3VyZSB0
aGUgbm9uLWN1cnJlbnQgaXRlcmF0b3IgaXMgcG9zaXRpb25lZCBhZnRlciBrZXkoKS4KKworICAg
ICAgICBpZiAobV9jdXJyZW50ICE9IG1fdHJlZUl0ZXJhdG9yLmdldCgpKSB7CisgICAgICAgICAg
ICBtX3RyZWVJdGVyYXRvci0+c2VlayhtX2N1cnJlbnQtPmtleSgpKTsKKyAgICAgICAgICAgIGlm
IChtX3RyZWVJdGVyYXRvci0+aXNWYWxpZCgpICYmICFtX2NvbXBhcmF0b3ItPmNvbXBhcmUobV90
cmVlSXRlcmF0b3ItPmtleSgpLCBrZXkoKSkpCisgICAgICAgICAgICAgICAgbV90cmVlSXRlcmF0
b3ItPm5leHQoKTsKKworICAgICAgICAgICAgQVNTRVJUKCFtX3RyZWVJdGVyYXRvci0+aXNWYWxp
ZCgpIHx8IG1fY29tcGFyYXRvci0+Y29tcGFyZShtX3RyZWVJdGVyYXRvci0+a2V5KCksIGtleSgp
KSA+IDApOworICAgICAgICB9IGVsc2UgaWYgKG1fY3VycmVudCAhPSBtX2RiSXRlcmF0b3IuZ2V0
KCkpIHsKKyAgICAgICAgICAgIG1fZGJJdGVyYXRvci0+c2VlayhtX2N1cnJlbnQtPmtleSgpKTsK
KyAgICAgICAgICAgIGlmIChtX2RiSXRlcmF0b3ItPmlzVmFsaWQoKSAmJiAhbV9jb21wYXJhdG9y
LT5jb21wYXJlKG1fZGJJdGVyYXRvci0+a2V5KCksIGtleSgpKSkKKyAgICAgICAgICAgICAgICBt
X2RiSXRlcmF0b3ItPm5leHQoKTsKKworICAgICAgICAgICAgQVNTRVJUKCFtX2RiSXRlcmF0b3It
PmlzVmFsaWQoKSB8fCBtX2NvbXBhcmF0b3ItPmNvbXBhcmUobV9kYkl0ZXJhdG9yLT5rZXkoKSwg
a2V5KCkpID4gMCk7CisgICAgICAgIH0KKworICAgICAgICBtX2RpcmVjdGlvbiA9IGtGb3J3YXJk
OworICAgIH0KKworICAgIG1fY3VycmVudC0+bmV4dCgpOworICAgIGhhbmRsZUNvbmZsaWN0c0Fu
ZERlbGV0ZXMoKTsKKyAgICBmaW5kU21hbGxlc3QoKTsKK30KKwordm9pZCBMZXZlbERCVHJhbnNh
Y3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnByZXYoKQoreworICAgIEFTU0VSVChpc1ZhbGlk
KCkpOworCisgICAgaWYgKG1fZGlyZWN0aW9uICE9IGtSZXZlcnNlKSB7CisgICAgICAgIC8vIEVu
c3VyZSB0aGUgbm9uLWN1cnJlbnQgaXRlcmF0b3IgaXMgcG9zaXRpb25lZCBiZWZvcmUga2V5KCk7
CisKKyAgICAgICAgaWYgKG1fY3VycmVudCAhPSBtX3RyZWVJdGVyYXRvci5nZXQoKSkgeworICAg
ICAgICAgICAgbV90cmVlSXRlcmF0b3ItPnNlZWsobV9jdXJyZW50LT5rZXkoKSk7CisKKyAgICAg
ICAgICAgIGlmIChtX3RyZWVJdGVyYXRvci0+aXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIG1f
dHJlZUl0ZXJhdG9yLT5wcmV2KCk7IC8vIEl0ZXJhdG9yIGlzIGF0IGZpcnN0IGVudHJ5ID49IGtl
eSgpLiBTdGVwIGJhY2sgb25jZSB0byBlbnRyeSA8IGtleS4KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBtX3RyZWVJdGVyYXRvci0+c2Vla1RvTGFzdCgpOyAvLyBJdGVyYXRvciBo
YXMgbm8gZW50cmllcyA+PSBrZXkoKS4gUG9zaXRpb24gYXQgbGFzdCBlbnRyeS4KKworICAgICAg
ICAgICAgQVNTRVJUKCFtX3RyZWVJdGVyYXRvci0+aXNWYWxpZCgpIHx8IG1fY29tcGFyYXRvci0+
Y29tcGFyZShtX3RyZWVJdGVyYXRvci0+a2V5KCksIGtleSgpKSA8IDApOworICAgICAgICB9IGVs
c2UgaWYgKG1fY3VycmVudCAhPSBtX2RiSXRlcmF0b3IuZ2V0KCkpIHsKKyAgICAgICAgICAgIG1f
ZGJJdGVyYXRvci0+c2VlayhtX2N1cnJlbnQtPmtleSgpKTsKKworICAgICAgICAgICAgaWYgKG1f
ZGJJdGVyYXRvci0+aXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIG1fZGJJdGVyYXRvci0+cHJl
digpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZGJJdGVyYXRvci0+c2Vl
a1RvTGFzdCgpOworCisgICAgICAgICAgICBBU1NFUlQoIW1fZGJJdGVyYXRvci0+aXNWYWxpZCgp
IHx8IG1fY29tcGFyYXRvci0+Y29tcGFyZShtX2RiSXRlcmF0b3ItPmtleSgpLCBrZXkoKSkgPCAw
KTsKKyAgICAgICAgIH0KKworICAgICAgICBtX2RpcmVjdGlvbiA9IGtSZXZlcnNlOworICAgIH0K
KworICAgIG1fY3VycmVudC0+cHJldigpOworICAgIGhhbmRsZUNvbmZsaWN0c0FuZERlbGV0ZXMo
KTsKKyAgICBmaW5kTGFyZ2VzdCgpOworfQorCitMZXZlbERCU2xpY2UgTGV2ZWxEQlRyYW5zYWN0
aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjprZXkoKSBjb25zdAoreworICAgIEFTU0VSVChpc1Zh
bGlkKCkpOworICAgIHJldHVybiBtX2N1cnJlbnQtPmtleSgpOworfQorCitMZXZlbERCU2xpY2Ug
TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjp2YWx1ZSgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgcmV0dXJuIG1fY3VycmVudC0+dmFsdWUoKTsK
K30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OmhhbmRs
ZUNvbmZsaWN0c0FuZERlbGV0ZXMoKQoreworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKG1f
dHJlZUl0ZXJhdG9yLT5pc1ZhbGlkKCkgJiYgbV9kYkl0ZXJhdG9yLT5pc1ZhbGlkKCkgJiYgIW1f
Y29tcGFyYXRvci0+Y29tcGFyZShtX3RyZWVJdGVyYXRvci0+a2V5KCksIG1fZGJJdGVyYXRvci0+
a2V5KCkpKSB7CisgICAgICAgICAgICAvLyBGb3IgZXF1YWwga2V5cywgdGhlIHRyZWUgaXRlcmF0
b3IgdGFrZXMgcHJlY2VkZW5jZSwgc28gbW92ZSB0aGUgZGF0YWJhc2UgaXRlcmF0b3IgYW5vdGhl
ciBzdGVwLgorICAgICAgICAgICAgaWYgKG1fZGlyZWN0aW9uID09IGtGb3J3YXJkKQorICAgICAg
ICAgICAgICAgIG1fZGJJdGVyYXRvci0+bmV4dCgpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG1fZGJJdGVyYXRvci0+cHJldigpOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobV90cmVlSXRlcmF0b3ItPmlzVmFsaWQoKSAmJiBtX3Ry
ZWVJdGVyYXRvci0+aXNEZWxldGVkKCkpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSB0cmVlIGl0
ZXJhdG9yIGlzIG9uIGEgZGVsZXRlIG1hcmtlciwgdGFrZSBhbm90aGVyIHN0ZXAuCisgICAgICAg
ICAgICBpZiAobV9kaXJlY3Rpb24gPT0ga0ZvcndhcmQpCisgICAgICAgICAgICAgICAgbV90cmVl
SXRlcmF0b3ItPm5leHQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Ry
ZWVJdGVyYXRvci0+cHJldigpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIExldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNh
Y3Rpb25JdGVyYXRvcjo6ZmluZFNtYWxsZXN0KCkKK3sKKyAgICBMZXZlbERCSXRlcmF0b3IqIHNt
YWxsZXN0ID0gMDsKKworICAgIGlmIChtX3RyZWVJdGVyYXRvci0+aXNWYWxpZCgpKQorICAgICAg
ICBzbWFsbGVzdCA9IG1fdHJlZUl0ZXJhdG9yLmdldCgpOworCisgICAgaWYgKG1fZGJJdGVyYXRv
ci0+aXNWYWxpZCgpKSB7CisgICAgICAgIGlmICghc21hbGxlc3QpCisgICAgICAgICAgICBzbWFs
bGVzdCA9IG1fZGJJdGVyYXRvci5nZXQoKTsKKyAgICAgICAgZWxzZSBpZiAobV9jb21wYXJhdG9y
LT5jb21wYXJlKG1fZGJJdGVyYXRvci0+a2V5KCksIHNtYWxsZXN0LT5rZXkoKSkgPCAwKQorICAg
ICAgICAgICAgc21hbGxlc3QgPSBtX2RiSXRlcmF0b3IuZ2V0KCk7CisgICAgfQorCisgICAgbV9j
dXJyZW50ID0gc21hbGxlc3Q7Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2Fj
dGlvbkl0ZXJhdG9yOjpmaW5kTGFyZ2VzdCgpCit7CisgICAgTGV2ZWxEQkl0ZXJhdG9yKiBsYXJn
ZXN0ID0gMDsKKworICAgIGlmIChtX3RyZWVJdGVyYXRvci0+aXNWYWxpZCgpKQorICAgICAgICBs
YXJnZXN0ID0gbV90cmVlSXRlcmF0b3IuZ2V0KCk7CisKKyAgICBpZiAobV9kYkl0ZXJhdG9yLT5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgaWYgKCFsYXJnZXN0KQorICAgICAgICAgICAgbGFyZ2VzdCA9
IG1fZGJJdGVyYXRvci5nZXQoKTsKKyAgICAgICAgZWxzZSBpZiAobV9jb21wYXJhdG9yLT5jb21w
YXJlKG1fZGJJdGVyYXRvci0+a2V5KCksIGxhcmdlc3QtPmtleSgpKSA+IDApCisgICAgICAgICAg
ICBsYXJnZXN0ID0gbV9kYkl0ZXJhdG9yLmdldCgpOworICAgIH0KKworICAgIG1fY3VycmVudCA9
IGxhcmdlc3Q7Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpyZWdpc3Rlckl0ZXJhdG9y
KFRyZWVJdGVyYXRvciogaXRlcmF0b3IpCit7CisgICAgQVNTRVJUKCFtX3RyZWVJdGVyYXRvcnMu
Y29udGFpbnMoaXRlcmF0b3IpKTsKKyAgICBtX3RyZWVJdGVyYXRvcnMuYWRkKGl0ZXJhdG9yKTsK
K30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OnVucmVnaXN0ZXJJdGVyYXRvcihUcmVlSXRl
cmF0b3IqIGl0ZXJhdG9yKQoreworICAgIEFTU0VSVChtX3RyZWVJdGVyYXRvcnMuY29udGFpbnMo
aXRlcmF0b3IpKTsKKyAgICBtX3RyZWVJdGVyYXRvcnMucmVtb3ZlKGl0ZXJhdG9yKTsKK30KKwor
dm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OnJlc2V0SXRlcmF0b3JzKCkKK3sKKyAgICBmb3IgKEhh
c2hTZXQ8VHJlZUl0ZXJhdG9yKj46Oml0ZXJhdG9yIGkgPSBtX3RyZWVJdGVyYXRvcnMuYmVnaW4o
KTsgaSAhPSBtX3RyZWVJdGVyYXRvcnMuZW5kKCk7ICsraSkgeworICAgICAgICBUcmVlSXRlcmF0
b3IqIHRyZWVJdGVyYXRvciA9ICppOworICAgICAgICB0cmVlSXRlcmF0b3ItPnJlc2V0KCk7Cisg
ICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTEVW
RUxEQikKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMTkzMDEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5oCkBAIC0w
LDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMZXZlbERCVHJhbnNhY3Rpb25faAorI2RlZmlu
ZSBMZXZlbERCVHJhbnNhY3Rpb25faAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisj
aWYgRU5BQkxFKExFVkVMREIpCisKKyNpbmNsdWRlICJMZXZlbERCQ29tcGFyYXRvci5oIgorI2lu
Y2x1ZGUgIkxldmVsREJJdGVyYXRvci5oIgorI2luY2x1ZGUgIkxldmVsREJTbGljZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9BVkxUcmVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExldmVsREJEYXRh
YmFzZTsKKwordXNpbmcgV1RGOjpBVkxUcmVlOworCitjbGFzcyBMZXZlbERCVHJhbnNhY3Rpb24g
OiBwdWJsaWMgUmVmQ291bnRlZDxMZXZlbERCVHJhbnNhY3Rpb24+IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxMZXZlbERCVHJhbnNhY3Rpb24+IGNyZWF0ZShMZXZlbERCRGF0YWJh
c2UqKTsKKworICAgIH5MZXZlbERCVHJhbnNhY3Rpb24oKTsKKyAgICBib29sIHB1dChjb25zdCBW
ZWN0b3I8Y2hhcj4mIGtleSwgY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSk7CisgICAgYm9vbCBy
ZW1vdmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXkpOworICAgIGJvb2wgZ2V0KGNvbnN0IExldmVs
REJTbGljZSYga2V5LCBWZWN0b3I8Y2hhcj4mIHZhbHVlKTsKKyAgICBib29sIGNvbW1pdCgpOwor
ICAgIHZvaWQgcm9sbGJhY2soKTsKKworICAgIFBhc3NPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBj
cmVhdGVJdGVyYXRvcigpOworCitwcml2YXRlOgorICAgIExldmVsREJUcmFuc2FjdGlvbihMZXZl
bERCRGF0YWJhc2UqKTsKKworICAgIHN0cnVjdCBBVkxUcmVlTm9kZSB7CisgICAgICAgIFZlY3Rv
cjxjaGFyPiBrZXk7CisgICAgICAgIFZlY3RvcjxjaGFyPiB2YWx1ZTsKKyAgICAgICAgYm9vbCBk
ZWxldGVkOworCisgICAgICAgIEFWTFRyZWVOb2RlKiBsZXNzOworICAgICAgICBBVkxUcmVlTm9k
ZSogZ3JlYXRlcjsKKyAgICAgICAgaW50IGJhbGFuY2VGYWN0b3I7CisgICAgfTsKKworICAgIHN0
cnVjdCBBVkxUcmVlQWJzdHJhY3RvciB7CisgICAgICAgIHR5cGVkZWYgQVZMVHJlZU5vZGUqIGhh
bmRsZTsKKyAgICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZTsKKyAgICAgICAgdHlwZWRlZiBMZXZl
bERCU2xpY2Uga2V5OworCisgICAgICAgIGhhbmRsZSBnZXRfbGVzcyhoYW5kbGUgaCkgeyByZXR1
cm4gaC0+bGVzczsgfQorICAgICAgICB2b2lkIHNldF9sZXNzKGhhbmRsZSBoLCBoYW5kbGUgbGVz
cykgeyBoLT5sZXNzID0gbGVzczsgfQorICAgICAgICBoYW5kbGUgZ2V0X2dyZWF0ZXIoaGFuZGxl
IGgpIHsgcmV0dXJuIGgtPmdyZWF0ZXI7IH0KKyAgICAgICAgdm9pZCBzZXRfZ3JlYXRlcihoYW5k
bGUgaCwgaGFuZGxlIGdyZWF0ZXIpIHsgaC0+Z3JlYXRlciA9IGdyZWF0ZXI7IH0KKworICAgICAg
ICBpbnQgZ2V0X2JhbGFuY2VfZmFjdG9yKGhhbmRsZSBoKSB7IHJldHVybiBoLT5iYWxhbmNlRmFj
dG9yOyB9CisgICAgICAgIHZvaWQgc2V0X2JhbGFuY2VfZmFjdG9yKGhhbmRsZSBoLCBpbnQgYmYp
IHsgaC0+YmFsYW5jZUZhY3RvciA9IGJmOyB9CisKKyAgICAgICAgaW50IGNvbXBhcmVfa2V5X2tl
eShjb25zdCBrZXkmIGthLCBjb25zdCBrZXkmIGtiKSB7IHJldHVybiBtX2NvbXBhcmF0b3ItPmNv
bXBhcmUoa2EsIGtiKTsgfQorICAgICAgICBpbnQgY29tcGFyZV9rZXlfbm9kZShjb25zdCBrZXkm
IGssIGhhbmRsZSBoKSB7IHJldHVybiBjb21wYXJlX2tleV9rZXkoaywgaC0+a2V5KTsgfQorICAg
ICAgICBpbnQgY29tcGFyZV9ub2RlX25vZGUoaGFuZGxlIGhhLCBoYW5kbGUgaGIpIHsgcmV0dXJu
IGNvbXBhcmVfa2V5X2tleShoYS0+a2V5LCBoYi0+a2V5KTsgfQorCisgICAgICAgIHN0YXRpYyBo
YW5kbGUgbnVsbCgpIHsgcmV0dXJuIDA7IH0KKworICAgICAgICBjb25zdCBMZXZlbERCQ29tcGFy
YXRvciogbV9jb21wYXJhdG9yOworICAgIH07CisKKyAgICB0eXBlZGVmIEFWTFRyZWU8QVZMVHJl
ZUFic3RyYWN0b3I+IFRyZWVUeXBlOworCisgICAgY2xhc3MgVHJlZUl0ZXJhdG9yIDogcHVibGlj
IExldmVsREJJdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc093blB0
cjxUcmVlSXRlcmF0b3I+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qKTsKKyAgICAgICAgflRy
ZWVJdGVyYXRvcigpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBzZWVrVG9MYXN0KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBz
ZWVrKGNvbnN0IExldmVsREJTbGljZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgbmV4dCgpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcHJldigpOworICAgICAgICB2aXJ0dWFsIExldmVsREJTbGlj
ZSBrZXkoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBMZXZlbERCU2xpY2UgdmFsdWUoKSBjb25z
dDsKKyAgICAgICAgYm9vbCBpc0RlbGV0ZWQoKSBjb25zdDsKKyAgICAgICAgdm9pZCByZXNldCgp
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgVHJlZUl0ZXJhdG9yKExldmVsREJUcmFuc2FjdGlv
biopOworICAgICAgICBtdXRhYmxlIFRyZWVUeXBlOjpJdGVyYXRvciBtX2l0ZXJhdG9yOyAvLyBE
ZXJlZmVyZW5jaW5nIHRoaXMgaXMgbm9uLWNvbnN0LgorICAgICAgICBUcmVlVHlwZSogbV90cmVl
OworICAgICAgICBMZXZlbERCVHJhbnNhY3Rpb24qIG1fdHJhbnNhY3Rpb247CisgICAgICAgIFZl
Y3RvcjxjaGFyPiBtX2tleTsKKyAgICB9OworCisgICAgY2xhc3MgVHJhbnNhY3Rpb25JdGVyYXRv
ciA6IHB1YmxpYyBMZXZlbERCSXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgflRyYW5z
YWN0aW9uSXRlcmF0b3IoKSB7IH07CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPFRyYW5zYWN0
aW9uSXRlcmF0b3I+IGNyZWF0ZShQYXNzUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4pOworCisg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZWVrVG9MYXN0KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZWVrKGNvbnN0IExldmVsREJT
bGljZSYgdGFyZ2V0KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG5leHQoKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHByZXYoKTsKKyAgICAgICAgdmlydHVhbCBMZXZlbERCU2xpY2Uga2V5KCkgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgTGV2ZWxEQlNsaWNlIHZhbHVlKCkgY29uc3Q7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBUcmFuc2FjdGlvbkl0ZXJhdG9yKFBhc3NSZWZQdHI8TGV2ZWxEQlRy
YW5zYWN0aW9uPik7CisgICAgICAgIHZvaWQgaGFuZGxlQ29uZmxpY3RzQW5kRGVsZXRlcygpOwor
ICAgICAgICB2b2lkIGZpbmRTbWFsbGVzdCgpOworICAgICAgICB2b2lkIGZpbmRMYXJnZXN0KCk7
CisKKyAgICAgICAgUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKyAg
ICAgICAgY29uc3QgTGV2ZWxEQkNvbXBhcmF0b3IqIG1fY29tcGFyYXRvcjsKKyAgICAgICAgT3du
UHRyPFRyZWVJdGVyYXRvcj4gbV90cmVlSXRlcmF0b3I7CisgICAgICAgIE93blB0cjxMZXZlbERC
SXRlcmF0b3I+IG1fZGJJdGVyYXRvcjsKKyAgICAgICAgTGV2ZWxEQkl0ZXJhdG9yKiBtX2N1cnJl
bnQ7CisKKyAgICAgICAgZW51bSBEaXJlY3Rpb24geworICAgICAgICAgICAga0ZvcndhcmQsCisg
ICAgICAgICAgICBrUmV2ZXJzZQorICAgICAgICB9OworICAgICAgICBEaXJlY3Rpb24gbV9kaXJl
Y3Rpb247CisgICAgfTsKKworICAgIHZvaWQgY2xlYXJUcmVlKCk7CisgICAgdm9pZCByZWdpc3Rl
ckl0ZXJhdG9yKFRyZWVJdGVyYXRvciopOworICAgIHZvaWQgdW5yZWdpc3Rlckl0ZXJhdG9yKFRy
ZWVJdGVyYXRvciopOworICAgIHZvaWQgcmVzZXRJdGVyYXRvcnMoKTsKKworICAgIExldmVsREJE
YXRhYmFzZSogbV9kYjsKKyAgICBjb25zdCBMZXZlbERCQ29tcGFyYXRvciogbV9jb21wYXJhdG9y
OworICAgIFRyZWVUeXBlIG1fdHJlZTsKKyAgICBib29sIG1fZmluaXNoZWQ7CisgICAgSGFzaFNl
dDxUcmVlSXRlcmF0b3IqPiBtX3RyZWVJdGVyYXRvcnM7Cit9OworCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoTEVWRUxEQikKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2Vu
ZGlmIC8vIExldmVsREJUcmFuc2FjdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjU3MjQ3NjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmNwcApAQCAtMCwwICsxLDczIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxldmVsREJXcml0ZUJhdGNo
LmgiCisKKyNpZiBFTkFCTEUoTEVWRUxEQikKKworI2luY2x1ZGUgIkxldmVsREJTbGljZS5oIgor
I2luY2x1ZGUgPGxldmVsZGIvc2xpY2UuaD4KKyNpbmNsdWRlIDxsZXZlbGRiL3dyaXRlX2JhdGNo
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxMZXZlbERCV3JpdGVCYXRj
aD4gTGV2ZWxEQldyaXRlQmF0Y2g6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBMZXZlbERCV3JpdGVCYXRjaCk7Cit9CisKK0xldmVsREJXcml0ZUJhdGNoOjpMZXZlbERCV3Jp
dGVCYXRjaCgpCisgICAgOiBtX3dyaXRlQmF0Y2goYWRvcHRQdHIobmV3IGxldmVsZGI6OldyaXRl
QmF0Y2gpKQoreworfQorCitMZXZlbERCV3JpdGVCYXRjaDo6fkxldmVsREJXcml0ZUJhdGNoKCkK
K3sKK30KKworc3RhdGljIGxldmVsZGI6OlNsaWNlIG1ha2VTbGljZShjb25zdCBMZXZlbERCU2xp
Y2UmIHMpCit7CisgICAgcmV0dXJuIGxldmVsZGI6OlNsaWNlKHMuYmVnaW4oKSwgcy5lbmQoKSAt
IHMuYmVnaW4oKSk7Cit9CisKK3ZvaWQgTGV2ZWxEQldyaXRlQmF0Y2g6OnB1dChjb25zdCBMZXZl
bERCU2xpY2UmIGtleSwgY29uc3QgTGV2ZWxEQlNsaWNlJiB2YWx1ZSkKK3sKKyAgICBtX3dyaXRl
QmF0Y2gtPlB1dChtYWtlU2xpY2Uoa2V5KSwgbWFrZVNsaWNlKHZhbHVlKSk7Cit9CisKK3ZvaWQg
TGV2ZWxEQldyaXRlQmF0Y2g6OnJlbW92ZShjb25zdCBMZXZlbERCU2xpY2UmIGtleSkKK3sKKyAg
ICBtX3dyaXRlQmF0Y2gtPkRlbGV0ZShtYWtlU2xpY2Uoa2V5KSk7Cit9CisKK3ZvaWQgTGV2ZWxE
QldyaXRlQmF0Y2g6OmNsZWFyKCkKK3sKKyAgICBtX3dyaXRlQmF0Y2gtPkNsZWFyKCk7Cit9CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRi
L0xldmVsREJXcml0ZUJhdGNoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xl
dmVsREJXcml0ZUJhdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZl
OWVlNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIv
TGV2ZWxEQldyaXRlQmF0Y2guaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMZXZl
bERCV3JpdGVCYXRjaF9oCisjZGVmaW5lIExldmVsREJXcml0ZUJhdGNoX2gKKworI2lmIEVOQUJM
RShMRVZFTERCKQorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisKK25hbWVzcGFjZSBsZXZlbGRiIHsKK2NsYXNzIFdyaXRlQmF0Y2g7Cit9CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGV2ZWxEQlNsaWNlOworCitjbGFzcyBMZXZl
bERCV3JpdGVCYXRjaCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGV2ZWxEQldy
aXRlQmF0Y2g+IGNyZWF0ZSgpOworICAgIH5MZXZlbERCV3JpdGVCYXRjaCgpOworCisgICAgdm9p
ZCBwdXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIGNvbnN0IExldmVsREJTbGljZSYgdmFsdWUp
OworICAgIHZvaWQgcmVtb3ZlKGNvbnN0IExldmVsREJTbGljZSYga2V5KTsKKyAgICB2b2lkIGNs
ZWFyKCk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIExldmVsREJEYXRhYmFzZTsKKyAg
ICBMZXZlbERCV3JpdGVCYXRjaCgpOworCisgICAgT3duUHRyPGxldmVsZGI6OldyaXRlQmF0Y2g+
IG1fd3JpdGVCYXRjaDsKK307CisKK30KKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDNiMGRkMzMu
LjdhZmI5ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkxldmVsREJEYXRhYmFz
ZS5oIgogI2luY2x1ZGUgIkxldmVsREJJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxldmVsREJTbGlj
ZS5oIgorI2luY2x1ZGUgIkxldmVsREJUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCiAKICNpZm5kZWYgSU5UNjRfTUFYCkBAIC00OSw3ICs1MCw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIElEQkxldmVsREJDb2Rpbmc7CiAKLXN0YXRp
YyBib29sIGdldEludChMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtl
eSwgaW50NjRfdCYgZm91bmRJbnQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRGJPclRyYW5zYWN0aW9u
Pgorc3RhdGljIGJvb2wgZ2V0SW50KERiT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3Rvcjxj
aGFyPiYga2V5LCBpbnQ2NF90JiBmb3VuZEludCkKIHsKICAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0
OwogICAgIGlmICghZGItPmdldChrZXksIHJlc3VsdCkpCkBAIC01OSwxMiArNjEsMTQgQEAgc3Rh
dGljIGJvb2wgZ2V0SW50KExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYg
a2V5LCBpbnQ2NF90JiBmb3VuZEkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wg
cHV0SW50KExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBpbnQ2
NF90IHZhbHVlKQordGVtcGxhdGUgPHR5cGVuYW1lIERiT3JUcmFuc2FjdGlvbj4KK3N0YXRpYyBi
b29sIHB1dEludChEYk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwg
aW50NjRfdCB2YWx1ZSkKIHsKICAgICByZXR1cm4gZGItPnB1dChrZXksIGVuY29kZUludCh2YWx1
ZSkpOwogfQogCi1zdGF0aWMgYm9vbCBnZXRTdHJpbmcoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29u
c3QgVmVjdG9yPGNoYXI+JiBrZXksIFN0cmluZyYgZm91bmRTdHJpbmcpCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRGJPclRyYW5zYWN0aW9uPgorc3RhdGljIGJvb2wgZ2V0U3RyaW5nKERiT3JUcmFuc2Fj
dGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBTdHJpbmcmIGZvdW5kU3RyaW5nKQog
ewogICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7CiAgICAgaWYgKCFkYi0+Z2V0KGtleSwgcmVzdWx0
KSkKQEAgLTc0LDcgKzc4LDggQEAgc3RhdGljIGJvb2wgZ2V0U3RyaW5nKExldmVsREJEYXRhYmFz
ZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBTdHJpbmcmIGZvdW4KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgcHV0U3RyaW5nKExldmVsREJEYXRhYmFzZSogZGIsIGNv
bnN0IFZlY3RvcjxjaGFyPiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRGJPclRyYW5zYWN0aW9uPgorc3RhdGljIGJvb2wgcHV0U3RyaW5nKERiT3JUcmFuc2Fj
dGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7
CiAgICAgaWYgKCFkYi0+cHV0KGtleSwgZW5jb2RlU3RyaW5nKHZhbHVlKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTI4MywxMiArMjg4LDEyIEBAIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+
CiAgICAgfQogfQogCi1zdGF0aWMgaW50NjRfdCBnZXROZXdPYmplY3RTdG9yZUlkKExldmVsREJE
YXRhYmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJZCkKK3N0YXRpYyBpbnQ2NF90IGdldE5ld09i
amVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkKQogewogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBmcmVlTGlzdFN0YXJ0S2V5ID0gT2Jq
ZWN0U3RvcmVGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIDApOwogICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBmcmVlTGlzdFN0b3BLZXkgPSBPYmplY3RTdG9yZUZyZWVMaXN0S2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgSU5UNjRfTUFYKTsKIAotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+
IGl0ID0gZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4g
aXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBmb3IgKGl0LT5zZWVrKGZy
ZWVMaXN0U3RhcnRLZXkpOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwg
ZnJlZUxpc3RTdG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsKICAgICAgICAgY29uc3QgY2hhciog
cCA9IGl0LT5rZXkoKS5iZWdpbigpOwogICAgICAgICBjb25zdCBjaGFyKiBsaW1pdCA9IGl0LT5r
ZXkoKS5lbmQoKTsKQEAgLTI5Nyw3ICszMDIsNyBAQCBzdGF0aWMgaW50NjRfdCBnZXROZXdPYmpl
Y3RTdG9yZUlkKExldmVsREJEYXRhYmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJZCkKICAgICAg
ICAgcCA9IE9iamVjdFN0b3JlRnJlZUxpc3RLZXk6OmRlY29kZShwLCBsaW1pdCwgJmZyZWVMaXN0
S2V5KTsKICAgICAgICAgQVNTRVJUKHApOwogCi0gICAgICAgIGJvb2wgb2sgPSBkYi0+cmVtb3Zl
KGl0LT5rZXkoKSk7CisgICAgICAgIGJvb2wgb2sgPSB0cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5r
ZXkoKSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKIAogICAgICAgICByZXR1cm4g
ZnJlZUxpc3RLZXkub2JqZWN0U3RvcmVJZCgpOwpAQCAtMzA1LDEzICszMTAsMTMgQEAgc3RhdGlj
IGludDY0X3QgZ2V0TmV3T2JqZWN0U3RvcmVJZChMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90
IGRhdGFiYXNlSWQpCiAKICAgICBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQgPSAtMTsKICAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gbWF4T2JqZWN0U3RvcmVJZEtleSA9IERhdGFiYXNlTWV0YURhdGFL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjprTWF4T2JqZWN0U3Rv
cmVJZCk7Ci0gICAgaWYgKCFnZXRJbnQoZGIsIG1heE9iamVjdFN0b3JlSWRLZXksIG1heE9iamVj
dFN0b3JlSWQpKQorICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLCBtYXhPYmplY3RTdG9yZUlk
S2V5LCBtYXhPYmplY3RTdG9yZUlkKSkKICAgICAgICAgbWF4T2JqZWN0U3RvcmVJZCA9IDA7CiAK
ICAgICBBU1NFUlQobWF4T2JqZWN0U3RvcmVJZCA+PSAwKTsKIAogICAgIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCA9IG1heE9iamVjdFN0b3JlSWQgKyAxOwotICAgIGJvb2wgb2sgPSBwdXRJbnQoZGIs
IG1heE9iamVjdFN0b3JlSWRLZXksIG9iamVjdFN0b3JlSWQpOworICAgIGJvb2wgb2sgPSBwdXRJ
bnQodHJhbnNhY3Rpb24sIG1heE9iamVjdFN0b3JlSWRLZXksIG9iamVjdFN0b3JlSWQpOwogICAg
IEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKIAogICAgIHJldHVybiBvYmplY3RTdG9yZUlkOwpAQCAt
MzE5LDcgKzMyNCw4IEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld09iamVjdFN0b3JlSWQoTGV2ZWxE
QkRhdGFiYXNlKiBkYiwgaW50NjRfdCBkYXRhYmFzZUlkKQogCiBib29sIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50
NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKQogewotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCA9IGdldE5ld09iamVjdFN0b3JlSWQobV9kYi5nZXQoKSwgZGF0YWJhc2VJZCk7CisgICAgQVNT
RVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBn
ZXROZXdPYmplY3RTdG9yZUlkKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlk
KTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBuYW1lS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApOwogICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBrZXlQYXRoS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDEpOwpAQCAtMzI5LDQzICszMzUsNDMgQEAgYm9vbCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWF4SW5kZXhJZEtleSA9
IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCA1KTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbmFtZXNLZXkgPSBPYmplY3RTdG9yZU5hbWVz
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgbmFtZSk7CiAKLSAgICBib29sIG9rID0gcHV0U3RyaW5n
KG1fZGIuZ2V0KCksIG5hbWVLZXksIG5hbWUpOworICAgIGJvb2wgb2sgPSBwdXRTdHJpbmcobV9j
dXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG5hbWVLZXksIG5hbWUpOwogICAgIGlmICghb2spIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRTdHJpbmcobV9kYi5nZXQoKSwg
a2V5UGF0aEtleSwga2V5UGF0aCk7CisgICAgb2sgPSBwdXRTdHJpbmcobV9jdXJyZW50VHJhbnNh
Y3Rpb24uZ2V0KCksIGtleVBhdGhLZXksIGtleVBhdGgpOwogICAgIGlmICghb2spIHsKICAgICAg
ICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9kYi5nZXQoKSwgYXV0b0luY3Jl
bWVudEtleSwgYXV0b0luY3JlbWVudCk7CisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNh
Y3Rpb24uZ2V0KCksIGF1dG9JbmNyZW1lbnRLZXksIGF1dG9JbmNyZW1lbnQpOwogICAgIGlmICgh
b2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9kYi5nZXQo
KSwgZXZpY3RhYmxlS2V5LCBmYWxzZSk7CisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNh
Y3Rpb24uZ2V0KCksIGV2aWN0YWJsZUtleSwgZmFsc2UpOwogICAgIGlmICghb2spIHsKICAgICAg
ICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9kYi5nZXQoKSwgbGFzdFZlcnNp
b25LZXksIDEpOworICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBs
YXN0VmVyc2lvbktleSwgMSk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBMT0dfRVJST1IoIklu
dGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICBvayA9IHB1dEludChtX2RiLmdldCgpLCBtYXhJbmRleElkS2V5LCBrTWluaW11bUlu
ZGV4SWQpOworICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBtYXhJ
bmRleElkS2V5LCBrTWluaW11bUluZGV4SWQpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9H
X0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9kYi5nZXQoKSwgbmFtZXNLZXksIG9iamVj
dFN0b3JlSWQpOworICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBu
YW1lc0tleSwgb2JqZWN0U3RvcmVJZCk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBMT0dfRVJS
T1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTM3NiwxMiArMzgyLDExIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRl
T2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGRlbGV0ZVJhbmdlKExldmVsREJEYXRhYmFzZSogZGIs
IGNvbnN0IFZlY3RvcjxjaGFyPiYgYmVnaW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5kKQorc3Rh
dGljIGJvb2wgZGVsZXRlUmFuZ2UoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29u
c3QgVmVjdG9yPGNoYXI+JiBiZWdpbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmQpCiB7Ci0gICAg
Ly8gRklYTUU6IExldmVsREIgbWF5IGJlIGFibGUgdG8gcHJvdmlkZSBhIGJ1bGsgb3BlcmF0aW9u
IHRoYXQgd2UgY2FuIGRvIGZpcnN0LgotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0g
ZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSB0
cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBmb3IgKGl0LT5zZWVrKGJlZ2luKTsg
aXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIGVuZCkgPCAwOyBpdC0+bmV4
dCgpKSB7Ci0gICAgICAgIGlmICghZGItPnJlbW92ZShpdC0+a2V5KCkpKQorICAgICAgICBpZiAo
IXRyYW5zYWN0aW9uLT5yZW1vdmUoaXQtPmtleSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKQEAgLTM5MCwxOCArMzk1LDIwIEBAIHN0YXRpYyBib29sIGRlbGV0ZVJhbmdl
KExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgYmVnaW4sIGNvbnN0IFZl
CiAKIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CisgICAgQVNTRVJUKG1fY3Vy
cmVudFRyYW5zYWN0aW9uKTsKKwogICAgIFN0cmluZyBvYmplY3RTdG9yZU5hbWU7Ci0gICAgZ2V0
U3RyaW5nKG1fZGIuZ2V0KCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgb2JqZWN0U3RvcmVOYW1lKTsKKyAgICBnZXRTdHJpbmco
bV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29k
ZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgb2JqZWN0U3RvcmVOYW1lKTsKIAotICAg
IGlmICghZGVsZXRlUmFuZ2UobV9kYi5nZXQoKSwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5
OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgNikpKQorICAgIGlmICghZGVsZXRl
UmFuZ2UobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDYpKSkKICAgICAgICAgcmV0
dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgogCi0gICAgcHV0U3RyaW5nKG1fZGIuZ2V0KCks
IE9iamVjdFN0b3JlRnJlZUxpc3RLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
KSwgIiIpOwotICAgIG1fZGItPnJlbW92ZShPYmplY3RTdG9yZU5hbWVzS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVOYW1lKSk7CisgICAgcHV0U3RyaW5nKG1fY3VycmVudFRyYW5z
YWN0aW9uLmdldCgpLCBPYmplY3RTdG9yZUZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCksICIiKTsKKyAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKE9i
amVjdFN0b3JlTmFtZXNLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZU5hbWUpKTsK
IAotICAgIGlmICghZGVsZXRlUmFuZ2UobV9kYi5nZXQoKSwgSW5kZXhGcmVlTGlzdEtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBJbmRleEZyZWVMaXN0S2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgSU5UNjRfTUFYKSkpCisgICAgaWYgKCFkZWxl
dGVSYW5nZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgSW5kZXhGcmVlTGlzdEtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBJbmRleEZyZWVMaXN0S2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgSU5UNjRfTUFYKSkpCiAgICAgICAgIHJldHVy
bjsgLy8gRklYTUU6IFJlcG9ydCBlcnJvci4KLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fZGIuZ2V0
KCksIEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAw
LCAwKSwgSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IElOVDY0X01BWCwgMCkpKQorICAgIGlmICghZGVsZXRlUmFuZ2UobV9jdXJyZW50VHJhbnNhY3Rp
b24uZ2V0KCksIEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCAwLCAwKSwgSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIElOVDY0X01BWCwgMCkpKQogICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBSZXBvcnQg
ZXJyb3IuCiAKICAgICBjbGVhck9iamVjdFN0b3JlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQp
OwpAQCAtNDEyLDcgKzQxOSw4IEBAIFN0cmluZyBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRP
YmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QKICAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAKLSAg
ICBpZiAoIW1fZGItPmdldChsZXZlbGRiS2V5LCBkYXRhKSkKKyAgICBBU1NFUlQobV9jdXJyZW50
VHJhbnNhY3Rpb24pOworICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPmdldChsZXZlbGRi
S2V5LCBkYXRhKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgaW50NjRfdCB2ZXJz
aW9uOwpAQCAtNDQ1LDE4ICs0NTMsMTggQEAgcHJpdmF0ZToKIH07CiB9CiAKLXN0YXRpYyBpbnQ2
NF90IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCitzdGF0aWMgaW50NjRfdCBnZXROZXdWZXJz
aW9uTnVtYmVyKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBs
YXN0VmVyc2lvbktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCA0KTsKIAogICAgIGludDY0X3QgbGFzdFZlcnNpb24gPSAtMTsKLSAg
ICBpZiAoIWdldEludChkYiwgbGFzdFZlcnNpb25LZXksIGxhc3RWZXJzaW9uKSkKKyAgICBpZiAo
IWdldEludCh0cmFuc2FjdGlvbiwgbGFzdFZlcnNpb25LZXksIGxhc3RWZXJzaW9uKSkKICAgICAg
ICAgbGFzdFZlcnNpb24gPSAwOwogCiAgICAgQVNTRVJUKGxhc3RWZXJzaW9uID49IDApOwogCiAg
ICAgaW50NjRfdCB2ZXJzaW9uID0gbGFzdFZlcnNpb24gKyAxOwotICAgIGJvb2wgb2sgPSBwdXRJ
bnQoZGIsIGxhc3RWZXJzaW9uS2V5LCB2ZXJzaW9uKTsKKyAgICBib29sIG9rID0gcHV0SW50KHRy
YW5zYWN0aW9uLCBsYXN0VmVyc2lvbktleSwgdmVyc2lvbik7CiAgICAgQVNTRVJUX1VOVVNFRChv
aywgb2spOwogCiAgICAgQVNTRVJUKHZlcnNpb24gPiBsYXN0VmVyc2lvbik7IC8vIEZJWE1FOiBU
aGluayBhYm91dCBob3cgd2Ugd2FudCB0byBoYW5kbGUgdGhlIG92ZXJmbG93IHNjZW5hcmlvLgpA
QCAtNDY2LDE4ICs0NzQsMTkgQEAgc3RhdGljIGludDY0X3QgZ2V0TmV3VmVyc2lvbk51bWJlcihM
ZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDYKIAogYm9vbCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikK
IHsKLSAgICBpbnQ2NF90IHZlcnNpb24gPSBnZXROZXdWZXJzaW9uTnVtYmVyKG1fZGIuZ2V0KCks
IGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2Fj
dGlvbik7CisgICAgaW50NjRfdCB2ZXJzaW9uID0gZ2V0TmV3VmVyc2lvbk51bWJlcihtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CiAgICAgY29u
c3QgVmVjdG9yPGNoYXI+IG9iamVjdFN0b3JlZGF0YUtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CiAKICAgICBWZWN0b3I8Y2hh
cj4gdjsKICAgICB2LmFwcGVuZChlbmNvZGVWYXJJbnQodmVyc2lvbikpOwogICAgIHYuYXBwZW5k
KGVuY29kZVN0cmluZyh2YWx1ZSkpOwogCi0gICAgaWYgKCFtX2RiLT5wdXQob2JqZWN0U3RvcmVk
YXRhS2V5LCB2KSkKKyAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5wdXQob2JqZWN0U3Rv
cmVkYXRhS2V5LCB2KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgVmVjdG9y
PGNoYXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBrZXkpOwotICAgIGlmICghbV9kYi0+cHV0KGV4aXN0c0VudHJ5S2V5
LCBlbmNvZGVJbnQodmVyc2lvbikpKQorICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPnB1
dChleGlzdHNFbnRyeUtleSwgZW5jb2RlSW50KHZlcnNpb24pKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJZGVudGlm
aWVyID0gc3RhdGljX2Nhc3Q8TGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihyZWNvcmRJZGVudGlm
aWVyKTsKQEAgLTQ4OCwxMCArNDk3LDExIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
cHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iCiAKIHZv
aWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKKyAgICBBU1NFUlQobV9jdXJyZW50VHJh
bnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IEtleVByZWZpeChk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKS5lbmNvZGUoKTsKICAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gc3RvcEtleSA9IEtleVByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkICsgMSwg
MCkuZW5jb2RlKCk7CiAKLSAgICBkZWxldGVSYW5nZShtX2RiLmdldCgpLCBzdGFydEtleSwgc3Rv
cEtleSk7CisgICAgZGVsZXRlUmFuZ2UobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIHN0YXJ0
S2V5LCBzdG9wS2V5KTsKIH0KIAogUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0
b3JlUmVjb3JkSWRlbnRpZmllcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW52YWxp
ZFJlY29yZElkZW50aWZpZXIoKQpAQCAtNTAxLDE3ICs1MTEsMTkgQEAgUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZToKIAogdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9y
ZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQogeworICAgIEFT
U0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50
aWZpZXIqIGxldmVsREJSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxE
QlJlY29yZElkZW50aWZpZXIqPihyZWNvcmRJZGVudGlmaWVyKTsKICAgICBjb25zdCBWZWN0b3I8
Y2hhcj4ga2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7Ci0gICAgbV9k
Yi0+cmVtb3ZlKGtleSk7CisgICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShrZXkpOwog
fQogCiBkb3VibGUgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6bmV4dEF1dG9JbmNyZW1lbnROdW1i
ZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CisgICAgQVNT
RVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRL
ZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBtaW5JREJLZXkoKSk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RT
dG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtYXhJREJLZXko
KSk7CiAKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJh
dG9yKCk7CisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFuc2Fj
dGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKIAogICAgIGludCBtYXhOdW1lcmljS2V5ID0gMDsKIApA
QCAtNTM3LDEwICs1NDksMTEgQEAgZG91YmxlIElEQkxldmVsREJCYWNraW5nU3RvcmU6Om5leHRB
dXRvSW5jcmVtZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjQKIAogYm9vbCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgT2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpCiB7CisgICAgQVNTRVJU
KG1fY3VycmVudFRyYW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktl
eSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGtleSk7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAKLSAgICBpZiAoIW1fZGItPmdldChsZXZl
bGRiS2V5LCBkYXRhKSkKKyAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5nZXQobGV2ZWxk
YktleSwgZGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGludDY0X3QgdmVyc2lv
bjsKQEAgLTU1NSwxMCArNTY4LDExIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5
RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QKIAogYm9vbCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJh
Y2smIGNhbGxiYWNrKQogeworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAg
Y29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWluSURCS2V5KCkpOwogICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBzdG9wS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgbWF4SURCS2V5KCkpOwogCi0gICAgT3duUHRyPExldmVsREJJdGVyYXRv
cj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIE93blB0cjxMZXZlbERCSXRlcmF0
b3I+IGl0ID0gbV9jdXJyZW50VHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgZm9y
IChpdC0+c2VlayhzdGFydEtleSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtl
eSgpLCBzdG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsKICAgICAgICAgY29uc3QgY2hhciAqcCA9
IGl0LT5rZXkoKS5iZWdpbigpOwogICAgICAgICBjb25zdCBjaGFyICpsaW1pdCA9IGl0LT5rZXko
KS5lbmQoKTsKQEAgLTYyMiwxMiArNjM2LDEyIEBAIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJCiAg
ICAgfQogfQogCi1zdGF0aWMgaW50NjRfdCBnZXROZXdJbmRleElkKExldmVsREJEYXRhYmFzZSog
ZGIsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQorc3RhdGljIGlu
dDY0X3QgZ2V0TmV3SW5kZXhJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKICAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gc3RhcnRLZXkgPSBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgMCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBJbmRl
eEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgSU5UNjRfTUFY
KTsKIAotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gZGItPmNyZWF0ZUl0ZXJhdG9y
KCk7CisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRl
SXRlcmF0b3IoKTsKICAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAm
JiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgewogICAg
ICAgICBjb25zdCBjaGFyKiBwID0gaXQtPmtleSgpLmJlZ2luKCk7CiAgICAgICAgIGNvbnN0IGNo
YXIqIGxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOwpAQCAtNjM2LDcgKzY1MCw3IEBAIHN0YXRpYyBp
bnQ2NF90IGdldE5ld0luZGV4SWQoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iCiAgICAgICAgIHAgPSBJbmRleEZyZWVMaXN0S2V5OjpkZWNvZGUocCwg
bGltaXQsICZmcmVlTGlzdEtleSk7CiAgICAgICAgIEFTU0VSVChwKTsKIAotICAgICAgICBib29s
IG9rID0gZGItPnJlbW92ZShpdC0+a2V5KCkpOworICAgICAgICBib29sIG9rID0gdHJhbnNhY3Rp
b24tPnJlbW92ZShpdC0+a2V5KCkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7CiAK
ICAgICAgICAgQVNTRVJUKGZyZWVMaXN0S2V5LmluZGV4SWQoKSA+PSBrTWluaW11bUluZGV4SWQp
OwpAQCAtNjQ1LDEzICs2NTksMTMgQEAgc3RhdGljIGludDY0X3QgZ2V0TmV3SW5kZXhJZChMZXZl
bERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2IKIAogICAgIGlu
dDY0X3QgbWF4SW5kZXhJZCA9IC0xOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtYXhJbmRleElk
S2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIDUpOwotICAgIGlmICghZ2V0SW50KGRiLCBtYXhJbmRleElkS2V5LCBtYXhJbmRleElk
KSkKKyAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgbWF4SW5kZXhJ
ZCkpCiAgICAgICAgIG1heEluZGV4SWQgPSBrTWluaW11bUluZGV4SWQ7CiAKICAgICBBU1NFUlQo
bWF4SW5kZXhJZCA+PSAwKTsKIAogICAgIGludDY0X3QgaW5kZXhJZCA9IG1heEluZGV4SWQgKyAx
OwotICAgIGJvb2wgb2sgPSBwdXRJbnQoZGIsIG1heEluZGV4SWRLZXksIGluZGV4SWQpOworICAg
IGJvb2wgb2sgPSBwdXRJbnQodHJhbnNhY3Rpb24sIG1heEluZGV4SWRLZXksIGluZGV4SWQpOwog
ICAgIGlmICghb2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNjYwLDI1ICs2NzQsMjYg
QEAgc3RhdGljIGludDY0X3QgZ2V0TmV3SW5kZXhJZChMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2IKIAogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpjcmVhdGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgaXNVbmlxdWUs
IGludDY0X3QmIGluZGV4SWQpCiB7Ci0gICAgaW5kZXhJZCA9IGdldE5ld0luZGV4SWQobV9kYi5n
ZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKG1fY3VycmVudFRy
YW5zYWN0aW9uKTsKKyAgICBpbmRleElkID0gZ2V0TmV3SW5kZXhJZChtX2N1cnJlbnRUcmFuc2Fj
dGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CiAKICAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gbmFtZUtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBpbmRleElkLCAwKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gdW5pcXVl
S2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsIDEpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlQYXRoS2V5ID0gSW5kZXhN
ZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIDIp
OwogCi0gICAgYm9vbCBvayA9IHB1dFN0cmluZyhtX2RiLmdldCgpLCBuYW1lS2V5LCBuYW1lKTsK
KyAgICBib29sIG9rID0gcHV0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBuYW1l
S2V5LCBuYW1lKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwg
SW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IG9rID0gcHV0SW50KG1fZGIuZ2V0KCksIHVuaXF1ZUtleSwgaXNVbmlxdWUpOworICAgIG9rID0g
cHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCB1bmlxdWVLZXksIGlzVW5pcXVlKTsK
ICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBl
cnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0U3Ry
aW5nKG1fZGIuZ2V0KCksIGtleVBhdGhLZXksIGtleVBhdGgpOworICAgIG9rID0gcHV0U3RyaW5n
KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBrZXlQYXRoS2V5LCBrZXlQYXRoKTsKICAgICBp
ZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4i
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjk4LDE5ICs3MTMsMjAgQEAgYm9vbCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG8KICAgICBBU1NFUlQoaW5kZXhJZCA+PSBrTWluaW11bUluZGV4SWQpOwog
ICAgIGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmll
ciA9IHN0YXRpY19jYXN0PGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRl
bnRpZmllcik7CiAKLSAgICBjb25zdCBpbnQ2NF90IGdsb2JhbFNlcXVlbmNlTnVtYmVyID0gZ2V0
TmV3VmVyc2lvbk51bWJlcihtX2RiLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsK
KyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIGNvbnN0IGludDY0X3QgZ2xv
YmFsU2VxdWVuY2VOdW1iZXIgPSBnZXROZXdWZXJzaW9uTnVtYmVyKG1fY3VycmVudFRyYW5zYWN0
aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKICAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gaW5kZXhEYXRhS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5LCBnbG9iYWxTZXF1ZW5jZU51bWJlcik7CiAKICAgICBW
ZWN0b3I8Y2hhcj4gZGF0YTsKICAgICBkYXRhLmFwcGVuZChlbmNvZGVWYXJJbnQobGV2ZWxEQlJl
Y29yZElkZW50aWZpZXItPnZlcnNpb24oKSkpOwogICAgIGRhdGEuYXBwZW5kKGxldmVsREJSZWNv
cmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOwogCi0gICAgcmV0dXJuIG1fZGItPnB1dChpbmRl
eERhdGFLZXksIGRhdGEpOworICAgIHJldHVybiBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cHV0KGlu
ZGV4RGF0YUtleSwgZGF0YSk7CiB9CiAKLXN0YXRpYyBib29sIGZpbmRHcmVhdGVzdEtleUxlc3NU
aGFuKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgdGFyZ2V0LCBWZWN0
b3I8Y2hhcj4mIGZvdW5kS2V5KQorc3RhdGljIGJvb2wgZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW4o
TGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiB0YXJn
ZXQsIFZlY3RvcjxjaGFyPiYgZm91bmRLZXkpCiB7Ci0gICAgT3duUHRyPExldmVsREJJdGVyYXRv
cj4gaXQgPSBkYi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9y
PiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwogICAgIGl0LT5zZWVrKHRhcmdl
dCk7CiAKICAgICBpZiAoIWl0LT5pc1ZhbGlkKCkpIHsKQEAgLTc0NSwxMiArNzYxLDEyIEBAIFN0
cmluZyBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RWaWFJbmRleChpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqCiAgICAgcmV0dXJuIGdldE9iamVjdFN0b3JlUmVjb3JkKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsICpwcmltYXJ5S2V5KTsKIH0KIAotc3RhdGljIGJvb2wg
dmVyc2lvbkV4aXN0cyhMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCB2ZXJzaW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4m
IGVuY29kZWRQcmltYXJ5S2V5KQorc3RhdGljIGJvb2wgdmVyc2lvbkV4aXN0cyhMZXZlbERCVHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCB2ZXJzaW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRQcmlt
YXJ5S2V5KQogewogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBFeGlzdHNFbnRyeUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGVuY29kZWRQcmltYXJ5S2V5KTsKICAg
ICBWZWN0b3I8Y2hhcj4gZGF0YTsKIAotICAgIGlmICghZGItPmdldChrZXksIGRhdGEpKQorICAg
IGlmICghdHJhbnNhY3Rpb24tPmdldChrZXksIGRhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gZGVjb2RlSW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSkgPT0gdmVy
c2lvbjsKQEAgLTc1OCw4ICs3NzQsOSBAQCBzdGF0aWMgYm9vbCB2ZXJzaW9uRXhpc3RzKExldmVs
REJEYXRhYmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplYwogCiBQYXNz
UmVmUHRyPElEQktleT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUlu
ZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQogeworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2Fj
dGlvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGxldmVsZGJLZXkgPSBJbmRleERhdGFLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXksIDApOwotICAg
IE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9kYi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAg
ICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5zYWN0aW9uLT5jcmVh
dGVJdGVyYXRvcigpOwogICAgIGl0LT5zZWVrKGxldmVsZGJLZXkpOwogCiAgICAgZm9yICg7Oykg
ewpAQCAtNzc1LDkgKzc5Miw5IEBAIFBhc3NSZWZQdHI8SURCS2V5PiBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzCiAgICAgICAgIFZl
Y3RvcjxjaGFyPiBlbmNvZGVkUHJpbWFyeUtleTsKICAgICAgICAgZW5jb2RlZFByaW1hcnlLZXku
YXBwZW5kKHAsIGl0LT52YWx1ZSgpLmVuZCgpIC0gcCk7CiAKLSAgICAgICAgaWYgKCF2ZXJzaW9u
RXhpc3RzKG1fZGIuZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHZlcnNpb24sIGVu
Y29kZWRQcmltYXJ5S2V5KSkgeworICAgICAgICBpZiAoIXZlcnNpb25FeGlzdHMobV9jdXJyZW50
VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHZlcnNpb24sIGVu
Y29kZWRQcmltYXJ5S2V5KSkgewogICAgICAgICAgICAgLy8gRGVsZXRlIHN0YWxlIGluZGV4IGRh
dGEgZW50cnkgYW5kIGNvbnRpbnVlLgotICAgICAgICAgICAgbV9kYi0+cmVtb3ZlKGl0LT5rZXko
KSk7CisgICAgICAgICAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSk7
CiAgICAgICAgICAgICBpdC0+bmV4dCgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KQEAgLTc5MCw4ICs4MDcsOSBAQCBQYXNzUmVmUHRyPElEQktleT4gSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhcwogCiBib29sIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBr
ZXkpCiB7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gbGV2ZWxEQktleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwgMCk7Ci0gICAgT3duUHRyPExldmVsREJJdGVyYXRv
cj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIE93blB0cjxMZXZlbERCSXRlcmF0
b3I+IGl0ID0gbV9jdXJyZW50VHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAKICAgICBi
b29sIGZvdW5kID0gZmFsc2U7CiAKQEAgLTgxOCw4ICs4MzYsOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBmaXJzdFNlZWsoKTsKIAogcHJvdGVjdGVkOgotICAgIEN1cnNvckltcGxDb21tb24oTGV2ZWxE
QkRhdGFiYXNlKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3Blbiwg
Y29uc3QgVmVjdG9yPGNoYXI+JiBoaWdoS2V5LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQp
Ci0gICAgICAgIDogbV9kYihkYikKKyAgICBDdXJzb3JJbXBsQ29tbW9uKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgbG93S2V5LCBib29sIGxvd09w
ZW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgaGlnaEtleSwgYm9vbCBoaWdoT3BlbiwgYm9vbCBmb3J3
YXJkKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAgICAgICwgbV9s
b3dLZXkobG93S2V5KQogICAgICAgICAsIG1fbG93T3Blbihsb3dPcGVuKQogICAgICAgICAsIG1f
aGlnaEtleShoaWdoS2V5KQpAQCAtODI5LDcgKzg0Nyw3IEBAIHByb3RlY3RlZDoKICAgICB9CiAg
ICAgdmlydHVhbCB+Q3Vyc29ySW1wbENvbW1vbigpIHt9CiAKLSAgICBMZXZlbERCRGF0YWJhc2Uq
IG1fZGI7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBtX3RyYW5zYWN0aW9uOwogICAgIE93blB0
cjxMZXZlbERCSXRlcmF0b3I+IG1faXRlcmF0b3I7CiAgICAgVmVjdG9yPGNoYXI+IG1fbG93S2V5
OwogICAgIGJvb2wgbV9sb3dPcGVuOwpAQCAtODQxLDcgKzg1OSw3IEBAIHByb3RlY3RlZDoKIAog
Ym9vbCBDdXJzb3JJbXBsQ29tbW9uOjpmaXJzdFNlZWsoKQogewotICAgIG1faXRlcmF0b3IgPSBt
X2RiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIG1faXRlcmF0b3IgPSBtX3RyYW5zYWN0aW9uLT5j
cmVhdGVJdGVyYXRvcigpOwogCiAgICAgaWYgKG1fZm9yd2FyZCkKICAgICAgICAgbV9pdGVyYXRv
ci0+c2VlayhtX2xvd0tleSk7CkBAIC05MDIsNyArOTIwLDcgQEAgYm9vbCBDdXJzb3JJbXBsQ29t
bW9uOjpjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSoga2V5KQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgICAgIFZlY3RvcjxjaGFyPiB0cmFzaDsKLSAgICAgICAgaWYgKCFt
X2RiLT5nZXQobV9pdGVyYXRvci0+a2V5KCksIHRyYXNoKSkKKyAgICAgICAgaWYgKCFtX3RyYW5z
YWN0aW9uLT5nZXQobV9pdGVyYXRvci0+a2V5KCksIHRyYXNoKSkKICAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICBpZiAobV9mb3J3YXJkICYmIG1faGlnaE9wZW4gJiYgY29tcGFyZUlu
ZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9oaWdoS2V5KSA+PSAwKSAvLyBoaWdoIGtleSBu
b3QgaW5jbHVkZWQgaW4gcmFuZ2UKQEAgLTkzNyw5ICs5NTUsOSBAQCBib29sIEN1cnNvckltcGxD
b21tb246OmNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5KiBrZXkpCiAKIGNsYXNzIE9iamVj
dFN0b3JlQ3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERC
RGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tleSwgYm9vbCBsb3dPcGVuLCBj
b25zdCBWZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGNyZWF0ZShMZXZl
bERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tleSwg
Ym9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9wZW4s
IGJvb2wgZm9yd2FyZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT2JqZWN0
U3RvcmVDdXJzb3JJbXBsKGRiLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXksIGhpZ2hPcGVuLCBm
b3J3YXJkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT2JqZWN0U3RvcmVDdXJzb3JJ
bXBsKHRyYW5zYWN0aW9uLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXksIGhpZ2hPcGVuLCBmb3J3
YXJkKSk7CiAgICAgfQogCiAgICAgLy8gQ3Vyc29ySW1wbENvbW1vbgpAQCAtOTQ5LDggKzk2Nyw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKIAogcHJpdmF0
ZToKLSAgICBPYmplY3RTdG9yZUN1cnNvckltcGwoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3Qg
VmVjdG9yPGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBo
aWdoS2V5LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCi0gICAgICAgIDogQ3Vyc29ySW1w
bENvbW1vbihkYiwgbG93S2V5LCBsb3dPcGVuLCBoaWdoS2V5LCBoaWdoT3BlbiwgZm9yd2FyZCkK
KyAgICBPYmplY3RTdG9yZUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgY29uc3QgVmVjdG9yPGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9y
PGNoYXI+JiBoaWdoS2V5LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCisgICAgICAgIDog
Q3Vyc29ySW1wbENvbW1vbih0cmFuc2FjdGlvbiwgbG93S2V5LCBsb3dPcGVuLCBoaWdoS2V5LCBo
aWdoT3BlbiwgZm9yd2FyZCkKICAgICB7CiAgICAgfQogCkBAIC05ODQsOSArMTAwMiw5IEBAIGJv
b2wgT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAKIGNsYXNzIEluZGV4
S2V5Q3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbmRleEtleUN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCRGF0YWJh
c2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbmRleEtleUN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tleSwgYm9vbCBsb3dP
cGVuLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9wZW4sIGJvb2wgZm9y
d2FyZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhLZXlDdXJzb3JJ
bXBsKGRiLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXksIGhpZ2hPcGVuLCBmb3J3YXJkKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhLZXlDdXJzb3JJbXBsKHRyYW5zYWN0aW9u
LCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXksIGhpZ2hPcGVuLCBmb3J3YXJkKSk7CiAgICAgfQog
CiAgICAgLy8gQ3Vyc29ySW1wbENvbW1vbgpAQCAtOTk3LDggKzEwMTUsOCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50Um93KCk7CiAKIHByaXZhdGU6Ci0gICAgSW5kZXhL
ZXlDdXJzb3JJbXBsKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgbG93
S2V5LCBib29sIGxvd09wZW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgaGlnaEtleSwgYm9vbCBoaWdo
T3BlbiwgYm9vbCBmb3J3YXJkKQotICAgICAgICA6IEN1cnNvckltcGxDb21tb24oZGIsIGxvd0tl
eSwgbG93T3BlbiwgaGlnaEtleSwgaGlnaE9wZW4sIGZvcndhcmQpCisgICAgSW5kZXhLZXlDdXJz
b3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFy
PiYgbG93S2V5LCBib29sIGxvd09wZW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgaGlnaEtleSwgYm9v
bCBoaWdoT3BlbiwgYm9vbCBmb3J3YXJkKQorICAgICAgICA6IEN1cnNvckltcGxDb21tb24odHJh
bnNhY3Rpb24sIGxvd0tleSwgbG93T3BlbiwgaGlnaEtleSwgaGlnaE9wZW4sIGZvcndhcmQpCiAg
ICAgewogICAgIH0KIApAQCAtMTAyOCw3ICsxMDQ2LDcgQEAgYm9vbCBJbmRleEtleUN1cnNvcklt
cGw6OmxvYWRDdXJyZW50Um93KCkKICAgICBWZWN0b3I8Y2hhcj4gcHJpbWFyeUxldmVsREJLZXkg
PSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShpbmRleERhdGFLZXkuZGF0YWJhc2VJZCgpLCBp
bmRleERhdGFLZXkub2JqZWN0U3RvcmVJZCgpLCAqbV9wcmltYXJ5S2V5KTsKIAogICAgIFZlY3Rv
cjxjaGFyPiByZXN1bHQ7Ci0gICAgaWYgKCFtX2RiLT5nZXQocHJpbWFyeUxldmVsREJLZXksIHJl
c3VsdCkpCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5nZXQocHJpbWFyeUxldmVsREJLZXksIHJl
c3VsdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGludDY0X3Qgb2JqZWN0U3RvcmVE
YXRhVmVyc2lvbjsKQEAgLTEwMzgsNyArMTA1Niw3IEBAIGJvb2wgSW5kZXhLZXlDdXJzb3JJbXBs
Ojpsb2FkQ3VycmVudFJvdygpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChvYmpl
Y3RTdG9yZURhdGFWZXJzaW9uICE9IGluZGV4RGF0YVZlcnNpb24pIHsgLy8gRklYTUU6IFRoaXMg
aXMgcHJvYmFibHkgbm90IHZlcnkgd2VsbCBjb3ZlcmVkIGJ5IHRoZSBsYXlvdXQgdGVzdHMuCi0g
ICAgICAgIG1fZGItPnJlbW92ZShtX2l0ZXJhdG9yLT5rZXkoKSk7CisgICAgICAgIG1fdHJhbnNh
Y3Rpb24tPnJlbW92ZShtX2l0ZXJhdG9yLT5rZXkoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKQEAgLTEwNDcsOSArMTA2NSw5IEBAIGJvb2wgSW5kZXhLZXlDdXJzb3JJbXBsOjps
b2FkQ3VycmVudFJvdygpCiAKIGNsYXNzIEluZGV4Q3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJ
bXBsQ29tbW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleEN1cnNvcklt
cGw+IGNyZWF0ZShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tl
eSwgYm9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9w
ZW4sIGJvb2wgZm9yd2FyZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleEN1cnNvckltcGw+
IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hh
cj4mIGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJv
b2wgaGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5kZXhDdXJzb3JJbXBsKGRiLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXksIGhpZ2hP
cGVuLCBmb3J3YXJkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhDdXJzb3JJ
bXBsKHRyYW5zYWN0aW9uLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXksIGhpZ2hPcGVuLCBmb3J3
YXJkKSk7CiAgICAgfQogCiAgICAgLy8gQ3Vyc29ySW1wbENvbW1vbgpAQCAtMTA2MCw4ICsxMDc4
LDggQEAgcHVibGljOgogICAgIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKIAogcHJpdmF0ZToKLSAg
ICBJbmRleEN1cnNvckltcGwoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+
JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBoaWdoS2V5LCBib29s
IGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbihkYiwg
bG93S2V5LCBsb3dPcGVuLCBoaWdoS2V5LCBoaWdoT3BlbiwgZm9yd2FyZCkKKyAgICBJbmRleEN1
cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNo
YXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBoaWdoS2V5LCBi
b29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCisgICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbih0
cmFuc2FjdGlvbiwgbG93S2V5LCBsb3dPcGVuLCBoaWdoS2V5LCBoaWdoT3BlbiwgZm9yd2FyZCkK
ICAgICB7CiAgICAgfQogCkBAIC0xMDk2LDcgKzExMTQsNyBAQCBib29sIEluZGV4Q3Vyc29ySW1w
bDo6bG9hZEN1cnJlbnRSb3coKQogICAgIG1fcHJpbWFyeUxldmVsREJLZXkgPSBPYmplY3RTdG9y
ZURhdGFLZXk6OmVuY29kZShpbmRleERhdGFLZXkuZGF0YWJhc2VJZCgpLCBpbmRleERhdGFLZXku
b2JqZWN0U3RvcmVJZCgpLCAqbV9wcmltYXJ5S2V5KTsKIAogICAgIFZlY3RvcjxjaGFyPiByZXN1
bHQ7Ci0gICAgaWYgKCFtX2RiLT5nZXQobV9wcmltYXJ5TGV2ZWxEQktleSwgcmVzdWx0KSkKKyAg
ICBpZiAoIW1fdHJhbnNhY3Rpb24tPmdldChtX3ByaW1hcnlMZXZlbERCS2V5LCByZXN1bHQpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpbnQ2NF90IG9iamVjdFN0b3JlRGF0YVZlcnNp
b247CkBAIC0xMTA2LDcgKzExMjQsNyBAQCBib29sIEluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJl
bnRSb3coKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAob2JqZWN0U3RvcmVEYXRh
VmVyc2lvbiAhPSBpbmRleERhdGFWZXJzaW9uKSB7Ci0gICAgICAgIG1fZGItPnJlbW92ZShtX2l0
ZXJhdG9yLT5rZXkoKSk7CisgICAgICAgIG1fdHJhbnNhY3Rpb24tPnJlbW92ZShtX2l0ZXJhdG9y
LT5rZXkoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTExMTYsOSArMTEz
NCw5IEBAIGJvb2wgSW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAKIH0KIAotc3Rh
dGljIGJvb2wgZmluZExhc3RJbmRleEtleUVxdWFsVG8oTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29u
c3QgVmVjdG9yPGNoYXI+JiB0YXJnZXQsIFZlY3RvcjxjaGFyPiYgZm91bmRLZXkpCitzdGF0aWMg
Ym9vbCBmaW5kTGFzdEluZGV4S2V5RXF1YWxUbyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIHRhcmdldCwgVmVjdG9yPGNoYXI+JiBmb3VuZEtleSkK
IHsKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IGRiLT5jcmVhdGVJdGVyYXRvcigp
OworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gdHJhbnNhY3Rpb24tPmNyZWF0ZUl0
ZXJhdG9yKCk7CiAgICAgaXQtPnNlZWsodGFyZ2V0KTsKIAogICAgIGlmICghaXQtPmlzVmFsaWQo
KSkKQEAgLTExMzUsNiArMTE1Myw3IEBAIHN0YXRpYyBib29sIGZpbmRMYXN0SW5kZXhLZXlFcXVh
bFRvKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgdGFyCiAKIFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9w
ZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJl
Y3Rpb24pCiB7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKICAgICBib29sIGxv
d2VyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+bG93ZXIoKTsKICAgICBib29sIHVwcGVyQm91bmQg
PSByYW5nZSAmJiByYW5nZS0+dXBwZXIoKTsKICAgICBib29sIGZvcndhcmQgPSAoZGlyZWN0aW9u
ID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNv
cjo6TkVYVCk7CkBAIC0xMTU1LDcgKzExNzQsNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzbwog
ICAgICAgICB1cHBlck9wZW4gPSB0cnVlOyAvLyBOb3QgaW5jbHVkZWQuCiAKICAgICAgICAgaWYg
KCFmb3J3YXJkKSB7IC8vIFdlIG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCi0gICAgICAgICAgICBp
ZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuKG1fZGIuZ2V0KCksIHN0b3BLZXksIHN0b3BLZXkp
KQorICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbihtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwgc3RvcEtleSwgc3RvcEtleSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgICAgICB1cHBlck9wZW4gPSBmYWxzZTsKICAgICAgICAgfQpAQCAtMTE2NCw3
ICsxMTgzLDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc28KICAgICAgICAgdXBwZXJPcGVuID0g
cmFuZ2UtPnVwcGVyT3BlbigpOwogICAgIH0KIAotICAgIFJlZlB0cjxPYmplY3RTdG9yZUN1cnNv
ckltcGw+IGN1cnNvciA9IE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6Y3JlYXRlKG1fZGIuZ2V0KCks
IHN0YXJ0S2V5LCBsb3dlck9wZW4sIHN0b3BLZXksIHVwcGVyT3BlbiwgZm9yd2FyZCk7CisgICAg
UmVmUHRyPE9iamVjdFN0b3JlQ3Vyc29ySW1wbD4gY3Vyc29yID0gT2JqZWN0U3RvcmVDdXJzb3JJ
bXBsOjpjcmVhdGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIHN0YXJ0S2V5LCBsb3dlck9w
ZW4sIHN0b3BLZXksIHVwcGVyT3BlbiwgZm9yd2FyZCk7CiAgICAgaWYgKCFjdXJzb3ItPmZpcnN0
U2VlaygpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTE3Myw2ICsxMTkyLDcgQEAgUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Bl
bk9iamVjdFN0b3JlQ3Vyc28KIAogUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4g
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktl
eVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQogeworICAgIEFT
U0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgYm9vbCBsb3dlckJvdW5kID0gcmFuZ2Ug
JiYgcmFuZ2UtPmxvd2VyKCk7CiAgICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2Ut
PnVwcGVyKCk7CiAgICAgYm9vbCBmb3J3YXJkID0gKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5F
WFRfTk9fRFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQpOwpAQCAtMTE5
MywxOCArMTIxMywxOCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoaQogICAgICAgICB1cHBlck9w
ZW4gPSBmYWxzZTsgLy8gSW5jbHVkZWQuCiAKICAgICAgICAgaWYgKCFmb3J3YXJkKSB7IC8vIFdl
IG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCi0gICAgICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtl
eUxlc3NUaGFuKG1fZGIuZ2V0KCksIHN0b3BLZXksIHN0b3BLZXkpKQorICAgICAgICAgICAgaWYg
KCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbihtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgc3Rv
cEtleSwgc3RvcEtleSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB1
cHBlck9wZW4gPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIHN0b3BL
ZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRl
eElkLCAqcmFuZ2UtPnVwcGVyKCksIDApOwotICAgICAgICBpZiAoIWZpbmRMYXN0SW5kZXhLZXlF
cXVhbFRvKG1fZGIuZ2V0KCksIHN0b3BLZXksIHN0b3BLZXkpKSAvLyBTZWVrIHRvIHRoZSAqbGFz
dCoga2V5IGluIHRoZSBzZXQgb2Ygbm9uLXVuaXF1ZSBrZXlzLgorICAgICAgICBpZiAoIWZpbmRM
YXN0SW5kZXhLZXlFcXVhbFRvKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBzdG9wS2V5LCBz
dG9wS2V5KSkgLy8gU2VlayB0byB0aGUgKmxhc3QqIGtleSBpbiB0aGUgc2V0IG9mIG5vbi11bmlx
dWUga2V5cy4KICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB1cHBlck9wZW4gPSByYW5n
ZS0+dXBwZXJPcGVuKCk7CiAgICAgfQogCi0gICAgUmVmUHRyPEluZGV4S2V5Q3Vyc29ySW1wbD4g
Y3Vyc29yID0gSW5kZXhLZXlDdXJzb3JJbXBsOjpjcmVhdGUobV9kYi5nZXQoKSwgc3RhcnRLZXks
IGxvd2VyT3Blbiwgc3RvcEtleSwgdXBwZXJPcGVuLCBmb3J3YXJkKTsKKyAgICBSZWZQdHI8SW5k
ZXhLZXlDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEtleUN1cnNvckltcGw6OmNyZWF0ZShtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgc3RhcnRLZXksIGxvd2VyT3Blbiwgc3RvcEtleSwgdXBw
ZXJPcGVuLCBmb3J3YXJkKTsKICAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCiAgICAgICAg
IHJldHVybiAwOwogCkBAIC0xMjEzLDYgKzEyMzMsNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3Io
aQogCiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJD
dXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5z
YWN0aW9uKTsKICAgICBib29sIGxvd2VyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+bG93ZXIoKTsK
ICAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+dXBwZXIoKTsKICAgICBib29s
IGZvcndhcmQgPSAoZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgfHwg
ZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCk7CkBAIC0xMjMzLDM3ICsxMjU0LDU3IEBAIFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6
Om9wZW5JbmRleEN1cnNvcihpbnQ2CiAgICAgICAgIHVwcGVyT3BlbiA9IGZhbHNlOyAvLyBJbmNs
dWRlZC4KIAogICAgICAgICBpZiAoIWZvcndhcmQpIHsgLy8gV2UgbmVlZCBhIGtleSB0aGF0IGV4
aXN0cy4KLSAgICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW4obV9kYi5nZXQo
KSwgc3RvcEtleSwgc3RvcEtleSkpCisgICAgICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtleUxl
c3NUaGFuKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBzdG9wS2V5LCBzdG9wS2V5KSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIHVwcGVyT3BlbiA9IGZhbHNlOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3RvcEtleSA9IEluZGV4RGF0YUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICpyYW5nZS0+dXBwZXIo
KSwgMCk7Ci0gICAgICAgIGlmICghZmluZExhc3RJbmRleEtleUVxdWFsVG8obV9kYi5nZXQoKSwg
c3RvcEtleSwgc3RvcEtleSkpIC8vIFNlZWsgdG8gdGhlICpsYXN0KiBrZXkgaW4gdGhlIHNldCBv
ZiBub24tdW5pcXVlIGtleXMuCisgICAgICAgIGlmICghZmluZExhc3RJbmRleEtleUVxdWFsVG8o
bV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIHN0b3BLZXksIHN0b3BLZXkpKSAvLyBTZWVrIHRv
IHRoZSAqbGFzdCoga2V5IGluIHRoZSBzZXQgb2Ygbm9uLXVuaXF1ZSBrZXlzLgogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIHVwcGVyT3BlbiA9IHJhbmdlLT51cHBlck9wZW4oKTsKICAg
ICB9CiAKLSAgICBSZWZQdHI8SW5kZXhDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEN1cnNvcklt
cGw6OmNyZWF0ZShtX2RiLmdldCgpLCBzdGFydEtleSwgbG93ZXJPcGVuLCBzdG9wS2V5LCB1cHBl
ck9wZW4sIGZvcndhcmQpOworICAgIFJlZlB0cjxJbmRleEN1cnNvckltcGw+IGN1cnNvciA9IElu
ZGV4Q3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBzdGFydEtl
eSwgbG93ZXJPcGVuLCBzdG9wS2V5LCB1cHBlck9wZW4sIGZvcndhcmQpOwogICAgIGlmICghY3Vy
c29yLT5maXJzdFNlZWsoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gY3Vyc29y
LnJlbGVhc2UoKTsKIH0KIAotbmFtZXNwYWNlIHsKLWNsYXNzIER1bW15VHJhbnNhY3Rpb24gOiBw
dWJsaWMgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB2b2lkIGJlZ2luKCkge30KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCkge30KLSAgICB2aXJ0
dWFsIHZvaWQgcm9sbGJhY2soKSB7fQotfTsKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlVHJhbnNhY3Rpb24oKQor
eworICAgIHJldHVybiBUcmFuc2FjdGlvbjo6Y3JlYXRlKHRoaXMpOwogfQogCi1QYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNy
ZWF0ZVRyYW5zYWN0aW9uKCkKK1Bhc3NSZWZQdHI8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjcmVhdGUoSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVHJhbnNhY3Rpb24oYmFja2luZ1N0b3JlKSk7Cit9CisKK0lEQkxldmVsREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbihJREJMZXZlbERCQmFja2luZ1N0b3JlKiBi
YWNraW5nU3RvcmUpCisgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCit7Cit9CisK
K3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJlZ2luKCkKK3sKKyAg
ICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgbV9i
YWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uID0gTGV2ZWxEQlRyYW5zYWN0aW9uOjpj
cmVhdGUobV9iYWNraW5nU3RvcmUtPm1fZGIuZ2V0KCkpOworfQorCit2b2lkIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQoKQoreworICAgIEFTU0VSVChtX2JhY2tp
bmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1
cnJlbnRUcmFuc2FjdGlvbi0+Y29tbWl0KCk7CisgICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVu
dFRyYW5zYWN0aW9uLmNsZWFyKCk7Cit9CisKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb246OnJvbGxiYWNrKCkKIHsKLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBpbXBs
ZW1lbnQgYSB0cmFuc2FjdGlvbiBhYnN0cmFjdGlvbiB0aGF0IGFsbG93cyBmb3Igcm9sbC1iYWNr
cywgYW5kIHdyaXRlIHRlc3RzIGZvciBpdC4KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IER1bW15
VHJhbnNhY3Rpb24oKSk7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFu
c2FjdGlvbik7CisgICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uLT5yb2xs
YmFjaygpOworICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbi5jbGVhcigp
OwogfQogCiAvLyBGSVhNRTogZGVsZXRlRGF0YWJhc2Ugc2hvdWxkIGJlIHBhcnQgb2YgSURCQmFj
a2luZ1N0b3JlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERC
QmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5n
U3RvcmUuaAppbmRleCA2MGY2MjFhLi45OGY1ZWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaApAQCAtMzYsNiArMzYsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIExldmVsREJDb21wYXJhdG9yOwogY2xhc3MgTGV2ZWxEQkRh
dGFiYXNlOworY2xhc3MgTGV2ZWxEQlRyYW5zYWN0aW9uOwogCiBjbGFzcyBJREJMZXZlbERCQmFj
a2luZ1N0b3JlIDogcHVibGljIElEQkJhY2tpbmdTdG9yZSB7CiBwdWJsaWM6CkBAIC04MCw2ICs4
MSwxOSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2VuZEltcGw+IG1fZmFj
dG9yeTsKICAgICBPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBtX2RiOwogICAgIE93blB0cjxMZXZl
bERCQ29tcGFyYXRvcj4gbV9jb21wYXJhdG9yOworICAgIFJlZlB0cjxMZXZlbERCVHJhbnNhY3Rp
b24+IG1fY3VycmVudFRyYW5zYWN0aW9uOworCisgICAgY2xhc3MgVHJhbnNhY3Rpb24gOiBwdWJs
aWMgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxUcmFuc2FjdGlvbj4gY3JlYXRlKElEQkxldmVsREJCYWNraW5nU3Rv
cmUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGJlZ2luKCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBjb21taXQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJvbGxiYWNrKCk7CisKKyAgICBwcml2
YXRlOgorICAgICAgICBUcmFuc2FjdGlvbihJREJMZXZlbERCQmFja2luZ1N0b3JlKik7CisgICAg
ICAgIElEQkxldmVsREJCYWNraW5nU3RvcmUqIG1fYmFja2luZ1N0b3JlOworICAgIH07CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCBkNzM2NzU4Li4xNTZjYjg5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5jcHAKQEAgLTEwNiw2ICsxMDYsOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OmFib3J0KCkKICAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKICAgICAgICAgcmV0dXJu
OwogCisgICAgYm9vbCB3YXNSdW5uaW5nID0gbV9zdGF0ZSA9PSBSdW5uaW5nOworCiAgICAgLy8g
VGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IG1heSBiZSByZWxlYXNlZCB3aGlsZSBw
ZXJmb3JtaW5nIHRoZQogICAgIC8vIGFib3J0IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUgdGFr
ZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAgb3Vyc2VsdmVzCiAgICAgLy8gYWxpdmUgd2hpbGUg
ZXhlY3V0aW5nIHRoaXMgbWV0aG9kLgpAQCAtMTE2LDcgKzExOCw4IEBAIHZvaWQgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6YWJvcnQoKQogICAgIG1fdGFza0V2ZW50VGltZXIuc3RvcCgpOwog
CiAgICAgY2xvc2VPcGVuQ3Vyc29ycygpOwotICAgIG1fdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7
CisgICAgaWYgKHdhc1J1bm5pbmcpCisgICAgICAgIG1fdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7
CiAKICAgICAvLyBSdW4gdGhlIGFib3J0IHRhc2tzLCBpZiBhbnkuCiAgICAgd2hpbGUgKCFtX2Fi
b3J0VGFza1F1ZXVlLmlzRW1wdHkoKSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94589</attachid>
            <date>2011-05-24 03:33:44 -0700</date>
            <delta_ts>2011-05-25 03:10:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>88284</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOGQwOTM1OS4uMzM3YWViYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE0NTQsNyArMTQ1NCw4IEBAIEVORElGICgpCiBJRiAoRU5BQkxFX0xFVkVMREIp
CiAgICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2xldmVs
ZGIvTGV2ZWxEQkRhdGFiYXNlLmNwcAotICAgICAgICBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJJ
dGVyYXRvci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24u
Y3BwCisgICAgICAgIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2guY3BwCiAgICAg
KQogRU5ESUYgKCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDVmZDhkNGIuLjY1NmYyMzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMzYgQEAKKzIwMTEtMDUtMjQgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbmRleGVkREI6IFN1cHBvcnQgTGV2ZWxEQiB0cmFuc2FjdGlvbnMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTI3MAorCisgICAgICAgIEludHJv
ZHVjZSBMZXZlbERCVHJhbnNhY3Rpb24sIHdoaWNoIGltcGxlbWVudHMgaW4tbWVtb3J5IHRyYW5z
YWN0aW9uCisgICAgICAgIHN1cHBvcnQgb24gdG9wIG9mIExldmVsREIsIGFuZCBob29rIHRoaXMg
dXAgZm9yIEluZGV4ZWREQiB0byB1c2UuCisKKyAgICAgICAgVGhpcyBpcyBhbGwgY292ZXJlZCBi
eSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAq
IFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMZXZlbERCRGF0YWJhc2U6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6
TGV2ZWxEQkRhdGFiYXNlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFiYXNl
OjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFiYXNlOjp3cml0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJdGVyYXRvckltcGw6Okl0ZXJhdG9ySW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJdGVyYXRvckltcGw6OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6SXRlcmF0
b3JJbXBsOjpzZWVrVG9MYXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okl0ZXJhdG9ySW1wbDo6c2Vl
ayk6CisgICAgICAgIChXZWJDb3JlOjpJdGVyYXRvckltcGw6Om5leHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SXRlcmF0b3JJbXBsOjpwcmV2KToKKyAgICAgICAgKFdlYkNvcmU6Okl0ZXJhdG9ySW1w
bDo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6Okl0ZXJhdG9ySW1wbDo6dmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFiYXNlOjpjcmVhdGVJdGVyYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpMZXZlbERCRGF0YWJhc2U6OmNvbXBhcmF0b3IpOgorICAgICAgICAqIHBsYXRmb3Jt
L2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmg6CisgICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9M
ZXZlbERCSXRlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJJdGVyYXRvcjo6fkxl
dmVsREJJdGVyYXRvcik6CisgICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNh
Y3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6TGV2ZWxEQlRy
YW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6Y2xlYXJU
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6fkxldmVsREJUcmFu
c2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjptYWtlVmVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkxldmVsREJUcmFuc2FjdGlvbjo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJU
cmFuc2FjdGlvbjo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6
cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6Z2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6Y29tbWl0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6cm9sbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
TGV2ZWxEQlRyYW5zYWN0aW9uOjpjcmVhdGVJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpM
ZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjppc1ZhbGlkKToKKyAgICAgICAg
KFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpzZWVrVG9MYXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpzZWVr
KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpu
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9y
OjpwcmV2KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJh
dG9yOjprZXkpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRl
cmF0b3I6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJl
ZUl0ZXJhdG9yOjppc0RlbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0
aW9uOjpUcmVlSXRlcmF0b3I6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFu
c2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjp+VHJlZUl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpUcmVlSXRlcmF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0
ZXJhdG9yOjpUcmFuc2FjdGlvbkl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJU
cmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6aXNWYWxpZCk6CisgICAgICAgIChXZWJD
b3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnNlZWtUb0xhc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJh
dG9yOjpzZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNh
Y3Rpb25JdGVyYXRvcjo6bmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rp
b246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnByZXYpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxE
QlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjprZXkpOgorICAgICAgICAoV2ViQ29y
ZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjp2YWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6Omhh
bmRsZUNvbmZsaWN0c0FuZERlbGV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5z
YWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpzZXRDdXJyZW50SXRlcmF0b3JUb1NtYWxsZXN0
S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25J
dGVyYXRvcjo6c2V0Q3VycmVudEl0ZXJhdG9yVG9MYXJnZXN0S2V5KToKKyAgICAgICAgKFdlYkNv
cmU6OkxldmVsREJUcmFuc2FjdGlvbjo6cmVnaXN0ZXJJdGVyYXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OnVucmVnaXN0ZXJJdGVyYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OnJlc2V0SXRlcmF0b3JzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6QVZMVHJlZUFic3RyYWN0b3I6OmdldF9sZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6QVZMVHJlZUFic3RyYWN0b3I6
OnNldF9sZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6QVZMVHJl
ZUFic3RyYWN0b3I6OmdldF9ncmVhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFu
c2FjdGlvbjo6QVZMVHJlZUFic3RyYWN0b3I6OnNldF9ncmVhdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkxldmVsREJUcmFuc2FjdGlvbjo6QVZMVHJlZUFic3RyYWN0b3I6OmdldF9iYWxhbmNlX2Zh
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OkFWTFRyZWVBYnN0
cmFjdG9yOjpzZXRfYmFsYW5jZV9mYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRy
YW5zYWN0aW9uOjpBVkxUcmVlQWJzdHJhY3Rvcjo6Y29tcGFyZV9rZXlfa2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6QVZMVHJlZUFic3RyYWN0b3I6OmNvbXBhcmVf
a2V5X25vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpBVkxUcmVl
QWJzdHJhY3Rvcjo6Y29tcGFyZV9ub2RlX25vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxE
QlRyYW5zYWN0aW9uOjpBVkxUcmVlQWJzdHJhY3Rvcjo6bnVsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6On5UcmFuc2FjdGlvbkl0
ZXJhdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJXcml0ZUJhdGNoOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGV2ZWxEQldyaXRlQmF0Y2g6OkxldmVsREJXcml0ZUJhdGNoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxldmVsREJXcml0ZUJhdGNoOjp+TGV2ZWxEQldyaXRlQmF0Y2gpOgorICAg
ICAgICAoV2ViQ29yZTo6bWFrZVNsaWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJXcml0
ZUJhdGNoOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQldyaXRlQmF0Y2g6OnJlbW92
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCV3JpdGVCYXRjaDo6Y2xlYXIpOgorICAgICAg
ICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRJbnQpOgorICAgICAgICAoV2ViQ29yZTo6cHV0SW50KToKKyAgICAgICAgKFdlYkNvcmU6
OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpwdXRTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0TmV3T2JqZWN0U3RvcmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpkZWxl
dGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxl
dGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpnZXRPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXROZXdWZXJzaW9u
TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9i
amVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmNsZWFyT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6bmV4dEF1dG9JbmNyZW1lbnROdW1iZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmb3JFYWNoT2JqZWN0
U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0TmV3SW5kZXhJZCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQp
OgorICAgICAgICAoV2ViQ29yZTo6ZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW4pOgorICAgICAgICAo
V2ViQ29yZTo6dmVyc2lvbkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpmaW5kTGFzdEluZGV4S2V5RXF1YWxUbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVUcmFuc2FjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uOjpUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbjo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2spOgorICAgICAgICAqIHN0
b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjphYm9ydCk6CisKIDIwMTEtMDUtMjQgIEphbWVzIFJvYmluc29uICA8amFt
ZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBkYmQxZjFmLi41ZjRhMGFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI1MTUsOSArMjUxNSwxMiBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkNv
bXBhcmF0b3IuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0
YWJhc2UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRh
YmFzZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJJdGVyYXRv
ci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkl0ZXJhdG9y
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlNsaWNlLmggXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmggXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmNwcCBc
CisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRjaC5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9MaW5rSGFzaC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6
ZWRTdHJpbmdzLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDAxM2U1ODQuLmIwYTQxMTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTg3MSw5ICs4NzEsMTIgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9s
ZXZlbGRiL0xldmVsREJDb21wYXJhdG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2xldmVs
ZGIvTGV2ZWxEQkRhdGFiYXNlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbGV2ZWxkYi9M
ZXZlbERCRGF0YWJhc2UuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERC
SXRlcmF0b3IuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJJdGVy
YXRvci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJTbGljZS5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmgnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2guY3BwJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL21hYy9CbG9ja0V4Y2VwdGlvbnMuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vbWFjL0NsaXBib2FyZE1hYy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvRW1wdHlQ
cm90b2NvbERlZmluaXRpb25zLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAyNWU1ZjRjLi44ZmQ2M2Q1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybwpAQCAtMTAxMiwxMiArMTAxMiw5IEBAIFNPVVJDRVMgKz0gXAogICAg
IHBsYXRmb3JtL0xhbmd1YWdlLmNwcCBcCiAgICAgcGxhdGZvcm0vTGVuZ3RoLmNwcCBcCiAgICAg
cGxhdGZvcm0vdGV4dC9MaW5lRW5kaW5nLmNwcCBcCi0gICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZl
bERCQ29tcGFyYXRvci5oIFwKICAgICBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5j
cHAgXAotICAgIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmggXAotICAgIHBsYXRm
b3JtL2xldmVsZGIvTGV2ZWxEQkl0ZXJhdG9yLmNwcCBcCi0gICAgcGxhdGZvcm0vbGV2ZWxkYi9M
ZXZlbERCSXRlcmF0b3IuaCBcCi0gICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCU2xpY2UuaCBc
CisgICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uY3BwIFwKKyAgICBwbGF0
Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmNwcCBcCiAgICAgcGxhdGZvcm0vTGlua0hh
c2guY3BwIFwKICAgICBwbGF0Zm9ybS9Mb2dnaW5nLmNwcCBcCiAgICAgcGxhdGZvcm0vTUlNRVR5
cGVSZWdpc3RyeS5jcHAgXApAQCAtMTk5MCw2ICsxOTg3LDEyIEBAIEhFQURFUlMgKz0gXAogICAg
IHBsYXRmb3JtL0tpbGxSaW5nLmggXAogICAgIHBsYXRmb3JtL0tVUkwuaCBcCiAgICAgcGxhdGZv
cm0vTGVuZ3RoLmggXAorICAgIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkNvbXBhcmF0b3IuaCBc
CisgICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuaCBcCisgICAgcGxhdGZvcm0v
bGV2ZWxkYi9MZXZlbERCSXRlcmF0b3IuaCBcCisgICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERC
U2xpY2UuaCBcCisgICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uaCBcCisg
ICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRjaC5oIFwKICAgICBwbGF0Zm9ybS90
ZXh0L0JpZGlSdW5MaXN0LmggXAogICAgIHBsYXRmb3JtL3RleHQvTGluZUVuZGluZy5oIFwKICAg
ICBwbGF0Zm9ybS90ZXh0L1RleHRDaGVja2VyQ2xpZW50LmggXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDdjOGE1YjMuLjIyNzkz
MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTI3NDcsMTIgKzI3NDcsMTUgQEAKIAkJOEFGNEU1NTYxMURDNUEzNjAwMEVEM0RF
IC8qIFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOEFGNEU1NTMxMURDNUEzNjAwMEVEM0RFIC8qIFBlcmZvcm1hbmNl
TmF2aWdhdGlvbi5oICovOyB9OwogCQk4QUY0RTU1QjExREM1QTYzMDAwRUQzREUgLyogUGVyZm9y
bWFuY2VUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOEFGNEU1NTgxMURDNUE2MzAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlVGltaW5nLmNwcCAq
LzsgfTsKIAkJOEFGNEU1NUMxMURDNUE2MzAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlVGltaW5nLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QUY0RTU1OTEx
REM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaCAqLzsgfTsKKwkJOEMwRTMzNEMx
MzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QzBFMzM0ODEzOEE5MkM3MDA4REE5NEYg
LyogTGV2ZWxEQlRyYW5zYWN0aW9uLmNwcCAqLzsgfTsKKwkJOEMwRTMzNEQxMzhBOTJDNzAwOERB
OTRGIC8qIExldmVsREJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOEMwRTMzNDkxMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJUcmFu
c2FjdGlvbi5oICovOyB9OworCQk4QzBFMzM0RTEzOEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQldy
aXRlQmF0Y2guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOEMwRTMzNEExMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJXcml0ZUJhdGNoLmNwcCAqLzsg
fTsKKwkJOEMwRTMzNEYxMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJXcml0ZUJhdGNoLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QzBFMzM0QjEzOEE5
MkM3MDA4REE5NEYgLyogTGV2ZWxEQldyaXRlQmF0Y2guaCAqLzsgfTsKIAkJOEM2RUE2MTkxMUVG
N0UwNDAwRkQ4RUUzIC8qIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEM2RUE2MTcxMUVGN0UwNDAwRkQ4RUUz
IC8qIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwICovOyB9OwogCQk4QzZFQTYxQTExRUY3RTA0
MDBGRDhFRTMgLyogUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEM2RUE2MTgxMUVGN0UwNDAwRkQ4RUUzIC8qIFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCAqLzsgfTsKIAkJOENBREYyQTkxMzVDN0IzNjAwOUVGNDNG
IC8qIExldmVsREJDb21wYXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4Q0FERjJBMzEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkNvbXBhcmF0
b3IuaCAqLzsgfTsKIAkJOENBREYyQUExMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJEYXRhYmFz
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Q0FE
RjJBNDEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkRhdGFiYXNlLmNwcCAqLzsgfTsKIAkJOENB
REYyQUIxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOENBREYyQTUxMzVDN0IzNjAwOUVGNDNG
IC8qIExldmVsREJEYXRhYmFzZS5oICovOyB9OwotCQk4Q0FERjJBQzEzNUM3QjM2MDA5RUY0M0Yg
LyogTGV2ZWxEQkl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDhDQURGMkE2MTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCSXRlcmF0b3Iu
Y3BwICovOyB9OwogCQk4Q0FERjJBRDEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkl0ZXJhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Q0FERjJB
NzEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkl0ZXJhdG9yLmggKi87IH07CiAJCThDQURGMkFF
MTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCU2xpY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDQURGMkE4MTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZl
bERCU2xpY2UuaCAqLzsgfTsKIAkJOEY2NzU2MUIxMjg4QjE3QjAwNDdBQ0EzIC8qIEV2ZW50UXVl
dWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhGNjc1
NjE5MTI4OEIxN0IwMDQ3QUNBMyAvKiBFdmVudFF1ZXVlLmggKi87IH07CkBAIC05MjY5LDEyICs5
MjcyLDE1IEBACiAJCThBRjRFNTU4MTFEQzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5jZVRpbWlu
Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQZXJmb3JtYW5jZVRp
bWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThBRjRFNTU5MTFEQzVBNjMw
MDBFRDNERSAvKiBQZXJmb3JtYW5jZVRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQZXJmb3JtYW5jZVRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4QUY0RTU1QTExREM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IFBlcmZvcm1hbmNlVGltaW5nLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOEMwRTMzNDgxMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJUcmFuc2Fj
dGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXZlbERCVHJh
bnNhY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4QzBFMzM0OTEzOEE5
MkM3MDA4REE5NEYgLyogTGV2ZWxEQlRyYW5zYWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExldmVsREJUcmFuc2FjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk4QzBFMzM0QTEzOEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQldyaXRlQmF0Y2guY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGV2ZWxEQldyaXRlQmF0Y2gu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4QzBFMzM0QjEzOEE5MkM3MDA4REE5
NEYgLyogTGV2ZWxEQldyaXRlQmF0Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTGV2ZWxEQldyaXRlQmF0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEM2
RUE2MTcxMUVGN0UwNDAwRkQ4RUUzIC8qIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUnVudGltZUVuYWJsZWRGZWF0dXJlcy5j
cHA7IHBhdGggPSBnZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4QzZFQTYxODExRUY3RTA0MDBGRDhFRTMgLyogUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzLmg7IHBhdGggPSBnZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOENBREYyQTMxMzVDN0IzNjAwOUVGNDNG
IC8qIExldmVsREJDb21wYXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExldmVsREJDb21wYXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThDQURG
MkE0MTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCRGF0YWJhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGV2ZWxEQkRhdGFiYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOENBREYyQTUxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJEYXRh
YmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXZlbERCRGF0YWJhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOENBREYyQTYxMzVDN0IzNjAwOUVGNDNG
IC8qIExldmVsREJJdGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBMZXZlbERCSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
Q0FERjJBNzEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkl0ZXJhdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExldmVsREJJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4Q0FERjJBODEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQlNsaWNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExldmVsREJTbGljZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4RjY3NTYxOTEyODhCMTdCMDA0N0FDQTMgLyogRXZlbnRR
dWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVudFF1ZXVlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTQ5MCw5ICsxNTQ5NiwxMiBAQAogCQkJCThD
QURGMkEzMTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCQ29tcGFyYXRvci5oICovLAogCQkJCThD
QURGMkE0MTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCRGF0YWJhc2UuY3BwICovLAogCQkJCThD
QURGMkE1MTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCRGF0YWJhc2UuaCAqLywKLQkJCQk4Q0FE
RjJBNjEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkl0ZXJhdG9yLmNwcCAqLywKIAkJCQk4Q0FE
RjJBNzEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkl0ZXJhdG9yLmggKi8sCiAJCQkJOENBREYy
QTgxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJTbGljZS5oICovLAorCQkJCThDMEUzMzQ4MTM4
QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCVHJhbnNhY3Rpb24uY3BwICovLAorCQkJCThDMEUzMzQ5
MTM4QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCVHJhbnNhY3Rpb24uaCAqLywKKwkJCQk4QzBFMzM0
QTEzOEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQldyaXRlQmF0Y2guY3BwICovLAorCQkJCThDMEUz
MzRCMTM4QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCV3JpdGVCYXRjaC5oICovLAogCQkJKTsKIAkJ
CXBhdGggPSBsZXZlbGRiOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTIyODM1LDYg
KzIyODQ0LDggQEAKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVT
b3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdFMkUwRjEyRjBGQzlDMDBDMTMzNzkgLyogWFNT
RmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDUzNzM1MzEzN0I2NTE4MDAwMDhEQ0UgLyog
WmVyb1BvbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCThDMEUzMzREMTM4QTkyQzcwMDhEQTk0RiAv
KiBMZXZlbERCVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCThDMEUzMzRGMTM4QTky
QzcwMDhEQTk0RiAvKiBMZXZlbERCV3JpdGVCYXRjaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNDcz
MCw3ICsyNDc0MSw2IEBACiAJCQkJNTFCMjQxN0IwRDkzMUYzRjAwRTgzRjVDIC8qIExlZ2FjeVdl
YkFyY2hpdmVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0U2NUJFQTBFQUNERjE2MDA3RTQ1
MzMgLyogTGVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCThDQURGMkFBMTM1QzdCMzYwMDlF
RjQzRiAvKiBMZXZlbERCRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOENBREYyQUMx
MzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NDczMEQ5MDEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODlCNUVBQTExMUU4MDAzRDAwRjIzNjdFIC8qIExpbmVFbmRpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdBRDJGODcwRUM4OUQwNzAwOEFCMDAyIC8qIExpbmtIYXNoLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjU1MTAsNiArMjU1MjAsOCBAQAogCQkJCUUxQkU1MTJEMENGNkM1
MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3
RTJFMEUxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0ZpbHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGRDUzNzM1MjEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJOEMwRTMzNEMxMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJUcmFuc2FjdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk4QzBFMzM0RTEzOEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQldy
aXRlQmF0Y2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5jcHAKaW5kZXggZDU2ZjI2Yy4uMzg2ZjVkZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFi
YXNlLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkxldmVsREJDb21wYXJhdG9yLmgi
CiAjaW5jbHVkZSAiTGV2ZWxEQkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGV2ZWxEQlNsaWNlLmgi
CisjaW5jbHVkZSAiTGV2ZWxEQldyaXRlQmF0Y2guaCIKICNpbmNsdWRlIDxsZXZlbGRiL2NvbXBh
cmF0b3IuaD4KICNpbmNsdWRlIDxsZXZlbGRiL2RiLmg+CiAjaW5jbHVkZSA8bGV2ZWxkYi9zbGlj
ZS5oPgpAQCAtMTEwLDE1ICsxMTEsMTUgQEAgUGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+IExl
dmVsREJEYXRhYmFzZTo6b3Blbihjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdAogCiAgICAg
cmVzdWx0LT5tX2RiID0gYWRvcHRQdHIoZGIpOwogICAgIHJlc3VsdC0+bV9jb21wYXJhdG9yQWRh
cHRlciA9IGNvbXBhcmF0b3JBZGFwdGVyLnJlbGVhc2UoKTsKKyAgICByZXN1bHQtPm1fY29tcGFy
YXRvciA9IGNvbXBhcmF0b3I7CiAKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAot
CiBib29sIExldmVsREJEYXRhYmFzZTo6cHV0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBjb25z
dCBWZWN0b3I8Y2hhcj4mIHZhbHVlKQogewogICAgIGxldmVsZGI6OldyaXRlT3B0aW9ucyB3cml0
ZU9wdGlvbnM7Ci0gICAgd3JpdGVPcHRpb25zLnN5bmMgPSBmYWxzZTsKKyAgICB3cml0ZU9wdGlv
bnMuc3luYyA9IHRydWU7CiAKICAgICByZXR1cm4gbV9kYi0+UHV0KHdyaXRlT3B0aW9ucywgbWFr
ZVNsaWNlKGtleSksIG1ha2VTbGljZSh2YWx1ZSkpLm9rKCk7CiB9CkBAIC0xMjYsNyArMTI3LDcg
QEAgYm9vbCBMZXZlbERCRGF0YWJhc2U6OnB1dChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgY29u
c3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSkKIGJvb2wgTGV2ZWxEQkRhdGFiYXNlOjpyZW1vdmUoY29u
c3QgTGV2ZWxEQlNsaWNlJiBrZXkpCiB7CiAgICAgbGV2ZWxkYjo6V3JpdGVPcHRpb25zIHdyaXRl
T3B0aW9uczsKLSAgICB3cml0ZU9wdGlvbnMuc3luYyA9IGZhbHNlOworICAgIHdyaXRlT3B0aW9u
cy5zeW5jID0gdHJ1ZTsKIAogICAgIHJldHVybiBtX2RiLT5EZWxldGUod3JpdGVPcHRpb25zLCBt
YWtlU2xpY2Uoa2V5KSkub2soKTsKIH0KQEAgLTE0MSwxMiArMTQyLDkwIEBAIGJvb2wgTGV2ZWxE
QkRhdGFiYXNlOjpnZXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIFZlY3RvcjxjaGFyPiYgdmFs
dWUpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgTGV2ZWxEQkRhdGFiYXNlOjp3cml0ZShM
ZXZlbERCV3JpdGVCYXRjaCYgd3JpdGVCYXRjaCkKK3sKKyAgICBsZXZlbGRiOjpXcml0ZU9wdGlv
bnMgd3JpdGVPcHRpb25zOworICAgIHdyaXRlT3B0aW9ucy5zeW5jID0gdHJ1ZTsKKworICAgIHJl
dHVybiBtX2RiLT5Xcml0ZSh3cml0ZU9wdGlvbnMsIHdyaXRlQmF0Y2gubV93cml0ZUJhdGNoLmdl
dCgpKS5vaygpOworfQorCituYW1lc3BhY2UgeworY2xhc3MgSXRlcmF0b3JJbXBsIDogcHVibGlj
IExldmVsREJJdGVyYXRvciB7CitwdWJsaWM6CisgICAgfkl0ZXJhdG9ySW1wbCgpIHsgfTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNlZWtU
b0xhc3QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Vlayhjb25zdCBMZXZlbERCU2xpY2UmIHRhcmdl
dCk7CisgICAgdmlydHVhbCB2b2lkIG5leHQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJldigpOwor
ICAgIHZpcnR1YWwgTGV2ZWxEQlNsaWNlIGtleSgpIGNvbnN0OworICAgIHZpcnR1YWwgTGV2ZWxE
QlNsaWNlIHZhbHVlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFdlYkNv
cmU6OkxldmVsREJEYXRhYmFzZTsKKyAgICBJdGVyYXRvckltcGwoUGFzc093blB0cjxsZXZlbGRi
OjpJdGVyYXRvcj4pOworCisgICAgT3duUHRyPGxldmVsZGI6Okl0ZXJhdG9yPiBtX2l0ZXJhdG9y
OworfTsKK30KKworSXRlcmF0b3JJbXBsOjpJdGVyYXRvckltcGwoUGFzc093blB0cjxsZXZlbGRi
OjpJdGVyYXRvcj4gaXQpCisgICAgOiBtX2l0ZXJhdG9yKGl0KQoreworfQorCitib29sIEl0ZXJh
dG9ySW1wbDo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faXRlcmF0b3ItPlZhbGlk
KCk7Cit9CisKK3ZvaWQgSXRlcmF0b3JJbXBsOjpzZWVrVG9MYXN0KCkKK3sKKyAgICBtX2l0ZXJh
dG9yLT5TZWVrVG9MYXN0KCk7Cit9CisKK3ZvaWQgSXRlcmF0b3JJbXBsOjpzZWVrKGNvbnN0IExl
dmVsREJTbGljZSYgdGFyZ2V0KQoreworICAgIG1faXRlcmF0b3ItPlNlZWsobWFrZVNsaWNlKHRh
cmdldCkpOworfQorCit2b2lkIEl0ZXJhdG9ySW1wbDo6bmV4dCgpCit7CisgICAgQVNTRVJUKGlz
VmFsaWQoKSk7CisgICAgbV9pdGVyYXRvci0+TmV4dCgpOworfQorCit2b2lkIEl0ZXJhdG9ySW1w
bDo6cHJldigpCit7CisgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgbV9pdGVyYXRvci0+UHJl
digpOworfQorCitMZXZlbERCU2xpY2UgSXRlcmF0b3JJbXBsOjprZXkoKSBjb25zdAoreworICAg
IEFTU0VSVChpc1ZhbGlkKCkpOworICAgIHJldHVybiBtYWtlTGV2ZWxEQlNsaWNlKG1faXRlcmF0
b3ItPmtleSgpKTsKK30KKworTGV2ZWxEQlNsaWNlIEl0ZXJhdG9ySW1wbDo6dmFsdWUoKSBjb25z
dAoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIHJldHVybiBtYWtlTGV2ZWxEQlNsaWNl
KG1faXRlcmF0b3ItPnZhbHVlKCkpOworfQorCiBQYXNzT3duUHRyPExldmVsREJJdGVyYXRvcj4g
TGV2ZWxEQkRhdGFiYXNlOjpjcmVhdGVJdGVyYXRvcigpCiB7CiAgICAgT3duUHRyPGxldmVsZGI6
Okl0ZXJhdG9yPiBpID0gYWRvcHRQdHIobV9kYi0+TmV3SXRlcmF0b3IobGV2ZWxkYjo6UmVhZE9w
dGlvbnMoKSkpOwogICAgIGlmICghaSkgLy8gRklYTUU6IERvdWJsZSBjaGVjayBpZiB3ZSBhY3R1
YWxseSBuZWVkIHRvIGNoZWNrIHRoaXMuCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgTGV2ZWxEQkl0ZXJhdG9yKGkucmVsZWFzZSgpKSk7CisgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBJdGVyYXRvckltcGwoaS5yZWxlYXNlKCkpKTsKK30KKworY29uc3Qg
TGV2ZWxEQkNvbXBhcmF0b3IqIExldmVsREJEYXRhYmFzZTo6Y29tcGFyYXRvcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fY29tcGFyYXRvcjsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmgKaW5kZXggNTI2ZDBiOC4uY2JjMjhm
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0
YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRh
YmFzZS5oCkBAIC00Myw2ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIExldmVs
REJDb21wYXJhdG9yOwogY2xhc3MgTGV2ZWxEQkl0ZXJhdG9yOwogY2xhc3MgTGV2ZWxEQlNsaWNl
OworY2xhc3MgTGV2ZWxEQldyaXRlQmF0Y2g7CiAKIGNsYXNzIExldmVsREJEYXRhYmFzZSB7CiBw
dWJsaWM6CkBAIC01MiwxMiArNTMsMTUgQEAgcHVibGljOgogICAgIGJvb2wgcHV0KGNvbnN0IExl
dmVsREJTbGljZSYga2V5LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHZhbHVlKTsKICAgICBib29sIHJl
bW92ZShjb25zdCBMZXZlbERCU2xpY2UmIGtleSk7CiAgICAgYm9vbCBnZXQoY29uc3QgTGV2ZWxE
QlNsaWNlJiBrZXksIFZlY3RvcjxjaGFyPiYgdmFsdWUpOworICAgIGJvb2wgd3JpdGUoTGV2ZWxE
QldyaXRlQmF0Y2gmKTsKICAgICBQYXNzT3duUHRyPExldmVsREJJdGVyYXRvcj4gY3JlYXRlSXRl
cmF0b3IoKTsKKyAgICBjb25zdCBMZXZlbERCQ29tcGFyYXRvciogY29tcGFyYXRvcigpIGNvbnN0
OwogCiBwcml2YXRlOgogICAgIExldmVsREJEYXRhYmFzZSgpOwogCiAgICAgT3duUHRyPGxldmVs
ZGI6OkRCPiBtX2RiOworICAgIGNvbnN0IExldmVsREJDb21wYXJhdG9yKiBtX2NvbXBhcmF0b3I7
CiAgICAgT3duUHRyPGxldmVsZGI6OkNvbXBhcmF0b3I+IG1fY29tcGFyYXRvckFkYXB0ZXI7CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJJ
dGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJJdGVy
YXRvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNTI4MWUuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCSXRlcmF0b3IuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJMZXZlbERCSXRlcmF0b3IuaCIKLQotI2lmIEVOQUJMRShMRVZFTERCKQot
Ci0jaW5jbHVkZSA8bGV2ZWxkYi9pdGVyYXRvci5oPgotI2luY2x1ZGUgPGxldmVsZGIvc2xpY2Uu
aD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1MZXZlbERCSXRlcmF0b3I6On5MZXZlbERCSXRlcmF0b3IoKQotewotfQotCi1MZXZl
bERCSXRlcmF0b3I6OkxldmVsREJJdGVyYXRvcihQYXNzT3duUHRyPGxldmVsZGI6Okl0ZXJhdG9y
PiBpdCkKLSAgICA6IG1faXRlcmF0b3IoaXQpCi17Ci19Ci0KLXN0YXRpYyBsZXZlbGRiOjpTbGlj
ZSBtYWtlU2xpY2UoY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gbGV2
ZWxkYjo6U2xpY2UodmFsdWUuZGF0YSgpLCB2YWx1ZS5zaXplKCkpOwotfQotCi1zdGF0aWMgTGV2
ZWxEQlNsaWNlIG1ha2VMZXZlbERCU2xpY2UobGV2ZWxkYjo6U2xpY2UgcykKLXsKLSAgICByZXR1
cm4gTGV2ZWxEQlNsaWNlKHMuZGF0YSgpLCBzLmRhdGEoKSArIHMuc2l6ZSgpKTsKLX0KLQotYm9v
bCBMZXZlbERCSXRlcmF0b3I6OmlzVmFsaWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2l0ZXJh
dG9yLT5WYWxpZCgpOwotfQotCi12b2lkIExldmVsREJJdGVyYXRvcjo6c2Vla1RvTGFzdCgpCi17
Ci0gICAgbV9pdGVyYXRvci0+U2Vla1RvTGFzdCgpOwotfQotCi12b2lkIExldmVsREJJdGVyYXRv
cjo6c2Vlayhjb25zdCBWZWN0b3I8Y2hhcj4mIHRhcmdldCkKLXsKLSAgICBtX2l0ZXJhdG9yLT5T
ZWVrKG1ha2VTbGljZSh0YXJnZXQpKTsKLX0KLQotdm9pZCBMZXZlbERCSXRlcmF0b3I6Om5leHQo
KQotewotICAgIG1faXRlcmF0b3ItPk5leHQoKTsKLX0KLQotdm9pZCBMZXZlbERCSXRlcmF0b3I6
OnByZXYoKQotewotICAgIG1faXRlcmF0b3ItPlByZXYoKTsKLX0KLQotTGV2ZWxEQlNsaWNlIExl
dmVsREJJdGVyYXRvcjo6a2V5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZUxldmVsREJTbGlj
ZShtX2l0ZXJhdG9yLT5rZXkoKSk7Ci19Ci0KLUxldmVsREJTbGljZSBMZXZlbERCSXRlcmF0b3I6
OnZhbHVlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZUxldmVsREJTbGljZShtX2l0ZXJhdG9y
LT52YWx1ZSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKExFVkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRi
L0xldmVsREJJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZl
bERCSXRlcmF0b3IuaAppbmRleCA3NjhhMWI0Li4xNTI1NWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkl0ZXJhdG9yLmgKQEAgLTI5LDM2ICsyOSwy
MSBAQAogI2lmIEVOQUJMRShMRVZFTERCKQogCiAjaW5jbHVkZSAiTGV2ZWxEQlNsaWNlLmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDxPd25QdHIuaD4KLSNpbmNsdWRl
IDxWZWN0b3IuaD4KLQotbmFtZXNwYWNlIGxldmVsZGIgewotY2xhc3MgSXRlcmF0b3I7Ci19CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTGV2ZWxEQkl0ZXJhdG9yIHsKIHB1YmxpYzoK
LSAgICB+TGV2ZWxEQkl0ZXJhdG9yKCk7Ci0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKLSAg
ICB2b2lkIHNlZWtUb0xhc3QoKTsKLSAgICB2b2lkIHNlZWsoY29uc3QgVmVjdG9yPGNoYXI+JiB0
YXJnZXQpOwotICAgIHZvaWQgbmV4dCgpOwotICAgIHZvaWQgcHJldigpOwotICAgIExldmVsREJT
bGljZSBrZXkoKSBjb25zdDsKLSAgICBMZXZlbERCU2xpY2UgdmFsdWUoKSBjb25zdDsKLQotcHJp
dmF0ZToKLSAgICBMZXZlbERCSXRlcmF0b3IoUGFzc093blB0cjxsZXZlbGRiOjpJdGVyYXRvcj4p
OwotICAgIGZyaWVuZCBjbGFzcyBMZXZlbERCRGF0YWJhc2U7Ci0KLSAgICBPd25QdHI8bGV2ZWxk
Yjo6SXRlcmF0b3I+IG1faXRlcmF0b3I7CisgICAgdmlydHVhbCB+TGV2ZWxEQkl0ZXJhdG9yKCkg
eyB9OworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZWVrVG9MYXN0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZWVrKGNvbnN0IExldmVs
REJTbGljZSYgdGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG5leHQoKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHByZXYoKSA9IDA7CisgICAgdmlydHVhbCBMZXZlbERCU2xpY2Uga2V5KCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgTGV2ZWxEQlNsaWNlIHZhbHVlKCkgY29uc3QgPSAwOwog
fTsKIAotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoTEVWRUxE
QikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRy
YW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRy
YW5zYWN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODZhZDdj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZl
bERCVHJhbnNhY3Rpb24uY3BwCkBAIC0wLDAgKzEsNDM5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkxldmVsREJUcmFuc2FjdGlvbi5oIgorCisjaW5jbHVkZSAiTGV2
ZWxEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiTGV2ZWxEQlNsaWNlLmgiCisjaW5jbHVkZSAiTGV2
ZWxEQldyaXRlQmF0Y2guaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorI2lmIEVO
QUJMRShMRVZFTERCKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8TGV2ZWxE
QlRyYW5zYWN0aW9uPiBMZXZlbERCVHJhbnNhY3Rpb246OmNyZWF0ZShMZXZlbERCRGF0YWJhc2Uq
IGRiKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGV2ZWxEQlRyYW5zYWN0aW9uKGRiKSk7
Cit9CisKK0xldmVsREJUcmFuc2FjdGlvbjo6TGV2ZWxEQlRyYW5zYWN0aW9uKExldmVsREJEYXRh
YmFzZSogZGIpCisgICAgOiBtX2RiKGRiKQorICAgICwgbV9jb21wYXJhdG9yKGRiLT5jb21wYXJh
dG9yKCkpCisgICAgLCBtX2ZpbmlzaGVkKGZhbHNlKQoreworICAgIG1fdHJlZS5hYnN0cmFjdG9y
KCkubV9jb21wYXJhdG9yID0gbV9jb21wYXJhdG9yOworfQorCit2b2lkIExldmVsREJUcmFuc2Fj
dGlvbjo6Y2xlYXJUcmVlKCkKK3sKKyAgICBUcmVlVHlwZTo6SXRlcmF0b3IgaXRlcmF0b3I7Cisg
ICAgaXRlcmF0b3Iuc3RhcnRfaXRlcl9sZWFzdChtX3RyZWUpOworCisgICAgd2hpbGUgKCppdGVy
YXRvcikgeworICAgICAgICBkZWxldGUgKml0ZXJhdG9yOworICAgICAgICArK2l0ZXJhdG9yOwor
ICAgIH0KKyAgICBtX3RyZWUucHVyZ2UoKTsKK30KKworTGV2ZWxEQlRyYW5zYWN0aW9uOjp+TGV2
ZWxEQlRyYW5zYWN0aW9uKCkKK3sKKyAgICBjbGVhclRyZWUoKTsKK30KKworc3RhdGljIFZlY3Rv
cjxjaGFyPiBtYWtlVmVjdG9yKGNvbnN0IExldmVsREJTbGljZSYgc2xpY2UpCit7CisgICAgVmVj
dG9yPGNoYXI+IHY7CisgICAgZm9yIChjb25zdCBjaGFyKiBjcCA9IHNsaWNlLmJlZ2luKCk7IGNw
ICE9IHNsaWNlLmVuZCgpOyArK2NwKQorICAgICAgICB2LmFwcGVuZCgqY3ApOworICAgIHJldHVy
biB2OworfQorCitib29sIExldmVsREJUcmFuc2FjdGlvbjo6c2V0KGNvbnN0IExldmVsREJTbGlj
ZSYga2V5LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHZhbHVlLCBib29sIGRlbGV0ZWQpCit7CisgICAg
QVNTRVJUKCFtX2ZpbmlzaGVkKTsKKyAgICBib29sIG5ld05vZGUgPSBmYWxzZTsKKyAgICBBVkxU
cmVlTm9kZSogbm9kZSA9IG1fdHJlZS5zZWFyY2goa2V5KTsKKworICAgIGlmICghbm9kZSkgewor
ICAgICAgICBub2RlID0gbmV3IEFWTFRyZWVOb2RlOworICAgICAgICBub2RlLT5rZXkgPSBtYWtl
VmVjdG9yKGtleSk7CisgICAgICAgIG1fdHJlZS5pbnNlcnQobm9kZSk7CisgICAgICAgIG5ld05v
ZGUgPSB0cnVlOworICAgIH0KKyAgICBub2RlLT52YWx1ZSA9IHZhbHVlOworICAgIG5vZGUtPmRl
bGV0ZWQgPSBkZWxldGVkOworCisgICAgaWYgKG5ld05vZGUpCisgICAgICAgIHJlc2V0SXRlcmF0
b3JzKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTGV2ZWxEQlRyYW5zYWN0aW9uOjpw
dXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIGNvbnN0IFZlY3RvcjxjaGFyPiYgdmFsdWUpCit7
CisgICAgcmV0dXJuIHNldChrZXksIHZhbHVlLCBmYWxzZSk7Cit9CisKK2Jvb2wgTGV2ZWxEQlRy
YW5zYWN0aW9uOjpyZW1vdmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXkpCit7CisgICAgcmV0dXJu
IHNldChrZXksIFZlY3RvcjxjaGFyPigpLCB0cnVlKTsKK30KKworYm9vbCBMZXZlbERCVHJhbnNh
Y3Rpb246OmdldChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgVmVjdG9yPGNoYXI+JiB2YWx1ZSkK
K3sKKyAgICBBU1NFUlQoIW1fZmluaXNoZWQpOworICAgIEFWTFRyZWVOb2RlKiBub2RlID0gbV90
cmVlLnNlYXJjaChrZXkpOworCisgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgaWYgKG5vZGUtPmRl
bGV0ZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdmFsdWUgPSBub2Rl
LT52YWx1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIG1fZGIt
PmdldChrZXksIHZhbHVlKTsKK30KKworYm9vbCBMZXZlbERCVHJhbnNhY3Rpb246OmNvbW1pdCgp
Cit7CisgICAgQVNTRVJUKCFtX2ZpbmlzaGVkKTsKKyAgICBPd25QdHI8TGV2ZWxEQldyaXRlQmF0
Y2g+IHdyaXRlQmF0Y2ggPSBMZXZlbERCV3JpdGVCYXRjaDo6Y3JlYXRlKCk7CisKKyAgICBUcmVl
VHlwZTo6SXRlcmF0b3IgaXRlcmF0b3I7CisgICAgaXRlcmF0b3Iuc3RhcnRfaXRlcl9sZWFzdCht
X3RyZWUpOworCisgICAgd2hpbGUgKCppdGVyYXRvcikgeworICAgICAgICBBVkxUcmVlTm9kZSog
bm9kZSA9ICppdGVyYXRvcjsKKyAgICAgICAgaWYgKCFub2RlLT5kZWxldGVkKQorICAgICAgICAg
ICAgd3JpdGVCYXRjaC0+cHV0KG5vZGUtPmtleSwgbm9kZS0+dmFsdWUpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICB3cml0ZUJhdGNoLT5yZW1vdmUobm9kZS0+a2V5KTsKKyAgICAgICAgKytp
dGVyYXRvcjsKKyAgICB9CisKKyAgICBpZiAoIW1fZGItPndyaXRlKCp3cml0ZUJhdGNoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2xlYXJUcmVlKCk7CisgICAgbV9maW5pc2hlZCA9
IHRydWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpy
b2xsYmFjaygpCit7CisgICAgQVNTRVJUKCFtX2ZpbmlzaGVkKTsKKyAgICBtX2ZpbmlzaGVkID0g
dHJ1ZTsKKyAgICBjbGVhclRyZWUoKTsKK30KKworUGFzc093blB0cjxMZXZlbERCSXRlcmF0b3I+
IExldmVsREJUcmFuc2FjdGlvbjo6Y3JlYXRlSXRlcmF0b3IoKQoreworICAgIHJldHVybiBUcmFu
c2FjdGlvbkl0ZXJhdG9yOjpjcmVhdGUodGhpcyk7Cit9CisKK1Bhc3NPd25QdHI8TGV2ZWxEQlRy
YW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I+IExldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9y
OjpjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFRyZWVJdGVyYXRvcih0cmFuc2FjdGlvbikpOworfQorCitib29sIExldmVs
REJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjppc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gKm1faXRlcmF0b3I7Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRlcmF0
b3I6OnNlZWtUb0xhc3QoKQoreworICAgIG1faXRlcmF0b3Iuc3RhcnRfaXRlcl9ncmVhdGVzdCgq
bV90cmVlKTsKKyAgICBpZiAoaXNWYWxpZCgpKQorICAgICAgICBtX2tleSA9ICgqbV9pdGVyYXRv
ciktPmtleTsKK30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6c2Vl
ayhjb25zdCBMZXZlbERCU2xpY2UmIHRhcmdldCkKK3sKKyAgICBtX2l0ZXJhdG9yLnN0YXJ0X2l0
ZXIoKm1fdHJlZSwgdGFyZ2V0LCBUcmVlVHlwZTo6RVFVQUwpOworICAgIGlmICghaXNWYWxpZCgp
KQorICAgICAgICBtX2l0ZXJhdG9yLnN0YXJ0X2l0ZXIoKm1fdHJlZSwgdGFyZ2V0LCBUcmVlVHlw
ZTo6R1JFQVRFUik7CisKKyAgICBpZiAoaXNWYWxpZCgpKQorICAgICAgICBtX2tleSA9ICgqbV9p
dGVyYXRvciktPmtleTsKK30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRv
cjo6bmV4dCgpCit7CisgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgKyttX2l0ZXJhdG9yOwor
ICAgIGlmIChpc1ZhbGlkKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPm1fY29t
cGFyYXRvci0+Y29tcGFyZSgoKm1faXRlcmF0b3IpLT5rZXksIG1fa2V5KSA+IDApOworICAgICAg
ICBtX2tleSA9ICgqbV9pdGVyYXRvciktPmtleTsKKyAgICB9Cit9CisKK3ZvaWQgTGV2ZWxEQlRy
YW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I6OnByZXYoKQoreworICAgIEFTU0VSVChpc1ZhbGlkKCkp
OworICAgIC0tbV9pdGVyYXRvcjsKKyAgICBpZiAoaXNWYWxpZCgpKSB7CisgICAgICAgIEFTU0VS
VChtX3RyZWUtPmFic3RyYWN0b3IoKS5tX2NvbXBhcmF0b3ItPmNvbXBhcmUoKCptX2l0ZXJhdG9y
KS0+a2V5LCBtX2tleSkgPCAwKTsKKyAgICAgICAgbV9rZXkgPSAoKm1faXRlcmF0b3IpLT5rZXk7
CisgICAgfQorfQorCitMZXZlbERCU2xpY2UgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRlcmF0
b3I6OmtleSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgcmV0dXJuIG1f
a2V5OworfQorCitMZXZlbERCU2xpY2UgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I6
OnZhbHVlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICBBU1NFUlQoIWlz
RGVsZXRlZCgpKTsKKyAgICByZXR1cm4gKCptX2l0ZXJhdG9yKS0+dmFsdWU7Cit9CisKK2Jvb2wg
TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I6OmlzRGVsZXRlZCgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgcmV0dXJuICgqbV9pdGVyYXRvciktPmRlbGV0ZWQ7
Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I6OnJlc2V0KCkKK3sK
KyAgICAvLyBGSVhNRTogQmUgbGF6eTogc2V0IGEgZmxhZyBhbmQgZG8gdGhlIGFjdHVhbCByZXNl
dCBuZXh0IHRpbWUgd2UgdXNlIHRoZSBpdGVyYXRvci4KKyAgICBpZiAoaXNWYWxpZCgpKSB7Cisg
ICAgICAgIG1faXRlcmF0b3Iuc3RhcnRfaXRlcigqbV90cmVlLCBtX2tleSwgVHJlZVR5cGU6OkVR
VUFMKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgfQorfQorCitMZXZlbERCVHJh
bnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6flRyZWVJdGVyYXRvcigpCit7CisgICAgbV90cmFuc2Fj
dGlvbi0+dW5yZWdpc3Rlckl0ZXJhdG9yKHRoaXMpOworfTsKKworTGV2ZWxEQlRyYW5zYWN0aW9u
OjpUcmVlSXRlcmF0b3I6OlRyZWVJdGVyYXRvcihMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uKQorICAgIDogbV90cmVlKCZ0cmFuc2FjdGlvbi0+bV90cmVlKQorICAgICwgbV90cmFuc2Fj
dGlvbih0cmFuc2FjdGlvbikKK3sKKyAgICB0cmFuc2FjdGlvbi0+cmVnaXN0ZXJJdGVyYXRvcih0
aGlzKTsKK30KKworUGFzc093blB0cjxMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRl
cmF0b3I+IExldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6Y3JlYXRlKFBh
c3NSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbikKK3sKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFRyYW5zYWN0aW9uSXRlcmF0b3IodHJhbnNhY3Rpb24pKTsKK30KKworTGV2
ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpUcmFuc2FjdGlvbkl0ZXJhdG9y
KFBhc3NSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbikKKyAgICA6IG1fdHJh
bnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgLCBtX2NvbXBhcmF0b3IobV90cmFuc2FjdGlvbi0+
bV9jb21wYXJhdG9yKQorICAgICwgbV90cmVlSXRlcmF0b3IoVHJlZUl0ZXJhdG9yOjpjcmVhdGUo
bV90cmFuc2FjdGlvbi5nZXQoKSkpCisgICAgLCBtX2RiSXRlcmF0b3IobV90cmFuc2FjdGlvbi0+
bV9kYi0+Y3JlYXRlSXRlcmF0b3IoKSkKKyAgICAsIG1fY3VycmVudCgwKQorICAgICwgbV9kaXJl
Y3Rpb24oa0ZvcndhcmQpCit7Cit9CisKK2Jvb2wgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2Fj
dGlvbkl0ZXJhdG9yOjppc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jdXJyZW50Owor
fQorCit2b2lkIExldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6c2Vla1Rv
TGFzdCgpCit7CisgICAgbV90cmVlSXRlcmF0b3ItPnNlZWtUb0xhc3QoKTsKKyAgICBtX2RiSXRl
cmF0b3ItPnNlZWtUb0xhc3QoKTsKKyAgICBtX2RpcmVjdGlvbiA9IGtSZXZlcnNlOworCisgICAg
aGFuZGxlQ29uZmxpY3RzQW5kRGVsZXRlcygpOworICAgIHNldEN1cnJlbnRJdGVyYXRvclRvTGFy
Z2VzdEtleSgpOworfQorCit2b2lkIExldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVy
YXRvcjo6c2Vlayhjb25zdCBMZXZlbERCU2xpY2UmIHRhcmdldCkKK3sKKyAgICBtX3RyZWVJdGVy
YXRvci0+c2Vlayh0YXJnZXQpOworICAgIG1fZGJJdGVyYXRvci0+c2Vlayh0YXJnZXQpOworICAg
IG1fZGlyZWN0aW9uID0ga0ZvcndhcmQ7CisKKyAgICBoYW5kbGVDb25mbGljdHNBbmREZWxldGVz
KCk7CisgICAgc2V0Q3VycmVudEl0ZXJhdG9yVG9TbWFsbGVzdEtleSgpOworfQorCit2b2lkIExl
dmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6bmV4dCgpCit7CisgICAgQVNT
RVJUKGlzVmFsaWQoKSk7CisKKyAgICBpZiAobV9kaXJlY3Rpb24gIT0ga0ZvcndhcmQpIHsKKyAg
ICAgICAgLy8gRW5zdXJlIHRoZSBub24tY3VycmVudCBpdGVyYXRvciBpcyBwb3NpdGlvbmVkIGFm
dGVyIGtleSgpLgorCisgICAgICAgIGlmIChtX2N1cnJlbnQgIT0gbV90cmVlSXRlcmF0b3IuZ2V0
KCkpIHsKKyAgICAgICAgICAgIG1fdHJlZUl0ZXJhdG9yLT5zZWVrKG1fY3VycmVudC0+a2V5KCkp
OworICAgICAgICAgICAgaWYgKG1fdHJlZUl0ZXJhdG9yLT5pc1ZhbGlkKCkgJiYgIW1fY29tcGFy
YXRvci0+Y29tcGFyZShtX3RyZWVJdGVyYXRvci0+a2V5KCksIGtleSgpKSkKKyAgICAgICAgICAg
ICAgICBtX3RyZWVJdGVyYXRvci0+bmV4dCgpOworCisgICAgICAgICAgICBBU1NFUlQoIW1fdHJl
ZUl0ZXJhdG9yLT5pc1ZhbGlkKCkgfHwgbV9jb21wYXJhdG9yLT5jb21wYXJlKG1fdHJlZUl0ZXJh
dG9yLT5rZXkoKSwga2V5KCkpID4gMCk7CisgICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50ICE9
IG1fZGJJdGVyYXRvci5nZXQoKSkgeworICAgICAgICAgICAgbV9kYkl0ZXJhdG9yLT5zZWVrKG1f
Y3VycmVudC0+a2V5KCkpOworICAgICAgICAgICAgaWYgKG1fZGJJdGVyYXRvci0+aXNWYWxpZCgp
ICYmICFtX2NvbXBhcmF0b3ItPmNvbXBhcmUobV9kYkl0ZXJhdG9yLT5rZXkoKSwga2V5KCkpKQor
ICAgICAgICAgICAgICAgIG1fZGJJdGVyYXRvci0+bmV4dCgpOworCisgICAgICAgICAgICBBU1NF
UlQoIW1fZGJJdGVyYXRvci0+aXNWYWxpZCgpIHx8IG1fY29tcGFyYXRvci0+Y29tcGFyZShtX2Ri
SXRlcmF0b3ItPmtleSgpLCBrZXkoKSkgPiAwKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fZGly
ZWN0aW9uID0ga0ZvcndhcmQ7CisgICAgfQorCisgICAgbV9jdXJyZW50LT5uZXh0KCk7CisgICAg
aGFuZGxlQ29uZmxpY3RzQW5kRGVsZXRlcygpOworICAgIHNldEN1cnJlbnRJdGVyYXRvclRvU21h
bGxlc3RLZXkoKTsKK30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRl
cmF0b3I6OnByZXYoKQoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworCisgICAgaWYgKG1fZGly
ZWN0aW9uICE9IGtSZXZlcnNlKSB7CisgICAgICAgIC8vIEVuc3VyZSB0aGUgbm9uLWN1cnJlbnQg
aXRlcmF0b3IgaXMgcG9zaXRpb25lZCBiZWZvcmUga2V5KCk7CisKKyAgICAgICAgaWYgKG1fY3Vy
cmVudCAhPSBtX3RyZWVJdGVyYXRvci5nZXQoKSkgeworICAgICAgICAgICAgbV90cmVlSXRlcmF0
b3ItPnNlZWsobV9jdXJyZW50LT5rZXkoKSk7CisKKyAgICAgICAgICAgIGlmIChtX3RyZWVJdGVy
YXRvci0+aXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIG1fdHJlZUl0ZXJhdG9yLT5wcmV2KCk7
IC8vIEl0ZXJhdG9yIGlzIGF0IGZpcnN0IGVudHJ5ID49IGtleSgpLiBTdGVwIGJhY2sgb25jZSB0
byBlbnRyeSA8IGtleS4gVGhpcyBpcyB3aHkgd2UgZG9uJ3QgY2hlY2sgZm9yIHRoZSBrZXlzIGJl
aW5nIHRoZSBzYW1lIGJlZm9yZSBzdGVwcGluZywgbGlrZSB3ZSBkbyBpbiBuZXh0KCkgYWJvdmUu
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV90cmVlSXRlcmF0b3ItPnNlZWtU
b0xhc3QoKTsgLy8gSXRlcmF0b3IgaGFzIG5vIGVudHJpZXMgPj0ga2V5KCkuIFBvc2l0aW9uIGF0
IGxhc3QgZW50cnkuCisKKyAgICAgICAgICAgIEFTU0VSVCghbV90cmVlSXRlcmF0b3ItPmlzVmFs
aWQoKSB8fCBtX2NvbXBhcmF0b3ItPmNvbXBhcmUobV90cmVlSXRlcmF0b3ItPmtleSgpLCBrZXko
KSkgPCAwKTsKKyAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnQgIT0gbV9kYkl0ZXJhdG9yLmdl
dCgpKSB7CisgICAgICAgICAgICBtX2RiSXRlcmF0b3ItPnNlZWsobV9jdXJyZW50LT5rZXkoKSk7
CisKKyAgICAgICAgICAgIGlmIChtX2RiSXRlcmF0b3ItPmlzVmFsaWQoKSkKKyAgICAgICAgICAg
ICAgICBtX2RiSXRlcmF0b3ItPnByZXYoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtX2RiSXRlcmF0b3ItPnNlZWtUb0xhc3QoKTsKKworICAgICAgICAgICAgQVNTRVJUKCFt
X2RiSXRlcmF0b3ItPmlzVmFsaWQoKSB8fCBtX2NvbXBhcmF0b3ItPmNvbXBhcmUobV9kYkl0ZXJh
dG9yLT5rZXkoKSwga2V5KCkpIDwgMCk7CisgICAgICAgICB9CisKKyAgICAgICAgbV9kaXJlY3Rp
b24gPSBrUmV2ZXJzZTsKKyAgICB9CisKKyAgICBtX2N1cnJlbnQtPnByZXYoKTsKKyAgICBoYW5k
bGVDb25mbGljdHNBbmREZWxldGVzKCk7CisgICAgc2V0Q3VycmVudEl0ZXJhdG9yVG9MYXJnZXN0
S2V5KCk7Cit9CisKK0xldmVsREJTbGljZSBMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9u
SXRlcmF0b3I6OmtleSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgcmV0
dXJuIG1fY3VycmVudC0+a2V5KCk7Cit9CisKK0xldmVsREJTbGljZSBMZXZlbERCVHJhbnNhY3Rp
b246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnZhbHVlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNW
YWxpZCgpKTsKKyAgICByZXR1cm4gbV9jdXJyZW50LT52YWx1ZSgpOworfQorCit2b2lkIExldmVs
REJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6aGFuZGxlQ29uZmxpY3RzQW5kRGVs
ZXRlcygpCit7CisgICAgZm9yICg7OykgeworICAgICAgICBpZiAobV90cmVlSXRlcmF0b3ItPmlz
VmFsaWQoKSAmJiBtX2RiSXRlcmF0b3ItPmlzVmFsaWQoKSAmJiAhbV9jb21wYXJhdG9yLT5jb21w
YXJlKG1fdHJlZUl0ZXJhdG9yLT5rZXkoKSwgbV9kYkl0ZXJhdG9yLT5rZXkoKSkpIHsKKyAgICAg
ICAgICAgIC8vIEZvciBlcXVhbCBrZXlzLCB0aGUgdHJlZSBpdGVyYXRvciB0YWtlcyBwcmVjZWRl
bmNlLCBzbyBtb3ZlIHRoZSBkYXRhYmFzZSBpdGVyYXRvciBhbm90aGVyIHN0ZXAuCisgICAgICAg
ICAgICBpZiAobV9kaXJlY3Rpb24gPT0ga0ZvcndhcmQpCisgICAgICAgICAgICAgICAgbV9kYkl0
ZXJhdG9yLT5uZXh0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9kYkl0
ZXJhdG9yLT5wcmV2KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChtX3RyZWVJdGVyYXRvci0+aXNWYWxpZCgpICYmIG1fdHJlZUl0ZXJhdG9yLT5pc0Rl
bGV0ZWQoKSkgeworICAgICAgICAgICAgLy8gSWYgdGhlIHRyZWUgaXRlcmF0b3IgaXMgb24gYSBk
ZWxldGUgbWFya2VyLCB0YWtlIGFub3RoZXIgc3RlcC4KKyAgICAgICAgICAgIGlmIChtX2RpcmVj
dGlvbiA9PSBrRm9yd2FyZCkKKyAgICAgICAgICAgICAgICBtX3RyZWVJdGVyYXRvci0+bmV4dCgp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fdHJlZUl0ZXJhdG9yLT5wcmV2
KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpz
ZXRDdXJyZW50SXRlcmF0b3JUb1NtYWxsZXN0S2V5KCkKK3sKKyAgICBMZXZlbERCSXRlcmF0b3Iq
IHNtYWxsZXN0ID0gMDsKKworICAgIGlmIChtX3RyZWVJdGVyYXRvci0+aXNWYWxpZCgpKQorICAg
ICAgICBzbWFsbGVzdCA9IG1fdHJlZUl0ZXJhdG9yLmdldCgpOworCisgICAgaWYgKG1fZGJJdGVy
YXRvci0+aXNWYWxpZCgpKSB7CisgICAgICAgIGlmICghc21hbGxlc3QgfHwgbV9jb21wYXJhdG9y
LT5jb21wYXJlKG1fZGJJdGVyYXRvci0+a2V5KCksIHNtYWxsZXN0LT5rZXkoKSkgPCAwKQorICAg
ICAgICAgICAgc21hbGxlc3QgPSBtX2RiSXRlcmF0b3IuZ2V0KCk7CisgICAgfQorCisgICAgbV9j
dXJyZW50ID0gc21hbGxlc3Q7Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2Fj
dGlvbkl0ZXJhdG9yOjpzZXRDdXJyZW50SXRlcmF0b3JUb0xhcmdlc3RLZXkoKQoreworICAgIExl
dmVsREJJdGVyYXRvciogbGFyZ2VzdCA9IDA7CisKKyAgICBpZiAobV90cmVlSXRlcmF0b3ItPmlz
VmFsaWQoKSkKKyAgICAgICAgbGFyZ2VzdCA9IG1fdHJlZUl0ZXJhdG9yLmdldCgpOworCisgICAg
aWYgKG1fZGJJdGVyYXRvci0+aXNWYWxpZCgpKSB7CisgICAgICAgIGlmICghbGFyZ2VzdCB8fCBt
X2NvbXBhcmF0b3ItPmNvbXBhcmUobV9kYkl0ZXJhdG9yLT5rZXkoKSwgbGFyZ2VzdC0+a2V5KCkp
ID4gMCkKKyAgICAgICAgICAgIGxhcmdlc3QgPSBtX2RiSXRlcmF0b3IuZ2V0KCk7CisgICAgfQor
CisgICAgbV9jdXJyZW50ID0gbGFyZ2VzdDsKK30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246
OnJlZ2lzdGVySXRlcmF0b3IoVHJlZUl0ZXJhdG9yKiBpdGVyYXRvcikKK3sKKyAgICBBU1NFUlQo
IW1fdHJlZUl0ZXJhdG9ycy5jb250YWlucyhpdGVyYXRvcikpOworICAgIG1fdHJlZUl0ZXJhdG9y
cy5hZGQoaXRlcmF0b3IpOworfQorCit2b2lkIExldmVsREJUcmFuc2FjdGlvbjo6dW5yZWdpc3Rl
ckl0ZXJhdG9yKFRyZWVJdGVyYXRvciogaXRlcmF0b3IpCit7CisgICAgQVNTRVJUKG1fdHJlZUl0
ZXJhdG9ycy5jb250YWlucyhpdGVyYXRvcikpOworICAgIG1fdHJlZUl0ZXJhdG9ycy5yZW1vdmUo
aXRlcmF0b3IpOworfQorCit2b2lkIExldmVsREJUcmFuc2FjdGlvbjo6cmVzZXRJdGVyYXRvcnMo
KQoreworICAgIGZvciAoSGFzaFNldDxUcmVlSXRlcmF0b3IqPjo6aXRlcmF0b3IgaSA9IG1fdHJl
ZUl0ZXJhdG9ycy5iZWdpbigpOyBpICE9IG1fdHJlZUl0ZXJhdG9ycy5lbmQoKTsgKytpKSB7Cisg
ICAgICAgIFRyZWVJdGVyYXRvciogdHJlZUl0ZXJhdG9yID0gKmk7CisgICAgICAgIHRyZWVJdGVy
YXRvci0+cmVzZXQoKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShMRVZFTERCKQorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJh
bnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5z
YWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJlODYyYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRy
YW5zYWN0aW9uLmgKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIExldmVsREJUcmFu
c2FjdGlvbl9oCisjZGVmaW5lIExldmVsREJUcmFuc2FjdGlvbl9oCisKKyNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKKyNpZiBFTkFCTEUoTEVWRUxEQikKKworI2luY2x1ZGUgIkxldmVsREJD
b21wYXJhdG9yLmgiCisjaW5jbHVkZSAiTGV2ZWxEQkl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiTGV2
ZWxEQlNsaWNlLmgiCisjaW5jbHVkZSA8d3RmL0FWTFRyZWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgTGV2ZWxEQkRhdGFiYXNlOworCit1c2luZyBXVEY6OkFWTFRyZWU7CisKK2NsYXNzIExl
dmVsREJUcmFuc2FjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPExldmVsREJUcmFuc2FjdGlvbj4g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gY3Jl
YXRlKExldmVsREJEYXRhYmFzZSopOworCisgICAgfkxldmVsREJUcmFuc2FjdGlvbigpOworICAg
IGJvb2wgcHV0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHZh
bHVlKTsKKyAgICBib29sIHJlbW92ZShjb25zdCBMZXZlbERCU2xpY2UmIGtleSk7CisgICAgYm9v
bCBnZXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIFZlY3RvcjxjaGFyPiYgdmFsdWUpOworICAg
IGJvb2wgY29tbWl0KCk7CisgICAgdm9pZCByb2xsYmFjaygpOworCisgICAgUGFzc093blB0cjxM
ZXZlbERCSXRlcmF0b3I+IGNyZWF0ZUl0ZXJhdG9yKCk7CisKK3ByaXZhdGU6CisgICAgTGV2ZWxE
QlRyYW5zYWN0aW9uKExldmVsREJEYXRhYmFzZSopOworCisgICAgc3RydWN0IEFWTFRyZWVOb2Rl
IHsKKyAgICAgICAgVmVjdG9yPGNoYXI+IGtleTsKKyAgICAgICAgVmVjdG9yPGNoYXI+IHZhbHVl
OworICAgICAgICBib29sIGRlbGV0ZWQ7CisKKyAgICAgICAgQVZMVHJlZU5vZGUqIGxlc3M7Cisg
ICAgICAgIEFWTFRyZWVOb2RlKiBncmVhdGVyOworICAgICAgICBpbnQgYmFsYW5jZUZhY3RvcjsK
KyAgICB9OworCisgICAgc3RydWN0IEFWTFRyZWVBYnN0cmFjdG9yIHsKKyAgICAgICAgdHlwZWRl
ZiBBVkxUcmVlTm9kZSogaGFuZGxlOworICAgICAgICB0eXBlZGVmIHNpemVfdCBzaXplOworICAg
ICAgICB0eXBlZGVmIExldmVsREJTbGljZSBrZXk7CisKKyAgICAgICAgaGFuZGxlIGdldF9sZXNz
KGhhbmRsZSBoKSB7IHJldHVybiBoLT5sZXNzOyB9CisgICAgICAgIHZvaWQgc2V0X2xlc3MoaGFu
ZGxlIGgsIGhhbmRsZSBsZXNzKSB7IGgtPmxlc3MgPSBsZXNzOyB9CisgICAgICAgIGhhbmRsZSBn
ZXRfZ3JlYXRlcihoYW5kbGUgaCkgeyByZXR1cm4gaC0+Z3JlYXRlcjsgfQorICAgICAgICB2b2lk
IHNldF9ncmVhdGVyKGhhbmRsZSBoLCBoYW5kbGUgZ3JlYXRlcikgeyBoLT5ncmVhdGVyID0gZ3Jl
YXRlcjsgfQorCisgICAgICAgIGludCBnZXRfYmFsYW5jZV9mYWN0b3IoaGFuZGxlIGgpIHsgcmV0
dXJuIGgtPmJhbGFuY2VGYWN0b3I7IH0KKyAgICAgICAgdm9pZCBzZXRfYmFsYW5jZV9mYWN0b3Io
aGFuZGxlIGgsIGludCBiZikgeyBoLT5iYWxhbmNlRmFjdG9yID0gYmY7IH0KKworICAgICAgICBp
bnQgY29tcGFyZV9rZXlfa2V5KGNvbnN0IGtleSYga2EsIGNvbnN0IGtleSYga2IpIHsgcmV0dXJu
IG1fY29tcGFyYXRvci0+Y29tcGFyZShrYSwga2IpOyB9CisgICAgICAgIGludCBjb21wYXJlX2tl
eV9ub2RlKGNvbnN0IGtleSYgaywgaGFuZGxlIGgpIHsgcmV0dXJuIGNvbXBhcmVfa2V5X2tleShr
LCBoLT5rZXkpOyB9CisgICAgICAgIGludCBjb21wYXJlX25vZGVfbm9kZShoYW5kbGUgaGEsIGhh
bmRsZSBoYikgeyByZXR1cm4gY29tcGFyZV9rZXlfa2V5KGhhLT5rZXksIGhiLT5rZXkpOyB9CisK
KyAgICAgICAgc3RhdGljIGhhbmRsZSBudWxsKCkgeyByZXR1cm4gMDsgfQorCisgICAgICAgIGNv
bnN0IExldmVsREJDb21wYXJhdG9yKiBtX2NvbXBhcmF0b3I7CisgICAgfTsKKworICAgIHR5cGVk
ZWYgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3Rvcj4gVHJlZVR5cGU7CisKKyAgICBjbGFzcyBUcmVl
SXRlcmF0b3IgOiBwdWJsaWMgTGV2ZWxEQkl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IHN0YXRpYyBQYXNzT3duUHRyPFRyZWVJdGVyYXRvcj4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlv
biopOworICAgICAgICB+VHJlZUl0ZXJhdG9yKCk7CisKKyAgICAgICAgdmlydHVhbCBib29sIGlz
VmFsaWQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNlZWtUb0xhc3QoKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHNlZWsoY29uc3QgTGV2ZWxEQlNsaWNlJik7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBuZXh0KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmV2KCk7CisgICAgICAgIHZp
cnR1YWwgTGV2ZWxEQlNsaWNlIGtleSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIExldmVsREJT
bGljZSB2YWx1ZSgpIGNvbnN0OworICAgICAgICBib29sIGlzRGVsZXRlZCgpIGNvbnN0OworICAg
ICAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBUcmVlSXRlcmF0b3Io
TGV2ZWxEQlRyYW5zYWN0aW9uKik7CisgICAgICAgIG11dGFibGUgVHJlZVR5cGU6Okl0ZXJhdG9y
IG1faXRlcmF0b3I7IC8vIERlcmVmZXJlbmNpbmcgdGhpcyBpcyBub24tY29uc3QuCisgICAgICAg
IFRyZWVUeXBlKiBtX3RyZWU7CisgICAgICAgIExldmVsREJUcmFuc2FjdGlvbiogbV90cmFuc2Fj
dGlvbjsKKyAgICAgICAgVmVjdG9yPGNoYXI+IG1fa2V5OworICAgIH07CisKKyAgICBjbGFzcyBU
cmFuc2FjdGlvbkl0ZXJhdG9yIDogcHVibGljIExldmVsREJJdGVyYXRvciB7CisgICAgcHVibGlj
OgorICAgICAgICB+VHJhbnNhY3Rpb25JdGVyYXRvcigpIHsgfTsKKyAgICAgICAgc3RhdGljIFBh
c3NPd25QdHI8VHJhbnNhY3Rpb25JdGVyYXRvcj4gY3JlYXRlKFBhc3NSZWZQdHI8TGV2ZWxEQlRy
YW5zYWN0aW9uPik7CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHNlZWtUb0xhc3QoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNl
ZWsoY29uc3QgTGV2ZWxEQlNsaWNlJiB0YXJnZXQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgbmV4
dCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHJldigpOworICAgICAgICB2aXJ0dWFsIExldmVs
REJTbGljZSBrZXkoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBMZXZlbERCU2xpY2UgdmFsdWUo
KSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIFRyYW5zYWN0aW9uSXRlcmF0b3IoUGFz
c1JlZlB0cjxMZXZlbERCVHJhbnNhY3Rpb24+KTsKKyAgICAgICAgdm9pZCBoYW5kbGVDb25mbGlj
dHNBbmREZWxldGVzKCk7CisgICAgICAgIHZvaWQgc2V0Q3VycmVudEl0ZXJhdG9yVG9TbWFsbGVz
dEtleSgpOworICAgICAgICB2b2lkIHNldEN1cnJlbnRJdGVyYXRvclRvTGFyZ2VzdEtleSgpOwor
CisgICAgICAgIFJlZlB0cjxMZXZlbERCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CisgICAg
ICAgIGNvbnN0IExldmVsREJDb21wYXJhdG9yKiBtX2NvbXBhcmF0b3I7CisgICAgICAgIE93blB0
cjxUcmVlSXRlcmF0b3I+IG1fdHJlZUl0ZXJhdG9yOworICAgICAgICBPd25QdHI8TGV2ZWxEQkl0
ZXJhdG9yPiBtX2RiSXRlcmF0b3I7CisgICAgICAgIExldmVsREJJdGVyYXRvciogbV9jdXJyZW50
OworCisgICAgICAgIGVudW0gRGlyZWN0aW9uIHsKKyAgICAgICAgICAgIGtGb3J3YXJkLAorICAg
ICAgICAgICAga1JldmVyc2UKKyAgICAgICAgfTsKKyAgICAgICAgRGlyZWN0aW9uIG1fZGlyZWN0
aW9uOworICAgIH07CisKKyAgICBib29sIHNldChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgY29u
c3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSwgYm9vbCBkZWxldGVkKTsKKyAgICB2b2lkIGNsZWFyVHJl
ZSgpOworICAgIHZvaWQgcmVnaXN0ZXJJdGVyYXRvcihUcmVlSXRlcmF0b3IqKTsKKyAgICB2b2lk
IHVucmVnaXN0ZXJJdGVyYXRvcihUcmVlSXRlcmF0b3IqKTsKKyAgICB2b2lkIHJlc2V0SXRlcmF0
b3JzKCk7CisKKyAgICBMZXZlbERCRGF0YWJhc2UqIG1fZGI7CisgICAgY29uc3QgTGV2ZWxEQkNv
bXBhcmF0b3IqIG1fY29tcGFyYXRvcjsKKyAgICBUcmVlVHlwZSBtX3RyZWU7CisgICAgYm9vbCBt
X2ZpbmlzaGVkOworICAgIEhhc2hTZXQ8VHJlZUl0ZXJhdG9yKj4gbV90cmVlSXRlcmF0b3JzOwor
fTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKExFVkVMREIpCisjZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBMZXZlbERCVHJhbnNhY3Rpb25faApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRjaC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzI0NzY2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRj
aC5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJMZXZlbERCV3JpdGVCYXRjaC5oIgorCisjaWYgRU5BQkxFKExFVkVMREIpCisKKyNpbmNs
dWRlICJMZXZlbERCU2xpY2UuaCIKKyNpbmNsdWRlIDxsZXZlbGRiL3NsaWNlLmg+CisjaW5jbHVk
ZSA8bGV2ZWxkYi93cml0ZV9iYXRjaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NP
d25QdHI8TGV2ZWxEQldyaXRlQmF0Y2g+IExldmVsREJXcml0ZUJhdGNoOjpjcmVhdGUoKQorewor
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGV2ZWxEQldyaXRlQmF0Y2gpOworfQorCitMZXZlbERC
V3JpdGVCYXRjaDo6TGV2ZWxEQldyaXRlQmF0Y2goKQorICAgIDogbV93cml0ZUJhdGNoKGFkb3B0
UHRyKG5ldyBsZXZlbGRiOjpXcml0ZUJhdGNoKSkKK3sKK30KKworTGV2ZWxEQldyaXRlQmF0Y2g6
On5MZXZlbERCV3JpdGVCYXRjaCgpCit7Cit9CisKK3N0YXRpYyBsZXZlbGRiOjpTbGljZSBtYWtl
U2xpY2UoY29uc3QgTGV2ZWxEQlNsaWNlJiBzKQoreworICAgIHJldHVybiBsZXZlbGRiOjpTbGlj
ZShzLmJlZ2luKCksIHMuZW5kKCkgLSBzLmJlZ2luKCkpOworfQorCit2b2lkIExldmVsREJXcml0
ZUJhdGNoOjpwdXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIGNvbnN0IExldmVsREJTbGljZSYg
dmFsdWUpCit7CisgICAgbV93cml0ZUJhdGNoLT5QdXQobWFrZVNsaWNlKGtleSksIG1ha2VTbGlj
ZSh2YWx1ZSkpOworfQorCit2b2lkIExldmVsREJXcml0ZUJhdGNoOjpyZW1vdmUoY29uc3QgTGV2
ZWxEQlNsaWNlJiBrZXkpCit7CisgICAgbV93cml0ZUJhdGNoLT5EZWxldGUobWFrZVNsaWNlKGtl
eSkpOworfQorCit2b2lkIExldmVsREJXcml0ZUJhdGNoOjpjbGVhcigpCit7CisgICAgbV93cml0
ZUJhdGNoLT5DbGVhcigpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRjaC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjk2ZTllZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmgKQEAgLTAsMCArMSw2MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgTGV2ZWxEQldyaXRlQmF0Y2hfaAorI2RlZmluZSBMZXZlbERCV3Jp
dGVCYXRjaF9oCisKKyNpZiBFTkFCTEUoTEVWRUxEQikKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgbGV2ZWxkYiB7Citj
bGFzcyBXcml0ZUJhdGNoOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExldmVs
REJTbGljZTsKKworY2xhc3MgTGV2ZWxEQldyaXRlQmF0Y2ggeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPExldmVsREJXcml0ZUJhdGNoPiBjcmVhdGUoKTsKKyAgICB+TGV2ZWxEQldy
aXRlQmF0Y2goKTsKKworICAgIHZvaWQgcHV0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBjb25z
dCBMZXZlbERCU2xpY2UmIHZhbHVlKTsKKyAgICB2b2lkIHJlbW92ZShjb25zdCBMZXZlbERCU2xp
Y2UmIGtleSk7CisgICAgdm9pZCBjbGVhcigpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBMZXZlbERCRGF0YWJhc2U7CisgICAgTGV2ZWxEQldyaXRlQmF0Y2goKTsKKworICAgIE93blB0
cjxsZXZlbGRiOjpXcml0ZUJhdGNoPiBtX3dyaXRlQmF0Y2g7Cit9OworCit9CisKKyNlbmRpZgor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNr
aW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0
b3JlLmNwcAppbmRleCAzYjBkZDMzLi43YWZiOWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNp
bmNsdWRlICJMZXZlbERCRGF0YWJhc2UuaCIKICNpbmNsdWRlICJMZXZlbERCSXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJMZXZlbERCU2xpY2UuaCIKKyNpbmNsdWRlICJMZXZlbERCVHJhbnNhY3Rpb24u
aCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCiAjaWZuZGVmIElOVDY0X01BWApAQCAt
NDksNyArNTAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBJREJM
ZXZlbERCQ29kaW5nOwogCi1zdGF0aWMgYm9vbCBnZXRJbnQoTGV2ZWxEQkRhdGFiYXNlKiBkYiwg
Y29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIGludDY0X3QmIGZvdW5kSW50KQordGVtcGxhdGUgPHR5
cGVuYW1lIERiT3JUcmFuc2FjdGlvbj4KK3N0YXRpYyBib29sIGdldEludChEYk9yVHJhbnNhY3Rp
b24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgaW50NjRfdCYgZm91bmRJbnQpCiB7CiAg
ICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKICAgICBpZiAoIWRiLT5nZXQoa2V5LCByZXN1bHQpKQpA
QCAtNTksMTIgKzYxLDE0IEBAIHN0YXRpYyBib29sIGdldEludChMZXZlbERCRGF0YWJhc2UqIGRi
LCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgaW50NjRfdCYgZm91bmRJCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXN0YXRpYyBib29sIHB1dEludChMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIGtleSwgaW50NjRfdCB2YWx1ZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBEYk9y
VHJhbnNhY3Rpb24+CitzdGF0aWMgYm9vbCBwdXRJbnQoRGJPclRyYW5zYWN0aW9uKiBkYiwgY29u
c3QgVmVjdG9yPGNoYXI+JiBrZXksIGludDY0X3QgdmFsdWUpCiB7CiAgICAgcmV0dXJuIGRiLT5w
dXQoa2V5LCBlbmNvZGVJbnQodmFsdWUpKTsKIH0KIAotc3RhdGljIGJvb2wgZ2V0U3RyaW5nKExl
dmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBTdHJpbmcmIGZvdW5k
U3RyaW5nKQordGVtcGxhdGUgPHR5cGVuYW1lIERiT3JUcmFuc2FjdGlvbj4KK3N0YXRpYyBib29s
IGdldFN0cmluZyhEYk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwg
U3RyaW5nJiBmb3VuZFN0cmluZykKIHsKICAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwogICAgIGlm
ICghZGItPmdldChrZXksIHJlc3VsdCkpCkBAIC03NCw3ICs3OCw4IEBAIHN0YXRpYyBib29sIGdl
dFN0cmluZyhMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgU3Ry
aW5nJiBmb3VuCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIHB1dFN0cmluZyhM
ZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5LCBjb25zdCBTdHJpbmcm
IHZhbHVlKQordGVtcGxhdGUgPHR5cGVuYW1lIERiT3JUcmFuc2FjdGlvbj4KK3N0YXRpYyBib29s
IHB1dFN0cmluZyhEYk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIGlmICghZGItPnB1dChrZXksIGVuY29kZVN0cmlu
Zyh2YWx1ZSkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yODMsMTIgKzI4OCwxMiBAQCB2
b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFi
YXNlSWQsIFZlY3RvcjxpbnQ2NF90PgogICAgIH0KIH0KIAotc3RhdGljIGludDY0X3QgZ2V0TmV3
T2JqZWN0U3RvcmVJZChMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQpCitz
dGF0aWMgaW50NjRfdCBnZXROZXdPYmplY3RTdG9yZUlkKExldmVsREJUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCkKIHsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
ZnJlZUxpc3RTdGFydEtleSA9IE9iamVjdFN0b3JlRnJlZUxpc3RLZXk6OmVuY29kZShkYXRhYmFz
ZUlkLCAwKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gZnJlZUxpc3RTdG9wS2V5ID0gT2JqZWN0
U3RvcmVGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIElOVDY0X01BWCk7CiAKLSAgICBP
d25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IGRiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIE93
blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7
CiAgICAgZm9yIChpdC0+c2VlayhmcmVlTGlzdFN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBj
b21wYXJlS2V5cyhpdC0+a2V5KCksIGZyZWVMaXN0U3RvcEtleSkgPCAwOyBpdC0+bmV4dCgpKSB7
CiAgICAgICAgIGNvbnN0IGNoYXIqIHAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKICAgICAgICAgY29u
c3QgY2hhciogbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7CkBAIC0yOTcsNyArMzAyLDcgQEAgc3Rh
dGljIGludDY0X3QgZ2V0TmV3T2JqZWN0U3RvcmVJZChMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2
NF90IGRhdGFiYXNlSWQpCiAgICAgICAgIHAgPSBPYmplY3RTdG9yZUZyZWVMaXN0S2V5OjpkZWNv
ZGUocCwgbGltaXQsICZmcmVlTGlzdEtleSk7CiAgICAgICAgIEFTU0VSVChwKTsKIAotICAgICAg
ICBib29sIG9rID0gZGItPnJlbW92ZShpdC0+a2V5KCkpOworICAgICAgICBib29sIG9rID0gdHJh
bnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG9rLCBv
ayk7CiAKICAgICAgICAgcmV0dXJuIGZyZWVMaXN0S2V5Lm9iamVjdFN0b3JlSWQoKTsKQEAgLTMw
NSwxMyArMzEwLDEzIEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld09iamVjdFN0b3JlSWQoTGV2ZWxE
QkRhdGFiYXNlKiBkYiwgaW50NjRfdCBkYXRhYmFzZUlkKQogCiAgICAgaW50NjRfdCBtYXhPYmpl
Y3RTdG9yZUlkID0gLTE7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG1heE9iamVjdFN0b3JlSWRL
ZXkgPSBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgRGF0YWJhc2VNZXRh
RGF0YUtleTo6a01heE9iamVjdFN0b3JlSWQpOwotICAgIGlmICghZ2V0SW50KGRiLCBtYXhPYmpl
Y3RTdG9yZUlkS2V5LCBtYXhPYmplY3RTdG9yZUlkKSkKKyAgICBpZiAoIWdldEludCh0cmFuc2Fj
dGlvbiwgbWF4T2JqZWN0U3RvcmVJZEtleSwgbWF4T2JqZWN0U3RvcmVJZCkpCiAgICAgICAgIG1h
eE9iamVjdFN0b3JlSWQgPSAwOwogCiAgICAgQVNTRVJUKG1heE9iamVjdFN0b3JlSWQgPj0gMCk7
CiAKICAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBtYXhPYmplY3RTdG9yZUlkICsgMTsKLSAg
ICBib29sIG9rID0gcHV0SW50KGRiLCBtYXhPYmplY3RTdG9yZUlkS2V5LCBvYmplY3RTdG9yZUlk
KTsKKyAgICBib29sIG9rID0gcHV0SW50KHRyYW5zYWN0aW9uLCBtYXhPYmplY3RTdG9yZUlkS2V5
LCBvYmplY3RTdG9yZUlkKTsKICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7CiAKICAgICByZXR1
cm4gb2JqZWN0U3RvcmVJZDsKQEAgLTMxOSw3ICszMjQsOCBAQCBzdGF0aWMgaW50NjRfdCBnZXRO
ZXdPYmplY3RTdG9yZUlkKExldmVsREJEYXRhYmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJZCkK
IAogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90
IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBi
b29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkKIHsKLSAg
ICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBnZXROZXdPYmplY3RTdG9yZUlkKG1fZGIuZ2V0KCks
IGRhdGFiYXNlSWQpOworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgaW50
NjRfdCBvYmplY3RTdG9yZUlkID0gZ2V0TmV3T2JqZWN0U3RvcmVJZChtX2N1cnJlbnRUcmFuc2Fj
dGlvbi5nZXQoKSwgZGF0YWJhc2VJZCk7CiAKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbmFtZUtl
eSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCAwKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5UGF0aEtleSA9IE9iamVjdFN0b3Jl
TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAxKTsKQEAgLTMy
OSw0MyArMzM1LDQzIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0
U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmCiAgICAgY29uc3QgVmVjdG9y
PGNoYXI+IG1heEluZGV4SWRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgNSk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG5hbWVz
S2V5ID0gT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG5hbWUpOwogCi0g
ICAgYm9vbCBvayA9IHB1dFN0cmluZyhtX2RiLmdldCgpLCBuYW1lS2V5LCBuYW1lKTsKKyAgICBi
b29sIG9rID0gcHV0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBuYW1lS2V5LCBu
YW1lKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhl
ZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0g
cHV0U3RyaW5nKG1fZGIuZ2V0KCksIGtleVBhdGhLZXksIGtleVBhdGgpOworICAgIG9rID0gcHV0
U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBrZXlQYXRoS2V5LCBrZXlQYXRoKTsK
ICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBl
cnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0SW50
KG1fZGIuZ2V0KCksIGF1dG9JbmNyZW1lbnRLZXksIGF1dG9JbmNyZW1lbnQpOworICAgIG9rID0g
cHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBhdXRvSW5jcmVtZW50S2V5LCBhdXRv
SW5jcmVtZW50KTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwg
SW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IG9rID0gcHV0SW50KG1fZGIuZ2V0KCksIGV2aWN0YWJsZUtleSwgZmFsc2UpOworICAgIG9rID0g
cHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBldmljdGFibGVLZXksIGZhbHNlKTsK
ICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBl
cnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0SW50
KG1fZGIuZ2V0KCksIGxhc3RWZXJzaW9uS2V5LCAxKTsKKyAgICBvayA9IHB1dEludChtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgbGFzdFZlcnNpb25LZXksIDEpOwogICAgIGlmICghb2spIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9kYi5nZXQoKSwgbWF4
SW5kZXhJZEtleSwga01pbmltdW1JbmRleElkKTsKKyAgICBvayA9IHB1dEludChtX2N1cnJlbnRU
cmFuc2FjdGlvbi5nZXQoKSwgbWF4SW5kZXhJZEtleSwga01pbmltdW1JbmRleElkKTsKICAgICBp
ZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4i
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0SW50KG1fZGIu
Z2V0KCksIG5hbWVzS2V5LCBvYmplY3RTdG9yZUlkKTsKKyAgICBvayA9IHB1dEludChtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgbmFtZXNLZXksIG9iamVjdFN0b3JlSWQpOwogICAgIGlmICgh
b2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNzYsMTIgKzM4MiwxMSBAQCBib29sIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJgogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBkZWxldGVSYW5n
ZShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJlZ2luLCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIGVuZCkKK3N0YXRpYyBib29sIGRlbGV0ZVJhbmdlKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgYmVnaW4sIGNvbnN0IFZlY3Rv
cjxjaGFyPiYgZW5kKQogewotICAgIC8vIEZJWE1FOiBMZXZlbERCIG1heSBiZSBhYmxlIHRvIHBy
b3ZpZGUgYSBidWxrIG9wZXJhdGlvbiB0aGF0IHdlIGNhbiBkbyBmaXJzdC4KLSAgICBPd25QdHI8
TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IGRiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIE93blB0cjxM
ZXZlbERCSXRlcmF0b3I+IGl0ID0gdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAg
Zm9yIChpdC0+c2VlayhiZWdpbik7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtl
eSgpLCBlbmQpIDwgMDsgaXQtPm5leHQoKSkgewotICAgICAgICBpZiAoIWRiLT5yZW1vdmUoaXQt
PmtleSgpKSkKKyAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0zOTAsMTggKzM5NSwyMCBAQCBz
dGF0aWMgYm9vbCBkZWxldGVSYW5nZShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8
Y2hhcj4mIGJlZ2luLCBjb25zdCBWZQogCiB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRl
bGV0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
KQogeworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisKICAgICBTdHJpbmcgb2Jq
ZWN0U3RvcmVOYW1lOwotICAgIGdldFN0cmluZyhtX2RiLmdldCgpLCBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIG9iamVjdFN0b3Jl
TmFtZSk7CisgICAgZ2V0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBPYmplY3RT
dG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIG9i
amVjdFN0b3JlTmFtZSk7CiAKLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fZGIuZ2V0KCksIE9iamVj
dFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwg
T2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IDYpKSkKKyAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBP
YmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
MCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCA2KSkpCiAgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFJlcG9ydCBlcnJvci4KIAotICAg
IHB1dFN0cmluZyhtX2RiLmdldCgpLCBPYmplY3RTdG9yZUZyZWVMaXN0S2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCksICIiKTsKLSAgICBtX2RiLT5yZW1vdmUoT2JqZWN0U3Rv
cmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlTmFtZSkpOworICAgIHB1
dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgT2JqZWN0U3RvcmVGcmVlTGlzdEtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpLCAiIik7CisgICAgbV9jdXJyZW50
VHJhbnNhY3Rpb24tPnJlbW92ZShPYmplY3RTdG9yZU5hbWVzS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVOYW1lKSk7CiAKLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fZGIuZ2V0KCks
IEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwg
SW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIElOVDY0
X01BWCkpKQorICAgIGlmICghZGVsZXRlUmFuZ2UobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCks
IEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwg
SW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIElOVDY0
X01BWCkpKQogICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3IuCi0gICAgaWYg
KCFkZWxldGVSYW5nZShtX2RiLmdldCgpLCBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgMCwgMCksIEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBJTlQ2NF9NQVgsIDApKSkKKyAgICBpZiAoIWRlbGV0ZVJh
bmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCwgMCksIEluZGV4TWV0YURhdGFLZXk6OmVuY29k
ZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBJTlQ2NF9NQVgsIDApKSkKICAgICAgICAgcmV0
dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgogCiAgICAgY2xlYXJPYmplY3RTdG9yZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKQEAgLTQxMiw3ICs0MTksOCBAQCBTdHJpbmcgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGxldmVsZGJLZXkgPSBPYmplY3RTdG9y
ZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwogICAgIFZl
Y3RvcjxjaGFyPiBkYXRhOwogCi0gICAgaWYgKCFtX2RiLT5nZXQobGV2ZWxkYktleSwgZGF0YSkp
CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBpZiAoIW1fY3VycmVudFRy
YW5zYWN0aW9uLT5nZXQobGV2ZWxkYktleSwgZGF0YSkpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKIAogICAgIGludDY0X3QgdmVyc2lvbjsKQEAgLTQ0NSwxOCArNDUzLDE4IEBAIHByaXZhdGU6
CiB9OwogfQogCi1zdGF0aWMgaW50NjRfdCBnZXROZXdWZXJzaW9uTnVtYmVyKExldmVsREJEYXRh
YmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQorc3Rh
dGljIGludDY0X3QgZ2V0TmV3VmVyc2lvbk51bWJlcihMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKICAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4gbGFzdFZlcnNpb25LZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgNCk7CiAKICAgICBpbnQ2NF90
IGxhc3RWZXJzaW9uID0gLTE7Ci0gICAgaWYgKCFnZXRJbnQoZGIsIGxhc3RWZXJzaW9uS2V5LCBs
YXN0VmVyc2lvbikpCisgICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24sIGxhc3RWZXJzaW9uS2V5
LCBsYXN0VmVyc2lvbikpCiAgICAgICAgIGxhc3RWZXJzaW9uID0gMDsKIAogICAgIEFTU0VSVChs
YXN0VmVyc2lvbiA+PSAwKTsKIAogICAgIGludDY0X3QgdmVyc2lvbiA9IGxhc3RWZXJzaW9uICsg
MTsKLSAgICBib29sIG9rID0gcHV0SW50KGRiLCBsYXN0VmVyc2lvbktleSwgdmVyc2lvbik7Cisg
ICAgYm9vbCBvayA9IHB1dEludCh0cmFuc2FjdGlvbiwgbGFzdFZlcnNpb25LZXksIHZlcnNpb24p
OwogICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKIAogICAgIEFTU0VSVCh2ZXJzaW9uID4gbGFz
dFZlcnNpb24pOyAvLyBGSVhNRTogVGhpbmsgYWJvdXQgaG93IHdlIHdhbnQgdG8gaGFuZGxlIHRo
ZSBvdmVyZmxvdyBzY2VuYXJpby4KQEAgLTQ2NiwxOCArNDc0LDE5IEBAIHN0YXRpYyBpbnQ2NF90
IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2CiAKIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVS
ZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleSYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqIHJlY29yZElkZW50aWZpZXIpCiB7Ci0gICAgaW50NjRfdCB2ZXJzaW9uID0gZ2V0TmV3VmVy
c2lvbk51bWJlcihtX2RiLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKKyAgICBB
U1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIGludDY0X3QgdmVyc2lvbiA9IGdldE5l
d1ZlcnNpb25OdW1iZXIobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBvYmplY3RTdG9yZWRhdGFLZXkg
PSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBr
ZXkpOwogCiAgICAgVmVjdG9yPGNoYXI+IHY7CiAgICAgdi5hcHBlbmQoZW5jb2RlVmFySW50KHZl
cnNpb24pKTsKICAgICB2LmFwcGVuZChlbmNvZGVTdHJpbmcodmFsdWUpKTsKIAotICAgIGlmICgh
bV9kYi0+cHV0KG9iamVjdFN0b3JlZGF0YUtleSwgdikpCisgICAgaWYgKCFtX2N1cnJlbnRUcmFu
c2FjdGlvbi0+cHV0KG9iamVjdFN0b3JlZGF0YUtleSwgdikpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBleGlzdHNFbnRyeUtleSA9IEV4aXN0c0VudHJ5
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKLSAgICBpZiAoIW1f
ZGItPnB1dChleGlzdHNFbnRyeUtleSwgZW5jb2RlSW50KHZlcnNpb24pKSkKKyAgICBpZiAoIW1f
Y3VycmVudFRyYW5zYWN0aW9uLT5wdXQoZXhpc3RzRW50cnlLZXksIGVuY29kZUludCh2ZXJzaW9u
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExldmVsREJSZWNvcmRJZGVudGlmaWVy
KiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PExldmVsREJSZWNvcmRJZGVu
dGlmaWVyKj4ocmVjb3JkSWRlbnRpZmllcik7CkBAIC00ODgsMTAgKzQ5NywxMSBAQCBib29sIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYgogCiB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNsZWFyT2Jq
ZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7Cisg
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
c3RhcnRLZXkgPSBLZXlQcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCkuZW5jb2Rl
KCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBLZXlQcmVmaXgoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCArIDEsIDApLmVuY29kZSgpOwogCi0gICAgZGVsZXRlUmFuZ2UobV9k
Yi5nZXQoKSwgc3RhcnRLZXksIHN0b3BLZXkpOworICAgIGRlbGV0ZVJhbmdlKG1fY3VycmVudFRy
YW5zYWN0aW9uLmdldCgpLCBzdGFydEtleSwgc3RvcEtleSk7CiB9CiAKIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmNyZWF0ZUludmFsaWRSZWNvcmRJZGVudGlmaWVyKCkKQEAgLTUwMSwxNyArNTEx
LDE5IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXI+IElEQkxldmVsREJCYWNraW5nU3RvcmU6CiAKIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3Jk
SWRlbnRpZmllcikKIHsKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwogICAgIGNv
bnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9IHN0
YXRpY19jYXN0PGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmll
cik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5w
cmltYXJ5S2V5KCkpOwotICAgIG1fZGItPnJlbW92ZShrZXkpOworICAgIG1fY3VycmVudFRyYW5z
YWN0aW9uLT5yZW1vdmUoa2V5KTsKIH0KIAogZG91YmxlIElEQkxldmVsREJCYWNraW5nU3RvcmU6
Om5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKQogeworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgY29u
c3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWluSURCS2V5KCkpOwogICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiBzdG9wS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgbWF4SURCS2V5KCkpOwogCi0gICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4g
aXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+
IGl0ID0gbV9jdXJyZW50VHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAKICAgICBpbnQg
bWF4TnVtZXJpY0tleSA9IDA7CiAKQEAgLTUzNywxMCArNTQ5LDExIEBAIGRvdWJsZSBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0CiAKIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmpl
Y3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5JiBrZXksIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVu
dGlmaWVyKQogeworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IGxldmVsZGJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwogICAgIFZlY3RvcjxjaGFyPiBkYXRhOwogCi0g
ICAgaWYgKCFtX2RiLT5nZXQobGV2ZWxkYktleSwgZGF0YSkpCisgICAgaWYgKCFtX2N1cnJlbnRU
cmFuc2FjdGlvbi0+Z2V0KGxldmVsZGJLZXksIGRhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpbnQ2NF90IHZlcnNpb247CkBAIC01NTUsMTAgKzU2OCwxMSBAQCBib29sIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90CiAKIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Zm9yRWFjaE9iamVj
dFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBP
YmplY3RTdG9yZVJlY29yZENhbGxiYWNrJiBjYWxsYmFjaykKIHsKKyAgICBBU1NFUlQobV9jdXJy
ZW50VHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IE9iamVj
dFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1pbklEQktl
eSgpKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IE9iamVjdFN0b3JlRGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1heElEQktleSgpKTsKIAotICAg
IE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9kYi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAg
ICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5zYWN0aW9uLT5jcmVh
dGVJdGVyYXRvcigpOwogICAgIGZvciAoaXQtPnNlZWsoc3RhcnRLZXkpOyBpdC0+aXNWYWxpZCgp
ICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBpdC0+bmV4dCgpKSB7CiAg
ICAgICAgIGNvbnN0IGNoYXIgKnAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKICAgICAgICAgY29uc3Qg
Y2hhciAqbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7CkBAIC02MjIsMTIgKzYzNiwxMiBAQCB2b2lk
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSQogICAgIH0KIH0KIAotc3RhdGljIGludDY0X3QgZ2V0TmV3SW5k
ZXhJZChMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkKK3N0YXRpYyBpbnQ2NF90IGdldE5ld0luZGV4SWQoTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpCiB7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gSW5kZXhGcmVlTGlzdEtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApOwogICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBzdG9wS2V5ID0gSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIElOVDY0X01BWCk7CiAKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBp
dCA9IGRiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0
ID0gdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgZm9yIChpdC0+c2VlayhzdGFy
dEtleSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8
IDA7IGl0LT5uZXh0KCkpIHsKICAgICAgICAgY29uc3QgY2hhciogcCA9IGl0LT5rZXkoKS5iZWdp
bigpOwogICAgICAgICBjb25zdCBjaGFyKiBsaW1pdCA9IGl0LT5rZXkoKS5lbmQoKTsKQEAgLTYz
Niw3ICs2NTAsNyBAQCBzdGF0aWMgaW50NjRfdCBnZXROZXdJbmRleElkKExldmVsREJEYXRhYmFz
ZSogZGIsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYgogICAgICAgICBwID0gSW5kZXhG
cmVlTGlzdEtleTo6ZGVjb2RlKHAsIGxpbWl0LCAmZnJlZUxpc3RLZXkpOwogICAgICAgICBBU1NF
UlQocCk7CiAKLSAgICAgICAgYm9vbCBvayA9IGRiLT5yZW1vdmUoaXQtPmtleSgpKTsKKyAgICAg
ICAgYm9vbCBvayA9IHRyYW5zYWN0aW9uLT5yZW1vdmUoaXQtPmtleSgpKTsKICAgICAgICAgQVNT
RVJUX1VOVVNFRChvaywgb2spOwogCiAgICAgICAgIEFTU0VSVChmcmVlTGlzdEtleS5pbmRleElk
KCkgPj0ga01pbmltdW1JbmRleElkKTsKQEAgLTY0NSwxMyArNjU5LDEzIEBAIHN0YXRpYyBpbnQ2
NF90IGdldE5ld0luZGV4SWQoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iCiAKICAgICBpbnQ2NF90IG1heEluZGV4SWQgPSAtMTsKICAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gbWF4SW5kZXhJZEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29k
ZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCA1KTsKLSAgICBpZiAoIWdldEludChkYiwgbWF4
SW5kZXhJZEtleSwgbWF4SW5kZXhJZCkpCisgICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24sIG1h
eEluZGV4SWRLZXksIG1heEluZGV4SWQpKQogICAgICAgICBtYXhJbmRleElkID0ga01pbmltdW1J
bmRleElkOwogCiAgICAgQVNTRVJUKG1heEluZGV4SWQgPj0gMCk7CiAKICAgICBpbnQ2NF90IGlu
ZGV4SWQgPSBtYXhJbmRleElkICsgMTsKLSAgICBib29sIG9rID0gcHV0SW50KGRiLCBtYXhJbmRl
eElkS2V5LCBpbmRleElkKTsKKyAgICBib29sIG9rID0gcHV0SW50KHRyYW5zYWN0aW9uLCBtYXhJ
bmRleElkS2V5LCBpbmRleElkKTsKICAgICBpZiAoIW9rKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKQEAgLTY2MCwyNSArNjc0LDI2IEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld0luZGV4SWQoTGV2
ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iCiAKIGJvb2wg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBr
ZXlQYXRoLCBib29sIGlzVW5pcXVlLCBpbnQ2NF90JiBpbmRleElkKQogewotICAgIGluZGV4SWQg
PSBnZXROZXdJbmRleElkKG1fZGIuZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOwor
ICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgaW5kZXhJZCA9IGdldE5ld0lu
ZGV4SWQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQpOwogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG5hbWVLZXkgPSBJbmRleE1ldGFEYXRhS2V5
OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgMCk7CiAgICAgY29u
c3QgVmVjdG9yPGNoYXI+IHVuaXF1ZUtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAxKTsKICAgICBjb25zdCBWZWN0b3I8Y2hh
cj4ga2V5UGF0aEtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleElkLCAyKTsKIAotICAgIGJvb2wgb2sgPSBwdXRTdHJpbmcobV9kYi5n
ZXQoKSwgbmFtZUtleSwgbmFtZSk7CisgICAgYm9vbCBvayA9IHB1dFN0cmluZyhtX2N1cnJlbnRU
cmFuc2FjdGlvbi5nZXQoKSwgbmFtZUtleSwgbmFtZSk7CiAgICAgaWYgKCFvaykgewogICAgICAg
ICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1dEludChtX2RiLmdldCgpLCB1bmlxdWVLZXks
IGlzVW5pcXVlKTsKKyAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwg
dW5pcXVlS2V5LCBpc1VuaXF1ZSk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBMT0dfRVJST1Io
IkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBvayA9IHB1dFN0cmluZyhtX2RiLmdldCgpLCBrZXlQYXRoS2V5LCBrZXlQYXRo
KTsKKyAgICBvayA9IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwga2V5UGF0
aEtleSwga2V5UGF0aCk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBMT0dfRVJST1IoIkludGVy
bmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY5OCwx
OSArNzEzLDIwIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRhRm9y
UmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvCiAgICAgQVNTRVJUKGluZGV4SWQg
Pj0ga01pbmltdW1JbmRleElkKTsKICAgICBjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRpZmllciog
bGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBMZXZlbERCUmVjb3Jk
SWRlbnRpZmllcio+KHJlY29yZElkZW50aWZpZXIpOwogCi0gICAgY29uc3QgaW50NjRfdCBnbG9i
YWxTZXF1ZW5jZU51bWJlciA9IGdldE5ld1ZlcnNpb25OdW1iZXIobV9kYi5nZXQoKSwgZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsK
KyAgICBjb25zdCBpbnQ2NF90IGdsb2JhbFNlcXVlbmNlTnVtYmVyID0gZ2V0TmV3VmVyc2lvbk51
bWJlcihtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4RGF0YUtleSA9IEluZGV4RGF0YUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwgZ2xvYmFsU2Vx
dWVuY2VOdW1iZXIpOwogCiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAgICAgZGF0YS5hcHBlbmQo
ZW5jb2RlVmFySW50KGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT52ZXJzaW9uKCkpKTsKICAgICBk
YXRhLmFwcGVuZChsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKIAotICAg
IHJldHVybiBtX2RiLT5wdXQoaW5kZXhEYXRhS2V5LCBkYXRhKTsKKyAgICByZXR1cm4gbV9jdXJy
ZW50VHJhbnNhY3Rpb24tPnB1dChpbmRleERhdGFLZXksIGRhdGEpOwogfQogCi1zdGF0aWMgYm9v
bCBmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbihMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0
b3I8Y2hhcj4mIHRhcmdldCwgVmVjdG9yPGNoYXI+JiBmb3VuZEtleSkKK3N0YXRpYyBib29sIGZp
bmRHcmVhdGVzdEtleUxlc3NUaGFuKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNv
bnN0IFZlY3RvcjxjaGFyPiYgdGFyZ2V0LCBWZWN0b3I8Y2hhcj4mIGZvdW5kS2V5KQogewotICAg
IE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAg
T3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3Io
KTsKICAgICBpdC0+c2Vlayh0YXJnZXQpOwogCiAgICAgaWYgKCFpdC0+aXNWYWxpZCgpKSB7CkBA
IC03NDUsMTIgKzc2MSwxMiBAQCBTdHJpbmcgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2Jq
ZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iagogICAgIHJldHVybiBn
ZXRPYmplY3RTdG9yZVJlY29yZChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtl
eSk7CiB9CiAKLXN0YXRpYyBib29sIHZlcnNpb25FeGlzdHMoTGV2ZWxEQkRhdGFiYXNlKiBkYiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgdmVyc2lv
biwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmNvZGVkUHJpbWFyeUtleSkKK3N0YXRpYyBib29sIHZl
cnNpb25FeGlzdHMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgdmVyc2lvbiwgY29uc3QgVmVj
dG9yPGNoYXI+JiBlbmNvZGVkUHJpbWFyeUtleSkKIHsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
a2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBl
bmNvZGVkUHJpbWFyeUtleSk7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAKLSAgICBpZiAoIWRi
LT5nZXQoa2V5LCBkYXRhKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5nZXQoa2V5LCBkYXRhKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGRlY29kZUludChkYXRhLmJlZ2lu
KCksIGRhdGEuZW5kKCkpID09IHZlcnNpb247CkBAIC03NTgsOCArNzc0LDkgQEAgc3RhdGljIGJv
b2wgdmVyc2lvbkV4aXN0cyhMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWMKIAogUGFzc1JlZlB0cjxJREJLZXk+IElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKIHsKKyAgICBB
U1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZl
bGRiS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhJZCwga2V5LCAwKTsKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGIt
PmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1
cnJlbnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBpdC0+c2VlayhsZXZlbGRi
S2V5KTsKIAogICAgIGZvciAoOzspIHsKQEAgLTc3NSw5ICs3OTIsOSBAQCBQYXNzUmVmUHRyPElE
QktleT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0
X3QgZGF0YWJhcwogICAgICAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZFByaW1hcnlLZXk7CiAgICAg
ICAgIGVuY29kZWRQcmltYXJ5S2V5LmFwcGVuZChwLCBpdC0+dmFsdWUoKS5lbmQoKSAtIHApOwog
Ci0gICAgICAgIGlmICghdmVyc2lvbkV4aXN0cyhtX2RiLmdldCgpLCBkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCB2ZXJzaW9uLCBlbmNvZGVkUHJpbWFyeUtleSkpIHsKKyAgICAgICAgaWYgKCF2
ZXJzaW9uRXhpc3RzKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCB2ZXJzaW9uLCBlbmNvZGVkUHJpbWFyeUtleSkpIHsKICAgICAgICAgICAgIC8v
IERlbGV0ZSBzdGFsZSBpbmRleCBkYXRhIGVudHJ5IGFuZCBjb250aW51ZS4KLSAgICAgICAgICAg
IG1fZGItPnJlbW92ZShpdC0+a2V5KCkpOworICAgICAgICAgICAgbV9jdXJyZW50VHJhbnNhY3Rp
b24tPnJlbW92ZShpdC0+a2V5KCkpOwogICAgICAgICAgICAgaXQtPm5leHQoKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC03OTAsOCArODA3LDkgQEAgUGFzc1JlZlB0cjxJ
REJLZXk+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2
NF90IGRhdGFiYXMKIAogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbklu
ZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQogeworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2Fj
dGlvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGxldmVsREJLZXkgPSBJbmRleERhdGFLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXksIDApOwotICAg
IE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9kYi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAg
ICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5zYWN0aW9uLT5jcmVh
dGVJdGVyYXRvcigpOwogCiAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogCkBAIC04MTgsOCArODM2
LDggQEAgcHVibGljOgogICAgIGJvb2wgZmlyc3RTZWVrKCk7CiAKIHByb3RlY3RlZDoKLSAgICBD
dXJzb3JJbXBsQ29tbW9uKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYg
bG93S2V5LCBib29sIGxvd09wZW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgaGlnaEtleSwgYm9vbCBo
aWdoT3BlbiwgYm9vbCBmb3J3YXJkKQotICAgICAgICA6IG1fZGIoZGIpCisgICAgQ3Vyc29ySW1w
bENvbW1vbihMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hh
cj4mIGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJv
b2wgaGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5z
YWN0aW9uKQogICAgICAgICAsIG1fbG93S2V5KGxvd0tleSkKICAgICAgICAgLCBtX2xvd09wZW4o
bG93T3BlbikKICAgICAgICAgLCBtX2hpZ2hLZXkoaGlnaEtleSkKQEAgLTgyOSw3ICs4NDcsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgfQogICAgIHZpcnR1YWwgfkN1cnNvckltcGxDb21tb24oKSB7fQog
Ci0gICAgTGV2ZWxEQkRhdGFiYXNlKiBtX2RiOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbV90
cmFuc2FjdGlvbjsKICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBtX2l0ZXJhdG9yOwogICAg
IFZlY3RvcjxjaGFyPiBtX2xvd0tleTsKICAgICBib29sIG1fbG93T3BlbjsKQEAgLTg0MSw3ICs4
NTksNyBAQCBwcm90ZWN0ZWQ6CiAKIGJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6Zmlyc3RTZWVrKCkK
IHsKLSAgICBtX2l0ZXJhdG9yID0gbV9kYi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBtX2l0ZXJh
dG9yID0gbV90cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKIAogICAgIGlmIChtX2Zvcndh
cmQpCiAgICAgICAgIG1faXRlcmF0b3ItPnNlZWsobV9sb3dLZXkpOwpAQCAtOTAyLDcgKzkyMCw3
IEBAIGJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkq
IGtleSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBWZWN0b3I8Y2hhcj4g
dHJhc2g7Ci0gICAgICAgIGlmICghbV9kYi0+Z2V0KG1faXRlcmF0b3ItPmtleSgpLCB0cmFzaCkp
CisgICAgICAgIGlmICghbV90cmFuc2FjdGlvbi0+Z2V0KG1faXRlcmF0b3ItPmtleSgpLCB0cmFz
aCkpCiAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKG1fZm9yd2FyZCAmJiBt
X2hpZ2hPcGVuICYmIGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1faGlnaEtl
eSkgPj0gMCkgLy8gaGlnaCBrZXkgbm90IGluY2x1ZGVkIGluIHJhbmdlCkBAIC05MzcsOSArOTU1
LDkgQEAgYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktl
eSoga2V5KQogCiBjbGFzcyBPYmplY3RTdG9yZUN1cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1w
bENvbW1vbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVDdXJz
b3JJbXBsPiBjcmVhdGUoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBs
b3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBoaWdoS2V5LCBib29sIGhp
Z2hPcGVuLCBib29sIGZvcndhcmQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVD
dXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3Qg
VmVjdG9yPGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBo
aWdoS2V5LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IE9iamVjdFN0b3JlQ3Vyc29ySW1wbChkYiwgbG93S2V5LCBsb3dPcGVu
LCBoaWdoS2V5LCBoaWdoT3BlbiwgZm9yd2FyZCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IE9iamVjdFN0b3JlQ3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwgbG93S2V5LCBsb3dPcGVuLCBo
aWdoS2V5LCBoaWdoT3BlbiwgZm9yd2FyZCkpOwogICAgIH0KIAogICAgIC8vIEN1cnNvckltcGxD
b21tb24KQEAgLTk0OSw4ICs5NjcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGxvYWRD
dXJyZW50Um93KCk7CiAKIHByaXZhdGU6Ci0gICAgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKExldmVs
REJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgbG93S2V5LCBib29sIGxvd09wZW4s
IGNvbnN0IFZlY3RvcjxjaGFyPiYgaGlnaEtleSwgYm9vbCBoaWdoT3BlbiwgYm9vbCBmb3J3YXJk
KQotICAgICAgICA6IEN1cnNvckltcGxDb21tb24oZGIsIGxvd0tleSwgbG93T3BlbiwgaGlnaEtl
eSwgaGlnaE9wZW4sIGZvcndhcmQpCisgICAgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKExldmVsREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgbG93S2V5LCBib29s
IGxvd09wZW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgaGlnaEtleSwgYm9vbCBoaWdoT3BlbiwgYm9v
bCBmb3J3YXJkKQorICAgICAgICA6IEN1cnNvckltcGxDb21tb24odHJhbnNhY3Rpb24sIGxvd0tl
eSwgbG93T3BlbiwgaGlnaEtleSwgaGlnaE9wZW4sIGZvcndhcmQpCiAgICAgewogICAgIH0KIApA
QCAtOTg0LDkgKzEwMDIsOSBAQCBib29sIE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6bG9hZEN1cnJl
bnRSb3coKQogCiBjbGFzcyBJbmRleEtleUN1cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENv
bW1vbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBs
PiBjcmVhdGUoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBsb3dLZXks
IGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBoaWdoS2V5LCBib29sIGhpZ2hPcGVu
LCBib29sIGZvcndhcmQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBs
PiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNo
YXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBoaWdoS2V5LCBi
b29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEluZGV4S2V5Q3Vyc29ySW1wbChkYiwgbG93S2V5LCBsb3dPcGVuLCBoaWdoS2V5LCBo
aWdoT3BlbiwgZm9yd2FyZCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4S2V5
Q3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwgbG93S2V5LCBsb3dPcGVuLCBoaWdoS2V5LCBoaWdoT3Bl
biwgZm9yd2FyZCkpOwogICAgIH0KIAogICAgIC8vIEN1cnNvckltcGxDb21tb24KQEAgLTk5Nyw4
ICsxMDE1LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpOwog
CiBwcml2YXRlOgotICAgIEluZGV4S2V5Q3Vyc29ySW1wbChMZXZlbERCRGF0YWJhc2UqIGRiLCBj
b25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8Y2hh
cj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKLSAgICAgICAgOiBDdXJz
b3JJbXBsQ29tbW9uKGRiLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXksIGhpZ2hPcGVuLCBmb3J3
YXJkKQorICAgIEluZGV4S2V5Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25zdCBWZWN0
b3I8Y2hhcj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKKyAgICAgICAg
OiBDdXJzb3JJbXBsQ29tbW9uKHRyYW5zYWN0aW9uLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXks
IGhpZ2hPcGVuLCBmb3J3YXJkKQogICAgIHsKICAgICB9CiAKQEAgLTEwMjgsNyArMTA0Niw3IEBA
IGJvb2wgSW5kZXhLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgVmVjdG9yPGNo
YXI+IHByaW1hcnlMZXZlbERCS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoaW5kZXhE
YXRhS2V5LmRhdGFiYXNlSWQoKSwgaW5kZXhEYXRhS2V5Lm9iamVjdFN0b3JlSWQoKSwgKm1fcHJp
bWFyeUtleSk7CiAKICAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIGlmICghbV9kYi0+Z2V0
KHByaW1hcnlMZXZlbERCS2V5LCByZXN1bHQpKQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+Z2V0
KHByaW1hcnlMZXZlbERCS2V5LCByZXN1bHQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBpbnQ2NF90IG9iamVjdFN0b3JlRGF0YVZlcnNpb247CkBAIC0xMDM4LDcgKzEwNTYsNyBAQCBi
b29sIEluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBpZiAob2JqZWN0U3RvcmVEYXRhVmVyc2lvbiAhPSBpbmRleERhdGFWZXJz
aW9uKSB7IC8vIEZJWE1FOiBUaGlzIGlzIHByb2JhYmx5IG5vdCB2ZXJ5IHdlbGwgY292ZXJlZCBi
eSB0aGUgbGF5b3V0IHRlc3RzLgotICAgICAgICBtX2RiLT5yZW1vdmUobV9pdGVyYXRvci0+a2V5
KCkpOworICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZW1vdmUobV9pdGVyYXRvci0+a2V5KCkpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xMDQ3LDkgKzEwNjUsOSBAQCBib29s
IEluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogCiBjbGFzcyBJbmRleEN1cnNv
ckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENvbW1vbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8SW5kZXhDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29u
c3QgVmVjdG9yPGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+
JiBoaWdoS2V5LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW5kZXhDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVj
dG9yPGNoYXI+JiBoaWdoS2V5LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4Q3Vyc29ySW1wbChkYiwgbG93S2V5LCBs
b3dPcGVuLCBoaWdoS2V5LCBoaWdoT3BlbiwgZm9yd2FyZCkpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEluZGV4Q3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwgbG93S2V5LCBsb3dPcGVuLCBo
aWdoS2V5LCBoaWdoT3BlbiwgZm9yd2FyZCkpOwogICAgIH0KIAogICAgIC8vIEN1cnNvckltcGxD
b21tb24KQEAgLTEwNjAsOCArMTA3OCw4IEBAIHB1YmxpYzoKICAgICBib29sIGxvYWRDdXJyZW50
Um93KCk7CiAKIHByaXZhdGU6Ci0gICAgSW5kZXhDdXJzb3JJbXBsKExldmVsREJEYXRhYmFzZSog
ZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgbG93S2V5LCBib29sIGxvd09wZW4sIGNvbnN0IFZlY3Rv
cjxjaGFyPiYgaGlnaEtleSwgYm9vbCBoaWdoT3BlbiwgYm9vbCBmb3J3YXJkKQotICAgICAgICA6
IEN1cnNvckltcGxDb21tb24oZGIsIGxvd0tleSwgbG93T3BlbiwgaGlnaEtleSwgaGlnaE9wZW4s
IGZvcndhcmQpCisgICAgSW5kZXhDdXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgbG93S2V5LCBib29sIGxvd09wZW4sIGNvbnN0IFZl
Y3RvcjxjaGFyPiYgaGlnaEtleSwgYm9vbCBoaWdoT3BlbiwgYm9vbCBmb3J3YXJkKQorICAgICAg
ICA6IEN1cnNvckltcGxDb21tb24odHJhbnNhY3Rpb24sIGxvd0tleSwgbG93T3BlbiwgaGlnaEtl
eSwgaGlnaE9wZW4sIGZvcndhcmQpCiAgICAgewogICAgIH0KIApAQCAtMTA5Niw3ICsxMTE0LDcg
QEAgYm9vbCBJbmRleEN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICBtX3ByaW1hcnlM
ZXZlbERCS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoaW5kZXhEYXRhS2V5LmRhdGFi
YXNlSWQoKSwgaW5kZXhEYXRhS2V5Lm9iamVjdFN0b3JlSWQoKSwgKm1fcHJpbWFyeUtleSk7CiAK
ICAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIGlmICghbV9kYi0+Z2V0KG1fcHJpbWFyeUxl
dmVsREJLZXksIHJlc3VsdCkpCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5nZXQobV9wcmltYXJ5
TGV2ZWxEQktleSwgcmVzdWx0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaW50NjRf
dCBvYmplY3RTdG9yZURhdGFWZXJzaW9uOwpAQCAtMTEwNiw3ICsxMTI0LDcgQEAgYm9vbCBJbmRl
eEN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgaWYgKG9iamVjdFN0b3JlRGF0YVZlcnNpb24gIT0gaW5kZXhEYXRhVmVyc2lvbikgewotICAg
ICAgICBtX2RiLT5yZW1vdmUobV9pdGVyYXRvci0+a2V5KCkpOworICAgICAgICBtX3RyYW5zYWN0
aW9uLT5yZW1vdmUobV9pdGVyYXRvci0+a2V5KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCkBAIC0xMTE2LDkgKzExMzQsOSBAQCBib29sIEluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1
cnJlbnRSb3coKQogCiB9CiAKLXN0YXRpYyBib29sIGZpbmRMYXN0SW5kZXhLZXlFcXVhbFRvKExl
dmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgdGFyZ2V0LCBWZWN0b3I8Y2hh
cj4mIGZvdW5kS2V5KQorc3RhdGljIGJvb2wgZmluZExhc3RJbmRleEtleUVxdWFsVG8oTGV2ZWxE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiB0YXJnZXQsIFZl
Y3RvcjxjaGFyPiYgZm91bmRLZXkpCiB7Ci0gICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQg
PSBkYi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9
IHRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwogICAgIGl0LT5zZWVrKHRhcmdldCk7CiAK
ICAgICBpZiAoIWl0LT5pc1ZhbGlkKCkpCkBAIC0xMTM1LDYgKzExNTMsNyBAQCBzdGF0aWMgYm9v
bCBmaW5kTGFzdEluZGV4S2V5RXF1YWxUbyhMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0
b3I8Y2hhcj4mIHRhcgogCiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURC
Q3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQogeworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFu
c2FjdGlvbik7CiAgICAgYm9vbCBsb3dlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPmxvd2VyKCk7
CiAgICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPnVwcGVyKCk7CiAgICAgYm9v
bCBmb3J3YXJkID0gKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFIHx8
IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQpOwpAQCAtMTE1NSw3ICsxMTc0LDcgQEAgUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
b3Blbk9iamVjdFN0b3JlQ3Vyc28KICAgICAgICAgdXBwZXJPcGVuID0gdHJ1ZTsgLy8gTm90IGlu
Y2x1ZGVkLgogCiAgICAgICAgIGlmICghZm9yd2FyZCkgeyAvLyBXZSBuZWVkIGEga2V5IHRoYXQg
ZXhpc3RzLgotICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbihtX2RiLmdl
dCgpLCBzdG9wS2V5LCBzdG9wS2V5KSkKKyAgICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5
TGVzc1RoYW4obV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIHN0b3BLZXksIHN0b3BLZXkpKQog
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgdXBwZXJPcGVuID0gZmFsc2U7
CiAgICAgICAgIH0KQEAgLTExNjQsNyArMTE4Myw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNv
CiAgICAgICAgIHVwcGVyT3BlbiA9IHJhbmdlLT51cHBlck9wZW4oKTsKICAgICB9CiAKLSAgICBS
ZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBjdXJzb3IgPSBPYmplY3RTdG9yZUN1cnNvcklt
cGw6OmNyZWF0ZShtX2RiLmdldCgpLCBzdGFydEtleSwgbG93ZXJPcGVuLCBzdG9wS2V5LCB1cHBl
ck9wZW4sIGZvcndhcmQpOworICAgIFJlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGN1cnNv
ciA9IE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdl
dCgpLCBzdGFydEtleSwgbG93ZXJPcGVuLCBzdG9wS2V5LCB1cHBlck9wZW4sIGZvcndhcmQpOwog
ICAgIGlmICghY3Vyc29yLT5maXJzdFNlZWsoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTEx
NzMsNiArMTE5Miw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxl
dmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvCiAKIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtl
eUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9u
IGRpcmVjdGlvbikKIHsKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwogICAgIGJv
b2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigpOwogICAgIGJvb2wgdXBwZXJC
b3VuZCA9IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOwogICAgIGJvb2wgZm9yd2FyZCA9IChkaXJl
Y3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURC
Q3Vyc29yOjpORVhUKTsKQEAgLTExOTMsMTggKzEyMTMsMTggQEAgUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vy
c29yKGkKICAgICAgICAgdXBwZXJPcGVuID0gZmFsc2U7IC8vIEluY2x1ZGVkLgogCiAgICAgICAg
IGlmICghZm9yd2FyZCkgeyAvLyBXZSBuZWVkIGEga2V5IHRoYXQgZXhpc3RzLgotICAgICAgICAg
ICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbihtX2RiLmdldCgpLCBzdG9wS2V5LCBzdG9w
S2V5KSkKKyAgICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW4obV9jdXJyZW50
VHJhbnNhY3Rpb24uZ2V0KCksIHN0b3BLZXksIHN0b3BLZXkpKQogICAgICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICAgICAgdXBwZXJPcGVuID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewogICAgICAgICBzdG9wS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKnJhbmdlLT51cHBlcigpLCAwKTsKLSAgICAgICAg
aWYgKCFmaW5kTGFzdEluZGV4S2V5RXF1YWxUbyhtX2RiLmdldCgpLCBzdG9wS2V5LCBzdG9wS2V5
KSkgLy8gU2VlayB0byB0aGUgKmxhc3QqIGtleSBpbiB0aGUgc2V0IG9mIG5vbi11bmlxdWUga2V5
cy4KKyAgICAgICAgaWYgKCFmaW5kTGFzdEluZGV4S2V5RXF1YWxUbyhtX2N1cnJlbnRUcmFuc2Fj
dGlvbi5nZXQoKSwgc3RvcEtleSwgc3RvcEtleSkpIC8vIFNlZWsgdG8gdGhlICpsYXN0KiBrZXkg
aW4gdGhlIHNldCBvZiBub24tdW5pcXVlIGtleXMuCiAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgdXBwZXJPcGVuID0gcmFuZ2UtPnVwcGVyT3BlbigpOwogICAgIH0KIAotICAgIFJlZlB0
cjxJbmRleEtleUN1cnNvckltcGw+IGN1cnNvciA9IEluZGV4S2V5Q3Vyc29ySW1wbDo6Y3JlYXRl
KG1fZGIuZ2V0KCksIHN0YXJ0S2V5LCBsb3dlck9wZW4sIHN0b3BLZXksIHVwcGVyT3BlbiwgZm9y
d2FyZCk7CisgICAgUmVmUHRyPEluZGV4S2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhLZXlD
dXJzb3JJbXBsOjpjcmVhdGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIHN0YXJ0S2V5LCBs
b3dlck9wZW4sIHN0b3BLZXksIHVwcGVyT3BlbiwgZm9yd2FyZCk7CiAgICAgaWYgKCFjdXJzb3It
PmZpcnN0U2VlaygpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTIxMyw2ICsxMjMzLDcgQEAg
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6b3BlbkluZGV4S2V5Q3Vyc29yKGkKIAogUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1
cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQogeworICAg
IEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgYm9vbCBsb3dlckJvdW5kID0gcmFu
Z2UgJiYgcmFuZ2UtPmxvd2VyKCk7CiAgICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYgcmFu
Z2UtPnVwcGVyKCk7CiAgICAgYm9vbCBmb3J3YXJkID0gKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6
Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQpOwpAQCAt
MTIzMywzNyArMTI1NCw1NyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IoaW50NgogICAgICAgICB1cHBl
ck9wZW4gPSBmYWxzZTsgLy8gSW5jbHVkZWQuCiAKICAgICAgICAgaWYgKCFmb3J3YXJkKSB7IC8v
IFdlIG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCi0gICAgICAgICAgICBpZiAoIWZpbmRHcmVhdGVz
dEtleUxlc3NUaGFuKG1fZGIuZ2V0KCksIHN0b3BLZXksIHN0b3BLZXkpKQorICAgICAgICAgICAg
aWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbihtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwg
c3RvcEtleSwgc3RvcEtleSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAg
ICB1cHBlck9wZW4gPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIHN0
b3BLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkLCAqcmFuZ2UtPnVwcGVyKCksIDApOwotICAgICAgICBpZiAoIWZpbmRMYXN0SW5kZXhL
ZXlFcXVhbFRvKG1fZGIuZ2V0KCksIHN0b3BLZXksIHN0b3BLZXkpKSAvLyBTZWVrIHRvIHRoZSAq
bGFzdCoga2V5IGluIHRoZSBzZXQgb2Ygbm9uLXVuaXF1ZSBrZXlzLgorICAgICAgICBpZiAoIWZp
bmRMYXN0SW5kZXhLZXlFcXVhbFRvKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBzdG9wS2V5
LCBzdG9wS2V5KSkgLy8gU2VlayB0byB0aGUgKmxhc3QqIGtleSBpbiB0aGUgc2V0IG9mIG5vbi11
bmlxdWUga2V5cy4KICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB1cHBlck9wZW4gPSBy
YW5nZS0+dXBwZXJPcGVuKCk7CiAgICAgfQogCi0gICAgUmVmUHRyPEluZGV4Q3Vyc29ySW1wbD4g
Y3Vyc29yID0gSW5kZXhDdXJzb3JJbXBsOjpjcmVhdGUobV9kYi5nZXQoKSwgc3RhcnRLZXksIGxv
d2VyT3Blbiwgc3RvcEtleSwgdXBwZXJPcGVuLCBmb3J3YXJkKTsKKyAgICBSZWZQdHI8SW5kZXhD
dXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwgc3RhcnRLZXksIGxvd2VyT3Blbiwgc3RvcEtleSwgdXBwZXJPcGVuLCBm
b3J3YXJkKTsKICAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7CiB9CiAKLW5hbWVzcGFjZSB7Ci1jbGFz
cyBEdW1teVRyYW5zYWN0aW9uIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24g
ewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBiZWdpbigpIHt9Ci0gICAgdmlydHVhbCB2b2lk
IGNvbW1pdCgpIHt9Ci0gICAgdmlydHVhbCB2b2lkIHJvbGxiYWNrKCkge30KLX07CitQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmNyZWF0ZVRyYW5zYWN0aW9uKCkKK3sKKyAgICByZXR1cm4gVHJhbnNhY3Rpb246OmNyZWF0ZSh0
aGlzKTsKIH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVUcmFuc2FjdGlvbigpCitQYXNzUmVmUHRyPElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbjo6Y3JlYXRlKElEQkxldmVsREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRyYW5zYWN0aW9uKGJhY2tpbmdTdG9yZSkpOwor
fQorCitJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb24oSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQorICAgIDogbV9iYWNraW5nU3RvcmUo
YmFja2luZ1N0b3JlKQoreworfQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uOjpiZWdpbigpCit7CisgICAgQVNTRVJUKCFtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50
VHJhbnNhY3Rpb24pOworICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbiA9
IExldmVsREJUcmFuc2FjdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLT5tX2RiLmdldCgpKTsK
K30KKwordm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y29tbWl0KCkK
K3sKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAg
ICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAgIG1f
YmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbi5jbGVhcigpOworfQorCit2b2lkIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpyb2xsYmFjaygpCiB7Ci0gICAgLy8g
RklYTUU6IFdlIG5lZWQgdG8gaW1wbGVtZW50IGEgdHJhbnNhY3Rpb24gYWJzdHJhY3Rpb24gdGhh
dCBhbGxvd3MgZm9yIHJvbGwtYmFja3MsIGFuZCB3cml0ZSB0ZXN0cyBmb3IgaXQuCi0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBEdW1teVRyYW5zYWN0aW9uKCkpOworICAgIEFTU0VSVChtX2JhY2tp
bmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1
cnJlbnRUcmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKKyAgICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJy
ZW50VHJhbnNhY3Rpb24uY2xlYXIoKTsKIH0KIAogLy8gRklYTUU6IGRlbGV0ZURhdGFiYXNlIHNo
b3VsZCBiZSBwYXJ0IG9mIElEQkJhY2tpbmdTdG9yZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKaW5kZXggNjBmNjIxYS4uOThmNWVhMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKQEAg
LTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMZXZlbERCQ29tcGFy
YXRvcjsKIGNsYXNzIExldmVsREJEYXRhYmFzZTsKK2NsYXNzIExldmVsREJUcmFuc2FjdGlvbjsK
IAogY2xhc3MgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmUg
ewogcHVibGljOgpAQCAtODAsNiArODEsMTkgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCRmFj
dG9yeUJhY2tlbmRJbXBsPiBtX2ZhY3Rvcnk7CiAgICAgT3duUHRyPExldmVsREJEYXRhYmFzZT4g
bV9kYjsKICAgICBPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IG1fY29tcGFyYXRvcjsKKyAgICBS
ZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiBtX2N1cnJlbnRUcmFuc2FjdGlvbjsKKworICAgIGNs
YXNzIFRyYW5zYWN0aW9uIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24gewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+IGNyZWF0
ZShJREJMZXZlbERCQmFja2luZ1N0b3JlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBiZWdpbigp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBy
b2xsYmFjaygpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgVHJhbnNhY3Rpb24oSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZSopOworICAgICAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlKiBtX2JhY2tp
bmdTdG9yZTsKKyAgICB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKaW5k
ZXggZDczNjc1OC4uMTU2Y2I4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCkBAIC0xMDYsNiArMTA2LDggQEAgdm9pZCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCgpCiAgICAgaWYgKG1fc3RhdGUgPT0gRmlu
aXNoZWQpCiAgICAgICAgIHJldHVybjsKIAorICAgIGJvb2wgd2FzUnVubmluZyA9IG1fc3RhdGUg
PT0gUnVubmluZzsKKwogICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBt
YXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUKICAgICAvLyBhYm9ydCBzdGVwcyBi
ZWxvdy4gV2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIG91cnNlbHZl
cwogICAgIC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4KQEAgLTExNiw3ICsx
MTgsOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0KCkKICAgICBtX3Rh
c2tFdmVudFRpbWVyLnN0b3AoKTsKIAogICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKLSAgICBtX3Ry
YW5zYWN0aW9uLT5yb2xsYmFjaygpOworICAgIGlmICh3YXNSdW5uaW5nKQorICAgICAgICBtX3Ry
YW5zYWN0aW9uLT5yb2xsYmFjaygpOwogCiAgICAgLy8gUnVuIHRoZSBhYm9ydCB0YXNrcywgaWYg
YW55LgogICAgIHdoaWxlICghbV9hYm9ydFRhc2tRdWV1ZS5pc0VtcHR5KCkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94762</attachid>
            <date>2011-05-25 03:10:55 -0700</date>
            <delta_ts>2011-05-25 09:51:15 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>88561</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOWRhOWExNy4uOWRlMTMwNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE0NjIsNyArMTQ2Miw4IEBAIEVORElGICgpCiBJRiAoRU5BQkxFX0xFVkVMREIp
CiAgICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2xldmVs
ZGIvTGV2ZWxEQkRhdGFiYXNlLmNwcAotICAgICAgICBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJJ
dGVyYXRvci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24u
Y3BwCisgICAgICAgIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2guY3BwCiAgICAg
KQogRU5ESUYgKCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGE2MWI4ZGQuLmI1Y2NkMmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMzYgQEAKKzIwMTEtMDUtMjUgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbmRleGVkREI6IFN1cHBvcnQgTGV2ZWxEQiB0cmFuc2FjdGlvbnMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTI3MAorCisgICAgICAgIEludHJv
ZHVjZSBMZXZlbERCVHJhbnNhY3Rpb24sIHdoaWNoIGltcGxlbWVudHMgaW4tbWVtb3J5IHRyYW5z
YWN0aW9uCisgICAgICAgIHN1cHBvcnQgb24gdG9wIG9mIExldmVsREIsIGFuZCBob29rIHRoaXMg
dXAgZm9yIEluZGV4ZWREQiB0byB1c2UuCisKKyAgICAgICAgVGhpcyBpcyBhbGwgY292ZXJlZCBi
eSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAq
IFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMZXZlbERCRGF0YWJhc2U6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6
TGV2ZWxEQkRhdGFiYXNlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFiYXNl
OjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFiYXNlOjp3cml0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJdGVyYXRvckltcGw6Okl0ZXJhdG9ySW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJdGVyYXRvckltcGw6OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6SXRlcmF0
b3JJbXBsOjpzZWVrVG9MYXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okl0ZXJhdG9ySW1wbDo6c2Vl
ayk6CisgICAgICAgIChXZWJDb3JlOjpJdGVyYXRvckltcGw6Om5leHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SXRlcmF0b3JJbXBsOjpwcmV2KToKKyAgICAgICAgKFdlYkNvcmU6Okl0ZXJhdG9ySW1w
bDo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6Okl0ZXJhdG9ySW1wbDo6dmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFiYXNlOjpjcmVhdGVJdGVyYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpMZXZlbERCRGF0YWJhc2U6OmNvbXBhcmF0b3IpOgorICAgICAgICAqIHBsYXRmb3Jt
L2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmg6CisgICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9M
ZXZlbERCSXRlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJJdGVyYXRvcjo6fkxl
dmVsREJJdGVyYXRvcik6CisgICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNh
Y3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6TGV2ZWxEQlRy
YW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6Y2xlYXJU
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6fkxldmVsREJUcmFu
c2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjptYWtlVmVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkxldmVsREJUcmFuc2FjdGlvbjo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJU
cmFuc2FjdGlvbjo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6
cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6Z2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6Y29tbWl0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6cm9sbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
TGV2ZWxEQlRyYW5zYWN0aW9uOjpjcmVhdGVJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpM
ZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjppc1ZhbGlkKToKKyAgICAgICAg
KFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpzZWVrVG9MYXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpzZWVr
KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpu
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9y
OjpwcmV2KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJh
dG9yOjprZXkpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRl
cmF0b3I6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJl
ZUl0ZXJhdG9yOjppc0RlbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0
aW9uOjpUcmVlSXRlcmF0b3I6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFu
c2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjp+VHJlZUl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpUcmVlSXRlcmF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0
ZXJhdG9yOjpUcmFuc2FjdGlvbkl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJU
cmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6aXNWYWxpZCk6CisgICAgICAgIChXZWJD
b3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnNlZWtUb0xhc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJh
dG9yOjpzZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNh
Y3Rpb25JdGVyYXRvcjo6bmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rp
b246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnByZXYpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxE
QlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjprZXkpOgorICAgICAgICAoV2ViQ29y
ZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjp2YWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6Omhh
bmRsZUNvbmZsaWN0c0FuZERlbGV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5z
YWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpzZXRDdXJyZW50SXRlcmF0b3JUb1NtYWxsZXN0
S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25J
dGVyYXRvcjo6c2V0Q3VycmVudEl0ZXJhdG9yVG9MYXJnZXN0S2V5KToKKyAgICAgICAgKFdlYkNv
cmU6OkxldmVsREJUcmFuc2FjdGlvbjo6cmVnaXN0ZXJJdGVyYXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OnVucmVnaXN0ZXJJdGVyYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OnJlc2V0SXRlcmF0b3JzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6QVZMVHJlZUFic3RyYWN0b3I6OmdldF9sZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6QVZMVHJlZUFic3RyYWN0b3I6
OnNldF9sZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6QVZMVHJl
ZUFic3RyYWN0b3I6OmdldF9ncmVhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFu
c2FjdGlvbjo6QVZMVHJlZUFic3RyYWN0b3I6OnNldF9ncmVhdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkxldmVsREJUcmFuc2FjdGlvbjo6QVZMVHJlZUFic3RyYWN0b3I6OmdldF9iYWxhbmNlX2Zh
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OkFWTFRyZWVBYnN0
cmFjdG9yOjpzZXRfYmFsYW5jZV9mYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRy
YW5zYWN0aW9uOjpBVkxUcmVlQWJzdHJhY3Rvcjo6Y29tcGFyZV9rZXlfa2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6QVZMVHJlZUFic3RyYWN0b3I6OmNvbXBhcmVf
a2V5X25vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpBVkxUcmVl
QWJzdHJhY3Rvcjo6Y29tcGFyZV9ub2RlX25vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxE
QlRyYW5zYWN0aW9uOjpBVkxUcmVlQWJzdHJhY3Rvcjo6bnVsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6On5UcmFuc2FjdGlvbkl0
ZXJhdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJXcml0ZUJhdGNoOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGV2ZWxEQldyaXRlQmF0Y2g6OkxldmVsREJXcml0ZUJhdGNoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxldmVsREJXcml0ZUJhdGNoOjp+TGV2ZWxEQldyaXRlQmF0Y2gpOgorICAg
ICAgICAoV2ViQ29yZTo6bWFrZVNsaWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJXcml0
ZUJhdGNoOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQldyaXRlQmF0Y2g6OnJlbW92
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCV3JpdGVCYXRjaDo6Y2xlYXIpOgorICAgICAg
ICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRJbnQpOgorICAgICAgICAoV2ViQ29yZTo6cHV0SW50KToKKyAgICAgICAgKFdlYkNvcmU6
OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpwdXRTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0TmV3T2JqZWN0U3RvcmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpkZWxl
dGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxl
dGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpnZXRPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXROZXdWZXJzaW9u
TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9i
amVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmNsZWFyT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6bmV4dEF1dG9JbmNyZW1lbnROdW1iZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmb3JFYWNoT2JqZWN0
U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0TmV3SW5kZXhJZCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQp
OgorICAgICAgICAoV2ViQ29yZTo6ZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW4pOgorICAgICAgICAo
V2ViQ29yZTo6dmVyc2lvbkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpmaW5kTGFzdEluZGV4S2V5RXF1YWxUbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVUcmFuc2FjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uOjpUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbjo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2spOgorICAgICAgICAqIHN0
b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjphYm9ydCk6CisKIDIwMTEtMDUtMjQgIFBhdmVsIFBvZGl2aWxvdiAgPHBv
ZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hh
dHNreS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDU1OWExZmYuLmE4NzcyMDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjUyOSw5ICsyNTI5LDEyIEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZl
bERCQ29tcGFyYXRvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVs
REJEYXRhYmFzZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxE
QkRhdGFiYXNlLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkl0
ZXJhdG9yLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCSXRl
cmF0b3IuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCU2xpY2Uu
aCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24u
aCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24u
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNo
LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2gu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xv
Y2FsaXplZFN0cmluZ3MuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMWRlZWUzNS4uMjg5MGEwZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtODc0LDkgKzg3NCwxMiBAQAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2xldmVsZGIvTGV2ZWxEQkNvbXBhcmF0b3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
bGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9sZXZl
bGRiL0xldmVsREJEYXRhYmFzZS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xl
dmVsREJJdGVyYXRvci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxE
Qkl0ZXJhdG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlNsaWNl
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRjaC5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2guaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vbWFjL0Jsb2NrRXhjZXB0aW9ucy5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9F
bXB0eVByb3RvY29sRGVmaW5pdGlvbnMuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDI1ODU5MzYuLjM4
MTUwODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMDEzLDEyICsxMDEzLDkgQEAgU09VUkNFUyArPSBc
CiAgICAgcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9MZW5ndGguY3BwIFwK
ICAgICBwbGF0Zm9ybS90ZXh0L0xpbmVFbmRpbmcuY3BwIFwKLSAgICBwbGF0Zm9ybS9sZXZlbGRi
L0xldmVsREJDb21wYXJhdG9yLmggXAogICAgIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFi
YXNlLmNwcCBcCi0gICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuaCBcCi0gICAg
cGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCSXRlcmF0b3IuY3BwIFwKLSAgICBwbGF0Zm9ybS9sZXZl
bGRiL0xldmVsREJJdGVyYXRvci5oIFwKLSAgICBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJTbGlj
ZS5oIFwKKyAgICBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHAgXAorICAg
IHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2guY3BwIFwKICAgICBwbGF0Zm9ybS9M
aW5rSGFzaC5jcHAgXAogICAgIHBsYXRmb3JtL0xvZ2dpbmcuY3BwIFwKICAgICBwbGF0Zm9ybS9N
ZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwIFwKQEAgLTE5OTAsNiArMTk4NywxMiBAQCBIRUFERVJT
ICs9IFwKICAgICBwbGF0Zm9ybS9LaWxsUmluZy5oIFwKICAgICBwbGF0Zm9ybS9LVVJMLmggXAog
ICAgIHBsYXRmb3JtL0xlbmd0aC5oIFwKKyAgICBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJDb21w
YXJhdG9yLmggXAorICAgIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmggXAorICAg
IHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkl0ZXJhdG9yLmggXAorICAgIHBsYXRmb3JtL2xldmVs
ZGIvTGV2ZWxEQlNsaWNlLmggXAorICAgIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0
aW9uLmggXAorICAgIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2guaCBcCiAgICAg
cGxhdGZvcm0vdGV4dC9CaWRpUnVuTGlzdC5oIFwKICAgICBwbGF0Zm9ybS90ZXh0L0xpbmVFbmRp
bmcuaCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tlckNsaWVudC5oIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlMDQ0
ZmFiLi42OWNmYTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0yNzY5LDEyICsyNzY5LDE1IEBACiAJCThBRjRFNTU2MTFEQzVB
MzYwMDBFRDNERSAvKiBQZXJmb3JtYW5jZU5hdmlnYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBRjRFNTUzMTFEQzVBMzYwMDBFRDNERSAvKiBQ
ZXJmb3JtYW5jZU5hdmlnYXRpb24uaCAqLzsgfTsKIAkJOEFGNEU1NUIxMURDNUE2MzAwMEVEM0RF
IC8qIFBlcmZvcm1hbmNlVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDhBRjRFNTU4MTFEQzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5jZVRp
bWluZy5jcHAgKi87IH07CiAJCThBRjRFNTVDMTFEQzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5j
ZVRpbWluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OEFGNEU1NTkxMURDNUE2MzAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlVGltaW5nLmggKi87IH07CisJ
CThDMEUzMzRDMTM4QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCVHJhbnNhY3Rpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEMwRTMzNDgxMzhBOTJD
NzAwOERBOTRGIC8qIExldmVsREJUcmFuc2FjdGlvbi5jcHAgKi87IH07CisJCThDMEUzMzREMTM4
QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDMEUzMzQ5MTM4QTkyQzcwMDhEQTk0RiAvKiBM
ZXZlbERCVHJhbnNhY3Rpb24uaCAqLzsgfTsKKwkJOEMwRTMzNEUxMzhBOTJDNzAwOERBOTRGIC8q
IExldmVsREJXcml0ZUJhdGNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDhDMEUzMzRBMTM4QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCV3JpdGVCYXRj
aC5jcHAgKi87IH07CisJCThDMEUzMzRGMTM4QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCV3JpdGVC
YXRjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEMw
RTMzNEIxMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJXcml0ZUJhdGNoLmggKi87IH07CiAJCThD
NkVBNjE5MTFFRjdFMDQwMEZEOEVFMyAvKiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDNkVBNjE3MTFFRjdF
MDQwMEZEOEVFMyAvKiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcCAqLzsgfTsKIAkJOEM2RUE2
MUExMUVGN0UwNDAwRkQ4RUUzIC8qIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDNkVBNjE4MTFFRjdFMDQwMEZE
OEVFMyAvKiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmggKi87IH07CiAJCThDQURGMkE5MTM1QzdC
MzYwMDlFRjQzRiAvKiBMZXZlbERCQ29tcGFyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOENBREYyQTMxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVs
REJDb21wYXJhdG9yLmggKi87IH07CiAJCThDQURGMkFBMTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZl
bERCRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOENBREYyQTQxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJEYXRhYmFzZS5jcHAgKi87
IH07CiAJCThDQURGMkFCMTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCRGF0YWJhc2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDQURGMkE1MTM1QzdC
MzYwMDlFRjQzRiAvKiBMZXZlbERCRGF0YWJhc2UuaCAqLzsgfTsKLQkJOENBREYyQUMxMzVDN0Iz
NjAwOUVGNDNGIC8qIExldmVsREJJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Q0FERjJBNjEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxE
Qkl0ZXJhdG9yLmNwcCAqLzsgfTsKIAkJOENBREYyQUQxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVs
REJJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOENBREYyQTcxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJJdGVyYXRvci5oICovOyB9Owog
CQk4Q0FERjJBRTEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQlNsaWNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Q0FERjJBODEzNUM3QjM2MDA5RUY0
M0YgLyogTGV2ZWxEQlNsaWNlLmggKi87IH07CiAJCThGNjc1NjFCMTI4OEIxN0IwMDQ3QUNBMyAv
KiBFdmVudFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4RjY3NTYxOTEyODhCMTdCMDA0N0FDQTMgLyogRXZlbnRRdWV1ZS5oICovOyB9OwpAQCAt
OTMyMCwxMiArOTMyMywxNSBAQAogCQk4QUY0RTU1ODExREM1QTYzMDAwRUQzREUgLyogUGVyZm9y
bWFuY2VUaW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGVy
Zm9ybWFuY2VUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QUY0RTU1
OTExREM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGVyZm9ybWFuY2VUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOEFGNEU1NUExMURDNUE2MzAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlVGltaW5n
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQZXJmb3JtYW5jZVRpbWluZy5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCThDMEUzMzQ4MTM4QTkyQzcwMDhEQTk0RiAvKiBMZXZl
bERCVHJhbnNhY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TGV2ZWxEQlRyYW5zYWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOEMw
RTMzNDkxMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJUcmFuc2FjdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMZXZlbERCVHJhbnNhY3Rpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOEMwRTMzNEExMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJXcml0
ZUJhdGNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExldmVsREJX
cml0ZUJhdGNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOEMwRTMzNEIxMzhB
OTJDNzAwOERBOTRGIC8qIExldmVsREJXcml0ZUJhdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExldmVsREJXcml0ZUJhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCThDNkVBNjE3MTFFRjdFMDQwMEZEOEVFMyAvKiBSdW50aW1lRW5hYmxlZEZlYXR1cmVz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXMuY3BwOyBwYXRoID0gZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEM2RUE2MTgxMUVGN0UwNDAwRkQ4RUUzIC8q
IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOyBwYXRoID0gZ2VuZXJpYy9SdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThDQURGMkEzMTM1QzdC
MzYwMDlFRjQzRiAvKiBMZXZlbERCQ29tcGFyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMZXZlbERCQ29tcGFyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4Q0FERjJBNDEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkRhdGFiYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExldmVsREJEYXRhYmFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThDQURGMkE1MTM1QzdCMzYwMDlFRjQzRiAvKiBM
ZXZlbERCRGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGV2ZWxE
QkRhdGFiYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCThDQURGMkE2MTM1QzdC
MzYwMDlFRjQzRiAvKiBMZXZlbERCSXRlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTGV2ZWxEQkl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOENBREYyQTcxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJJdGVyYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXZlbERCSXRlcmF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOENBREYyQTgxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVs
REJTbGljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXZlbERCU2xpY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEY2NzU2MTkxMjg4QjE3QjAwNDdBQ0Ez
IC8qIEV2ZW50UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRR
dWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU1NzEsOSArMTU1NzcsMTIg
QEAKIAkJCQk4Q0FERjJBMzEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkNvbXBhcmF0b3IuaCAq
LywKIAkJCQk4Q0FERjJBNDEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkRhdGFiYXNlLmNwcCAq
LywKIAkJCQk4Q0FERjJBNTEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkRhdGFiYXNlLmggKi8s
Ci0JCQkJOENBREYyQTYxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJJdGVyYXRvci5jcHAgKi8s
CiAJCQkJOENBREYyQTcxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJJdGVyYXRvci5oICovLAog
CQkJCThDQURGMkE4MTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCU2xpY2UuaCAqLywKKwkJCQk4
QzBFMzM0ODEzOEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQlRyYW5zYWN0aW9uLmNwcCAqLywKKwkJ
CQk4QzBFMzM0OTEzOEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQlRyYW5zYWN0aW9uLmggKi8sCisJ
CQkJOEMwRTMzNEExMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJXcml0ZUJhdGNoLmNwcCAqLywK
KwkJCQk4QzBFMzM0QjEzOEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQldyaXRlQmF0Y2guaCAqLywK
IAkJCSk7CiAJCQlwYXRoID0gbGV2ZWxkYjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBA
IC0yMjk0Miw2ICsyMjk1MSw4IEBACiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhT
TFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3RTJFMEYxMkYwRkM5QzAwQzEz
Mzc5IC8qIFhTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1MzczNTMxMzdCNjUxODAw
MDA4RENFIC8qIFplcm9Qb2xlLmggaW4gSGVhZGVycyAqLywKKwkJCQk4QzBFMzM0RDEzOEE5MkM3
MDA4REE5NEYgLyogTGV2ZWxEQlRyYW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk4QzBF
MzM0RjEzOEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQldyaXRlQmF0Y2guaCBpbiBIZWFkZXJzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpAQCAtMjQ4NDUsNyArMjQ4NTYsNiBAQAogCQkJCTUxQjI0MTdCMEQ5MzFGM0YwMEU4M0Y1QyAv
KiBMZWdhY3lXZWJBcmNoaXZlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFNjVCRUEwRUFD
REYxNjAwN0U0NTMzIC8qIExlbmd0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Q0FERjJBQTEz
NUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CThDQURGMkFDMTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCSXRlcmF0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODQ3MzBEOTAxMjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg5QjVFQUExMTFFODAwM0QwMEYyMzY3RSAvKiBMaW5lRW5kaW5n
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QUQyRjg3MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5r
SGFzaC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1NjMwLDYgKzI1NjQwLDggQEAKIAkJCQlFMUJF
NTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk3N0UyRTBFMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NGaWx0ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkQ1MzczNTIxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCThDMEUzMzRDMTM4QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCVHJhbnNh
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOEMwRTMzNEUxMzhBOTJDNzAwOERBOTRGIC8q
IExldmVsREJXcml0ZUJhdGNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuY3BwCmluZGV4IGQ1NmYyNmMu
LjM4NmY1ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2
ZWxEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xl
dmVsREJEYXRhYmFzZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJMZXZlbERCQ29t
cGFyYXRvci5oIgogI2luY2x1ZGUgIkxldmVsREJJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxldmVs
REJTbGljZS5oIgorI2luY2x1ZGUgIkxldmVsREJXcml0ZUJhdGNoLmgiCiAjaW5jbHVkZSA8bGV2
ZWxkYi9jb21wYXJhdG9yLmg+CiAjaW5jbHVkZSA8bGV2ZWxkYi9kYi5oPgogI2luY2x1ZGUgPGxl
dmVsZGIvc2xpY2UuaD4KQEAgLTExMCwxNSArMTExLDE1IEBAIFBhc3NPd25QdHI8TGV2ZWxEQkRh
dGFiYXNlPiBMZXZlbERCRGF0YWJhc2U6Om9wZW4oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29u
c3QKIAogICAgIHJlc3VsdC0+bV9kYiA9IGFkb3B0UHRyKGRiKTsKICAgICByZXN1bHQtPm1fY29t
cGFyYXRvckFkYXB0ZXIgPSBjb21wYXJhdG9yQWRhcHRlci5yZWxlYXNlKCk7CisgICAgcmVzdWx0
LT5tX2NvbXBhcmF0b3IgPSBjb21wYXJhdG9yOwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
KCk7CiB9CiAKLQogYm9vbCBMZXZlbERCRGF0YWJhc2U6OnB1dChjb25zdCBMZXZlbERCU2xpY2Um
IGtleSwgY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSkKIHsKICAgICBsZXZlbGRiOjpXcml0ZU9w
dGlvbnMgd3JpdGVPcHRpb25zOwotICAgIHdyaXRlT3B0aW9ucy5zeW5jID0gZmFsc2U7CisgICAg
d3JpdGVPcHRpb25zLnN5bmMgPSB0cnVlOwogCiAgICAgcmV0dXJuIG1fZGItPlB1dCh3cml0ZU9w
dGlvbnMsIG1ha2VTbGljZShrZXkpLCBtYWtlU2xpY2UodmFsdWUpKS5vaygpOwogfQpAQCAtMTI2
LDcgKzEyNyw3IEBAIGJvb2wgTGV2ZWxEQkRhdGFiYXNlOjpwdXQoY29uc3QgTGV2ZWxEQlNsaWNl
JiBrZXksIGNvbnN0IFZlY3RvcjxjaGFyPiYgdmFsdWUpCiBib29sIExldmVsREJEYXRhYmFzZTo6
cmVtb3ZlKGNvbnN0IExldmVsREJTbGljZSYga2V5KQogewogICAgIGxldmVsZGI6OldyaXRlT3B0
aW9ucyB3cml0ZU9wdGlvbnM7Ci0gICAgd3JpdGVPcHRpb25zLnN5bmMgPSBmYWxzZTsKKyAgICB3
cml0ZU9wdGlvbnMuc3luYyA9IHRydWU7CiAKICAgICByZXR1cm4gbV9kYi0+RGVsZXRlKHdyaXRl
T3B0aW9ucywgbWFrZVNsaWNlKGtleSkpLm9rKCk7CiB9CkBAIC0xNDEsMTIgKzE0Miw5MCBAQCBi
b29sIExldmVsREJEYXRhYmFzZTo6Z2V0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBWZWN0b3I8
Y2hhcj4mIHZhbHVlKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIExldmVsREJEYXRhYmFz
ZTo6d3JpdGUoTGV2ZWxEQldyaXRlQmF0Y2gmIHdyaXRlQmF0Y2gpCit7CisgICAgbGV2ZWxkYjo6
V3JpdGVPcHRpb25zIHdyaXRlT3B0aW9uczsKKyAgICB3cml0ZU9wdGlvbnMuc3luYyA9IHRydWU7
CisKKyAgICByZXR1cm4gbV9kYi0+V3JpdGUod3JpdGVPcHRpb25zLCB3cml0ZUJhdGNoLm1fd3Jp
dGVCYXRjaC5nZXQoKSkub2soKTsKK30KKworbmFtZXNwYWNlIHsKK2NsYXNzIEl0ZXJhdG9ySW1w
bCA6IHB1YmxpYyBMZXZlbERCSXRlcmF0b3IgeworcHVibGljOgorICAgIH5JdGVyYXRvckltcGwo
KSB7IH07CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBzZWVrVG9MYXN0KCk7CisgICAgdmlydHVhbCB2b2lkIHNlZWsoY29uc3QgTGV2ZWxEQlNs
aWNlJiB0YXJnZXQpOworICAgIHZpcnR1YWwgdm9pZCBuZXh0KCk7CisgICAgdmlydHVhbCB2b2lk
IHByZXYoKTsKKyAgICB2aXJ0dWFsIExldmVsREJTbGljZSBrZXkoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIExldmVsREJTbGljZSB2YWx1ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBXZWJDb3JlOjpMZXZlbERCRGF0YWJhc2U7CisgICAgSXRlcmF0b3JJbXBsKFBhc3NPd25Q
dHI8bGV2ZWxkYjo6SXRlcmF0b3I+KTsKKworICAgIE93blB0cjxsZXZlbGRiOjpJdGVyYXRvcj4g
bV9pdGVyYXRvcjsKK307Cit9CisKK0l0ZXJhdG9ySW1wbDo6SXRlcmF0b3JJbXBsKFBhc3NPd25Q
dHI8bGV2ZWxkYjo6SXRlcmF0b3I+IGl0KQorICAgIDogbV9pdGVyYXRvcihpdCkKK3sKK30KKwor
Ym9vbCBJdGVyYXRvckltcGw6OmlzVmFsaWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2l0ZXJh
dG9yLT5WYWxpZCgpOworfQorCit2b2lkIEl0ZXJhdG9ySW1wbDo6c2Vla1RvTGFzdCgpCit7Cisg
ICAgbV9pdGVyYXRvci0+U2Vla1RvTGFzdCgpOworfQorCit2b2lkIEl0ZXJhdG9ySW1wbDo6c2Vl
ayhjb25zdCBMZXZlbERCU2xpY2UmIHRhcmdldCkKK3sKKyAgICBtX2l0ZXJhdG9yLT5TZWVrKG1h
a2VTbGljZSh0YXJnZXQpKTsKK30KKwordm9pZCBJdGVyYXRvckltcGw6Om5leHQoKQoreworICAg
IEFTU0VSVChpc1ZhbGlkKCkpOworICAgIG1faXRlcmF0b3ItPk5leHQoKTsKK30KKwordm9pZCBJ
dGVyYXRvckltcGw6OnByZXYoKQoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIG1faXRl
cmF0b3ItPlByZXYoKTsKK30KKworTGV2ZWxEQlNsaWNlIEl0ZXJhdG9ySW1wbDo6a2V5KCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gbWFrZUxldmVsREJTbGlj
ZShtX2l0ZXJhdG9yLT5rZXkoKSk7Cit9CisKK0xldmVsREJTbGljZSBJdGVyYXRvckltcGw6OnZh
bHVlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gbWFrZUxl
dmVsREJTbGljZShtX2l0ZXJhdG9yLT52YWx1ZSgpKTsKK30KKwogUGFzc093blB0cjxMZXZlbERC
SXRlcmF0b3I+IExldmVsREJEYXRhYmFzZTo6Y3JlYXRlSXRlcmF0b3IoKQogewogICAgIE93blB0
cjxsZXZlbGRiOjpJdGVyYXRvcj4gaSA9IGFkb3B0UHRyKG1fZGItPk5ld0l0ZXJhdG9yKGxldmVs
ZGI6OlJlYWRPcHRpb25zKCkpKTsKICAgICBpZiAoIWkpIC8vIEZJWE1FOiBEb3VibGUgY2hlY2sg
aWYgd2UgYWN0dWFsbHkgbmVlZCB0byBjaGVjayB0aGlzLgogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IExldmVsREJJdGVyYXRvcihpLnJlbGVhc2UoKSkp
OworICAgIHJldHVybiBhZG9wdFB0cihuZXcgSXRlcmF0b3JJbXBsKGkucmVsZWFzZSgpKSk7Cit9
CisKK2NvbnN0IExldmVsREJDb21wYXJhdG9yKiBMZXZlbERCRGF0YWJhc2U6OmNvbXBhcmF0b3Io
KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbXBhcmF0b3I7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5oCmluZGV4IDUyNmQw
YjguLmNiYzI4ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIv
TGV2ZWxEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9M
ZXZlbERCRGF0YWJhc2UuaApAQCAtNDMsNiArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBMZXZlbERCQ29tcGFyYXRvcjsKIGNsYXNzIExldmVsREJJdGVyYXRvcjsKIGNsYXNzIExl
dmVsREJTbGljZTsKK2NsYXNzIExldmVsREJXcml0ZUJhdGNoOwogCiBjbGFzcyBMZXZlbERCRGF0
YWJhc2UgewogcHVibGljOgpAQCAtNTIsMTIgKzUzLDE1IEBAIHB1YmxpYzoKICAgICBib29sIHB1
dChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSk7CiAg
ICAgYm9vbCByZW1vdmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXkpOwogICAgIGJvb2wgZ2V0KGNv
bnN0IExldmVsREJTbGljZSYga2V5LCBWZWN0b3I8Y2hhcj4mIHZhbHVlKTsKKyAgICBib29sIHdy
aXRlKExldmVsREJXcml0ZUJhdGNoJik7CiAgICAgUGFzc093blB0cjxMZXZlbERCSXRlcmF0b3I+
IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgY29uc3QgTGV2ZWxEQkNvbXBhcmF0b3IqIGNvbXBhcmF0
b3IoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBMZXZlbERCRGF0YWJhc2UoKTsKIAogICAgIE93
blB0cjxsZXZlbGRiOjpEQj4gbV9kYjsKKyAgICBjb25zdCBMZXZlbERCQ29tcGFyYXRvciogbV9j
b21wYXJhdG9yOwogICAgIE93blB0cjxsZXZlbGRiOjpDb21wYXJhdG9yPiBtX2NvbXBhcmF0b3JB
ZGFwdGVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxk
Yi9MZXZlbERCSXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9M
ZXZlbERCSXRlcmF0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTUyODFl
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkl0
ZXJhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGV2ZWxEQkl0ZXJhdG9yLmgiCi0KLSNpZiBFTkFCTEUo
TEVWRUxEQikKLQotI2luY2x1ZGUgPGxldmVsZGIvaXRlcmF0b3IuaD4KLSNpbmNsdWRlIDxsZXZl
bGRiL3NsaWNlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotTGV2ZWxEQkl0ZXJhdG9yOjp+TGV2ZWxEQkl0ZXJhdG9yKCkKLXsK
LX0KLQotTGV2ZWxEQkl0ZXJhdG9yOjpMZXZlbERCSXRlcmF0b3IoUGFzc093blB0cjxsZXZlbGRi
OjpJdGVyYXRvcj4gaXQpCi0gICAgOiBtX2l0ZXJhdG9yKGl0KQotewotfQotCi1zdGF0aWMgbGV2
ZWxkYjo6U2xpY2UgbWFrZVNsaWNlKGNvbnN0IFZlY3RvcjxjaGFyPiYgdmFsdWUpCi17Ci0gICAg
cmV0dXJuIGxldmVsZGI6OlNsaWNlKHZhbHVlLmRhdGEoKSwgdmFsdWUuc2l6ZSgpKTsKLX0KLQot
c3RhdGljIExldmVsREJTbGljZSBtYWtlTGV2ZWxEQlNsaWNlKGxldmVsZGI6OlNsaWNlIHMpCi17
Ci0gICAgcmV0dXJuIExldmVsREJTbGljZShzLmRhdGEoKSwgcy5kYXRhKCkgKyBzLnNpemUoKSk7
Ci19Ci0KLWJvb2wgTGV2ZWxEQkl0ZXJhdG9yOjppc1ZhbGlkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9pdGVyYXRvci0+VmFsaWQoKTsKLX0KLQotdm9pZCBMZXZlbERCSXRlcmF0b3I6OnNlZWtU
b0xhc3QoKQotewotICAgIG1faXRlcmF0b3ItPlNlZWtUb0xhc3QoKTsKLX0KLQotdm9pZCBMZXZl
bERCSXRlcmF0b3I6OnNlZWsoY29uc3QgVmVjdG9yPGNoYXI+JiB0YXJnZXQpCi17Ci0gICAgbV9p
dGVyYXRvci0+U2VlayhtYWtlU2xpY2UodGFyZ2V0KSk7Ci19Ci0KLXZvaWQgTGV2ZWxEQkl0ZXJh
dG9yOjpuZXh0KCkKLXsKLSAgICBtX2l0ZXJhdG9yLT5OZXh0KCk7Ci19Ci0KLXZvaWQgTGV2ZWxE
Qkl0ZXJhdG9yOjpwcmV2KCkKLXsKLSAgICBtX2l0ZXJhdG9yLT5QcmV2KCk7Ci19Ci0KLUxldmVs
REJTbGljZSBMZXZlbERCSXRlcmF0b3I6OmtleSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VM
ZXZlbERCU2xpY2UobV9pdGVyYXRvci0+a2V5KCkpOwotfQotCi1MZXZlbERCU2xpY2UgTGV2ZWxE
Qkl0ZXJhdG9yOjp2YWx1ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VMZXZlbERCU2xpY2Uo
bV9pdGVyYXRvci0+dmFsdWUoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShMRVZFTERCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbGV2ZWxkYi9MZXZlbERCSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xl
dmVsZGIvTGV2ZWxEQkl0ZXJhdG9yLmgKaW5kZXggNzY4YTFiNC4uMTUyNTVkNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCSXRlcmF0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJJdGVyYXRvci5oCkBAIC0y
OSwzNiArMjksMjEgQEAKICNpZiBFTkFCTEUoTEVWRUxEQikKIAogI2luY2x1ZGUgIkxldmVsREJT
bGljZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8T3duUHRyLmg+
Ci0jaW5jbHVkZSA8VmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLWNsYXNzIEl0ZXJh
dG9yOwotfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExldmVsREJJdGVyYXRvciB7
CiBwdWJsaWM6Ci0gICAgfkxldmVsREJJdGVyYXRvcigpOwotCi0gICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZWVrVG9MYXN0KCk7Ci0gICAgdm9pZCBzZWVrKGNvbnN0IFZlY3Rv
cjxjaGFyPiYgdGFyZ2V0KTsKLSAgICB2b2lkIG5leHQoKTsKLSAgICB2b2lkIHByZXYoKTsKLSAg
ICBMZXZlbERCU2xpY2Uga2V5KCkgY29uc3Q7Ci0gICAgTGV2ZWxEQlNsaWNlIHZhbHVlKCkgY29u
c3Q7Ci0KLXByaXZhdGU6Ci0gICAgTGV2ZWxEQkl0ZXJhdG9yKFBhc3NPd25QdHI8bGV2ZWxkYjo6
SXRlcmF0b3I+KTsKLSAgICBmcmllbmQgY2xhc3MgTGV2ZWxEQkRhdGFiYXNlOwotCi0gICAgT3du
UHRyPGxldmVsZGI6Okl0ZXJhdG9yPiBtX2l0ZXJhdG9yOworICAgIHZpcnR1YWwgfkxldmVsREJJ
dGVyYXRvcigpIHsgfTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2Vla1RvTGFzdCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Vlayhj
b25zdCBMZXZlbERCU2xpY2UmIHRhcmdldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBuZXh0KCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBwcmV2KCkgPSAwOworICAgIHZpcnR1YWwgTGV2ZWxEQlNs
aWNlIGtleSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIExldmVsREJTbGljZSB2YWx1ZSgpIGNv
bnN0ID0gMDsKIH07CiAKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKExFVkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRi
L0xldmVsREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRi
L0xldmVsREJUcmFuc2FjdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYzNhNDc1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xl
dmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmNwcApAQCAtMCwwICsxLDQ0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMZXZlbERCVHJhbnNhY3Rpb24uaCIKKworI2lu
Y2x1ZGUgIkxldmVsREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkxldmVsREJTbGljZS5oIgorI2lu
Y2x1ZGUgIkxldmVsREJXcml0ZUJhdGNoLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKKyNpZiBFTkFCTEUoTEVWRUxEQikKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVm
UHRyPExldmVsREJUcmFuc2FjdGlvbj4gTGV2ZWxEQlRyYW5zYWN0aW9uOjpjcmVhdGUoTGV2ZWxE
QkRhdGFiYXNlKiBkYikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IExldmVsREJUcmFuc2Fj
dGlvbihkYikpOworfQorCitMZXZlbERCVHJhbnNhY3Rpb246OkxldmVsREJUcmFuc2FjdGlvbihM
ZXZlbERCRGF0YWJhc2UqIGRiKQorICAgIDogbV9kYihkYikKKyAgICAsIG1fY29tcGFyYXRvcihk
Yi0+Y29tcGFyYXRvcigpKQorICAgICwgbV9maW5pc2hlZChmYWxzZSkKK3sKKyAgICBtX3RyZWUu
YWJzdHJhY3RvcigpLm1fY29tcGFyYXRvciA9IG1fY29tcGFyYXRvcjsKK30KKwordm9pZCBMZXZl
bERCVHJhbnNhY3Rpb246OmNsZWFyVHJlZSgpCit7CisgICAgVHJlZVR5cGU6Okl0ZXJhdG9yIGl0
ZXJhdG9yOworICAgIGl0ZXJhdG9yLnN0YXJ0X2l0ZXJfbGVhc3QobV90cmVlKTsKKworICAgIHdo
aWxlICgqaXRlcmF0b3IpIHsKKyAgICAgICAgZGVsZXRlICppdGVyYXRvcjsKKyAgICAgICAgKytp
dGVyYXRvcjsKKyAgICB9CisgICAgbV90cmVlLnB1cmdlKCk7Cit9CisKK0xldmVsREJUcmFuc2Fj
dGlvbjo6fkxldmVsREJUcmFuc2FjdGlvbigpCit7CisgICAgY2xlYXJUcmVlKCk7Cit9CisKK3N0
YXRpYyB2b2lkIGluaXRWZWN0b3IoY29uc3QgTGV2ZWxEQlNsaWNlJiBzbGljZSwgVmVjdG9yPGNo
YXI+KiB2ZWN0b3IpCit7CisgICAgdmVjdG9yLT5jbGVhcigpOworICAgIHZlY3Rvci0+YXBwZW5k
KHNsaWNlLmJlZ2luKCksIHNsaWNlLmVuZCgpIC0gc2xpY2UuYmVnaW4oKSk7Cit9CisKK2Jvb2wg
TGV2ZWxEQlRyYW5zYWN0aW9uOjpzZXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIGNvbnN0IFZl
Y3RvcjxjaGFyPiYgdmFsdWUsIGJvb2wgZGVsZXRlZCkKK3sKKyAgICBBU1NFUlQoIW1fZmluaXNo
ZWQpOworICAgIGJvb2wgbmV3Tm9kZSA9IGZhbHNlOworICAgIEFWTFRyZWVOb2RlKiBub2RlID0g
bV90cmVlLnNlYXJjaChrZXkpOworCisgICAgaWYgKCFub2RlKSB7CisgICAgICAgIG5vZGUgPSBu
ZXcgQVZMVHJlZU5vZGU7CisgICAgICAgIGluaXRWZWN0b3Ioa2V5LCAmbm9kZS0+a2V5KTsKKyAg
ICAgICAgbV90cmVlLmluc2VydChub2RlKTsKKyAgICAgICAgbmV3Tm9kZSA9IHRydWU7CisgICAg
fQorICAgIG5vZGUtPnZhbHVlID0gdmFsdWU7CisgICAgbm9kZS0+ZGVsZXRlZCA9IGRlbGV0ZWQ7
CisKKyAgICBpZiAobmV3Tm9kZSkKKyAgICAgICAgcmVzZXRJdGVyYXRvcnMoKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBMZXZlbERCVHJhbnNhY3Rpb246OnB1dChjb25zdCBMZXZlbERC
U2xpY2UmIGtleSwgY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc2V0
KGtleSwgdmFsdWUsIGZhbHNlKTsKK30KKworYm9vbCBMZXZlbERCVHJhbnNhY3Rpb246OnJlbW92
ZShjb25zdCBMZXZlbERCU2xpY2UmIGtleSkKK3sKKyAgICByZXR1cm4gc2V0KGtleSwgVmVjdG9y
PGNoYXI+KCksIHRydWUpOworfQorCitib29sIExldmVsREJUcmFuc2FjdGlvbjo6Z2V0KGNvbnN0
IExldmVsREJTbGljZSYga2V5LCBWZWN0b3I8Y2hhcj4mIHZhbHVlKQoreworICAgIEFTU0VSVCgh
bV9maW5pc2hlZCk7CisgICAgQVZMVHJlZU5vZGUqIG5vZGUgPSBtX3RyZWUuc2VhcmNoKGtleSk7
CisKKyAgICBpZiAobm9kZSkgeworICAgICAgICBpZiAobm9kZS0+ZGVsZXRlZCkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB2YWx1ZSA9IG5vZGUtPnZhbHVlOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9kYi0+Z2V0KGtleSwgdmFsdWUp
OworfQorCitib29sIExldmVsREJUcmFuc2FjdGlvbjo6Y29tbWl0KCkKK3sKKyAgICBBU1NFUlQo
IW1fZmluaXNoZWQpOworICAgIE93blB0cjxMZXZlbERCV3JpdGVCYXRjaD4gd3JpdGVCYXRjaCA9
IExldmVsREJXcml0ZUJhdGNoOjpjcmVhdGUoKTsKKworICAgIFRyZWVUeXBlOjpJdGVyYXRvciBp
dGVyYXRvcjsKKyAgICBpdGVyYXRvci5zdGFydF9pdGVyX2xlYXN0KG1fdHJlZSk7CisKKyAgICB3
aGlsZSAoKml0ZXJhdG9yKSB7CisgICAgICAgIEFWTFRyZWVOb2RlKiBub2RlID0gKml0ZXJhdG9y
OworICAgICAgICBpZiAoIW5vZGUtPmRlbGV0ZWQpCisgICAgICAgICAgICB3cml0ZUJhdGNoLT5w
dXQobm9kZS0+a2V5LCBub2RlLT52YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdy
aXRlQmF0Y2gtPnJlbW92ZShub2RlLT5rZXkpOworICAgICAgICArK2l0ZXJhdG9yOworICAgIH0K
KworICAgIGlmICghbV9kYi0+d3JpdGUoKndyaXRlQmF0Y2gpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBjbGVhclRyZWUoKTsKKyAgICBtX2ZpbmlzaGVkID0gdHJ1ZTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OnJvbGxiYWNrKCkKK3sKKyAg
ICBBU1NFUlQoIW1fZmluaXNoZWQpOworICAgIG1fZmluaXNoZWQgPSB0cnVlOworICAgIGNsZWFy
VHJlZSgpOworfQorCitQYXNzT3duUHRyPExldmVsREJJdGVyYXRvcj4gTGV2ZWxEQlRyYW5zYWN0
aW9uOjpjcmVhdGVJdGVyYXRvcigpCit7CisgICAgcmV0dXJuIFRyYW5zYWN0aW9uSXRlcmF0b3I6
OmNyZWF0ZSh0aGlzKTsKK30KKworUGFzc093blB0cjxMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJ
dGVyYXRvcj4gTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I6OmNyZWF0ZShMZXZlbERC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgVHJl
ZUl0ZXJhdG9yKHRyYW5zYWN0aW9uKSk7Cit9CisKK2Jvb2wgTGV2ZWxEQlRyYW5zYWN0aW9uOjpU
cmVlSXRlcmF0b3I6OmlzVmFsaWQoKSBjb25zdAoreworICAgIHJldHVybiAqbV9pdGVyYXRvcjsK
K30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6c2Vla1RvTGFzdCgp
Cit7CisgICAgbV9pdGVyYXRvci5zdGFydF9pdGVyX2dyZWF0ZXN0KCptX3RyZWUpOworICAgIGlm
IChpc1ZhbGlkKCkpCisgICAgICAgIG1fa2V5ID0gKCptX2l0ZXJhdG9yKS0+a2V5OworfQorCit2
b2lkIExldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpzZWVrKGNvbnN0IExldmVsREJT
bGljZSYgdGFyZ2V0KQoreworICAgIG1faXRlcmF0b3Iuc3RhcnRfaXRlcigqbV90cmVlLCB0YXJn
ZXQsIFRyZWVUeXBlOjpFUVVBTCk7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIG1faXRl
cmF0b3Iuc3RhcnRfaXRlcigqbV90cmVlLCB0YXJnZXQsIFRyZWVUeXBlOjpHUkVBVEVSKTsKKwor
ICAgIGlmIChpc1ZhbGlkKCkpCisgICAgICAgIG1fa2V5ID0gKCptX2l0ZXJhdG9yKS0+a2V5Owor
fQorCit2b2lkIExldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpuZXh0KCkKK3sKKyAg
ICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICArK21faXRlcmF0b3I7CisgICAgaWYgKGlzVmFsaWQo
KSkgeworICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+bV9jb21wYXJhdG9yLT5jb21wYXJl
KCgqbV9pdGVyYXRvciktPmtleSwgbV9rZXkpID4gMCk7CisgICAgICAgIG1fa2V5ID0gKCptX2l0
ZXJhdG9yKS0+a2V5OworICAgIH0KK30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJ
dGVyYXRvcjo6cHJldigpCit7CisgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgLS1tX2l0ZXJh
dG9yOworICAgIGlmIChpc1ZhbGlkKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fdHJlZS0+YWJzdHJh
Y3RvcigpLm1fY29tcGFyYXRvci0+Y29tcGFyZSgoKm1faXRlcmF0b3IpLT5rZXksIG1fa2V5KSA8
IDApOworICAgICAgICBtX2tleSA9ICgqbV9pdGVyYXRvciktPmtleTsKKyAgICB9Cit9CisKK0xl
dmVsREJTbGljZSBMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6a2V5KCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gbV9rZXk7Cit9CisKK0xldmVs
REJTbGljZSBMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6dmFsdWUoKSBjb25zdAor
eworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIEFTU0VSVCghaXNEZWxldGVkKCkpOworICAg
IHJldHVybiAoKm1faXRlcmF0b3IpLT52YWx1ZTsKK30KKworYm9vbCBMZXZlbERCVHJhbnNhY3Rp
b246OlRyZWVJdGVyYXRvcjo6aXNEZWxldGVkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNWYWxp
ZCgpKTsKKyAgICByZXR1cm4gKCptX2l0ZXJhdG9yKS0+ZGVsZXRlZDsKK30KKwordm9pZCBMZXZl
bERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6cmVzZXQoKQoreworICAgIC8vIEZJWE1FOiBC
ZSBsYXp5OiBzZXQgYSBmbGFnIGFuZCBkbyB0aGUgYWN0dWFsIHJlc2V0IG5leHQgdGltZSB3ZSB1
c2UgdGhlIGl0ZXJhdG9yLgorICAgIGlmIChpc1ZhbGlkKCkpIHsKKyAgICAgICAgbV9pdGVyYXRv
ci5zdGFydF9pdGVyKCptX3RyZWUsIG1fa2V5LCBUcmVlVHlwZTo6RVFVQUwpOworICAgICAgICBB
U1NFUlQoaXNWYWxpZCgpKTsKKyAgICB9Cit9CisKK0xldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0
ZXJhdG9yOjp+VHJlZUl0ZXJhdG9yKCkKK3sKKyAgICBtX3RyYW5zYWN0aW9uLT51bnJlZ2lzdGVy
SXRlcmF0b3IodGhpcyk7Cit9CisKK0xldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpU
cmVlSXRlcmF0b3IoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICA6IG1fdHJl
ZSgmdHJhbnNhY3Rpb24tPm1fdHJlZSkKKyAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24p
Cit7CisgICAgdHJhbnNhY3Rpb24tPnJlZ2lzdGVySXRlcmF0b3IodGhpcyk7Cit9CisKK1Bhc3NP
d25QdHI8TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yPiBMZXZlbERCVHJh
bnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OmNyZWF0ZShQYXNzUmVmUHRyPExldmVsREJU
cmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUcmFu
c2FjdGlvbkl0ZXJhdG9yKHRyYW5zYWN0aW9uKSk7Cit9CisKK0xldmVsREJUcmFuc2FjdGlvbjo6
VHJhbnNhY3Rpb25JdGVyYXRvcjo6VHJhbnNhY3Rpb25JdGVyYXRvcihQYXNzUmVmUHRyPExldmVs
REJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24pCisgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0
aW9uKQorICAgICwgbV9jb21wYXJhdG9yKG1fdHJhbnNhY3Rpb24tPm1fY29tcGFyYXRvcikKKyAg
ICAsIG1fdHJlZUl0ZXJhdG9yKFRyZWVJdGVyYXRvcjo6Y3JlYXRlKG1fdHJhbnNhY3Rpb24uZ2V0
KCkpKQorICAgICwgbV9kYkl0ZXJhdG9yKG1fdHJhbnNhY3Rpb24tPm1fZGItPmNyZWF0ZUl0ZXJh
dG9yKCkpCisgICAgLCBtX2N1cnJlbnQoMCkKKyAgICAsIG1fZGlyZWN0aW9uKGtGb3J3YXJkKQor
eworfQorCitib29sIExldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6aXNW
YWxpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY3VycmVudDsKK30KKwordm9pZCBMZXZlbERC
VHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnNlZWtUb0xhc3QoKQoreworICAgIG1f
dHJlZUl0ZXJhdG9yLT5zZWVrVG9MYXN0KCk7CisgICAgbV9kYkl0ZXJhdG9yLT5zZWVrVG9MYXN0
KCk7CisgICAgbV9kaXJlY3Rpb24gPSBrUmV2ZXJzZTsKKworICAgIGhhbmRsZUNvbmZsaWN0c0Fu
ZERlbGV0ZXMoKTsKKyAgICBzZXRDdXJyZW50SXRlcmF0b3JUb0xhcmdlc3RLZXkoKTsKK30KKwor
dm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnNlZWsoY29uc3Qg
TGV2ZWxEQlNsaWNlJiB0YXJnZXQpCit7CisgICAgbV90cmVlSXRlcmF0b3ItPnNlZWsodGFyZ2V0
KTsKKyAgICBtX2RiSXRlcmF0b3ItPnNlZWsodGFyZ2V0KTsKKyAgICBtX2RpcmVjdGlvbiA9IGtG
b3J3YXJkOworCisgICAgaGFuZGxlQ29uZmxpY3RzQW5kRGVsZXRlcygpOworICAgIHNldEN1cnJl
bnRJdGVyYXRvclRvU21hbGxlc3RLZXkoKTsKK30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246
OlRyYW5zYWN0aW9uSXRlcmF0b3I6Om5leHQoKQoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOwor
CisgICAgaWYgKG1fZGlyZWN0aW9uICE9IGtGb3J3YXJkKSB7CisgICAgICAgIC8vIEVuc3VyZSB0
aGUgbm9uLWN1cnJlbnQgaXRlcmF0b3IgaXMgcG9zaXRpb25lZCBhZnRlciBrZXkoKS4KKworICAg
ICAgICBpZiAobV9jdXJyZW50ICE9IG1fdHJlZUl0ZXJhdG9yLmdldCgpKSB7CisgICAgICAgICAg
ICBtX3RyZWVJdGVyYXRvci0+c2VlayhtX2N1cnJlbnQtPmtleSgpKTsKKyAgICAgICAgICAgIGlm
IChtX3RyZWVJdGVyYXRvci0+aXNWYWxpZCgpICYmICFtX2NvbXBhcmF0b3ItPmNvbXBhcmUobV90
cmVlSXRlcmF0b3ItPmtleSgpLCBrZXkoKSkpCisgICAgICAgICAgICAgICAgbV90cmVlSXRlcmF0
b3ItPm5leHQoKTsKKworICAgICAgICAgICAgQVNTRVJUKCFtX3RyZWVJdGVyYXRvci0+aXNWYWxp
ZCgpIHx8IG1fY29tcGFyYXRvci0+Y29tcGFyZShtX3RyZWVJdGVyYXRvci0+a2V5KCksIGtleSgp
KSA+IDApOworICAgICAgICB9IGVsc2UgaWYgKG1fY3VycmVudCAhPSBtX2RiSXRlcmF0b3IuZ2V0
KCkpIHsKKyAgICAgICAgICAgIG1fZGJJdGVyYXRvci0+c2VlayhtX2N1cnJlbnQtPmtleSgpKTsK
KyAgICAgICAgICAgIGlmIChtX2RiSXRlcmF0b3ItPmlzVmFsaWQoKSAmJiAhbV9jb21wYXJhdG9y
LT5jb21wYXJlKG1fZGJJdGVyYXRvci0+a2V5KCksIGtleSgpKSkKKyAgICAgICAgICAgICAgICBt
X2RiSXRlcmF0b3ItPm5leHQoKTsKKworICAgICAgICAgICAgQVNTRVJUKCFtX2RiSXRlcmF0b3It
PmlzVmFsaWQoKSB8fCBtX2NvbXBhcmF0b3ItPmNvbXBhcmUobV9kYkl0ZXJhdG9yLT5rZXkoKSwg
a2V5KCkpID4gMCk7CisgICAgICAgIH0KKworICAgICAgICBtX2RpcmVjdGlvbiA9IGtGb3J3YXJk
OworICAgIH0KKworICAgIG1fY3VycmVudC0+bmV4dCgpOworICAgIGhhbmRsZUNvbmZsaWN0c0Fu
ZERlbGV0ZXMoKTsKKyAgICBzZXRDdXJyZW50SXRlcmF0b3JUb1NtYWxsZXN0S2V5KCk7Cit9CisK
K3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpwcmV2KCkKK3sK
KyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKworICAgIGlmIChtX2RpcmVjdGlvbiAhPSBrUmV2ZXJz
ZSkgeworICAgICAgICAvLyBFbnN1cmUgdGhlIG5vbi1jdXJyZW50IGl0ZXJhdG9yIGlzIHBvc2l0
aW9uZWQgYmVmb3JlIGtleSgpOworCisgICAgICAgIGlmIChtX2N1cnJlbnQgIT0gbV90cmVlSXRl
cmF0b3IuZ2V0KCkpIHsKKyAgICAgICAgICAgIG1fdHJlZUl0ZXJhdG9yLT5zZWVrKG1fY3VycmVu
dC0+a2V5KCkpOworCisgICAgICAgICAgICBpZiAobV90cmVlSXRlcmF0b3ItPmlzVmFsaWQoKSkg
eworICAgICAgICAgICAgICAgIC8vIEl0ZXJhdG9yIGlzIGF0IGZpcnN0IGVudHJ5ID49IGtleSgp
LgorICAgICAgICAgICAgICAgIC8vIFN0ZXAgYmFjayBvbmNlIHRvIGVudHJ5IDwga2V5LgorICAg
ICAgICAgICAgICAgIC8vIFRoaXMgaXMgd2h5IHdlIGRvbid0IGNoZWNrIGZvciB0aGUga2V5cyBi
ZWluZyB0aGUgc2FtZSBiZWZvcmUKKyAgICAgICAgICAgICAgICAvLyBzdGVwcGluZywgbGlrZSB3
ZSBkbyBpbiBuZXh0KCkgYWJvdmUuCisgICAgICAgICAgICAgICAgbV90cmVlSXRlcmF0b3ItPnBy
ZXYoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1fdHJlZUl0ZXJhdG9y
LT5zZWVrVG9MYXN0KCk7IC8vIEl0ZXJhdG9yIGhhcyBubyBlbnRyaWVzID49IGtleSgpLiBQb3Np
dGlvbiBhdCBsYXN0IGVudHJ5LgorCisgICAgICAgICAgICBBU1NFUlQoIW1fdHJlZUl0ZXJhdG9y
LT5pc1ZhbGlkKCkgfHwgbV9jb21wYXJhdG9yLT5jb21wYXJlKG1fdHJlZUl0ZXJhdG9yLT5rZXko
KSwga2V5KCkpIDwgMCk7CisgICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50ICE9IG1fZGJJdGVy
YXRvci5nZXQoKSkgeworICAgICAgICAgICAgbV9kYkl0ZXJhdG9yLT5zZWVrKG1fY3VycmVudC0+
a2V5KCkpOworCisgICAgICAgICAgICBpZiAobV9kYkl0ZXJhdG9yLT5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICAgICAgbV9kYkl0ZXJhdG9yLT5wcmV2KCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbV9kYkl0ZXJhdG9yLT5zZWVrVG9MYXN0KCk7CisKKyAgICAgICAgICAgIEFT
U0VSVCghbV9kYkl0ZXJhdG9yLT5pc1ZhbGlkKCkgfHwgbV9jb21wYXJhdG9yLT5jb21wYXJlKG1f
ZGJJdGVyYXRvci0+a2V5KCksIGtleSgpKSA8IDApOworICAgICAgICAgfQorCisgICAgICAgIG1f
ZGlyZWN0aW9uID0ga1JldmVyc2U7CisgICAgfQorCisgICAgbV9jdXJyZW50LT5wcmV2KCk7Cisg
ICAgaGFuZGxlQ29uZmxpY3RzQW5kRGVsZXRlcygpOworICAgIHNldEN1cnJlbnRJdGVyYXRvclRv
TGFyZ2VzdEtleSgpOworfQorCitMZXZlbERCU2xpY2UgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFu
c2FjdGlvbkl0ZXJhdG9yOjprZXkoKSBjb25zdAoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOwor
ICAgIHJldHVybiBtX2N1cnJlbnQtPmtleSgpOworfQorCitMZXZlbERCU2xpY2UgTGV2ZWxEQlRy
YW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjp2YWx1ZSgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKGlzVmFsaWQoKSk7CisgICAgcmV0dXJuIG1fY3VycmVudC0+dmFsdWUoKTsKK30KKwordm9p
ZCBMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OmhhbmRsZUNvbmZsaWN0
c0FuZERlbGV0ZXMoKQoreworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGlmIChtX3RyZWVJ
dGVyYXRvci0+aXNWYWxpZCgpICYmIG1fZGJJdGVyYXRvci0+aXNWYWxpZCgpICYmICFtX2NvbXBh
cmF0b3ItPmNvbXBhcmUobV90cmVlSXRlcmF0b3ItPmtleSgpLCBtX2RiSXRlcmF0b3ItPmtleSgp
KSkgeworICAgICAgICAgICAgLy8gRm9yIGVxdWFsIGtleXMsIHRoZSB0cmVlIGl0ZXJhdG9yIHRh
a2VzIHByZWNlZGVuY2UsIHNvIG1vdmUgdGhlIGRhdGFiYXNlIGl0ZXJhdG9yIGFub3RoZXIgc3Rl
cC4KKyAgICAgICAgICAgIGlmIChtX2RpcmVjdGlvbiA9PSBrRm9yd2FyZCkKKyAgICAgICAgICAg
ICAgICBtX2RiSXRlcmF0b3ItPm5leHQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtX2RiSXRlcmF0b3ItPnByZXYoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKG1fdHJlZUl0ZXJhdG9yLT5pc1ZhbGlkKCkgJiYgbV90cmVlSXRl
cmF0b3ItPmlzRGVsZXRlZCgpKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgdHJlZSBpdGVyYXRv
ciBpcyBvbiBhIGRlbGV0ZSBtYXJrZXIsIHRha2UgYW5vdGhlciBzdGVwLgorICAgICAgICAgICAg
aWYgKG1fZGlyZWN0aW9uID09IGtGb3J3YXJkKQorICAgICAgICAgICAgICAgIG1fdHJlZUl0ZXJh
dG9yLT5uZXh0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV90cmVlSXRl
cmF0b3ItPnByZXYoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9u
SXRlcmF0b3I6OnNldEN1cnJlbnRJdGVyYXRvclRvU21hbGxlc3RLZXkoKQoreworICAgIExldmVs
REJJdGVyYXRvciogc21hbGxlc3QgPSAwOworCisgICAgaWYgKG1fdHJlZUl0ZXJhdG9yLT5pc1Zh
bGlkKCkpCisgICAgICAgIHNtYWxsZXN0ID0gbV90cmVlSXRlcmF0b3IuZ2V0KCk7CisKKyAgICBp
ZiAobV9kYkl0ZXJhdG9yLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgaWYgKCFzbWFsbGVzdCB8fCBt
X2NvbXBhcmF0b3ItPmNvbXBhcmUobV9kYkl0ZXJhdG9yLT5rZXkoKSwgc21hbGxlc3QtPmtleSgp
KSA8IDApCisgICAgICAgICAgICBzbWFsbGVzdCA9IG1fZGJJdGVyYXRvci5nZXQoKTsKKyAgICB9
CisKKyAgICBtX2N1cnJlbnQgPSBzbWFsbGVzdDsKK30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rp
b246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnNldEN1cnJlbnRJdGVyYXRvclRvTGFyZ2VzdEtleSgp
Cit7CisgICAgTGV2ZWxEQkl0ZXJhdG9yKiBsYXJnZXN0ID0gMDsKKworICAgIGlmIChtX3RyZWVJ
dGVyYXRvci0+aXNWYWxpZCgpKQorICAgICAgICBsYXJnZXN0ID0gbV90cmVlSXRlcmF0b3IuZ2V0
KCk7CisKKyAgICBpZiAobV9kYkl0ZXJhdG9yLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgaWYgKCFs
YXJnZXN0IHx8IG1fY29tcGFyYXRvci0+Y29tcGFyZShtX2RiSXRlcmF0b3ItPmtleSgpLCBsYXJn
ZXN0LT5rZXkoKSkgPiAwKQorICAgICAgICAgICAgbGFyZ2VzdCA9IG1fZGJJdGVyYXRvci5nZXQo
KTsKKyAgICB9CisKKyAgICBtX2N1cnJlbnQgPSBsYXJnZXN0OworfQorCit2b2lkIExldmVsREJU
cmFuc2FjdGlvbjo6cmVnaXN0ZXJJdGVyYXRvcihUcmVlSXRlcmF0b3IqIGl0ZXJhdG9yKQorewor
ICAgIEFTU0VSVCghbV90cmVlSXRlcmF0b3JzLmNvbnRhaW5zKGl0ZXJhdG9yKSk7CisgICAgbV90
cmVlSXRlcmF0b3JzLmFkZChpdGVyYXRvcik7Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9u
Ojp1bnJlZ2lzdGVySXRlcmF0b3IoVHJlZUl0ZXJhdG9yKiBpdGVyYXRvcikKK3sKKyAgICBBU1NF
UlQobV90cmVlSXRlcmF0b3JzLmNvbnRhaW5zKGl0ZXJhdG9yKSk7CisgICAgbV90cmVlSXRlcmF0
b3JzLnJlbW92ZShpdGVyYXRvcik7Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpyZXNl
dEl0ZXJhdG9ycygpCit7CisgICAgZm9yIChIYXNoU2V0PFRyZWVJdGVyYXRvcio+OjppdGVyYXRv
ciBpID0gbV90cmVlSXRlcmF0b3JzLmJlZ2luKCk7IGkgIT0gbV90cmVlSXRlcmF0b3JzLmVuZCgp
OyArK2kpIHsKKyAgICAgICAgVHJlZUl0ZXJhdG9yKiB0cmVlSXRlcmF0b3IgPSAqaTsKKyAgICAg
ICAgdHJlZUl0ZXJhdG9yLT5yZXNldCgpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExFVkVMREIpCisjZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRi
L0xldmVsREJUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9M
ZXZlbERCVHJhbnNhY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
MmU4NjJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxk
Yi9MZXZlbERCVHJhbnNhY3Rpb24uaApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
TGV2ZWxEQlRyYW5zYWN0aW9uX2gKKyNkZWZpbmUgTGV2ZWxEQlRyYW5zYWN0aW9uX2gKKworI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorI2lmIEVOQUJMRShMRVZFTERCKQorCisjaW5jbHVk
ZSAiTGV2ZWxEQkNvbXBhcmF0b3IuaCIKKyNpbmNsdWRlICJMZXZlbERCSXRlcmF0b3IuaCIKKyNp
bmNsdWRlICJMZXZlbERCU2xpY2UuaCIKKyNpbmNsdWRlIDx3dGYvQVZMVHJlZS5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBMZXZlbERCRGF0YWJhc2U7CisKK3VzaW5nIFdURjo6QVZMVHJlZTsK
KworY2xhc3MgTGV2ZWxEQlRyYW5zYWN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TGV2ZWxEQlRy
YW5zYWN0aW9uPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGV2ZWxEQlRyYW5z
YWN0aW9uPiBjcmVhdGUoTGV2ZWxEQkRhdGFiYXNlKik7CisKKyAgICB+TGV2ZWxEQlRyYW5zYWN0
aW9uKCk7CisgICAgYm9vbCBwdXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIGNvbnN0IFZlY3Rv
cjxjaGFyPiYgdmFsdWUpOworICAgIGJvb2wgcmVtb3ZlKGNvbnN0IExldmVsREJTbGljZSYga2V5
KTsKKyAgICBib29sIGdldChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgVmVjdG9yPGNoYXI+JiB2
YWx1ZSk7CisgICAgYm9vbCBjb21taXQoKTsKKyAgICB2b2lkIHJvbGxiYWNrKCk7CisKKyAgICBQ
YXNzT3duUHRyPExldmVsREJJdGVyYXRvcj4gY3JlYXRlSXRlcmF0b3IoKTsKKworcHJpdmF0ZToK
KyAgICBMZXZlbERCVHJhbnNhY3Rpb24oTGV2ZWxEQkRhdGFiYXNlKik7CisKKyAgICBzdHJ1Y3Qg
QVZMVHJlZU5vZGUgeworICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5OworICAgICAgICBWZWN0b3I8
Y2hhcj4gdmFsdWU7CisgICAgICAgIGJvb2wgZGVsZXRlZDsKKworICAgICAgICBBVkxUcmVlTm9k
ZSogbGVzczsKKyAgICAgICAgQVZMVHJlZU5vZGUqIGdyZWF0ZXI7CisgICAgICAgIGludCBiYWxh
bmNlRmFjdG9yOworICAgIH07CisKKyAgICBzdHJ1Y3QgQVZMVHJlZUFic3RyYWN0b3IgeworICAg
ICAgICB0eXBlZGVmIEFWTFRyZWVOb2RlKiBoYW5kbGU7CisgICAgICAgIHR5cGVkZWYgc2l6ZV90
IHNpemU7CisgICAgICAgIHR5cGVkZWYgTGV2ZWxEQlNsaWNlIGtleTsKKworICAgICAgICBoYW5k
bGUgZ2V0X2xlc3MoaGFuZGxlIGgpIHsgcmV0dXJuIGgtPmxlc3M7IH0KKyAgICAgICAgdm9pZCBz
ZXRfbGVzcyhoYW5kbGUgaCwgaGFuZGxlIGxlc3MpIHsgaC0+bGVzcyA9IGxlc3M7IH0KKyAgICAg
ICAgaGFuZGxlIGdldF9ncmVhdGVyKGhhbmRsZSBoKSB7IHJldHVybiBoLT5ncmVhdGVyOyB9Cisg
ICAgICAgIHZvaWQgc2V0X2dyZWF0ZXIoaGFuZGxlIGgsIGhhbmRsZSBncmVhdGVyKSB7IGgtPmdy
ZWF0ZXIgPSBncmVhdGVyOyB9CisKKyAgICAgICAgaW50IGdldF9iYWxhbmNlX2ZhY3RvcihoYW5k
bGUgaCkgeyByZXR1cm4gaC0+YmFsYW5jZUZhY3RvcjsgfQorICAgICAgICB2b2lkIHNldF9iYWxh
bmNlX2ZhY3RvcihoYW5kbGUgaCwgaW50IGJmKSB7IGgtPmJhbGFuY2VGYWN0b3IgPSBiZjsgfQor
CisgICAgICAgIGludCBjb21wYXJlX2tleV9rZXkoY29uc3Qga2V5JiBrYSwgY29uc3Qga2V5JiBr
YikgeyByZXR1cm4gbV9jb21wYXJhdG9yLT5jb21wYXJlKGthLCBrYik7IH0KKyAgICAgICAgaW50
IGNvbXBhcmVfa2V5X25vZGUoY29uc3Qga2V5JiBrLCBoYW5kbGUgaCkgeyByZXR1cm4gY29tcGFy
ZV9rZXlfa2V5KGssIGgtPmtleSk7IH0KKyAgICAgICAgaW50IGNvbXBhcmVfbm9kZV9ub2RlKGhh
bmRsZSBoYSwgaGFuZGxlIGhiKSB7IHJldHVybiBjb21wYXJlX2tleV9rZXkoaGEtPmtleSwgaGIt
PmtleSk7IH0KKworICAgICAgICBzdGF0aWMgaGFuZGxlIG51bGwoKSB7IHJldHVybiAwOyB9CisK
KyAgICAgICAgY29uc3QgTGV2ZWxEQkNvbXBhcmF0b3IqIG1fY29tcGFyYXRvcjsKKyAgICB9Owor
CisgICAgdHlwZWRlZiBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yPiBUcmVlVHlwZTsKKworICAg
IGNsYXNzIFRyZWVJdGVyYXRvciA6IHB1YmxpYyBMZXZlbERCSXRlcmF0b3IgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8VHJlZUl0ZXJhdG9yPiBjcmVhdGUoTGV2ZWxE
QlRyYW5zYWN0aW9uKik7CisgICAgICAgIH5UcmVlSXRlcmF0b3IoKTsKKworICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgc2Vla1RvTGFz
dCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2Vlayhjb25zdCBMZXZlbERCU2xpY2UmKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIG5leHQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXYoKTsK
KyAgICAgICAgdmlydHVhbCBMZXZlbERCU2xpY2Uga2V5KCkgY29uc3Q7CisgICAgICAgIHZpcnR1
YWwgTGV2ZWxEQlNsaWNlIHZhbHVlKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNEZWxldGVkKCkg
Y29uc3Q7CisgICAgICAgIHZvaWQgcmVzZXQoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFRy
ZWVJdGVyYXRvcihMZXZlbERCVHJhbnNhY3Rpb24qKTsKKyAgICAgICAgbXV0YWJsZSBUcmVlVHlw
ZTo6SXRlcmF0b3IgbV9pdGVyYXRvcjsgLy8gRGVyZWZlcmVuY2luZyB0aGlzIGlzIG5vbi1jb25z
dC4KKyAgICAgICAgVHJlZVR5cGUqIG1fdHJlZTsKKyAgICAgICAgTGV2ZWxEQlRyYW5zYWN0aW9u
KiBtX3RyYW5zYWN0aW9uOworICAgICAgICBWZWN0b3I8Y2hhcj4gbV9rZXk7CisgICAgfTsKKwor
ICAgIGNsYXNzIFRyYW5zYWN0aW9uSXRlcmF0b3IgOiBwdWJsaWMgTGV2ZWxEQkl0ZXJhdG9yIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIH5UcmFuc2FjdGlvbkl0ZXJhdG9yKCkgeyB9OworICAgICAg
ICBzdGF0aWMgUGFzc093blB0cjxUcmFuc2FjdGlvbkl0ZXJhdG9yPiBjcmVhdGUoUGFzc1JlZlB0
cjxMZXZlbERCVHJhbnNhY3Rpb24+KTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgc2Vla1RvTGFzdCgpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgc2Vlayhjb25zdCBMZXZlbERCU2xpY2UmIHRhcmdldCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBuZXh0KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmV2KCk7CisgICAgICAgIHZp
cnR1YWwgTGV2ZWxEQlNsaWNlIGtleSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIExldmVsREJT
bGljZSB2YWx1ZSgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgVHJhbnNhY3Rpb25J
dGVyYXRvcihQYXNzUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4pOworICAgICAgICB2b2lkIGhh
bmRsZUNvbmZsaWN0c0FuZERlbGV0ZXMoKTsKKyAgICAgICAgdm9pZCBzZXRDdXJyZW50SXRlcmF0
b3JUb1NtYWxsZXN0S2V5KCk7CisgICAgICAgIHZvaWQgc2V0Q3VycmVudEl0ZXJhdG9yVG9MYXJn
ZXN0S2V5KCk7CisKKyAgICAgICAgUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gbV90cmFuc2Fj
dGlvbjsKKyAgICAgICAgY29uc3QgTGV2ZWxEQkNvbXBhcmF0b3IqIG1fY29tcGFyYXRvcjsKKyAg
ICAgICAgT3duUHRyPFRyZWVJdGVyYXRvcj4gbV90cmVlSXRlcmF0b3I7CisgICAgICAgIE93blB0
cjxMZXZlbERCSXRlcmF0b3I+IG1fZGJJdGVyYXRvcjsKKyAgICAgICAgTGV2ZWxEQkl0ZXJhdG9y
KiBtX2N1cnJlbnQ7CisKKyAgICAgICAgZW51bSBEaXJlY3Rpb24geworICAgICAgICAgICAga0Zv
cndhcmQsCisgICAgICAgICAgICBrUmV2ZXJzZQorICAgICAgICB9OworICAgICAgICBEaXJlY3Rp
b24gbV9kaXJlY3Rpb247CisgICAgfTsKKworICAgIGJvb2wgc2V0KGNvbnN0IExldmVsREJTbGlj
ZSYga2V5LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHZhbHVlLCBib29sIGRlbGV0ZWQpOworICAgIHZv
aWQgY2xlYXJUcmVlKCk7CisgICAgdm9pZCByZWdpc3Rlckl0ZXJhdG9yKFRyZWVJdGVyYXRvciop
OworICAgIHZvaWQgdW5yZWdpc3Rlckl0ZXJhdG9yKFRyZWVJdGVyYXRvciopOworICAgIHZvaWQg
cmVzZXRJdGVyYXRvcnMoKTsKKworICAgIExldmVsREJEYXRhYmFzZSogbV9kYjsKKyAgICBjb25z
dCBMZXZlbERCQ29tcGFyYXRvciogbV9jb21wYXJhdG9yOworICAgIFRyZWVUeXBlIG1fdHJlZTsK
KyAgICBib29sIG1fZmluaXNoZWQ7CisgICAgSGFzaFNldDxUcmVlSXRlcmF0b3IqPiBtX3RyZWVJ
dGVyYXRvcnM7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTEVWRUxEQikKKyNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIExldmVsREJUcmFuc2FjdGlv
bl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJX
cml0ZUJhdGNoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldy
aXRlQmF0Y2guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MjQ3NjYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVs
REJXcml0ZUJhdGNoLmNwcApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkxldmVsREJXcml0ZUJhdGNoLmgiCisKKyNpZiBFTkFCTEUoTEVWRUxE
QikKKworI2luY2x1ZGUgIkxldmVsREJTbGljZS5oIgorI2luY2x1ZGUgPGxldmVsZGIvc2xpY2Uu
aD4KKyNpbmNsdWRlIDxsZXZlbGRiL3dyaXRlX2JhdGNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGFzc093blB0cjxMZXZlbERCV3JpdGVCYXRjaD4gTGV2ZWxEQldyaXRlQmF0Y2g6OmNy
ZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMZXZlbERCV3JpdGVCYXRjaCk7Cit9
CisKK0xldmVsREJXcml0ZUJhdGNoOjpMZXZlbERCV3JpdGVCYXRjaCgpCisgICAgOiBtX3dyaXRl
QmF0Y2goYWRvcHRQdHIobmV3IGxldmVsZGI6OldyaXRlQmF0Y2gpKQoreworfQorCitMZXZlbERC
V3JpdGVCYXRjaDo6fkxldmVsREJXcml0ZUJhdGNoKCkKK3sKK30KKworc3RhdGljIGxldmVsZGI6
OlNsaWNlIG1ha2VTbGljZShjb25zdCBMZXZlbERCU2xpY2UmIHMpCit7CisgICAgcmV0dXJuIGxl
dmVsZGI6OlNsaWNlKHMuYmVnaW4oKSwgcy5lbmQoKSAtIHMuYmVnaW4oKSk7Cit9CisKK3ZvaWQg
TGV2ZWxEQldyaXRlQmF0Y2g6OnB1dChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgY29uc3QgTGV2
ZWxEQlNsaWNlJiB2YWx1ZSkKK3sKKyAgICBtX3dyaXRlQmF0Y2gtPlB1dChtYWtlU2xpY2Uoa2V5
KSwgbWFrZVNsaWNlKHZhbHVlKSk7Cit9CisKK3ZvaWQgTGV2ZWxEQldyaXRlQmF0Y2g6OnJlbW92
ZShjb25zdCBMZXZlbERCU2xpY2UmIGtleSkKK3sKKyAgICBtX3dyaXRlQmF0Y2gtPkRlbGV0ZSht
YWtlU2xpY2Uoa2V5KSk7Cit9CisKK3ZvaWQgTGV2ZWxEQldyaXRlQmF0Y2g6OmNsZWFyKCkKK3sK
KyAgICBtX3dyaXRlQmF0Y2gtPkNsZWFyKCk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZmMzBmMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2guaApAQCAt
MCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMZXZlbERCV3JpdGVCYXRjaF9oCisjZGVmaW5l
IExldmVsREJXcml0ZUJhdGNoX2gKKworI2lmIEVOQUJMRShMRVZFTERCKQorCisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBs
ZXZlbGRiIHsKK2NsYXNzIFdyaXRlQmF0Y2g7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgTGV2ZWxEQlNsaWNlOworCisvLyBXcmFwcGVyIGFyb3VuZCBsZXZlbGRiOjpXcml0ZUJh
dGNoLgorLy8gVGhpcyBjbGFzcyBob2xkcyBhIGNvbGxlY3Rpb24gb2YgdXBkYXRlcyB0byBhcHBs
eSBhdG9taWNhbGx5IHRvIGEgZGF0YWJhc2UuCitjbGFzcyBMZXZlbERCV3JpdGVCYXRjaCB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGV2ZWxEQldyaXRlQmF0Y2g+IGNyZWF0ZSgp
OworICAgIH5MZXZlbERCV3JpdGVCYXRjaCgpOworCisgICAgdm9pZCBwdXQoY29uc3QgTGV2ZWxE
QlNsaWNlJiBrZXksIGNvbnN0IExldmVsREJTbGljZSYgdmFsdWUpOworICAgIHZvaWQgcmVtb3Zl
KGNvbnN0IExldmVsREJTbGljZSYga2V5KTsKKyAgICB2b2lkIGNsZWFyKCk7CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIExldmVsREJEYXRhYmFzZTsKKyAgICBMZXZlbERCV3JpdGVCYXRj
aCgpOworCisgICAgT3duUHRyPGxldmVsZGI6OldyaXRlQmF0Y2g+IG1fd3JpdGVCYXRjaDsKK307
CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShMRVZFTERCKQorI2VuZGlmIC8vIExldmVsREJXcml0
ZUJhdGNoX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5n
U3RvcmUuY3BwCmluZGV4IGFjYmU1MGQuLjZkNDU4MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcApAQCAtMzgsNiArMzgsNyBAQAog
I2luY2x1ZGUgIkxldmVsREJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkxldmVsREJJdGVyYXRvci5o
IgogI2luY2x1ZGUgIkxldmVsREJTbGljZS5oIgorI2luY2x1ZGUgIkxldmVsREJUcmFuc2FjdGlv
bi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAKICNpZm5kZWYgSU5UNjRfTUFYCkBA
IC00OSw3ICs1MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIElE
QkxldmVsREJDb2Rpbmc7CiAKLXN0YXRpYyBib29sIGdldEludChMZXZlbERCRGF0YWJhc2UqIGRi
LCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgaW50NjRfdCYgZm91bmRJbnQpCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgorc3RhdGljIGJvb2wgZ2V0SW50KERCT3JUcmFuc2Fj
dGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBpbnQ2NF90JiBmb3VuZEludCkKIHsK
ICAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwogICAgIGlmICghZGItPmdldChrZXksIHJlc3VsdCkp
CkBAIC01OSwxMiArNjEsMTQgQEAgc3RhdGljIGJvb2wgZ2V0SW50KExldmVsREJEYXRhYmFzZSog
ZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBpbnQ2NF90JiBmb3VuZEkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgcHV0SW50KExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0
IFZlY3RvcjxjaGFyPiYga2V5LCBpbnQ2NF90IHZhbHVlKQordGVtcGxhdGUgPHR5cGVuYW1lIERC
T3JUcmFuc2FjdGlvbj4KK3N0YXRpYyBib29sIHB1dEludChEQk9yVHJhbnNhY3Rpb24qIGRiLCBj
b25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgaW50NjRfdCB2YWx1ZSkKIHsKICAgICByZXR1cm4gZGIt
PnB1dChrZXksIGVuY29kZUludCh2YWx1ZSkpOwogfQogCi1zdGF0aWMgYm9vbCBnZXRTdHJpbmco
TGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIFN0cmluZyYgZm91
bmRTdHJpbmcpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgorc3RhdGljIGJv
b2wgZ2V0U3RyaW5nKERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5
LCBTdHJpbmcmIGZvdW5kU3RyaW5nKQogewogICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7CiAgICAg
aWYgKCFkYi0+Z2V0KGtleSwgcmVzdWx0KSkKQEAgLTc0LDcgKzc4LDggQEAgc3RhdGljIGJvb2wg
Z2V0U3RyaW5nKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBT
dHJpbmcmIGZvdW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgcHV0U3RyaW5n
KExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgorc3RhdGljIGJv
b2wgcHV0U3RyaW5nKERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXks
IGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKCFkYi0+cHV0KGtleSwgZW5jb2RlU3Ry
aW5nKHZhbHVlKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI4MywxMiArMjg4LDEyIEBA
IHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0
YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+CiAgICAgfQogfQogCi1zdGF0aWMgaW50NjRfdCBnZXRO
ZXdPYmplY3RTdG9yZUlkKExldmVsREJEYXRhYmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJZCkK
K3N0YXRpYyBpbnQ2NF90IGdldE5ld09iamVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkKQogewogICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBmcmVlTGlzdFN0YXJ0S2V5ID0gT2JqZWN0U3RvcmVGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIDApOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBmcmVlTGlzdFN0b3BLZXkgPSBPYmpl
Y3RTdG9yZUZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgSU5UNjRfTUFYKTsKIAotICAg
IE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAg
T3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3Io
KTsKICAgICBmb3IgKGl0LT5zZWVrKGZyZWVMaXN0U3RhcnRLZXkpOyBpdC0+aXNWYWxpZCgpICYm
IGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgZnJlZUxpc3RTdG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkp
IHsKICAgICAgICAgY29uc3QgY2hhciogcCA9IGl0LT5rZXkoKS5iZWdpbigpOwogICAgICAgICBj
b25zdCBjaGFyKiBsaW1pdCA9IGl0LT5rZXkoKS5lbmQoKTsKQEAgLTI5Nyw3ICszMDIsNyBAQCBz
dGF0aWMgaW50NjRfdCBnZXROZXdPYmplY3RTdG9yZUlkKExldmVsREJEYXRhYmFzZSogZGIsIGlu
dDY0X3QgZGF0YWJhc2VJZCkKICAgICAgICAgcCA9IE9iamVjdFN0b3JlRnJlZUxpc3RLZXk6OmRl
Y29kZShwLCBsaW1pdCwgJmZyZWVMaXN0S2V5KTsKICAgICAgICAgQVNTRVJUKHApOwogCi0gICAg
ICAgIGJvb2wgb2sgPSBkYi0+cmVtb3ZlKGl0LT5rZXkoKSk7CisgICAgICAgIGJvb2wgb2sgPSB0
cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2ss
IG9rKTsKIAogICAgICAgICByZXR1cm4gZnJlZUxpc3RLZXkub2JqZWN0U3RvcmVJZCgpOwpAQCAt
MzA1LDEzICszMTAsMTMgQEAgc3RhdGljIGludDY0X3QgZ2V0TmV3T2JqZWN0U3RvcmVJZChMZXZl
bERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQpCiAKICAgICBpbnQ2NF90IG1heE9i
amVjdFN0b3JlSWQgPSAtMTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWF4T2JqZWN0U3RvcmVJ
ZEtleSA9IERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1l
dGFEYXRhS2V5OjprTWF4T2JqZWN0U3RvcmVJZCk7Ci0gICAgaWYgKCFnZXRJbnQoZGIsIG1heE9i
amVjdFN0b3JlSWRLZXksIG1heE9iamVjdFN0b3JlSWQpKQorICAgIGlmICghZ2V0SW50KHRyYW5z
YWN0aW9uLCBtYXhPYmplY3RTdG9yZUlkS2V5LCBtYXhPYmplY3RTdG9yZUlkKSkKICAgICAgICAg
bWF4T2JqZWN0U3RvcmVJZCA9IDA7CiAKICAgICBBU1NFUlQobWF4T2JqZWN0U3RvcmVJZCA+PSAw
KTsKIAogICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1heE9iamVjdFN0b3JlSWQgKyAxOwot
ICAgIGJvb2wgb2sgPSBwdXRJbnQoZGIsIG1heE9iamVjdFN0b3JlSWRLZXksIG9iamVjdFN0b3Jl
SWQpOworICAgIGJvb2wgb2sgPSBwdXRJbnQodHJhbnNhY3Rpb24sIG1heE9iamVjdFN0b3JlSWRL
ZXksIG9iamVjdFN0b3JlSWQpOwogICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKIAogICAgIHJl
dHVybiBvYmplY3RTdG9yZUlkOwpAQCAtMzE5LDcgKzMyNCw4IEBAIHN0YXRpYyBpbnQ2NF90IGdl
dE5ld09iamVjdFN0b3JlSWQoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRfdCBkYXRhYmFzZUlk
KQogCiBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0
X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgs
IGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKQogewot
ICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IGdldE5ld09iamVjdFN0b3JlSWQobV9kYi5nZXQo
KSwgZGF0YWJhc2VJZCk7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBp
bnQ2NF90IG9iamVjdFN0b3JlSWQgPSBnZXROZXdPYmplY3RTdG9yZUlkKG1fY3VycmVudFRyYW5z
YWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkKTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBuYW1l
S2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIDApOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlQYXRoS2V5ID0gT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDEpOwpAQCAt
MzI5LDQzICszMzUsNDMgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmpl
Y3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYKICAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gbWF4SW5kZXhJZEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCA1KTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbmFt
ZXNLZXkgPSBPYmplY3RTdG9yZU5hbWVzS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgbmFtZSk7CiAK
LSAgICBib29sIG9rID0gcHV0U3RyaW5nKG1fZGIuZ2V0KCksIG5hbWVLZXksIG5hbWUpOworICAg
IGJvb2wgb2sgPSBwdXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG5hbWVLZXks
IG5hbWUpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRl
eGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sg
PSBwdXRTdHJpbmcobV9kYi5nZXQoKSwga2V5UGF0aEtleSwga2V5UGF0aCk7CisgICAgb2sgPSBw
dXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGtleVBhdGhLZXksIGtleVBhdGgp
OwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERC
IGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJ
bnQobV9kYi5nZXQoKSwgYXV0b0luY3JlbWVudEtleSwgYXV0b0luY3JlbWVudCk7CisgICAgb2sg
PSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGF1dG9JbmNyZW1lbnRLZXksIGF1
dG9JbmNyZW1lbnQpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5h
bCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgb2sgPSBwdXRJbnQobV9kYi5nZXQoKSwgZXZpY3RhYmxlS2V5LCBmYWxzZSk7CisgICAgb2sg
PSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGV2aWN0YWJsZUtleSwgZmFsc2Up
OwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERC
IGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJ
bnQobV9kYi5nZXQoKSwgbGFzdFZlcnNpb25LZXksIDEpOworICAgIG9rID0gcHV0SW50KG1fY3Vy
cmVudFRyYW5zYWN0aW9uLmdldCgpLCBsYXN0VmVyc2lvbktleSwgMSk7CiAgICAgaWYgKCFvaykg
ewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1dEludChtX2RiLmdldCgpLCBt
YXhJbmRleElkS2V5LCBrTWluaW11bUluZGV4SWQpOworICAgIG9rID0gcHV0SW50KG1fY3VycmVu
dFRyYW5zYWN0aW9uLmdldCgpLCBtYXhJbmRleElkS2V5LCBrTWluaW11bUluZGV4SWQpOwogICAg
IGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9y
LiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9k
Yi5nZXQoKSwgbmFtZXNLZXksIG9iamVjdFN0b3JlSWQpOworICAgIG9rID0gcHV0SW50KG1fY3Vy
cmVudFRyYW5zYWN0aW9uLmdldCgpLCBuYW1lc0tleSwgb2JqZWN0U3RvcmVJZCk7CiAgICAgaWYg
KCFvaykgewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM3NiwxMiArMzgyLDExIEBAIGJvb2wgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBj
b25zdCBTdHJpbmcmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGRlbGV0ZVJh
bmdlKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgYmVnaW4sIGNvbnN0
IFZlY3RvcjxjaGFyPiYgZW5kKQorc3RhdGljIGJvb2wgZGVsZXRlUmFuZ2UoTGV2ZWxEQlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBiZWdpbiwgY29uc3QgVmVj
dG9yPGNoYXI+JiBlbmQpCiB7Ci0gICAgLy8gRklYTUU6IExldmVsREIgbWF5IGJlIGFibGUgdG8g
cHJvdmlkZSBhIGJ1bGsgb3BlcmF0aW9uIHRoYXQgd2UgY2FuIGRvIGZpcnN0LgotICAgIE93blB0
cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgT3duUHRy
PExldmVsREJJdGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAg
ICBmb3IgKGl0LT5zZWVrKGJlZ2luKTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+
a2V5KCksIGVuZCkgPCAwOyBpdC0+bmV4dCgpKSB7Ci0gICAgICAgIGlmICghZGItPnJlbW92ZShp
dC0+a2V5KCkpKQorICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLT5yZW1vdmUoaXQtPmtleSgpKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTM5MCwxOCArMzk1LDIwIEBA
IHN0YXRpYyBib29sIGRlbGV0ZVJhbmdlKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3Rv
cjxjaGFyPiYgYmVnaW4sIGNvbnN0IFZlCiAKIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpCiB7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKwogICAgIFN0cmluZyBv
YmplY3RTdG9yZU5hbWU7Ci0gICAgZ2V0U3RyaW5nKG1fZGIuZ2V0KCksIE9iamVjdFN0b3JlTWV0
YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgb2JqZWN0U3Rv
cmVOYW1lKTsKKyAgICBnZXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIE9iamVj
dFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwg
b2JqZWN0U3RvcmVOYW1lKTsKIAotICAgIGlmICghZGVsZXRlUmFuZ2UobV9kYi5nZXQoKSwgT2Jq
ZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDAp
LCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgNikpKQorICAgIGlmICghZGVsZXRlUmFuZ2UobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCks
IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCAwKSwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIDYpKSkKICAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgogCi0g
ICAgcHV0U3RyaW5nKG1fZGIuZ2V0KCksIE9iamVjdFN0b3JlRnJlZUxpc3RLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSwgIiIpOwotICAgIG1fZGItPnJlbW92ZShPYmplY3RT
dG9yZU5hbWVzS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVOYW1lKSk7CisgICAg
cHV0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBPYmplY3RTdG9yZUZyZWVMaXN0
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCksICIiKTsKKyAgICBtX2N1cnJl
bnRUcmFuc2FjdGlvbi0+cmVtb3ZlKE9iamVjdFN0b3JlTmFtZXNLZXk6OmVuY29kZShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZU5hbWUpKTsKIAotICAgIGlmICghZGVsZXRlUmFuZ2UobV9kYi5nZXQo
KSwgSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDAp
LCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgSU5U
NjRfTUFYKSkpCisgICAgaWYgKCFkZWxldGVSYW5nZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQo
KSwgSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDAp
LCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgSU5U
NjRfTUFYKSkpCiAgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFJlcG9ydCBlcnJvci4KLSAgICBp
ZiAoIWRlbGV0ZVJhbmdlKG1fZGIuZ2V0KCksIEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAwKSwgSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIElOVDY0X01BWCwgMCkpKQorICAgIGlmICghZGVsZXRl
UmFuZ2UobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIEluZGV4TWV0YURhdGFLZXk6OmVuY29k
ZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAwKSwgSW5kZXhNZXRhRGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIElOVDY0X01BWCwgMCkpKQogICAgICAgICBy
ZXR1cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3IuCiAKICAgICBjbGVhck9iamVjdFN0b3JlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOwpAQCAtNDEyLDcgKzQxOSw4IEBAIFN0cmluZyBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3QKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9IE9iamVjdFN0
b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CiAgICAg
VmVjdG9yPGNoYXI+IGRhdGE7CiAKLSAgICBpZiAoIW1fZGItPmdldChsZXZlbGRiS2V5LCBkYXRh
KSkKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIGlmICghbV9jdXJyZW50
VHJhbnNhY3Rpb24tPmdldChsZXZlbGRiS2V5LCBkYXRhKSkKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwogCiAgICAgaW50NjRfdCB2ZXJzaW9uOwpAQCAtNDQ1LDE4ICs0NTMsMTggQEAgcHJpdmF0
ZToKIH07CiB9CiAKLXN0YXRpYyBpbnQ2NF90IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQkRh
dGFiYXNlKiBkYiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCitz
dGF0aWMgaW50NjRfdCBnZXROZXdWZXJzaW9uTnVtYmVyKExldmVsREJUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewog
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsYXN0VmVyc2lvbktleSA9IE9iamVjdFN0b3JlTWV0YURh
dGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCA0KTsKIAogICAgIGludDY0
X3QgbGFzdFZlcnNpb24gPSAtMTsKLSAgICBpZiAoIWdldEludChkYiwgbGFzdFZlcnNpb25LZXks
IGxhc3RWZXJzaW9uKSkKKyAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbiwgbGFzdFZlcnNpb25L
ZXksIGxhc3RWZXJzaW9uKSkKICAgICAgICAgbGFzdFZlcnNpb24gPSAwOwogCiAgICAgQVNTRVJU
KGxhc3RWZXJzaW9uID49IDApOwogCiAgICAgaW50NjRfdCB2ZXJzaW9uID0gbGFzdFZlcnNpb24g
KyAxOwotICAgIGJvb2wgb2sgPSBwdXRJbnQoZGIsIGxhc3RWZXJzaW9uS2V5LCB2ZXJzaW9uKTsK
KyAgICBib29sIG9rID0gcHV0SW50KHRyYW5zYWN0aW9uLCBsYXN0VmVyc2lvbktleSwgdmVyc2lv
bik7CiAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOwogCiAgICAgQVNTRVJUKHZlcnNpb24gPiBs
YXN0VmVyc2lvbik7IC8vIEZJWE1FOiBUaGluayBhYm91dCBob3cgd2Ugd2FudCB0byBoYW5kbGUg
dGhlIG92ZXJmbG93IHNjZW5hcmlvLgpAQCAtNDY2LDE4ICs0NzQsMTkgQEAgc3RhdGljIGludDY0
X3QgZ2V0TmV3VmVyc2lvbk51bWJlcihMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDYKIAogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRPYmplY3RTdG9y
ZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
ZmllciogcmVjb3JkSWRlbnRpZmllcikKIHsKLSAgICBpbnQ2NF90IHZlcnNpb24gPSBnZXROZXdW
ZXJzaW9uTnVtYmVyKG1fZGIuZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOworICAg
IEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgaW50NjRfdCB2ZXJzaW9uID0gZ2V0
TmV3VmVyc2lvbk51bWJlcihtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG9iamVjdFN0b3JlZGF0YUtl
eSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGtleSk7CiAKICAgICBWZWN0b3I8Y2hhcj4gdjsKICAgICB2LmFwcGVuZChlbmNvZGVWYXJJbnQo
dmVyc2lvbikpOwogICAgIHYuYXBwZW5kKGVuY29kZVN0cmluZyh2YWx1ZSkpOwogCi0gICAgaWYg
KCFtX2RiLT5wdXQob2JqZWN0U3RvcmVkYXRhS2V5LCB2KSkKKyAgICBpZiAoIW1fY3VycmVudFRy
YW5zYWN0aW9uLT5wdXQob2JqZWN0U3RvcmVkYXRhS2V5LCB2KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50
cnlLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwotICAgIGlmICgh
bV9kYi0+cHV0KGV4aXN0c0VudHJ5S2V5LCBlbmNvZGVJbnQodmVyc2lvbikpKQorICAgIGlmICgh
bV9jdXJyZW50VHJhbnNhY3Rpb24tPnB1dChleGlzdHNFbnRyeUtleSwgZW5jb2RlSW50KHZlcnNp
b24pKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTGV2ZWxEQlJlY29yZElkZW50aWZp
ZXIqIGxldmVsREJSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8TGV2ZWxEQlJlY29yZElk
ZW50aWZpZXIqPihyZWNvcmRJZGVudGlmaWVyKTsKQEAgLTQ4OCwxMCArNDk3LDExIEBAIGJvb2wg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iCiAKIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y2xlYXJP
YmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsK
KyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBzdGFydEtleSA9IEtleVByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKS5lbmNv
ZGUoKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IEtleVByZWZpeChkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkICsgMSwgMCkuZW5jb2RlKCk7CiAKLSAgICBkZWxldGVSYW5nZSht
X2RiLmdldCgpLCBzdGFydEtleSwgc3RvcEtleSk7CisgICAgZGVsZXRlUmFuZ2UobV9jdXJyZW50
VHJhbnNhY3Rpb24uZ2V0KCksIHN0YXJ0S2V5LCBzdG9wS2V5KTsKIH0KIAogUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKQpAQCAtNTAxLDE3ICs1
MTEsMTkgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRl
bnRpZmllcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZToKIAogdm9pZCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNv
cmRJZGVudGlmaWVyKQogeworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAg
Y29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJZGVudGlmaWVyID0g
c3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihyZWNvcmRJZGVudGlm
aWVyKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5Ojpl
bmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXIt
PnByaW1hcnlLZXkoKSk7Ci0gICAgbV9kYi0+cmVtb3ZlKGtleSk7CisgICAgbV9jdXJyZW50VHJh
bnNhY3Rpb24tPnJlbW92ZShrZXkpOwogfQogCiBkb3VibGUgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6bmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpCiB7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKICAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtaW5JREJLZXkoKSk7CiAgICAgY29uc3QgVmVjdG9y
PGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBtYXhJREJLZXkoKSk7CiAKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9y
PiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgT3duUHRyPExldmVsREJJdGVyYXRv
cj4gaXQgPSBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKIAogICAgIGlu
dCBtYXhOdW1lcmljS2V5ID0gMDsKIApAQCAtNTM3LDEwICs1NDksMTEgQEAgZG91YmxlIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6Om5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjQKIAogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9i
amVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBJREJLZXkmIGtleSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElk
ZW50aWZpZXIpCiB7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKICAgICBjb25z
dCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAK
LSAgICBpZiAoIW1fZGItPmdldChsZXZlbGRiS2V5LCBkYXRhKSkKKyAgICBpZiAoIW1fY3VycmVu
dFRyYW5zYWN0aW9uLT5nZXQobGV2ZWxkYktleSwgZGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGludDY0X3QgdmVyc2lvbjsKQEAgLTU1NSwxMCArNTY4LDExIEBAIGJvb2wgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3QKIAogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmb3JFYWNoT2Jq
ZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smIGNhbGxiYWNrKQogeworICAgIEFTU0VSVChtX2N1
cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gT2Jq
ZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWluSURC
S2V5KCkpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gT2JqZWN0U3RvcmVEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWF4SURCS2V5KCkpOwogCi0g
ICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOwor
ICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9jdXJyZW50VHJhbnNhY3Rpb24tPmNy
ZWF0ZUl0ZXJhdG9yKCk7CiAgICAgZm9yIChpdC0+c2VlayhzdGFydEtleSk7IGl0LT5pc1ZhbGlk
KCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsK
ICAgICAgICAgY29uc3QgY2hhciAqcCA9IGl0LT5rZXkoKS5iZWdpbigpOwogICAgICAgICBjb25z
dCBjaGFyICpsaW1pdCA9IGl0LT5rZXkoKS5lbmQoKTsKQEAgLTYyMiwxMiArNjM2LDEyIEBAIHZv
aWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJCiAgICAgfQogfQogCi1zdGF0aWMgaW50NjRfdCBnZXROZXdJ
bmRleElkKExldmVsREJEYXRhYmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKQorc3RhdGljIGludDY0X3QgZ2V0TmV3SW5kZXhJZChMZXZlbERCVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCkKIHsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBJbmRleEZyZWVMaXN0
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCk7CiAgICAgY29uc3QgVmVj
dG9yPGNoYXI+IHN0b3BLZXkgPSBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgSU5UNjRfTUFYKTsKIAotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+
IGl0ID0gZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4g
aXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBmb3IgKGl0LT5zZWVrKHN0
YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkp
IDwgMDsgaXQtPm5leHQoKSkgewogICAgICAgICBjb25zdCBjaGFyKiBwID0gaXQtPmtleSgpLmJl
Z2luKCk7CiAgICAgICAgIGNvbnN0IGNoYXIqIGxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOwpAQCAt
NjM2LDcgKzY1MCw3IEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld0luZGV4SWQoTGV2ZWxEQkRhdGFi
YXNlKiBkYiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iCiAgICAgICAgIHAgPSBJbmRl
eEZyZWVMaXN0S2V5OjpkZWNvZGUocCwgbGltaXQsICZmcmVlTGlzdEtleSk7CiAgICAgICAgIEFT
U0VSVChwKTsKIAotICAgICAgICBib29sIG9rID0gZGItPnJlbW92ZShpdC0+a2V5KCkpOworICAg
ICAgICBib29sIG9rID0gdHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpOwogICAgICAgICBB
U1NFUlRfVU5VU0VEKG9rLCBvayk7CiAKICAgICAgICAgQVNTRVJUKGZyZWVMaXN0S2V5LmluZGV4
SWQoKSA+PSBrTWluaW11bUluZGV4SWQpOwpAQCAtNjQ1LDEzICs2NTksMTMgQEAgc3RhdGljIGlu
dDY0X3QgZ2V0TmV3SW5kZXhJZChMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2IKIAogICAgIGludDY0X3QgbWF4SW5kZXhJZCA9IC0xOwogICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBtYXhJbmRleElkS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDUpOwotICAgIGlmICghZ2V0SW50KGRiLCBt
YXhJbmRleElkS2V5LCBtYXhJbmRleElkKSkKKyAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbiwg
bWF4SW5kZXhJZEtleSwgbWF4SW5kZXhJZCkpCiAgICAgICAgIG1heEluZGV4SWQgPSBrTWluaW11
bUluZGV4SWQ7CiAKICAgICBBU1NFUlQobWF4SW5kZXhJZCA+PSAwKTsKIAogICAgIGludDY0X3Qg
aW5kZXhJZCA9IG1heEluZGV4SWQgKyAxOwotICAgIGJvb2wgb2sgPSBwdXRJbnQoZGIsIG1heElu
ZGV4SWRLZXksIGluZGV4SWQpOworICAgIGJvb2wgb2sgPSBwdXRJbnQodHJhbnNhY3Rpb24sIG1h
eEluZGV4SWRLZXksIGluZGV4SWQpOwogICAgIGlmICghb2spCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtNjYwLDI1ICs2NzQsMjYgQEAgc3RhdGljIGludDY0X3QgZ2V0TmV3SW5kZXhJZChM
ZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2IKIAogYm9v
bCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgsIGJvb2wgaXNVbmlxdWUsIGludDY0X3QmIGluZGV4SWQpCiB7Ci0gICAgaW5kZXhJ
ZCA9IGdldE5ld0luZGV4SWQobV9kYi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7
CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBpbmRleElkID0gZ2V0TmV3
SW5kZXhJZChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCk7CiAKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbmFtZUtleSA9IEluZGV4TWV0YURhdGFL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAwKTsKICAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gdW5pcXVlS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIDEpOwogICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiBrZXlQYXRoS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIGluZGV4SWQsIDIpOwogCi0gICAgYm9vbCBvayA9IHB1dFN0cmluZyhtX2Ri
LmdldCgpLCBuYW1lS2V5LCBuYW1lKTsKKyAgICBib29sIG9rID0gcHV0U3RyaW5nKG1fY3VycmVu
dFRyYW5zYWN0aW9uLmdldCgpLCBuYW1lS2V5LCBuYW1lKTsKICAgICBpZiAoIW9rKSB7CiAgICAg
ICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0SW50KG1fZGIuZ2V0KCksIHVuaXF1ZUtl
eSwgaXNVbmlxdWUpOworICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCB1bmlxdWVLZXksIGlzVW5pcXVlKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJP
UigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIG9rID0gcHV0U3RyaW5nKG1fZGIuZ2V0KCksIGtleVBhdGhLZXksIGtleVBh
dGgpOworICAgIG9rID0gcHV0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBrZXlQ
YXRoS2V5LCBrZXlQYXRoKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50
ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjk4
LDE5ICs3MTMsMjAgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFG
b3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG8KICAgICBBU1NFUlQoaW5kZXhJ
ZCA+PSBrTWluaW11bUluZGV4SWQpOwogICAgIGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVy
KiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PGNvbnN0IExldmVsREJSZWNv
cmRJZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmllcik7CiAKLSAgICBjb25zdCBpbnQ2NF90IGds
b2JhbFNlcXVlbmNlTnVtYmVyID0gZ2V0TmV3VmVyc2lvbk51bWJlcihtX2RiLmdldCgpLCBkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24p
OworICAgIGNvbnN0IGludDY0X3QgZ2xvYmFsU2VxdWVuY2VOdW1iZXIgPSBnZXROZXdWZXJzaW9u
TnVtYmVyKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhEYXRhS2V5ID0gSW5kZXhEYXRhS2V5
OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5LCBnbG9iYWxT
ZXF1ZW5jZU51bWJlcik7CiAKICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKICAgICBkYXRhLmFwcGVu
ZChlbmNvZGVWYXJJbnQobGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnZlcnNpb24oKSkpOwogICAg
IGRhdGEuYXBwZW5kKGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOwogCi0g
ICAgcmV0dXJuIG1fZGItPnB1dChpbmRleERhdGFLZXksIGRhdGEpOworICAgIHJldHVybiBtX2N1
cnJlbnRUcmFuc2FjdGlvbi0+cHV0KGluZGV4RGF0YUtleSwgZGF0YSk7CiB9CiAKLXN0YXRpYyBi
b29sIGZpbmRHcmVhdGVzdEtleUxlc3NUaGFuKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZl
Y3RvcjxjaGFyPiYgdGFyZ2V0LCBWZWN0b3I8Y2hhcj4mIGZvdW5kS2V5KQorc3RhdGljIGJvb2wg
ZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW4oTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
Y29uc3QgVmVjdG9yPGNoYXI+JiB0YXJnZXQsIFZlY3RvcjxjaGFyPiYgZm91bmRLZXkpCiB7Ci0g
ICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBkYi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAg
ICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRv
cigpOwogICAgIGl0LT5zZWVrKHRhcmdldCk7CiAKICAgICBpZiAoIWl0LT5pc1ZhbGlkKCkpIHsK
QEAgLTc0NSwxMiArNzYxLDEyIEBAIFN0cmluZyBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRP
YmplY3RWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqCiAgICAgcmV0dXJu
IGdldE9iamVjdFN0b3JlUmVjb3JkKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsICpwcmltYXJ5
S2V5KTsKIH0KIAotc3RhdGljIGJvb2wgdmVyc2lvbkV4aXN0cyhMZXZlbERCRGF0YWJhc2UqIGRi
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCB2ZXJz
aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRQcmltYXJ5S2V5KQorc3RhdGljIGJvb2wg
dmVyc2lvbkV4aXN0cyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCB2ZXJzaW9uLCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIGVuY29kZWRQcmltYXJ5S2V5KQogewogICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBrZXkgPSBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGVuY29kZWRQcmltYXJ5S2V5KTsKICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKIAotICAgIGlmICgh
ZGItPmdldChrZXksIGRhdGEpKQorICAgIGlmICghdHJhbnNhY3Rpb24tPmdldChrZXksIGRhdGEp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gZGVjb2RlSW50KGRhdGEuYmVn
aW4oKSwgZGF0YS5lbmQoKSkgPT0gdmVyc2lvbjsKQEAgLTc1OCw4ICs3NzQsOSBAQCBzdGF0aWMg
Ym9vbCB2ZXJzaW9uRXhpc3RzKExldmVsREJEYXRhYmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplYwogCiBQYXNzUmVmUHRyPElEQktleT4gSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQogeworICAg
IEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGxl
dmVsZGJLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkLCBrZXksIDApOwotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9k
Yi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1f
Y3VycmVudFRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwogICAgIGl0LT5zZWVrKGxldmVs
ZGJLZXkpOwogCiAgICAgZm9yICg7OykgewpAQCAtNzc1LDkgKzc5Miw5IEBAIFBhc3NSZWZQdHI8
SURCS2V5PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50
NjRfdCBkYXRhYmFzCiAgICAgICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkUHJpbWFyeUtleTsKICAg
ICAgICAgZW5jb2RlZFByaW1hcnlLZXkuYXBwZW5kKHAsIGl0LT52YWx1ZSgpLmVuZCgpIC0gcCk7
CiAKLSAgICAgICAgaWYgKCF2ZXJzaW9uRXhpc3RzKG1fZGIuZ2V0KCksIGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIHZlcnNpb24sIGVuY29kZWRQcmltYXJ5S2V5KSkgeworICAgICAgICBpZiAo
IXZlcnNpb25FeGlzdHMobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIHZlcnNpb24sIGVuY29kZWRQcmltYXJ5S2V5KSkgewogICAgICAgICAgICAg
Ly8gRGVsZXRlIHN0YWxlIGluZGV4IGRhdGEgZW50cnkgYW5kIGNvbnRpbnVlLgotICAgICAgICAg
ICAgbV9kYi0+cmVtb3ZlKGl0LT5rZXkoKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRUcmFuc2Fj
dGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSk7CiAgICAgICAgICAgICBpdC0+bmV4dCgpOwogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTc5MCw4ICs4MDcsOSBAQCBQYXNzUmVmUHRy
PElEQktleT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KGlu
dDY0X3QgZGF0YWJhcwogCiBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0lu
SW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCiB7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5z
YWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxEQktleSA9IEluZGV4RGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwgMCk7Ci0g
ICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOwor
ICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9jdXJyZW50VHJhbnNhY3Rpb24tPmNy
ZWF0ZUl0ZXJhdG9yKCk7CiAKICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAKQEAgLTgxOCw4ICs4
MzYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBmaXJzdFNlZWsoKTsKIAogcHJvdGVjdGVkOgotICAg
IEN1cnNvckltcGxDb21tb24oTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+
JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBoaWdoS2V5LCBib29s
IGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCi0gICAgICAgIDogbV9kYihkYikKKyAgICBDdXJzb3JJ
bXBsQ29tbW9uKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3Rvcjxj
aGFyPiYgbG93S2V5LCBib29sIGxvd09wZW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgaGlnaEtleSwg
Ym9vbCBoaWdoT3BlbiwgYm9vbCBmb3J3YXJkKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJh
bnNhY3Rpb24pCiAgICAgICAgICwgbV9sb3dLZXkobG93S2V5KQogICAgICAgICAsIG1fbG93T3Bl
bihsb3dPcGVuKQogICAgICAgICAsIG1faGlnaEtleShoaWdoS2V5KQpAQCAtODI5LDcgKzg0Nyw3
IEBAIHByb3RlY3RlZDoKICAgICB9CiAgICAgdmlydHVhbCB+Q3Vyc29ySW1wbENvbW1vbigpIHt9
CiAKLSAgICBMZXZlbERCRGF0YWJhc2UqIG1fZGI7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBt
X3RyYW5zYWN0aW9uOwogICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IG1faXRlcmF0b3I7CiAg
ICAgVmVjdG9yPGNoYXI+IG1fbG93S2V5OwogICAgIGJvb2wgbV9sb3dPcGVuOwpAQCAtODQxLDcg
Kzg1OSw3IEBAIHByb3RlY3RlZDoKIAogYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpmaXJzdFNlZWso
KQogewotICAgIG1faXRlcmF0b3IgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIG1faXRl
cmF0b3IgPSBtX3RyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwogCiAgICAgaWYgKG1fZm9y
d2FyZCkKICAgICAgICAgbV9pdGVyYXRvci0+c2VlayhtX2xvd0tleSk7CkBAIC05MDIsNyArOTIw
LDcgQEAgYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktl
eSoga2V5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIFZlY3RvcjxjaGFy
PiB0cmFzaDsKLSAgICAgICAgaWYgKCFtX2RiLT5nZXQobV9pdGVyYXRvci0+a2V5KCksIHRyYXNo
KSkKKyAgICAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5nZXQobV9pdGVyYXRvci0+a2V5KCksIHRy
YXNoKSkKICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAobV9mb3J3YXJkICYm
IG1faGlnaE9wZW4gJiYgY29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9oaWdo
S2V5KSA+PSAwKSAvLyBoaWdoIGtleSBub3QgaW5jbHVkZWQgaW4gcmFuZ2UKQEAgLTkzNyw5ICs5
NTUsOSBAQCBib29sIEN1cnNvckltcGxDb21tb246OmNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURC
S2V5KiBrZXkpCiAKIGNsYXNzIE9iamVjdFN0b3JlQ3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJ
bXBsQ29tbW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUN1
cnNvckltcGw+IGNyZWF0ZShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4m
IGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJvb2wg
aGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9y
ZUN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25z
dCBWZWN0b3I8Y2hhcj4mIGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8Y2hhcj4m
IGhpZ2hLZXksIGJvb2wgaGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKGRiLCBsb3dLZXksIGxvd09w
ZW4sIGhpZ2hLZXksIGhpZ2hPcGVuLCBmb3J3YXJkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKHRyYW5zYWN0aW9uLCBsb3dLZXksIGxvd09wZW4s
IGhpZ2hLZXksIGhpZ2hPcGVuLCBmb3J3YXJkKSk7CiAgICAgfQogCiAgICAgLy8gQ3Vyc29ySW1w
bENvbW1vbgpAQCAtOTQ5LDggKzk2Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgbG9h
ZEN1cnJlbnRSb3coKTsKIAogcHJpdmF0ZToKLSAgICBPYmplY3RTdG9yZUN1cnNvckltcGwoTGV2
ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3Bl
biwgY29uc3QgVmVjdG9yPGNoYXI+JiBoaWdoS2V5LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndh
cmQpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbihkYiwgbG93S2V5LCBsb3dPcGVuLCBoaWdo
S2V5LCBoaWdoT3BlbiwgZm9yd2FyZCkKKyAgICBPYmplY3RTdG9yZUN1cnNvckltcGwoTGV2ZWxE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBsb3dLZXksIGJv
b2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBoaWdoS2V5LCBib29sIGhpZ2hPcGVuLCBi
b29sIGZvcndhcmQpCisgICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbih0cmFuc2FjdGlvbiwgbG93
S2V5LCBsb3dPcGVuLCBoaWdoS2V5LCBoaWdoT3BlbiwgZm9yd2FyZCkKICAgICB7CiAgICAgfQog
CkBAIC05ODQsOSArMTAwMiw5IEBAIGJvb2wgT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3Vy
cmVudFJvdygpCiAKIGNsYXNzIEluZGV4S2V5Q3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBs
Q29tbW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleEtleUN1cnNvcklt
cGw+IGNyZWF0ZShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tl
eSwgYm9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9w
ZW4sIGJvb2wgZm9yd2FyZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleEtleUN1cnNvcklt
cGw+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8
Y2hhcj4mIGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGhpZ2hLZXks
IGJvb2wgaGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSW5kZXhLZXlDdXJzb3JJbXBsKGRiLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXks
IGhpZ2hPcGVuLCBmb3J3YXJkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhL
ZXlDdXJzb3JJbXBsKHRyYW5zYWN0aW9uLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXksIGhpZ2hP
cGVuLCBmb3J3YXJkKSk7CiAgICAgfQogCiAgICAgLy8gQ3Vyc29ySW1wbENvbW1vbgpAQCAtOTk3
LDggKzEwMTUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50Um93KCk7
CiAKIHByaXZhdGU6Ci0gICAgSW5kZXhLZXlDdXJzb3JJbXBsKExldmVsREJEYXRhYmFzZSogZGIs
IGNvbnN0IFZlY3RvcjxjaGFyPiYgbG93S2V5LCBib29sIGxvd09wZW4sIGNvbnN0IFZlY3Rvcjxj
aGFyPiYgaGlnaEtleSwgYm9vbCBoaWdoT3BlbiwgYm9vbCBmb3J3YXJkKQotICAgICAgICA6IEN1
cnNvckltcGxDb21tb24oZGIsIGxvd0tleSwgbG93T3BlbiwgaGlnaEtleSwgaGlnaE9wZW4sIGZv
cndhcmQpCisgICAgSW5kZXhLZXlDdXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgbG93S2V5LCBib29sIGxvd09wZW4sIGNvbnN0IFZl
Y3RvcjxjaGFyPiYgaGlnaEtleSwgYm9vbCBoaWdoT3BlbiwgYm9vbCBmb3J3YXJkKQorICAgICAg
ICA6IEN1cnNvckltcGxDb21tb24odHJhbnNhY3Rpb24sIGxvd0tleSwgbG93T3BlbiwgaGlnaEtl
eSwgaGlnaE9wZW4sIGZvcndhcmQpCiAgICAgewogICAgIH0KIApAQCAtMTAyOCw3ICsxMDQ2LDcg
QEAgYm9vbCBJbmRleEtleUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICBWZWN0b3I8
Y2hhcj4gcHJpbWFyeUxldmVsREJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShpbmRl
eERhdGFLZXkuZGF0YWJhc2VJZCgpLCBpbmRleERhdGFLZXkub2JqZWN0U3RvcmVJZCgpLCAqbV9w
cmltYXJ5S2V5KTsKIAogICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgaWYgKCFtX2RiLT5n
ZXQocHJpbWFyeUxldmVsREJLZXksIHJlc3VsdCkpCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5n
ZXQocHJpbWFyeUxldmVsREJLZXksIHJlc3VsdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhVmVyc2lvbjsKQEAgLTEwMzgsNyArMTA1Niw3IEBA
IGJvb2wgSW5kZXhLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmIChvYmplY3RTdG9yZURhdGFWZXJzaW9uICE9IGluZGV4RGF0YVZl
cnNpb24pIHsgLy8gRklYTUU6IFRoaXMgaXMgcHJvYmFibHkgbm90IHZlcnkgd2VsbCBjb3ZlcmVk
IGJ5IHRoZSBsYXlvdXQgdGVzdHMuCi0gICAgICAgIG1fZGItPnJlbW92ZShtX2l0ZXJhdG9yLT5r
ZXkoKSk7CisgICAgICAgIG1fdHJhbnNhY3Rpb24tPnJlbW92ZShtX2l0ZXJhdG9yLT5rZXkoKSk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTEwNDcsOSArMTA2NSw5IEBAIGJv
b2wgSW5kZXhLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAKIGNsYXNzIEluZGV4Q3Vy
c29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJbmRleEN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCRGF0YWJhc2UqIGRiLCBj
b25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8Y2hh
cj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJbmRleEN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhDdXJzb3JJbXBsKGRiLCBsb3dLZXks
IGxvd09wZW4sIGhpZ2hLZXksIGhpZ2hPcGVuLCBmb3J3YXJkKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSW5kZXhDdXJzb3JJbXBsKHRyYW5zYWN0aW9uLCBsb3dLZXksIGxvd09wZW4s
IGhpZ2hLZXksIGhpZ2hPcGVuLCBmb3J3YXJkKSk7CiAgICAgfQogCiAgICAgLy8gQ3Vyc29ySW1w
bENvbW1vbgpAQCAtMTA2MCw4ICsxMDc4LDggQEAgcHVibGljOgogICAgIGJvb2wgbG9hZEN1cnJl
bnRSb3coKTsKIAogcHJpdmF0ZToKLSAgICBJbmRleEN1cnNvckltcGwoTGV2ZWxEQkRhdGFiYXNl
KiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVj
dG9yPGNoYXI+JiBoaWdoS2V5LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCi0gICAgICAg
IDogQ3Vyc29ySW1wbENvbW1vbihkYiwgbG93S2V5LCBsb3dPcGVuLCBoaWdoS2V5LCBoaWdoT3Bl
biwgZm9yd2FyZCkKKyAgICBJbmRleEN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3Qg
VmVjdG9yPGNoYXI+JiBoaWdoS2V5LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCisgICAg
ICAgIDogQ3Vyc29ySW1wbENvbW1vbih0cmFuc2FjdGlvbiwgbG93S2V5LCBsb3dPcGVuLCBoaWdo
S2V5LCBoaWdoT3BlbiwgZm9yd2FyZCkKICAgICB7CiAgICAgfQogCkBAIC0xMDk2LDcgKzExMTQs
NyBAQCBib29sIEluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgIG1fcHJpbWFy
eUxldmVsREJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShpbmRleERhdGFLZXkuZGF0
YWJhc2VJZCgpLCBpbmRleERhdGFLZXkub2JqZWN0U3RvcmVJZCgpLCAqbV9wcmltYXJ5S2V5KTsK
IAogICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgaWYgKCFtX2RiLT5nZXQobV9wcmltYXJ5
TGV2ZWxEQktleSwgcmVzdWx0KSkKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmdldChtX3ByaW1h
cnlMZXZlbERCS2V5LCByZXN1bHQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpbnQ2
NF90IG9iamVjdFN0b3JlRGF0YVZlcnNpb247CkBAIC0xMTA2LDcgKzExMjQsNyBAQCBib29sIElu
ZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAob2JqZWN0U3RvcmVEYXRhVmVyc2lvbiAhPSBpbmRleERhdGFWZXJzaW9uKSB7Ci0g
ICAgICAgIG1fZGItPnJlbW92ZShtX2l0ZXJhdG9yLT5rZXkoKSk7CisgICAgICAgIG1fdHJhbnNh
Y3Rpb24tPnJlbW92ZShtX2l0ZXJhdG9yLT5rZXkoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKQEAgLTExMTYsOSArMTEzNCw5IEBAIGJvb2wgSW5kZXhDdXJzb3JJbXBsOjpsb2Fk
Q3VycmVudFJvdygpCiAKIH0KIAotc3RhdGljIGJvb2wgZmluZExhc3RJbmRleEtleUVxdWFsVG8o
TGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiB0YXJnZXQsIFZlY3Rvcjxj
aGFyPiYgZm91bmRLZXkpCitzdGF0aWMgYm9vbCBmaW5kTGFzdEluZGV4S2V5RXF1YWxUbyhMZXZl
bERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIHRhcmdldCwg
VmVjdG9yPGNoYXI+JiBmb3VuZEtleSkKIHsKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBp
dCA9IGRiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0
ID0gdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgaXQtPnNlZWsodGFyZ2V0KTsK
IAogICAgIGlmICghaXQtPmlzVmFsaWQoKSkKQEAgLTExMzUsNiArMTE1Myw3IEBAIHN0YXRpYyBi
b29sIGZpbmRMYXN0SW5kZXhLZXlFcXVhbFRvKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZl
Y3RvcjxjaGFyPiYgdGFyCiAKIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElE
QkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJ
REJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CisgICAgQVNTRVJUKG1fY3VycmVudFRy
YW5zYWN0aW9uKTsKICAgICBib29sIGxvd2VyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+bG93ZXIo
KTsKICAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+dXBwZXIoKTsKICAgICBi
b29sIGZvcndhcmQgPSAoZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUg
fHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCk7CkBAIC0xMTU1LDcgKzExNzQsNyBAQCBQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpvcGVuT2JqZWN0U3RvcmVDdXJzbwogICAgICAgICB1cHBlck9wZW4gPSB0cnVlOyAvLyBOb3Qg
aW5jbHVkZWQuCiAKICAgICAgICAgaWYgKCFmb3J3YXJkKSB7IC8vIFdlIG5lZWQgYSBrZXkgdGhh
dCBleGlzdHMuCi0gICAgICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuKG1fZGIu
Z2V0KCksIHN0b3BLZXksIHN0b3BLZXkpKQorICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RL
ZXlMZXNzVGhhbihtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgc3RvcEtleSwgc3RvcEtleSkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB1cHBlck9wZW4gPSBmYWxz
ZTsKICAgICAgICAgfQpAQCAtMTE2NCw3ICsxMTgzLDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vy
c28KICAgICAgICAgdXBwZXJPcGVuID0gcmFuZ2UtPnVwcGVyT3BlbigpOwogICAgIH0KIAotICAg
IFJlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVjdFN0b3JlQ3Vyc29y
SW1wbDo6Y3JlYXRlKG1fZGIuZ2V0KCksIHN0YXJ0S2V5LCBsb3dlck9wZW4sIHN0b3BLZXksIHVw
cGVyT3BlbiwgZm9yd2FyZCk7CisgICAgUmVmUHRyPE9iamVjdFN0b3JlQ3Vyc29ySW1wbD4gY3Vy
c29yID0gT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJyZW50VHJhbnNhY3Rpb24u
Z2V0KCksIHN0YXJ0S2V5LCBsb3dlck9wZW4sIHN0b3BLZXksIHVwcGVyT3BlbiwgZm9yd2FyZCk7
CiAgICAgaWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAt
MTE3Myw2ICsxMTkyLDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc28KIAogUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4
S2V5Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rp
b24gZGlyZWN0aW9uKQogeworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAg
Ym9vbCBsb3dlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPmxvd2VyKCk7CiAgICAgYm9vbCB1cHBl
ckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPnVwcGVyKCk7CiAgICAgYm9vbCBmb3J3YXJkID0gKGRp
cmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJ
REJDdXJzb3I6Ok5FWFQpOwpAQCAtMTE5MywxOCArMTIxMywxOCBAQCBQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlD
dXJzb3IoaQogICAgICAgICB1cHBlck9wZW4gPSBmYWxzZTsgLy8gSW5jbHVkZWQuCiAKICAgICAg
ICAgaWYgKCFmb3J3YXJkKSB7IC8vIFdlIG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCi0gICAgICAg
ICAgICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuKG1fZGIuZ2V0KCksIHN0b3BLZXksIHN0
b3BLZXkpKQorICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbihtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgc3RvcEtleSwgc3RvcEtleSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgICAgICB1cHBlck9wZW4gPSBmYWxzZTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7CiAgICAgICAgIHN0b3BLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqcmFuZ2UtPnVwcGVyKCksIDApOwotICAgICAg
ICBpZiAoIWZpbmRMYXN0SW5kZXhLZXlFcXVhbFRvKG1fZGIuZ2V0KCksIHN0b3BLZXksIHN0b3BL
ZXkpKSAvLyBTZWVrIHRvIHRoZSAqbGFzdCoga2V5IGluIHRoZSBzZXQgb2Ygbm9uLXVuaXF1ZSBr
ZXlzLgorICAgICAgICBpZiAoIWZpbmRMYXN0SW5kZXhLZXlFcXVhbFRvKG1fY3VycmVudFRyYW5z
YWN0aW9uLmdldCgpLCBzdG9wS2V5LCBzdG9wS2V5KSkgLy8gU2VlayB0byB0aGUgKmxhc3QqIGtl
eSBpbiB0aGUgc2V0IG9mIG5vbi11bmlxdWUga2V5cy4KICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICB1cHBlck9wZW4gPSByYW5nZS0+dXBwZXJPcGVuKCk7CiAgICAgfQogCi0gICAgUmVm
UHRyPEluZGV4S2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhLZXlDdXJzb3JJbXBsOjpjcmVh
dGUobV9kYi5nZXQoKSwgc3RhcnRLZXksIGxvd2VyT3Blbiwgc3RvcEtleSwgdXBwZXJPcGVuLCBm
b3J3YXJkKTsKKyAgICBSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEtl
eUN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgc3RhcnRLZXks
IGxvd2VyT3Blbiwgc3RvcEtleSwgdXBwZXJPcGVuLCBmb3J3YXJkKTsKICAgICBpZiAoIWN1cnNv
ci0+Zmlyc3RTZWVrKCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xMjEzLDYgKzEyMzMsNyBA
QCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoaQogCiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6
Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Cisg
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKICAgICBib29sIGxvd2VyQm91bmQgPSBy
YW5nZSAmJiByYW5nZS0+bG93ZXIoKTsKICAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiBy
YW5nZS0+dXBwZXIoKTsKICAgICBib29sIGZvcndhcmQgPSAoZGlyZWN0aW9uID09IElEQkN1cnNv
cjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCk7CkBA
IC0xMjMzLDM3ICsxMjU0LDU3IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+
IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcihpbnQ2CiAgICAgICAgIHVw
cGVyT3BlbiA9IGZhbHNlOyAvLyBJbmNsdWRlZC4KIAogICAgICAgICBpZiAoIWZvcndhcmQpIHsg
Ly8gV2UgbmVlZCBhIGtleSB0aGF0IGV4aXN0cy4KLSAgICAgICAgICAgIGlmICghZmluZEdyZWF0
ZXN0S2V5TGVzc1RoYW4obV9kYi5nZXQoKSwgc3RvcEtleSwgc3RvcEtleSkpCisgICAgICAgICAg
ICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCBzdG9wS2V5LCBzdG9wS2V5KSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
ICAgIHVwcGVyT3BlbiA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAg
c3RvcEtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsICpyYW5nZS0+dXBwZXIoKSwgMCk7Ci0gICAgICAgIGlmICghZmluZExhc3RJbmRl
eEtleUVxdWFsVG8obV9kYi5nZXQoKSwgc3RvcEtleSwgc3RvcEtleSkpIC8vIFNlZWsgdG8gdGhl
ICpsYXN0KiBrZXkgaW4gdGhlIHNldCBvZiBub24tdW5pcXVlIGtleXMuCisgICAgICAgIGlmICgh
ZmluZExhc3RJbmRleEtleUVxdWFsVG8obV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIHN0b3BL
ZXksIHN0b3BLZXkpKSAvLyBTZWVrIHRvIHRoZSAqbGFzdCoga2V5IGluIHRoZSBzZXQgb2Ygbm9u
LXVuaXF1ZSBrZXlzLgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHVwcGVyT3BlbiA9
IHJhbmdlLT51cHBlck9wZW4oKTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5kZXhDdXJzb3JJbXBs
PiBjdXJzb3IgPSBJbmRleEN1cnNvckltcGw6OmNyZWF0ZShtX2RiLmdldCgpLCBzdGFydEtleSwg
bG93ZXJPcGVuLCBzdG9wS2V5LCB1cHBlck9wZW4sIGZvcndhcmQpOworICAgIFJlZlB0cjxJbmRl
eEN1cnNvckltcGw+IGN1cnNvciA9IEluZGV4Q3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRy
YW5zYWN0aW9uLmdldCgpLCBzdGFydEtleSwgbG93ZXJPcGVuLCBzdG9wS2V5LCB1cHBlck9wZW4s
IGZvcndhcmQpOwogICAgIGlmICghY3Vyc29yLT5maXJzdFNlZWsoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKIH0KIAotbmFtZXNwYWNlIHsKLWNs
YXNzIER1bW15VHJhbnNhY3Rpb24gOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luKCkge30KLSAgICB2aXJ0dWFsIHZv
aWQgY29tbWl0KCkge30KLSAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soKSB7fQotfTsKK1Bhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Y3JlYXRlVHJhbnNhY3Rpb24oKQoreworICAgIHJldHVybiBUcmFuc2FjdGlvbjo6Y3JlYXRl
KHRoaXMpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZVRyYW5zYWN0aW9uKCkKK1Bhc3NSZWZQdHI8SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IElEQkxldmVsREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uOjpjcmVhdGUoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3Jl
KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHJhbnNhY3Rpb24oYmFja2luZ1N0b3JlKSk7
Cit9CisKK0lEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbihJ
REJMZXZlbERCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpCisgICAgOiBtX2JhY2tpbmdTdG9y
ZShiYWNraW5nU3RvcmUpCit7Cit9CisKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb246OmJlZ2luKCkKK3sKKyAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlLT5tX2N1cnJl
bnRUcmFuc2FjdGlvbik7CisgICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9u
ID0gTGV2ZWxEQlRyYW5zYWN0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUtPm1fZGIuZ2V0KCkp
OworfQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQo
KQoreworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24pOwor
ICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbi0+Y29tbWl0KCk7CisgICAg
bV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uLmNsZWFyKCk7Cit9CisKK3ZvaWQg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OnJvbGxiYWNrKCkKIHsKLSAgICAv
LyBGSVhNRTogV2UgbmVlZCB0byBpbXBsZW1lbnQgYSB0cmFuc2FjdGlvbiBhYnN0cmFjdGlvbiB0
aGF0IGFsbG93cyBmb3Igcm9sbC1iYWNrcywgYW5kIHdyaXRlIHRlc3RzIGZvciBpdC4KLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IER1bW15VHJhbnNhY3Rpb24oKSk7CisgICAgQVNTRVJUKG1fYmFj
a2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgbV9iYWNraW5nU3RvcmUtPm1f
Y3VycmVudFRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOworICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1
cnJlbnRUcmFuc2FjdGlvbi5jbGVhcigpOwogfQogCiBib29sIElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmJhY2tpbmdTdG9yZUV4aXN0cyhTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGNv
bnN0IFN0cmluZyYgcGF0aEJhc2VBcmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDQ2NDA2MmIuLjIxOWFjNTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCkBAIC0zNiw2ICsz
Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTGV2ZWxEQkNvbXBhcmF0b3I7CiBj
bGFzcyBMZXZlbERCRGF0YWJhc2U7CitjbGFzcyBMZXZlbERCVHJhbnNhY3Rpb247CiAKIGNsYXNz
IElEQkxldmVsREJCYWNraW5nU3RvcmUgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlIHsKIHB1Ymxp
YzoKQEAgLTgzLDYgKzg0LDE5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPElEQkZhY3RvcnlCYWNr
ZW5kSW1wbD4gbV9mYWN0b3J5OwogICAgIE93blB0cjxMZXZlbERCRGF0YWJhc2U+IG1fZGI7CiAg
ICAgT3duUHRyPExldmVsREJDb21wYXJhdG9yPiBtX2NvbXBhcmF0b3I7CisgICAgUmVmUHRyPExl
dmVsREJUcmFuc2FjdGlvbj4gbV9jdXJyZW50VHJhbnNhY3Rpb247CisKKyAgICBjbGFzcyBUcmFu
c2FjdGlvbiA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGUoSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgYmVnaW4oKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGNvbW1pdCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2so
KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFRyYW5zYWN0aW9uKElEQkxldmVsREJCYWNraW5n
U3RvcmUqKTsKKyAgICAgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogbV9iYWNraW5nU3RvcmU7
CisgICAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCmluZGV4IGQ3MzY3
NTguLjE1NmNiODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAtMTA2LDYgKzEwNiw4IEBAIHZvaWQgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6YWJvcnQoKQogICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBib29sIHdhc1J1bm5pbmcgPSBtX3N0YXRlID09IFJ1bm5p
bmc7CisKICAgICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJl
bGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhlCiAgICAgLy8gYWJvcnQgc3RlcHMgYmVsb3cuIFdl
IHRoZXJlZm9yZSB0YWtlIGEgc2VsZiByZWZlcmVuY2UgdG8ga2VlcCBvdXJzZWx2ZXMKICAgICAv
LyBhbGl2ZSB3aGlsZSBleGVjdXRpbmcgdGhpcyBtZXRob2QuCkBAIC0xMTYsNyArMTE4LDggQEAg
dm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCgpCiAgICAgbV90YXNrRXZlbnRU
aW1lci5zdG9wKCk7CiAKICAgICBjbG9zZU9wZW5DdXJzb3JzKCk7Ci0gICAgbV90cmFuc2FjdGlv
bi0+cm9sbGJhY2soKTsKKyAgICBpZiAod2FzUnVubmluZykKKyAgICAgICAgbV90cmFuc2FjdGlv
bi0+cm9sbGJhY2soKTsKIAogICAgIC8vIFJ1biB0aGUgYWJvcnQgdGFza3MsIGlmIGFueS4KICAg
ICB3aGlsZSAoIW1fYWJvcnRUYXNrUXVldWUuaXNFbXB0eSgpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94797</attachid>
            <date>2011-05-25 09:51:15 -0700</date>
            <delta_ts>2011-05-25 09:59:53 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>87976</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOWRhOWExNy4uOWRlMTMwNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE0NjIsNyArMTQ2Miw4IEBAIEVORElGICgpCiBJRiAoRU5BQkxFX0xFVkVMREIp
CiAgICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2xldmVs
ZGIvTGV2ZWxEQkRhdGFiYXNlLmNwcAotICAgICAgICBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJJ
dGVyYXRvci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24u
Y3BwCisgICAgICAgIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2guY3BwCiAgICAg
KQogRU5ESUYgKCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGE2MWI4ZGQuLmI1Y2NkMmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMzYgQEAKKzIwMTEtMDUtMjUgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbmRleGVkREI6IFN1cHBvcnQgTGV2ZWxEQiB0cmFuc2FjdGlvbnMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTI3MAorCisgICAgICAgIEludHJv
ZHVjZSBMZXZlbERCVHJhbnNhY3Rpb24sIHdoaWNoIGltcGxlbWVudHMgaW4tbWVtb3J5IHRyYW5z
YWN0aW9uCisgICAgICAgIHN1cHBvcnQgb24gdG9wIG9mIExldmVsREIsIGFuZCBob29rIHRoaXMg
dXAgZm9yIEluZGV4ZWREQiB0byB1c2UuCisKKyAgICAgICAgVGhpcyBpcyBhbGwgY292ZXJlZCBi
eSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAq
IFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMZXZlbERCRGF0YWJhc2U6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6
TGV2ZWxEQkRhdGFiYXNlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFiYXNl
OjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFiYXNlOjp3cml0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJdGVyYXRvckltcGw6Okl0ZXJhdG9ySW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJdGVyYXRvckltcGw6OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6SXRlcmF0
b3JJbXBsOjpzZWVrVG9MYXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okl0ZXJhdG9ySW1wbDo6c2Vl
ayk6CisgICAgICAgIChXZWJDb3JlOjpJdGVyYXRvckltcGw6Om5leHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SXRlcmF0b3JJbXBsOjpwcmV2KToKKyAgICAgICAgKFdlYkNvcmU6Okl0ZXJhdG9ySW1w
bDo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6Okl0ZXJhdG9ySW1wbDo6dmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFiYXNlOjpjcmVhdGVJdGVyYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpMZXZlbERCRGF0YWJhc2U6OmNvbXBhcmF0b3IpOgorICAgICAgICAqIHBsYXRmb3Jt
L2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmg6CisgICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9M
ZXZlbERCSXRlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJJdGVyYXRvcjo6fkxl
dmVsREJJdGVyYXRvcik6CisgICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNh
Y3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6TGV2ZWxEQlRy
YW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6Y2xlYXJU
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6fkxldmVsREJUcmFu
c2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjptYWtlVmVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkxldmVsREJUcmFuc2FjdGlvbjo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJU
cmFuc2FjdGlvbjo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6
cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6Z2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6Y29tbWl0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6cm9sbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
TGV2ZWxEQlRyYW5zYWN0aW9uOjpjcmVhdGVJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpM
ZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjppc1ZhbGlkKToKKyAgICAgICAg
KFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpzZWVrVG9MYXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpzZWVr
KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpu
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9y
OjpwcmV2KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJh
dG9yOjprZXkpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRl
cmF0b3I6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJl
ZUl0ZXJhdG9yOjppc0RlbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0
aW9uOjpUcmVlSXRlcmF0b3I6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFu
c2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjp+VHJlZUl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkxldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpUcmVlSXRlcmF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0
ZXJhdG9yOjpUcmFuc2FjdGlvbkl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJU
cmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6aXNWYWxpZCk6CisgICAgICAgIChXZWJD
b3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnNlZWtUb0xhc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJh
dG9yOjpzZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNh
Y3Rpb25JdGVyYXRvcjo6bmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rp
b246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnByZXYpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxE
QlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjprZXkpOgorICAgICAgICAoV2ViQ29y
ZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjp2YWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6Omhh
bmRsZUNvbmZsaWN0c0FuZERlbGV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5z
YWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpzZXRDdXJyZW50SXRlcmF0b3JUb1NtYWxsZXN0
S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25J
dGVyYXRvcjo6c2V0Q3VycmVudEl0ZXJhdG9yVG9MYXJnZXN0S2V5KToKKyAgICAgICAgKFdlYkNv
cmU6OkxldmVsREJUcmFuc2FjdGlvbjo6cmVnaXN0ZXJJdGVyYXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OnVucmVnaXN0ZXJJdGVyYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OnJlc2V0SXRlcmF0b3JzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6QVZMVHJlZUFic3RyYWN0b3I6OmdldF9sZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6QVZMVHJlZUFic3RyYWN0b3I6
OnNldF9sZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6QVZMVHJl
ZUFic3RyYWN0b3I6OmdldF9ncmVhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJUcmFu
c2FjdGlvbjo6QVZMVHJlZUFic3RyYWN0b3I6OnNldF9ncmVhdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkxldmVsREJUcmFuc2FjdGlvbjo6QVZMVHJlZUFic3RyYWN0b3I6OmdldF9iYWxhbmNlX2Zh
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OkFWTFRyZWVBYnN0
cmFjdG9yOjpzZXRfYmFsYW5jZV9mYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRy
YW5zYWN0aW9uOjpBVkxUcmVlQWJzdHJhY3Rvcjo6Y29tcGFyZV9rZXlfa2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OkxldmVsREJUcmFuc2FjdGlvbjo6QVZMVHJlZUFic3RyYWN0b3I6OmNvbXBhcmVf
a2V5X25vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQlRyYW5zYWN0aW9uOjpBVkxUcmVl
QWJzdHJhY3Rvcjo6Y29tcGFyZV9ub2RlX25vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxE
QlRyYW5zYWN0aW9uOjpBVkxUcmVlQWJzdHJhY3Rvcjo6bnVsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6On5UcmFuc2FjdGlvbkl0
ZXJhdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJXcml0ZUJhdGNoOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGV2ZWxEQldyaXRlQmF0Y2g6OkxldmVsREJXcml0ZUJhdGNoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxldmVsREJXcml0ZUJhdGNoOjp+TGV2ZWxEQldyaXRlQmF0Y2gpOgorICAg
ICAgICAoV2ViQ29yZTo6bWFrZVNsaWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxldmVsREJXcml0
ZUJhdGNoOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQldyaXRlQmF0Y2g6OnJlbW92
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCV3JpdGVCYXRjaDo6Y2xlYXIpOgorICAgICAg
ICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRJbnQpOgorICAgICAgICAoV2ViQ29yZTo6cHV0SW50KToKKyAgICAgICAgKFdlYkNvcmU6
OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpwdXRTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0TmV3T2JqZWN0U3RvcmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpkZWxl
dGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxl
dGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpnZXRPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXROZXdWZXJzaW9u
TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9i
amVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmNsZWFyT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6bmV4dEF1dG9JbmNyZW1lbnROdW1iZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmb3JFYWNoT2JqZWN0
U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0TmV3SW5kZXhJZCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQp
OgorICAgICAgICAoV2ViQ29yZTo6ZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW4pOgorICAgICAgICAo
V2ViQ29yZTo6dmVyc2lvbkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpmaW5kTGFzdEluZGV4S2V5RXF1YWxUbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVUcmFuc2FjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uOjpUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbjo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2spOgorICAgICAgICAqIHN0
b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjphYm9ydCk6CisKIDIwMTEtMDUtMjQgIFBhdmVsIFBvZGl2aWxvdiAgPHBv
ZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hh
dHNreS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDU1OWExZmYuLmE4NzcyMDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjUyOSw5ICsyNTI5LDEyIEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZl
bERCQ29tcGFyYXRvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVs
REJEYXRhYmFzZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxE
QkRhdGFiYXNlLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkl0
ZXJhdG9yLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCSXRl
cmF0b3IuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCU2xpY2Uu
aCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24u
aCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24u
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNo
LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2gu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xv
Y2FsaXplZFN0cmluZ3MuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMWRlZWUzNS4uMjg5MGEwZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtODc0LDkgKzg3NCwxMiBAQAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2xldmVsZGIvTGV2ZWxEQkNvbXBhcmF0b3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
bGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9sZXZl
bGRiL0xldmVsREJEYXRhYmFzZS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xl
dmVsREJJdGVyYXRvci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxE
Qkl0ZXJhdG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlNsaWNl
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRjaC5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2guaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vbWFjL0Jsb2NrRXhjZXB0aW9ucy5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9F
bXB0eVByb3RvY29sRGVmaW5pdGlvbnMuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDI1ODU5MzYuLjM4
MTUwODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMDEzLDEyICsxMDEzLDkgQEAgU09VUkNFUyArPSBc
CiAgICAgcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9MZW5ndGguY3BwIFwK
ICAgICBwbGF0Zm9ybS90ZXh0L0xpbmVFbmRpbmcuY3BwIFwKLSAgICBwbGF0Zm9ybS9sZXZlbGRi
L0xldmVsREJDb21wYXJhdG9yLmggXAogICAgIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFi
YXNlLmNwcCBcCi0gICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuaCBcCi0gICAg
cGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCSXRlcmF0b3IuY3BwIFwKLSAgICBwbGF0Zm9ybS9sZXZl
bGRiL0xldmVsREJJdGVyYXRvci5oIFwKLSAgICBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJTbGlj
ZS5oIFwKKyAgICBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHAgXAorICAg
IHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2guY3BwIFwKICAgICBwbGF0Zm9ybS9M
aW5rSGFzaC5jcHAgXAogICAgIHBsYXRmb3JtL0xvZ2dpbmcuY3BwIFwKICAgICBwbGF0Zm9ybS9N
ZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwIFwKQEAgLTE5OTAsNiArMTk4NywxMiBAQCBIRUFERVJT
ICs9IFwKICAgICBwbGF0Zm9ybS9LaWxsUmluZy5oIFwKICAgICBwbGF0Zm9ybS9LVVJMLmggXAog
ICAgIHBsYXRmb3JtL0xlbmd0aC5oIFwKKyAgICBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJDb21w
YXJhdG9yLmggXAorICAgIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmggXAorICAg
IHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkl0ZXJhdG9yLmggXAorICAgIHBsYXRmb3JtL2xldmVs
ZGIvTGV2ZWxEQlNsaWNlLmggXAorICAgIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0
aW9uLmggXAorICAgIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2guaCBcCiAgICAg
cGxhdGZvcm0vdGV4dC9CaWRpUnVuTGlzdC5oIFwKICAgICBwbGF0Zm9ybS90ZXh0L0xpbmVFbmRp
bmcuaCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tlckNsaWVudC5oIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlMDQ0
ZmFiLi42OWNmYTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0yNzY5LDEyICsyNzY5LDE1IEBACiAJCThBRjRFNTU2MTFEQzVB
MzYwMDBFRDNERSAvKiBQZXJmb3JtYW5jZU5hdmlnYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBRjRFNTUzMTFEQzVBMzYwMDBFRDNERSAvKiBQ
ZXJmb3JtYW5jZU5hdmlnYXRpb24uaCAqLzsgfTsKIAkJOEFGNEU1NUIxMURDNUE2MzAwMEVEM0RF
IC8qIFBlcmZvcm1hbmNlVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDhBRjRFNTU4MTFEQzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5jZVRp
bWluZy5jcHAgKi87IH07CiAJCThBRjRFNTVDMTFEQzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5j
ZVRpbWluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OEFGNEU1NTkxMURDNUE2MzAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlVGltaW5nLmggKi87IH07CisJ
CThDMEUzMzRDMTM4QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCVHJhbnNhY3Rpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEMwRTMzNDgxMzhBOTJD
NzAwOERBOTRGIC8qIExldmVsREJUcmFuc2FjdGlvbi5jcHAgKi87IH07CisJCThDMEUzMzREMTM4
QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDMEUzMzQ5MTM4QTkyQzcwMDhEQTk0RiAvKiBM
ZXZlbERCVHJhbnNhY3Rpb24uaCAqLzsgfTsKKwkJOEMwRTMzNEUxMzhBOTJDNzAwOERBOTRGIC8q
IExldmVsREJXcml0ZUJhdGNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDhDMEUzMzRBMTM4QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCV3JpdGVCYXRj
aC5jcHAgKi87IH07CisJCThDMEUzMzRGMTM4QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCV3JpdGVC
YXRjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEMw
RTMzNEIxMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJXcml0ZUJhdGNoLmggKi87IH07CiAJCThD
NkVBNjE5MTFFRjdFMDQwMEZEOEVFMyAvKiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDNkVBNjE3MTFFRjdF
MDQwMEZEOEVFMyAvKiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcCAqLzsgfTsKIAkJOEM2RUE2
MUExMUVGN0UwNDAwRkQ4RUUzIC8qIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDNkVBNjE4MTFFRjdFMDQwMEZE
OEVFMyAvKiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmggKi87IH07CiAJCThDQURGMkE5MTM1QzdC
MzYwMDlFRjQzRiAvKiBMZXZlbERCQ29tcGFyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOENBREYyQTMxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVs
REJDb21wYXJhdG9yLmggKi87IH07CiAJCThDQURGMkFBMTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZl
bERCRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOENBREYyQTQxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJEYXRhYmFzZS5jcHAgKi87
IH07CiAJCThDQURGMkFCMTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCRGF0YWJhc2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDQURGMkE1MTM1QzdC
MzYwMDlFRjQzRiAvKiBMZXZlbERCRGF0YWJhc2UuaCAqLzsgfTsKLQkJOENBREYyQUMxMzVDN0Iz
NjAwOUVGNDNGIC8qIExldmVsREJJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Q0FERjJBNjEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxE
Qkl0ZXJhdG9yLmNwcCAqLzsgfTsKIAkJOENBREYyQUQxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVs
REJJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOENBREYyQTcxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJJdGVyYXRvci5oICovOyB9Owog
CQk4Q0FERjJBRTEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQlNsaWNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Q0FERjJBODEzNUM3QjM2MDA5RUY0
M0YgLyogTGV2ZWxEQlNsaWNlLmggKi87IH07CiAJCThGNjc1NjFCMTI4OEIxN0IwMDQ3QUNBMyAv
KiBFdmVudFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4RjY3NTYxOTEyODhCMTdCMDA0N0FDQTMgLyogRXZlbnRRdWV1ZS5oICovOyB9OwpAQCAt
OTMyMCwxMiArOTMyMywxNSBAQAogCQk4QUY0RTU1ODExREM1QTYzMDAwRUQzREUgLyogUGVyZm9y
bWFuY2VUaW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGVy
Zm9ybWFuY2VUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QUY0RTU1
OTExREM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGVyZm9ybWFuY2VUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOEFGNEU1NUExMURDNUE2MzAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlVGltaW5n
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQZXJmb3JtYW5jZVRpbWluZy5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCThDMEUzMzQ4MTM4QTkyQzcwMDhEQTk0RiAvKiBMZXZl
bERCVHJhbnNhY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TGV2ZWxEQlRyYW5zYWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOEMw
RTMzNDkxMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJUcmFuc2FjdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMZXZlbERCVHJhbnNhY3Rpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOEMwRTMzNEExMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJXcml0
ZUJhdGNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExldmVsREJX
cml0ZUJhdGNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOEMwRTMzNEIxMzhB
OTJDNzAwOERBOTRGIC8qIExldmVsREJXcml0ZUJhdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExldmVsREJXcml0ZUJhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCThDNkVBNjE3MTFFRjdFMDQwMEZEOEVFMyAvKiBSdW50aW1lRW5hYmxlZEZlYXR1cmVz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXMuY3BwOyBwYXRoID0gZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEM2RUE2MTgxMUVGN0UwNDAwRkQ4RUUzIC8q
IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOyBwYXRoID0gZ2VuZXJpYy9SdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThDQURGMkEzMTM1QzdC
MzYwMDlFRjQzRiAvKiBMZXZlbERCQ29tcGFyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMZXZlbERCQ29tcGFyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4Q0FERjJBNDEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkRhdGFiYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExldmVsREJEYXRhYmFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThDQURGMkE1MTM1QzdCMzYwMDlFRjQzRiAvKiBM
ZXZlbERCRGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGV2ZWxE
QkRhdGFiYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCThDQURGMkE2MTM1QzdC
MzYwMDlFRjQzRiAvKiBMZXZlbERCSXRlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTGV2ZWxEQkl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOENBREYyQTcxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJJdGVyYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXZlbERCSXRlcmF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOENBREYyQTgxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVs
REJTbGljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXZlbERCU2xpY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEY2NzU2MTkxMjg4QjE3QjAwNDdBQ0Ez
IC8qIEV2ZW50UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRR
dWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU1NzEsOSArMTU1NzcsMTIg
QEAKIAkJCQk4Q0FERjJBMzEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkNvbXBhcmF0b3IuaCAq
LywKIAkJCQk4Q0FERjJBNDEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkRhdGFiYXNlLmNwcCAq
LywKIAkJCQk4Q0FERjJBNTEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkRhdGFiYXNlLmggKi8s
Ci0JCQkJOENBREYyQTYxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJJdGVyYXRvci5jcHAgKi8s
CiAJCQkJOENBREYyQTcxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJJdGVyYXRvci5oICovLAog
CQkJCThDQURGMkE4MTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCU2xpY2UuaCAqLywKKwkJCQk4
QzBFMzM0ODEzOEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQlRyYW5zYWN0aW9uLmNwcCAqLywKKwkJ
CQk4QzBFMzM0OTEzOEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQlRyYW5zYWN0aW9uLmggKi8sCisJ
CQkJOEMwRTMzNEExMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJXcml0ZUJhdGNoLmNwcCAqLywK
KwkJCQk4QzBFMzM0QjEzOEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQldyaXRlQmF0Y2guaCAqLywK
IAkJCSk7CiAJCQlwYXRoID0gbGV2ZWxkYjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBA
IC0yMjk0Miw2ICsyMjk1MSw4IEBACiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhT
TFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3RTJFMEYxMkYwRkM5QzAwQzEz
Mzc5IC8qIFhTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1MzczNTMxMzdCNjUxODAw
MDA4RENFIC8qIFplcm9Qb2xlLmggaW4gSGVhZGVycyAqLywKKwkJCQk4QzBFMzM0RDEzOEE5MkM3
MDA4REE5NEYgLyogTGV2ZWxEQlRyYW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk4QzBF
MzM0RjEzOEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQldyaXRlQmF0Y2guaCBpbiBIZWFkZXJzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpAQCAtMjQ4NDUsNyArMjQ4NTYsNiBAQAogCQkJCTUxQjI0MTdCMEQ5MzFGM0YwMEU4M0Y1QyAv
KiBMZWdhY3lXZWJBcmNoaXZlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFNjVCRUEwRUFD
REYxNjAwN0U0NTMzIC8qIExlbmd0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Q0FERjJBQTEz
NUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CThDQURGMkFDMTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCSXRlcmF0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODQ3MzBEOTAxMjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg5QjVFQUExMTFFODAwM0QwMEYyMzY3RSAvKiBMaW5lRW5kaW5n
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QUQyRjg3MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5r
SGFzaC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1NjMwLDYgKzI1NjQwLDggQEAKIAkJCQlFMUJF
NTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk3N0UyRTBFMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NGaWx0ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkQ1MzczNTIxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCThDMEUzMzRDMTM4QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCVHJhbnNh
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOEMwRTMzNEUxMzhBOTJDNzAwOERBOTRGIC8q
IExldmVsREJXcml0ZUJhdGNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuY3BwCmluZGV4IGQ1NmYyNmMu
LjM4NmY1ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2
ZWxEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xl
dmVsREJEYXRhYmFzZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJMZXZlbERCQ29t
cGFyYXRvci5oIgogI2luY2x1ZGUgIkxldmVsREJJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxldmVs
REJTbGljZS5oIgorI2luY2x1ZGUgIkxldmVsREJXcml0ZUJhdGNoLmgiCiAjaW5jbHVkZSA8bGV2
ZWxkYi9jb21wYXJhdG9yLmg+CiAjaW5jbHVkZSA8bGV2ZWxkYi9kYi5oPgogI2luY2x1ZGUgPGxl
dmVsZGIvc2xpY2UuaD4KQEAgLTExMCwxNSArMTExLDE1IEBAIFBhc3NPd25QdHI8TGV2ZWxEQkRh
dGFiYXNlPiBMZXZlbERCRGF0YWJhc2U6Om9wZW4oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29u
c3QKIAogICAgIHJlc3VsdC0+bV9kYiA9IGFkb3B0UHRyKGRiKTsKICAgICByZXN1bHQtPm1fY29t
cGFyYXRvckFkYXB0ZXIgPSBjb21wYXJhdG9yQWRhcHRlci5yZWxlYXNlKCk7CisgICAgcmVzdWx0
LT5tX2NvbXBhcmF0b3IgPSBjb21wYXJhdG9yOwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
KCk7CiB9CiAKLQogYm9vbCBMZXZlbERCRGF0YWJhc2U6OnB1dChjb25zdCBMZXZlbERCU2xpY2Um
IGtleSwgY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSkKIHsKICAgICBsZXZlbGRiOjpXcml0ZU9w
dGlvbnMgd3JpdGVPcHRpb25zOwotICAgIHdyaXRlT3B0aW9ucy5zeW5jID0gZmFsc2U7CisgICAg
d3JpdGVPcHRpb25zLnN5bmMgPSB0cnVlOwogCiAgICAgcmV0dXJuIG1fZGItPlB1dCh3cml0ZU9w
dGlvbnMsIG1ha2VTbGljZShrZXkpLCBtYWtlU2xpY2UodmFsdWUpKS5vaygpOwogfQpAQCAtMTI2
LDcgKzEyNyw3IEBAIGJvb2wgTGV2ZWxEQkRhdGFiYXNlOjpwdXQoY29uc3QgTGV2ZWxEQlNsaWNl
JiBrZXksIGNvbnN0IFZlY3RvcjxjaGFyPiYgdmFsdWUpCiBib29sIExldmVsREJEYXRhYmFzZTo6
cmVtb3ZlKGNvbnN0IExldmVsREJTbGljZSYga2V5KQogewogICAgIGxldmVsZGI6OldyaXRlT3B0
aW9ucyB3cml0ZU9wdGlvbnM7Ci0gICAgd3JpdGVPcHRpb25zLnN5bmMgPSBmYWxzZTsKKyAgICB3
cml0ZU9wdGlvbnMuc3luYyA9IHRydWU7CiAKICAgICByZXR1cm4gbV9kYi0+RGVsZXRlKHdyaXRl
T3B0aW9ucywgbWFrZVNsaWNlKGtleSkpLm9rKCk7CiB9CkBAIC0xNDEsMTIgKzE0Miw5MCBAQCBi
b29sIExldmVsREJEYXRhYmFzZTo6Z2V0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBWZWN0b3I8
Y2hhcj4mIHZhbHVlKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIExldmVsREJEYXRhYmFz
ZTo6d3JpdGUoTGV2ZWxEQldyaXRlQmF0Y2gmIHdyaXRlQmF0Y2gpCit7CisgICAgbGV2ZWxkYjo6
V3JpdGVPcHRpb25zIHdyaXRlT3B0aW9uczsKKyAgICB3cml0ZU9wdGlvbnMuc3luYyA9IHRydWU7
CisKKyAgICByZXR1cm4gbV9kYi0+V3JpdGUod3JpdGVPcHRpb25zLCB3cml0ZUJhdGNoLm1fd3Jp
dGVCYXRjaC5nZXQoKSkub2soKTsKK30KKworbmFtZXNwYWNlIHsKK2NsYXNzIEl0ZXJhdG9ySW1w
bCA6IHB1YmxpYyBMZXZlbERCSXRlcmF0b3IgeworcHVibGljOgorICAgIH5JdGVyYXRvckltcGwo
KSB7IH07CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBzZWVrVG9MYXN0KCk7CisgICAgdmlydHVhbCB2b2lkIHNlZWsoY29uc3QgTGV2ZWxEQlNs
aWNlJiB0YXJnZXQpOworICAgIHZpcnR1YWwgdm9pZCBuZXh0KCk7CisgICAgdmlydHVhbCB2b2lk
IHByZXYoKTsKKyAgICB2aXJ0dWFsIExldmVsREJTbGljZSBrZXkoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIExldmVsREJTbGljZSB2YWx1ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBXZWJDb3JlOjpMZXZlbERCRGF0YWJhc2U7CisgICAgSXRlcmF0b3JJbXBsKFBhc3NPd25Q
dHI8bGV2ZWxkYjo6SXRlcmF0b3I+KTsKKworICAgIE93blB0cjxsZXZlbGRiOjpJdGVyYXRvcj4g
bV9pdGVyYXRvcjsKK307Cit9CisKK0l0ZXJhdG9ySW1wbDo6SXRlcmF0b3JJbXBsKFBhc3NPd25Q
dHI8bGV2ZWxkYjo6SXRlcmF0b3I+IGl0KQorICAgIDogbV9pdGVyYXRvcihpdCkKK3sKK30KKwor
Ym9vbCBJdGVyYXRvckltcGw6OmlzVmFsaWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2l0ZXJh
dG9yLT5WYWxpZCgpOworfQorCit2b2lkIEl0ZXJhdG9ySW1wbDo6c2Vla1RvTGFzdCgpCit7Cisg
ICAgbV9pdGVyYXRvci0+U2Vla1RvTGFzdCgpOworfQorCit2b2lkIEl0ZXJhdG9ySW1wbDo6c2Vl
ayhjb25zdCBMZXZlbERCU2xpY2UmIHRhcmdldCkKK3sKKyAgICBtX2l0ZXJhdG9yLT5TZWVrKG1h
a2VTbGljZSh0YXJnZXQpKTsKK30KKwordm9pZCBJdGVyYXRvckltcGw6Om5leHQoKQoreworICAg
IEFTU0VSVChpc1ZhbGlkKCkpOworICAgIG1faXRlcmF0b3ItPk5leHQoKTsKK30KKwordm9pZCBJ
dGVyYXRvckltcGw6OnByZXYoKQoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIG1faXRl
cmF0b3ItPlByZXYoKTsKK30KKworTGV2ZWxEQlNsaWNlIEl0ZXJhdG9ySW1wbDo6a2V5KCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gbWFrZUxldmVsREJTbGlj
ZShtX2l0ZXJhdG9yLT5rZXkoKSk7Cit9CisKK0xldmVsREJTbGljZSBJdGVyYXRvckltcGw6OnZh
bHVlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gbWFrZUxl
dmVsREJTbGljZShtX2l0ZXJhdG9yLT52YWx1ZSgpKTsKK30KKwogUGFzc093blB0cjxMZXZlbERC
SXRlcmF0b3I+IExldmVsREJEYXRhYmFzZTo6Y3JlYXRlSXRlcmF0b3IoKQogewogICAgIE93blB0
cjxsZXZlbGRiOjpJdGVyYXRvcj4gaSA9IGFkb3B0UHRyKG1fZGItPk5ld0l0ZXJhdG9yKGxldmVs
ZGI6OlJlYWRPcHRpb25zKCkpKTsKICAgICBpZiAoIWkpIC8vIEZJWE1FOiBEb3VibGUgY2hlY2sg
aWYgd2UgYWN0dWFsbHkgbmVlZCB0byBjaGVjayB0aGlzLgogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IExldmVsREJJdGVyYXRvcihpLnJlbGVhc2UoKSkp
OworICAgIHJldHVybiBhZG9wdFB0cihuZXcgSXRlcmF0b3JJbXBsKGkucmVsZWFzZSgpKSk7Cit9
CisKK2NvbnN0IExldmVsREJDb21wYXJhdG9yKiBMZXZlbERCRGF0YWJhc2U6OmNvbXBhcmF0b3Io
KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbXBhcmF0b3I7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5oCmluZGV4IDUyNmQw
YjguLmNiYzI4ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIv
TGV2ZWxEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9M
ZXZlbERCRGF0YWJhc2UuaApAQCAtNDMsNiArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBMZXZlbERCQ29tcGFyYXRvcjsKIGNsYXNzIExldmVsREJJdGVyYXRvcjsKIGNsYXNzIExl
dmVsREJTbGljZTsKK2NsYXNzIExldmVsREJXcml0ZUJhdGNoOwogCiBjbGFzcyBMZXZlbERCRGF0
YWJhc2UgewogcHVibGljOgpAQCAtNTIsMTIgKzUzLDE1IEBAIHB1YmxpYzoKICAgICBib29sIHB1
dChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSk7CiAg
ICAgYm9vbCByZW1vdmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXkpOwogICAgIGJvb2wgZ2V0KGNv
bnN0IExldmVsREJTbGljZSYga2V5LCBWZWN0b3I8Y2hhcj4mIHZhbHVlKTsKKyAgICBib29sIHdy
aXRlKExldmVsREJXcml0ZUJhdGNoJik7CiAgICAgUGFzc093blB0cjxMZXZlbERCSXRlcmF0b3I+
IGNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgY29uc3QgTGV2ZWxEQkNvbXBhcmF0b3IqIGNvbXBhcmF0
b3IoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBMZXZlbERCRGF0YWJhc2UoKTsKIAogICAgIE93
blB0cjxsZXZlbGRiOjpEQj4gbV9kYjsKKyAgICBjb25zdCBMZXZlbERCQ29tcGFyYXRvciogbV9j
b21wYXJhdG9yOwogICAgIE93blB0cjxsZXZlbGRiOjpDb21wYXJhdG9yPiBtX2NvbXBhcmF0b3JB
ZGFwdGVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxk
Yi9MZXZlbERCSXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9M
ZXZlbERCSXRlcmF0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTUyODFl
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkl0
ZXJhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGV2ZWxEQkl0ZXJhdG9yLmgiCi0KLSNpZiBFTkFCTEUo
TEVWRUxEQikKLQotI2luY2x1ZGUgPGxldmVsZGIvaXRlcmF0b3IuaD4KLSNpbmNsdWRlIDxsZXZl
bGRiL3NsaWNlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotTGV2ZWxEQkl0ZXJhdG9yOjp+TGV2ZWxEQkl0ZXJhdG9yKCkKLXsK
LX0KLQotTGV2ZWxEQkl0ZXJhdG9yOjpMZXZlbERCSXRlcmF0b3IoUGFzc093blB0cjxsZXZlbGRi
OjpJdGVyYXRvcj4gaXQpCi0gICAgOiBtX2l0ZXJhdG9yKGl0KQotewotfQotCi1zdGF0aWMgbGV2
ZWxkYjo6U2xpY2UgbWFrZVNsaWNlKGNvbnN0IFZlY3RvcjxjaGFyPiYgdmFsdWUpCi17Ci0gICAg
cmV0dXJuIGxldmVsZGI6OlNsaWNlKHZhbHVlLmRhdGEoKSwgdmFsdWUuc2l6ZSgpKTsKLX0KLQot
c3RhdGljIExldmVsREJTbGljZSBtYWtlTGV2ZWxEQlNsaWNlKGxldmVsZGI6OlNsaWNlIHMpCi17
Ci0gICAgcmV0dXJuIExldmVsREJTbGljZShzLmRhdGEoKSwgcy5kYXRhKCkgKyBzLnNpemUoKSk7
Ci19Ci0KLWJvb2wgTGV2ZWxEQkl0ZXJhdG9yOjppc1ZhbGlkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9pdGVyYXRvci0+VmFsaWQoKTsKLX0KLQotdm9pZCBMZXZlbERCSXRlcmF0b3I6OnNlZWtU
b0xhc3QoKQotewotICAgIG1faXRlcmF0b3ItPlNlZWtUb0xhc3QoKTsKLX0KLQotdm9pZCBMZXZl
bERCSXRlcmF0b3I6OnNlZWsoY29uc3QgVmVjdG9yPGNoYXI+JiB0YXJnZXQpCi17Ci0gICAgbV9p
dGVyYXRvci0+U2VlayhtYWtlU2xpY2UodGFyZ2V0KSk7Ci19Ci0KLXZvaWQgTGV2ZWxEQkl0ZXJh
dG9yOjpuZXh0KCkKLXsKLSAgICBtX2l0ZXJhdG9yLT5OZXh0KCk7Ci19Ci0KLXZvaWQgTGV2ZWxE
Qkl0ZXJhdG9yOjpwcmV2KCkKLXsKLSAgICBtX2l0ZXJhdG9yLT5QcmV2KCk7Ci19Ci0KLUxldmVs
REJTbGljZSBMZXZlbERCSXRlcmF0b3I6OmtleSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VM
ZXZlbERCU2xpY2UobV9pdGVyYXRvci0+a2V5KCkpOwotfQotCi1MZXZlbERCU2xpY2UgTGV2ZWxE
Qkl0ZXJhdG9yOjp2YWx1ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VMZXZlbERCU2xpY2Uo
bV9pdGVyYXRvci0+dmFsdWUoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShMRVZFTERCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbGV2ZWxkYi9MZXZlbERCSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xl
dmVsZGIvTGV2ZWxEQkl0ZXJhdG9yLmgKaW5kZXggNzY4YTFiNC4uMTUyNTVkNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCSXRlcmF0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJJdGVyYXRvci5oCkBAIC0y
OSwzNiArMjksMjEgQEAKICNpZiBFTkFCTEUoTEVWRUxEQikKIAogI2luY2x1ZGUgIkxldmVsREJT
bGljZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8T3duUHRyLmg+
Ci0jaW5jbHVkZSA8VmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLWNsYXNzIEl0ZXJh
dG9yOwotfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExldmVsREJJdGVyYXRvciB7
CiBwdWJsaWM6Ci0gICAgfkxldmVsREJJdGVyYXRvcigpOwotCi0gICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZWVrVG9MYXN0KCk7Ci0gICAgdm9pZCBzZWVrKGNvbnN0IFZlY3Rv
cjxjaGFyPiYgdGFyZ2V0KTsKLSAgICB2b2lkIG5leHQoKTsKLSAgICB2b2lkIHByZXYoKTsKLSAg
ICBMZXZlbERCU2xpY2Uga2V5KCkgY29uc3Q7Ci0gICAgTGV2ZWxEQlNsaWNlIHZhbHVlKCkgY29u
c3Q7Ci0KLXByaXZhdGU6Ci0gICAgTGV2ZWxEQkl0ZXJhdG9yKFBhc3NPd25QdHI8bGV2ZWxkYjo6
SXRlcmF0b3I+KTsKLSAgICBmcmllbmQgY2xhc3MgTGV2ZWxEQkRhdGFiYXNlOwotCi0gICAgT3du
UHRyPGxldmVsZGI6Okl0ZXJhdG9yPiBtX2l0ZXJhdG9yOworICAgIHZpcnR1YWwgfkxldmVsREJJ
dGVyYXRvcigpIHsgfTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2Vla1RvTGFzdCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Vlayhj
b25zdCBMZXZlbERCU2xpY2UmIHRhcmdldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBuZXh0KCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBwcmV2KCkgPSAwOworICAgIHZpcnR1YWwgTGV2ZWxEQlNs
aWNlIGtleSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIExldmVsREJTbGljZSB2YWx1ZSgpIGNv
bnN0ID0gMDsKIH07CiAKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKExFVkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRi
L0xldmVsREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRi
L0xldmVsREJUcmFuc2FjdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZWZjNDE2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xl
dmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmNwcApAQCAtMCwwICsxLDQyOCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMZXZlbERCVHJhbnNhY3Rpb24uaCIKKworI2lu
Y2x1ZGUgIkxldmVsREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkxldmVsREJTbGljZS5oIgorI2lu
Y2x1ZGUgIkxldmVsREJXcml0ZUJhdGNoLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKKyNpZiBFTkFCTEUoTEVWRUxEQikKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVm
UHRyPExldmVsREJUcmFuc2FjdGlvbj4gTGV2ZWxEQlRyYW5zYWN0aW9uOjpjcmVhdGUoTGV2ZWxE
QkRhdGFiYXNlKiBkYikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IExldmVsREJUcmFuc2Fj
dGlvbihkYikpOworfQorCitMZXZlbERCVHJhbnNhY3Rpb246OkxldmVsREJUcmFuc2FjdGlvbihM
ZXZlbERCRGF0YWJhc2UqIGRiKQorICAgIDogbV9kYihkYikKKyAgICAsIG1fY29tcGFyYXRvcihk
Yi0+Y29tcGFyYXRvcigpKQorICAgICwgbV9maW5pc2hlZChmYWxzZSkKK3sKKyAgICBtX3RyZWUu
YWJzdHJhY3RvcigpLm1fY29tcGFyYXRvciA9IG1fY29tcGFyYXRvcjsKK30KKwordm9pZCBMZXZl
bERCVHJhbnNhY3Rpb246OmNsZWFyVHJlZSgpCit7CisgICAgVHJlZVR5cGU6Okl0ZXJhdG9yIGl0
ZXJhdG9yOworICAgIGl0ZXJhdG9yLnN0YXJ0X2l0ZXJfbGVhc3QobV90cmVlKTsKKworICAgIHdo
aWxlICgqaXRlcmF0b3IpIHsKKyAgICAgICAgZGVsZXRlICppdGVyYXRvcjsKKyAgICAgICAgKytp
dGVyYXRvcjsKKyAgICB9CisgICAgbV90cmVlLnB1cmdlKCk7Cit9CisKK0xldmVsREJUcmFuc2Fj
dGlvbjo6fkxldmVsREJUcmFuc2FjdGlvbigpCit7CisgICAgY2xlYXJUcmVlKCk7Cit9CisKK3N0
YXRpYyB2b2lkIGluaXRWZWN0b3IoY29uc3QgTGV2ZWxEQlNsaWNlJiBzbGljZSwgVmVjdG9yPGNo
YXI+KiB2ZWN0b3IpCit7CisgICAgdmVjdG9yLT5jbGVhcigpOworICAgIHZlY3Rvci0+YXBwZW5k
KHNsaWNlLmJlZ2luKCksIHNsaWNlLmVuZCgpIC0gc2xpY2UuYmVnaW4oKSk7Cit9CisKK2Jvb2wg
TGV2ZWxEQlRyYW5zYWN0aW9uOjpzZXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIGNvbnN0IFZl
Y3RvcjxjaGFyPiYgdmFsdWUsIGJvb2wgZGVsZXRlZCkKK3sKKyAgICBBU1NFUlQoIW1fZmluaXNo
ZWQpOworICAgIGJvb2wgbmV3Tm9kZSA9IGZhbHNlOworICAgIEFWTFRyZWVOb2RlKiBub2RlID0g
bV90cmVlLnNlYXJjaChrZXkpOworCisgICAgaWYgKCFub2RlKSB7CisgICAgICAgIG5vZGUgPSBu
ZXcgQVZMVHJlZU5vZGU7CisgICAgICAgIGluaXRWZWN0b3Ioa2V5LCAmbm9kZS0+a2V5KTsKKyAg
ICAgICAgbV90cmVlLmluc2VydChub2RlKTsKKyAgICAgICAgbmV3Tm9kZSA9IHRydWU7CisgICAg
fQorICAgIG5vZGUtPnZhbHVlID0gdmFsdWU7CisgICAgbm9kZS0+ZGVsZXRlZCA9IGRlbGV0ZWQ7
CisKKyAgICBpZiAobmV3Tm9kZSkKKyAgICAgICAgcmVzZXRJdGVyYXRvcnMoKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBMZXZlbERCVHJhbnNhY3Rpb246OnB1dChjb25zdCBMZXZlbERC
U2xpY2UmIGtleSwgY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc2V0
KGtleSwgdmFsdWUsIGZhbHNlKTsKK30KKworYm9vbCBMZXZlbERCVHJhbnNhY3Rpb246OnJlbW92
ZShjb25zdCBMZXZlbERCU2xpY2UmIGtleSkKK3sKKyAgICByZXR1cm4gc2V0KGtleSwgVmVjdG9y
PGNoYXI+KCksIHRydWUpOworfQorCitib29sIExldmVsREJUcmFuc2FjdGlvbjo6Z2V0KGNvbnN0
IExldmVsREJTbGljZSYga2V5LCBWZWN0b3I8Y2hhcj4mIHZhbHVlKQoreworICAgIEFTU0VSVCgh
bV9maW5pc2hlZCk7CisgICAgQVZMVHJlZU5vZGUqIG5vZGUgPSBtX3RyZWUuc2VhcmNoKGtleSk7
CisKKyAgICBpZiAobm9kZSkgeworICAgICAgICBpZiAobm9kZS0+ZGVsZXRlZCkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB2YWx1ZSA9IG5vZGUtPnZhbHVlOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9kYi0+Z2V0KGtleSwgdmFsdWUp
OworfQorCitib29sIExldmVsREJUcmFuc2FjdGlvbjo6Y29tbWl0KCkKK3sKKyAgICBBU1NFUlQo
IW1fZmluaXNoZWQpOworICAgIE93blB0cjxMZXZlbERCV3JpdGVCYXRjaD4gd3JpdGVCYXRjaCA9
IExldmVsREJXcml0ZUJhdGNoOjpjcmVhdGUoKTsKKworICAgIFRyZWVUeXBlOjpJdGVyYXRvciBp
dGVyYXRvcjsKKyAgICBpdGVyYXRvci5zdGFydF9pdGVyX2xlYXN0KG1fdHJlZSk7CisKKyAgICB3
aGlsZSAoKml0ZXJhdG9yKSB7CisgICAgICAgIEFWTFRyZWVOb2RlKiBub2RlID0gKml0ZXJhdG9y
OworICAgICAgICBpZiAoIW5vZGUtPmRlbGV0ZWQpCisgICAgICAgICAgICB3cml0ZUJhdGNoLT5w
dXQobm9kZS0+a2V5LCBub2RlLT52YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdy
aXRlQmF0Y2gtPnJlbW92ZShub2RlLT5rZXkpOworICAgICAgICArK2l0ZXJhdG9yOworICAgIH0K
KworICAgIGlmICghbV9kYi0+d3JpdGUoKndyaXRlQmF0Y2gpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBjbGVhclRyZWUoKTsKKyAgICBtX2ZpbmlzaGVkID0gdHJ1ZTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OnJvbGxiYWNrKCkKK3sKKyAg
ICBBU1NFUlQoIW1fZmluaXNoZWQpOworICAgIG1fZmluaXNoZWQgPSB0cnVlOworICAgIGNsZWFy
VHJlZSgpOworfQorCitQYXNzT3duUHRyPExldmVsREJJdGVyYXRvcj4gTGV2ZWxEQlRyYW5zYWN0
aW9uOjpjcmVhdGVJdGVyYXRvcigpCit7CisgICAgcmV0dXJuIFRyYW5zYWN0aW9uSXRlcmF0b3I6
OmNyZWF0ZSh0aGlzKTsKK30KKworUGFzc093blB0cjxMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJ
dGVyYXRvcj4gTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I6OmNyZWF0ZShMZXZlbERC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgVHJl
ZUl0ZXJhdG9yKHRyYW5zYWN0aW9uKSk7Cit9CisKK2Jvb2wgTGV2ZWxEQlRyYW5zYWN0aW9uOjpU
cmVlSXRlcmF0b3I6OmlzVmFsaWQoKSBjb25zdAoreworICAgIHJldHVybiAqbV9pdGVyYXRvcjsK
K30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6c2Vla1RvTGFzdCgp
Cit7CisgICAgbV9pdGVyYXRvci5zdGFydF9pdGVyX2dyZWF0ZXN0KCptX3RyZWUpOworICAgIGlm
IChpc1ZhbGlkKCkpCisgICAgICAgIG1fa2V5ID0gKCptX2l0ZXJhdG9yKS0+a2V5OworfQorCit2
b2lkIExldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpzZWVrKGNvbnN0IExldmVsREJT
bGljZSYgdGFyZ2V0KQoreworICAgIG1faXRlcmF0b3Iuc3RhcnRfaXRlcigqbV90cmVlLCB0YXJn
ZXQsIFRyZWVUeXBlOjpFUVVBTCk7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIG1faXRl
cmF0b3Iuc3RhcnRfaXRlcigqbV90cmVlLCB0YXJnZXQsIFRyZWVUeXBlOjpHUkVBVEVSKTsKKwor
ICAgIGlmIChpc1ZhbGlkKCkpCisgICAgICAgIG1fa2V5ID0gKCptX2l0ZXJhdG9yKS0+a2V5Owor
fQorCit2b2lkIExldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpuZXh0KCkKK3sKKyAg
ICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICArK21faXRlcmF0b3I7CisgICAgaWYgKGlzVmFsaWQo
KSkgeworICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+bV9jb21wYXJhdG9yLT5jb21wYXJl
KCgqbV9pdGVyYXRvciktPmtleSwgbV9rZXkpID4gMCk7CisgICAgICAgIG1fa2V5ID0gKCptX2l0
ZXJhdG9yKS0+a2V5OworICAgIH0KK30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJ
dGVyYXRvcjo6cHJldigpCit7CisgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgLS1tX2l0ZXJh
dG9yOworICAgIGlmIChpc1ZhbGlkKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fdHJlZS0+YWJzdHJh
Y3RvcigpLm1fY29tcGFyYXRvci0+Y29tcGFyZSgoKm1faXRlcmF0b3IpLT5rZXksIG1fa2V5KSA8
IDApOworICAgICAgICBtX2tleSA9ICgqbV9pdGVyYXRvciktPmtleTsKKyAgICB9Cit9CisKK0xl
dmVsREJTbGljZSBMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6a2V5KCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gbV9rZXk7Cit9CisKK0xldmVs
REJTbGljZSBMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6dmFsdWUoKSBjb25zdAor
eworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIEFTU0VSVCghaXNEZWxldGVkKCkpOworICAg
IHJldHVybiAoKm1faXRlcmF0b3IpLT52YWx1ZTsKK30KKworYm9vbCBMZXZlbERCVHJhbnNhY3Rp
b246OlRyZWVJdGVyYXRvcjo6aXNEZWxldGVkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNWYWxp
ZCgpKTsKKyAgICByZXR1cm4gKCptX2l0ZXJhdG9yKS0+ZGVsZXRlZDsKK30KKwordm9pZCBMZXZl
bERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6cmVzZXQoKQoreworICAgIC8vIEZJWE1FOiBC
ZSBsYXp5OiBzZXQgYSBmbGFnIGFuZCBkbyB0aGUgYWN0dWFsIHJlc2V0IG5leHQgdGltZSB3ZSB1
c2UgdGhlIGl0ZXJhdG9yLgorICAgIGlmIChpc1ZhbGlkKCkpIHsKKyAgICAgICAgbV9pdGVyYXRv
ci5zdGFydF9pdGVyKCptX3RyZWUsIG1fa2V5LCBUcmVlVHlwZTo6RVFVQUwpOworICAgICAgICBB
U1NFUlQoaXNWYWxpZCgpKTsKKyAgICB9Cit9CisKK0xldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0
ZXJhdG9yOjp+VHJlZUl0ZXJhdG9yKCkKK3sKKyAgICBtX3RyYW5zYWN0aW9uLT51bnJlZ2lzdGVy
SXRlcmF0b3IodGhpcyk7Cit9CisKK0xldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpU
cmVlSXRlcmF0b3IoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICA6IG1fdHJl
ZSgmdHJhbnNhY3Rpb24tPm1fdHJlZSkKKyAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24p
Cit7CisgICAgdHJhbnNhY3Rpb24tPnJlZ2lzdGVySXRlcmF0b3IodGhpcyk7Cit9CisKK1Bhc3NP
d25QdHI8TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yPiBMZXZlbERCVHJh
bnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OmNyZWF0ZShQYXNzUmVmUHRyPExldmVsREJU
cmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUcmFu
c2FjdGlvbkl0ZXJhdG9yKHRyYW5zYWN0aW9uKSk7Cit9CisKK0xldmVsREJUcmFuc2FjdGlvbjo6
VHJhbnNhY3Rpb25JdGVyYXRvcjo6VHJhbnNhY3Rpb25JdGVyYXRvcihQYXNzUmVmUHRyPExldmVs
REJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24pCisgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0
aW9uKQorICAgICwgbV9jb21wYXJhdG9yKG1fdHJhbnNhY3Rpb24tPm1fY29tcGFyYXRvcikKKyAg
ICAsIG1fdHJlZUl0ZXJhdG9yKFRyZWVJdGVyYXRvcjo6Y3JlYXRlKG1fdHJhbnNhY3Rpb24uZ2V0
KCkpKQorICAgICwgbV9kYkl0ZXJhdG9yKG1fdHJhbnNhY3Rpb24tPm1fZGItPmNyZWF0ZUl0ZXJh
dG9yKCkpCisgICAgLCBtX2N1cnJlbnQoMCkKKyAgICAsIG1fZGlyZWN0aW9uKGtGb3J3YXJkKQor
eworfQorCitib29sIExldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6aXNW
YWxpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY3VycmVudDsKK30KKwordm9pZCBMZXZlbERC
VHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnNlZWtUb0xhc3QoKQoreworICAgIG1f
dHJlZUl0ZXJhdG9yLT5zZWVrVG9MYXN0KCk7CisgICAgbV9kYkl0ZXJhdG9yLT5zZWVrVG9MYXN0
KCk7CisgICAgbV9kaXJlY3Rpb24gPSBrUmV2ZXJzZTsKKworICAgIGhhbmRsZUNvbmZsaWN0c0Fu
ZERlbGV0ZXMoKTsKKyAgICBzZXRDdXJyZW50SXRlcmF0b3JUb0xhcmdlc3RLZXkoKTsKK30KKwor
dm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnNlZWsoY29uc3Qg
TGV2ZWxEQlNsaWNlJiB0YXJnZXQpCit7CisgICAgbV90cmVlSXRlcmF0b3ItPnNlZWsodGFyZ2V0
KTsKKyAgICBtX2RiSXRlcmF0b3ItPnNlZWsodGFyZ2V0KTsKKyAgICBtX2RpcmVjdGlvbiA9IGtG
b3J3YXJkOworCisgICAgaGFuZGxlQ29uZmxpY3RzQW5kRGVsZXRlcygpOworICAgIHNldEN1cnJl
bnRJdGVyYXRvclRvU21hbGxlc3RLZXkoKTsKK30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246
OlRyYW5zYWN0aW9uSXRlcmF0b3I6Om5leHQoKQoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOwor
CisgICAgaWYgKG1fZGlyZWN0aW9uICE9IGtGb3J3YXJkKSB7CisgICAgICAgIC8vIEVuc3VyZSB0
aGUgbm9uLWN1cnJlbnQgaXRlcmF0b3IgaXMgcG9zaXRpb25lZCBhZnRlciBrZXkoKS4KKworICAg
ICAgICBMZXZlbERCSXRlcmF0b3IqIG5vbkN1cnJlbnQgPSAobV9jdXJyZW50ID09IG1fZGJJdGVy
YXRvci5nZXQoKSkgPyBtX3RyZWVJdGVyYXRvci5nZXQoKSA6IG1fZGJJdGVyYXRvci5nZXQoKTsK
KworICAgICAgICBub25DdXJyZW50LT5zZWVrKGtleSgpKTsKKyAgICAgICAgaWYgKG5vbkN1cnJl
bnQtPmlzVmFsaWQoKSAmJiAhbV9jb21wYXJhdG9yLT5jb21wYXJlKG5vbkN1cnJlbnQtPmtleSgp
LCBrZXkoKSkpCisgICAgICAgICAgICBub25DdXJyZW50LT5uZXh0KCk7IC8vIFRha2UgYW4gZXh0
cmEgc3RlcCBzbyB0aGUgbm9uLWN1cnJlbnQga2V5IGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiBr
ZXkoKS4KKworICAgICAgICBBU1NFUlQoIW5vbkN1cnJlbnQtPmlzVmFsaWQoKSB8fCBtX2NvbXBh
cmF0b3ItPmNvbXBhcmUobm9uQ3VycmVudC0+a2V5KCksIGtleSgpKSA+IDApOworCisgICAgICAg
IG1fZGlyZWN0aW9uID0ga0ZvcndhcmQ7CisgICAgfQorCisgICAgbV9jdXJyZW50LT5uZXh0KCk7
CisgICAgaGFuZGxlQ29uZmxpY3RzQW5kRGVsZXRlcygpOworICAgIHNldEN1cnJlbnRJdGVyYXRv
clRvU21hbGxlc3RLZXkoKTsKK30KKwordm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0
aW9uSXRlcmF0b3I6OnByZXYoKQoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworCisgICAgaWYg
KG1fZGlyZWN0aW9uICE9IGtSZXZlcnNlKSB7CisgICAgICAgIC8vIEVuc3VyZSB0aGUgbm9uLWN1
cnJlbnQgaXRlcmF0b3IgaXMgcG9zaXRpb25lZCBiZWZvcmUga2V5KCkuCisKKyAgICAgICAgTGV2
ZWxEQkl0ZXJhdG9yKiBub25DdXJyZW50ID0gKG1fY3VycmVudCA9PSBtX2RiSXRlcmF0b3IuZ2V0
KCkpID8gbV90cmVlSXRlcmF0b3IuZ2V0KCkgOiBtX2RiSXRlcmF0b3IuZ2V0KCk7CisKKyAgICAg
ICAgbm9uQ3VycmVudC0+c2VlayhrZXkoKSk7CisgICAgICAgIGlmIChub25DdXJyZW50LT5pc1Zh
bGlkKCkpIHsKKyAgICAgICAgICAgIC8vIEl0ZXJhdG9yIGlzIGF0IGZpcnN0IGVudHJ5ID49IGtl
eSgpLgorICAgICAgICAgICAgLy8gU3RlcCBiYWNrIG9uY2UgdG8gZW50cnkgPCBrZXkuCisgICAg
ICAgICAgICAvLyBUaGlzIGlzIHdoeSB3ZSBkb24ndCBjaGVjayBmb3IgdGhlIGtleXMgYmVpbmcg
dGhlIHNhbWUgYmVmb3JlCisgICAgICAgICAgICAvLyBzdGVwcGluZywgbGlrZSB3ZSBkbyBpbiBu
ZXh0KCkgYWJvdmUuCisgICAgICAgICAgICBub25DdXJyZW50LT5wcmV2KCk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgbm9uQ3VycmVudC0+c2Vla1RvTGFzdCgpOyAvLyBJdGVyYXRvciBo
YXMgbm8gZW50cmllcyA+PSBrZXkoKS4gUG9zaXRpb24gYXQgbGFzdCBlbnRyeS4KKworICAgICAg
ICBBU1NFUlQoIW5vbkN1cnJlbnQtPmlzVmFsaWQoKSB8fCBtX2NvbXBhcmF0b3ItPmNvbXBhcmUo
bm9uQ3VycmVudC0+a2V5KCksIGtleSgpKSA8IDApOworCisgICAgICAgIG1fZGlyZWN0aW9uID0g
a1JldmVyc2U7CisgICAgfQorCisgICAgbV9jdXJyZW50LT5wcmV2KCk7CisgICAgaGFuZGxlQ29u
ZmxpY3RzQW5kRGVsZXRlcygpOworICAgIHNldEN1cnJlbnRJdGVyYXRvclRvTGFyZ2VzdEtleSgp
OworfQorCitMZXZlbERCU2xpY2UgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJh
dG9yOjprZXkoKSBjb25zdAoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIHJldHVybiBt
X2N1cnJlbnQtPmtleSgpOworfQorCitMZXZlbERCU2xpY2UgTGV2ZWxEQlRyYW5zYWN0aW9uOjpU
cmFuc2FjdGlvbkl0ZXJhdG9yOjp2YWx1ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzVmFsaWQo
KSk7CisgICAgcmV0dXJuIG1fY3VycmVudC0+dmFsdWUoKTsKK30KKwordm9pZCBMZXZlbERCVHJh
bnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OmhhbmRsZUNvbmZsaWN0c0FuZERlbGV0ZXMo
KQoreworICAgIGJvb2wgbG9vcCA9IHRydWU7CisKKyAgICB3aGlsZSAobG9vcCkgeworICAgICAg
ICBsb29wID0gZmFsc2U7CisKKyAgICAgICAgaWYgKG1fdHJlZUl0ZXJhdG9yLT5pc1ZhbGlkKCkg
JiYgbV9kYkl0ZXJhdG9yLT5pc1ZhbGlkKCkgJiYgIW1fY29tcGFyYXRvci0+Y29tcGFyZShtX3Ry
ZWVJdGVyYXRvci0+a2V5KCksIG1fZGJJdGVyYXRvci0+a2V5KCkpKSB7CisgICAgICAgICAgICAv
LyBGb3IgZXF1YWwga2V5cywgdGhlIHRyZWUgaXRlcmF0b3IgdGFrZXMgcHJlY2VkZW5jZSwgc28g
bW92ZSB0aGUgZGF0YWJhc2UgaXRlcmF0b3IgYW5vdGhlciBzdGVwLgorICAgICAgICAgICAgaWYg
KG1fZGlyZWN0aW9uID09IGtGb3J3YXJkKQorICAgICAgICAgICAgICAgIG1fZGJJdGVyYXRvci0+
bmV4dCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZGJJdGVyYXRvci0+
cHJldigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fdHJlZUl0ZXJhdG9yLT5pc1ZhbGlk
KCkgJiYgbV90cmVlSXRlcmF0b3ItPmlzRGVsZXRlZCgpKSB7CisgICAgICAgICAgICAvLyBJZiB0
aGUgdHJlZSBpdGVyYXRvciBpcyBvbiBhIGRlbGV0ZSBtYXJrZXIsIHRha2UgYW5vdGhlciBzdGVw
LgorICAgICAgICAgICAgaWYgKG1fZGlyZWN0aW9uID09IGtGb3J3YXJkKQorICAgICAgICAgICAg
ICAgIG1fdHJlZUl0ZXJhdG9yLT5uZXh0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbV90cmVlSXRlcmF0b3ItPnByZXYoKTsKKworICAgICAgICAgICAgbG9vcCA9IHRydWU7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2Fj
dGlvbkl0ZXJhdG9yOjpzZXRDdXJyZW50SXRlcmF0b3JUb1NtYWxsZXN0S2V5KCkKK3sKKyAgICBM
ZXZlbERCSXRlcmF0b3IqIHNtYWxsZXN0ID0gMDsKKworICAgIGlmIChtX3RyZWVJdGVyYXRvci0+
aXNWYWxpZCgpKQorICAgICAgICBzbWFsbGVzdCA9IG1fdHJlZUl0ZXJhdG9yLmdldCgpOworCisg
ICAgaWYgKG1fZGJJdGVyYXRvci0+aXNWYWxpZCgpKSB7CisgICAgICAgIGlmICghc21hbGxlc3Qg
fHwgbV9jb21wYXJhdG9yLT5jb21wYXJlKG1fZGJJdGVyYXRvci0+a2V5KCksIHNtYWxsZXN0LT5r
ZXkoKSkgPCAwKQorICAgICAgICAgICAgc21hbGxlc3QgPSBtX2RiSXRlcmF0b3IuZ2V0KCk7Cisg
ICAgfQorCisgICAgbV9jdXJyZW50ID0gc21hbGxlc3Q7Cit9CisKK3ZvaWQgTGV2ZWxEQlRyYW5z
YWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpzZXRDdXJyZW50SXRlcmF0b3JUb0xhcmdlc3RL
ZXkoKQoreworICAgIExldmVsREJJdGVyYXRvciogbGFyZ2VzdCA9IDA7CisKKyAgICBpZiAobV90
cmVlSXRlcmF0b3ItPmlzVmFsaWQoKSkKKyAgICAgICAgbGFyZ2VzdCA9IG1fdHJlZUl0ZXJhdG9y
LmdldCgpOworCisgICAgaWYgKG1fZGJJdGVyYXRvci0+aXNWYWxpZCgpKSB7CisgICAgICAgIGlm
ICghbGFyZ2VzdCB8fCBtX2NvbXBhcmF0b3ItPmNvbXBhcmUobV9kYkl0ZXJhdG9yLT5rZXkoKSwg
bGFyZ2VzdC0+a2V5KCkpID4gMCkKKyAgICAgICAgICAgIGxhcmdlc3QgPSBtX2RiSXRlcmF0b3Iu
Z2V0KCk7CisgICAgfQorCisgICAgbV9jdXJyZW50ID0gbGFyZ2VzdDsKK30KKwordm9pZCBMZXZl
bERCVHJhbnNhY3Rpb246OnJlZ2lzdGVySXRlcmF0b3IoVHJlZUl0ZXJhdG9yKiBpdGVyYXRvcikK
K3sKKyAgICBBU1NFUlQoIW1fdHJlZUl0ZXJhdG9ycy5jb250YWlucyhpdGVyYXRvcikpOworICAg
IG1fdHJlZUl0ZXJhdG9ycy5hZGQoaXRlcmF0b3IpOworfQorCit2b2lkIExldmVsREJUcmFuc2Fj
dGlvbjo6dW5yZWdpc3Rlckl0ZXJhdG9yKFRyZWVJdGVyYXRvciogaXRlcmF0b3IpCit7CisgICAg
QVNTRVJUKG1fdHJlZUl0ZXJhdG9ycy5jb250YWlucyhpdGVyYXRvcikpOworICAgIG1fdHJlZUl0
ZXJhdG9ycy5yZW1vdmUoaXRlcmF0b3IpOworfQorCit2b2lkIExldmVsREJUcmFuc2FjdGlvbjo6
cmVzZXRJdGVyYXRvcnMoKQoreworICAgIGZvciAoSGFzaFNldDxUcmVlSXRlcmF0b3IqPjo6aXRl
cmF0b3IgaSA9IG1fdHJlZUl0ZXJhdG9ycy5iZWdpbigpOyBpICE9IG1fdHJlZUl0ZXJhdG9ycy5l
bmQoKTsgKytpKSB7CisgICAgICAgIFRyZWVJdGVyYXRvciogdHJlZUl0ZXJhdG9yID0gKmk7Cisg
ICAgICAgIHRyZWVJdGVyYXRvci0+cmVzZXQoKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShMRVZFTERCKQorI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2
ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVs
ZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNzJlODYyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xl
dmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmgKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIExldmVsREJUcmFuc2FjdGlvbl9oCisjZGVmaW5lIExldmVsREJUcmFuc2FjdGlvbl9oCisK
KyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpZiBFTkFCTEUoTEVWRUxEQikKKworI2lu
Y2x1ZGUgIkxldmVsREJDb21wYXJhdG9yLmgiCisjaW5jbHVkZSAiTGV2ZWxEQkl0ZXJhdG9yLmgi
CisjaW5jbHVkZSAiTGV2ZWxEQlNsaWNlLmgiCisjaW5jbHVkZSA8d3RmL0FWTFRyZWUuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgTGV2ZWxEQkRhdGFiYXNlOworCit1c2luZyBXVEY6OkFWTFRy
ZWU7CisKK2NsYXNzIExldmVsREJUcmFuc2FjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPExldmVs
REJUcmFuc2FjdGlvbj4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPExldmVsREJU
cmFuc2FjdGlvbj4gY3JlYXRlKExldmVsREJEYXRhYmFzZSopOworCisgICAgfkxldmVsREJUcmFu
c2FjdGlvbigpOworICAgIGJvb2wgcHV0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIHZhbHVlKTsKKyAgICBib29sIHJlbW92ZShjb25zdCBMZXZlbERCU2xpY2Um
IGtleSk7CisgICAgYm9vbCBnZXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIFZlY3RvcjxjaGFy
PiYgdmFsdWUpOworICAgIGJvb2wgY29tbWl0KCk7CisgICAgdm9pZCByb2xsYmFjaygpOworCisg
ICAgUGFzc093blB0cjxMZXZlbERCSXRlcmF0b3I+IGNyZWF0ZUl0ZXJhdG9yKCk7CisKK3ByaXZh
dGU6CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKExldmVsREJEYXRhYmFzZSopOworCisgICAgc3Ry
dWN0IEFWTFRyZWVOb2RlIHsKKyAgICAgICAgVmVjdG9yPGNoYXI+IGtleTsKKyAgICAgICAgVmVj
dG9yPGNoYXI+IHZhbHVlOworICAgICAgICBib29sIGRlbGV0ZWQ7CisKKyAgICAgICAgQVZMVHJl
ZU5vZGUqIGxlc3M7CisgICAgICAgIEFWTFRyZWVOb2RlKiBncmVhdGVyOworICAgICAgICBpbnQg
YmFsYW5jZUZhY3RvcjsKKyAgICB9OworCisgICAgc3RydWN0IEFWTFRyZWVBYnN0cmFjdG9yIHsK
KyAgICAgICAgdHlwZWRlZiBBVkxUcmVlTm9kZSogaGFuZGxlOworICAgICAgICB0eXBlZGVmIHNp
emVfdCBzaXplOworICAgICAgICB0eXBlZGVmIExldmVsREJTbGljZSBrZXk7CisKKyAgICAgICAg
aGFuZGxlIGdldF9sZXNzKGhhbmRsZSBoKSB7IHJldHVybiBoLT5sZXNzOyB9CisgICAgICAgIHZv
aWQgc2V0X2xlc3MoaGFuZGxlIGgsIGhhbmRsZSBsZXNzKSB7IGgtPmxlc3MgPSBsZXNzOyB9Cisg
ICAgICAgIGhhbmRsZSBnZXRfZ3JlYXRlcihoYW5kbGUgaCkgeyByZXR1cm4gaC0+Z3JlYXRlcjsg
fQorICAgICAgICB2b2lkIHNldF9ncmVhdGVyKGhhbmRsZSBoLCBoYW5kbGUgZ3JlYXRlcikgeyBo
LT5ncmVhdGVyID0gZ3JlYXRlcjsgfQorCisgICAgICAgIGludCBnZXRfYmFsYW5jZV9mYWN0b3Io
aGFuZGxlIGgpIHsgcmV0dXJuIGgtPmJhbGFuY2VGYWN0b3I7IH0KKyAgICAgICAgdm9pZCBzZXRf
YmFsYW5jZV9mYWN0b3IoaGFuZGxlIGgsIGludCBiZikgeyBoLT5iYWxhbmNlRmFjdG9yID0gYmY7
IH0KKworICAgICAgICBpbnQgY29tcGFyZV9rZXlfa2V5KGNvbnN0IGtleSYga2EsIGNvbnN0IGtl
eSYga2IpIHsgcmV0dXJuIG1fY29tcGFyYXRvci0+Y29tcGFyZShrYSwga2IpOyB9CisgICAgICAg
IGludCBjb21wYXJlX2tleV9ub2RlKGNvbnN0IGtleSYgaywgaGFuZGxlIGgpIHsgcmV0dXJuIGNv
bXBhcmVfa2V5X2tleShrLCBoLT5rZXkpOyB9CisgICAgICAgIGludCBjb21wYXJlX25vZGVfbm9k
ZShoYW5kbGUgaGEsIGhhbmRsZSBoYikgeyByZXR1cm4gY29tcGFyZV9rZXlfa2V5KGhhLT5rZXks
IGhiLT5rZXkpOyB9CisKKyAgICAgICAgc3RhdGljIGhhbmRsZSBudWxsKCkgeyByZXR1cm4gMDsg
fQorCisgICAgICAgIGNvbnN0IExldmVsREJDb21wYXJhdG9yKiBtX2NvbXBhcmF0b3I7CisgICAg
fTsKKworICAgIHR5cGVkZWYgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3Rvcj4gVHJlZVR5cGU7CisK
KyAgICBjbGFzcyBUcmVlSXRlcmF0b3IgOiBwdWJsaWMgTGV2ZWxEQkl0ZXJhdG9yIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPFRyZWVJdGVyYXRvcj4gY3JlYXRlKExl
dmVsREJUcmFuc2FjdGlvbiopOworICAgICAgICB+VHJlZUl0ZXJhdG9yKCk7CisKKyAgICAgICAg
dmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNlZWtU
b0xhc3QoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNlZWsoY29uc3QgTGV2ZWxEQlNsaWNlJik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBuZXh0KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmV2
KCk7CisgICAgICAgIHZpcnR1YWwgTGV2ZWxEQlNsaWNlIGtleSgpIGNvbnN0OworICAgICAgICB2
aXJ0dWFsIExldmVsREJTbGljZSB2YWx1ZSgpIGNvbnN0OworICAgICAgICBib29sIGlzRGVsZXRl
ZCgpIGNvbnN0OworICAgICAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBUcmVlSXRlcmF0b3IoTGV2ZWxEQlRyYW5zYWN0aW9uKik7CisgICAgICAgIG11dGFibGUgVHJl
ZVR5cGU6Okl0ZXJhdG9yIG1faXRlcmF0b3I7IC8vIERlcmVmZXJlbmNpbmcgdGhpcyBpcyBub24t
Y29uc3QuCisgICAgICAgIFRyZWVUeXBlKiBtX3RyZWU7CisgICAgICAgIExldmVsREJUcmFuc2Fj
dGlvbiogbV90cmFuc2FjdGlvbjsKKyAgICAgICAgVmVjdG9yPGNoYXI+IG1fa2V5OworICAgIH07
CisKKyAgICBjbGFzcyBUcmFuc2FjdGlvbkl0ZXJhdG9yIDogcHVibGljIExldmVsREJJdGVyYXRv
ciB7CisgICAgcHVibGljOgorICAgICAgICB+VHJhbnNhY3Rpb25JdGVyYXRvcigpIHsgfTsKKyAg
ICAgICAgc3RhdGljIFBhc3NPd25QdHI8VHJhbnNhY3Rpb25JdGVyYXRvcj4gY3JlYXRlKFBhc3NS
ZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPik7CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzVmFs
aWQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNlZWtUb0xhc3QoKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHNlZWsoY29uc3QgTGV2ZWxEQlNsaWNlJiB0YXJnZXQpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgbmV4dCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHJldigpOworICAgICAg
ICB2aXJ0dWFsIExldmVsREJTbGljZSBrZXkoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBMZXZl
bERCU2xpY2UgdmFsdWUoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIFRyYW5zYWN0
aW9uSXRlcmF0b3IoUGFzc1JlZlB0cjxMZXZlbERCVHJhbnNhY3Rpb24+KTsKKyAgICAgICAgdm9p
ZCBoYW5kbGVDb25mbGljdHNBbmREZWxldGVzKCk7CisgICAgICAgIHZvaWQgc2V0Q3VycmVudEl0
ZXJhdG9yVG9TbWFsbGVzdEtleSgpOworICAgICAgICB2b2lkIHNldEN1cnJlbnRJdGVyYXRvclRv
TGFyZ2VzdEtleSgpOworCisgICAgICAgIFJlZlB0cjxMZXZlbERCVHJhbnNhY3Rpb24+IG1fdHJh
bnNhY3Rpb247CisgICAgICAgIGNvbnN0IExldmVsREJDb21wYXJhdG9yKiBtX2NvbXBhcmF0b3I7
CisgICAgICAgIE93blB0cjxUcmVlSXRlcmF0b3I+IG1fdHJlZUl0ZXJhdG9yOworICAgICAgICBP
d25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBtX2RiSXRlcmF0b3I7CisgICAgICAgIExldmVsREJJdGVy
YXRvciogbV9jdXJyZW50OworCisgICAgICAgIGVudW0gRGlyZWN0aW9uIHsKKyAgICAgICAgICAg
IGtGb3J3YXJkLAorICAgICAgICAgICAga1JldmVyc2UKKyAgICAgICAgfTsKKyAgICAgICAgRGly
ZWN0aW9uIG1fZGlyZWN0aW9uOworICAgIH07CisKKyAgICBib29sIHNldChjb25zdCBMZXZlbERC
U2xpY2UmIGtleSwgY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSwgYm9vbCBkZWxldGVkKTsKKyAg
ICB2b2lkIGNsZWFyVHJlZSgpOworICAgIHZvaWQgcmVnaXN0ZXJJdGVyYXRvcihUcmVlSXRlcmF0
b3IqKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJJdGVyYXRvcihUcmVlSXRlcmF0b3IqKTsKKyAgICB2
b2lkIHJlc2V0SXRlcmF0b3JzKCk7CisKKyAgICBMZXZlbERCRGF0YWJhc2UqIG1fZGI7CisgICAg
Y29uc3QgTGV2ZWxEQkNvbXBhcmF0b3IqIG1fY29tcGFyYXRvcjsKKyAgICBUcmVlVHlwZSBtX3Ry
ZWU7CisgICAgYm9vbCBtX2ZpbmlzaGVkOworICAgIEhhc2hTZXQ8VHJlZUl0ZXJhdG9yKj4gbV90
cmVlSXRlcmF0b3JzOworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKExFVkVMREIpCisjZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBMZXZlbERCVHJhbnNh
Y3Rpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZl
bERCV3JpdGVCYXRjaC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVs
REJXcml0ZUJhdGNoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzI0
NzY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9M
ZXZlbERCV3JpdGVCYXRjaC5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJMZXZlbERCV3JpdGVCYXRjaC5oIgorCisjaWYgRU5BQkxFKExF
VkVMREIpCisKKyNpbmNsdWRlICJMZXZlbERCU2xpY2UuaCIKKyNpbmNsdWRlIDxsZXZlbGRiL3Ns
aWNlLmg+CisjaW5jbHVkZSA8bGV2ZWxkYi93cml0ZV9iYXRjaC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1Bhc3NPd25QdHI8TGV2ZWxEQldyaXRlQmF0Y2g+IExldmVsREJXcml0ZUJhdGNo
OjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGV2ZWxEQldyaXRlQmF0Y2gp
OworfQorCitMZXZlbERCV3JpdGVCYXRjaDo6TGV2ZWxEQldyaXRlQmF0Y2goKQorICAgIDogbV93
cml0ZUJhdGNoKGFkb3B0UHRyKG5ldyBsZXZlbGRiOjpXcml0ZUJhdGNoKSkKK3sKK30KKworTGV2
ZWxEQldyaXRlQmF0Y2g6On5MZXZlbERCV3JpdGVCYXRjaCgpCit7Cit9CisKK3N0YXRpYyBsZXZl
bGRiOjpTbGljZSBtYWtlU2xpY2UoY29uc3QgTGV2ZWxEQlNsaWNlJiBzKQoreworICAgIHJldHVy
biBsZXZlbGRiOjpTbGljZShzLmJlZ2luKCksIHMuZW5kKCkgLSBzLmJlZ2luKCkpOworfQorCit2
b2lkIExldmVsREJXcml0ZUJhdGNoOjpwdXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIGNvbnN0
IExldmVsREJTbGljZSYgdmFsdWUpCit7CisgICAgbV93cml0ZUJhdGNoLT5QdXQobWFrZVNsaWNl
KGtleSksIG1ha2VTbGljZSh2YWx1ZSkpOworfQorCit2b2lkIExldmVsREJXcml0ZUJhdGNoOjpy
ZW1vdmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXkpCit7CisgICAgbV93cml0ZUJhdGNoLT5EZWxl
dGUobWFrZVNsaWNlKGtleSkpOworfQorCit2b2lkIExldmVsREJXcml0ZUJhdGNoOjpjbGVhcigp
Cit7CisgICAgbV93cml0ZUJhdGNoLT5DbGVhcigpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRjaC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRjaC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOGUwYzQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmgK
QEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGV2ZWxEQldyaXRlQmF0Y2hfaAorI2Rl
ZmluZSBMZXZlbERCV3JpdGVCYXRjaF9oCisKKyNpZiBFTkFCTEUoTEVWRUxEQikKKworI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3Bh
Y2UgbGV2ZWxkYiB7CitjbGFzcyBXcml0ZUJhdGNoOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIExldmVsREJTbGljZTsKKworLy8gV3JhcHBlciBhcm91bmQgbGV2ZWxkYjo6V3Jp
dGVCYXRjaC4KKy8vIFRoaXMgY2xhc3MgaG9sZHMgYSBjb2xsZWN0aW9uIG9mIHVwZGF0ZXMgdG8g
YXBwbHkgYXRvbWljYWxseSB0byBhIGRhdGFiYXNlLgorY2xhc3MgTGV2ZWxEQldyaXRlQmF0Y2gg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPExldmVsREJXcml0ZUJhdGNoPiBjcmVh
dGUoKTsKKyAgICB+TGV2ZWxEQldyaXRlQmF0Y2goKTsKKworICAgIHZvaWQgcHV0KGNvbnN0IExl
dmVsREJTbGljZSYga2V5LCBjb25zdCBMZXZlbERCU2xpY2UmIHZhbHVlKTsKKyAgICB2b2lkIHJl
bW92ZShjb25zdCBMZXZlbERCU2xpY2UmIGtleSk7IC8vIEFkZCByZW1vdmUgb3BlcmF0aW9uIHRv
IHRoZSBiYXRjaC4KKyAgICB2b2lkIGNsZWFyKCk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIExldmVsREJEYXRhYmFzZTsKKyAgICBMZXZlbERCV3JpdGVCYXRjaCgpOworCisgICAgT3du
UHRyPGxldmVsZGI6OldyaXRlQmF0Y2g+IG1fd3JpdGVCYXRjaDsKK307CisKK30KKworI2VuZGlm
IC8vIEVOQUJMRShMRVZFTERCKQorI2VuZGlmIC8vIExldmVsREJXcml0ZUJhdGNoX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCmluZGV4
IGFjYmU1MGQuLjZkNDU4MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJM
ZXZlbERCQmFja2luZ1N0b3JlLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkxldmVs
REJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkxldmVsREJJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxl
dmVsREJTbGljZS5oIgorI2luY2x1ZGUgIkxldmVsREJUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCiAKICNpZm5kZWYgSU5UNjRfTUFYCkBAIC00OSw3ICs1MCw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIElEQkxldmVsREJDb2Rpbmc7
CiAKLXN0YXRpYyBib29sIGdldEludChMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8
Y2hhcj4mIGtleSwgaW50NjRfdCYgZm91bmRJbnQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRy
YW5zYWN0aW9uPgorc3RhdGljIGJvb2wgZ2V0SW50KERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0
IFZlY3RvcjxjaGFyPiYga2V5LCBpbnQ2NF90JiBmb3VuZEludCkKIHsKICAgICBWZWN0b3I8Y2hh
cj4gcmVzdWx0OwogICAgIGlmICghZGItPmdldChrZXksIHJlc3VsdCkpCkBAIC01OSwxMiArNjEs
MTQgQEAgc3RhdGljIGJvb2wgZ2V0SW50KExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3Rv
cjxjaGFyPiYga2V5LCBpbnQ2NF90JiBmb3VuZEkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3Rh
dGljIGJvb2wgcHV0SW50KExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYg
a2V5LCBpbnQ2NF90IHZhbHVlKQordGVtcGxhdGUgPHR5cGVuYW1lIERCT3JUcmFuc2FjdGlvbj4K
K3N0YXRpYyBib29sIHB1dEludChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hh
cj4mIGtleSwgaW50NjRfdCB2YWx1ZSkKIHsKICAgICByZXR1cm4gZGItPnB1dChrZXksIGVuY29k
ZUludCh2YWx1ZSkpOwogfQogCi1zdGF0aWMgYm9vbCBnZXRTdHJpbmcoTGV2ZWxEQkRhdGFiYXNl
KiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIFN0cmluZyYgZm91bmRTdHJpbmcpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgorc3RhdGljIGJvb2wgZ2V0U3RyaW5nKERC
T3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBTdHJpbmcmIGZvdW5k
U3RyaW5nKQogewogICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7CiAgICAgaWYgKCFkYi0+Z2V0KGtl
eSwgcmVzdWx0KSkKQEAgLTc0LDcgKzc4LDggQEAgc3RhdGljIGJvb2wgZ2V0U3RyaW5nKExldmVs
REJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBTdHJpbmcmIGZvdW4KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgcHV0U3RyaW5nKExldmVsREJEYXRhYmFz
ZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgorc3RhdGljIGJvb2wgcHV0U3RyaW5nKERC
T3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUpCiB7CiAgICAgaWYgKCFkYi0+cHV0KGtleSwgZW5jb2RlU3RyaW5nKHZhbHVlKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI4MywxMiArMjg4LDEyIEBAIHZvaWQgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9y
PGludDY0X3Q+CiAgICAgfQogfQogCi1zdGF0aWMgaW50NjRfdCBnZXROZXdPYmplY3RTdG9yZUlk
KExldmVsREJEYXRhYmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJZCkKK3N0YXRpYyBpbnQ2NF90
IGdldE5ld09iamVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkKQogewogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBmcmVlTGlzdFN0YXJ0
S2V5ID0gT2JqZWN0U3RvcmVGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIDApOwogICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiBmcmVlTGlzdFN0b3BLZXkgPSBPYmplY3RTdG9yZUZyZWVMaXN0
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgSU5UNjRfTUFYKTsKIAotICAgIE93blB0cjxMZXZlbERC
SXRlcmF0b3I+IGl0ID0gZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgT3duUHRyPExldmVsREJJ
dGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBmb3IgKGl0
LT5zZWVrKGZyZWVMaXN0U3RhcnRLZXkpOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0
LT5rZXkoKSwgZnJlZUxpc3RTdG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsKICAgICAgICAgY29u
c3QgY2hhciogcCA9IGl0LT5rZXkoKS5iZWdpbigpOwogICAgICAgICBjb25zdCBjaGFyKiBsaW1p
dCA9IGl0LT5rZXkoKS5lbmQoKTsKQEAgLTI5Nyw3ICszMDIsNyBAQCBzdGF0aWMgaW50NjRfdCBn
ZXROZXdPYmplY3RTdG9yZUlkKExldmVsREJEYXRhYmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJ
ZCkKICAgICAgICAgcCA9IE9iamVjdFN0b3JlRnJlZUxpc3RLZXk6OmRlY29kZShwLCBsaW1pdCwg
JmZyZWVMaXN0S2V5KTsKICAgICAgICAgQVNTRVJUKHApOwogCi0gICAgICAgIGJvb2wgb2sgPSBk
Yi0+cmVtb3ZlKGl0LT5rZXkoKSk7CisgICAgICAgIGJvb2wgb2sgPSB0cmFuc2FjdGlvbi0+cmVt
b3ZlKGl0LT5rZXkoKSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKIAogICAgICAg
ICByZXR1cm4gZnJlZUxpc3RLZXkub2JqZWN0U3RvcmVJZCgpOwpAQCAtMzA1LDEzICszMTAsMTMg
QEAgc3RhdGljIGludDY0X3QgZ2V0TmV3T2JqZWN0U3RvcmVJZChMZXZlbERCRGF0YWJhc2UqIGRi
LCBpbnQ2NF90IGRhdGFiYXNlSWQpCiAKICAgICBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQgPSAt
MTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWF4T2JqZWN0U3RvcmVJZEtleSA9IERhdGFiYXNl
TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjprTWF4
T2JqZWN0U3RvcmVJZCk7Ci0gICAgaWYgKCFnZXRJbnQoZGIsIG1heE9iamVjdFN0b3JlSWRLZXks
IG1heE9iamVjdFN0b3JlSWQpKQorICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLCBtYXhPYmpl
Y3RTdG9yZUlkS2V5LCBtYXhPYmplY3RTdG9yZUlkKSkKICAgICAgICAgbWF4T2JqZWN0U3RvcmVJ
ZCA9IDA7CiAKICAgICBBU1NFUlQobWF4T2JqZWN0U3RvcmVJZCA+PSAwKTsKIAogICAgIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCA9IG1heE9iamVjdFN0b3JlSWQgKyAxOwotICAgIGJvb2wgb2sgPSBw
dXRJbnQoZGIsIG1heE9iamVjdFN0b3JlSWRLZXksIG9iamVjdFN0b3JlSWQpOworICAgIGJvb2wg
b2sgPSBwdXRJbnQodHJhbnNhY3Rpb24sIG1heE9iamVjdFN0b3JlSWRLZXksIG9iamVjdFN0b3Jl
SWQpOwogICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKIAogICAgIHJldHVybiBvYmplY3RTdG9y
ZUlkOwpAQCAtMzE5LDcgKzMyNCw4IEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld09iamVjdFN0b3Jl
SWQoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRfdCBkYXRhYmFzZUlkKQogCiBib29sIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3Jl
bWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKQogewotICAgIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCA9IGdldE5ld09iamVjdFN0b3JlSWQobV9kYi5nZXQoKSwgZGF0YWJhc2VJZCk7
CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBpbnQ2NF90IG9iamVjdFN0
b3JlSWQgPSBnZXROZXdPYmplY3RTdG9yZUlkKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBk
YXRhYmFzZUlkKTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBuYW1lS2V5ID0gT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApOwogICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlQYXRoS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDEpOwpAQCAtMzI5LDQzICszMzUsNDMg
QEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90
IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWF4SW5k
ZXhJZEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCA1KTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbmFtZXNLZXkgPSBPYmplY3RT
dG9yZU5hbWVzS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgbmFtZSk7CiAKLSAgICBib29sIG9rID0g
cHV0U3RyaW5nKG1fZGIuZ2V0KCksIG5hbWVLZXksIG5hbWUpOworICAgIGJvb2wgb2sgPSBwdXRT
dHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG5hbWVLZXksIG5hbWUpOwogICAgIGlm
ICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRTdHJpbmcobV9k
Yi5nZXQoKSwga2V5UGF0aEtleSwga2V5UGF0aCk7CisgICAgb2sgPSBwdXRTdHJpbmcobV9jdXJy
ZW50VHJhbnNhY3Rpb24uZ2V0KCksIGtleVBhdGhLZXksIGtleVBhdGgpOwogICAgIGlmICghb2sp
IHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9kYi5nZXQoKSwg
YXV0b0luY3JlbWVudEtleSwgYXV0b0luY3JlbWVudCk7CisgICAgb2sgPSBwdXRJbnQobV9jdXJy
ZW50VHJhbnNhY3Rpb24uZ2V0KCksIGF1dG9JbmNyZW1lbnRLZXksIGF1dG9JbmNyZW1lbnQpOwog
ICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVy
cm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQo
bV9kYi5nZXQoKSwgZXZpY3RhYmxlS2V5LCBmYWxzZSk7CisgICAgb2sgPSBwdXRJbnQobV9jdXJy
ZW50VHJhbnNhY3Rpb24uZ2V0KCksIGV2aWN0YWJsZUtleSwgZmFsc2UpOwogICAgIGlmICghb2sp
IHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9kYi5nZXQoKSwg
bGFzdFZlcnNpb25LZXksIDEpOworICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9u
LmdldCgpLCBsYXN0VmVyc2lvbktleSwgMSk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBMT0df
RVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBvayA9IHB1dEludChtX2RiLmdldCgpLCBtYXhJbmRleElkS2V5LCBr
TWluaW11bUluZGV4SWQpOworICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdl
dCgpLCBtYXhJbmRleElkS2V5LCBrTWluaW11bUluZGV4SWQpOwogICAgIGlmICghb2spIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9kYi5nZXQoKSwgbmFtZXNL
ZXksIG9iamVjdFN0b3JlSWQpOworICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9u
LmdldCgpLCBuYW1lc0tleSwgb2JqZWN0U3RvcmVJZCk7CiAgICAgaWYgKCFvaykgewogICAgICAg
ICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTM3NiwxMiArMzgyLDExIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGRlbGV0ZVJhbmdlKExldmVsREJEYXRh
YmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgYmVnaW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYg
ZW5kKQorc3RhdGljIGJvb2wgZGVsZXRlUmFuZ2UoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBiZWdpbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmQp
CiB7Ci0gICAgLy8gRklYTUU6IExldmVsREIgbWF5IGJlIGFibGUgdG8gcHJvdmlkZSBhIGJ1bGsg
b3BlcmF0aW9uIHRoYXQgd2UgY2FuIGRvIGZpcnN0LgotICAgIE93blB0cjxMZXZlbERCSXRlcmF0
b3I+IGl0ID0gZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgT3duUHRyPExldmVsREJJdGVyYXRv
cj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBmb3IgKGl0LT5zZWVr
KGJlZ2luKTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIGVuZCkgPCAw
OyBpdC0+bmV4dCgpKSB7Ci0gICAgICAgIGlmICghZGItPnJlbW92ZShpdC0+a2V5KCkpKQorICAg
ICAgICBpZiAoIXRyYW5zYWN0aW9uLT5yZW1vdmUoaXQtPmtleSgpKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTM5MCwxOCArMzk1LDIwIEBAIHN0YXRpYyBib29sIGRl
bGV0ZVJhbmdlKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgYmVnaW4s
IGNvbnN0IFZlCiAKIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3Rv
cmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CisgICAgQVNT
RVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKwogICAgIFN0cmluZyBvYmplY3RTdG9yZU5hbWU7
Ci0gICAgZ2V0U3RyaW5nKG1fZGIuZ2V0KCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29k
ZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgb2JqZWN0U3RvcmVOYW1lKTsKKyAgICBn
ZXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgb2JqZWN0U3RvcmVOYW1l
KTsKIAotICAgIGlmICghZGVsZXRlUmFuZ2UobV9kYi5nZXQoKSwgT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgNikpKQorICAgIGlm
ICghZGVsZXRlUmFuZ2UobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIE9iamVjdFN0b3JlTWV0
YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDYpKSkKICAg
ICAgICAgcmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgogCi0gICAgcHV0U3RyaW5nKG1f
ZGIuZ2V0KCksIE9iamVjdFN0b3JlRnJlZUxpc3RLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkKSwgIiIpOwotICAgIG1fZGItPnJlbW92ZShPYmplY3RTdG9yZU5hbWVzS2V5Ojpl
bmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVOYW1lKSk7CisgICAgcHV0U3RyaW5nKG1fY3Vy
cmVudFRyYW5zYWN0aW9uLmdldCgpLCBPYmplY3RTdG9yZUZyZWVMaXN0S2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCksICIiKTsKKyAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+
cmVtb3ZlKE9iamVjdFN0b3JlTmFtZXNLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZU5hbWUpKTsKIAotICAgIGlmICghZGVsZXRlUmFuZ2UobV9kYi5nZXQoKSwgSW5kZXhGcmVlTGlz
dEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBJbmRleEZyZWVMaXN0
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgSU5UNjRfTUFYKSkpCisgICAg
aWYgKCFkZWxldGVSYW5nZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgSW5kZXhGcmVlTGlz
dEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBJbmRleEZyZWVMaXN0
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgSU5UNjRfTUFYKSkpCiAgICAg
ICAgIHJldHVybjsgLy8gRklYTUU6IFJlcG9ydCBlcnJvci4KLSAgICBpZiAoIWRlbGV0ZVJhbmdl
KG1fZGIuZ2V0KCksIEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCAwLCAwKSwgSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIElOVDY0X01BWCwgMCkpKQorICAgIGlmICghZGVsZXRlUmFuZ2UobV9jdXJyZW50
VHJhbnNhY3Rpb24uZ2V0KCksIEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCAwLCAwKSwgSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIElOVDY0X01BWCwgMCkpKQogICAgICAgICByZXR1cm47IC8vIEZJWE1F
OiBSZXBvcnQgZXJyb3IuCiAKICAgICBjbGVhck9iamVjdFN0b3JlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQpOwpAQCAtNDEyLDcgKzQxOSw4IEBAIFN0cmluZyBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QKICAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CiAgICAgVmVjdG9yPGNoYXI+IGRh
dGE7CiAKLSAgICBpZiAoIW1fZGItPmdldChsZXZlbGRiS2V5LCBkYXRhKSkKKyAgICBBU1NFUlQo
bV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPmdl
dChsZXZlbGRiS2V5LCBkYXRhKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgaW50
NjRfdCB2ZXJzaW9uOwpAQCAtNDQ1LDE4ICs0NTMsMTggQEAgcHJpdmF0ZToKIH07CiB9CiAKLXN0
YXRpYyBpbnQ2NF90IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCitzdGF0aWMgaW50NjRfdCBn
ZXROZXdWZXJzaW9uTnVtYmVyKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewogICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBsYXN0VmVyc2lvbktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCA0KTsKIAogICAgIGludDY0X3QgbGFzdFZlcnNpb24g
PSAtMTsKLSAgICBpZiAoIWdldEludChkYiwgbGFzdFZlcnNpb25LZXksIGxhc3RWZXJzaW9uKSkK
KyAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbiwgbGFzdFZlcnNpb25LZXksIGxhc3RWZXJzaW9u
KSkKICAgICAgICAgbGFzdFZlcnNpb24gPSAwOwogCiAgICAgQVNTRVJUKGxhc3RWZXJzaW9uID49
IDApOwogCiAgICAgaW50NjRfdCB2ZXJzaW9uID0gbGFzdFZlcnNpb24gKyAxOwotICAgIGJvb2wg
b2sgPSBwdXRJbnQoZGIsIGxhc3RWZXJzaW9uS2V5LCB2ZXJzaW9uKTsKKyAgICBib29sIG9rID0g
cHV0SW50KHRyYW5zYWN0aW9uLCBsYXN0VmVyc2lvbktleSwgdmVyc2lvbik7CiAgICAgQVNTRVJU
X1VOVVNFRChvaywgb2spOwogCiAgICAgQVNTRVJUKHZlcnNpb24gPiBsYXN0VmVyc2lvbik7IC8v
IEZJWE1FOiBUaGluayBhYm91dCBob3cgd2Ugd2FudCB0byBoYW5kbGUgdGhlIG92ZXJmbG93IHNj
ZW5hcmlvLgpAQCAtNDY2LDE4ICs0NzQsMTkgQEAgc3RhdGljIGludDY0X3QgZ2V0TmV3VmVyc2lv
bk51bWJlcihMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDYKIAog
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGNv
bnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRl
bnRpZmllcikKIHsKLSAgICBpbnQ2NF90IHZlcnNpb24gPSBnZXROZXdWZXJzaW9uTnVtYmVyKG1f
ZGIuZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOworICAgIEFTU0VSVChtX2N1cnJl
bnRUcmFuc2FjdGlvbik7CisgICAgaW50NjRfdCB2ZXJzaW9uID0gZ2V0TmV3VmVyc2lvbk51bWJl
cihtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7
CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG9iamVjdFN0b3JlZGF0YUtleSA9IE9iamVjdFN0b3Jl
RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CiAKICAgICBW
ZWN0b3I8Y2hhcj4gdjsKICAgICB2LmFwcGVuZChlbmNvZGVWYXJJbnQodmVyc2lvbikpOwogICAg
IHYuYXBwZW5kKGVuY29kZVN0cmluZyh2YWx1ZSkpOwogCi0gICAgaWYgKCFtX2RiLT5wdXQob2Jq
ZWN0U3RvcmVkYXRhS2V5LCB2KSkKKyAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5wdXQo
b2JqZWN0U3RvcmVkYXRhS2V5LCB2KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29u
c3QgVmVjdG9yPGNoYXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwotICAgIGlmICghbV9kYi0+cHV0KGV4aXN0
c0VudHJ5S2V5LCBlbmNvZGVJbnQodmVyc2lvbikpKQorICAgIGlmICghbV9jdXJyZW50VHJhbnNh
Y3Rpb24tPnB1dChleGlzdHNFbnRyeUtleSwgZW5jb2RlSW50KHZlcnNpb24pKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNv
cmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8TGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihyZWNv
cmRJZGVudGlmaWVyKTsKQEAgLTQ4OCwxMCArNDk3LDExIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iCiAKIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZShpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKKyAgICBBU1NFUlQobV9j
dXJyZW50VHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IEtl
eVByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKS5lbmNvZGUoKTsKICAgICBjb25z
dCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IEtleVByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkICsgMSwgMCkuZW5jb2RlKCk7CiAKLSAgICBkZWxldGVSYW5nZShtX2RiLmdldCgpLCBzdGFy
dEtleSwgc3RvcEtleSk7CisgICAgZGVsZXRlUmFuZ2UobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0
KCksIHN0YXJ0S2V5LCBzdG9wS2V5KTsKIH0KIAogUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6
Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3Jl
YXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKQpAQCAtNTAxLDE3ICs1MTEsMTkgQEAgUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZToKIAogdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVP
YmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQog
eworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgY29uc3QgTGV2ZWxEQlJl
Y29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29u
c3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihyZWNvcmRJZGVudGlmaWVyKTsKICAgICBjb25z
dCBWZWN0b3I8Y2hhcj4ga2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7
Ci0gICAgbV9kYi0+cmVtb3ZlKGtleSk7CisgICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92
ZShrZXkpOwogfQogCiBkb3VibGUgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6bmV4dEF1dG9JbmNy
ZW1lbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7
CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBtaW5JREJLZXkoKSk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkg
PSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBt
YXhJREJLZXkoKSk7CiAKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNy
ZWF0ZUl0ZXJhdG9yKCk7CisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJl
bnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKIAogICAgIGludCBtYXhOdW1lcmljS2V5
ID0gMDsKIApAQCAtNTM3LDEwICs1NDksMTEgQEAgZG91YmxlIElEQkxldmVsREJCYWNraW5nU3Rv
cmU6Om5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjQKIAog
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpCiB7Cisg
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
bGV2ZWxkYktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGtleSk7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAKLSAgICBpZiAoIW1fZGIt
PmdldChsZXZlbGRiS2V5LCBkYXRhKSkKKyAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5n
ZXQobGV2ZWxkYktleSwgZGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGludDY0
X3QgdmVyc2lvbjsKQEAgLTU1NSwxMCArNTY4LDExIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QK
IAogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVj
b3JkQ2FsbGJhY2smIGNhbGxiYWNrKQogeworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlv
bik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5
OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWluSURCS2V5KCkpOwogICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWF4SURCS2V5KCkpOwogCi0gICAgT3duUHRyPExldmVs
REJJdGVyYXRvcj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIE93blB0cjxMZXZl
bERCSXRlcmF0b3I+IGl0ID0gbV9jdXJyZW50VHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7
CiAgICAgZm9yIChpdC0+c2VlayhzdGFydEtleSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtl
eXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsKICAgICAgICAgY29uc3Qg
Y2hhciAqcCA9IGl0LT5rZXkoKS5iZWdpbigpOwogICAgICAgICBjb25zdCBjaGFyICpsaW1pdCA9
IGl0LT5rZXkoKS5lbmQoKTsKQEAgLTYyMiwxMiArNjM2LDEyIEBAIHZvaWQgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJCiAgICAgfQogfQogCi1zdGF0aWMgaW50NjRfdCBnZXROZXdJbmRleElkKExldmVsREJE
YXRhYmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQor
c3RhdGljIGludDY0X3QgZ2V0TmV3SW5kZXhJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKICAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BL
ZXkgPSBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
SU5UNjRfTUFYKTsKIAotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gZGItPmNyZWF0
ZUl0ZXJhdG9yKCk7CisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlv
bi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlz
VmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQo
KSkgewogICAgICAgICBjb25zdCBjaGFyKiBwID0gaXQtPmtleSgpLmJlZ2luKCk7CiAgICAgICAg
IGNvbnN0IGNoYXIqIGxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOwpAQCAtNjM2LDcgKzY1MCw3IEBA
IHN0YXRpYyBpbnQ2NF90IGdldE5ld0luZGV4SWQoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iCiAgICAgICAgIHAgPSBJbmRleEZyZWVMaXN0S2V5Ojpk
ZWNvZGUocCwgbGltaXQsICZmcmVlTGlzdEtleSk7CiAgICAgICAgIEFTU0VSVChwKTsKIAotICAg
ICAgICBib29sIG9rID0gZGItPnJlbW92ZShpdC0+a2V5KCkpOworICAgICAgICBib29sIG9rID0g
dHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG9r
LCBvayk7CiAKICAgICAgICAgQVNTRVJUKGZyZWVMaXN0S2V5LmluZGV4SWQoKSA+PSBrTWluaW11
bUluZGV4SWQpOwpAQCAtNjQ1LDEzICs2NTksMTMgQEAgc3RhdGljIGludDY0X3QgZ2V0TmV3SW5k
ZXhJZChMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2IK
IAogICAgIGludDY0X3QgbWF4SW5kZXhJZCA9IC0xOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBt
YXhJbmRleElkS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIDUpOwotICAgIGlmICghZ2V0SW50KGRiLCBtYXhJbmRleElkS2V5LCBt
YXhJbmRleElkKSkKKyAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwg
bWF4SW5kZXhJZCkpCiAgICAgICAgIG1heEluZGV4SWQgPSBrTWluaW11bUluZGV4SWQ7CiAKICAg
ICBBU1NFUlQobWF4SW5kZXhJZCA+PSAwKTsKIAogICAgIGludDY0X3QgaW5kZXhJZCA9IG1heElu
ZGV4SWQgKyAxOwotICAgIGJvb2wgb2sgPSBwdXRJbnQoZGIsIG1heEluZGV4SWRLZXksIGluZGV4
SWQpOworICAgIGJvb2wgb2sgPSBwdXRJbnQodHJhbnNhY3Rpb24sIG1heEluZGV4SWRLZXksIGlu
ZGV4SWQpOwogICAgIGlmICghb2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNjYwLDI1
ICs2NzQsMjYgQEAgc3RhdGljIGludDY0X3QgZ2V0TmV3SW5kZXhJZChMZXZlbERCRGF0YWJhc2Uq
IGRiLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2IKIAogYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpjcmVhdGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wg
aXNVbmlxdWUsIGludDY0X3QmIGluZGV4SWQpCiB7Ci0gICAgaW5kZXhJZCA9IGdldE5ld0luZGV4
SWQobV9kYi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKG1f
Y3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBpbmRleElkID0gZ2V0TmV3SW5kZXhJZChtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CiAKICAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gbmFtZUtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAwKTsKICAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gdW5pcXVlS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGluZGV4SWQsIDEpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlQYXRoS2V5
ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGlu
ZGV4SWQsIDIpOwogCi0gICAgYm9vbCBvayA9IHB1dFN0cmluZyhtX2RiLmdldCgpLCBuYW1lS2V5
LCBuYW1lKTsKKyAgICBib29sIG9rID0gcHV0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdl
dCgpLCBuYW1lS2V5LCBuYW1lKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigi
SW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIG9rID0gcHV0SW50KG1fZGIuZ2V0KCksIHVuaXF1ZUtleSwgaXNVbmlxdWUpOwor
ICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCB1bmlxdWVLZXksIGlz
VW5pcXVlKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5k
ZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9r
ID0gcHV0U3RyaW5nKG1fZGIuZ2V0KCksIGtleVBhdGhLZXksIGtleVBhdGgpOworICAgIG9rID0g
cHV0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBrZXlQYXRoS2V5LCBrZXlQYXRo
KTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBE
QiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjk4LDE5ICs3MTMsMjAgQEAg
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG8KICAgICBBU1NFUlQoaW5kZXhJZCA+PSBrTWluaW11bUlu
ZGV4SWQpOwogICAgIGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3Jk
SWRlbnRpZmllciA9IHN0YXRpY19jYXN0PGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4o
cmVjb3JkSWRlbnRpZmllcik7CiAKLSAgICBjb25zdCBpbnQ2NF90IGdsb2JhbFNlcXVlbmNlTnVt
YmVyID0gZ2V0TmV3VmVyc2lvbk51bWJlcihtX2RiLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkKTsKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIGNvbnN0IGlu
dDY0X3QgZ2xvYmFsU2VxdWVuY2VOdW1iZXIgPSBnZXROZXdWZXJzaW9uTnVtYmVyKG1fY3VycmVu
dFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKICAgICBjb25z
dCBWZWN0b3I8Y2hhcj4gaW5kZXhEYXRhS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5LCBnbG9iYWxTZXF1ZW5jZU51bWJlcik7
CiAKICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKICAgICBkYXRhLmFwcGVuZChlbmNvZGVWYXJJbnQo
bGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnZlcnNpb24oKSkpOwogICAgIGRhdGEuYXBwZW5kKGxl
dmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOwogCi0gICAgcmV0dXJuIG1fZGIt
PnB1dChpbmRleERhdGFLZXksIGRhdGEpOworICAgIHJldHVybiBtX2N1cnJlbnRUcmFuc2FjdGlv
bi0+cHV0KGluZGV4RGF0YUtleSwgZGF0YSk7CiB9CiAKLXN0YXRpYyBib29sIGZpbmRHcmVhdGVz
dEtleUxlc3NUaGFuKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgdGFy
Z2V0LCBWZWN0b3I8Y2hhcj4mIGZvdW5kS2V5KQorc3RhdGljIGJvb2wgZmluZEdyZWF0ZXN0S2V5
TGVzc1RoYW4oTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNo
YXI+JiB0YXJnZXQsIFZlY3RvcjxjaGFyPiYgZm91bmRLZXkpCiB7Ci0gICAgT3duUHRyPExldmVs
REJJdGVyYXRvcj4gaXQgPSBkYi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBPd25QdHI8TGV2ZWxE
Qkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwogICAgIGl0LT5z
ZWVrKHRhcmdldCk7CiAKICAgICBpZiAoIWl0LT5pc1ZhbGlkKCkpIHsKQEAgLTc0NSwxMiArNzYx
LDEyIEBAIFN0cmluZyBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RWaWFJbmRleChp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqCiAgICAgcmV0dXJuIGdldE9iamVjdFN0b3Jl
UmVjb3JkKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsICpwcmltYXJ5S2V5KTsKIH0KIAotc3Rh
dGljIGJvb2wgdmVyc2lvbkV4aXN0cyhMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCB2ZXJzaW9uLCBjb25zdCBWZWN0
b3I8Y2hhcj4mIGVuY29kZWRQcmltYXJ5S2V5KQorc3RhdGljIGJvb2wgdmVyc2lvbkV4aXN0cyhM
ZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCB2ZXJzaW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVu
Y29kZWRQcmltYXJ5S2V5KQogewogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBFeGlzdHNF
bnRyeUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGVuY29kZWRQcmltYXJ5
S2V5KTsKICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKIAotICAgIGlmICghZGItPmdldChrZXksIGRh
dGEpKQorICAgIGlmICghdHJhbnNhY3Rpb24tPmdldChrZXksIGRhdGEpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICByZXR1cm4gZGVjb2RlSW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQo
KSkgPT0gdmVyc2lvbjsKQEAgLTc1OCw4ICs3NzQsOSBAQCBzdGF0aWMgYm9vbCB2ZXJzaW9uRXhp
c3RzKExldmVsREJEYXRhYmFzZSogZGIsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
YwogCiBQYXNzUmVmUHRyPElEQktleT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFy
eUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQogeworICAgIEFTU0VSVChtX2N1cnJl
bnRUcmFuc2FjdGlvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGxldmVsZGJLZXkgPSBJbmRl
eERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXks
IDApOwotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9kYi0+Y3JlYXRlSXRlcmF0
b3IoKTsKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5zYWN0
aW9uLT5jcmVhdGVJdGVyYXRvcigpOwogICAgIGl0LT5zZWVrKGxldmVsZGJLZXkpOwogCiAgICAg
Zm9yICg7OykgewpAQCAtNzc1LDkgKzc5Miw5IEBAIFBhc3NSZWZQdHI8SURCS2V5PiBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzCiAg
ICAgICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkUHJpbWFyeUtleTsKICAgICAgICAgZW5jb2RlZFBy
aW1hcnlLZXkuYXBwZW5kKHAsIGl0LT52YWx1ZSgpLmVuZCgpIC0gcCk7CiAKLSAgICAgICAgaWYg
KCF2ZXJzaW9uRXhpc3RzKG1fZGIuZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHZl
cnNpb24sIGVuY29kZWRQcmltYXJ5S2V5KSkgeworICAgICAgICBpZiAoIXZlcnNpb25FeGlzdHMo
bV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHZl
cnNpb24sIGVuY29kZWRQcmltYXJ5S2V5KSkgewogICAgICAgICAgICAgLy8gRGVsZXRlIHN0YWxl
IGluZGV4IGRhdGEgZW50cnkgYW5kIGNvbnRpbnVlLgotICAgICAgICAgICAgbV9kYi0+cmVtb3Zl
KGl0LT5rZXkoKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGl0
LT5rZXkoKSk7CiAgICAgICAgICAgICBpdC0+bmV4dCgpOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KQEAgLTc5MCw4ICs4MDcsOSBAQCBQYXNzUmVmUHRyPElEQktleT4gSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhcwog
CiBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5JiBrZXkpCiB7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKICAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxEQktleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwgMCk7Ci0gICAgT3duUHRyPExldmVs
REJJdGVyYXRvcj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIE93blB0cjxMZXZl
bERCSXRlcmF0b3I+IGl0ID0gbV9jdXJyZW50VHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7
CiAKICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAKQEAgLTgxOCw4ICs4MzYsOCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBmaXJzdFNlZWsoKTsKIAogcHJvdGVjdGVkOgotICAgIEN1cnNvckltcGxDb21t
b24oTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBsb3dLZXksIGJvb2wg
bG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBoaWdoS2V5LCBib29sIGhpZ2hPcGVuLCBib29s
IGZvcndhcmQpCi0gICAgICAgIDogbV9kYihkYikKKyAgICBDdXJzb3JJbXBsQ29tbW9uKExldmVs
REJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgbG93S2V5LCBi
b29sIGxvd09wZW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgaGlnaEtleSwgYm9vbCBoaWdoT3Blbiwg
Ym9vbCBmb3J3YXJkKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAg
ICAgICwgbV9sb3dLZXkobG93S2V5KQogICAgICAgICAsIG1fbG93T3Blbihsb3dPcGVuKQogICAg
ICAgICAsIG1faGlnaEtleShoaWdoS2V5KQpAQCAtODI5LDcgKzg0Nyw3IEBAIHByb3RlY3RlZDoK
ICAgICB9CiAgICAgdmlydHVhbCB+Q3Vyc29ySW1wbENvbW1vbigpIHt9CiAKLSAgICBMZXZlbERC
RGF0YWJhc2UqIG1fZGI7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBtX3RyYW5zYWN0aW9uOwog
ICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IG1faXRlcmF0b3I7CiAgICAgVmVjdG9yPGNoYXI+
IG1fbG93S2V5OwogICAgIGJvb2wgbV9sb3dPcGVuOwpAQCAtODQxLDcgKzg1OSw3IEBAIHByb3Rl
Y3RlZDoKIAogYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpmaXJzdFNlZWsoKQogewotICAgIG1faXRl
cmF0b3IgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIG1faXRlcmF0b3IgPSBtX3RyYW5z
YWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwogCiAgICAgaWYgKG1fZm9yd2FyZCkKICAgICAgICAg
bV9pdGVyYXRvci0+c2VlayhtX2xvd0tleSk7CkBAIC05MDIsNyArOTIwLDcgQEAgYm9vbCBDdXJz
b3JJbXBsQ29tbW9uOjpjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSoga2V5KQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIFZlY3RvcjxjaGFyPiB0cmFzaDsKLSAgICAg
ICAgaWYgKCFtX2RiLT5nZXQobV9pdGVyYXRvci0+a2V5KCksIHRyYXNoKSkKKyAgICAgICAgaWYg
KCFtX3RyYW5zYWN0aW9uLT5nZXQobV9pdGVyYXRvci0+a2V5KCksIHRyYXNoKSkKICAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAobV9mb3J3YXJkICYmIG1faGlnaE9wZW4gJiYg
Y29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9oaWdoS2V5KSA+PSAwKSAvLyBo
aWdoIGtleSBub3QgaW5jbHVkZWQgaW4gcmFuZ2UKQEAgLTkzNyw5ICs5NTUsOSBAQCBib29sIEN1
cnNvckltcGxDb21tb246OmNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5KiBrZXkpCiAKIGNs
YXNzIE9iamVjdFN0b3JlQ3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGNyZWF0
ZShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tleSwgYm9vbCBs
b3dPcGVuLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9wZW4sIGJvb2wg
Zm9yd2FyZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGNy
ZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4m
IGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJvb2wg
aGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKGRiLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXksIGhp
Z2hPcGVuLCBmb3J3YXJkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT2JqZWN0U3Rv
cmVDdXJzb3JJbXBsKHRyYW5zYWN0aW9uLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXksIGhpZ2hP
cGVuLCBmb3J3YXJkKSk7CiAgICAgfQogCiAgICAgLy8gQ3Vyc29ySW1wbENvbW1vbgpAQCAtOTQ5
LDggKzk2Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsK
IAogcHJpdmF0ZToKLSAgICBPYmplY3RTdG9yZUN1cnNvckltcGwoTGV2ZWxEQkRhdGFiYXNlKiBk
YiwgY29uc3QgVmVjdG9yPGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9y
PGNoYXI+JiBoaWdoS2V5LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCi0gICAgICAgIDog
Q3Vyc29ySW1wbENvbW1vbihkYiwgbG93S2V5LCBsb3dPcGVuLCBoaWdoS2V5LCBoaWdoT3Blbiwg
Zm9yd2FyZCkKKyAgICBPYmplY3RTdG9yZUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29u
c3QgVmVjdG9yPGNoYXI+JiBoaWdoS2V5LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCisg
ICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbih0cmFuc2FjdGlvbiwgbG93S2V5LCBsb3dPcGVuLCBo
aWdoS2V5LCBoaWdoT3BlbiwgZm9yd2FyZCkKICAgICB7CiAgICAgfQogCkBAIC05ODQsOSArMTAw
Miw5IEBAIGJvb2wgT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAKIGNs
YXNzIEluZGV4S2V5Q3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleEtleUN1cnNvckltcGw+IGNyZWF0ZShMZXZl
bERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tleSwgYm9vbCBsb3dPcGVu
LCBjb25zdCBWZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9wZW4sIGJvb2wgZm9yd2Fy
ZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleEtleUN1cnNvckltcGw+IGNyZWF0ZShMZXZl
bERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGxvd0tleSwg
Ym9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJvb2wgaGlnaE9wZW4s
IGJvb2wgZm9yd2FyZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhL
ZXlDdXJzb3JJbXBsKGRiLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXksIGhpZ2hPcGVuLCBmb3J3
YXJkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhLZXlDdXJzb3JJbXBsKHRy
YW5zYWN0aW9uLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXksIGhpZ2hPcGVuLCBmb3J3YXJkKSk7
CiAgICAgfQogCiAgICAgLy8gQ3Vyc29ySW1wbENvbW1vbgpAQCAtOTk3LDggKzEwMTUsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50Um93KCk7CiAKIHByaXZhdGU6Ci0g
ICAgSW5kZXhLZXlDdXJzb3JJbXBsKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3Rvcjxj
aGFyPiYgbG93S2V5LCBib29sIGxvd09wZW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgaGlnaEtleSwg
Ym9vbCBoaWdoT3BlbiwgYm9vbCBmb3J3YXJkKQotICAgICAgICA6IEN1cnNvckltcGxDb21tb24o
ZGIsIGxvd0tleSwgbG93T3BlbiwgaGlnaEtleSwgaGlnaE9wZW4sIGZvcndhcmQpCisgICAgSW5k
ZXhLZXlDdXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IFZl
Y3RvcjxjaGFyPiYgbG93S2V5LCBib29sIGxvd09wZW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgaGln
aEtleSwgYm9vbCBoaWdoT3BlbiwgYm9vbCBmb3J3YXJkKQorICAgICAgICA6IEN1cnNvckltcGxD
b21tb24odHJhbnNhY3Rpb24sIGxvd0tleSwgbG93T3BlbiwgaGlnaEtleSwgaGlnaE9wZW4sIGZv
cndhcmQpCiAgICAgewogICAgIH0KIApAQCAtMTAyOCw3ICsxMDQ2LDcgQEAgYm9vbCBJbmRleEtl
eUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICBWZWN0b3I8Y2hhcj4gcHJpbWFyeUxl
dmVsREJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShpbmRleERhdGFLZXkuZGF0YWJh
c2VJZCgpLCBpbmRleERhdGFLZXkub2JqZWN0U3RvcmVJZCgpLCAqbV9wcmltYXJ5S2V5KTsKIAog
ICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgaWYgKCFtX2RiLT5nZXQocHJpbWFyeUxldmVs
REJLZXksIHJlc3VsdCkpCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5nZXQocHJpbWFyeUxldmVs
REJLZXksIHJlc3VsdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGludDY0X3Qgb2Jq
ZWN0U3RvcmVEYXRhVmVyc2lvbjsKQEAgLTEwMzgsNyArMTA1Niw3IEBAIGJvb2wgSW5kZXhLZXlD
dXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChvYmplY3RTdG9yZURhdGFWZXJzaW9uICE9IGluZGV4RGF0YVZlcnNpb24pIHsgLy8gRklY
TUU6IFRoaXMgaXMgcHJvYmFibHkgbm90IHZlcnkgd2VsbCBjb3ZlcmVkIGJ5IHRoZSBsYXlvdXQg
dGVzdHMuCi0gICAgICAgIG1fZGItPnJlbW92ZShtX2l0ZXJhdG9yLT5rZXkoKSk7CisgICAgICAg
IG1fdHJhbnNhY3Rpb24tPnJlbW92ZShtX2l0ZXJhdG9yLT5rZXkoKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKQEAgLTEwNDcsOSArMTA2NSw5IEBAIGJvb2wgSW5kZXhLZXlDdXJz
b3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAKIGNsYXNzIEluZGV4Q3Vyc29ySW1wbCA6IHB1Ymxp
YyBDdXJzb3JJbXBsQ29tbW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRl
eEN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBWZWN0b3I8Y2hh
cj4mIGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGhpZ2hLZXksIGJv
b2wgaGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleEN1
cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIGxvd0tleSwgYm9vbCBsb3dPcGVuLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGhp
Z2hLZXksIGJvb2wgaGlnaE9wZW4sIGJvb2wgZm9yd2FyZCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSW5kZXhDdXJzb3JJbXBsKGRiLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hL
ZXksIGhpZ2hPcGVuLCBmb3J3YXJkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5k
ZXhDdXJzb3JJbXBsKHRyYW5zYWN0aW9uLCBsb3dLZXksIGxvd09wZW4sIGhpZ2hLZXksIGhpZ2hP
cGVuLCBmb3J3YXJkKSk7CiAgICAgfQogCiAgICAgLy8gQ3Vyc29ySW1wbENvbW1vbgpAQCAtMTA2
MCw4ICsxMDc4LDggQEAgcHVibGljOgogICAgIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKIAogcHJp
dmF0ZToKLSAgICBJbmRleEN1cnNvckltcGwoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgVmVj
dG9yPGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBoaWdo
S2V5LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCi0gICAgICAgIDogQ3Vyc29ySW1wbENv
bW1vbihkYiwgbG93S2V5LCBsb3dPcGVuLCBoaWdoS2V5LCBoaWdoT3BlbiwgZm9yd2FyZCkKKyAg
ICBJbmRleEN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3Qg
VmVjdG9yPGNoYXI+JiBsb3dLZXksIGJvb2wgbG93T3BlbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBo
aWdoS2V5LCBib29sIGhpZ2hPcGVuLCBib29sIGZvcndhcmQpCisgICAgICAgIDogQ3Vyc29ySW1w
bENvbW1vbih0cmFuc2FjdGlvbiwgbG93S2V5LCBsb3dPcGVuLCBoaWdoS2V5LCBoaWdoT3Blbiwg
Zm9yd2FyZCkKICAgICB7CiAgICAgfQogCkBAIC0xMDk2LDcgKzExMTQsNyBAQCBib29sIEluZGV4
Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgIG1fcHJpbWFyeUxldmVsREJLZXkgPSBP
YmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShpbmRleERhdGFLZXkuZGF0YWJhc2VJZCgpLCBpbmRl
eERhdGFLZXkub2JqZWN0U3RvcmVJZCgpLCAqbV9wcmltYXJ5S2V5KTsKIAogICAgIFZlY3Rvcjxj
aGFyPiByZXN1bHQ7Ci0gICAgaWYgKCFtX2RiLT5nZXQobV9wcmltYXJ5TGV2ZWxEQktleSwgcmVz
dWx0KSkKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmdldChtX3ByaW1hcnlMZXZlbERCS2V5LCBy
ZXN1bHQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpbnQ2NF90IG9iamVjdFN0b3Jl
RGF0YVZlcnNpb247CkBAIC0xMTA2LDcgKzExMjQsNyBAQCBib29sIEluZGV4Q3Vyc29ySW1wbDo6
bG9hZEN1cnJlbnRSb3coKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAob2JqZWN0
U3RvcmVEYXRhVmVyc2lvbiAhPSBpbmRleERhdGFWZXJzaW9uKSB7Ci0gICAgICAgIG1fZGItPnJl
bW92ZShtX2l0ZXJhdG9yLT5rZXkoKSk7CisgICAgICAgIG1fdHJhbnNhY3Rpb24tPnJlbW92ZSht
X2l0ZXJhdG9yLT5rZXkoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTEx
MTYsOSArMTEzNCw5IEBAIGJvb2wgSW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAK
IH0KIAotc3RhdGljIGJvb2wgZmluZExhc3RJbmRleEtleUVxdWFsVG8oTGV2ZWxEQkRhdGFiYXNl
KiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiB0YXJnZXQsIFZlY3RvcjxjaGFyPiYgZm91bmRLZXkp
CitzdGF0aWMgYm9vbCBmaW5kTGFzdEluZGV4S2V5RXF1YWxUbyhMZXZlbERCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIHRhcmdldCwgVmVjdG9yPGNoYXI+JiBm
b3VuZEtleSkKIHsKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IGRiLT5jcmVhdGVJ
dGVyYXRvcigpOworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gdHJhbnNhY3Rpb24t
PmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgaXQtPnNlZWsodGFyZ2V0KTsKIAogICAgIGlmICghaXQt
PmlzVmFsaWQoKSkKQEAgLTExMzUsNiArMTE1Myw3IEBAIHN0YXRpYyBib29sIGZpbmRMYXN0SW5k
ZXhLZXlFcXVhbFRvKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgdGFy
CiAKIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5n
U3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVj
dGlvbiBkaXJlY3Rpb24pCiB7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKICAg
ICBib29sIGxvd2VyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+bG93ZXIoKTsKICAgICBib29sIHVw
cGVyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+dXBwZXIoKTsKICAgICBib29sIGZvcndhcmQgPSAo
ZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09
IElEQkN1cnNvcjo6TkVYVCk7CkBAIC0xMTU1LDcgKzExNzQsNyBAQCBQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3Rv
cmVDdXJzbwogICAgICAgICB1cHBlck9wZW4gPSB0cnVlOyAvLyBOb3QgaW5jbHVkZWQuCiAKICAg
ICAgICAgaWYgKCFmb3J3YXJkKSB7IC8vIFdlIG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCi0gICAg
ICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuKG1fZGIuZ2V0KCksIHN0b3BLZXks
IHN0b3BLZXkpKQorICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbihtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgc3RvcEtleSwgc3RvcEtleSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB1cHBlck9wZW4gPSBmYWxzZTsKICAgICAgICAgfQpA
QCAtMTE2NCw3ICsxMTgzLDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4g
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc28KICAgICAgICAgdXBw
ZXJPcGVuID0gcmFuZ2UtPnVwcGVyT3BlbigpOwogICAgIH0KIAotICAgIFJlZlB0cjxPYmplY3RT
dG9yZUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6Y3JlYXRlKG1f
ZGIuZ2V0KCksIHN0YXJ0S2V5LCBsb3dlck9wZW4sIHN0b3BLZXksIHVwcGVyT3BlbiwgZm9yd2Fy
ZCk7CisgICAgUmVmUHRyPE9iamVjdFN0b3JlQ3Vyc29ySW1wbD4gY3Vyc29yID0gT2JqZWN0U3Rv
cmVDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIHN0YXJ0S2V5
LCBsb3dlck9wZW4sIHN0b3BLZXksIHVwcGVyT3BlbiwgZm9yd2FyZCk7CiAgICAgaWYgKCFjdXJz
b3ItPmZpcnN0U2VlaygpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTE3Myw2ICsxMTkyLDcg
QEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc28KIAogUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6
OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQog
eworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgYm9vbCBsb3dlckJvdW5k
ID0gcmFuZ2UgJiYgcmFuZ2UtPmxvd2VyKCk7CiAgICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2Ug
JiYgcmFuZ2UtPnVwcGVyKCk7CiAgICAgYm9vbCBmb3J3YXJkID0gKGRpcmVjdGlvbiA9PSBJREJD
dXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQp
OwpAQCAtMTE5MywxOCArMTIxMywxOCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vy
c29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoaQogICAgICAg
ICB1cHBlck9wZW4gPSBmYWxzZTsgLy8gSW5jbHVkZWQuCiAKICAgICAgICAgaWYgKCFmb3J3YXJk
KSB7IC8vIFdlIG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCi0gICAgICAgICAgICBpZiAoIWZpbmRH
cmVhdGVzdEtleUxlc3NUaGFuKG1fZGIuZ2V0KCksIHN0b3BLZXksIHN0b3BLZXkpKQorICAgICAg
ICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbihtX2N1cnJlbnRUcmFuc2FjdGlvbi5n
ZXQoKSwgc3RvcEtleSwgc3RvcEtleSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgICAgICB1cHBlck9wZW4gPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAg
ICAgIHN0b3BLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBpbmRleElkLCAqcmFuZ2UtPnVwcGVyKCksIDApOwotICAgICAgICBpZiAoIWZpbmRMYXN0
SW5kZXhLZXlFcXVhbFRvKG1fZGIuZ2V0KCksIHN0b3BLZXksIHN0b3BLZXkpKSAvLyBTZWVrIHRv
IHRoZSAqbGFzdCoga2V5IGluIHRoZSBzZXQgb2Ygbm9uLXVuaXF1ZSBrZXlzLgorICAgICAgICBp
ZiAoIWZpbmRMYXN0SW5kZXhLZXlFcXVhbFRvKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBz
dG9wS2V5LCBzdG9wS2V5KSkgLy8gU2VlayB0byB0aGUgKmxhc3QqIGtleSBpbiB0aGUgc2V0IG9m
IG5vbi11bmlxdWUga2V5cy4KICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB1cHBlck9w
ZW4gPSByYW5nZS0+dXBwZXJPcGVuKCk7CiAgICAgfQogCi0gICAgUmVmUHRyPEluZGV4S2V5Q3Vy
c29ySW1wbD4gY3Vyc29yID0gSW5kZXhLZXlDdXJzb3JJbXBsOjpjcmVhdGUobV9kYi5nZXQoKSwg
c3RhcnRLZXksIGxvd2VyT3Blbiwgc3RvcEtleSwgdXBwZXJPcGVuLCBmb3J3YXJkKTsKKyAgICBS
ZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEtleUN1cnNvckltcGw6OmNy
ZWF0ZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgc3RhcnRLZXksIGxvd2VyT3Blbiwgc3Rv
cEtleSwgdXBwZXJPcGVuLCBmb3J3YXJkKTsKICAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkp
CiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xMjEzLDYgKzEyMzMsNyBAQCBQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhL
ZXlDdXJzb3IoaQogCiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJh
bmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CisgICAgQVNTRVJUKG1fY3Vy
cmVudFRyYW5zYWN0aW9uKTsKICAgICBib29sIGxvd2VyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+
bG93ZXIoKTsKICAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+dXBwZXIoKTsK
ICAgICBib29sIGZvcndhcmQgPSAoZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBM
SUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCk7CkBAIC0xMjMzLDM3ICsxMjU0
LDU3IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNr
aW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcihpbnQ2CiAgICAgICAgIHVwcGVyT3BlbiA9IGZhbHNl
OyAvLyBJbmNsdWRlZC4KIAogICAgICAgICBpZiAoIWZvcndhcmQpIHsgLy8gV2UgbmVlZCBhIGtl
eSB0aGF0IGV4aXN0cy4KLSAgICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW4o
bV9kYi5nZXQoKSwgc3RvcEtleSwgc3RvcEtleSkpCisgICAgICAgICAgICBpZiAoIWZpbmRHcmVh
dGVzdEtleUxlc3NUaGFuKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBzdG9wS2V5LCBzdG9w
S2V5KSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIHVwcGVyT3BlbiA9
IGZhbHNlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3RvcEtleSA9IEluZGV4
RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICpyYW5n
ZS0+dXBwZXIoKSwgMCk7Ci0gICAgICAgIGlmICghZmluZExhc3RJbmRleEtleUVxdWFsVG8obV9k
Yi5nZXQoKSwgc3RvcEtleSwgc3RvcEtleSkpIC8vIFNlZWsgdG8gdGhlICpsYXN0KiBrZXkgaW4g
dGhlIHNldCBvZiBub24tdW5pcXVlIGtleXMuCisgICAgICAgIGlmICghZmluZExhc3RJbmRleEtl
eUVxdWFsVG8obV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIHN0b3BLZXksIHN0b3BLZXkpKSAv
LyBTZWVrIHRvIHRoZSAqbGFzdCoga2V5IGluIHRoZSBzZXQgb2Ygbm9uLXVuaXF1ZSBrZXlzLgog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHVwcGVyT3BlbiA9IHJhbmdlLT51cHBlck9w
ZW4oKTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5kZXhDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRl
eEN1cnNvckltcGw6OmNyZWF0ZShtX2RiLmdldCgpLCBzdGFydEtleSwgbG93ZXJPcGVuLCBzdG9w
S2V5LCB1cHBlck9wZW4sIGZvcndhcmQpOworICAgIFJlZlB0cjxJbmRleEN1cnNvckltcGw+IGN1
cnNvciA9IEluZGV4Q3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCBzdGFydEtleSwgbG93ZXJPcGVuLCBzdG9wS2V5LCB1cHBlck9wZW4sIGZvcndhcmQpOwogICAg
IGlmICghY3Vyc29yLT5maXJzdFNlZWsoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1
cm4gY3Vyc29yLnJlbGVhc2UoKTsKIH0KIAotbmFtZXNwYWNlIHsKLWNsYXNzIER1bW15VHJhbnNh
Y3Rpb24gOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiB7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCB2b2lkIGJlZ2luKCkge30KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCkge30K
LSAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soKSB7fQotfTsKK1Bhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlVHJhbnNh
Y3Rpb24oKQoreworICAgIHJldHVybiBUcmFuc2FjdGlvbjo6Y3JlYXRlKHRoaXMpOwogfQogCi1Q
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IElEQkxldmVsREJCYWNraW5n
U3RvcmU6OmNyZWF0ZVRyYW5zYWN0aW9uKCkKK1Bhc3NSZWZQdHI8SURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpj
cmVhdGUoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQoreworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgVHJhbnNhY3Rpb24oYmFja2luZ1N0b3JlKSk7Cit9CisKK0lEQkxldmVs
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbihJREJMZXZlbERCQmFja2lu
Z1N0b3JlKiBiYWNraW5nU3RvcmUpCisgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUp
Cit7Cit9CisKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJlZ2lu
KCkKK3sKKyAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbik7
CisgICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uID0gTGV2ZWxEQlRyYW5z
YWN0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUtPm1fZGIuZ2V0KCkpOworfQorCit2b2lkIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQoKQoreworICAgIEFTU0VS
VChtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIG1fYmFja2luZ1N0
b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbi0+Y29tbWl0KCk7CisgICAgbV9iYWNraW5nU3RvcmUt
Pm1fY3VycmVudFRyYW5zYWN0aW9uLmNsZWFyKCk7Cit9CisKK3ZvaWQgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb246OnJvbGxiYWNrKCkKIHsKLSAgICAvLyBGSVhNRTogV2UgbmVl
ZCB0byBpbXBsZW1lbnQgYSB0cmFuc2FjdGlvbiBhYnN0cmFjdGlvbiB0aGF0IGFsbG93cyBmb3Ig
cm9sbC1iYWNrcywgYW5kIHdyaXRlIHRlc3RzIGZvciBpdC4KLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IER1bW15VHJhbnNhY3Rpb24oKSk7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlLT5tX2N1
cnJlbnRUcmFuc2FjdGlvbik7CisgICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0
aW9uLT5yb2xsYmFjaygpOworICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlv
bi5jbGVhcigpOwogfQogCiBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmJhY2tpbmdTdG9y
ZUV4aXN0cyhTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgcGF0
aEJhc2VBcmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJC
YWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZS5oCmluZGV4IDQ2NDA2MmIuLjIxOWFjNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCkBAIC0zNiw2ICszNiw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgTGV2ZWxEQkNvbXBhcmF0b3I7CiBjbGFzcyBMZXZlbERCRGF0
YWJhc2U7CitjbGFzcyBMZXZlbERCVHJhbnNhY3Rpb247CiAKIGNsYXNzIElEQkxldmVsREJCYWNr
aW5nU3RvcmUgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlIHsKIHB1YmxpYzoKQEAgLTgzLDYgKzg0
LDE5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW1wbD4gbV9mYWN0
b3J5OwogICAgIE93blB0cjxMZXZlbERCRGF0YWJhc2U+IG1fZGI7CiAgICAgT3duUHRyPExldmVs
REJDb21wYXJhdG9yPiBtX2NvbXBhcmF0b3I7CisgICAgUmVmUHRyPExldmVsREJUcmFuc2FjdGlv
bj4gbV9jdXJyZW50VHJhbnNhY3Rpb247CisKKyAgICBjbGFzcyBUcmFuc2FjdGlvbiA6IHB1Ymxp
YyBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGUoSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgYmVnaW4oKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGNvbW1pdCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soKTsKKworICAgIHByaXZh
dGU6CisgICAgICAgIFRyYW5zYWN0aW9uKElEQkxldmVsREJCYWNraW5nU3RvcmUqKTsKKyAgICAg
ICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogbV9iYWNraW5nU3RvcmU7CisgICAgfTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCmluZGV4IGQ3MzY3NTguLjE1NmNiODkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsLmNwcApAQCAtMTA2LDYgKzEwNiw4IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6YWJvcnQoKQogICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQogICAgICAgICByZXR1cm47
CiAKKyAgICBib29sIHdhc1J1bm5pbmcgPSBtX3N0YXRlID09IFJ1bm5pbmc7CisKICAgICAvLyBU
aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBl
cmZvcm1pbmcgdGhlCiAgICAgLy8gYWJvcnQgc3RlcHMgYmVsb3cuIFdlIHRoZXJlZm9yZSB0YWtl
IGEgc2VsZiByZWZlcmVuY2UgdG8ga2VlcCBvdXJzZWx2ZXMKICAgICAvLyBhbGl2ZSB3aGlsZSBl
eGVjdXRpbmcgdGhpcyBtZXRob2QuCkBAIC0xMTYsNyArMTE4LDggQEAgdm9pZCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjphYm9ydCgpCiAgICAgbV90YXNrRXZlbnRUaW1lci5zdG9wKCk7CiAK
ICAgICBjbG9zZU9wZW5DdXJzb3JzKCk7Ci0gICAgbV90cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsK
KyAgICBpZiAod2FzUnVubmluZykKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsK
IAogICAgIC8vIFJ1biB0aGUgYWJvcnQgdGFza3MsIGlmIGFueS4KICAgICB3aGlsZSAoIW1fYWJv
cnRUYXNrUXVldWUuaXNFbXB0eSgpKSB7Cg==
</data>
<flag name="review"
          id="88174"
          type_id="1"
          status="+"
          setter="steveblock"
    />
          </attachment>
      

    </bug>

</bugzilla>