<?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>135218</bug_id>
          
          <creation_ts>2014-07-23 16:17:35 -0700</creation_ts>
          <short_desc>IDB transactions never reset if the Web Process ends before cleaning up</short_desc>
          <delta_ts>2014-08-06 17:34:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>135389</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Vicki Pfau">jeffrey+webkit</reporter>
          <assigned_to name="Vicki Pfau">jeffrey+webkit</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1024373</commentid>
    <comment_count>0</comment_count>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2014-07-23 16:17:35 -0700</bug_when>
    <thetext>With the Database Process enabled, IDB transactions are almost entirely managed by the Web Process, even though the backing store is handled by the Database Process. In the event that the Web Process ends before it cleans up an IDB transaction, either due to a bookkeeping error, or by crashing, the Database Process will never clean up the transactions that were being managed by the Web Process. This leads to memory leaks at best, or the Database Process getting wedged at worst.

&lt;rdar://problem/17356958&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024375</commentid>
    <comment_count>1</comment_count>
      <attachid>235388</attachid>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2014-07-23 16:25:47 -0700</bug_when>
    <thetext>Created attachment 235388
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024398</commentid>
    <comment_count>2</comment_count>
      <attachid>235388</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-07-23 17:51:03 -0700</bug_when>
    <thetext>Comment on attachment 235388
Patch

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

r=me but this has some really inefficient idioms that involve copying whole hash tables multiple times, and could easily be made more efficient.

&gt; Source/WebKit2/DatabaseProcess/DatabaseToWebProcessConnection.cpp:77
&gt; -
&gt; +    // The WebProcess has disconnected, close all of the connections associated with it
&gt; +    IDBConnectionMap idbConnections = m_idbConnections;
&gt; +    for (auto serverConnectionIdentifier : idbConnections)
&gt; +        removeDatabaseProcessIDBConnection(serverConnectionIdentifier.key);

I suggest auto&amp; rather than auto for the identifiers to avoid unnecessary copying of each key/value pair. And iterating keys() so we can get at the key without &quot;.key()&quot; each time.

But copying the entire map just to iterate the keys is not efficient. Instead, if we can’t iterate the map in place, we should copy the keys into a vector with copyKeysToVector and iterate the vector.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:720
&gt; +        HashSet&lt;IDBIdentifier&gt; transactions = m_establishedTransactions.get(&amp;transactionIdentifier.connection());
&gt; +        transactions.add(transactionIdentifier);
&gt; +        m_establishedTransactions.set(&amp;transactionIdentifier.connection(), transactions);

This can be done much more efficiently with add rather than get/set. Copying the set out of the map and back into the map every time is not good for performance, even if we added std::move to the set call to eliminate one of the copies. Instead we should do an add, passing an empty set, which will find the existing set. Then we call add on the set we found inside the map.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:755
&gt; +        HashSet&lt;IDBIdentifier&gt; transactions = m_establishedTransactions.get(&amp;transactionIdentifier.connection());
&gt; +        transactions.remove(transactionIdentifier);
&gt; +        m_establishedTransactions.set(&amp;transactionIdentifier.connection(), transactions);

Same comment as with add above.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:1089
&gt; +    if (!m_establishedTransactions.contains(&amp;connection))
&gt; +        return;
&gt; +
&gt; +    HashSet&lt;IDBIdentifier&gt; transactions = m_establishedTransactions.get(&amp;connection);

Should not do a contains followed by an get, since that’s two hash table lookups.

Also, if we can’t iterate the transactions in place inside the hash table, we should copy out the identifiers into a vector rather than copying the set.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:1091
&gt; +    for (auto transactionIdentifier : transactions) {

I suggest auto&amp; instead of auto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024404</commentid>
    <comment_count>3</comment_count>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2014-07-23 18:04:03 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 235388 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=235388&amp;action=review
&gt; 
&gt; r=me but this has some really inefficient idioms that involve copying whole hash tables multiple times, and could easily be made more efficient.
&gt; 
&gt; &gt; Source/WebKit2/DatabaseProcess/DatabaseToWebProcessConnection.cpp:77
&gt; &gt; -
&gt; &gt; +    // The WebProcess has disconnected, close all of the connections associated with it
&gt; &gt; +    IDBConnectionMap idbConnections = m_idbConnections;
&gt; &gt; +    for (auto serverConnectionIdentifier : idbConnections)
&gt; &gt; +        removeDatabaseProcessIDBConnection(serverConnectionIdentifier.key);
&gt; 
&gt; I suggest auto&amp; rather than auto for the identifiers to avoid unnecessary copying of each key/value pair. And iterating keys() so we can get at the key without &quot;.key()&quot; each time.
&gt; 
&gt; But copying the entire map just to iterate the keys is not efficient. Instead, if we can’t iterate the map in place, we should copy the keys into a vector with copyKeysToVector and iterate the vector.

The map cannot be iterated in place because it is changed by the function it calls. The suggestions for fixes make sense, although it should also be possible to do a &quot;while (!m_idbConnection.isEmpty())&quot;, as the original map will be empty when the loop ends.

&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:720
&gt; &gt; +        HashSet&lt;IDBIdentifier&gt; transactions = m_establishedTransactions.get(&amp;transactionIdentifier.connection());
&gt; &gt; +        transactions.add(transactionIdentifier);
&gt; &gt; +        m_establishedTransactions.set(&amp;transactionIdentifier.connection(), transactions);
&gt; 
&gt; This can be done much more efficiently with add rather than get/set. Copying the set out of the map and back into the map every time is not good for performance, even if we added std::move to the set call to eliminate one of the copies. Instead we should do an add, passing an empty set, which will find the existing set. Then we call add on the set we found inside the map.

I&apos;m not sure I follow how this idiom is supposed to work.

&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:755
&gt; &gt; +        HashSet&lt;IDBIdentifier&gt; transactions = m_establishedTransactions.get(&amp;transactionIdentifier.connection());
&gt; &gt; +        transactions.remove(transactionIdentifier);
&gt; &gt; +        m_establishedTransactions.set(&amp;transactionIdentifier.connection(), transactions);
&gt; 
&gt; Same comment as with add above.
&gt; 
&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:1089
&gt; &gt; +    if (!m_establishedTransactions.contains(&amp;connection))
&gt; &gt; +        return;
&gt; &gt; +
&gt; &gt; +    HashSet&lt;IDBIdentifier&gt; transactions = m_establishedTransactions.get(&amp;connection);
&gt; 
&gt; Should not do a contains followed by an get, since that’s two hash table lookups.

There appears to be a bug in HashSet that will cause an assertion failure if the HashMap does not contain the key. It appears to create and then copy an empty HashSet, and the copying of the HashSet does not like the fact that it&apos;s empty, hence the check beforehand. I can remove the check, but it was causing the assertion to fail occasionally.

&gt; Also, if we can’t iterate the transactions in place inside the hash table, we should copy out the identifiers into a vector rather than copying the set.

I believe we can iterate this in place, but I&apos;m not 100% sure. I&apos;ll have to take a closer look.

&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:1091
&gt; &gt; +    for (auto transactionIdentifier : transactions) {
&gt; 
&gt; I suggest auto&amp; instead of auto.

Can do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024977</commentid>
    <comment_count>4</comment_count>
      <attachid>235557</attachid>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2014-07-25 19:31:31 -0700</bug_when>
    <thetext>Created attachment 235557
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024988</commentid>
    <comment_count>5</comment_count>
      <attachid>235557</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-07-25 21:18:39 -0700</bug_when>
    <thetext>Comment on attachment 235557
Patch

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

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:1084
&gt; +    auto transactions = m_establishedTransactions.add(&amp;transactionIdentifier.connection(), HashSet&lt;IDBIdentifier&gt;());

It’s a little strange to call this result of the add function “transactions”. I normally call such things “addResult”.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:1095
&gt; +    auto transactions = m_establishedTransactions.add(&amp;transactionIdentifier.connection(), HashSet&lt;IDBIdentifier&gt;());
&gt; +    transactions.iterator-&gt;value.remove(transactionIdentifier);

Here we could use find instead of add, since we don’t need to add anything if it’s empty:

    auto slot = m_establishedTransactions.find(&amp;transactionIdentifier.connection());
    if (slot == m_establishedTransactions.end())
        return;
    slot-&gt;value.remove(transactionIdentifier);

It will be a little lower overhead than doing the add, avoiding the creation of the temporary HashSet.

We could even assert that it is not equal to end if we are sure that won’t happen.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:1101
&gt; +    auto transactionIdentifiers = m_establishedTransactions.find(&amp;connection);

It’s a little peculiar to call the iterator “identifiers”. I normally call such things “slot” or sometimes “iterator”, or maybe “map entry”.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:1105
&gt; +    for (auto transactionIdentifier : transactionIdentifiers.get()-&gt;value) {

I am surprised the get() is needed here.

I also think we’d get something slightly more efficient if we used auto&amp; instead of auto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025253</commentid>
    <comment_count>6</comment_count>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2014-07-28 15:12:07 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 235557 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=235557&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:1084
&gt; &gt; +    auto transactions = m_establishedTransactions.add(&amp;transactionIdentifier.connection(), HashSet&lt;IDBIdentifier&gt;());
&gt; 
&gt; It’s a little strange to call this result of the add function “transactions”. I normally call such things “addResult”.
&gt; 
&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:1095
&gt; &gt; +    auto transactions = m_establishedTransactions.add(&amp;transactionIdentifier.connection(), HashSet&lt;IDBIdentifier&gt;());
&gt; &gt; +    transactions.iterator-&gt;value.remove(transactionIdentifier);

I much prefer to name variables after what they contain over what the function of that specific variable is.

&gt; Here we could use find instead of add, since we don’t need to add anything if it’s empty:
&gt; 
&gt;     auto slot = m_establishedTransactions.find(&amp;transactionIdentifier.connection());
&gt;     if (slot == m_establishedTransactions.end())
&gt;         return;
&gt;     slot-&gt;value.remove(transactionIdentifier);
&gt; 
&gt; It will be a little lower overhead than doing the add, avoiding the creation of the temporary HashSet.
&gt; 
&gt; We could even assert that it is not equal to end if we are sure that won’t happen.

I&apos;m not 100% certain that we won&apos;t get into a state where it&apos;s completely legal for this to be equal, but otherwise this change makes sense.

&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:1101
&gt; &gt; +    auto transactionIdentifiers = m_establishedTransactions.find(&amp;connection);
&gt; 
&gt; It’s a little peculiar to call the iterator “identifiers”. I normally call such things “slot” or sometimes “iterator”, or maybe “map entry”.

Ditto, although I should probably keep the names consistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025262</commentid>
    <comment_count>7</comment_count>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2014-07-28 15:27:32 -0700</bug_when>
    <thetext>Committed r171704: &lt;http://trac.webkit.org/changeset/171704&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025339</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-07-28 17:13:41 -0700</bug_when>
    <thetext>storage/indexeddb/intversion-revert-on-abort.html has started to fail, looks like it was because of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025494</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-07-29 09:40:35 -0700</bug_when>
    <thetext>And storage/indexeddb/version-change-abort.html too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025506</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-07-29 10:21:27 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 135389</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027292</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-08-06 14:10:33 -0700</bug_when>
    <thetext>Based on Jeffrey&apos;s feedback and analysis of what&apos;s causing this, we&apos;re theorizing that making the reset and rollback messages from the WebProcess synchronous will fix the remaining issues here.

Attaching his original patch with changes that do just that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027293</commentid>
    <comment_count>12</comment_count>
      <attachid>236133</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-08-06 14:10:59 -0700</bug_when>
    <thetext>Created attachment 236133
Patch for testing (not yet for review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027296</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-08-06 14:14:05 -0700</bug_when>
    <thetext>Ugh, patch not quite ready, never mind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027303</commentid>
    <comment_count>14</comment_count>
      <attachid>236136</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-08-06 14:28:45 -0700</bug_when>
    <thetext>Created attachment 236136
Patch for testing v2 - Much better</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027305</commentid>
    <comment_count>15</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-08-06 14:38:02 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created an attachment (id=236136) [details]
&gt; Patch for testing v2 - Much better

I&apos;m stress testing the layout tests with this patch.

Regarding the two version change tests that were failing (at least flakily):

With just the patch that landed in r171704 these tests would easily flake (sometimes a little, sometimes a LOT) if you ran them for about 100 iterations.

With the most recent patch I attached I&apos;m running them for 20000 iterations, am about 10000 iterations in, and am not seeing any failures.

Once I&apos;m done with that run, I will stress test the entire IDB test suite with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027338</commentid>
    <comment_count>16</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-08-06 16:29:20 -0700</bug_when>
    <thetext>Jeffrey has tested and shown that the original bug remains squashed.

With Jeffrey&apos;s original patch, I can easily reproduce the flakey layout tests.  With this patch, I&apos;ve hammered them and not seen a failure.

Putting up for review.

Darin&apos;s original review on Jeffrey&apos;s original patch stands - None of that has changed at all.

What needs review is the WebCore changes and everything relating to resetTransactionSync/rollbackTransactionSync in WK2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027339</commentid>
    <comment_count>17</comment_count>
      <attachid>236149</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-08-06 16:29:51 -0700</bug_when>
    <thetext>Created attachment 236149
Mega patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027340</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-06 16:31:10 -0700</bug_when>
    <thetext>Attachment 236149 did not pass style-queue:


ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h:59:  The parameter name &quot;connection&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h:59:  The parameter name &quot;decoder&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 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>1027341</commentid>
    <comment_count>19</comment_count>
      <attachid>236149</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-08-06 16:41:57 -0700</bug_when>
    <thetext>Comment on attachment 236149
Mega patch v1

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

r=me on the new parts not already reviewed by Darin.

&gt; Source/WebCore/Modules/indexeddb/IDBServerConnection.h:75
&gt;      virtual void resetTransaction(int64_t transactionID, std::function&lt;void()&gt; completionCallback) = 0;
&gt; +    virtual bool resetTransactionSync(int64_t transactionID) = 0;
&gt;      virtual void rollbackTransaction(int64_t transactionID, std::function&lt;void()&gt; completionCallback) = 0;
&gt; +    virtual bool rollbackTransactionSync(int64_t transactionID) = 0;

We could put &quot;#if USE(LEVELDB)/#endif&quot; around the non-Sync code since it&apos;s not only used on the LevelDB code path.

&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.cpp:140
&gt; -        m_database-&gt;serverConnection().rollbackTransaction(m_id, []() { });
&gt; +        m_database-&gt;serverConnection().resetTransactionSync(m_id);

This should be rollbackTransactionSync().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027361</commentid>
    <comment_count>20</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-08-06 17:24:25 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 236149 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=236149&amp;action=review
&gt; 
&gt; r=me on the new parts not already reviewed by Darin.
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBServerConnection.h:75
&gt; &gt;      virtual void resetTransaction(int64_t transactionID, std::function&lt;void()&gt; completionCallback) = 0;
&gt; &gt; +    virtual bool resetTransactionSync(int64_t transactionID) = 0;
&gt; &gt;      virtual void rollbackTransaction(int64_t transactionID, std::function&lt;void()&gt; completionCallback) = 0;
&gt; &gt; +    virtual bool rollbackTransactionSync(int64_t transactionID) = 0;
&gt; 
&gt; We could put &quot;#if USE(LEVELDB)/#endif&quot; around the non-Sync code since it&apos;s not only used on the LevelDB code path.

I started to do this but it immediately became way too invasive.

I&apos;ll leave it alone for now, and we can just nuke all the LEVELDB code in one huge swath, when it&apos;s the right time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027366</commentid>
    <comment_count>21</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-08-06 17:34:44 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/172193</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235388</attachid>
            <date>2014-07-23 16:25:47 -0700</date>
            <delta_ts>2014-07-25 19:31:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135218-20140723162532.patch</filename>
            <type>text/plain</type>
            <size>7126</size>
            <attacher name="Vicki Pfau">jeffrey+webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwMzQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNDliMTA4ZGQ2YmU5NjVm
NmQ2ZDliZWVjOGE0ZjhjMWMyZWVkYTEyNS4uNTlhYjg1YTk3NTg2NTdhMzU2YTI3NDA2ODlmMTQw
ZWZmMmNkNzU1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE0LTA3LTIzICBKZWZm
cmV5IFBmYXUgIDxqcGZhdUBhcHBsZS5jb20+CisKKyAgICAgICAgSURCIHRyYW5zYWN0aW9ucyBu
ZXZlciByZXNldCBpZiB0aGUgV2ViIFByb2Nlc3MgZW5kcyBiZWZvcmUgY2xlYW5pbmcgdXAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTIxOAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRGF0YWJhc2VQ
cm9jZXNzL0RhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkRhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2UpOgorICAgICAgICAq
IERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6dW5yZWdpc3RlckNvbm5lY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ29tcGxldGVUcmFuc2FjdGlvbk9w
ZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6
cmVzZXRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpyZXNldEFsbFRyYW5zYWN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpmaW5hbGl6ZVJvbGxiYWNrKToKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisKIDIwMTQtMDYtMjMgIERhbiBCZXJu
c3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTc0MTMz
NzQ+IFtpT1NdIEFwcGxpY2F0aW9uIGNhY2hlIHNpemUgcGVyIG9yaWdpbiBpcyBub3QgbGltaXRl
ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlVG9X
ZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
RGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcAppbmRleCA3ZjkwYzQzYTgwZmJhZWNl
YjVhNDQ1NmQ1MGYyZGRkNTAxZTU0MzNmLi5jZGM1MmE5NDAyODhlZDMzY2FhOWQ1MDMxNGViNDAx
NDFlZDVjZDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0
YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAtNzEsNyAr
NzEsMTAgQEAgdm9pZCBEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGkKIAogdm9pZCBEYXRhYmFzZVRvV2ViUHJv
Y2Vzc0Nvbm5lY3Rpb246OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiopCiB7Ci0KKyAgICAvLyBU
aGUgV2ViUHJvY2VzcyBoYXMgZGlzY29ubmVjdGVkLCBjbG9zZSBhbGwgb2YgdGhlIGNvbm5lY3Rp
b25zIGFzc29jaWF0ZWQgd2l0aCBpdAorICAgIElEQkNvbm5lY3Rpb25NYXAgaWRiQ29ubmVjdGlv
bnMgPSBtX2lkYkNvbm5lY3Rpb25zOworICAgIGZvciAoYXV0byBzZXJ2ZXJDb25uZWN0aW9uSWRl
bnRpZmllciA6IGlkYkNvbm5lY3Rpb25zKQorICAgICAgICByZW1vdmVEYXRhYmFzZVByb2Nlc3NJ
REJDb25uZWN0aW9uKHNlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyLmtleSk7CiB9CiAKIHZvaWQg
RGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uKiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFt
ZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJh
c2UuY3BwCmluZGV4IGY3MmI5NGVkYzFkN2FkMzYzMjhmYzFhOWU1MDAwOGY2ZDUzOWY0MTcuLjhk
NTNlZmEzZGJlYzE2OGUyOTRlOGUzYWZlZDhiYzU2NjFlMmIyMWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURC
RGF0YWJhc2UuY3BwCkBAIC0xMDksNiArMTA5LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cmVnaXN0ZXJDb25uZWN0aW9uKERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24mIGNvbm5lY3QK
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnVucmVnaXN0ZXJDb25uZWN0aW9uKERhdGFiYXNlUHJv
Y2Vzc0lEQkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCiB7CiAgICAgQVNTRVJUKG1fY29ubmVjdGlv
bnMuY29udGFpbnMoJmNvbm5lY3Rpb24pKTsKKyAgICByZXNldEFsbFRyYW5zYWN0aW9ucyhjb25u
ZWN0aW9uKTsKICAgICBtX2Nvbm5lY3Rpb25zLnJlbW92ZSgmY29ubmVjdGlvbik7CiAKICAgICBp
ZiAobV9jb25uZWN0aW9ucy5pc0VtcHR5KCkpIHsKQEAgLTMzMyw2ICszMzQsMTAgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkQ29tcGxldGVUcmFuc2FjdGlvbk9wZXJhdGlvbihjb25zdCBJ
REJJZGVudGlmaWVyJiB0cmEKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAg
UmVmUHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVzdCA9IG1fcGVuZGluZ1RyYW5zYWN0aW9uUmVxdWVz
dHMudGFrZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpOworCisgICAgaWYgKG1fcGVuZGluZ1RyYW5z
YWN0aW9uUm9sbGJhY2tzLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRpZmllcikpCisgICAgICAg
IGZpbmFsaXplUm9sbGJhY2sodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKwogICAgIGlmICghcmVx
dWVzdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC03MDksNiArNzE0LDExIEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmVUcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlm
aWVyJiB0cmFuc2FjCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKIAogICAgIGJvb2wgc3Vj
Y2VzcyA9IG1fYmFja2luZ1N0b3JlLT5lc3RhYmxpc2hUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIG9iamVjdFN0b3JlSURzLCBtb2RlKTsKKyAgICBpZiAoc3VjY2VzcykgeworICAg
ICAgICBIYXNoU2V0PElEQklkZW50aWZpZXI+IHRyYW5zYWN0aW9ucyA9IG1fZXN0YWJsaXNoZWRU
cmFuc2FjdGlvbnMuZ2V0KCZ0cmFuc2FjdGlvbklkZW50aWZpZXIuY29ubmVjdGlvbigpKTsKKyAg
ICAgICAgdHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOworICAgICAgICBt
X2VzdGFibGlzaGVkVHJhbnNhY3Rpb25zLnNldCgmdHJhbnNhY3Rpb25JZGVudGlmaWVyLmNvbm5l
Y3Rpb24oKSwgdHJhbnNhY3Rpb25zKTsKKyAgICB9CiAKICAgICBwb3N0TWFpblRocmVhZFRhc2so
Y3JlYXRlQXN5bmNUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZENvbXBsZXRlVHJh
bnNhY3Rpb25PcGVyYXRpb24sIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgc3VjY2VzcykpOwogfQpA
QCAtNzM5LDYgKzc0OSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZXNldEJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYQogICAgIEFTU0VSVCht
X2JhY2tpbmdTdG9yZSk7CiAKICAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+cmVz
ZXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIpOworICAgIGlmIChzdWNjZXNzKSB7
CisgICAgICAgIEhhc2hTZXQ8SURCSWRlbnRpZmllcj4gdHJhbnNhY3Rpb25zID0gbV9lc3RhYmxp
c2hlZFRyYW5zYWN0aW9ucy5nZXQoJnRyYW5zYWN0aW9uSWRlbnRpZmllci5jb25uZWN0aW9uKCkp
OworICAgICAgICB0cmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7Cisg
ICAgICAgIG1fZXN0YWJsaXNoZWRUcmFuc2FjdGlvbnMuc2V0KCZ0cmFuc2FjdGlvbklkZW50aWZp
ZXIuY29ubmVjdGlvbigpLCB0cmFuc2FjdGlvbnMpOworICAgIH0KIAogICAgIHBvc3RNYWluVGhy
ZWFkVGFzayhjcmVhdGVBc3luY1Rhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ29t
cGxldGVUcmFuc2FjdGlvbk9wZXJhdGlvbiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBzdWNjZXNz
KSk7CiB9CkBAIC0xMDY2LDYgKzEwODEsMzIgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
RGVsZXRlUmFuZ2VJbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIHVpbnQzMl8KICAg
ICByZXF1ZXN0LT5jb21wbGV0ZVJlcXVlc3QoZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpOwogfQog
Cit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZXNldEFsbFRyYW5zYWN0aW9ucyhjb25zdCBEYXRh
YmFzZVByb2Nlc3NJREJDb25uZWN0aW9uJiBjb25uZWN0aW9uKQoreworICAgIGlmICghbV9lc3Rh
Ymxpc2hlZFRyYW5zYWN0aW9ucy5jb250YWlucygmY29ubmVjdGlvbikpCisgICAgICAgIHJldHVy
bjsKKworICAgIEhhc2hTZXQ8SURCSWRlbnRpZmllcj4gdHJhbnNhY3Rpb25zID0gbV9lc3RhYmxp
c2hlZFRyYW5zYWN0aW9ucy5nZXQoJmNvbm5lY3Rpb24pOworCisgICAgZm9yIChhdXRvIHRyYW5z
YWN0aW9uSWRlbnRpZmllciA6IHRyYW5zYWN0aW9ucykgeworICAgICAgICBtX3BlbmRpbmdUcmFu
c2FjdGlvblJvbGxiYWNrcy5hZGQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICAgICAgaWYg
KCFtX3BlbmRpbmdUcmFuc2FjdGlvblJlcXVlc3RzLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRp
ZmllcikpCisgICAgICAgICAgICBmaW5hbGl6ZVJvbGxiYWNrKHRyYW5zYWN0aW9uSWRlbnRpZmll
cik7CisgICAgfQorfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5hbGl6ZVJvbGxiYWNr
KGNvbnN0IFdlYktpdDo6SURCSWRlbnRpZmllciAmdHJhbnNhY3Rpb25JZCkKK3sKKyAgICBBU1NF
UlQobV9wZW5kaW5nVHJhbnNhY3Rpb25Sb2xsYmFja3MuY29udGFpbnModHJhbnNhY3Rpb25JZCkp
OworICAgIEFTU0VSVCghbV9wZW5kaW5nVHJhbnNhY3Rpb25SZXF1ZXN0cy5jb250YWlucyh0cmFu
c2FjdGlvbklkKSk7CisgICAgcm9sbGJhY2tUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkLCBbdGhp
cywgdHJhbnNhY3Rpb25JZF0oYm9vbCkgeworICAgICAgICBBU1NFUlQoIW1fcGVuZGluZ1RyYW5z
YWN0aW9uUmVxdWVzdHMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpOworICAgICAgICByZXNldFRy
YW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIFt0aGlzLCB0cmFuc2FjdGlvbklkXShib29sKSB7Cisg
ICAgICAgICAgICBtX3BlbmRpbmdUcmFuc2FjdGlvblJvbGxiYWNrcy5yZW1vdmUodHJhbnNhY3Rp
b25JZCk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCiBTdHJpbmcgVW5pcXVlSURCRGF0YWJh
c2U6OmFic29sdXRlRGF0YWJhc2VEaXJlY3RvcnkoKSBjb25zdAogewogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmgKaW5kZXggZTk2MzYzMmY5ZjVm
YTFkN2JiNDBhYTZhYzU1ZTQzZDVmMDMwMWE5Ny4uMTc2YjUwZDkxNWQ2ZTU2OWU3YTJhZTllZDI2
NjhkOTdhZmVjN2I5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFi
YXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuaApAQCAtMTg1LDEwICsxODUs
MTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZFNodXRkb3duQmFja2luZ1N0b3JlKFVuaXF1ZUlE
QkRhdGFiYXNlU2h1dGRvd25UeXBlKTsKICAgICB2b2lkIGRpZENvbXBsZXRlQm9vbFJlcXVlc3Qo
dWludDY0X3QgcmVxdWVzdElELCBib29sIHN1Y2Nlc3MpOwogCisgICAgdm9pZCByZXNldEFsbFRy
YW5zYWN0aW9ucyhjb25zdCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uJik7CisgICAgdm9p
ZCBmaW5hbGl6ZVJvbGxiYWNrKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWQpOwor
CiAgICAgYm9vbCBtX2FjY2VwdGluZ05ld1JlcXVlc3RzOwogCisgICAgSGFzaE1hcDxjb25zdCBE
YXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uKiwgSGFzaFNldDxJREJJZGVudGlmaWVyPj4gbV9l
c3RhYmxpc2hlZFRyYW5zYWN0aW9uczsKICAgICBEZXF1ZTxSZWZQdHI8QXN5bmNSZXF1ZXN0Pj4g
bV9wZW5kaW5nTWV0YWRhdGFSZXF1ZXN0czsKICAgICBIYXNoTWFwPElEQklkZW50aWZpZXIsIFJl
ZlB0cjxBc3luY1JlcXVlc3Q+PiBtX3BlbmRpbmdUcmFuc2FjdGlvblJlcXVlc3RzOworICAgIEhh
c2hTZXQ8SURCSWRlbnRpZmllcj4gbV9wZW5kaW5nVHJhbnNhY3Rpb25Sb2xsYmFja3M7CiAgICAg
SGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEFzeW5jUmVxdWVzdD4+IG1fcGVuZGluZ0RhdGFiYXNl
VGFza3M7CiAgICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gbV9wZW5kaW5nU2h1dGRvd25UYXNrOwog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235557</attachid>
            <date>2014-07-25 19:31:31 -0700</date>
            <delta_ts>2014-08-06 14:10:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135218-20140725193117.patch</filename>
            <type>text/plain</type>
            <size>9696</size>
            <attacher name="Vicki Pfau">jeffrey+webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcxNDk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZjk3ODczOWUxZDU2MGVi
ZjQ0YmJmZDE2OGQ0YzgwZjE2NThlZDljMC4uZDIwZjhhMDc4YzQzZDljNGYzMjA5NTMwNDAyMmYw
ZDE5ZGM1YjM3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE0LTA3LTI1ICBKZWZm
cmV5IFBmYXUgIDxqcGZhdUBhcHBsZS5jb20+CisKKyAgICAgICAgSURCIHRyYW5zYWN0aW9ucyBu
ZXZlciByZXNldCBpZiB0aGUgV2ViIFByb2Nlc3MgZW5kcyBiZWZvcmUgY2xlYW5pbmcgdXAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTIxOAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRGF0YWJhc2VQ
cm9jZXNzL0RhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkRhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2UpOgorICAgICAgICAq
IERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6dW5yZWdpc3RlckNvbm5lY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ29tcGxldGVUcmFuc2FjdGlvbk9w
ZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6
cmVzZXRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRFc3RhYmxpc2hUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRSZXNldFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
VW5pcXVlSURCRGF0YWJhc2U6OnJlc2V0QWxsVHJhbnNhY3Rpb25zKToKKyAgICAgICAgKFdlYktp
dDo6VW5pcXVlSURCRGF0YWJhc2U6OmZpbmFsaXplUm9sbGJhY2spOgorICAgICAgICAoV2ViS2l0
OjpVbmlxdWVJREJEYXRhYmFzZTo6YWJzb2x1dGVEYXRhYmFzZURpcmVjdG9yeSk6CisgICAgICAg
ICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5oOgorICAgICAg
ICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFj
a2luZ1N0b3JlU1FMaXRlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VC
YWNraW5nU3RvcmVTUUxpdGU6OnJvbGxiYWNrVHJhbnNhY3Rpb24pOgorCiAyMDE0LTA3LTIzICBP
bGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgcHNldWRvIHRh
cmdldCB0byBjcmVhdGUgc2FuZGJveCBvdmVycmlkZSByb290cwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3ND
b25uZWN0aW9uLmNwcAppbmRleCA3ZjkwYzQzYTgwZmJhZWNlYjVhNDQ1NmQ1MGYyZGRkNTAxZTU0
MzNmLi42MzkzN2NhODQ0YzFiZDhkZTg1ZmQxNTk2MDg2NmIwMWYxODNmODI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25u
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VU
b1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAtNzEsNyArNzEsOSBAQCB2b2lkIERhdGFiYXNl
VG9XZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
KiBjb25uZWN0aQogCiB2b2lkIERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkQ2xv
c2UoSVBDOjpDb25uZWN0aW9uKikKIHsKLQorICAgIC8vIFRoZSBXZWJQcm9jZXNzIGhhcyBkaXNj
b25uZWN0ZWQsIGNsb3NlIGFsbCBvZiB0aGUgY29ubmVjdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGl0
CisgICAgd2hpbGUgKCFtX2lkYkNvbm5lY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmVtb3Zl
RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbihtX2lkYkNvbm5lY3Rpb25zLmJlZ2luKCktPmtl
eSk7CiB9CiAKIHZvaWQgRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZl
SW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uKiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVz
c2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlE
QkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
VW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IDI3OTcwNGY4OGUzZThmMzQ2ZDE2MTczZTc5ODAw
YjlkNmJkZDY0ZTUuLjZhYjRmNjc5NDcxOTQxZmM5ZWIzNDBiMzU1N2YwMTMzNmU2NmE5ZmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVl
SURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRl
eGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC0xMTMsOSArMTEzLDEwIEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnJlZ2lzdGVyQ29ubmVjdGlvbihEYXRhYmFzZVByb2Nlc3NJREJDb25u
ZWN0aW9uJiBjb25uZWN0CiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjp1bnJlZ2lzdGVyQ29ubmVj
dGlvbihEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uJiBjb25uZWN0aW9uKQogewogICAgIEFT
U0VSVChtX2Nvbm5lY3Rpb25zLmNvbnRhaW5zKCZjb25uZWN0aW9uKSk7CisgICAgcmVzZXRBbGxU
cmFuc2FjdGlvbnMoY29ubmVjdGlvbik7CiAgICAgbV9jb25uZWN0aW9ucy5yZW1vdmUoJmNvbm5l
Y3Rpb24pOwogCi0gICAgaWYgKG1fY29ubmVjdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1f
Y29ubmVjdGlvbnMuaXNFbXB0eSgpICYmIG1fcGVuZGluZ1RyYW5zYWN0aW9uUm9sbGJhY2tzLmlz
RW1wdHkoKSkgewogICAgICAgICBzaHV0ZG93bihVbmlxdWVJREJEYXRhYmFzZVNodXRkb3duVHlw
ZTo6Tm9ybWFsU2h1dGRvd24pOwogICAgICAgICBEYXRhYmFzZVByb2Nlc3M6OnNoYXJlZCgpLnJl
bW92ZVVuaXF1ZUlEQkRhdGFiYXNlKCp0aGlzKTsKICAgICB9CkBAIC0zMzcsMTAgKzMzOCwxMiBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRDb21wbGV0ZVRyYW5zYWN0aW9uT3BlcmF0aW9u
KGNvbnN0IElEQklkZW50aWZpZXImIHRyYQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAKICAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiByZXF1ZXN0ID0gbV9wZW5kaW5nVHJhbnNhY3Rp
b25SZXF1ZXN0cy50YWtlKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7Ci0gICAgaWYgKCFyZXF1ZXN0
KQotICAgICAgICByZXR1cm47CiAKLSAgICByZXF1ZXN0LT5jb21wbGV0ZVJlcXVlc3Qoc3VjY2Vz
cyk7CisgICAgaWYgKHJlcXVlc3QpCisgICAgICAgIHJlcXVlc3QtPmNvbXBsZXRlUmVxdWVzdChz
dWNjZXNzKTsKKworICAgIGlmIChtX3BlbmRpbmdUcmFuc2FjdGlvblJvbGxiYWNrcy5jb250YWlu
cyh0cmFuc2FjdGlvbklkZW50aWZpZXIpKQorICAgICAgICBmaW5hbGl6ZVJvbGxiYWNrKHRyYW5z
YWN0aW9uSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNoYW5nZURh
dGFiYXNlVmVyc2lvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG5ld1ZlcnNpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZChib29sKT4gc3VjY2Vzc0Nh
bGxiYWNrKQpAQCAtNzE0LDYgKzcxNyw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5C
YWNraW5nU3RvcmVUcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjCiAKICAg
ICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+ZXN0YWJsaXNoVHJhbnNhY3Rpb24odHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlEcywgbW9kZSk7CiAKKyAgICBwb3N0TWFp
blRocmVhZFRhc2soY3JlYXRlQXN5bmNUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZEVzdGFibGlzaFRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHN1Y2Nlc3MpKTsK
ICAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQXN5bmNUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmRpZENvbXBsZXRlVHJhbnNhY3Rpb25PcGVyYXRpb24sIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgc3VjY2VzcykpOwogfQogCkBAIC03NDQsNiArNzQ4LDcgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cmVzZXRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlm
aWVyJiB0cmFuc2EKIAogICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5yZXNldFRy
YW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAKKyAgICBwb3N0TWFpblRocmVhZFRh
c2soY3JlYXRlQXN5bmNUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFJlc2V0VHJh
bnNhY3Rpb24sIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgc3VjY2VzcykpOwogICAgIHBvc3RNYWlu
VGhyZWFkVGFzayhjcmVhdGVBc3luY1Rhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
Q29tcGxldGVUcmFuc2FjdGlvbk9wZXJhdGlvbiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBzdWNj
ZXNzKSk7CiB9CiAKQEAgLTEwNzAsNiArMTA3NSw2MSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWREZWxldGVSYW5nZUluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgdWludDMy
XwogICAgIHJlcXVlc3QtPmNvbXBsZXRlUmVxdWVzdChlcnJvckNvZGUsIGVycm9yTWVzc2FnZSk7
CiB9CiAKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZEVzdGFibGlzaFRyYW5zYWN0aW9uKGNv
bnN0IElEQklkZW50aWZpZXIgJnRyYW5zYWN0aW9uSWRlbnRpZmllciwgYm9vbCBzdWNjZXNzKQor
eworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvIHRyYW5zYWN0aW9ucyA9IG1fZXN0YWJsaXNoZWRUcmFu
c2FjdGlvbnMuYWRkKCZ0cmFuc2FjdGlvbklkZW50aWZpZXIuY29ubmVjdGlvbigpLCBIYXNoU2V0
PElEQklkZW50aWZpZXI+KCkpOworICAgIHRyYW5zYWN0aW9ucy5pdGVyYXRvci0+dmFsdWUuYWRk
KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFJlc2V0VHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciAmdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBib29sIHN1Y2Nlc3MpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAg
ICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25z
ID0gbV9lc3RhYmxpc2hlZFRyYW5zYWN0aW9ucy5hZGQoJnRyYW5zYWN0aW9uSWRlbnRpZmllci5j
b25uZWN0aW9uKCksIEhhc2hTZXQ8SURCSWRlbnRpZmllcj4oKSk7CisgICAgdHJhbnNhY3Rpb25z
Lml0ZXJhdG9yLT52YWx1ZS5yZW1vdmUodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKK30KKwordm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVzZXRBbGxUcmFuc2FjdGlvbnMoY29uc3QgRGF0YWJhc2VQ
cm9jZXNzSURCQ29ubmVjdGlvbiYgY29ubmVjdGlvbikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworICAgIGF1dG8gdHJhbnNhY3Rpb25JZGVudGlmaWVycyA9IG1fZXN0YWJsaXNo
ZWRUcmFuc2FjdGlvbnMuZmluZCgmY29ubmVjdGlvbik7CisgICAgaWYgKHRyYW5zYWN0aW9uSWRl
bnRpZmllcnMgPT0gbV9lc3RhYmxpc2hlZFRyYW5zYWN0aW9ucy5lbmQoKSB8fCAhbV9hY2NlcHRp
bmdOZXdSZXF1ZXN0cykKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvIHRyYW5zYWN0
aW9uSWRlbnRpZmllciA6IHRyYW5zYWN0aW9uSWRlbnRpZmllcnMuZ2V0KCktPnZhbHVlKSB7Cisg
ICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9uUm9sbGJhY2tzLmFkZCh0cmFuc2FjdGlvbklkZW50
aWZpZXIpOworICAgICAgICBpZiAoIW1fcGVuZGluZ1RyYW5zYWN0aW9uUmVxdWVzdHMuY29udGFp
bnModHJhbnNhY3Rpb25JZGVudGlmaWVyKSkKKyAgICAgICAgICAgIGZpbmFsaXplUm9sbGJhY2so
dHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICB9Cit9CisKK3ZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmZpbmFsaXplUm9sbGJhY2soY29uc3QgV2ViS2l0OjpJREJJZGVudGlmaWVyICZ0cmFuc2Fj
dGlvbklkKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKG1f
cGVuZGluZ1RyYW5zYWN0aW9uUm9sbGJhY2tzLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsKKyAg
ICBBU1NFUlQoIW1fcGVuZGluZ1RyYW5zYWN0aW9uUmVxdWVzdHMuY29udGFpbnModHJhbnNhY3Rp
b25JZCkpOworICAgIHJvbGxiYWNrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgW3RoaXMsIHRy
YW5zYWN0aW9uSWRdKGJvb2wpIHsKKyAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
KyAgICAgICAgaWYgKG1fcGVuZGluZ1RyYW5zYWN0aW9uUmVxdWVzdHMuY29udGFpbnModHJhbnNh
Y3Rpb25JZCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJUKG1fcGVuZGlu
Z1RyYW5zYWN0aW9uUm9sbGJhY2tzLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsKKyAgICAgICAg
bV9wZW5kaW5nVHJhbnNhY3Rpb25Sb2xsYmFja3MucmVtb3ZlKHRyYW5zYWN0aW9uSWQpOworICAg
ICAgICByZXNldFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIFt0aGlzLCB0cmFuc2FjdGlvbklk
XShib29sKSB7CisgICAgICAgICAgICBpZiAobV9hY2NlcHRpbmdOZXdSZXF1ZXN0cyAmJiBtX2Nv
bm5lY3Rpb25zLmlzRW1wdHkoKSAmJiBtX3BlbmRpbmdUcmFuc2FjdGlvblJvbGxiYWNrcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgICAgICBzaHV0ZG93bihVbmlxdWVJREJEYXRhYmFzZVNodXRk
b3duVHlwZTo6Tm9ybWFsU2h1dGRvd24pOworICAgICAgICAgICAgICAgIERhdGFiYXNlUHJvY2Vz
czo6c2hhcmVkKCkucmVtb3ZlVW5pcXVlSURCRGF0YWJhc2UoKnRoaXMpOworICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKyAgICB9KTsKK30KKwogU3RyaW5nIFVuaXF1ZUlEQkRhdGFiYXNlOjph
YnNvbHV0ZURhdGFiYXNlRGlyZWN0b3J5KCkgY29uc3QKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IGU5NjM2MzJmOWY1ZmExZDdi
YjQwYWE2YWM1NWU0M2Q1ZjAzMDFhOTcuLjg4ZDYzZjkxNGQ1ODFkNDVhYTdkNWJkNjdmYmJiZTcy
NGNmMmI0OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRl
eGVkREIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTE4NSwxMCArMTg1LDE3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBkaWRTaHV0ZG93bkJhY2tpbmdTdG9yZShVbmlxdWVJREJEYXRh
YmFzZVNodXRkb3duVHlwZSk7CiAgICAgdm9pZCBkaWRDb21wbGV0ZUJvb2xSZXF1ZXN0KHVpbnQ2
NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzKTsKIAorICAgIHZvaWQgZGlkRXN0YWJsaXNoVHJh
bnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBib29s
IHN1Y2Nlc3MpOworICAgIHZvaWQgZGlkUmVzZXRUcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGJvb2wgc3VjY2Vzcyk7CisgICAgdm9pZCByZXNl
dEFsbFRyYW5zYWN0aW9ucyhjb25zdCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uJik7Cisg
ICAgdm9pZCBmaW5hbGl6ZVJvbGxiYWNrKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWQpOworCiAgICAgYm9vbCBtX2FjY2VwdGluZ05ld1JlcXVlc3RzOwogCisgICAgSGFzaE1hcDxj
b25zdCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uKiwgSGFzaFNldDxJREJJZGVudGlmaWVy
Pj4gbV9lc3RhYmxpc2hlZFRyYW5zYWN0aW9uczsKICAgICBEZXF1ZTxSZWZQdHI8QXN5bmNSZXF1
ZXN0Pj4gbV9wZW5kaW5nTWV0YWRhdGFSZXF1ZXN0czsKICAgICBIYXNoTWFwPElEQklkZW50aWZp
ZXIsIFJlZlB0cjxBc3luY1JlcXVlc3Q+PiBtX3BlbmRpbmdUcmFuc2FjdGlvblJlcXVlc3RzOwor
ICAgIEhhc2hTZXQ8SURCSWRlbnRpZmllcj4gbV9wZW5kaW5nVHJhbnNhY3Rpb25Sb2xsYmFja3M7
CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEFzeW5jUmVxdWVzdD4+IG1fcGVuZGluZ0Rh
dGFiYXNlVGFza3M7CiAgICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gbV9wZW5kaW5nU2h1dGRvd25U
YXNrOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhl
ZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRh
YmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAKaW5kZXggN2Q2ODdiOTAwNmNlMDU0ODgxNTkzYWI0
Y2FjZGVhN2M5NjcyNDU4Yi4uY2UxYTNiOGE1ZjZhYzRjYmMwOWM5YjJjNjZlZmQwNGEwYjhlN2Ji
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9z
cWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcApAQCAtMzkxLDYgKzM5MSwxMSBAQCBib29sIFVuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpyb2xsYmFja1RyYW5zYWN0aW9uKGNvbnN0
IElEQklkZW50aWZpZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgaWYgKCF0
cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7CisgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0
byByb2xsYmFjayBhIHRyYW5zYWN0aW9uIHRoYXQgaGFzbid0IGJlZ3VuIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKICAgICByZXR1cm4gdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7
CiB9CiAK
</data>
<flag name="review"
          id="260126"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236133</attachid>
            <date>2014-08-06 14:10:59 -0700</date>
            <delta_ts>2014-08-06 14:28:45 -0700</delta_ts>
            <desc>Patch for testing (not yet for review)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>17671</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNv
bm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNv
bm5lY3Rpb24uaAppbmRleCAzY2U0MjgyLi4yYjMyMDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJTZXJ2ZXJDb25uZWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCU2VydmVyQ29ubmVjdGlvbi5oCkBAIC03MCw3
ICs3MCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc2FjdGlvbihpbnQ2
NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJh
Y2spID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0VHJhbnNhY3Rpb24oaW50NjRfdCB0cmFu
c2FjdGlvbklELCBCb29sQ2FsbGJhY2tGdW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2spID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXRUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgcmVzZXRUcmFuc2FjdGlvblN5bmMoaW50NjRfdCB0cmFuc2FjdGlvbklEKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHJvbGxiYWNrVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklE
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmly
dHVhbCBib29sIHJvbGxiYWNrVHJhbnNhY3Rpb25TeW5jKGludDY0X3QgdHJhbnNhY3Rpb25JRCkg
PSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9u
SUQsIGludDY0X3QgZGF0YWJhc2VJRCwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJiwgSURCS2V5JiBwcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50
NjRfdD4mIGluZGV4SURzLCBjb25zdCBWZWN0b3I8VmVjdG9yPFJlZlB0cjxJREJLZXk+Pj4mIGlu
ZGV4S2V5cywgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4p
PiBjb21wbGV0aW9uQ2FsbGJhY2spID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKaW5kZXggNjhk
MmNhOC4uNjFiOWQzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCkBAIC0xMzcsNyArMTM3LDcgQEAg
dm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4gZXJyb3IpCiAgICAgbV90YXNrVGltZXIuc3RvcCgpOwogCiAgICAgaWYgKHdhc1J1bm5p
bmcpCi0gICAgICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5yb2xsYmFja1RyYW5z
YWN0aW9uKG1faWQsIFtdKCkgeyB9KTsKKyAgICAgICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVj
dGlvbigpLnJlc2V0VHJhbnNhY3Rpb25TeW5jKG1faWQpOwogCiAgICAgLy8gUnVuIHRoZSBhYm9y
dCB0YXNrcywgaWYgYW55LgogICAgIHdoaWxlICghbV9hYm9ydFRhc2tRdWV1ZS5pc0VtcHR5KCkp
IHsKQEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6YWJvcnQo
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikKICAgICAvLyBpdHNlbGYgdG8gYmUg
cmVsZWFzZWQsIGFuZCBvcmRlciBpcyBjcml0aWNhbC4KICAgICBjbG9zZU9wZW5DdXJzb3JzKCk7
CiAKLSAgICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkucmVzZXRUcmFuc2FjdGlvbiht
X2lkLCBbXSgpIHsgfSk7CisgICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLnJlc2V0
VHJhbnNhY3Rpb25TeW5jKG1faWQpOwogCiAgICAgLy8gVHJhbnNhY3Rpb25zIG11c3QgYWxzbyBi
ZSBtYXJrZWQgYXMgY29tcGxldGVkIGJlZm9yZSB0aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVkLCBh
cwogICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIHVuYmxvY2tzIG9wZXJhdGlvbnMg
bGlrZSBjbG9zaW5nIGNvbm5lY3Rpb25zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL0RhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmNw
cAppbmRleCA3ZjkwYzQzLi42MzkzN2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9u
LmNwcApAQCAtNzEsNyArNzEsOSBAQCB2b2lkIERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlv
bjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aQogCiB2b2lkIERh
dGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uKikK
IHsKLQorICAgIC8vIFRoZSBXZWJQcm9jZXNzIGhhcyBkaXNjb25uZWN0ZWQsIGNsb3NlIGFsbCBv
ZiB0aGUgY29ubmVjdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGl0CisgICAgd2hpbGUgKCFtX2lkYkNv
bm5lY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmVtb3ZlRGF0YWJhc2VQcm9jZXNzSURCQ29u
bmVjdGlvbihtX2lkYkNvbm5lY3Rpb25zLmJlZ2luKCktPmtleSk7CiB9CiAKIHZvaWQgRGF0YWJh
c2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uKiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBD
OjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24u
Y3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVBy
b2Nlc3NJREJDb25uZWN0aW9uLmNwcAppbmRleCA0Zjc3OGMyLi43ZDczMzZhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vz
c0lEQkNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9J
bmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5jcHAKQEAgLTE4Niw2ICsxODYs
MjQgQEAgdm9pZCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpyb2xsYmFja1RyYW5zYWN0
aW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjQKICAgICB9KTsKIH0KIAordm9pZCBEYXRhYmFz
ZVByb2Nlc3NJREJDb25uZWN0aW9uOjpyZXNldFRyYW5zYWN0aW9uU3luYyhpbnQ2NF90IHRyYW5z
YWN0aW9uSUQsIFBhc3NSZWZQdHI8TWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rp
b246OlJlc2V0VHJhbnNhY3Rpb25TeW5jOjpEZWxheWVkUmVwbHk+IHBycFJlcGx5KQoreworICAg
IFJlZlB0cjxNZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6UmVzZXRUcmFu
c2FjdGlvblN5bmM6OkRlbGF5ZWRSZXBseT4gcmVwbHkocHJwUmVwbHkpOworICAgIFJlZlB0cjxE
YXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uPiBjb25uZWN0aW9uKHRoaXMpOworICAgIG1fdW5p
cXVlSURCRGF0YWJhc2UtPnJlc2V0VHJhbnNhY3Rpb24oSURCSWRlbnRpZmllcigqdGhpcywgdHJh
bnNhY3Rpb25JRCksIFtjb25uZWN0aW9uLCByZXBseV0oYm9vbCBzdWNjZXNzKSB7CisgICAgICAg
IHJlcGx5LT5zZW5kKHN1Y2Nlc3MpOworICAgIH0pOworfQorCit2b2lkIERhdGFiYXNlUHJvY2Vz
c0lEQkNvbm5lY3Rpb246OnJvbGxiYWNrVHJhbnNhY3Rpb25TeW5jKGludDY0X3QgdHJhbnNhY3Rp
b25JRCwgUGFzc1JlZlB0cjxNZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6
Um9sbGJhY2tUcmFuc2FjdGlvblN5bmM6OkRlbGF5ZWRSZXBseT4gcHJwUmVwbHkpCit7CisgICAg
UmVmUHRyPE1lc3NhZ2VzOjpEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpSb2xsYmFja1Ry
YW5zYWN0aW9uU3luYzo6RGVsYXllZFJlcGx5PiByZXBseShwcnBSZXBseSk7CisgICAgUmVmUHRy
PERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24odGhpcyk7CisgICAgbV91
bmlxdWVJREJEYXRhYmFzZS0+cm9sbGJhY2tUcmFuc2FjdGlvbihJREJJZGVudGlmaWVyKCp0aGlz
LCB0cmFuc2FjdGlvbklEKSwgW2Nvbm5lY3Rpb24sIHJlcGx5XShib29sIHN1Y2Nlc3MpIHsKKyAg
ICAgICAgcmVwbHktPnNlbmQoc3VjY2Vzcyk7CisgICAgfSk7Cit9CisKIHZvaWQgRGF0YWJhc2VQ
cm9jZXNzSURCQ29ubmVjdGlvbjo6Y2hhbmdlRGF0YWJhc2VWZXJzaW9uKHVpbnQ2NF90IHJlcXVl
c3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklELCB1aW50NjRfdCBuZXdWZXJzaW9uKQogewogICAg
IEFTU0VSVChtX3VuaXF1ZUlEQkRhdGFiYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5o
IGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nl
c3NJREJDb25uZWN0aW9uLmgKaW5kZXggOTIzYjUyZC4uNDBhNmM0ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJD
b25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWRE
Qi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmgKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luRGF0YS5oIgogI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNl
SWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb25NZXNz
YWdlcy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC01NSw2ICs1Niw3IEBAIHB1YmxpYzoKIAogICAgIC8vIE1lc3NhZ2UgaGFuZGxl
cnMuCiAgICAgdm9pZCBkaWRSZWNlaXZlRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbk1lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uKiwgSVBDOjpNZXNzYWdlRGVjb2RlciYpOworICAgIHZvaWQgZGlk
UmVjZWl2ZVN5bmNEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24qIGNvbm5lY3Rpb24sIElQQzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5p
cXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKTsKIAogICAgIHZvaWQg
ZGlzY29ubmVjdGVkRnJvbVdlYlByb2Nlc3MoKTsKIApAQCAtNzQsNiArNzYsOCBAQCBwcml2YXRl
OgogICAgIHZvaWQgY29tbWl0VHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90
IHRyYW5zYWN0aW9uSUQpOwogICAgIHZvaWQgcmVzZXRUcmFuc2FjdGlvbih1aW50NjRfdCByZXF1
ZXN0SUQsIGludDY0X3QgdHJhbnNhY3Rpb25JRCk7CiAgICAgdm9pZCByb2xsYmFja1RyYW5zYWN0
aW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklEKTsKKyAgICB2b2lk
IHJlc2V0VHJhbnNhY3Rpb25TeW5jKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgUGFzc1JlZlB0cjxN
ZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6UmVzZXRUcmFuc2FjdGlvblN5
bmM6OkRlbGF5ZWRSZXBseT4pOworICAgIHZvaWQgcm9sbGJhY2tUcmFuc2FjdGlvblN5bmMoaW50
NjRfdCB0cmFuc2FjdGlvbklELCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpEYXRhYmFzZVByb2Nlc3NJ
REJDb25uZWN0aW9uOjpSb2xsYmFja1RyYW5zYWN0aW9uU3luYzo6RGVsYXllZFJlcGx5Pik7CiAg
ICAgdm9pZCBjaGFuZ2VEYXRhYmFzZVZlcnNpb24odWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90
IHRyYW5zYWN0aW9uSUQsIHVpbnQ2NF90IG5ld1ZlcnNpb24pOwogICAgIHZvaWQgY3JlYXRlT2Jq
ZWN0U3RvcmUodWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlTWV0YWRhdGEpOwogICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUo
dWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5k
ZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24ubWVzc2FnZXMuaW4gYi9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5l
Y3Rpb24ubWVzc2FnZXMuaW4KaW5kZXggMWVkYTM1Yy4uZGRmOWI4MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJD
b25uZWN0aW9uLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpAQCAt
MzIsNiArMzIsOSBAQCBtZXNzYWdlcyAtPiBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uIExl
Z2FjeVJlY2VpdmVyIHsKICAgICBDb21taXRUcmFuc2FjdGlvbih1aW50NjRfdCByZXF1ZXN0SUQs
IGludDY0X3QgdHJhbnNhY3Rpb25JRCkKICAgICBSZXNldFRyYW5zYWN0aW9uKHVpbnQ2NF90IHJl
cXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklEKQogICAgIFJvbGxiYWNrVHJhbnNhY3Rpb24o
dWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQpCisKKyAgICBSZXNldFRy
YW5zYWN0aW9uU3luYyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQpIC0+IChib29sIHN1Y2Nlc3MpIERl
bGF5ZWQKKyAgICBSb2xsYmFja1RyYW5zYWN0aW9uU3luYyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQp
IC0+IChib29sIHN1Y2Nlc3MpIERlbGF5ZWQKICAgICAKICAgICBDaGFuZ2VEYXRhYmFzZVZlcnNp
b24odWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHVpbnQ2NF90IG5l
d1ZlcnNpb24pCiAgICAgQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgcmVxdWVzdElELCBpbnQ2
NF90IHRyYW5zYWN0aW9uSUQsIFdlYkNvcmU6OklEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0
U3RvcmVNZXRhZGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJh
c2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggMjc5NzA0Zi4u
ZmM4YjgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQ
cm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTExMyw5ICsxMTMsMTAg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVnaXN0ZXJDb25uZWN0aW9uKERhdGFiYXNlUHJv
Y2Vzc0lEQkNvbm5lY3Rpb24mIGNvbm5lY3QKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnVucmVn
aXN0ZXJDb25uZWN0aW9uKERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24p
CiB7CiAgICAgQVNTRVJUKG1fY29ubmVjdGlvbnMuY29udGFpbnMoJmNvbm5lY3Rpb24pKTsKKyAg
ICByZXNldEFsbFRyYW5zYWN0aW9ucyhjb25uZWN0aW9uKTsKICAgICBtX2Nvbm5lY3Rpb25zLnJl
bW92ZSgmY29ubmVjdGlvbik7CiAKLSAgICBpZiAobV9jb25uZWN0aW9ucy5pc0VtcHR5KCkpIHsK
KyAgICBpZiAobV9jb25uZWN0aW9ucy5pc0VtcHR5KCkgJiYgbV9wZW5kaW5nVHJhbnNhY3Rpb25S
b2xsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgIHNodXRkb3duKFVuaXF1ZUlEQkRhdGFiYXNl
U2h1dGRvd25UeXBlOjpOb3JtYWxTaHV0ZG93bik7CiAgICAgICAgIERhdGFiYXNlUHJvY2Vzczo6
c2hhcmVkKCkucmVtb3ZlVW5pcXVlSURCRGF0YWJhc2UoKnRoaXMpOwogICAgIH0KQEAgLTMzNywx
MCArMzM4LDEyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZENvbXBsZXRlVHJhbnNhY3Rp
b25PcGVyYXRpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhCiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKIAogICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBtX3BlbmRp
bmdUcmFuc2FjdGlvblJlcXVlc3RzLnRha2UodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKLSAgICBp
ZiAoIXJlcXVlc3QpCi0gICAgICAgIHJldHVybjsKIAotICAgIHJlcXVlc3QtPmNvbXBsZXRlUmVx
dWVzdChzdWNjZXNzKTsKKyAgICBpZiAocmVxdWVzdCkKKyAgICAgICAgcmVxdWVzdC0+Y29tcGxl
dGVSZXF1ZXN0KHN1Y2Nlc3MpOworCisgICAgaWYgKG1fcGVuZGluZ1RyYW5zYWN0aW9uUm9sbGJh
Y2tzLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRpZmllcikpCisgICAgICAgIGZpbmFsaXplUm9s
bGJhY2sodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6Y2hhbmdlRGF0YWJhc2VWZXJzaW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgdWludDY0X3QgbmV3VmVyc2lvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wp
PiBzdWNjZXNzQ2FsbGJhY2spCkBAIC03MTQsNiArNzE3LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6b3BlbkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRy
YW5zYWMKIAogICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5lc3RhYmxpc2hUcmFu
c2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSURzLCBtb2RlKTsKIAor
ICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVBc3luY1Rhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkRXN0YWJsaXNoVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
c3VjY2VzcykpOwogICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVBc3luY1Rhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ29tcGxldGVUcmFuc2FjdGlvbk9wZXJhdGlvbiwgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBzdWNjZXNzKSk7CiB9CiAKQEAgLTc0NCw2ICs3NDgsNyBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZXNldEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGNvbnN0
IElEQklkZW50aWZpZXImIHRyYW5zYQogCiAgICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5nU3Rv
cmUtPnJlc2V0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKIAorICAgIHBvc3RN
YWluVGhyZWFkVGFzayhjcmVhdGVBc3luY1Rhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkUmVzZXRUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBzdWNjZXNzKSk7CiAg
ICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUFzeW5jVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRDb21wbGV0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uLCB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIHN1Y2Nlc3MpKTsKIH0KIApAQCAtMTA3MCw2ICsxMDc1LDYyIEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmRpZERlbGV0ZVJhbmdlSW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVz
dElELCB1aW50MzJfCiAgICAgcmVxdWVzdC0+Y29tcGxldGVSZXF1ZXN0KGVycm9yQ29kZSwgZXJy
b3JNZXNzYWdlKTsKIH0KIAordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRXN0YWJsaXNoVHJh
bnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBib29s
IHN1Y2Nlc3MpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAoIXN1
Y2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25zID0gbV9lc3Rh
Ymxpc2hlZFRyYW5zYWN0aW9ucy5hZGQoJnRyYW5zYWN0aW9uSWRlbnRpZmllci5jb25uZWN0aW9u
KCksIEhhc2hTZXQ8SURCSWRlbnRpZmllcj4oKSk7CisgICAgdHJhbnNhY3Rpb25zLml0ZXJhdG9y
LT52YWx1ZS5hZGQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKK30KKwordm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkUmVzZXRUcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGJvb2wgc3VjY2VzcykKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0
cmFuc2FjdGlvbnMgPSBtX2VzdGFibGlzaGVkVHJhbnNhY3Rpb25zLmZpbmQoJnRyYW5zYWN0aW9u
SWRlbnRpZmllci5jb25uZWN0aW9uKCkpOworICAgIGlmICh0cmFuc2FjdGlvbnMgIT0gbV9lc3Rh
Ymxpc2hlZFRyYW5zYWN0aW9ucy5lbmQoKSkKKyAgICAgICAgdHJhbnNhY3Rpb25zLmdldCgpLT52
YWx1ZS5yZW1vdmUodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKK30KKwordm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6cmVzZXRBbGxUcmFuc2FjdGlvbnMoY29uc3QgRGF0YWJhc2VQcm9jZXNzSURCQ29u
bmVjdGlvbiYgY29ubmVjdGlvbikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgIGF1dG8gdHJhbnNhY3Rpb25zID0gbV9lc3RhYmxpc2hlZFRyYW5zYWN0aW9ucy5maW5kKCZj
b25uZWN0aW9uKTsKKyAgICBpZiAodHJhbnNhY3Rpb25zID09IG1fZXN0YWJsaXNoZWRUcmFuc2Fj
dGlvbnMuZW5kKCkgfHwgIW1fYWNjZXB0aW5nTmV3UmVxdWVzdHMpCisgICAgICAgIHJldHVybjsK
KworICAgIGZvciAoYXV0byYgdHJhbnNhY3Rpb25JZGVudGlmaWVyIDogdHJhbnNhY3Rpb25zLmdl
dCgpLT52YWx1ZSkgeworICAgICAgICBtX3BlbmRpbmdUcmFuc2FjdGlvblJvbGxiYWNrcy5hZGQo
dHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFtX3BlbmRpbmdUcmFuc2FjdGlv
blJlcXVlc3RzLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRpZmllcikpCisgICAgICAgICAgICBm
aW5hbGl6ZVJvbGxiYWNrKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CisgICAgfQorfQorCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5hbGl6ZVJvbGxiYWNrKGNvbnN0IFdlYktpdDo6SURCSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OworICAgIEFTU0VSVChtX3BlbmRpbmdUcmFuc2FjdGlvblJvbGxiYWNrcy5jb250YWlucyh0cmFu
c2FjdGlvbklkKSk7CisgICAgQVNTRVJUKCFtX3BlbmRpbmdUcmFuc2FjdGlvblJlcXVlc3RzLmNv
bnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsKKyAgICByb2xsYmFja1RyYW5zYWN0aW9uKHRyYW5zYWN0
aW9uSWQsIFt0aGlzLCB0cmFuc2FjdGlvbklkXShib29sKSB7CisgICAgICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisgICAgICAgIGlmIChtX3BlbmRpbmdUcmFuc2FjdGlvblJlcXVlc3Rz
LmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IEFTU0VSVChtX3BlbmRpbmdUcmFuc2FjdGlvblJvbGxiYWNrcy5jb250YWlucyh0cmFuc2FjdGlv
bklkKSk7CisgICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9uUm9sbGJhY2tzLnJlbW92ZSh0cmFu
c2FjdGlvbklkKTsKKyAgICAgICAgcmVzZXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkLCBbdGhp
cywgdHJhbnNhY3Rpb25JZF0oYm9vbCkgeworICAgICAgICAgICAgaWYgKG1fYWNjZXB0aW5nTmV3
UmVxdWVzdHMgJiYgbV9jb25uZWN0aW9ucy5pc0VtcHR5KCkgJiYgbV9wZW5kaW5nVHJhbnNhY3Rp
b25Sb2xsYmFja3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgc2h1dGRvd24oVW5pcXVl
SURCRGF0YWJhc2VTaHV0ZG93blR5cGU6Ok5vcm1hbFNodXRkb3duKTsKKyAgICAgICAgICAgICAg
ICBEYXRhYmFzZVByb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZVVuaXF1ZUlEQkRhdGFiYXNlKCp0aGlz
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKIFN0cmluZyBVbmlx
dWVJREJEYXRhYmFzZTo6YWJzb2x1dGVEYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJL
aXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuaAppbmRleCBl
OTYzNjMyLi44OGQ2M2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5oCkBAIC0xODUsMTAgKzE4
NSwxNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkU2h1dGRvd25CYWNraW5nU3RvcmUoVW5pcXVl
SURCRGF0YWJhc2VTaHV0ZG93blR5cGUpOwogICAgIHZvaWQgZGlkQ29tcGxldGVCb29sUmVxdWVz
dCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2Vzcyk7CiAKKyAgICB2b2lkIGRpZEVzdGFi
bGlzaFRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgYm9vbCBzdWNjZXNzKTsKKyAgICB2b2lkIGRpZFJlc2V0VHJhbnNhY3Rpb24oY29uc3QgSURC
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBib29sIHN1Y2Nlc3MpOworICAgIHZv
aWQgcmVzZXRBbGxUcmFuc2FjdGlvbnMoY29uc3QgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlv
biYpOworICAgIHZvaWQgZmluYWxpemVSb2xsYmFjayhjb25zdCBJREJJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkKTsKKwogICAgIGJvb2wgbV9hY2NlcHRpbmdOZXdSZXF1ZXN0czsKIAorICAgIEhh
c2hNYXA8Y29uc3QgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbiosIEhhc2hTZXQ8SURCSWRl
bnRpZmllcj4+IG1fZXN0YWJsaXNoZWRUcmFuc2FjdGlvbnM7CiAgICAgRGVxdWU8UmVmUHRyPEFz
eW5jUmVxdWVzdD4+IG1fcGVuZGluZ01ldGFkYXRhUmVxdWVzdHM7CiAgICAgSGFzaE1hcDxJREJJ
ZGVudGlmaWVyLCBSZWZQdHI8QXN5bmNSZXF1ZXN0Pj4gbV9wZW5kaW5nVHJhbnNhY3Rpb25SZXF1
ZXN0czsKKyAgICBIYXNoU2V0PElEQklkZW50aWZpZXI+IG1fcGVuZGluZ1RyYW5zYWN0aW9uUm9s
bGJhY2tzOwogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxBc3luY1JlcXVlc3Q+PiBtX3Bl
bmRpbmdEYXRhYmFzZVRhc2tzOwogICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IG1fcGVuZGluZ1No
dXRkb3duVGFzazsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3Bw
IGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVl
SURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwCmluZGV4IDdkNjg3YjkuLmNlMWEzYjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3Fs
aXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAKQEAgLTM5MSw2ICszOTEsMTEgQEAgYm9vbCBVbmlxdWVJ
REJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6cm9sbGJhY2tUcmFuc2FjdGlvbihjb25zdCBJ
REJJZGVudGlmaWUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIGlmICghdHJh
bnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgeworICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8g
cm9sbGJhY2sgYSB0cmFuc2FjdGlvbiB0aGF0IGhhc24ndCBiZWd1biIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCiAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRl
eGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5jcHAKaW5kZXgg
ZTUyNDRjYy4uYTlkOTRiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9E
YXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJDb25u
ZWN0aW9uLmNwcApAQCAtMjY2LDYgKzI2NiwxMyBAQCB2b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rp
b246OmRpZFJlc2V0VHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVzdElELCBib29sKQogICAgIHNl
cnZlclJlcXVlc3QtPmNvbXBsZXRlUmVxdWVzdCgpOwogfQogCitib29sIFdlYklEQlNlcnZlckNv
bm5lY3Rpb246OnJlc2V0VHJhbnNhY3Rpb25TeW5jKGludDY0X3QgdHJhbnNhY3Rpb25JRCkKK3sK
KyAgICBib29sIHN1Y2Nlc3M7CisgICAgc2VuZFN5bmMoTWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vz
c0lEQkNvbm5lY3Rpb246OlJlc2V0VHJhbnNhY3Rpb25TeW5jKHRyYW5zYWN0aW9uSUQpLCBNZXNz
YWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6UmVzZXRUcmFuc2FjdGlvblN5bmM6
OlJlcGx5KHN1Y2Nlc3MpKTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwogdm9pZCBXZWJJREJT
ZXJ2ZXJDb25uZWN0aW9uOjpyb2xsYmFja1RyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25J
RCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsKICAgICBSZWZQ
dHI8QXN5bmNSZXF1ZXN0PiBzZXJ2ZXJSZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1wbDw+OjpjcmVh
dGUoY29tcGxldGlvbkNhbGxiYWNrLCBjb21wbGV0aW9uQ2FsbGJhY2spOwpAQCAtMjkxLDYgKzI5
OCwxMyBAQCB2b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OmRpZFJvbGxiYWNrVHJhbnNhY3Rp
b24odWludDY0X3QgcmVxdWVzdElELCBib29sKQogICAgIHNlcnZlclJlcXVlc3QtPmNvbXBsZXRl
UmVxdWVzdCgpOwogfQogCitib29sIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OnJvbGxiYWNrVHJh
bnNhY3Rpb25TeW5jKGludDY0X3QgdHJhbnNhY3Rpb25JRCkKK3sKKyAgICBib29sIHN1Y2Nlc3M7
CisgICAgc2VuZFN5bmMoTWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OlJv
bGxiYWNrVHJhbnNhY3Rpb25TeW5jKHRyYW5zYWN0aW9uSUQpLCBNZXNzYWdlczo6RGF0YWJhc2VQ
cm9jZXNzSURCQ29ubmVjdGlvbjo6Um9sbGJhY2tUcmFuc2FjdGlvblN5bmM6OlJlcGx5KHN1Y2Nl
c3MpKTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwogdm9pZCBXZWJJREJTZXJ2ZXJDb25uZWN0
aW9uOjpzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklELCBpbnQ2NF90IGRhdGFiYXNl
SUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYs
IElEQktleSYgcHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElEcywgY29u
c3QgVmVjdG9yPFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4+JiBpbmRleEtleXMsIHN0ZDo6ZnVuY3Rp
b248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNr
KQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMv
SW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJDb25uZWN0aW9uLmgKaW5kZXgg
NGRiN2U4NC4uNDBjNTZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9E
YXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVj
dGlvbi5oCkBAIC02NCw3ICs2NCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5U
cmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBj
b21wbGV0aW9uQ2FsbGJhY2spIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBjb21taXRUcmFu
c2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIEJvb2xDYWxsYmFja0Z1bmN0aW9uIHN1Y2Nl
c3NDYWxsYmFjaykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0VHJhbnNhY3Rpb24o
aW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNh
bGxiYWNrKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVzZXRUcmFuc2FjdGlvblN5bmMo
aW50NjRfdCB0cmFuc2FjdGlvbklEKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJh
Y2tUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgp
PiBjb21wbGV0aW9uQ2FsbGJhY2spIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCByb2xsYmFj
a1RyYW5zYWN0aW9uU3luYyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQpIG92ZXJyaWRlOwogCiAgICAg
dmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3Qg
ZGF0YWJhc2VJRCwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhJiwgV2ViQ29yZTo6SURCS2V5JiBwcmltYXJ5S2V5LCBjb25zdCBWZWN0
b3I8aW50NjRfdD4mIGluZGV4SURzLCBjb25zdCBWZWN0b3I8VmVjdG9yPFJlZlB0cjxXZWJDb3Jl
OjpJREJLZXk+Pj4mIGluZGV4S2V5cywgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8V2Vi
Q29yZTo6SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spIG92ZXJyaWRlOwog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236136</attachid>
            <date>2014-08-06 14:28:45 -0700</date>
            <delta_ts>2014-08-06 16:29:51 -0700</delta_ts>
            <desc>Patch for testing v2 - Much better</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19399</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNv
bm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNv
bm5lY3Rpb24uaAppbmRleCAzY2U0MjgyLi4yYjMyMDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJTZXJ2ZXJDb25uZWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCU2VydmVyQ29ubmVjdGlvbi5oCkBAIC03MCw3
ICs3MCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc2FjdGlvbihpbnQ2
NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJh
Y2spID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0VHJhbnNhY3Rpb24oaW50NjRfdCB0cmFu
c2FjdGlvbklELCBCb29sQ2FsbGJhY2tGdW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2spID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXRUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgcmVzZXRUcmFuc2FjdGlvblN5bmMoaW50NjRfdCB0cmFuc2FjdGlvbklEKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHJvbGxiYWNrVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklE
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmly
dHVhbCBib29sIHJvbGxiYWNrVHJhbnNhY3Rpb25TeW5jKGludDY0X3QgdHJhbnNhY3Rpb25JRCkg
PSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9u
SUQsIGludDY0X3QgZGF0YWJhc2VJRCwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJiwgSURCS2V5JiBwcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50
NjRfdD4mIGluZGV4SURzLCBjb25zdCBWZWN0b3I8VmVjdG9yPFJlZlB0cjxJREJLZXk+Pj4mIGlu
ZGV4S2V5cywgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4p
PiBjb21wbGV0aW9uQ2FsbGJhY2spID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKaW5kZXggNjhk
MmNhOC4uNjFiOWQzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCkBAIC0xMzcsNyArMTM3LDcgQEAg
dm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4gZXJyb3IpCiAgICAgbV90YXNrVGltZXIuc3RvcCgpOwogCiAgICAgaWYgKHdhc1J1bm5p
bmcpCi0gICAgICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5yb2xsYmFja1RyYW5z
YWN0aW9uKG1faWQsIFtdKCkgeyB9KTsKKyAgICAgICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVj
dGlvbigpLnJlc2V0VHJhbnNhY3Rpb25TeW5jKG1faWQpOwogCiAgICAgLy8gUnVuIHRoZSBhYm9y
dCB0YXNrcywgaWYgYW55LgogICAgIHdoaWxlICghbV9hYm9ydFRhc2tRdWV1ZS5pc0VtcHR5KCkp
IHsKQEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6YWJvcnQo
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikKICAgICAvLyBpdHNlbGYgdG8gYmUg
cmVsZWFzZWQsIGFuZCBvcmRlciBpcyBjcml0aWNhbC4KICAgICBjbG9zZU9wZW5DdXJzb3JzKCk7
CiAKLSAgICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkucmVzZXRUcmFuc2FjdGlvbiht
X2lkLCBbXSgpIHsgfSk7CisgICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLnJlc2V0
VHJhbnNhY3Rpb25TeW5jKG1faWQpOwogCiAgICAgLy8gVHJhbnNhY3Rpb25zIG11c3QgYWxzbyBi
ZSBtYXJrZWQgYXMgY29tcGxldGVkIGJlZm9yZSB0aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVkLCBh
cwogICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIHVuYmxvY2tzIG9wZXJhdGlvbnMg
bGlrZSBjbG9zaW5nIGNvbm5lY3Rpb25zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL0RhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmNw
cAppbmRleCA3ZjkwYzQzLi5kMDE3NjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9u
LmNwcApAQCAtNjUsMTMgKzY1LDI3IEBAIHZvaWQgRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0
aW9uOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3RpCiAgICAgICAg
ICAgICBiYWNrZW5kSXRlcmF0b3ItPnZhbHVlLT5kaWRSZWNlaXZlRGF0YWJhc2VQcm9jZXNzSURC
Q29ubmVjdGlvbk1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgCisKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBEYXRh
YmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiopCit2
b2lkIERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2Rl
ciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+JiByZXBseSkKIHsKKyAgICBp
ZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkRhdGFiYXNlUHJv
Y2Vzc0lEQkNvbm5lY3Rpb246Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgeworICAgICAgICBJREJD
b25uZWN0aW9uTWFwOjppdGVyYXRvciBiYWNrZW5kSXRlcmF0b3IgPSBtX2lkYkNvbm5lY3Rpb25z
LmZpbmQoZGVjb2Rlci5kZXN0aW5hdGlvbklEKCkpOworICAgICAgICBpZiAoYmFja2VuZEl0ZXJh
dG9yICE9IG1faWRiQ29ubmVjdGlvbnMuZW5kKCkpCisgICAgICAgICAgICBiYWNrZW5kSXRlcmF0
b3ItPnZhbHVlLT5kaWRSZWNlaXZlU3luY0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb25NZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQogCit2b2lkIERhdGFiYXNlVG9XZWJQcm9j
ZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uKikKK3sKKyAgICAvLyBUaGUg
V2ViUHJvY2VzcyBoYXMgZGlzY29ubmVjdGVkLCBjbG9zZSBhbGwgb2YgdGhlIGNvbm5lY3Rpb25z
IGFzc29jaWF0ZWQgd2l0aCBpdAorICAgIHdoaWxlICghbV9pZGJDb25uZWN0aW9ucy5pc0VtcHR5
KCkpCisgICAgICAgIHJlbW92ZURhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24obV9pZGJDb25u
ZWN0aW9ucy5iZWdpbigpLT5rZXkpOwogfQogCiB2b2lkIERhdGFiYXNlVG9XZWJQcm9jZXNzQ29u
bmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiosIElQQzo6
U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNl
IG1lc3NhZ2VOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0RhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJh
c2VQcm9jZXNzL0RhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbi5oCmluZGV4IGM5ZDFiMjku
LjcxNDg3ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRh
YmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmgKQEAgLTQ4LDYgKzQ4LDcg
QEAgcHJpdmF0ZToKIAogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiosIElQQzo6TWVzc2FnZURl
Y29kZXImKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiosIElQQzo6TWVzc2FnZURlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8
SVBDOjpNZXNzYWdlRW5jb2Rlcj4mKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xv
c2UoSVBDOjpDb25uZWN0aW9uKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBt
ZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgb3Zl
cnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9u
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJv
Y2Vzc0lEQkNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcAppbmRleCA0Zjc3OGMyLi43
ZDczMzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhl
ZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5j
cHAKQEAgLTE4Niw2ICsxODYsMjQgQEAgdm9pZCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9u
Ojpyb2xsYmFja1RyYW5zYWN0aW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjQKICAgICB9KTsK
IH0KIAordm9pZCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpyZXNldFRyYW5zYWN0aW9u
U3luYyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIFBhc3NSZWZQdHI8TWVzc2FnZXM6OkRhdGFiYXNl
UHJvY2Vzc0lEQkNvbm5lY3Rpb246OlJlc2V0VHJhbnNhY3Rpb25TeW5jOjpEZWxheWVkUmVwbHk+
IHBycFJlcGx5KQoreworICAgIFJlZlB0cjxNZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29u
bmVjdGlvbjo6UmVzZXRUcmFuc2FjdGlvblN5bmM6OkRlbGF5ZWRSZXBseT4gcmVwbHkocHJwUmVw
bHkpOworICAgIFJlZlB0cjxEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uPiBjb25uZWN0aW9u
KHRoaXMpOworICAgIG1fdW5pcXVlSURCRGF0YWJhc2UtPnJlc2V0VHJhbnNhY3Rpb24oSURCSWRl
bnRpZmllcigqdGhpcywgdHJhbnNhY3Rpb25JRCksIFtjb25uZWN0aW9uLCByZXBseV0oYm9vbCBz
dWNjZXNzKSB7CisgICAgICAgIHJlcGx5LT5zZW5kKHN1Y2Nlc3MpOworICAgIH0pOworfQorCit2
b2lkIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OnJvbGxiYWNrVHJhbnNhY3Rpb25TeW5j
KGludDY0X3QgdHJhbnNhY3Rpb25JRCwgUGFzc1JlZlB0cjxNZXNzYWdlczo6RGF0YWJhc2VQcm9j
ZXNzSURCQ29ubmVjdGlvbjo6Um9sbGJhY2tUcmFuc2FjdGlvblN5bmM6OkRlbGF5ZWRSZXBseT4g
cHJwUmVwbHkpCit7CisgICAgUmVmUHRyPE1lc3NhZ2VzOjpEYXRhYmFzZVByb2Nlc3NJREJDb25u
ZWN0aW9uOjpSb2xsYmFja1RyYW5zYWN0aW9uU3luYzo6RGVsYXllZFJlcGx5PiByZXBseShwcnBS
ZXBseSk7CisgICAgUmVmUHRyPERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24+IGNvbm5lY3Rp
b24odGhpcyk7CisgICAgbV91bmlxdWVJREJEYXRhYmFzZS0+cm9sbGJhY2tUcmFuc2FjdGlvbihJ
REJJZGVudGlmaWVyKCp0aGlzLCB0cmFuc2FjdGlvbklEKSwgW2Nvbm5lY3Rpb24sIHJlcGx5XShi
b29sIHN1Y2Nlc3MpIHsKKyAgICAgICAgcmVwbHktPnNlbmQoc3VjY2Vzcyk7CisgICAgfSk7Cit9
CisKIHZvaWQgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Y2hhbmdlRGF0YWJhc2VWZXJz
aW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklELCB1aW50NjRfdCBu
ZXdWZXJzaW9uKQogewogICAgIEFTU0VSVChtX3VuaXF1ZUlEQkRhdGFiYXNlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9j
ZXNzSURCQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmgKaW5kZXggOTIzYjUyZC4uNDBhNmM0
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9E
YXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJh
c2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmgKQEAgLTMy
LDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luRGF0YS5oIgogI2luY2x1ZGUg
IlVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vz
c0lEQkNvbm5lY3Rpb25NZXNzYWdlcy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01NSw2ICs1Niw3IEBAIHB1YmxpYzoKIAogICAg
IC8vIE1lc3NhZ2UgaGFuZGxlcnMuCiAgICAgdm9pZCBkaWRSZWNlaXZlRGF0YWJhc2VQcm9jZXNz
SURCQ29ubmVjdGlvbk1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uKiwgSVBDOjpNZXNzYWdlRGVjb2Rl
ciYpOworICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9u
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIElQQzo6TWVzc2FnZURlY29kZXIm
IGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPiYgcmVwbHlFbmNv
ZGVyKTsKIAogICAgIHZvaWQgZGlzY29ubmVjdGVkRnJvbVdlYlByb2Nlc3MoKTsKIApAQCAtNzQs
NiArNzYsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tbWl0VHJhbnNhY3Rpb24odWludDY0X3Qg
cmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQpOwogICAgIHZvaWQgcmVzZXRUcmFuc2Fj
dGlvbih1aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgdHJhbnNhY3Rpb25JRCk7CiAgICAgdm9p
ZCByb2xsYmFja1RyYW5zYWN0aW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2Fj
dGlvbklEKTsKKyAgICB2b2lkIHJlc2V0VHJhbnNhY3Rpb25TeW5jKGludDY0X3QgdHJhbnNhY3Rp
b25JRCwgUGFzc1JlZlB0cjxNZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6
UmVzZXRUcmFuc2FjdGlvblN5bmM6OkRlbGF5ZWRSZXBseT4pOworICAgIHZvaWQgcm9sbGJhY2tU
cmFuc2FjdGlvblN5bmMoaW50NjRfdCB0cmFuc2FjdGlvbklELCBQYXNzUmVmUHRyPE1lc3NhZ2Vz
OjpEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpSb2xsYmFja1RyYW5zYWN0aW9uU3luYzo6
RGVsYXllZFJlcGx5Pik7CiAgICAgdm9pZCBjaGFuZ2VEYXRhYmFzZVZlcnNpb24odWludDY0X3Qg
cmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHVpbnQ2NF90IG5ld1ZlcnNpb24pOwog
ICAgIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRy
YW5zYWN0aW9uSUQsIFdlYkNvcmU6OklEQk9iamVjdFN0b3JlTWV0YWRhdGEpOwogICAgIHZvaWQg
ZGVsZXRlT2JqZWN0U3RvcmUodWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9u
SUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24ubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFi
YXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24ubWVzc2FnZXMuaW4KaW5kZXggMWVkYTM1Yy4uZGRmOWI4
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9E
YXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlv
bi5tZXNzYWdlcy5pbgpAQCAtMzIsNiArMzIsOSBAQCBtZXNzYWdlcyAtPiBEYXRhYmFzZVByb2Nl
c3NJREJDb25uZWN0aW9uIExlZ2FjeVJlY2VpdmVyIHsKICAgICBDb21taXRUcmFuc2FjdGlvbih1
aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgdHJhbnNhY3Rpb25JRCkKICAgICBSZXNldFRyYW5z
YWN0aW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklEKQogICAgIFJv
bGxiYWNrVHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9u
SUQpCisKKyAgICBSZXNldFRyYW5zYWN0aW9uU3luYyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQpIC0+
IChib29sIHN1Y2Nlc3MpIERlbGF5ZWQKKyAgICBSb2xsYmFja1RyYW5zYWN0aW9uU3luYyhpbnQ2
NF90IHRyYW5zYWN0aW9uSUQpIC0+IChib29sIHN1Y2Nlc3MpIERlbGF5ZWQKICAgICAKICAgICBD
aGFuZ2VEYXRhYmFzZVZlcnNpb24odWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0
aW9uSUQsIHVpbnQ2NF90IG5ld1ZlcnNpb24pCiAgICAgQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0
X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291
cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5j
cHAKaW5kZXggMjc5NzA0Zi4uZmM4YjgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAK
QEAgLTExMyw5ICsxMTMsMTAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVnaXN0ZXJDb25u
ZWN0aW9uKERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24mIGNvbm5lY3QKIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnVucmVnaXN0ZXJDb25uZWN0aW9uKERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24pCiB7CiAgICAgQVNTRVJUKG1fY29ubmVjdGlvbnMuY29udGFpbnMo
JmNvbm5lY3Rpb24pKTsKKyAgICByZXNldEFsbFRyYW5zYWN0aW9ucyhjb25uZWN0aW9uKTsKICAg
ICBtX2Nvbm5lY3Rpb25zLnJlbW92ZSgmY29ubmVjdGlvbik7CiAKLSAgICBpZiAobV9jb25uZWN0
aW9ucy5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9jb25uZWN0aW9ucy5pc0VtcHR5KCkgJiYgbV9w
ZW5kaW5nVHJhbnNhY3Rpb25Sb2xsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgIHNodXRkb3du
KFVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25UeXBlOjpOb3JtYWxTaHV0ZG93bik7CiAgICAgICAg
IERhdGFiYXNlUHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlVW5pcXVlSURCRGF0YWJhc2UoKnRoaXMp
OwogICAgIH0KQEAgLTMzNywxMCArMzM4LDEyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZENvbXBsZXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhCiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+
IHJlcXVlc3QgPSBtX3BlbmRpbmdUcmFuc2FjdGlvblJlcXVlc3RzLnRha2UodHJhbnNhY3Rpb25J
ZGVudGlmaWVyKTsKLSAgICBpZiAoIXJlcXVlc3QpCi0gICAgICAgIHJldHVybjsKIAotICAgIHJl
cXVlc3QtPmNvbXBsZXRlUmVxdWVzdChzdWNjZXNzKTsKKyAgICBpZiAocmVxdWVzdCkKKyAgICAg
ICAgcmVxdWVzdC0+Y29tcGxldGVSZXF1ZXN0KHN1Y2Nlc3MpOworCisgICAgaWYgKG1fcGVuZGlu
Z1RyYW5zYWN0aW9uUm9sbGJhY2tzLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRpZmllcikpCisg
ICAgICAgIGZpbmFsaXplUm9sbGJhY2sodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKIH0KIAogdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6Y2hhbmdlRGF0YWJhc2VWZXJzaW9uKGNvbnN0IElEQklkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3QgbmV3VmVyc2lvbiwgc3RkOjpm
dW5jdGlvbjx2b2lkKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2spCkBAIC03MTQsNiArNzE3LDcgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGNvbnN0
IElEQklkZW50aWZpZXImIHRyYW5zYWMKIAogICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFja2luZ1N0
b3JlLT5lc3RhYmxpc2hUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0
b3JlSURzLCBtb2RlKTsKIAorICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVBc3luY1Rhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRXN0YWJsaXNoVHJhbnNhY3Rpb24sIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgc3VjY2VzcykpOwogICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVh
dGVBc3luY1Rhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ29tcGxldGVUcmFuc2Fj
dGlvbk9wZXJhdGlvbiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBzdWNjZXNzKSk7CiB9CiAKQEAg
LTc0NCw2ICs3NDgsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZXNldEJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYQogCiAgICAgYm9vbCBzdWNj
ZXNzID0gbV9iYWNraW5nU3RvcmUtPnJlc2V0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlm
aWVyKTsKIAorICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVBc3luY1Rhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUmVzZXRUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBzdWNjZXNzKSk7CiAgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUFzeW5jVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRDb21wbGV0ZVRyYW5zYWN0aW9uT3BlcmF0aW9u
LCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHN1Y2Nlc3MpKTsKIH0KIApAQCAtMTA3MCw2ICsxMDc1
LDYyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZVJhbmdlSW5CYWNraW5nU3Rv
cmUodWludDY0X3QgcmVxdWVzdElELCB1aW50MzJfCiAgICAgcmVxdWVzdC0+Y29tcGxldGVSZXF1
ZXN0KGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKTsKIH0KIAordm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkRXN0YWJsaXNoVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBib29sIHN1Y2Nlc3MpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gdHJh
bnNhY3Rpb25zID0gbV9lc3RhYmxpc2hlZFRyYW5zYWN0aW9ucy5hZGQoJnRyYW5zYWN0aW9uSWRl
bnRpZmllci5jb25uZWN0aW9uKCksIEhhc2hTZXQ8SURCSWRlbnRpZmllcj4oKSk7CisgICAgdHJh
bnNhY3Rpb25zLml0ZXJhdG9yLT52YWx1ZS5hZGQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKK30K
Kwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUmVzZXRUcmFuc2FjdGlvbihjb25zdCBJREJJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGJvb2wgc3VjY2VzcykKK3sKKyAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byB0cmFuc2FjdGlvbnMgPSBtX2VzdGFibGlzaGVkVHJhbnNhY3Rpb25z
LmZpbmQoJnRyYW5zYWN0aW9uSWRlbnRpZmllci5jb25uZWN0aW9uKCkpOworICAgIGlmICh0cmFu
c2FjdGlvbnMgIT0gbV9lc3RhYmxpc2hlZFRyYW5zYWN0aW9ucy5lbmQoKSkKKyAgICAgICAgdHJh
bnNhY3Rpb25zLmdldCgpLT52YWx1ZS5yZW1vdmUodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKK30K
Kwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVzZXRBbGxUcmFuc2FjdGlvbnMoY29uc3QgRGF0
YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbiYgY29ubmVjdGlvbikKK3sKKyAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOworICAgIGF1dG8gdHJhbnNhY3Rpb25zID0gbV9lc3RhYmxpc2hlZFRy
YW5zYWN0aW9ucy5maW5kKCZjb25uZWN0aW9uKTsKKyAgICBpZiAodHJhbnNhY3Rpb25zID09IG1f
ZXN0YWJsaXNoZWRUcmFuc2FjdGlvbnMuZW5kKCkgfHwgIW1fYWNjZXB0aW5nTmV3UmVxdWVzdHMp
CisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
IDogdHJhbnNhY3Rpb25zLmdldCgpLT52YWx1ZSkgeworICAgICAgICBtX3BlbmRpbmdUcmFuc2Fj
dGlvblJvbGxiYWNrcy5hZGQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFt
X3BlbmRpbmdUcmFuc2FjdGlvblJlcXVlc3RzLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRpZmll
cikpCisgICAgICAgICAgICBmaW5hbGl6ZVJvbGxiYWNrKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7
CisgICAgfQorfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5hbGl6ZVJvbGxiYWNrKGNv
bnN0IFdlYktpdDo6SURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZCkKK3sKKyAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChtX3BlbmRpbmdUcmFuc2FjdGlvblJvbGxi
YWNrcy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7CisgICAgQVNTRVJUKCFtX3BlbmRpbmdUcmFu
c2FjdGlvblJlcXVlc3RzLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsKKyAgICByb2xsYmFja1Ry
YW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIFt0aGlzLCB0cmFuc2FjdGlvbklkXShib29sKSB7Cisg
ICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgICAgIGlmIChtX3BlbmRpbmdU
cmFuc2FjdGlvblJlcXVlc3RzLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIEFTU0VSVChtX3BlbmRpbmdUcmFuc2FjdGlvblJvbGxiYWNrcy5j
b250YWlucyh0cmFuc2FjdGlvbklkKSk7CisgICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9uUm9s
bGJhY2tzLnJlbW92ZSh0cmFuc2FjdGlvbklkKTsKKyAgICAgICAgcmVzZXRUcmFuc2FjdGlvbih0
cmFuc2FjdGlvbklkLCBbdGhpcywgdHJhbnNhY3Rpb25JZF0oYm9vbCkgeworICAgICAgICAgICAg
aWYgKG1fYWNjZXB0aW5nTmV3UmVxdWVzdHMgJiYgbV9jb25uZWN0aW9ucy5pc0VtcHR5KCkgJiYg
bV9wZW5kaW5nVHJhbnNhY3Rpb25Sb2xsYmFja3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAg
ICAgc2h1dGRvd24oVW5pcXVlSURCRGF0YWJhc2VTaHV0ZG93blR5cGU6Ok5vcm1hbFNodXRkb3du
KTsKKyAgICAgICAgICAgICAgICBEYXRhYmFzZVByb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZVVuaXF1
ZUlEQkRhdGFiYXNlKCp0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSk7
Cit9CisKIFN0cmluZyBVbmlxdWVJREJEYXRhYmFzZTo6YWJzb2x1dGVEYXRhYmFzZURpcmVjdG9y
eSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJh
c2UuaCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURC
RGF0YWJhc2UuaAppbmRleCBlOTYzNjMyLi44OGQ2M2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIv
U291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFz
ZS5oCkBAIC0xODUsMTAgKzE4NSwxNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkU2h1dGRvd25C
YWNraW5nU3RvcmUoVW5pcXVlSURCRGF0YWJhc2VTaHV0ZG93blR5cGUpOwogICAgIHZvaWQgZGlk
Q29tcGxldGVCb29sUmVxdWVzdCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2Vzcyk7CiAK
KyAgICB2b2lkIGRpZEVzdGFibGlzaFRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgYm9vbCBzdWNjZXNzKTsKKyAgICB2b2lkIGRpZFJlc2V0VHJh
bnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBib29s
IHN1Y2Nlc3MpOworICAgIHZvaWQgcmVzZXRBbGxUcmFuc2FjdGlvbnMoY29uc3QgRGF0YWJhc2VQ
cm9jZXNzSURCQ29ubmVjdGlvbiYpOworICAgIHZvaWQgZmluYWxpemVSb2xsYmFjayhjb25zdCBJ
REJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkKTsKKwogICAgIGJvb2wgbV9hY2NlcHRpbmdOZXdS
ZXF1ZXN0czsKIAorICAgIEhhc2hNYXA8Y29uc3QgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlv
biosIEhhc2hTZXQ8SURCSWRlbnRpZmllcj4+IG1fZXN0YWJsaXNoZWRUcmFuc2FjdGlvbnM7CiAg
ICAgRGVxdWU8UmVmUHRyPEFzeW5jUmVxdWVzdD4+IG1fcGVuZGluZ01ldGFkYXRhUmVxdWVzdHM7
CiAgICAgSGFzaE1hcDxJREJJZGVudGlmaWVyLCBSZWZQdHI8QXN5bmNSZXF1ZXN0Pj4gbV9wZW5k
aW5nVHJhbnNhY3Rpb25SZXF1ZXN0czsKKyAgICBIYXNoU2V0PElEQklkZW50aWZpZXI+IG1fcGVu
ZGluZ1RyYW5zYWN0aW9uUm9sbGJhY2tzOwogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxB
c3luY1JlcXVlc3Q+PiBtX3BlbmRpbmdEYXRhYmFzZVRhc2tzOwogICAgIFJlZlB0cjxBc3luY1Jl
cXVlc3Q+IG1fcGVuZGluZ1NodXRkb3duVGFzazsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNr
aW5nU3RvcmVTUUxpdGUuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwCmluZGV4
IDdkNjg3YjkuLmNlMWEzYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJv
Y2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0
ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAKQEAgLTM5MSw2ICszOTEs
MTEgQEAgYm9vbCBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6cm9sbGJhY2tU
cmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAorICAgIGlmICghdHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgeworICAgICAgICBMT0df
RVJST1IoIkF0dGVtcHQgdG8gcm9sbGJhY2sgYSB0cmFuc2FjdGlvbiB0aGF0IGhhc24ndCBiZWd1
biIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgcmV0dXJuIHRyYW5zYWN0
aW9uLT5yb2xsYmFjaygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29u
bmVjdGlvbi5jcHAKaW5kZXggZTUyNDRjYy4uYTlkOTRiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWRE
Qi9XZWJJREJTZXJ2ZXJDb25uZWN0aW9uLmNwcApAQCAtMjY2LDYgKzI2NiwxMyBAQCB2b2lkIFdl
YklEQlNlcnZlckNvbm5lY3Rpb246OmRpZFJlc2V0VHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVz
dElELCBib29sKQogICAgIHNlcnZlclJlcXVlc3QtPmNvbXBsZXRlUmVxdWVzdCgpOwogfQogCiti
b29sIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OnJlc2V0VHJhbnNhY3Rpb25TeW5jKGludDY0X3Qg
dHJhbnNhY3Rpb25JRCkKK3sKKyAgICBib29sIHN1Y2Nlc3M7CisgICAgc2VuZFN5bmMoTWVzc2Fn
ZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OlJlc2V0VHJhbnNhY3Rpb25TeW5jKHRy
YW5zYWN0aW9uSUQpLCBNZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6UmVz
ZXRUcmFuc2FjdGlvblN5bmM6OlJlcGx5KHN1Y2Nlc3MpKTsKKyAgICByZXR1cm4gc3VjY2VzczsK
K30KKwogdm9pZCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpyb2xsYmFja1RyYW5zYWN0aW9uKGlu
dDY0X3QgdHJhbnNhY3Rpb25JRCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxs
YmFjaykKIHsKICAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiBzZXJ2ZXJSZXF1ZXN0ID0gQXN5bmNS
ZXF1ZXN0SW1wbDw+OjpjcmVhdGUoY29tcGxldGlvbkNhbGxiYWNrLCBjb21wbGV0aW9uQ2FsbGJh
Y2spOwpAQCAtMjkxLDYgKzI5OCwxMyBAQCB2b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OmRp
ZFJvbGxiYWNrVHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVzdElELCBib29sKQogICAgIHNlcnZl
clJlcXVlc3QtPmNvbXBsZXRlUmVxdWVzdCgpOwogfQogCitib29sIFdlYklEQlNlcnZlckNvbm5l
Y3Rpb246OnJvbGxiYWNrVHJhbnNhY3Rpb25TeW5jKGludDY0X3QgdHJhbnNhY3Rpb25JRCkKK3sK
KyAgICBib29sIHN1Y2Nlc3M7CisgICAgc2VuZFN5bmMoTWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vz
c0lEQkNvbm5lY3Rpb246OlJvbGxiYWNrVHJhbnNhY3Rpb25TeW5jKHRyYW5zYWN0aW9uSUQpLCBN
ZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Um9sbGJhY2tUcmFuc2FjdGlv
blN5bmM6OlJlcGx5KHN1Y2Nlc3MpKTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwogdm9pZCBX
ZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklE
LCBpbnQ2NF90IGRhdGFiYXNlSUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSYsIElEQktleSYgcHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0
X3Q+JiBpbmRleElEcywgY29uc3QgVmVjdG9yPFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4+JiBpbmRl
eEtleXMsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4g
Y29tcGxldGlvbkNhbGxiYWNrKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJD
b25uZWN0aW9uLmgKaW5kZXggNGRiN2U4NC4uNDBjNTZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIv
V2ViSURCU2VydmVyQ29ubmVjdGlvbi5oCkBAIC02NCw3ICs2NCw5IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCBjb21taXRUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIEJvb2xDYWxs
YmFja0Z1bmN0aW9uIHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IHJlc2V0VHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVz
ZXRUcmFuc2FjdGlvblN5bmMoaW50NjRfdCB0cmFuc2FjdGlvbklEKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgcm9sbGJhY2tUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgYm9vbCByb2xsYmFja1RyYW5zYWN0aW9uU3luYyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQp
IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5z
YWN0aW9uSUQsIGludDY0X3QgZGF0YWJhc2VJRCwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25z
dCBXZWJDb3JlOjpJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgV2ViQ29yZTo6SURCS2V5JiBwcmlt
YXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SURzLCBjb25zdCBWZWN0b3I8VmVj
dG9yPFJlZlB0cjxXZWJDb3JlOjpJREJLZXk+Pj4mIGluZGV4S2V5cywgc3RkOjpmdW5jdGlvbjx2
b2lkKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2Fs
bGJhY2spIG92ZXJyaWRlOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236149</attachid>
            <date>2014-08-06 16:29:51 -0700</date>
            <delta_ts>2014-08-06 16:41:57 -0700</delta_ts>
            <desc>Mega patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>22855</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjMWM0ODIwLi42MWQ3NWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTQtMDgtMDYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIElEQiB0cmFuc2FjdGlvbnMgbmV2ZXIgcmVzZXQgaWYgdGhlIFdlYiBQcm9jZXNzIGVuZHMg
YmVmb3JlIGNsZWFuaW5nIHVwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzUyMTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMgKENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMpLgorCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCU2VydmVyQ29ubmVjdGlvbi5oOiBBZGQgc3lu
YyB2ZXJzaW9ucyBvZiByZXNldC9yb2xsYmFjay4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmQ6OmFib3J0KTogQ2FsbCB0aGUgc3luYyB2ZXJzaW9ucy4KKwogMjAxNC0w
OC0wNiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBS
RUdSRVNTSU9OIChyMTY4MTE5KTogQWxidW0gZmxpcHBpbmcgYW5pbWF0aW9uIGRvZXNu4oCZdCB3
b3JrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJTZXJ2
ZXJDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJTZXJ2
ZXJDb25uZWN0aW9uLmgKaW5kZXggM2NlNDI4Mi4uMmIzMjA5YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCU2VydmVyQ29ubmVjdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNvbm5lY3Rpb24uaApAQCAt
NzAsNyArNzAsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luVHJhbnNhY3Rpb24o
aW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNh
bGxiYWNrKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uKGludDY0X3Qg
dHJhbnNhY3Rpb25JRCwgQm9vbENhbGxiYWNrRnVuY3Rpb24gc3VjY2Vzc0NhbGxiYWNrKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0VHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklE
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmly
dHVhbCBib29sIHJlc2V0VHJhbnNhY3Rpb25TeW5jKGludDY0X3QgdHJhbnNhY3Rpb25JRCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCByb2xsYmFja1RyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rp
b25JRCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOworICAg
IHZpcnR1YWwgYm9vbCByb2xsYmFja1RyYW5zYWN0aW9uU3luYyhpbnQ2NF90IHRyYW5zYWN0aW9u
SUQpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2Fj
dGlvbklELCBpbnQ2NF90IGRhdGFiYXNlSUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIElEQktleSYgcHJpbWFyeUtleSwgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiBpbmRleElEcywgY29uc3QgVmVjdG9yPFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4+
JiBpbmRleEtleXMsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJy
b3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCmluZGV4
IDY4ZDJjYTguLjYxYjlkM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcApAQCAtMTM3LDcgKzEzNyw3
IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjphYm9ydChQYXNzUmVmUHRyPElEQkRhdGFi
YXNlRXJyb3I+IGVycm9yKQogICAgIG1fdGFza1RpbWVyLnN0b3AoKTsKIAogICAgIGlmICh3YXNS
dW5uaW5nKQotICAgICAgICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkucm9sbGJhY2tU
cmFuc2FjdGlvbihtX2lkLCBbXSgpIHsgfSk7CisgICAgICAgIG1fZGF0YWJhc2UtPnNlcnZlckNv
bm5lY3Rpb24oKS5yZXNldFRyYW5zYWN0aW9uU3luYyhtX2lkKTsKIAogICAgIC8vIFJ1biB0aGUg
YWJvcnQgdGFza3MsIGlmIGFueS4KICAgICB3aGlsZSAoIW1fYWJvcnRUYXNrUXVldWUuaXNFbXB0
eSgpKSB7CkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFi
b3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCiAgICAgLy8gaXRzZWxmIHRv
IGJlIHJlbGVhc2VkLCBhbmQgb3JkZXIgaXMgY3JpdGljYWwuCiAgICAgY2xvc2VPcGVuQ3Vyc29y
cygpOwogCi0gICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLnJlc2V0VHJhbnNhY3Rp
b24obV9pZCwgW10oKSB7IH0pOworICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5y
ZXNldFRyYW5zYWN0aW9uU3luYyhtX2lkKTsKIAogICAgIC8vIFRyYW5zYWN0aW9ucyBtdXN0IGFs
c28gYmUgbWFya2VkIGFzIGNvbXBsZXRlZCBiZWZvcmUgdGhlIGZyb250LWVuZCBpcyBub3RpZmll
ZCwgYXMKICAgICAvLyB0aGUgdHJhbnNhY3Rpb24gY29tcGxldGlvbiB1bmJsb2NrcyBvcGVyYXRp
b25zIGxpa2UgY2xvc2luZyBjb25uZWN0aW9ucy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjMWNlYWRhLi42NzEy
YTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTQtMDgtMDYgIEJyYWR5IEVpZHNv
biBhbmQgSmVmZnJleSBQZmF1IDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBJREIgdHJh
bnNhY3Rpb25zIG5ldmVyIHJlc2V0IGlmIHRoZSBXZWIgUHJvY2VzcyBlbmRzIGJlZm9yZSBjbGVh
bmluZyB1cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM1MjE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlVG9XZWJQcm9jZXNzQ29u
bmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVj
dGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVRvV2Vi
UHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVTeW5jTWVzc2FnZSk6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZENsb3NlKToKKyAg
ICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmg6
CisKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lE
QkNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3NJREJDb25u
ZWN0aW9uOjpyZXNldFRyYW5zYWN0aW9uU3luYyk6IEFkZGVkCisgICAgICAgICAgICBXYWl0IHVu
dGlsIHRoZSByZXNldCBpcyBjb21wbGV0ZSBiZWZvcmUgc2VuZGluZyB0aGUgc3luYyByZXBseS4K
KyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6cm9sbGJhY2tU
cmFuc2FjdGlvblN5bmMpOiBBZGRlZC4KKyAgICAgICAgICAgIERpdHRvLgorICAgICAgICAqIERh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5oOgor
ICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29u
bmVjdGlvbi5tZXNzYWdlcy5pbjoKKworICAgICAgICBLZWVwIHRyYWNrIG9mIGFsbCBpbiBwcm9n
cmVzcyB0cmFuc2FjdGlvbnMgYW5kIG1ha2Ugc3VyZSB0aGV54oCZcmUgY2xlYW5lZCB1cAorICAg
ICAgICB3aGVuZXZlciBhIGNvbm5lY3Rpb24gdG8gYSBXZWJQcm9jZXNzIGlzIGJyb2tlbjoKKyAg
ICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2U6OnVucmVnaXN0ZXJDb25uZWN0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZENvbXBsZXRlVHJhbnNh
Y3Rpb25PcGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6b3Bl
bkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0
YWJhc2U6OnJlc2V0QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkRXN0YWJsaXNoVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2Vi
S2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUmVzZXRUcmFuc2FjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZXNldEFsbFRyYW5zYWN0aW9ucyk6CisgICAgICAg
IChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5hbGl6ZVJvbGxiYWNrKToKKyAgICAgICAg
KiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisKKyAgICAg
ICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJh
Y2tpbmdTdG9yZVNRTGl0ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNl
QmFja2luZ1N0b3JlU1FMaXRlOjpyb2xsYmFja1RyYW5zYWN0aW9uKToKKworICAgICAgICBBZGQg
c3luYyB2ZXJzaW9ucyBvZiByZXNldC9yb2xsYmFjazoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0Rh
dGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYklEQlNlcnZlckNvbm5lY3Rpb246OnJlc2V0VHJhbnNhY3Rpb25TeW5jKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSURCU2VydmVyQ29ubmVjdGlvbjo6cm9sbGJhY2tUcmFuc2FjdGlv
blN5bmMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJT
ZXJ2ZXJDb25uZWN0aW9uLmg6CisKIDIwMTQtMDgtMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KIAogICAgICAgICBNZXJnZSByMTcxMzg5LCByMTcxNDk1LCByMTcxNTA4LCByMTcx
NTEwLCByMTcxNjA1LCByMTcxNjA2LCByMTcxNjExLCByMTcxNjE0LCByMTcxNzYzIGZyb20gZnRs
b3B0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNl
VG9XZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcAppbmRleCA3ZjkwYzQzLi5kMDE3
NjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VU
b1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAtNjUsMTMgKzY1LDI3
IEBAIHZvaWQgRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3RpCiAgICAgICAgICAgICBiYWNrZW5kSXRlcmF0b3It
PnZhbHVlLT5kaWRSZWNlaXZlRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbk1lc3NhZ2UoY29u
bmVjdGlvbiwgZGVjb2Rlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5l
Y3Rpb246OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiopCit2b2lkIERhdGFiYXNlVG9XZWJQcm9j
ZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiogY29u
bmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQ
Qzo6TWVzc2FnZUVuY29kZXI+JiByZXBseSkKIHsKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSkgeworICAgICAgICBJREJDb25uZWN0aW9uTWFwOjppdGVyYXRv
ciBiYWNrZW5kSXRlcmF0b3IgPSBtX2lkYkNvbm5lY3Rpb25zLmZpbmQoZGVjb2Rlci5kZXN0aW5h
dGlvbklEKCkpOworICAgICAgICBpZiAoYmFja2VuZEl0ZXJhdG9yICE9IG1faWRiQ29ubmVjdGlv
bnMuZW5kKCkpCisgICAgICAgICAgICBiYWNrZW5kSXRlcmF0b3ItPnZhbHVlLT5kaWRSZWNlaXZl
U3luY0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb25NZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29k
ZXIsIHJlcGx5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQogCit2b2lkIERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkQ2xv
c2UoSVBDOjpDb25uZWN0aW9uKikKK3sKKyAgICAvLyBUaGUgV2ViUHJvY2VzcyBoYXMgZGlzY29u
bmVjdGVkLCBjbG9zZSBhbGwgb2YgdGhlIGNvbm5lY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCBpdAor
ICAgIHdoaWxlICghbV9pZGJDb25uZWN0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJlbW92ZURh
dGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24obV9pZGJDb25uZWN0aW9ucy5iZWdpbigpLT5rZXkp
OwogfQogCiB2b2lkIERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUlu
dmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiosIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3Nh
Z2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlVG9XZWJQcm9jZXNz
Q29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlVG9X
ZWJQcm9jZXNzQ29ubmVjdGlvbi5oCmluZGV4IGM5ZDFiMjkuLjcxNDg3ZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5l
Y3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dl
YlByb2Nlc3NDb25uZWN0aW9uLmgKQEAgLTQ4LDYgKzQ4LDcgQEAgcHJpdmF0ZToKIAogICAgIC8v
IElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiosIElQQzo6TWVzc2FnZURlY29kZXImKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiosIElQ
Qzo6TWVzc2FnZURlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpNZXNzYWdlRW5jb2Rlcj4m
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uKikg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24qLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJ
UEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRS
ZWNlaXZlRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24qLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3Bw
IGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nl
c3NJREJDb25uZWN0aW9uLmNwcAppbmRleCA0Zjc3OGMyLi43ZDczMzZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lE
QkNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRl
eGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5jcHAKQEAgLTE4Niw2ICsxODYsMjQg
QEAgdm9pZCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpyb2xsYmFja1RyYW5zYWN0aW9u
KHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjQKICAgICB9KTsKIH0KIAordm9pZCBEYXRhYmFzZVBy
b2Nlc3NJREJDb25uZWN0aW9uOjpyZXNldFRyYW5zYWN0aW9uU3luYyhpbnQ2NF90IHRyYW5zYWN0
aW9uSUQsIFBhc3NSZWZQdHI8TWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246
OlJlc2V0VHJhbnNhY3Rpb25TeW5jOjpEZWxheWVkUmVwbHk+IHBycFJlcGx5KQoreworICAgIFJl
ZlB0cjxNZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6UmVzZXRUcmFuc2Fj
dGlvblN5bmM6OkRlbGF5ZWRSZXBseT4gcmVwbHkocHJwUmVwbHkpOworICAgIFJlZlB0cjxEYXRh
YmFzZVByb2Nlc3NJREJDb25uZWN0aW9uPiBjb25uZWN0aW9uKHRoaXMpOworICAgIG1fdW5pcXVl
SURCRGF0YWJhc2UtPnJlc2V0VHJhbnNhY3Rpb24oSURCSWRlbnRpZmllcigqdGhpcywgdHJhbnNh
Y3Rpb25JRCksIFtjb25uZWN0aW9uLCByZXBseV0oYm9vbCBzdWNjZXNzKSB7CisgICAgICAgIHJl
cGx5LT5zZW5kKHN1Y2Nlc3MpOworICAgIH0pOworfQorCit2b2lkIERhdGFiYXNlUHJvY2Vzc0lE
QkNvbm5lY3Rpb246OnJvbGxiYWNrVHJhbnNhY3Rpb25TeW5jKGludDY0X3QgdHJhbnNhY3Rpb25J
RCwgUGFzc1JlZlB0cjxNZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Um9s
bGJhY2tUcmFuc2FjdGlvblN5bmM6OkRlbGF5ZWRSZXBseT4gcHJwUmVwbHkpCit7CisgICAgUmVm
UHRyPE1lc3NhZ2VzOjpEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpSb2xsYmFja1RyYW5z
YWN0aW9uU3luYzo6RGVsYXllZFJlcGx5PiByZXBseShwcnBSZXBseSk7CisgICAgUmVmUHRyPERh
dGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24odGhpcyk7CisgICAgbV91bmlx
dWVJREJEYXRhYmFzZS0+cm9sbGJhY2tUcmFuc2FjdGlvbihJREJJZGVudGlmaWVyKCp0aGlzLCB0
cmFuc2FjdGlvbklEKSwgW2Nvbm5lY3Rpb24sIHJlcGx5XShib29sIHN1Y2Nlc3MpIHsKKyAgICAg
ICAgcmVwbHktPnNlbmQoc3VjY2Vzcyk7CisgICAgfSk7Cit9CisKIHZvaWQgRGF0YWJhc2VQcm9j
ZXNzSURCQ29ubmVjdGlvbjo6Y2hhbmdlRGF0YWJhc2VWZXJzaW9uKHVpbnQ2NF90IHJlcXVlc3RJ
RCwgaW50NjRfdCB0cmFuc2FjdGlvbklELCB1aW50NjRfdCBuZXdWZXJzaW9uKQogewogICAgIEFT
U0VSVChtX3VuaXF1ZUlEQkRhdGFiYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5oIGIv
U291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJ
REJDb25uZWN0aW9uLmgKaW5kZXggOTIzYjUyZC4uNDBhNmM0ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25u
ZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9E
YXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmgKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luRGF0YS5oIgogI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlSWRl
bnRpZmllci5oIgorI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb25NZXNzYWdl
cy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC01NSw2ICs1Niw3IEBAIHB1YmxpYzoKIAogICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMu
CiAgICAgdm9pZCBkaWRSZWNlaXZlRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbk1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uKiwgSVBDOjpNZXNzYWdlRGVjb2RlciYpOworICAgIHZvaWQgZGlkUmVj
ZWl2ZVN5bmNEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24qIGNvbm5lY3Rpb24sIElQQzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVl
X3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKTsKIAogICAgIHZvaWQgZGlz
Y29ubmVjdGVkRnJvbVdlYlByb2Nlc3MoKTsKIApAQCAtNzQsNiArNzYsOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY29tbWl0VHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRy
YW5zYWN0aW9uSUQpOwogICAgIHZvaWQgcmVzZXRUcmFuc2FjdGlvbih1aW50NjRfdCByZXF1ZXN0
SUQsIGludDY0X3QgdHJhbnNhY3Rpb25JRCk7CiAgICAgdm9pZCByb2xsYmFja1RyYW5zYWN0aW9u
KHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklEKTsKKyAgICB2b2lkIHJl
c2V0VHJhbnNhY3Rpb25TeW5jKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgUGFzc1JlZlB0cjxNZXNz
YWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6UmVzZXRUcmFuc2FjdGlvblN5bmM6
OkRlbGF5ZWRSZXBseT4pOworICAgIHZvaWQgcm9sbGJhY2tUcmFuc2FjdGlvblN5bmMoaW50NjRf
dCB0cmFuc2FjdGlvbklELCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpEYXRhYmFzZVByb2Nlc3NJREJD
b25uZWN0aW9uOjpSb2xsYmFja1RyYW5zYWN0aW9uU3luYzo6RGVsYXllZFJlcGx5Pik7CiAgICAg
dm9pZCBjaGFuZ2VEYXRhYmFzZVZlcnNpb24odWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRy
YW5zYWN0aW9uSUQsIHVpbnQ2NF90IG5ld1ZlcnNpb24pOwogICAgIHZvaWQgY3JlYXRlT2JqZWN0
U3RvcmUodWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlTWV0YWRhdGEpOwogICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUodWlu
dDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhl
ZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24ubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rp
b24ubWVzc2FnZXMuaW4KaW5kZXggMWVkYTM1Yy4uZGRmOWI4MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25u
ZWN0aW9uLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9J
bmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpAQCAtMzIs
NiArMzIsOSBAQCBtZXNzYWdlcyAtPiBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uIExlZ2Fj
eVJlY2VpdmVyIHsKICAgICBDb21taXRUcmFuc2FjdGlvbih1aW50NjRfdCByZXF1ZXN0SUQsIGlu
dDY0X3QgdHJhbnNhY3Rpb25JRCkKICAgICBSZXNldFRyYW5zYWN0aW9uKHVpbnQ2NF90IHJlcXVl
c3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklEKQogICAgIFJvbGxiYWNrVHJhbnNhY3Rpb24odWlu
dDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQpCisKKyAgICBSZXNldFRyYW5z
YWN0aW9uU3luYyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQpIC0+IChib29sIHN1Y2Nlc3MpIERlbGF5
ZWQKKyAgICBSb2xsYmFja1RyYW5zYWN0aW9uU3luYyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQpIC0+
IChib29sIHN1Y2Nlc3MpIERlbGF5ZWQKICAgICAKICAgICBDaGFuZ2VEYXRhYmFzZVZlcnNpb24o
dWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHVpbnQ2NF90IG5ld1Zl
cnNpb24pCiAgICAgQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90
IHRyYW5zYWN0aW9uSUQsIFdlYkNvcmU6OklEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3Rv
cmVNZXRhZGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9J
bmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQ
cm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggMjc5NzA0Zi4uZmM4
YjgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWRE
Qi9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTExMyw5ICsxMTMsMTAgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVnaXN0ZXJDb25uZWN0aW9uKERhdGFiYXNlUHJvY2Vz
c0lEQkNvbm5lY3Rpb24mIGNvbm5lY3QKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnVucmVnaXN0
ZXJDb25uZWN0aW9uKERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCiB7
CiAgICAgQVNTRVJUKG1fY29ubmVjdGlvbnMuY29udGFpbnMoJmNvbm5lY3Rpb24pKTsKKyAgICBy
ZXNldEFsbFRyYW5zYWN0aW9ucyhjb25uZWN0aW9uKTsKICAgICBtX2Nvbm5lY3Rpb25zLnJlbW92
ZSgmY29ubmVjdGlvbik7CiAKLSAgICBpZiAobV9jb25uZWN0aW9ucy5pc0VtcHR5KCkpIHsKKyAg
ICBpZiAobV9jb25uZWN0aW9ucy5pc0VtcHR5KCkgJiYgbV9wZW5kaW5nVHJhbnNhY3Rpb25Sb2xs
YmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgIHNodXRkb3duKFVuaXF1ZUlEQkRhdGFiYXNlU2h1
dGRvd25UeXBlOjpOb3JtYWxTaHV0ZG93bik7CiAgICAgICAgIERhdGFiYXNlUHJvY2Vzczo6c2hh
cmVkKCkucmVtb3ZlVW5pcXVlSURCRGF0YWJhc2UoKnRoaXMpOwogICAgIH0KQEAgLTMzNywxMCAr
MzM4LDEyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZENvbXBsZXRlVHJhbnNhY3Rpb25P
cGVyYXRpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhCiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKIAogICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBtX3BlbmRpbmdU
cmFuc2FjdGlvblJlcXVlc3RzLnRha2UodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKLSAgICBpZiAo
IXJlcXVlc3QpCi0gICAgICAgIHJldHVybjsKIAotICAgIHJlcXVlc3QtPmNvbXBsZXRlUmVxdWVz
dChzdWNjZXNzKTsKKyAgICBpZiAocmVxdWVzdCkKKyAgICAgICAgcmVxdWVzdC0+Y29tcGxldGVS
ZXF1ZXN0KHN1Y2Nlc3MpOworCisgICAgaWYgKG1fcGVuZGluZ1RyYW5zYWN0aW9uUm9sbGJhY2tz
LmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRpZmllcikpCisgICAgICAgIGZpbmFsaXplUm9sbGJh
Y2sodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
Y2hhbmdlRGF0YWJhc2VWZXJzaW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3QgbmV3VmVyc2lvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wpPiBz
dWNjZXNzQ2FsbGJhY2spCkBAIC03MTQsNiArNzE3LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6b3BlbkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5z
YWMKIAogICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5lc3RhYmxpc2hUcmFuc2Fj
dGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSURzLCBtb2RlKTsKIAorICAg
IHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVBc3luY1Rhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkRXN0YWJsaXNoVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgc3Vj
Y2VzcykpOwogICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVBc3luY1Rhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkQ29tcGxldGVUcmFuc2FjdGlvbk9wZXJhdGlvbiwgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBzdWNjZXNzKSk7CiB9CiAKQEAgLTc0NCw2ICs3NDgsNyBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpyZXNldEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGNvbnN0IElE
QklkZW50aWZpZXImIHRyYW5zYQogCiAgICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5nU3RvcmUt
PnJlc2V0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKIAorICAgIHBvc3RNYWlu
VGhyZWFkVGFzayhjcmVhdGVBc3luY1Rhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UmVzZXRUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBzdWNjZXNzKSk7CiAgICAg
cG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUFzeW5jVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRDb21wbGV0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uLCB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIHN1Y2Nlc3MpKTsKIH0KIApAQCAtMTA3MCw2ICsxMDc1LDYyIEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OmRpZERlbGV0ZVJhbmdlSW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElE
LCB1aW50MzJfCiAgICAgcmVxdWVzdC0+Y29tcGxldGVSZXF1ZXN0KGVycm9yQ29kZSwgZXJyb3JN
ZXNzYWdlKTsKIH0KIAordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRXN0YWJsaXNoVHJhbnNh
Y3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBib29sIHN1
Y2Nlc3MpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAoIXN1Y2Nl
c3MpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25zID0gbV9lc3RhYmxp
c2hlZFRyYW5zYWN0aW9ucy5hZGQoJnRyYW5zYWN0aW9uSWRlbnRpZmllci5jb25uZWN0aW9uKCks
IEhhc2hTZXQ8SURCSWRlbnRpZmllcj4oKSk7CisgICAgdHJhbnNhY3Rpb25zLml0ZXJhdG9yLT52
YWx1ZS5hZGQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUmVzZXRUcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIGJvb2wgc3VjY2VzcykKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFu
c2FjdGlvbnMgPSBtX2VzdGFibGlzaGVkVHJhbnNhY3Rpb25zLmZpbmQoJnRyYW5zYWN0aW9uSWRl
bnRpZmllci5jb25uZWN0aW9uKCkpOworICAgIGlmICh0cmFuc2FjdGlvbnMgIT0gbV9lc3RhYmxp
c2hlZFRyYW5zYWN0aW9ucy5lbmQoKSkKKyAgICAgICAgdHJhbnNhY3Rpb25zLmdldCgpLT52YWx1
ZS5yZW1vdmUodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cmVzZXRBbGxUcmFuc2FjdGlvbnMoY29uc3QgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVj
dGlvbiYgY29ubmVjdGlvbikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAg
IGF1dG8gdHJhbnNhY3Rpb25zID0gbV9lc3RhYmxpc2hlZFRyYW5zYWN0aW9ucy5maW5kKCZjb25u
ZWN0aW9uKTsKKyAgICBpZiAodHJhbnNhY3Rpb25zID09IG1fZXN0YWJsaXNoZWRUcmFuc2FjdGlv
bnMuZW5kKCkgfHwgIW1fYWNjZXB0aW5nTmV3UmVxdWVzdHMpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGZvciAoYXV0byYgdHJhbnNhY3Rpb25JZGVudGlmaWVyIDogdHJhbnNhY3Rpb25zLmdldCgp
LT52YWx1ZSkgeworICAgICAgICBtX3BlbmRpbmdUcmFuc2FjdGlvblJvbGxiYWNrcy5hZGQodHJh
bnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFtX3BlbmRpbmdUcmFuc2FjdGlvblJl
cXVlc3RzLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRpZmllcikpCisgICAgICAgICAgICBmaW5h
bGl6ZVJvbGxiYWNrKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CisgICAgfQorfQorCit2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpmaW5hbGl6ZVJvbGxiYWNrKGNvbnN0IFdlYktpdDo6SURCSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgIEFTU0VSVChtX3BlbmRpbmdUcmFuc2FjdGlvblJvbGxiYWNrcy5jb250YWlucyh0cmFuc2Fj
dGlvbklkKSk7CisgICAgQVNTRVJUKCFtX3BlbmRpbmdUcmFuc2FjdGlvblJlcXVlc3RzLmNvbnRh
aW5zKHRyYW5zYWN0aW9uSWQpKTsKKyAgICByb2xsYmFja1RyYW5zYWN0aW9uKHRyYW5zYWN0aW9u
SWQsIFt0aGlzLCB0cmFuc2FjdGlvbklkXShib29sKSB7CisgICAgICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CisgICAgICAgIGlmIChtX3BlbmRpbmdUcmFuc2FjdGlvblJlcXVlc3RzLmNv
bnRhaW5zKHRyYW5zYWN0aW9uSWQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEFT
U0VSVChtX3BlbmRpbmdUcmFuc2FjdGlvblJvbGxiYWNrcy5jb250YWlucyh0cmFuc2FjdGlvbklk
KSk7CisgICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9uUm9sbGJhY2tzLnJlbW92ZSh0cmFuc2Fj
dGlvbklkKTsKKyAgICAgICAgcmVzZXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkLCBbdGhpcywg
dHJhbnNhY3Rpb25JZF0oYm9vbCkgeworICAgICAgICAgICAgaWYgKG1fYWNjZXB0aW5nTmV3UmVx
dWVzdHMgJiYgbV9jb25uZWN0aW9ucy5pc0VtcHR5KCkgJiYgbV9wZW5kaW5nVHJhbnNhY3Rpb25S
b2xsYmFja3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgc2h1dGRvd24oVW5pcXVlSURC
RGF0YWJhc2VTaHV0ZG93blR5cGU6Ok5vcm1hbFNodXRkb3duKTsKKyAgICAgICAgICAgICAgICBE
YXRhYmFzZVByb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZVVuaXF1ZUlEQkRhdGFiYXNlKCp0aGlzKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKIFN0cmluZyBVbmlxdWVJ
REJEYXRhYmFzZTo6YWJzb2x1dGVEYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFi
YXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQy
L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuaAppbmRleCBlOTYz
NjMyLi44OGQ2M2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJh
c2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5oCkBAIC0xODUsMTAgKzE4NSwx
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkU2h1dGRvd25CYWNraW5nU3RvcmUoVW5pcXVlSURC
RGF0YWJhc2VTaHV0ZG93blR5cGUpOwogICAgIHZvaWQgZGlkQ29tcGxldGVCb29sUmVxdWVzdCh1
aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2Vzcyk7CiAKKyAgICB2b2lkIGRpZEVzdGFibGlz
aFRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
Ym9vbCBzdWNjZXNzKTsKKyAgICB2b2lkIGRpZFJlc2V0VHJhbnNhY3Rpb24oY29uc3QgSURCSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBib29sIHN1Y2Nlc3MpOworICAgIHZvaWQg
cmVzZXRBbGxUcmFuc2FjdGlvbnMoY29uc3QgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbiYp
OworICAgIHZvaWQgZmluYWxpemVSb2xsYmFjayhjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkKTsKKwogICAgIGJvb2wgbV9hY2NlcHRpbmdOZXdSZXF1ZXN0czsKIAorICAgIEhhc2hN
YXA8Y29uc3QgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbiosIEhhc2hTZXQ8SURCSWRlbnRp
Zmllcj4+IG1fZXN0YWJsaXNoZWRUcmFuc2FjdGlvbnM7CiAgICAgRGVxdWU8UmVmUHRyPEFzeW5j
UmVxdWVzdD4+IG1fcGVuZGluZ01ldGFkYXRhUmVxdWVzdHM7CiAgICAgSGFzaE1hcDxJREJJZGVu
dGlmaWVyLCBSZWZQdHI8QXN5bmNSZXF1ZXN0Pj4gbV9wZW5kaW5nVHJhbnNhY3Rpb25SZXF1ZXN0
czsKKyAgICBIYXNoU2V0PElEQklkZW50aWZpZXI+IG1fcGVuZGluZ1RyYW5zYWN0aW9uUm9sbGJh
Y2tzOwogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxBc3luY1JlcXVlc3Q+PiBtX3BlbmRp
bmdEYXRhYmFzZVRhc2tzOwogICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IG1fcGVuZGluZ1NodXRk
b3duVGFzazsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwIGIv
U291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwCmluZGV4IDdkNjg3YjkuLmNlMWEzYjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRl
L1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJh
Y2tpbmdTdG9yZVNRTGl0ZS5jcHAKQEAgLTM5MSw2ICszOTEsMTEgQEAgYm9vbCBVbmlxdWVJREJE
YXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6cm9sbGJhY2tUcmFuc2FjdGlvbihjb25zdCBJREJJ
ZGVudGlmaWUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIGlmICghdHJhbnNh
Y3Rpb24tPmluUHJvZ3Jlc3MoKSkgeworICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gcm9s
bGJhY2sgYSB0cmFuc2FjdGlvbiB0aGF0IGhhc24ndCBiZWd1biIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCiAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVk
REIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5jcHAKaW5kZXggZTUy
NDRjYy4uYTlkOTRiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRh
YmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJDb25uZWN0
aW9uLmNwcApAQCAtMjY2LDYgKzI2NiwxMyBAQCB2b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246
OmRpZFJlc2V0VHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVzdElELCBib29sKQogICAgIHNlcnZl
clJlcXVlc3QtPmNvbXBsZXRlUmVxdWVzdCgpOwogfQogCitib29sIFdlYklEQlNlcnZlckNvbm5l
Y3Rpb246OnJlc2V0VHJhbnNhY3Rpb25TeW5jKGludDY0X3QgdHJhbnNhY3Rpb25JRCkKK3sKKyAg
ICBib29sIHN1Y2Nlc3M7CisgICAgc2VuZFN5bmMoTWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lE
QkNvbm5lY3Rpb246OlJlc2V0VHJhbnNhY3Rpb25TeW5jKHRyYW5zYWN0aW9uSUQpLCBNZXNzYWdl
czo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6UmVzZXRUcmFuc2FjdGlvblN5bmM6OlJl
cGx5KHN1Y2Nlc3MpKTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwogdm9pZCBXZWJJREJTZXJ2
ZXJDb25uZWN0aW9uOjpyb2xsYmFja1RyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwg
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsKICAgICBSZWZQdHI8
QXN5bmNSZXF1ZXN0PiBzZXJ2ZXJSZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1wbDw+OjpjcmVhdGUo
Y29tcGxldGlvbkNhbGxiYWNrLCBjb21wbGV0aW9uQ2FsbGJhY2spOwpAQCAtMjkxLDYgKzI5OCwx
MyBAQCB2b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OmRpZFJvbGxiYWNrVHJhbnNhY3Rpb24o
dWludDY0X3QgcmVxdWVzdElELCBib29sKQogICAgIHNlcnZlclJlcXVlc3QtPmNvbXBsZXRlUmVx
dWVzdCgpOwogfQogCitib29sIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OnJvbGxiYWNrVHJhbnNh
Y3Rpb25TeW5jKGludDY0X3QgdHJhbnNhY3Rpb25JRCkKK3sKKyAgICBib29sIHN1Y2Nlc3M7Cisg
ICAgc2VuZFN5bmMoTWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OlJvbGxi
YWNrVHJhbnNhY3Rpb25TeW5jKHRyYW5zYWN0aW9uSUQpLCBNZXNzYWdlczo6RGF0YWJhc2VQcm9j
ZXNzSURCQ29ubmVjdGlvbjo6Um9sbGJhY2tUcmFuc2FjdGlvblN5bmM6OlJlcGx5KHN1Y2Nlc3Mp
KTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwogdm9pZCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9u
OjpzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklELCBpbnQ2NF90IGRhdGFiYXNlSUQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIElE
QktleSYgcHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElEcywgY29uc3Qg
VmVjdG9yPFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4+JiBpbmRleEtleXMsIHN0ZDo6ZnVuY3Rpb248
dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQog
ewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5k
ZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJDb25uZWN0aW9uLmgKaW5kZXggNGRi
N2U4NC4uNDBjNTZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRh
YmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlv
bi5oCkBAIC02NCw3ICs2NCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UcmFu
c2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21w
bGV0aW9uQ2FsbGJhY2spIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBjb21taXRUcmFuc2Fj
dGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIEJvb2xDYWxsYmFja0Z1bmN0aW9uIHN1Y2Nlc3ND
YWxsYmFjaykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0VHJhbnNhY3Rpb24oaW50
NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxi
YWNrKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVzZXRUcmFuc2FjdGlvblN5bmMoaW50
NjRfdCB0cmFuc2FjdGlvbklEKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2tU
cmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBj
b21wbGV0aW9uQ2FsbGJhY2spIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCByb2xsYmFja1Ry
YW5zYWN0aW9uU3luYyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQpIG92ZXJyaWRlOwogCiAgICAgdmly
dHVhbCB2b2lkIHNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3QgZGF0
YWJhc2VJRCwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBXZWJDb3JlOjpJREJPYmplY3RT
dG9yZU1ldGFkYXRhJiwgV2ViQ29yZTo6SURCS2V5JiBwcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mIGluZGV4SURzLCBjb25zdCBWZWN0b3I8VmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpJ
REJLZXk+Pj4mIGluZGV4S2V5cywgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spIG92ZXJyaWRlOwogCg==
</data>
<flag name="review"
          id="260738"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
          </attachment>
      

    </bug>

</bugzilla>