<?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>107784</bug_id>
          
          <creation_ts>2013-01-23 22:01:57 -0800</creation_ts>
          <short_desc>webdatabase: Refactor DatabaseContext lookup to be thread-safe</short_desc>
          <delta_ts>2013-01-30 10:05:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>107475</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>abarth</cc>
    
    <cc>alancutter</cc>
    
    <cc>beidson</cc>
    
    <cc>buildbot</cc>
    
    <cc>dcarney</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ggaren</cc>
    
    <cc>jochen</cc>
    
    <cc>levin</cc>
    
    <cc>levin+threading</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>815067</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-23 22:01:57 -0800</bug_when>
    <thetext>Here is the current state of how things work in the webdatabase module:
1. The existing code maps ScriptExecutionContexts to DatabaseContexts by implementing DatabaseContext as a Supplement to the ScriptExecutionContext&apos;s Supplementable.  The Supplement mechanism is intended for access only within the thread that created it.
2. DatabaseTracker::interruptAllDatabasesForContext() uses the ScriptExecutionContext* as the identifier of databases to interrupt.  However, it should be using the corresponding DatabaseContext*.  This will become evident as the right thing to do when we implement a database process for webkit2.
3. DatabaseTracker::interruptAllDatabasesForContext() is called from the MainThread to interrupt WorkerThread databases.

Later, when we change DatabaseTracker::interruptAllDatabasesForContext() to use the DatabaseContext (point 2) instead of the ScriptExecutionContext, we will need to get access the WorkerThread&apos;s SupplementMap (point 1) from the MainThread (point 3).  This is inherently not thread-safe.

We will fix this by changing DatabaseContext to not be a Supplement of ScriptExecutionContext.  Instead, we&apos;ll manage the map from ScriptExecutionContext to DatabaseContext in the DatabaseManager, and guard it with a lock.  This allows us to get the thread-safe access we need for mapping ScriptExecutionContexts to DatabaseContexts without changing the owner-thread only usage requirement of Supplement mechanism.

About the life-cycle management of DatabaseContexts
==================================
Previously, as a Supplement, a DatabaseContext will be destructed when the SupplementMap gets destructed during the ScriptExecutionContext&apos;s destruction.

In this new scheme, we tie the life-cycle of the DatabaseContext to all the Databases associated with it.  By definition, a Database should not out-live its DatabaseContext anyway.  Here is the gory details:
1. There is a 1:1 association between a ScriptExecutionContext and its DatabaseContext.  When the script accesses database functionality, a DatabaseContext will be created and associated with it.
2. The DatabaseManager&apos;s database factory will create a DatabaseContext before it can create a Database.  If one already exists for the given ScriptExecutionContext, it will reuse that one.  The DatabaseManager manages a context map that stores raw pointers to the DatabaseContext instances.
3. The created DatabaseContext is held in a RefPtr and is passed to the Database constructor which will adopt the ref in a RefPtr field.
4. If the database successfully opens its SQL backend, the Database&apos;s RefPtr field will keep the databaseContext alive.
5. If the database fails to open its SQL backend, both the database and databaseContext will not be ref&apos;ed by anything when the DatabaseManager&apos;s database factory returns.  Both will get destructed then.

In addition to the above, the DatabaseContext constructor will register itself with the DatabaseManager&apos;s context map.  Similarly, the DatabaseContext&apos;s destructor will unregister itself from the DatabaseManager&apos;s context map.  The context map does not contain any RefPtrs to the DatabaseContexts.

In summary, this is what happens:
1. If we successfully open a database, the database will keep the databaseContext alive.
2. If more than one database is opened by the same script, all those databases will ref the same databaseContext, thereby keeping it alive.
3. When the last database referencing the databaseContext is closed, the databaseContext will automatically destruct itself.

One difference from the old life-cycle scheme: in the old scheme, once a databaseContext is created, it is retained until the owner document is destructed.  In the new scheme, the databaseContext will be released once no more databases are referring to it i.e. when it is no longer needed.

Note: the life-cycle scheme may change again later when we refactor the Database class to completely split between a front-end and a back-end.  This scheme (above) is adopted for now to allow the existing database code to continue to work while the module gets refactored in parts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815071</commentid>
    <comment_count>1</comment_count>
      <attachid>184400</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-23 22:11:04 -0800</bug_when>
    <thetext>Created attachment 184400
The patch.

Uploading the patch for EWS bot testing.  I&apos;m not requesting a review yet because I still need to give a little thought to the life-cycle management of Database objects.  This patch ties the life-cycle of DatabaseContexts to the life-cycle of Databases.  This is the right thing to do.  However, I need to do due diligence to make sure that the life-cycle of Databases are managed appropriately so that there  is no leak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815073</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-23 22:14:00 -0800</bug_when>
    <thetext>&gt; We will fix this by changing DatabaseContext to not be a Supplement of ScriptExecutionContext.  Instead, we&apos;ll manage the map from ScriptExecutionContext to DatabaseContext in the DatabaseManager, and guard it with a lock.  This allows us to get the thread-safe access we need for mapping ScriptExecutionContexts to DatabaseContexts without changing the owner-thread only usage requirement of Supplement mechanism.

Ok.

What you&apos;ve written sounds reasonable.  I suspect that we could come up with a better design if we wanted to do more surgery, but that&apos;s likely a big project.

I seem to remember that jochen and dcarney were working on a bug about the lifetime of databases.  I&apos;ve CCed them in case they have some insights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815075</commentid>
    <comment_count>3</comment_count>
      <attachid>184400</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-23 22:18:45 -0800</bug_when>
    <thetext>Comment on attachment 184400
The patch.

Attachment 184400 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/16082511</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815087</commentid>
    <comment_count>4</comment_count>
      <attachid>184400</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-23 22:36:57 -0800</bug_when>
    <thetext>Comment on attachment 184400
The patch.

Attachment 184400 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16074591</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815093</commentid>
    <comment_count>5</comment_count>
      <attachid>184400</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-23 22:41:50 -0800</bug_when>
    <thetext>Comment on attachment 184400
The patch.

Attachment 184400 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16015034</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815102</commentid>
    <comment_count>6</comment_count>
      <attachid>184408</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-23 22:56:00 -0800</bug_when>
    <thetext>Created attachment 184408
Patch + fix for release builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815300</commentid>
    <comment_count>7</comment_count>
      <attachid>184408</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-24 03:33:04 -0800</bug_when>
    <thetext>Comment on attachment 184408
Patch + fix for release builds.

Attachment 184408 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16078671

New failing tests:
fast/repaint/selection-clear.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815790</commentid>
    <comment_count>8</comment_count>
      <attachid>184408</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-24 13:36:55 -0800</bug_when>
    <thetext>Comment on attachment 184408
Patch + fix for release builds.

I think there is no implications with the DatabaseContext being tied to the Database life-cycle.  The Database live-ness is determined by the JS garbage collector and destructs only when it is no longer needed.

However, I&apos;m obsoleting this patch for 2 reasons:
1. I discovered a bug in the handling of the DatabaseThread (owned by the DatabaseContext).  The context needs to shut it down on destruction.  I have a fix for this already.
2. There seems to be some regressions in the layout tests when run with a debug build.  This doesn&apos;t seem to affect release builds.  I need to investigate this a little more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815803</commentid>
    <comment_count>9</comment_count>
    <who name="">jochen</who>
    <bug_when>2013-01-24 13:55:18 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 184408 [details])
&gt; I think there is no implications with the DatabaseContext being tied to the Database life-cycle.  The Database live-ness is determined by the JS garbage collector and destructs only when it is no longer needed.

The DatabaseThread has a RefPtr to all Databases that were opened during the page&apos;s lifetime. Even if JS drops the last reference to the Database, it won&apos;t be deleted as long as the DatabaseThread is alive :-/

See https://bugs.webkit.org/show_bug.cgi?id=68303 for a repro and a patch we proposed (but nobody liked).

&gt; 
&gt; However, I&apos;m obsoleting this patch for 2 reasons:
&gt; 1. I discovered a bug in the handling of the DatabaseThread (owned by the DatabaseContext).  The context needs to shut it down on destruction.  I have a fix for this already.
&gt; 2. There seems to be some regressions in the layout tests when run with a debug build.  This doesn&apos;t seem to affect release builds.  I need to investigate this a little more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815814</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-24 14:07:43 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (From update of attachment 184408 [details] [details])
&gt; &gt; I think there is no implications with the DatabaseContext being tied to the Database life-cycle.  The Database live-ness is determined by the JS garbage collector and destructs only when it is no longer needed.
&gt; 
&gt; The DatabaseThread has a RefPtr to all Databases that were opened during the page&apos;s lifetime. Even if JS drops the last reference to the Database, it won&apos;t be deleted as long as the DatabaseThread is alive :-/
&gt; 
&gt; See https://bugs.webkit.org/show_bug.cgi?id=68303 for a repro and a patch we proposed (but nobody liked).

Thanks for the tip.  This issue will certainly get in the way of my implementation.  I will investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816338</commentid>
    <comment_count>11</comment_count>
      <attachid>184687</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-25 00:27:10 -0800</bug_when>
    <thetext>Created attachment 184687
The final patch.

In addition to the work that has already been written up in the bug description, this final patch makes DatabaseContext a sub-class of ContextDestructionObserver.  This allows it to be notified when the ScriptExecutionContext is destructed, and trigger its own shutdown as well as the shutdown of its DatabaseThread and close all the Database instances held by the thread.

Previously, I thought that it is sufficient to depend on garbage collection of the Database instances to trigger the shutdown of the DatabaseContext and DatabaseThread.  But Jochen pointed out that the Database instances is currently kept alive by the DatabaseThread itself (https://bugs.webkit.org/show_bug.cgi?id=68303).  After thinking thru the issue some more, I decided that fixing 68303 is beyond the scope of this bug.  I&apos;m also not convinced yet that the solution proposed in the 68303 patch is the best way to go (I haven&apos;t had time to digest it properly yet).  I&apos;ll leave that for a later time.

Also, previously, I mentioned that I saw some regression in the layout tests with debug builds.  They were actually not failures, but stderr diffs in the console out, but were consistently manifesting when I ran a debug build with this patch applied (in contrast with the baseline).  It turned out that the issue there is due to https://bugs.webkit.org/show_bug.cgi?id=79013 which Adam provided a fix for.  Once I incorporate Adam&apos;s fix, the stderr diffs went away completely.

I should point out that with this patch, I also cleaned up the shutdown code of DatabaseContext and DatabaseThread.  They are still only shutdown when their associated ScriptExecutionContext is destructed.  However, they are now guaranteed to be cleaned up.  I&apos;m not completely sure, but there may have been a bug before where the DatabaseThread (and its databases) associated with the MainThread may be leaked if stopDatabases() wasn&apos;t called by someone external to the database system (because I couldn&apos;t find it in the code).  I&apos;ve changed the code so that the thread shutdown is done if it is not already triggered by someone else before the DatabaseContext is destructed.  And I did some testing with some printfs to ensure that the shutdown did indeed occurred as expected with this patch.

The patch is now ready for a review please.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816645</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-25 09:20:34 -0800</bug_when>
    <thetext>&gt; In addition to the work that has already been written up in the bug description, this final patch makes DatabaseContext a sub-class of ContextDestructionObserver.  This allows it to be notified when the ScriptExecutionContext is destructed, and trigger its own shutdown as well as the shutdown of its DatabaseThread and close all the Database instances held by the thread.

That&apos;s unlikely to be correct.  Triggering shutdown via ContextDestructionObserver doesn&apos;t work if JavaScript can add a reference from some object retained by DatabaseContext to some object that retains ScriptExecutionContext.  Instead, you&apos;ll probably need to use ActiveDOMObject, whose stop() notification is called at a predictable time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816717</commentid>
    <comment_count>13</comment_count>
      <attachid>184687</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-01-25 10:15:36 -0800</bug_when>
    <thetext>Comment on attachment 184687
The final patch.

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

&gt; Source/WebCore/Modules/webdatabase/AbstractDatabase.cpp:177
&gt; +AbstractDatabase::AbstractDatabase(RefPtr&lt;DatabaseContext&gt;&amp; databaseContext, const String&amp; name, const String&amp; expectedVersion,

To pass a reference to an object, use PassRefPtr&lt;T&gt;, rather than RefPtr&lt;T&gt;&amp;. This reduces refcount churn and is idiomatic.

If you have a RefPtr&lt;T&gt; x, &quot;x.release()&quot; will set x to 0 and return a PassRefPtr&lt;T&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818505</commentid>
    <comment_count>14</comment_count>
      <attachid>184687</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-28 21:56:15 -0800</bug_when>
    <thetext>Comment on attachment 184687
The final patch.

New patch with fixes coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818541</commentid>
    <comment_count>15</comment_count>
      <attachid>185158</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-28 22:35:28 -0800</bug_when>
    <thetext>Created attachment 185158
the final final patch?

Addressed Adam&apos;s comment: DatabaseContext now implements ActiveDOMObject as opposed to ContextDestructionObserver.

Addressed Geoff&apos;s comment: The DatabaseContext ref is now being passed as a PassRefPtr instead of a RefPtr&amp;.

Also fixed some race condition bugs pertaining the shutdown process of the DatabaseContext.  These were encountered while teasing the changes.  The shutdown code is now homogenized.  The triggers sources for shutdown are:
1. the destructor: i.e. when all the Databases in this context has been GC&apos;ed, and the ScriptExecutionContext may or may not be still alive.
2. ActiveDOMObject::stop(): called for shutting down ActiveDOMObjects before the ScriptExecutionContext goes away.  The ScriptExecutionContext is still alive.
3. ContextDestructionObserver ::contextDestroyed(): this needed in case the ScriptExecutionContext dies before the DatabaseContext (which is kept alive by Database objects that yet to be GC&apos;ed).  We need to detach from the ScriptExecutionContext here.  To be robust, we also shutdown the databases here in case the client did not call ActiveDOMObject::stop() before hand.
4. stopDatabases(): can be called by the client directly e.g. when frame loading gets aborted.  While we could just leave the DatabaseContext and its databases around until the ScriptExecutionContext dies, I left this in there so that we can clean up the databases sooner.

All of these paths now go thru / calls stopDatabases() to initiate orderly shutdown.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818549</commentid>
    <comment_count>16</comment_count>
      <attachid>185158</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-28 22:38:03 -0800</bug_when>
    <thetext>Comment on attachment 185158
the final final patch?

May I have a review please?  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818647</commentid>
    <comment_count>17</comment_count>
      <attachid>185182</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-29 00:15:07 -0800</bug_when>
    <thetext>Created attachment 185182
svn up&apos;ed to fix patch apply problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818914</commentid>
    <comment_count>18</comment_count>
      <attachid>185182</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-29 07:04:50 -0800</bug_when>
    <thetext>Comment on attachment 185182
svn up&apos;ed to fix patch apply problem.

Attachment 185182 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16151213

New failing tests:
fast/workers/worker-lifecycle.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819018</commentid>
    <comment_count>19</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-29 09:33:55 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 185182 [details])
&gt; Attachment 185182 [details] did not pass mac-wk2-ews (mac-wk2):
&gt; Output: http://queues.webkit.org/results/16151213
&gt; 
&gt; New failing tests:
&gt; fast/workers/worker-lifecycle.html

fast/workers/worker-lifecycle.html also fails in the baseline before this patch is applied.  So, it is not an issue with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819118</commentid>
    <comment_count>20</comment_count>
      <attachid>185182</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-01-29 11:12:53 -0800</bug_when>
    <thetext>Comment on attachment 185182
svn up&apos;ed to fix patch apply problem.

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

r- because I think DatabaseContext::contextDestroyed() is a bug.

The rest of my comments here would be good to resolve before landing, but don&apos;t stand in the way of an r+.

&gt; Source/WebCore/Modules/webdatabase/DatabaseContext.cpp:55
&gt; +    DatabaseManager::manager().notifyDatabaseContextConstructed(); 

I prefer for notifications to specify whether the event in question happened already, or is about to happen.

In this case, I think we want to notify when construction has happened already, and when destruction is about to happen. Other options risk our client dereferencing an object before or after its valid state.

I&apos;d suggest moving this call to below the initializing call to suspendIfNeeded(), since this object is not fully constructed until after that call. Then, I would rename the notifications to &quot;didConstructDatabaseContext&quot; and &quot;willDestructDatabaseContext&quot;.

&gt; Source/WebCore/Modules/webdatabase/DatabaseContext.cpp:65
&gt; +    // Make sure that the DatabaseThread is stopped before we destruct.
&gt; +    stopDatabases();

The comment here duplicates what the code says almost verbatim, increasing total reading time for these two lines by about 3X. I think you should remove it.

&gt; Source/WebCore/Modules/webdatabase/DatabaseContext.cpp:70
&gt; +    // This is because the Databases that are managed by DatabaseThread still
&gt; +    // relies on this ref between the context and the thread to execute the

Grammar: &quot;relies&quot; should be &quot;rely&quot;.

&gt; Source/WebCore/Modules/webdatabase/DatabaseContext.cpp:77
&gt;      if (m_databaseThread) {
&gt;          ASSERT(m_databaseThread-&gt;terminationRequested());
&gt;          m_databaseThread = 0;
&gt;      }

This code is a no-op. Clearing is the default behavior of the RefPtr destructor. I would suggest this instead:

stopDatabases();
ASSERT(!m_databaseThread || m_databaseThread-&gt;terminationRequested());

Your comment about why stopDatabases() can&apos;t clear our m_databaseThread reference should move into stopDatabases().

&gt; Source/WebCore/Modules/webdatabase/DatabaseContext.cpp:95
&gt; +    // However, we&apos;re here because the destructor hasn&apos;t been called, and the
&gt; +    // ScriptExecutionContext we&apos;re associated with is about to be destructed.

I don&apos;t understand this comment or code. m_scriptExecutionContext is a RefPtr, so it should be impossible for this function to be called while m_scriptExecutionContext is non-NULL. What am I missing?

&gt; Source/WebCore/Modules/webdatabase/DatabaseManager.h:65
&gt; +    PassRefPtr&lt;DatabaseContext&gt; getDatabaseContext(ScriptExecutionContext*);

We use the &quot;get&quot; prefix to indicate an out parameter. I&apos;d rename this to &quot;databaseContext&quot; or &quot;databaseContextFor&quot;.

&gt; Source/WebCore/Modules/webdatabase/DatabaseManager.h:127
&gt; +    PassRefPtr&lt;DatabaseContext&gt; getExistingDatabaseContext(ScriptExecutionContext*);

We use the &quot;get&quot; prefix to indicate an out parameter. I&apos;d rename this to &quot;existingDatabaseContext&quot; or &quot;existingDatabaseContextFor&quot;.

&gt; Source/WebCore/Modules/webdatabase/DatabaseManager.h:129
&gt; +    typedef HashMap&lt;ScriptExecutionContext*, DatabaseContext*, PtrHash&lt;ScriptExecutionContext*&gt; &gt; ContextMap;

PtrHash is the default hash for pointers, and doesn&apos;t need to be specified.

&gt; Source/WebCore/Modules/webdatabase/DatabaseManager.h:139
&gt; +#if !ASSERT_DISABLED
&gt; +    int m_databaseContextRegisteredCount;
&gt; +    int m_databaseContextInstanceCount;
&gt; +#endif

You should comment that these data members require locking m_contextMapLock.

&gt; Source/WebCore/Modules/webdatabase/DatabaseThread.cpp:58
&gt; +    // care of ensuring that a termination request has been issue. The

Grammar: &quot;issue&quot; should be &quot;issued&quot;.

&gt; Source/WebCore/Modules/webdatabase/DatabaseThread.cpp:60
&gt; +    // termination request will trigger an orderly shutdown of the thread, and
&gt; +    // then deref itself.

And then what will deref itself? The request, or the thread?

&gt; Source/WebCore/dom/ActiveDOMObject.cpp:60
&gt; +    // m_scriptExecutionContext would/should have been nullify by

Grammar: &quot;nullify&quot; should be &quot;nullified&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819299</commentid>
    <comment_count>21</comment_count>
      <attachid>185182</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-29 13:49:08 -0800</bug_when>
    <thetext>Comment on attachment 185182
svn up&apos;ed to fix patch apply problem.

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

&gt;&gt; Source/WebCore/Modules/webdatabase/DatabaseContext.cpp:55
&gt;&gt; +    DatabaseManager::manager().notifyDatabaseContextConstructed(); 
&gt; 
&gt; I prefer for notifications to specify whether the event in question happened already, or is about to happen.
&gt; 
&gt; In this case, I think we want to notify when construction has happened already, and when destruction is about to happen. Other options risk our client dereferencing an object before or after its valid state.
&gt; 
&gt; I&apos;d suggest moving this call to below the initializing call to suspendIfNeeded(), since this object is not fully constructed until after that call. Then, I would rename the notifications to &quot;didConstructDatabaseContext&quot; and &quot;willDestructDatabaseContext&quot;.

Fixed.

&gt;&gt; Source/WebCore/Modules/webdatabase/DatabaseContext.cpp:65
&gt;&gt; +    stopDatabases();
&gt; 
&gt; The comment here duplicates what the code says almost verbatim, increasing total reading time for these two lines by about 3X. I think you should remove it.

Removed.

&gt;&gt; Source/WebCore/Modules/webdatabase/DatabaseContext.cpp:70
&gt;&gt; +    // relies on this ref between the context and the thread to execute the
&gt; 
&gt; Grammar: &quot;relies&quot; should be &quot;rely&quot;.

Fixed.

&gt;&gt; Source/WebCore/Modules/webdatabase/DatabaseContext.cpp:77
&gt;&gt;      }
&gt; 
&gt; This code is a no-op. Clearing is the default behavior of the RefPtr destructor. I would suggest this instead:
&gt; 
&gt; stopDatabases();
&gt; ASSERT(!m_databaseThread || m_databaseThread-&gt;terminationRequested());
&gt; 
&gt; Your comment about why stopDatabases() can&apos;t clear our m_databaseThread reference should move into stopDatabases().

Good point.  Thanks for pointing that out.  This code was inherited, but I&apos;ll delete it.  The comment is moved to stopDatabases().

&gt;&gt; Source/WebCore/Modules/webdatabase/DatabaseContext.cpp:95
&gt;&gt; +    // ScriptExecutionContext we&apos;re associated with is about to be destructed.
&gt; 
&gt; I don&apos;t understand this comment or code. m_scriptExecutionContext is a RefPtr, so it should be impossible for this function to be called while m_scriptExecutionContext is non-NULL. What am I missing?

m_scriptExecutionContext came from ContextDestructionObserver and is just a raw pointer, not a RefPtr.  The whole purpose of contextDestroyed() is to inform the ContextDestructionObserver (which is the DatabaseContext in this case) that the ScriptExecutionContext is going down.  Since the DatabaseContext can live on pass the ScriptExecutionContext, we need to detach from it.

&gt;&gt; Source/WebCore/Modules/webdatabase/DatabaseManager.h:65
&gt;&gt; +    PassRefPtr&lt;DatabaseContext&gt; getDatabaseContext(ScriptExecutionContext*);
&gt; 
&gt; We use the &quot;get&quot; prefix to indicate an out parameter. I&apos;d rename this to &quot;databaseContext&quot; or &quot;databaseContextFor&quot;.

OK.  Renamed to databaseContextFor.

&gt;&gt; Source/WebCore/Modules/webdatabase/DatabaseManager.h:127
&gt;&gt; +    PassRefPtr&lt;DatabaseContext&gt; getExistingDatabaseContext(ScriptExecutionContext*);
&gt; 
&gt; We use the &quot;get&quot; prefix to indicate an out parameter. I&apos;d rename this to &quot;existingDatabaseContext&quot; or &quot;existingDatabaseContextFor&quot;.

Renamed to existingDatabaseContextFor.

&gt;&gt; Source/WebCore/Modules/webdatabase/DatabaseManager.h:129
&gt;&gt; +    typedef HashMap&lt;ScriptExecutionContext*, DatabaseContext*, PtrHash&lt;ScriptExecutionContext*&gt; &gt; ContextMap;
&gt; 
&gt; PtrHash is the default hash for pointers, and doesn&apos;t need to be specified.

Fixed.

&gt;&gt; Source/WebCore/Modules/webdatabase/DatabaseManager.h:139
&gt;&gt; +#endif
&gt; 
&gt; You should comment that these data members require locking m_contextMapLock.

Grouped the fields together and added the comment.

&gt;&gt; Source/WebCore/Modules/webdatabase/DatabaseThread.cpp:58
&gt;&gt; +    // care of ensuring that a termination request has been issue. The
&gt; 
&gt; Grammar: &quot;issue&quot; should be &quot;issued&quot;.

Typo.  Fixed.

&gt;&gt; Source/WebCore/Modules/webdatabase/DatabaseThread.cpp:60
&gt;&gt; +    // then deref itself.
&gt; 
&gt; And then what will deref itself? The request, or the thread?

The databaseThread() thread function will deref the DatabaseThread object before returning.  I conflate the function and the object as one because they work together.  I&apos;ve re-written the comment to be more clear about this.

&gt;&gt; Source/WebCore/dom/ActiveDOMObject.cpp:60
&gt;&gt; +    // m_scriptExecutionContext would/should have been nullify by
&gt; 
&gt; Grammar: &quot;nullify&quot; should be &quot;nullified&quot;.

Thanks.  Typo again.  Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819361</commentid>
    <comment_count>22</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-29 14:54:17 -0800</bug_when>
    <thetext>Landed in r141166: &lt;http://trac.webkit.org/changeset/141166&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819742</commentid>
    <comment_count>23</comment_count>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-01-29 20:51:49 -0800</bug_when>
    <thetext>r141166 seems to have introduced some thread related assert failures on the Linux debug test bot.

http://build.chromium.org/p/chromium.webkit/builders/WebKit%20Linux%20%28dbg%29/builds/5080
http://build.chromium.org/f/chromium/layout_test_results/WebKit_Linux__dbg_/results/layout-test-results/fast/workers/storage/change-version-sync-crash-log.txt
ASSERTION FAILED: m_verifier.isSafeToUse()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820264</commentid>
    <comment_count>24</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-30 09:31:46 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; r141166 seems to have introduced some thread related assert failures on the Linux debug test bot.
&gt; 
&gt; http://build.chromium.org/p/chromium.webkit/builders/WebKit%20Linux%20%28dbg%29/builds/5080
&gt; http://build.chromium.org/f/chromium/layout_test_results/WebKit_Linux__dbg_/results/layout-test-results/fast/workers/storage/change-version-sync-crash-log.txt
&gt; ASSERTION FAILED: m_verifier.isSafeToUse()

The bug for this is https://bugs.webkit.org/show_bug.cgi?id=108285.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820286</commentid>
    <comment_count>25</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2013-01-30 10:03:35 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; r141166 seems to have introduced some thread related assert failures on the Linux debug test bot.
&gt; &gt; 
&gt; &gt; http://build.chromium.org/p/chromium.webkit/builders/WebKit%20Linux%20%28dbg%29/builds/5080
&gt; &gt; http://build.chromium.org/f/chromium/layout_test_results/WebKit_Linux__dbg_/results/layout-test-results/fast/workers/storage/change-version-sync-crash-log.txt
&gt; &gt; ASSERTION FAILED: m_verifier.isSafeToUse()
&gt; 
&gt; The bug for this is https://bugs.webkit.org/show_bug.cgi?id=108285.

Note that this indicates a thread safety issue. This likely is an issue for the OSX port as well. It is just that the OSX port decided to turn off this assert everywhere so it doesn&apos;t show up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820288</commentid>
    <comment_count>26</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-30 10:05:21 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; Note that this indicates a thread safety issue. This likely is an issue for the OSX port as well. It is just that the OSX port decided to turn off this assert everywhere so it doesn&apos;t show up.

I&apos;m working on it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184400</attachid>
            <date>2013-01-23 22:11:04 -0800</date>
            <delta_ts>2013-01-23 22:44:40 -0800</delta_ts>
            <desc>The patch.</desc>
            <filename>bug-107784.patch</filename>
            <type>text/plain</type>
            <size>25594</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MDY0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDEzLTAxLTIzICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgRGF0YWJhc2VDb250ZXh0
IGxvb2t1cCB0byBiZSB0aHJlYWQtc2FmZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwNzc4NC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBEYXRhYmFzZUNvbnRleHQgd2lsbCBubyBsb25nZXIgYmUgYSBT
dXBwbGVtZW50IG9mIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAgICAgIEluc3RlYWQgd2Ug
d2lsbCBtYWludGFpbiBhIG11dGV4IGd1YXJkZWQgY29udGV4dE1hcCBpbiB0aGUgRGF0YWJhc2VN
YW5hZ2VyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFj
dERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFi
YXNlL0Fic3RyYWN0RGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QWJzdHJhY3REYXRhYmFzZTo6ZGF0YWJhc2VDb250ZXh0KToKKyAgICAgICAgKEFic3Ry
YWN0RGF0YWJhc2UpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KERhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQ29u
dGV4dDo6RGF0YWJhc2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQ29udGV4
dDo6fkRhdGFiYXNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNvbnRleHQ6
OnN0b3BEYXRhYmFzZXMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VD
b250ZXh0Lmg6CisgICAgICAgIChEYXRhYmFzZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VDb250ZXh0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlQ29udGV4dDo6aGFzT3BlbkRhdGFiYXNlcyk6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VNYW5hZ2VyOjpnZXRFeGlzdGluZ0RhdGFiYXNlQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6Z2V0RGF0YWJhc2VDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6cmVnaXN0ZXJEYXRhYmFz
ZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjp1bnJlZ2lzdGVy
RGF0YWJhc2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6b3Bl
bkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6b3BlbkRhdGFi
YXNlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Omhhc09wZW5EYXRh
YmFzZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpzdG9wRGF0YWJhc2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6aW50ZXJydXB0QWxsRGF0YWJh
c2VzRm9yQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1h
bmFnZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGF0YWJhc2VNYW5hZ2VyKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OkRhdGFiYXNlU3luYyk6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoRGF0YWJhc2VTeW5jKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
VHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmNhbkVzdGFi
bGlzaERhdGFiYXNlKToKKwogMjAxMy0wMS0yMyAgV2VpIEppYSAgPHdqaWFAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIEVuYWJsZSBhdXRvcGxheSB3aGVuIDx2aWRlbz4ncyBzcmMgaXMgZnJvbSBt
ZWRpYSBzdHJlYW0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJz
dHJhY3REYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkocmV2aXNpb24gMTQwNjQ2KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTc0LDEwICsxNzQsMTAgQEAgY29uc3QgY2hhciogQWJzdHJhY3REYXRh
YmFzZTo6ZGF0YWJhc2VJbgogICAgIHJldHVybiBpbmZvVGFibGVOYW1lOwogfQogCi1BYnN0cmFj
dERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCitB
YnN0cmFjdERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+
JiBkYXRhYmFzZUNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBl
Y3RlZFZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VU
eXBlIGRhdGFiYXNlVHlwZSkKLSAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0
KQotICAgICwgbV9kYXRhYmFzZUNvbnRleHQoRGF0YWJhc2VDb250ZXh0Ojpmcm9tKGNvbnRleHQp
KQorICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGRhdGFiYXNlQ29udGV4dC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9kYXRhYmFzZUNvbnRleHQoZGF0YWJhc2VDb250
ZXh0KQogICAgICwgbV9uYW1lKG5hbWUuaXNvbGF0ZWRDb3B5KCkpCiAgICAgLCBtX2V4cGVjdGVk
VmVyc2lvbihleHBlY3RlZFZlcnNpb24uaXNvbGF0ZWRDb3B5KCkpCiAgICAgLCBtX2Rpc3BsYXlO
YW1lKGRpc3BsYXlOYW1lLmlzb2xhdGVkQ29weSgpKQpAQCAtMTg3LDYgKzE4Nyw3IEBAIEFic3Ry
YWN0RGF0YWJhc2U6OkFic3RyYWN0RGF0YWJhc2UoU2NyaXAKICAgICAsIG1fbmV3KGZhbHNlKQog
ICAgICwgbV9pc1N5bmNEYXRhYmFzZShkYXRhYmFzZVR5cGUgPT0gU3luY0RhdGFiYXNlKQogewor
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBkYXRhYmFzZUNvbnRleHQtPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhy
ZWFkKCkpOwogICAgIG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luID0gbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5zZWN1cml0eU9yaWdpbigpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuaAkocmV2aXNp
b24gMTQwNjQ2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFj
dERhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiRGF0YWJhc2VCYXNpY1R5cGVzLmgiCisjaW5jbHVk
ZSAiRGF0YWJhc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCiAjaW5j
bHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNDUs
NyArNDYsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEYXRhYmFzZUF1dGhvcml6
ZXI7Ci1jbGFzcyBEYXRhYmFzZUNvbnRleHQ7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBtYXJrQXNEZWxldGVkQW5kQ2xvc2UoKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGNsb3NlSW1tZWRpYXRlbHkoKSA9IDA7CiAKLSAgICBEYXRhYmFzZUNvbnRleHQqIGRhdGFi
YXNlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VDb250ZXh0OyB9CisgICAgRGF0
YWJhc2VDb250ZXh0KiBkYXRhYmFzZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNl
Q29udGV4dC5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIENoYW5nZVZl
cnNpb25XcmFwcGVyOwpAQCAtMTAwLDcgKzEwMCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgU3lu
Y0RhdGFiYXNlCiAgICAgfTsKIAotICAgIEFic3RyYWN0RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNp
b24sCisgICAgQWJzdHJhY3REYXRhYmFzZShSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiYsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCiAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGlt
YXRlZFNpemUsIERhdGFiYXNlVHlwZSk7CiAKICAgICB2b2lkIGNsb3NlRGF0YWJhc2UoKTsKQEAg
LTEyOCw3ICsxMjgsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luOwogICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRp
b25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgRGF0YWJhc2VDb250ZXh0
KiBtX2RhdGFiYXNlQ29udGV4dDsgLy8gT3duZWQgYnkgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LgorICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IG1fZGF0YWJhc2VDb250ZXh0OyAvLyBBc3Nv
Y2lhdGVkIHdpdGggbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LgogCiAgICAgU3RyaW5nIG1fbmFt
ZTsKICAgICBTdHJpbmcgbV9leHBlY3RlZFZlcnNpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gMTQwNjQ2KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDggKzY1LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EYXRh
YmFzZTo6RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBk
aXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQotICAgIDogQWJzdHJhY3RE
YXRhYmFzZShjb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3Rp
bWF0ZWRTaXplLCBBc3luY0RhdGFiYXNlKQorRGF0YWJhc2U6OkRhdGFiYXNlKFJlZlB0cjxEYXRh
YmFzZUNvbnRleHQ+JiBkYXRhYmFzZUNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKKyAgICA6IEFic3RyYWN0RGF0YWJhc2UoZGF0YWJhc2VD
b250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXpl
LCBBc3luY0RhdGFiYXNlKQogICAgICwgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MoZmFsc2UpCiAg
ICAgLCBtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQodHJ1ZSkKICAgICAsIG1fZGVsZXRlZChm
YWxzZSkKQEAgLTc0LDcgKzc0LDcgQEAgRGF0YWJhc2U6OkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleAogICAgIG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbiA9IG1fY29udGV4dFRo
cmVhZFNlY3VyaXR5T3JpZ2luLT5pc29sYXRlZENvcHkoKTsKIAogICAgIFNjcmlwdENvbnRyb2xs
ZXI6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLSAgICBBU1NFUlQoZGF0YWJhc2VDb250ZXh0KCkt
PmRhdGFiYXNlVGhyZWFkKCkpOworICAgIEFTU0VSVChkYXRhYmFzZUNvbnRleHQtPmRhdGFiYXNl
VGhyZWFkKCkpOwogfQogCiBjbGFzcyBEZXJlZkNvbnRleHRUYXNrIDogcHVibGljIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2UuaAkocmV2aXNpb24gMTQwNjQ2KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2s7
Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBj
bGFzcyBTUUxUcmFuc2FjdGlvbjsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s7CkBAIC04
Nyw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2s7
CiAgICAgY2xhc3MgRGF0YWJhc2VUYWJsZU5hbWVzVGFzazsKIAotICAgIERhdGFiYXNlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhw
ZWN0ZWRWZXJzaW9uLAorICAgIERhdGFiYXNlKFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+JiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAgICAgICAg
ICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNp
emUpOwogICAgIHZvaWQgcnVuVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNh
bGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LAogICAgICAg
ICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFj
aywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+LCBib29sIHJlYWRPbmx5KTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlQ29udGV4dC5jcHAJKHJldmlzaW9uIDE0MDY0NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
MjAgKzQ0LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgY2hhciogRGF0YWJh
c2VDb250ZXh0OjpzdXBwbGVtZW50TmFtZSgpCi17Ci0gICAgcmV0dXJuICJEYXRhYmFzZUNvbnRl
eHQiOwotfQotCi1EYXRhYmFzZUNvbnRleHQqIERhdGFiYXNlQ29udGV4dDo6ZXhpc3RpbmdEYXRh
YmFzZUNvbnRleHRGcm9tKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi17Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PERhdGFiYXNlQ29udGV4dCo+KFN1cHBsZW1lbnQ8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dD46OmZyb20oY29udGV4dCwgc3VwcGxlbWVudE5hbWUoKSkpOwotfQotCiBE
YXRhYmFzZUNvbnRleHQ6OkRhdGFiYXNlQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0KQogICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCiAgICAgLCBt
X2hhc09wZW5EYXRhYmFzZXMoZmFsc2UpCiB7CisgICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2Vy
KCkucmVnaXN0ZXJEYXRhYmFzZUNvbnRleHQodGhpcyk7CiB9CiAKIERhdGFiYXNlQ29udGV4dDo6
fkRhdGFiYXNlQ29udGV4dCgpCkBAIC02NiwxNyArNTcsNyBAQCBEYXRhYmFzZUNvbnRleHQ6On5E
YXRhYmFzZUNvbnRleHQoKQogICAgICAgICBBU1NFUlQobV9kYXRhYmFzZVRocmVhZC0+dGVybWlu
YXRpb25SZXF1ZXN0ZWQoKSk7CiAgICAgICAgIG1fZGF0YWJhc2VUaHJlYWQgPSAwOwogICAgIH0K
LX0KLQotRGF0YWJhc2VDb250ZXh0KiBEYXRhYmFzZUNvbnRleHQ6OmZyb20oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBEYXRhYmFzZUNvbnRleHQqIHN1cHBsZW1lbnQg
PSBleGlzdGluZ0RhdGFiYXNlQ29udGV4dEZyb20oY29udGV4dCk7Ci0gICAgaWYgKCFzdXBwbGVt
ZW50KSB7Ci0gICAgICAgIHN1cHBsZW1lbnQgPSBuZXcgRGF0YWJhc2VDb250ZXh0KGNvbnRleHQp
OwotICAgICAgICBwcm92aWRlVG8oY29udGV4dCwgc3VwcGxlbWVudE5hbWUoKSwgYWRvcHRQdHIo
c3VwcGxlbWVudCkpOwotICAgICAgICBBU1NFUlQoc3VwcGxlbWVudCA9PSBleGlzdGluZ0RhdGFi
YXNlQ29udGV4dEZyb20oY29udGV4dCkpOwotICAgIH0KLSAgICByZXR1cm4gc3VwcGxlbWVudDsK
KyAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS51bnJlZ2lzdGVyRGF0YWJhc2VDb250ZXh0
KHRoaXMpOwogfQogCiBEYXRhYmFzZVRocmVhZCogRGF0YWJhc2VDb250ZXh0OjpkYXRhYmFzZVRo
cmVhZCgpCkBAIC05MiwyNiArNzMsMTMgQEAgRGF0YWJhc2VUaHJlYWQqIERhdGFiYXNlQ29udGV4
dDo6ZGF0YWJhcwogICAgIHJldHVybiBtX2RhdGFiYXNlVGhyZWFkLmdldCgpOwogfQogCi1ib29s
IERhdGFiYXNlQ29udGV4dDo6aGFzT3BlbkRhdGFiYXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0KQorYm9vbCBEYXRhYmFzZUNvbnRleHQ6OnN0b3BEYXRhYmFzZXMoRGF0YWJhc2VU
YXNrU3luY2hyb25pemVyKiBjbGVhbnVwU3luYykKIHsKLSAgICAvLyBXZSBkb24ndCB1c2UgRGF0
YWJhc2VDb250ZXh0Ojpmcm9tIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBjYXVzZQotICAgIC8v
IERhdGFiYXNlQ29udGV4dCB0byBiZSBhbGxvY2F0ZWQgaWYgd2UgZG9uJ3QgaGF2ZSBvbmUgYWxy
ZWFkeS4KLSAgICBEYXRhYmFzZUNvbnRleHQqIGRhdGFiYXNlQ29udGV4dCA9IGV4aXN0aW5nRGF0
YWJhc2VDb250ZXh0RnJvbShjb250ZXh0KTsKLSAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBkYXRhYmFzZUNvbnRleHQtPm1faGFzT3Bl
bkRhdGFiYXNlczsKLX0KLQotdm9pZCBEYXRhYmFzZUNvbnRleHQ6OnN0b3BEYXRhYmFzZXMoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBj
bGVhbnVwU3luYykKLXsKLSAgICAvLyBXZSBkb24ndCB1c2UgRGF0YWJhc2VDb250ZXh0Ojpmcm9t
IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBjYXVzZQotICAgIC8vIERhdGFiYXNlQ29udGV4dCB0
byBiZSBhbGxvY2F0ZWQgaWYgd2UgZG9uJ3QgaGF2ZSBvbmUgYWxyZWFkeS4KLSAgICBEYXRhYmFz
ZUNvbnRleHQqIGRhdGFiYXNlQ29udGV4dCA9IGV4aXN0aW5nRGF0YWJhc2VDb250ZXh0RnJvbShj
b250ZXh0KTsKLQotICAgIGlmIChkYXRhYmFzZUNvbnRleHQgJiYgZGF0YWJhc2VDb250ZXh0LT5t
X2RhdGFiYXNlVGhyZWFkKQotICAgICAgICBkYXRhYmFzZUNvbnRleHQtPm1fZGF0YWJhc2VUaHJl
YWQtPnJlcXVlc3RUZXJtaW5hdGlvbihjbGVhbnVwU3luYyk7Ci0gICAgZWxzZSBpZiAoY2xlYW51
cFN5bmMpCi0gICAgICAgIGNsZWFudXBTeW5jLT50YXNrQ29tcGxldGVkKCk7CisgICAgaWYgKG1f
ZGF0YWJhc2VUaHJlYWQpIHsKKyAgICAgICAgbV9kYXRhYmFzZVRocmVhZC0+cmVxdWVzdFRlcm1p
bmF0aW9uKGNsZWFudXBTeW5jKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKIH0KIAogYm9vbCBEYXRhYmFzZUNvbnRleHQ6OmFsbG93RGF0YWJhc2VBY2Nl
c3MoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZUNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlQ29udGV4dC5oCShyZXZpc2lvbiAxNDA2NDYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJEYXRhYmFzZURldGFpbHMuaCIKICNpbmNs
dWRlICJTdXBwbGVtZW50YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsMzEgKzQxLDMwIEBAIGNsYXNzIERhdGFiYXNlVGFz
a1N5bmNocm9uaXplcjsKIGNsYXNzIERhdGFiYXNlVGhyZWFkOwogY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKIAotY2xhc3MgRGF0YWJhc2VDb250ZXh0IDogcHVibGljIFN1cHBsZW1lbnQ8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4geworY2xhc3MgRGF0YWJhc2VDb250ZXh0IDogcHVibGlj
IFJlZkNvdW50ZWQ8RGF0YWJhc2VDb250ZXh0PiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RGF0
YWJhc2VDb250ZXh0KCk7Ci0gICAgc3RhdGljIERhdGFiYXNlQ29udGV4dCogZnJvbShTY3JpcHRF
eGVjdXRpb25Db250ZXh0Kik7CiAKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgeyByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OyB9CiAg
ICAgRGF0YWJhc2VUaHJlYWQqIGRhdGFiYXNlVGhyZWFkKCk7CiAKICAgICB2b2lkIHNldEhhc09w
ZW5EYXRhYmFzZXMoKSB7IG1faGFzT3BlbkRhdGFiYXNlcyA9IHRydWU7IH0KLQotICAgIHN0YXRp
YyBib29sIGhhc09wZW5EYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIGJv
b2wgaGFzT3BlbkRhdGFiYXNlcygpIHsgcmV0dXJuIG1faGFzT3BlbkRhdGFiYXNlczsgfQogCiAg
ICAgLy8gV2hlbiB0aGUgZGF0YWJhc2UgY2xlYW51cCBpcyBkb25lLCBjbGVhbnVwU3luYyB3aWxs
IGJlIHNpZ25hbGxlZC4KLSAgICBzdGF0aWMgdm9pZCBzdG9wRGF0YWJhc2VzKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqKTsKKyAgICBib29sIHN0b3BE
YXRhYmFzZXMoRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKik7CiAKICAgICBib29sIGFsbG93RGF0
YWJhc2VBY2Nlc3MoKSBjb25zdDsKICAgICB2b2lkIGRhdGFiYXNlRXhjZWVkZWRRdW90YShjb25z
dCBTdHJpbmcmIG5hbWUsIERhdGFiYXNlRGV0YWlscyk7CiAKIHByaXZhdGU6CiAgICAgZXhwbGlj
aXQgRGF0YWJhc2VDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLSAgICBzdGF0aWMg
Y29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKLSAgICBzdGF0aWMgRGF0YWJhc2VDb250ZXh0
KiBleGlzdGluZ0RhdGFiYXNlQ29udGV4dEZyb20oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwog
CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0Owog
ICAgIFJlZlB0cjxEYXRhYmFzZVRocmVhZD4gbV9kYXRhYmFzZVRocmVhZDsKICAgICBib29sIG1f
aGFzT3BlbkRhdGFiYXNlczsgLy8gVGhpcyBuZXZlciBjaGFuZ2VzIGJhY2sgdG8gZmFsc2UsIGV2
ZW4gYWZ0ZXIgdGhlIGRhdGFiYXNlIHRocmVhZCBpcyBjbG9zZWQuCisKKyAgICBmcmllbmQgY2xh
c3MgRGF0YWJhc2VNYW5hZ2VyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VN
YW5hZ2VyLmNwcAkocmV2aXNpb24gMTQwNjQ2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiRGF0YWJhc2VDYWxsYmFjay5oIgogI2luY2x1ZGUgIkRhdGFiYXNl
Q29udGV4dC5oIgogI2luY2x1ZGUgIkRhdGFiYXNlU3luYy5oIgorI2luY2x1ZGUgIkRhdGFiYXNl
VGFzay5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlSW5zdHJ1bWVudGF0aW9uLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
QEAgLTEyMiwxNiArMTIzLDU4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJh
Y2s+IG1fY3JlYXRpb25DYWxsYmFjazsKIH07CiAKK1Bhc3NSZWZQdHI8RGF0YWJhc2VDb250ZXh0
PiBEYXRhYmFzZU1hbmFnZXI6OmdldEV4aXN0aW5nRGF0YWJhc2VDb250ZXh0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fY29udGV4
dE1hcExvY2spOworICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9
IGFkb3B0UmVmKG1fY29udGV4dE1hcC5nZXQoY29udGV4dCkpOworICAgIGlmIChkYXRhYmFzZUNv
bnRleHQpIHsKKyAgICAgICAgLy8gSWYgd2UncmUgaW5zdGFudGlhdGluZyBhIG5ldyBEYXRhYmFz
ZUNvbnRleHQsIHRoZSBuZXcgaW5zdGFuY2Ugd291bGQKKyAgICAgICAgLy8gY2FycnkgYSBuZXcg
cmVmQ291bnQgb2YgMS4gVGhlIGNsaWVudCBleHBlY3RzIHRoaXMgYW5kIHdpbGwgc2ltcGx5Cisg
ICAgICAgIC8vIGFkb3B0UmVmIHRoZSBkYXRhYmFzZUNvbnRleHQgd2l0aG91dCByZWYnaW5nIGl0
LgorICAgICAgICAvLyAgICAgSG93ZXZlciwgaW5zdGVhZCBvZiBpbnN0YW50aWF0aW5nIGEgbmV3
IGluc3RhbmNlLCB3ZSdyZSByZXVzaW5nCisgICAgICAgIC8vIGFuIGV4aXN0aW5nIG9uZSB0aGF0
IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dC4KKyAg
ICAgICAgLy8gSGVuY2UsIHRoYXQgbmV3IHJlZkNvdW50IG5lZWQgdG8gYmUgYXR0cmlidXRlZCB0
byB0aGUgcmV1c2VkIGluc3RhbmNlCisgICAgICAgIC8vIHRvIGVuc3VyZSB0aGF0IHRoZSByZWZD
b3VudCBpcyBhY2N1cmF0ZSB3aGVuIHRoZSBjbGllbnQgYWRvcHRzIHRoZSByZWYuCisgICAgICAg
IC8vIFdlIGRvIHRoaXMgYnkgcmVmJ2luZyB0aGUgcmV1c2VkIGRhdGFiYXNlQ29udGV4dCBiZWZv
cmUgcmV0dXJuaW5nIGl0LgorICAgICAgICBkYXRhYmFzZUNvbnRleHQtPnJlZigpOworICAgIH0K
KyAgICByZXR1cm4gZGF0YWJhc2VDb250ZXh0LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxE
YXRhYmFzZUNvbnRleHQ+IERhdGFiYXNlTWFuYWdlcjo6Z2V0RGF0YWJhc2VDb250ZXh0KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgUmVmUHRyPERhdGFiYXNlQ29udGV4
dD4gZGF0YWJhc2VDb250ZXh0ID0gZ2V0RXhpc3RpbmdEYXRhYmFzZUNvbnRleHQoY29udGV4dCk7
CisgICAgaWYgKCFkYXRhYmFzZUNvbnRleHQpCisgICAgICAgIGRhdGFiYXNlQ29udGV4dCA9IGFk
b3B0UmVmKG5ldyBEYXRhYmFzZUNvbnRleHQoY29udGV4dCkpOworICAgIHJldHVybiBkYXRhYmFz
ZUNvbnRleHQucmVsZWFzZSgpOworfQorCit2b2lkIERhdGFiYXNlTWFuYWdlcjo6cmVnaXN0ZXJE
YXRhYmFzZUNvbnRleHQoRGF0YWJhc2VDb250ZXh0KiBkYXRhYmFzZUNvbnRleHQpCit7CisgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fY29udGV4dE1hcExvY2spOworICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQgPSBkYXRhYmFzZUNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICBtX2NvbnRleHRNYXAuc2V0KGNvbnRleHQsIGRhdGFiYXNlQ29udGV4dCk7Cit9
CisKK3ZvaWQgRGF0YWJhc2VNYW5hZ2VyOjp1bnJlZ2lzdGVyRGF0YWJhc2VDb250ZXh0KERhdGFi
YXNlQ29udGV4dCogZGF0YWJhc2VDb250ZXh0KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X2NvbnRleHRNYXBMb2NrKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0g
ZGF0YWJhc2VDb250ZXh0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgbV9jb250ZXh0
TWFwLnJlbW92ZShjb250ZXh0KTsKK30KKwogUGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0YWJhc2VN
YW5hZ2VyOjpvcGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKICAg
ICBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25z
dCBTdHJpbmcmIGRpc3BsYXlOYW1lLAogICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwg
UGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25D
b2RlJiBlKQogeworICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9
IGdldERhdGFiYXNlQ29udGV4dChjb250ZXh0KTsKKwogICAgIGlmICghY2FuRXN0YWJsaXNoRGF0
YWJhc2UoY29udGV4dCwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKSB7CiAgICAg
ICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgJXMgZm9yIG9yaWdpbiAlcyBub3QgYWxsb3dl
ZCB0byBiZSBlc3RhYmxpc2hlZCIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIGNvbnRleHQtPnNlY3Vy
aXR5T3JpZ2luKCktPnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKLSAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gYWRvcHRSZWYobmV3
IERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVz
dGltYXRlZFNpemUpKTsKKyAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gYWRvcHRSZWYo
bmV3IERhdGFiYXNlKGRhdGFiYXNlQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNw
bGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOwogCiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKICAg
ICBpZiAoIWRhdGFiYXNlLT5vcGVuQW5kVmVyaWZ5VmVyc2lvbighY3JlYXRpb25DYWxsYmFjaywg
ZSwgZXJyb3JNZXNzYWdlKSkgewpAQCAtMTQxLDcgKzE4NCw3IEBAIFBhc3NSZWZQdHI8RGF0YWJh
c2U+IERhdGFiYXNlTWFuYWdlcjo6b3AKICAgICB9CiAKICAgICBEYXRhYmFzZU1hbmFnZXI6Om1h
bmFnZXIoKS5zZXREYXRhYmFzZURldGFpbHMoY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgbmFt
ZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOwotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFu
YWdlcigpLnNldEhhc09wZW5EYXRhYmFzZXMoY29udGV4dCk7CisgICAgZGF0YWJhc2VDb250ZXh0
LT5zZXRIYXNPcGVuRGF0YWJhc2VzKCk7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZE9wZW5EYXRhYmFzZShjb250ZXh0LCBkYXRhYmFzZSwgY29udGV4dC0+c2VjdXJpdHlPcmln
aW4oKS0+aG9zdCgpLCBuYW1lLCBleHBlY3RlZFZlcnNpb24pOwogCkBAIC0xNTAsMTMgKzE5Mywx
NCBAQCBQYXNzUmVmUHRyPERhdGFiYXNlPiBEYXRhYmFzZU1hbmFnZXI6Om9wCiAgICAgICAgIGRh
dGFiYXNlLT5tX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKERhdGFiYXNlQ3JlYXRp
b25DYWxsYmFja1Rhc2s6OmNyZWF0ZShkYXRhYmFzZSwgY3JlYXRpb25DYWxsYmFjaykpOwogICAg
IH0KIAotICAgIHJldHVybiBkYXRhYmFzZTsKKyAgICByZXR1cm4gZGF0YWJhc2UucmVsZWFzZSgp
OwogfQogCiBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gRGF0YWJhc2VNYW5hZ2VyOjpvcGVuRGF0
YWJhc2VTeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCiAgICAgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBk
aXNwbGF5TmFtZSwKICAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8
RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CisgICAgUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gZ2V0RGF0YWJh
c2VDb250ZXh0KGNvbnRleHQpOwogICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQo
KSk7CiAKICAgICBpZiAoIWNhbkVzdGFibGlzaERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGRpc3Bs
YXlOYW1lLCBlc3RpbWF0ZWRTaXplKSkgewpAQCAtMTY0LDcgKzIwOCw3IEBAIFBhc3NSZWZQdHI8
RGF0YWJhc2VTeW5jPiBEYXRhYmFzZU1hbmFnZXIKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
Ci0gICAgUmVmUHRyPERhdGFiYXNlU3luYz4gZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJh
c2VTeW5jKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGlt
YXRlZFNpemUpKTsKKyAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBkYXRhYmFzZSA9IGFkb3B0UmVm
KG5ldyBEYXRhYmFzZVN5bmMoZGF0YWJhc2VDb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24s
IGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7CiAKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdl
OwogICAgIGlmICghZGF0YWJhc2UtPnBlcmZvcm1PcGVuQW5kVmVyaWZ5KCFjcmVhdGlvbkNhbGxi
YWNrLCBlYywgZXJyb3JNZXNzYWdlKSkgewpAQCAtMTgwLDIyICsyMjQsMjMgQEAgUGFzc1JlZlB0
cjxEYXRhYmFzZVN5bmM+IERhdGFiYXNlTWFuYWdlcgogICAgICAgICBjcmVhdGlvbkNhbGxiYWNr
LT5oYW5kbGVFdmVudChkYXRhYmFzZS5nZXQoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGRhdGFi
YXNlOworICAgIHJldHVybiBkYXRhYmFzZS5yZWxlYXNlKCk7CiB9CiAKIGJvb2wgRGF0YWJhc2VN
YW5hZ2VyOjpoYXNPcGVuRGF0YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQp
CiB7Ci0gICAgcmV0dXJuIERhdGFiYXNlQ29udGV4dDo6aGFzT3BlbkRhdGFiYXNlcyhjb250ZXh0
KTsKLX0KLQotdm9pZCBEYXRhYmFzZU1hbmFnZXI6OnNldEhhc09wZW5EYXRhYmFzZXMoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBEYXRhYmFzZUNvbnRleHQ6OmZyb20o
Y29udGV4dCktPnNldEhhc09wZW5EYXRhYmFzZXMoKTsKKyAgICBSZWZQdHI8RGF0YWJhc2VDb250
ZXh0PiBkYXRhYmFzZUNvbnRleHQgPSBnZXRFeGlzdGluZ0RhdGFiYXNlQ29udGV4dChjb250ZXh0
KTsKKyAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBkYXRhYmFzZUNvbnRleHQtPm1faGFzT3BlbkRhdGFiYXNlczsKIH0KIAogdm9pZCBE
YXRhYmFzZU1hbmFnZXI6OnN0b3BEYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIpCiB7Ci0gICAgRGF0
YWJhc2VDb250ZXh0OjpzdG9wRGF0YWJhc2VzKGNvbnRleHQsIHN5bmNocm9uaXplcik7CisgICAg
UmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gZ2V0RXhpc3RpbmdEYXRh
YmFzZUNvbnRleHQoY29udGV4dCk7CisgICAgaWYgKCFkYXRhYmFzZUNvbnRleHQgfHwgIWRhdGFi
YXNlQ29udGV4dC0+c3RvcERhdGFiYXNlcyhzeW5jaHJvbml6ZXIpKQorICAgICAgICBpZiAoc3lu
Y2hyb25pemVyKQorICAgICAgICAgICAgc3luY2hyb25pemVyLT50YXNrQ29tcGxldGVkKCk7CiB9
CiAKIFN0cmluZyBEYXRhYmFzZU1hbmFnZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2UoU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4
aXN0KQpAQCAtMjcyLDkgKzMxNywxMSBAQCB2b2lkIERhdGFiYXNlTWFuYWdlcjo6Y2xvc2VEYXRh
YmFzZXNJbW1lCiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oQ0hST01JVU0pCiAKLXZvaWQgRGF0YWJh
c2VNYW5hZ2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit2b2lkIERhdGFiYXNlTWFuYWdlcjo6aW50ZXJydXB0
QWxsRGF0YWJhc2VzRm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQog
ewotICAgIG1fc2VydmVyLT5pbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnRleHQp
OworICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9IGdldEV4aXN0
aW5nRGF0YWJhc2VDb250ZXh0KGNvbnRleHQpOworICAgIGlmIChkYXRhYmFzZUNvbnRleHQpCisg
ICAgICAgIG1fc2VydmVyLT5pbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnRleHQp
OwogfQogCiBib29sIERhdGFiYXNlTWFuYWdlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2Vy
LmgJKHJldmlzaW9uIDE0MDY0NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwxNiBAQAog
CiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oIgogI2luY2x1ZGUgIkRhdGFiYXNl
QmFzaWNUeXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQWJzdHJhY3REYXRhYmFzZVNlcnZlcjsKIGNsYXNzIERhdGFiYXNlOwog
Y2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKK2NsYXNzIERhdGFiYXNlQ29udGV4dDsKIGNsYXNzIERh
dGFiYXNlTWFuYWdlckNsaWVudDsKIGNsYXNzIERhdGFiYXNlU3luYzsKIGNsYXNzIERhdGFiYXNl
VGFza1N5bmNocm9uaXplcjsKQEAgLTU2LDExICs1OSwyMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c0F2YWlsYWJsZSgpOwogICAgIHZvaWQgc2V0SXNBdmFpbGFibGUoYm9vbCk7CiAKKyAgICAvLyBU
aGlzIGdldHMgYSBEYXRhYmFzZUNvbnRleHQgZm9yIHRoZSBzcGVjaWZpZWQgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCBpZgorICAgIC8vIGl0IGFscmVhZHkgZXhpc3QgcHJldmlvdXNseS4gT3RoZXJ3
aXNlLCBpdCByZXR1cm5zIDAuCisgICAgUGFzc1JlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGdldEV4
aXN0aW5nRGF0YWJhc2VDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKworICAgIC8v
IFRoaXMgZ2V0cyBhIERhdGFiYXNlQ29udGV4dCBmb3IgdGhlIHNwZWNpZmllZCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0LgorICAgIC8vIElmIG9uZSBkb2Vzbid0IGFscmVhZHkgZXhpc3QsIGl0IHdp
bGwgY3JlYXRlIGEgbmV3IG9uZS4KKyAgICBQYXNzUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZ2V0
RGF0YWJhc2VDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKworICAgIC8vIFRoZXNl
IDIgbWV0aG9kcyBhcmUgZm9yIERhdGFiYXNlQ29udGV4dCAodW4pcmVnaXN0cmF0aW9uLCBhbmQg
c2hvdWxkIG9ubHkKKyAgICAvLyBiZSBjYWxsZWQgYnkgdGhlIERhdGFiYXNlQ29udGV4dCBjb25z
dHJ1Y3RvciBhbmQgZGVzdHJ1Y3Rvci4KKyAgICB2b2lkIHJlZ2lzdGVyRGF0YWJhc2VDb250ZXh0
KERhdGFiYXNlQ29udGV4dCopOworICAgIHZvaWQgdW5yZWdpc3RlckRhdGFiYXNlQ29udGV4dChE
YXRhYmFzZUNvbnRleHQqKTsKKwogICAgIFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFz
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQg
bG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBFeGNlcHRp
b25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IG9wZW5EYXRhYmFzZVN5bmMo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9u
Q29kZSYpOwogCiAgICAgYm9vbCBoYXNPcGVuRGF0YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqKTsKLSAgICB2b2lkIHNldEhhc09wZW5EYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopOwogICAgIHZvaWQgc3RvcERhdGFiYXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRGF0
YWJhc2VUYXNrU3luY2hyb25pemVyKik7CiAKICAgICBTdHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFz
ZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNO
b3RFeGlzdCA9IHRydWUpOwpAQCAtODksNyArMTA0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xv
c2VEYXRhYmFzZXNJbW1lZGlhdGVseShjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgbmFtZSk7CiAjZW5kaWYgLy8gUExBVEZPUk0oQ0hST01JVU0pCiAKLSAgICB2
b2lkIGludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3QgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCopOworICAgIHZvaWQgaW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Kik7CiAKICAgICBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
ZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgdm9pZCBhZGRP
cGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSopOwpAQCAtMTAyLDYgKzExNywxMCBAQCBwcml2
YXRlOgogICAgIERhdGFiYXNlTWFuYWdlcigpOwogICAgIH5EYXRhYmFzZU1hbmFnZXIoKSB7IH0K
IAorICAgIHR5cGVkZWYgSGFzaE1hcDxTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRGF0YWJhc2VD
b250ZXh0KiwgUHRySGFzaDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Kj4gPiBDb250ZXh0TWFwOwor
ICAgIENvbnRleHRNYXAgbV9jb250ZXh0TWFwOworICAgIE11dGV4IG1fY29udGV4dE1hcExvY2s7
CisKICAgICBBYnN0cmFjdERhdGFiYXNlU2VydmVyKiBtX3NlcnZlcjsKICAgICBEYXRhYmFzZU1h
bmFnZXJDbGllbnQqIG1fY2xpZW50OwogICAgIGJvb2wgbV9kYXRhYmFzZUlzQXZhaWxhYmxlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VTeW5jLmNwcAkocmV2aXNpb24gMTQwNjQ2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw5ICs0Nyw5
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRGF0YWJhc2VTeW5jOjpEYXRhYmFzZVN5bmMo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKK0RhdGFiYXNlU3luYzo6RGF0YWJhc2VTeW5jKFJl
ZlB0cjxEYXRhYmFzZUNvbnRleHQ+JiBkYXRhYmFzZUNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNp
emUpCi0gICAgOiBBYnN0cmFjdERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lv
biwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIFN5bmNEYXRhYmFzZSkKKyAgICA6IEFic3Ry
YWN0RGF0YWJhc2UoZGF0YWJhc2VDb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3Bs
YXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBTeW5jRGF0YWJhc2UpCiB7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuaAkocmV2
aXNpb24gMTQwNjQ2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBEYXRhYmFzZUNhbGxiYWNrOwogY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5j
OwogY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s7Ci1jbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIC8vIEluc3RhbmNlcyBvZiB0aGlz
IGNsYXNzIHNob3VsZCBiZSBjcmVhdGVkIGFuZCB1c2VkIG9ubHkgb24gdGhlIHdvcmtlcidzIGNv
bnRleHQgdGhyZWFkLgpAQCAtNzQsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRl
OgotICAgIERhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKKyAgICBEYXRhYmFzZVN5bmMo
UmVmUHRyPERhdGFiYXNlQ29udGV4dD4mLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3Bs
YXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwogICAgIHZvaWQgcnVuVHJhbnNh
Y3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIGJvb2wgcmVhZE9u
bHksIEV4Y2VwdGlvbkNvZGUmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAkocmV2aXNpb24gMTQwNjQ2
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQ2hyb21lLmgi
CiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0Lmgi
CisjaW5jbHVkZSAiRGF0YWJhc2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VNYW5hZ2Vy
Q2xpZW50LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKICNpbmNsdWRlICJMb2dnaW5n
LmgiCkBAIC0xNjcsNyArMTY4LDkgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmNhbkVzdGFibGlz
aERhdGFiYQogCiAgICAgLy8gR2l2ZSB0aGUgY2hyb21lIGNsaWVudCBhIGNoYW5jZSB0byBpbmNy
ZWFzZSB0aGUgcXVvdGEuCiAgICAgLy8gRHJvcCBhbGwgbG9ja3MgYmVmb3JlIGNhbGxpbmcgb3V0
OyB3ZSBkb24ndCBrbm93IHdoYXQgdGhleSdsbCBkby4KLSAgICBEYXRhYmFzZUNvbnRleHQ6OmZy
b20oY29udGV4dCktPmRhdGFiYXNlRXhjZWVkZWRRdW90YShuYW1lLCBEYXRhYmFzZURldGFpbHMo
bmFtZS5pc29sYXRlZENvcHkoKSwgZGlzcGxheU5hbWUuaXNvbGF0ZWRDb3B5KCksIGVzdGltYXRl
ZFNpemUsIDApKTsKKyAgICBEYXRhYmFzZU1hbmFnZXImIG1hbmFnZXIgPSBEYXRhYmFzZU1hbmFn
ZXI6Om1hbmFnZXIoKTsKKyAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRl
eHQgPSBtYW5hZ2VyLmdldERhdGFiYXNlQ29udGV4dChjb250ZXh0KTsKKyAgICBkYXRhYmFzZUNv
bnRleHQtPmRhdGFiYXNlRXhjZWVkZWRRdW90YShuYW1lLCBEYXRhYmFzZURldGFpbHMobmFtZS5p
c29sYXRlZENvcHkoKSwgZGlzcGxheU5hbWUuaXNvbGF0ZWRDb3B5KCksIGVzdGltYXRlZFNpemUs
IDApKTsKIAogICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwog
Cg==
</data>
<flag name="commit-queue"
          id="203124"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184408</attachid>
            <date>2013-01-23 22:56:00 -0800</date>
            <delta_ts>2013-01-24 13:36:54 -0800</delta_ts>
            <desc>Patch + fix for release builds.</desc>
            <filename>bug-107784.patch</filename>
            <type>text/plain</type>
            <size>25686</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MDY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDEzLTAxLTIzICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgRGF0YWJhc2VDb250ZXh0
IGxvb2t1cCB0byBiZSB0aHJlYWQtc2FmZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwNzc4NC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBEYXRhYmFzZUNvbnRleHQgd2lsbCBubyBsb25nZXIgYmUgYSBT
dXBwbGVtZW50IG9mIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAgICAgIEluc3RlYWQgd2Ug
d2lsbCBtYWludGFpbiBhIG11dGV4IGd1YXJkZWQgY29udGV4dE1hcCBpbiB0aGUgRGF0YWJhc2VN
YW5hZ2VyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFj
dERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFi
YXNlL0Fic3RyYWN0RGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QWJzdHJhY3REYXRhYmFzZTo6ZGF0YWJhc2VDb250ZXh0KToKKyAgICAgICAgKEFic3Ry
YWN0RGF0YWJhc2UpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KERhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQ29u
dGV4dDo6RGF0YWJhc2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQ29udGV4
dDo6fkRhdGFiYXNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNvbnRleHQ6
OnN0b3BEYXRhYmFzZXMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VD
b250ZXh0Lmg6CisgICAgICAgIChEYXRhYmFzZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VDb250ZXh0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlQ29udGV4dDo6aGFzT3BlbkRhdGFiYXNlcyk6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VNYW5hZ2VyOjpnZXRFeGlzdGluZ0RhdGFiYXNlQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6Z2V0RGF0YWJhc2VDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6cmVnaXN0ZXJEYXRhYmFz
ZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjp1bnJlZ2lzdGVy
RGF0YWJhc2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6b3Bl
bkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6b3BlbkRhdGFi
YXNlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Omhhc09wZW5EYXRh
YmFzZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpzdG9wRGF0YWJhc2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6aW50ZXJydXB0QWxsRGF0YWJh
c2VzRm9yQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1h
bmFnZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGF0YWJhc2VNYW5hZ2VyKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OkRhdGFiYXNlU3luYyk6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoRGF0YWJhc2VTeW5jKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
VHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmNhbkVzdGFi
bGlzaERhdGFiYXNlKToKKwogMjAxMy0wMS0yMyAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgQWRkIGZvcm0tcmVsYXRlZCBpbnN0cnVtZW50YXRpb25zLCBhbmQg
c3VwcG9ydCAzMysgZmVhdHVyZXMgaW4gRmVhdHVyZU9ic2VydmVyCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5j
cHAJKHJldmlzaW9uIDE0MDY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvQWJzdHJhY3REYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwxMCArMTc0LDEw
IEBAIGNvbnN0IGNoYXIqIEFic3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNlSW4KICAgICByZXR1cm4g
aW5mb1RhYmxlTmFtZTsKIH0KIAotQWJzdHJhY3REYXRhYmFzZTo6QWJzdHJhY3REYXRhYmFzZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAorQWJzdHJhY3REYXRhYmFzZTo6QWJzdHJhY3REYXRh
YmFzZShSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiYgZGF0YWJhc2VDb250ZXh0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlVHlwZSBkYXRhYmFzZVR5cGUpCi0gICAgOiBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKLSAgICAsIG1fZGF0YWJhc2VDb250ZXh0KERh
dGFiYXNlQ29udGV4dDo6ZnJvbShjb250ZXh0KSkKKyAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dChkYXRhYmFzZUNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1f
ZGF0YWJhc2VDb250ZXh0KGRhdGFiYXNlQ29udGV4dCkKICAgICAsIG1fbmFtZShuYW1lLmlzb2xh
dGVkQ29weSgpKQogICAgICwgbV9leHBlY3RlZFZlcnNpb24oZXhwZWN0ZWRWZXJzaW9uLmlzb2xh
dGVkQ29weSgpKQogICAgICwgbV9kaXNwbGF5TmFtZShkaXNwbGF5TmFtZS5pc29sYXRlZENvcHko
KSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBBYnN0cmFjdERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNl
KFNjcmlwCiAgICAgLCBtX25ldyhmYWxzZSkKICAgICAsIG1faXNTeW5jRGF0YWJhc2UoZGF0YWJh
c2VUeXBlID09IFN5bmNEYXRhYmFzZSkKIHsKLSAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0
VGhyZWFkKCkpOworICAgIEFTU0VSVChkYXRhYmFzZUNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIG1fY29udGV4dFRocmVhZFNlY3VyaXR5
T3JpZ2luID0gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0eU9yaWdpbigpOwogCiAg
ICAgbV9kYXRhYmFzZUF1dGhvcml6ZXIgPSBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZShpbmZv
VGFibGVOYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJz
dHJhY3REYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5oCShyZXZpc2lvbiAxNDA2NTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKICNpbmNs
dWRlICJEYXRhYmFzZUJhc2ljVHlwZXMuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUNvbnRleHQuaCIK
ICNpbmNsdWRlICJEYXRhYmFzZURldGFpbHMuaCIKICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5o
IgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC00NSw3ICs0Niw2IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIERhdGFiYXNlQXV0aG9yaXplcjsKLWNsYXNzIERhdGFiYXNlQ29u
dGV4dDsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTZWN1cml0eU9yaWdp
bjsKIApAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG1hcmtBc0Rl
bGV0ZWRBbmRDbG9zZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VJbW1lZGlhdGVseSgp
ID0gMDsKIAotICAgIERhdGFiYXNlQ29udGV4dCogZGF0YWJhc2VDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhYmFzZUNvbnRleHQ7IH0KKyAgICBEYXRhYmFzZUNvbnRleHQqIGRhdGFiYXNl
Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VDb250ZXh0LmdldCgpOyB9CiAKIHBy
b3RlY3RlZDoKICAgICBmcmllbmQgY2xhc3MgQ2hhbmdlVmVyc2lvbldyYXBwZXI7CkBAIC0xMDAs
NyArMTAwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBTeW5jRGF0YWJhc2UKICAgICB9OwogCi0g
ICAgQWJzdHJhY3REYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKKyAgICBBYnN0cmFjdERhdGFi
YXNlKFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+JiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VUeXBl
KTsKIAogICAgIHZvaWQgY2xvc2VEYXRhYmFzZSgpOwpAQCAtMTI4LDcgKzEyOCw3IEBAIHByb3Rl
Y3RlZDoKIAogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9jb250ZXh0VGhyZWFkU2VjdXJp
dHlPcmlnaW47CiAgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDsKLSAgICBEYXRhYmFzZUNvbnRleHQqIG1fZGF0YWJhc2VDb250ZXh0OyAv
LyBPd25lZCBieSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAgUmVmUHRyPERhdGFiYXNl
Q29udGV4dD4gbV9kYXRhYmFzZUNvbnRleHQ7IC8vIEFzc29jaWF0ZWQgd2l0aCBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuCiAKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFN0cmluZyBtX2V4cGVj
dGVkVmVyc2lvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxNDA2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsOCArNjUs
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURhdGFiYXNlOjpEYXRhYmFzZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUpCi0gICAgOiBBYnN0cmFjdERhdGFiYXNlKGNvbnRleHQsIG5hbWUs
IGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIEFzeW5jRGF0YWJh
c2UpCitEYXRhYmFzZTo6RGF0YWJhc2UoUmVmUHRyPERhdGFiYXNlQ29udGV4dD4mIGRhdGFiYXNl
Q29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lv
biwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXpl
KQorICAgIDogQWJzdHJhY3REYXRhYmFzZShkYXRhYmFzZUNvbnRleHQsIG5hbWUsIGV4cGVjdGVk
VmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIEFzeW5jRGF0YWJhc2UpCiAgICAg
LCBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyhmYWxzZSkKICAgICAsIG1faXNUcmFuc2FjdGlvblF1
ZXVlRW5hYmxlZCh0cnVlKQogICAgICwgbV9kZWxldGVkKGZhbHNlKQpAQCAtNzQsNyArNzQsNyBA
QCBEYXRhYmFzZTo6RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4CiAgICAgbV9kYXRhYmFz
ZVRocmVhZFNlY3VyaXR5T3JpZ2luID0gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4tPmlz
b2xhdGVkQ29weSgpOwogCiAgICAgU2NyaXB0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZVRocmVhZGlu
ZygpOwotICAgIEFTU0VSVChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSk7Cisg
ICAgQVNTRVJUKGRhdGFiYXNlQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSk7CiB9CiAKIGNsYXNz
IERlcmVmQ29udGV4dFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5o
CShyZXZpc2lvbiAxNDA2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uOwog
Y2xhc3MgU1FMVHJhbnNhY3Rpb25DYWxsYmFjazsKQEAgLTg3LDcgKzg2LDcgQEAgcHJpdmF0ZToK
ICAgICBjbGFzcyBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazsKICAgICBjbGFzcyBEYXRhYmFzZVRh
YmxlTmFtZXNUYXNrOwogCi0gICAgRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCisgICAgRGF0
YWJhc2UoUmVmUHRyPERhdGFiYXNlQ29udGV4dD4mLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgdm9pZCBydW5UcmFu
c2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sCiAgICAgICAgICAgICAgICAgICAgICAgICBQYXNz
UmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5z
YWN0aW9uV3JhcHBlcj4sIGJvb2wgcmVhZE9ubHkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNwcAkocmV2aXNp
b24gMTQwNjU1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZUNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwyMCArNDQsMTEgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jb25zdCBjaGFyKiBEYXRhYmFzZUNvbnRleHQ6OnN1cHBsZW1lbnRO
YW1lKCkKLXsKLSAgICByZXR1cm4gIkRhdGFiYXNlQ29udGV4dCI7Ci19Ci0KLURhdGFiYXNlQ29u
dGV4dCogRGF0YWJhc2VDb250ZXh0OjpleGlzdGluZ0RhdGFiYXNlQ29udGV4dEZyb20oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0
YWJhc2VDb250ZXh0Kj4oU3VwcGxlbWVudDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Pjo6ZnJvbShj
b250ZXh0LCBzdXBwbGVtZW50TmFtZSgpKSk7Ci19Ci0KIERhdGFiYXNlQ29udGV4dDo6RGF0YWJh
c2VDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgOiBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKICAgICAsIG1faGFzT3BlbkRhdGFiYXNlcyhmYWxz
ZSkKIHsKKyAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5yZWdpc3RlckRhdGFiYXNlQ29u
dGV4dCh0aGlzKTsKIH0KIAogRGF0YWJhc2VDb250ZXh0Ojp+RGF0YWJhc2VDb250ZXh0KCkKQEAg
LTY2LDE3ICs1Nyw3IEBAIERhdGFiYXNlQ29udGV4dDo6fkRhdGFiYXNlQ29udGV4dCgpCiAgICAg
ICAgIEFTU0VSVChtX2RhdGFiYXNlVGhyZWFkLT50ZXJtaW5hdGlvblJlcXVlc3RlZCgpKTsKICAg
ICAgICAgbV9kYXRhYmFzZVRocmVhZCA9IDA7CiAgICAgfQotfQotCi1EYXRhYmFzZUNvbnRleHQq
IERhdGFiYXNlQ29udGV4dDo6ZnJvbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQot
ewotICAgIERhdGFiYXNlQ29udGV4dCogc3VwcGxlbWVudCA9IGV4aXN0aW5nRGF0YWJhc2VDb250
ZXh0RnJvbShjb250ZXh0KTsKLSAgICBpZiAoIXN1cHBsZW1lbnQpIHsKLSAgICAgICAgc3VwcGxl
bWVudCA9IG5ldyBEYXRhYmFzZUNvbnRleHQoY29udGV4dCk7Ci0gICAgICAgIHByb3ZpZGVUbyhj
b250ZXh0LCBzdXBwbGVtZW50TmFtZSgpLCBhZG9wdFB0cihzdXBwbGVtZW50KSk7Ci0gICAgICAg
IEFTU0VSVChzdXBwbGVtZW50ID09IGV4aXN0aW5nRGF0YWJhc2VDb250ZXh0RnJvbShjb250ZXh0
KSk7Ci0gICAgfQotICAgIHJldHVybiBzdXBwbGVtZW50OworICAgIERhdGFiYXNlTWFuYWdlcjo6
bWFuYWdlcigpLnVucmVnaXN0ZXJEYXRhYmFzZUNvbnRleHQodGhpcyk7CiB9CiAKIERhdGFiYXNl
VGhyZWFkKiBEYXRhYmFzZUNvbnRleHQ6OmRhdGFiYXNlVGhyZWFkKCkKQEAgLTkyLDI2ICs3Mywx
MyBAQCBEYXRhYmFzZVRocmVhZCogRGF0YWJhc2VDb250ZXh0OjpkYXRhYmFzCiAgICAgcmV0dXJu
IG1fZGF0YWJhc2VUaHJlYWQuZ2V0KCk7CiB9CiAKLWJvb2wgRGF0YWJhc2VDb250ZXh0OjpoYXNP
cGVuRGF0YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCitib29sIERhdGFi
YXNlQ29udGV4dDo6c3RvcERhdGFiYXNlcyhEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNsZWFu
dXBTeW5jKQogewotICAgIC8vIFdlIGRvbid0IHVzZSBEYXRhYmFzZUNvbnRleHQ6OmZyb20gYmVj
YXVzZSB3ZSBkb24ndCB3YW50IHRvIGNhdXNlCi0gICAgLy8gRGF0YWJhc2VDb250ZXh0IHRvIGJl
IGFsbG9jYXRlZCBpZiB3ZSBkb24ndCBoYXZlIG9uZSBhbHJlYWR5LgotICAgIERhdGFiYXNlQ29u
dGV4dCogZGF0YWJhc2VDb250ZXh0ID0gZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGcm9tKGNvbnRl
eHQpOwotICAgIGlmICghZGF0YWJhc2VDb250ZXh0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIGRhdGFiYXNlQ29udGV4dC0+bV9oYXNPcGVuRGF0YWJhc2VzOwotfQotCi12b2lk
IERhdGFiYXNlQ29udGV4dDo6c3RvcERhdGFiYXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNsZWFudXBTeW5jKQotewotICAgIC8v
IFdlIGRvbid0IHVzZSBEYXRhYmFzZUNvbnRleHQ6OmZyb20gYmVjYXVzZSB3ZSBkb24ndCB3YW50
IHRvIGNhdXNlCi0gICAgLy8gRGF0YWJhc2VDb250ZXh0IHRvIGJlIGFsbG9jYXRlZCBpZiB3ZSBk
b24ndCBoYXZlIG9uZSBhbHJlYWR5LgotICAgIERhdGFiYXNlQ29udGV4dCogZGF0YWJhc2VDb250
ZXh0ID0gZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGcm9tKGNvbnRleHQpOwotCi0gICAgaWYgKGRh
dGFiYXNlQ29udGV4dCAmJiBkYXRhYmFzZUNvbnRleHQtPm1fZGF0YWJhc2VUaHJlYWQpCi0gICAg
ICAgIGRhdGFiYXNlQ29udGV4dC0+bV9kYXRhYmFzZVRocmVhZC0+cmVxdWVzdFRlcm1pbmF0aW9u
KGNsZWFudXBTeW5jKTsKLSAgICBlbHNlIGlmIChjbGVhbnVwU3luYykKLSAgICAgICAgY2xlYW51
cFN5bmMtPnRhc2tDb21wbGV0ZWQoKTsKKyAgICBpZiAobV9kYXRhYmFzZVRocmVhZCkgeworICAg
ICAgICBtX2RhdGFiYXNlVGhyZWFkLT5yZXF1ZXN0VGVybWluYXRpb24oY2xlYW51cFN5bmMpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29s
IERhdGFiYXNlQ29udGV4dDo6YWxsb3dEYXRhYmFzZUFjY2VzcygpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0
LmgJKHJldmlzaW9uIDE0MDY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIAog
I2luY2x1ZGUgIkRhdGFiYXNlRGV0YWlscy5oIgogI2luY2x1ZGUgIlN1cHBsZW1lbnRhYmxlLmgi
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC00MCwzMSArNDEsMzAgQEAgY2xhc3MgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyOwogY2xhc3Mg
RGF0YWJhc2VUaHJlYWQ7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCi1jbGFzcyBE
YXRhYmFzZUNvbnRleHQgOiBwdWJsaWMgU3VwcGxlbWVudDxTY3JpcHRFeGVjdXRpb25Db250ZXh0
PiB7CitjbGFzcyBEYXRhYmFzZUNvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxEYXRhYmFzZUNv
bnRleHQ+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5EYXRhYmFzZUNvbnRleHQoKTsKLSAgICBz
dGF0aWMgRGF0YWJhc2VDb250ZXh0KiBmcm9tKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAor
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB7IHJl
dHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7IH0KICAgICBEYXRhYmFzZVRocmVhZCogZGF0
YWJhc2VUaHJlYWQoKTsKIAogICAgIHZvaWQgc2V0SGFzT3BlbkRhdGFiYXNlcygpIHsgbV9oYXNP
cGVuRGF0YWJhc2VzID0gdHJ1ZTsgfQotCi0gICAgc3RhdGljIGJvb2wgaGFzT3BlbkRhdGFiYXNl
cyhTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgYm9vbCBoYXNPcGVuRGF0YWJhc2VzKCkg
eyByZXR1cm4gbV9oYXNPcGVuRGF0YWJhc2VzOyB9CiAKICAgICAvLyBXaGVuIHRoZSBkYXRhYmFz
ZSBjbGVhbnVwIGlzIGRvbmUsIGNsZWFudXBTeW5jIHdpbGwgYmUgc2lnbmFsbGVkLgotICAgIHN0
YXRpYyB2b2lkIHN0b3BEYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIERhdGFiYXNl
VGFza1N5bmNocm9uaXplciopOworICAgIGJvb2wgc3RvcERhdGFiYXNlcyhEYXRhYmFzZVRhc2tT
eW5jaHJvbml6ZXIqKTsKIAogICAgIGJvb2wgYWxsb3dEYXRhYmFzZUFjY2VzcygpIGNvbnN0Owog
ICAgIHZvaWQgZGF0YWJhc2VFeGNlZWRlZFF1b3RhKGNvbnN0IFN0cmluZyYgbmFtZSwgRGF0YWJh
c2VEZXRhaWxzKTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBEYXRhYmFzZUNvbnRleHQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCopOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50
TmFtZSgpOwotICAgIHN0YXRpYyBEYXRhYmFzZUNvbnRleHQqIGV4aXN0aW5nRGF0YWJhc2VDb250
ZXh0RnJvbShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKICAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgUmVmUHRyPERhdGFiYXNlVGhy
ZWFkPiBtX2RhdGFiYXNlVGhyZWFkOwogICAgIGJvb2wgbV9oYXNPcGVuRGF0YWJhc2VzOyAvLyBU
aGlzIG5ldmVyIGNoYW5nZXMgYmFjayB0byBmYWxzZSwgZXZlbiBhZnRlciB0aGUgZGF0YWJhc2Ug
dGhyZWFkIGlzIGNsb3NlZC4KKworICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZU1hbmFnZXI7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAx
NDA2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFu
YWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJEYXRh
YmFzZUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAi
RGF0YWJhc2VTeW5jLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yRGF0YWJhc2VJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgpAQCAtMTIyLDE2ICsxMjMsNTggQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gbV9jcmVhdGlvbkNhbGxiYWNr
OwogfTsKIAorUGFzc1JlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IERhdGFiYXNlTWFuYWdlcjo6Z2V0
RXhpc3RpbmdEYXRhYmFzZUNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9jb250ZXh0TWFwTG9jayk7CisgICAgUmVmUHRy
PERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gYWRvcHRSZWYobV9jb250ZXh0TWFw
LmdldChjb250ZXh0KSk7CisgICAgaWYgKGRhdGFiYXNlQ29udGV4dCkgeworICAgICAgICAvLyBJ
ZiB3ZSdyZSBpbnN0YW50aWF0aW5nIGEgbmV3IERhdGFiYXNlQ29udGV4dCwgdGhlIG5ldyBpbnN0
YW5jZSB3b3VsZAorICAgICAgICAvLyBjYXJyeSBhIG5ldyByZWZDb3VudCBvZiAxLiBUaGUgY2xp
ZW50IGV4cGVjdHMgdGhpcyBhbmQgd2lsbCBzaW1wbHkKKyAgICAgICAgLy8gYWRvcHRSZWYgdGhl
IGRhdGFiYXNlQ29udGV4dCB3aXRob3V0IHJlZidpbmcgaXQuCisgICAgICAgIC8vICAgICBIb3dl
dmVyLCBpbnN0ZWFkIG9mIGluc3RhbnRpYXRpbmcgYSBuZXcgaW5zdGFuY2UsIHdlJ3JlIHJldXNp
bmcKKyAgICAgICAgLy8gYW4gZXhpc3Rpbmcgb25lIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHNw
ZWNpZmllZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorICAgICAgICAvLyBIZW5jZSwgdGhhdCBu
ZXcgcmVmQ291bnQgbmVlZCB0byBiZSBhdHRyaWJ1dGVkIHRvIHRoZSByZXVzZWQgaW5zdGFuY2UK
KyAgICAgICAgLy8gdG8gZW5zdXJlIHRoYXQgdGhlIHJlZkNvdW50IGlzIGFjY3VyYXRlIHdoZW4g
dGhlIGNsaWVudCBhZG9wdHMgdGhlIHJlZi4KKyAgICAgICAgLy8gV2UgZG8gdGhpcyBieSByZWYn
aW5nIHRoZSByZXVzZWQgZGF0YWJhc2VDb250ZXh0IGJlZm9yZSByZXR1cm5pbmcgaXQuCisgICAg
ICAgIGRhdGFiYXNlQ29udGV4dC0+cmVmKCk7CisgICAgfQorICAgIHJldHVybiBkYXRhYmFzZUNv
bnRleHQucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gRGF0YWJh
c2VNYW5hZ2VyOjpnZXREYXRhYmFzZUNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCkKK3sKKyAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQgPSBn
ZXRFeGlzdGluZ0RhdGFiYXNlQ29udGV4dChjb250ZXh0KTsKKyAgICBpZiAoIWRhdGFiYXNlQ29u
dGV4dCkKKyAgICAgICAgZGF0YWJhc2VDb250ZXh0ID0gYWRvcHRSZWYobmV3IERhdGFiYXNlQ29u
dGV4dChjb250ZXh0KSk7CisgICAgcmV0dXJuIGRhdGFiYXNlQ29udGV4dC5yZWxlYXNlKCk7Cit9
CisKK3ZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpyZWdpc3RlckRhdGFiYXNlQ29udGV4dChEYXRhYmFz
ZUNvbnRleHQqIGRhdGFiYXNlQ29udGV4dCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9j
b250ZXh0TWFwTG9jayk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGRh
dGFiYXNlQ29udGV4dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIG1fY29udGV4dE1h
cC5zZXQoY29udGV4dCwgZGF0YWJhc2VDb250ZXh0KTsKK30KKwordm9pZCBEYXRhYmFzZU1hbmFn
ZXI6OnVucmVnaXN0ZXJEYXRhYmFzZUNvbnRleHQoRGF0YWJhc2VDb250ZXh0KiBkYXRhYmFzZUNv
bnRleHQpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fY29udGV4dE1hcExvY2spOworICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBkYXRhYmFzZUNvbnRleHQtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHQpOwor
fQorCiBQYXNzUmVmUHRyPERhdGFiYXNlPiBEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAogICAgIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
CiAgICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2Fs
bGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGUpCiB7CisgICAgUmVmUHRy
PERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gZ2V0RGF0YWJhc2VDb250ZXh0KGNv
bnRleHQpOworCiAgICAgaWYgKCFjYW5Fc3RhYmxpc2hEYXRhYmFzZShjb250ZXh0LCBuYW1lLCBk
aXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpIHsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJE
YXRhYmFzZSAlcyBmb3Igb3JpZ2luICVzIG5vdCBhbGxvd2VkIHRvIGJlIGVzdGFibGlzaGVkIiwg
bmFtZS5hc2NpaSgpLmRhdGEoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmco
KS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFJlZlB0
cjxEYXRhYmFzZT4gZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2UoY29udGV4dCwgbmFt
ZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOworICAgIFJl
ZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2UoZGF0YWJhc2VD
b250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXpl
KSk7CiAKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwogICAgIGlmICghZGF0YWJhc2UtPm9wZW5B
bmRWZXJpZnlWZXJzaW9uKCFjcmVhdGlvbkNhbGxiYWNrLCBlLCBlcnJvck1lc3NhZ2UpKSB7CkBA
IC0xNDEsNyArMTg0LDcgQEAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0YWJhc2VNYW5hZ2VyOjpv
cAogICAgIH0KIAogICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLnNldERhdGFiYXNlRGV0
YWlscyhjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSk7Ci0gICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuc2V0SGFzT3BlbkRhdGFi
YXNlcyhjb250ZXh0KTsKKyAgICBkYXRhYmFzZUNvbnRleHQtPnNldEhhc09wZW5EYXRhYmFzZXMo
KTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlKGNvbnRl
eHQsIGRhdGFiYXNlLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5ob3N0KCksIG5hbWUsIGV4
cGVjdGVkVmVyc2lvbik7CiAKQEAgLTE1MCwxMyArMTkzLDE0IEBAIFBhc3NSZWZQdHI8RGF0YWJh
c2U+IERhdGFiYXNlTWFuYWdlcjo6b3AKICAgICAgICAgZGF0YWJhc2UtPm1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+cG9zdFRhc2soRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzazo6Y3JlYXRl
KGRhdGFiYXNlLCBjcmVhdGlvbkNhbGxiYWNrKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGRhdGFi
YXNlOworICAgIHJldHVybiBkYXRhYmFzZS5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8RGF0
YWJhc2VTeW5jPiBEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwKICAgICBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLAogICAgIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVh
dGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBSZWZQdHI8RGF0YWJhc2VD
b250ZXh0PiBkYXRhYmFzZUNvbnRleHQgPSBnZXREYXRhYmFzZUNvbnRleHQoY29udGV4dCk7CiAg
ICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKIAogICAgIGlmICghY2FuRXN0
YWJsaXNoRGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUp
KSB7CkBAIC0xNjQsNyArMjA4LDcgQEAgUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IERhdGFiYXNl
TWFuYWdlcgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8RGF0YWJhc2VT
eW5jPiBkYXRhYmFzZSA9IGFkb3B0UmVmKG5ldyBEYXRhYmFzZVN5bmMoY29udGV4dCwgbmFtZSwg
ZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOworICAgIFJlZlB0
cjxEYXRhYmFzZVN5bmM+IGRhdGFiYXNlID0gYWRvcHRSZWYobmV3IERhdGFiYXNlU3luYyhkYXRh
YmFzZUNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRl
ZFNpemUpKTsKIAogICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CiAgICAgaWYgKCFkYXRhYmFzZS0+
cGVyZm9ybU9wZW5BbmRWZXJpZnkoIWNyZWF0aW9uQ2FsbGJhY2ssIGVjLCBlcnJvck1lc3NhZ2Up
KSB7CkBAIC0xODAsMjIgKzIyNCwyMyBAQCBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gRGF0YWJh
c2VNYW5hZ2VyCiAgICAgICAgIGNyZWF0aW9uQ2FsbGJhY2stPmhhbmRsZUV2ZW50KGRhdGFiYXNl
LmdldCgpKTsKICAgICB9CiAKLSAgICByZXR1cm4gZGF0YWJhc2U7CisgICAgcmV0dXJuIGRhdGFi
YXNlLnJlbGVhc2UoKTsKIH0KIAogYm9vbCBEYXRhYmFzZU1hbmFnZXI6Omhhc09wZW5EYXRhYmFz
ZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKLSAgICByZXR1cm4gRGF0YWJh
c2VDb250ZXh0OjpoYXNPcGVuRGF0YWJhc2VzKGNvbnRleHQpOwotfQotCi12b2lkIERhdGFiYXNl
TWFuYWdlcjo6c2V0SGFzT3BlbkRhdGFiYXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KQotewotICAgIERhdGFiYXNlQ29udGV4dDo6ZnJvbShjb250ZXh0KS0+c2V0SGFzT3BlbkRh
dGFiYXNlcygpOworICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9
IGdldEV4aXN0aW5nRGF0YWJhc2VDb250ZXh0KGNvbnRleHQpOworICAgIGlmICghZGF0YWJhc2VD
b250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGRhdGFiYXNlQ29udGV4
dC0+bV9oYXNPcGVuRGF0YWJhc2VzOwogfQogCiB2b2lkIERhdGFiYXNlTWFuYWdlcjo6c3RvcERh
dGFiYXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBEYXRhYmFzZVRhc2tTeW5j
aHJvbml6ZXIqIHN5bmNocm9uaXplcikKIHsKLSAgICBEYXRhYmFzZUNvbnRleHQ6OnN0b3BEYXRh
YmFzZXMoY29udGV4dCwgc3luY2hyb25pemVyKTsKKyAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0
PiBkYXRhYmFzZUNvbnRleHQgPSBnZXRFeGlzdGluZ0RhdGFiYXNlQ29udGV4dChjb250ZXh0KTsK
KyAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCB8fCAhZGF0YWJhc2VDb250ZXh0LT5zdG9wRGF0YWJh
c2VzKHN5bmNocm9uaXplcikpCisgICAgICAgIGlmIChzeW5jaHJvbml6ZXIpCisgICAgICAgICAg
ICBzeW5jaHJvbml6ZXItPnRhc2tDb21wbGV0ZWQoKTsKIH0KIAogU3RyaW5nIERhdGFiYXNlTWFu
YWdlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3QpCkBAIC0yNzIsOSArMzE3LDEx
IEBAIHZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpjbG9zZURhdGFiYXNlc0ltbWUKIH0KICNlbmRpZiAv
LyBQTEFURk9STShDSFJPTUlVTSkKIAotdm9pZCBEYXRhYmFzZU1hbmFnZXI6OmludGVycnVwdEFs
bERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3QgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkKK3ZvaWQgRGF0YWJhc2VNYW5hZ2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgbV9zZXJ2ZXItPmludGVy
cnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29udGV4dCk7CisgICAgUmVmUHRyPERhdGFiYXNl
Q29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gZ2V0RXhpc3RpbmdEYXRhYmFzZUNvbnRleHQoY29u
dGV4dCk7CisgICAgaWYgKGRhdGFiYXNlQ29udGV4dCkKKyAgICAgICAgbV9zZXJ2ZXItPmludGVy
cnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29udGV4dCk7CiB9CiAKIGJvb2wgRGF0YWJhc2VN
YW5hZ2VyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuaAkocmV2aXNpb24gMTQwNjU1KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMTMgKzMwLDE2IEBACiAKICNpbmNsdWRlICJBYnN0cmFjdERh
dGFiYXNlU2VydmVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VCYXNpY1R5cGVzLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBYnN0cmFj
dERhdGFiYXNlU2VydmVyOwogY2xhc3MgRGF0YWJhc2U7CiBjbGFzcyBEYXRhYmFzZUNhbGxiYWNr
OworY2xhc3MgRGF0YWJhc2VDb250ZXh0OwogY2xhc3MgRGF0YWJhc2VNYW5hZ2VyQ2xpZW50Owog
Y2xhc3MgRGF0YWJhc2VTeW5jOwogY2xhc3MgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyOwpAQCAt
NTYsMTEgKzU5LDIzIEBAIHB1YmxpYzoKICAgICBib29sIGlzQXZhaWxhYmxlKCk7CiAgICAgdm9p
ZCBzZXRJc0F2YWlsYWJsZShib29sKTsKIAorICAgIC8vIFRoaXMgZ2V0cyBhIERhdGFiYXNlQ29u
dGV4dCBmb3IgdGhlIHNwZWNpZmllZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0IGlmCisgICAgLy8g
aXQgYWxyZWFkeSBleGlzdCBwcmV2aW91c2x5LiBPdGhlcndpc2UsIGl0IHJldHVybnMgMC4KKyAg
ICBQYXNzUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZ2V0RXhpc3RpbmdEYXRhYmFzZUNvbnRleHQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworCisgICAgLy8gVGhpcyBnZXRzIGEgRGF0YWJhc2VD
b250ZXh0IGZvciB0aGUgc3BlY2lmaWVkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAgLy8g
SWYgb25lIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCwgaXQgd2lsbCBjcmVhdGUgYSBuZXcgb25lLgor
ICAgIFBhc3NSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBnZXREYXRhYmFzZUNvbnRleHQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCopOworCisgICAgLy8gVGhlc2UgMiBtZXRob2RzIGFyZSBmb3IgRGF0
YWJhc2VDb250ZXh0ICh1bilyZWdpc3RyYXRpb24sIGFuZCBzaG91bGQgb25seQorICAgIC8vIGJl
IGNhbGxlZCBieSB0aGUgRGF0YWJhc2VDb250ZXh0IGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9y
LgorICAgIHZvaWQgcmVnaXN0ZXJEYXRhYmFzZUNvbnRleHQoRGF0YWJhc2VDb250ZXh0Kik7Cisg
ICAgdm9pZCB1bnJlZ2lzdGVyRGF0YWJhc2VDb250ZXh0KERhdGFiYXNlQ29udGV4dCopOworCiAg
ICAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gb3BlbkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBj
b25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBh
c3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVm
UHRyPERhdGFiYXNlU3luYz4gb3BlbkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNz
UmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBib29sIGhh
c09wZW5EYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotICAgIHZvaWQgc2V0SGFz
T3BlbkRhdGFiYXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAgICAgdm9pZCBzdG9wRGF0
YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIq
KTsKIAogICAgIFN0cmluZyBmdWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0ID0gdHJ1ZSk7CkBAIC04
OSw3ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbG9zZURhdGFiYXNlc0ltbWVkaWF0ZWx5
KGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICNl
bmRpZiAvLyBQTEFURk9STShDSFJPTUlVTSkKIAotICAgIHZvaWQgaW50ZXJydXB0QWxsRGF0YWJh
c2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgdm9pZCBp
bnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsK
IAogICAgIGJvb2wgY2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQg
bG9uZyBlc3RpbWF0ZWRTaXplKTsKICAgICB2b2lkIGFkZE9wZW5EYXRhYmFzZShBYnN0cmFjdERh
dGFiYXNlKik7CkBAIC0xMDIsNiArMTE3LDEwIEBAIHByaXZhdGU6CiAgICAgRGF0YWJhc2VNYW5h
Z2VyKCk7CiAgICAgfkRhdGFiYXNlTWFuYWdlcigpIHsgfQogCisgICAgdHlwZWRlZiBIYXNoTWFw
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBEYXRhYmFzZUNvbnRleHQqLCBQdHJIYXNoPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqPiA+IENvbnRleHRNYXA7CisgICAgQ29udGV4dE1hcCBtX2NvbnRl
eHRNYXA7CisgICAgTXV0ZXggbV9jb250ZXh0TWFwTG9jazsKKwogICAgIEFic3RyYWN0RGF0YWJh
c2VTZXJ2ZXIqIG1fc2VydmVyOwogICAgIERhdGFiYXNlTWFuYWdlckNsaWVudCogbV9jbGllbnQ7
CiAgICAgYm9vbCBtX2RhdGFiYXNlSXNBdmFpbGFibGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwCShyZXZpc2lvbiAx
NDA2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3lu
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1EYXRhYmFzZVN5bmM6OkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJz
aW9uLAorRGF0YWJhc2VTeW5jOjpEYXRhYmFzZVN5bmMoUmVmUHRyPERhdGFiYXNlQ29udGV4dD4m
IGRhdGFiYXNlQ29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVj
dGVkVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKLSAgICA6IEFic3RyYWN0RGF0
YWJhc2UoY29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSwgU3luY0RhdGFiYXNlKQorICAgIDogQWJzdHJhY3REYXRhYmFzZShkYXRhYmFzZUNv
bnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUs
IFN5bmNEYXRhYmFzZSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5oCShyZXZpc2lvbiAxNDA2NTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw3ICs0Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERhdGFiYXNl
Q2FsbGJhY2s7CiBjbGFzcyBTUUxUcmFuc2FjdGlvblN5bmM7CiBjbGFzcyBTUUxUcmFuc2FjdGlv
blN5bmNDYWxsYmFjazsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTZWN1
cml0eU9yaWdpbjsKIAogLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGNyZWF0
ZWQgYW5kIHVzZWQgb25seSBvbiB0aGUgd29ya2VyJ3MgY29udGV4dCB0aHJlYWQuCkBAIC03NCw3
ICs3Myw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VTeW5jKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
ZXhwZWN0ZWRWZXJzaW9uLAorICAgIERhdGFiYXNlU3luYyhSZWZQdHI8RGF0YWJhc2VDb250ZXh0
PiYsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCiAg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcg
ZXN0aW1hdGVkU2l6ZSk7CiAgICAgdm9pZCBydW5UcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRy
YW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25seSwgRXhjZXB0aW9uQ29kZSYpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVRyYWNrZXIuY3BwCShyZXZpc2lvbiAxNDA2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGll
bnQuaCIKICNpbmNsdWRlICJEYXRhYmFzZUNvbnRleHQuaCIKKyNpbmNsdWRlICJEYXRhYmFzZU1h
bmFnZXIuaCIKICNpbmNsdWRlICJEYXRhYmFzZU1hbmFnZXJDbGllbnQuaCIKICNpbmNsdWRlICJE
YXRhYmFzZVRocmVhZC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTE2Nyw3ICsxNjgsOSBA
QCBib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhCiAKICAgICAvLyBHaXZl
IHRoZSBjaHJvbWUgY2xpZW50IGEgY2hhbmNlIHRvIGluY3JlYXNlIHRoZSBxdW90YS4KICAgICAv
LyBEcm9wIGFsbCBsb2NrcyBiZWZvcmUgY2FsbGluZyBvdXQ7IHdlIGRvbid0IGtub3cgd2hhdCB0
aGV5J2xsIGRvLgotICAgIERhdGFiYXNlQ29udGV4dDo6ZnJvbShjb250ZXh0KS0+ZGF0YWJhc2VF
eGNlZWRlZFF1b3RhKG5hbWUsIERhdGFiYXNlRGV0YWlscyhuYW1lLmlzb2xhdGVkQ29weSgpLCBk
aXNwbGF5TmFtZS5pc29sYXRlZENvcHkoKSwgZXN0aW1hdGVkU2l6ZSwgMCkpOworICAgIERhdGFi
YXNlTWFuYWdlciYgbWFuYWdlciA9IERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpOworICAgIFJl
ZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9IG1hbmFnZXIuZ2V0RGF0YWJh
c2VDb250ZXh0KGNvbnRleHQpOworICAgIGRhdGFiYXNlQ29udGV4dC0+ZGF0YWJhc2VFeGNlZWRl
ZFF1b3RhKG5hbWUsIERhdGFiYXNlRGV0YWlscyhuYW1lLmlzb2xhdGVkQ29weSgpLCBkaXNwbGF5
TmFtZS5pc29sYXRlZENvcHkoKSwgZXN0aW1hdGVkU2l6ZSwgMCkpOwogCiAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CiAK
</data>
<flag name="commit-queue"
          id="203197"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184687</attachid>
            <date>2013-01-25 00:27:10 -0800</date>
            <delta_ts>2013-01-28 21:56:15 -0800</delta_ts>
            <desc>The final patch.</desc>
            <filename>bug-107784.patch</filename>
            <type>text/plain</type>
            <size>28203</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MDc5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDEzLTAxLTI1ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgRGF0YWJhc2VDb250ZXh0
IGxvb2t1cCB0byBiZSB0aHJlYWQtc2FmZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwNzc4NC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBEYXRhYmFzZUNvbnRleHQgd2lsbCBubyBsb25nZXIgYmUgYSBT
dXBwbGVtZW50IG9mIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAgICAgIEluc3RlYWQgd2Ug
d2lsbCBtYWludGFpbiBhIG11dGV4IGd1YXJkZWQgY29udGV4dE1hcCBpbiB0aGUgRGF0YWJhc2VN
YW5hZ2VyCisgICAgICAgIHdoaWNoIG1hcHMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dHMgdG8gRGF0
YWJhc2VDb250ZXh0cy4KKworICAgICAgICBBbHNvIGNsZWFuZWQgdXAgdGhlIHNodXRkb3duIG1l
Y2hhbmlzbSBvZiB0aGUgRGF0YWJhc2VDb250ZXh0LAorICAgICAgICBEYXRhYmFzZVRocmVhZCwg
YW5kIERhdGFiYXNlcyB3aGVuIHRoZWlyIG93bmVyIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKKyAg
ICAgICAgZGVzdHJ1Y3RzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIE1v
ZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBYnN0cmFjdERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U6OmRhdGFiYXNlQ29udGV4dCk6CisgICAgICAgIChBYnN0cmFjdERhdGFiYXNl
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEYXRhYmFzZSk6
CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNvbnRleHQ6OkRhdGFi
YXNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNvbnRleHQ6On5EYXRhYmFz
ZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDb250ZXh0Ojpjb250ZXh0RGVz
dHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQ29udGV4dDo6c3RvcERhdGFiYXNl
cyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuaDoKKyAg
ICAgICAgKERhdGFiYXNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNvbnRl
eHQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VD
b250ZXh0OjpoYXNPcGVuRGF0YWJhc2VzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6
OmdldEV4aXN0aW5nRGF0YWJhc2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpnZXREYXRhYmFzZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpyZWdpc3RlckRhdGFiYXNlQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OnVucmVnaXN0ZXJEYXRhYmFzZUNvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpvcGVuRGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpvcGVuRGF0YWJhc2VTeW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6aGFzT3BlbkRhdGFiYXNlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OnN0b3BEYXRhYmFzZXMpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEYXRhYmFzZU1hbmFnZXIpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlU3luYzo6RGF0YWJhc2VTeW5jKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlU3luYy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEYXRhYmFzZVN5
bmMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6On5EYXRhYmFzZVRocmVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6cmVxdWVzdFRlcm1pbmF0aW9uKToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKToKKwogMjAxMy0w
MS0yNCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSU5QVVRf
TVVMVElQTEVfRklFTERTX1VJOiBSZWZhY3RvcmluZzogUmVtb3ZlIHVudXNlZCBEYXRlVGltZUhv
dXJGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAJKHJldmlz
aW9uIDE0MDc5MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJh
Y3REYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwxMCArMTc0LDEwIEBAIGNvbnN0
IGNoYXIqIEFic3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNlSW4KICAgICByZXR1cm4gaW5mb1RhYmxl
TmFtZTsKIH0KIAotQWJzdHJhY3REYXRhYmFzZTo6QWJzdHJhY3REYXRhYmFzZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
ZXhwZWN0ZWRWZXJzaW9uLAorQWJzdHJhY3REYXRhYmFzZTo6QWJzdHJhY3REYXRhYmFzZShSZWZQ
dHI8RGF0YWJhc2VDb250ZXh0PiYgZGF0YWJhc2VDb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGlt
YXRlZFNpemUsIERhdGFiYXNlVHlwZSBkYXRhYmFzZVR5cGUpCi0gICAgOiBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoY29udGV4dCkKLSAgICAsIG1fZGF0YWJhc2VDb250ZXh0KERhdGFiYXNlQ29u
dGV4dDo6ZnJvbShjb250ZXh0KSkKKyAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChkYXRh
YmFzZUNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1fZGF0YWJhc2VD
b250ZXh0KGRhdGFiYXNlQ29udGV4dCkKICAgICAsIG1fbmFtZShuYW1lLmlzb2xhdGVkQ29weSgp
KQogICAgICwgbV9leHBlY3RlZFZlcnNpb24oZXhwZWN0ZWRWZXJzaW9uLmlzb2xhdGVkQ29weSgp
KQogICAgICwgbV9kaXNwbGF5TmFtZShkaXNwbGF5TmFtZS5pc29sYXRlZENvcHkoKSkKQEAgLTE4
Nyw3ICsxODcsNyBAQCBBYnN0cmFjdERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKFNjcmlwCiAg
ICAgLCBtX25ldyhmYWxzZSkKICAgICAsIG1faXNTeW5jRGF0YWJhc2UoZGF0YWJhc2VUeXBlID09
IFN5bmNEYXRhYmFzZSkKIHsKLSAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkp
OworICAgIEFTU0VSVChkYXRhYmFzZUNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luID0g
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0eU9yaWdpbigpOwogCiAgICAgbV9kYXRh
YmFzZUF1dGhvcml6ZXIgPSBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZShpbmZvVGFibGVOYW1l
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRh
YmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
QWJzdHJhY3REYXRhYmFzZS5oCShyZXZpc2lvbiAxNDA3OTApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRhdGFiYXNlRGV0YWlscy5oIgogI2luY2x1ZGUgIlNR
TGl0ZURhdGFiYXNlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTg2LDcgKzg3LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBtYXJrQXNEZWxldGVkQW5kQ2xvc2UoKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGNsb3NlSW1tZWRpYXRlbHkoKSA9IDA7CiAKLSAgICBEYXRhYmFzZUNvbnRleHQqIGRhdGFi
YXNlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VDb250ZXh0OyB9CisgICAgRGF0
YWJhc2VDb250ZXh0KiBkYXRhYmFzZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNl
Q29udGV4dC5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIENoYW5nZVZl
cnNpb25XcmFwcGVyOwpAQCAtMTAwLDcgKzEwMSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgU3lu
Y0RhdGFiYXNlCiAgICAgfTsKIAotICAgIEFic3RyYWN0RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNp
b24sCisgICAgQWJzdHJhY3REYXRhYmFzZShSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiYsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCiAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGlt
YXRlZFNpemUsIERhdGFiYXNlVHlwZSk7CiAKICAgICB2b2lkIGNsb3NlRGF0YWJhc2UoKTsKQEAg
LTEyOCw3ICsxMjksNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luOwogICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRp
b25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgRGF0YWJhc2VDb250ZXh0
KiBtX2RhdGFiYXNlQ29udGV4dDsgLy8gT3duZWQgYnkgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LgorICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IG1fZGF0YWJhc2VDb250ZXh0OyAvLyBBc3Nv
Y2lhdGVkIHdpdGggbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LgogCiAgICAgU3RyaW5nIG1fbmFt
ZTsKICAgICBTdHJpbmcgbV9leHBlY3RlZFZlcnNpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gMTQwNzkwKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDggKzY1LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EYXRh
YmFzZTo6RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBk
aXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQotICAgIDogQWJzdHJhY3RE
YXRhYmFzZShjb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3Rp
bWF0ZWRTaXplLCBBc3luY0RhdGFiYXNlKQorRGF0YWJhc2U6OkRhdGFiYXNlKFJlZlB0cjxEYXRh
YmFzZUNvbnRleHQ+JiBkYXRhYmFzZUNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKKyAgICA6IEFic3RyYWN0RGF0YWJhc2UoZGF0YWJhc2VD
b250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXpl
LCBBc3luY0RhdGFiYXNlKQogICAgICwgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MoZmFsc2UpCiAg
ICAgLCBtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQodHJ1ZSkKICAgICAsIG1fZGVsZXRlZChm
YWxzZSkKQEAgLTc0LDcgKzc0LDcgQEAgRGF0YWJhc2U6OkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleAogICAgIG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbiA9IG1fY29udGV4dFRo
cmVhZFNlY3VyaXR5T3JpZ2luLT5pc29sYXRlZENvcHkoKTsKIAogICAgIFNjcmlwdENvbnRyb2xs
ZXI6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLSAgICBBU1NFUlQoZGF0YWJhc2VDb250ZXh0KCkt
PmRhdGFiYXNlVGhyZWFkKCkpOworICAgIEFTU0VSVChkYXRhYmFzZUNvbnRleHQtPmRhdGFiYXNl
VGhyZWFkKCkpOwogfQogCiBjbGFzcyBEZXJlZkNvbnRleHRUYXNrIDogcHVibGljIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2UuaAkocmV2aXNpb24gMTQwNzkwKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2s7
Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBj
bGFzcyBTUUxUcmFuc2FjdGlvbjsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s7CkBAIC04
Nyw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2s7
CiAgICAgY2xhc3MgRGF0YWJhc2VUYWJsZU5hbWVzVGFzazsKIAotICAgIERhdGFiYXNlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhw
ZWN0ZWRWZXJzaW9uLAorICAgIERhdGFiYXNlKFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+JiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAgICAgICAg
ICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNp
emUpOwogICAgIHZvaWQgcnVuVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNh
bGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LAogICAgICAg
ICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFj
aywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+LCBib29sIHJlYWRPbmx5KTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlQ29udGV4dC5jcHAJKHJldmlzaW9uIDE0MDc5MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
MzkgKzQ0LDM3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgY2hhciogRGF0YWJh
c2VDb250ZXh0OjpzdXBwbGVtZW50TmFtZSgpCi17Ci0gICAgcmV0dXJuICJEYXRhYmFzZUNvbnRl
eHQiOwotfQotCi1EYXRhYmFzZUNvbnRleHQqIERhdGFiYXNlQ29udGV4dDo6ZXhpc3RpbmdEYXRh
YmFzZUNvbnRleHRGcm9tKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi17Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PERhdGFiYXNlQ29udGV4dCo+KFN1cHBsZW1lbnQ8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dD46OmZyb20oY29udGV4dCwgc3VwcGxlbWVudE5hbWUoKSkpOwotfQotCiBE
YXRhYmFzZUNvbnRleHQ6OkRhdGFiYXNlQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0KQotICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCisgICAgOiBD
b250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcihjb250ZXh0KQorICAgICwgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2hhc09wZW5EYXRhYmFzZXMoZmFsc2UpCiB7Cisg
ICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkucmVnaXN0ZXJEYXRhYmFzZUNvbnRleHQodGhp
cyk7CiB9CiAKIERhdGFiYXNlQ29udGV4dDo6fkRhdGFiYXNlQ29udGV4dCgpCiB7CisgICAgRGF0
YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkudW5yZWdpc3RlckRhdGFiYXNlQ29udGV4dCh0aGlzKTsK
ICAgICBpZiAobV9kYXRhYmFzZVRocmVhZCkgewotICAgICAgICBBU1NFUlQobV9kYXRhYmFzZVRo
cmVhZC0+dGVybWluYXRpb25SZXF1ZXN0ZWQoKSk7CisgICAgICAgIGlmICghbV9kYXRhYmFzZVRo
cmVhZC0+dGVybWluYXRpb25SZXF1ZXN0ZWQoKSkgeworICAgICAgICAgICAgLy8gVGhlIG9ubHkg
d2F5IHdlIGNhbiByZWFjaCB0aGlzIERhdGFiYXNlQ29udGV4dCBkZXN0cnVjdG9yIGlzIGlmCisg
ICAgICAgICAgICAvLyBhbGwgZGF0YWJhc2VzIHJlZmVyZW5jaW5nIGl0IGhhdmUgZGV0YWNoZWQu
IFRoYXQgYWxzbyBtZWFucyB0aGF0CisgICAgICAgICAgICAvLyB0aGUgRGF0YWJhc2VUaHJlYWQg
bm8gbG9uZ2VyIGhhcyBhbnkgd29yayB0byBkbyBhbmQgaXMgbm8gbG9uZ2VyCisgICAgICAgICAg
ICAvLyByZWZlcmVuY2luZyBhbnkgRGF0YWJhc2VUYXNrcy4gV2UgY2FuIGp1c3QgZ28gYWhlYWQg
YW5kIHRlbGwgaXQKKyAgICAgICAgICAgIC8vIHRvIHRlcm1pbmF0ZSBpdHNlbGYuCisgICAgICAg
ICAgICBtX2RhdGFiYXNlVGhyZWFkLT5yZXF1ZXN0VGVybWluYXRpb24oMCk7CisgICAgICAgIH0K
ICAgICAgICAgbV9kYXRhYmFzZVRocmVhZCA9IDA7CiAgICAgfQogfQogCi1EYXRhYmFzZUNvbnRl
eHQqIERhdGFiYXNlQ29udGV4dDo6ZnJvbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
KQordm9pZCBEYXRhYmFzZUNvbnRleHQ6OmNvbnRleHREZXN0cm95ZWQoKQogewotICAgIERhdGFi
YXNlQ29udGV4dCogc3VwcGxlbWVudCA9IGV4aXN0aW5nRGF0YWJhc2VDb250ZXh0RnJvbShjb250
ZXh0KTsKLSAgICBpZiAoIXN1cHBsZW1lbnQpIHsKLSAgICAgICAgc3VwcGxlbWVudCA9IG5ldyBE
YXRhYmFzZUNvbnRleHQoY29udGV4dCk7Ci0gICAgICAgIHByb3ZpZGVUbyhjb250ZXh0LCBzdXBw
bGVtZW50TmFtZSgpLCBhZG9wdFB0cihzdXBwbGVtZW50KSk7Ci0gICAgICAgIEFTU0VSVChzdXBw
bGVtZW50ID09IGV4aXN0aW5nRGF0YWJhc2VDb250ZXh0RnJvbShjb250ZXh0KSk7Ci0gICAgfQot
ICAgIHJldHVybiBzdXBwbGVtZW50OworICAgIC8vIElmIHRoZSBEYXRhYmFzZVRocmVhZCBhbmQg
RGF0YWJhc2VzIHVuZGVyIHRoZSBtYW5hZ2VtZW50IG9mIHRoaXMKKyAgICAvLyBEYXRhYmFzZUNv
bnRleHQgaGFzIG5vdCB5ZXQgYmVlbiBjbGVhbmVkIHVwLCB0aGUgZGVzdHJ1Y3RvciB3aWxsCisg
ICAgLy8gdGFrZSBjYXJlIG9mIGZpcmluZyBvZmYgdGhlaXIgY2xlYW51cC4gU28sIGp1c3QgZGVs
ZXRlIHNlbGYuCisgICAgLy8gVGhlIHJlc3QgaXMgYXV0b21hdGljLgorICAgIGRlbGV0ZSB0aGlz
OwogfQogCiBEYXRhYmFzZVRocmVhZCogRGF0YWJhc2VDb250ZXh0OjpkYXRhYmFzZVRocmVhZCgp
CkBAIC05MiwyNiArOTAsMTMgQEAgRGF0YWJhc2VUaHJlYWQqIERhdGFiYXNlQ29udGV4dDo6ZGF0
YWJhcwogICAgIHJldHVybiBtX2RhdGFiYXNlVGhyZWFkLmdldCgpOwogfQogCi1ib29sIERhdGFi
YXNlQ29udGV4dDo6aGFzT3BlbkRhdGFiYXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KQorYm9vbCBEYXRhYmFzZUNvbnRleHQ6OnN0b3BEYXRhYmFzZXMoRGF0YWJhc2VUYXNrU3lu
Y2hyb25pemVyKiBjbGVhbnVwU3luYykKIHsKLSAgICAvLyBXZSBkb24ndCB1c2UgRGF0YWJhc2VD
b250ZXh0Ojpmcm9tIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBjYXVzZQotICAgIC8vIERhdGFi
YXNlQ29udGV4dCB0byBiZSBhbGxvY2F0ZWQgaWYgd2UgZG9uJ3QgaGF2ZSBvbmUgYWxyZWFkeS4K
LSAgICBEYXRhYmFzZUNvbnRleHQqIGRhdGFiYXNlQ29udGV4dCA9IGV4aXN0aW5nRGF0YWJhc2VD
b250ZXh0RnJvbShjb250ZXh0KTsKLSAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBkYXRhYmFzZUNvbnRleHQtPm1faGFzT3BlbkRhdGFi
YXNlczsKLX0KLQotdm9pZCBEYXRhYmFzZUNvbnRleHQ6OnN0b3BEYXRhYmFzZXMoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBjbGVhbnVw
U3luYykKLXsKLSAgICAvLyBXZSBkb24ndCB1c2UgRGF0YWJhc2VDb250ZXh0Ojpmcm9tIGJlY2F1
c2Ugd2UgZG9uJ3Qgd2FudCB0byBjYXVzZQotICAgIC8vIERhdGFiYXNlQ29udGV4dCB0byBiZSBh
bGxvY2F0ZWQgaWYgd2UgZG9uJ3QgaGF2ZSBvbmUgYWxyZWFkeS4KLSAgICBEYXRhYmFzZUNvbnRl
eHQqIGRhdGFiYXNlQ29udGV4dCA9IGV4aXN0aW5nRGF0YWJhc2VDb250ZXh0RnJvbShjb250ZXh0
KTsKLQotICAgIGlmIChkYXRhYmFzZUNvbnRleHQgJiYgZGF0YWJhc2VDb250ZXh0LT5tX2RhdGFi
YXNlVGhyZWFkKQotICAgICAgICBkYXRhYmFzZUNvbnRleHQtPm1fZGF0YWJhc2VUaHJlYWQtPnJl
cXVlc3RUZXJtaW5hdGlvbihjbGVhbnVwU3luYyk7Ci0gICAgZWxzZSBpZiAoY2xlYW51cFN5bmMp
Ci0gICAgICAgIGNsZWFudXBTeW5jLT50YXNrQ29tcGxldGVkKCk7CisgICAgaWYgKG1fZGF0YWJh
c2VUaHJlYWQpIHsKKyAgICAgICAgbV9kYXRhYmFzZVRocmVhZC0+cmVxdWVzdFRlcm1pbmF0aW9u
KGNsZWFudXBTeW5jKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKIH0KIAogYm9vbCBEYXRhYmFzZUNvbnRleHQ6OmFsbG93RGF0YWJhc2VBY2Nlc3MoKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlQ29udGV4dC5oCShyZXZpc2lvbiAxNDA3OTApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw4ICszMCwxMCBAQAogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkNv
bnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgi
CiAjaW5jbHVkZSAiU3VwcGxlbWVudGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDMxICs0MiwzMSBAQCBjbGFzcyBEYXRh
YmFzZVRhc2tTeW5jaHJvbml6ZXI7CiBjbGFzcyBEYXRhYmFzZVRocmVhZDsKIGNsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CiAKLWNsYXNzIERhdGFiYXNlQ29udGV4dCA6IHB1YmxpYyBTdXBw
bGVtZW50PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHsKK2NsYXNzIERhdGFiYXNlQ29udGV4dCA6
IHB1YmxpYyBSZWZDb3VudGVkPERhdGFiYXNlQ29udGV4dD4sIENvbnRleHREZXN0cnVjdGlvbk9i
c2VydmVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5EYXRhYmFzZUNvbnRleHQoKTsKLSAgICBz
dGF0aWMgRGF0YWJhc2VDb250ZXh0KiBmcm9tKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY29udGV4dERlc3Ryb3llZCgpOyAvLyBPYnNlcnZpbmcgdGhlIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuCiAKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgeyByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OyB9CiAg
ICAgRGF0YWJhc2VUaHJlYWQqIGRhdGFiYXNlVGhyZWFkKCk7CiAKICAgICB2b2lkIHNldEhhc09w
ZW5EYXRhYmFzZXMoKSB7IG1faGFzT3BlbkRhdGFiYXNlcyA9IHRydWU7IH0KLQotICAgIHN0YXRp
YyBib29sIGhhc09wZW5EYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIGJv
b2wgaGFzT3BlbkRhdGFiYXNlcygpIHsgcmV0dXJuIG1faGFzT3BlbkRhdGFiYXNlczsgfQogCiAg
ICAgLy8gV2hlbiB0aGUgZGF0YWJhc2UgY2xlYW51cCBpcyBkb25lLCBjbGVhbnVwU3luYyB3aWxs
IGJlIHNpZ25hbGxlZC4KLSAgICBzdGF0aWMgdm9pZCBzdG9wRGF0YWJhc2VzKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqKTsKKyAgICBib29sIHN0b3BE
YXRhYmFzZXMoRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKik7CiAKICAgICBib29sIGFsbG93RGF0
YWJhc2VBY2Nlc3MoKSBjb25zdDsKICAgICB2b2lkIGRhdGFiYXNlRXhjZWVkZWRRdW90YShjb25z
dCBTdHJpbmcmIG5hbWUsIERhdGFiYXNlRGV0YWlscyk7CiAKIHByaXZhdGU6CiAgICAgZXhwbGlj
aXQgRGF0YWJhc2VDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLSAgICBzdGF0aWMg
Y29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKLSAgICBzdGF0aWMgRGF0YWJhc2VDb250ZXh0
KiBleGlzdGluZ0RhdGFiYXNlQ29udGV4dEZyb20oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwog
CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0Owog
ICAgIFJlZlB0cjxEYXRhYmFzZVRocmVhZD4gbV9kYXRhYmFzZVRocmVhZDsKICAgICBib29sIG1f
aGFzT3BlbkRhdGFiYXNlczsgLy8gVGhpcyBuZXZlciBjaGFuZ2VzIGJhY2sgdG8gZmFsc2UsIGV2
ZW4gYWZ0ZXIgdGhlIGRhdGFiYXNlIHRocmVhZCBpcyBjbG9zZWQuCisKKyAgICBmcmllbmQgY2xh
c3MgRGF0YWJhc2VNYW5hZ2VyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VN
YW5hZ2VyLmNwcAkocmV2aXNpb24gMTQwNzkwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiRGF0YWJhc2VDYWxsYmFjay5oIgogI2luY2x1ZGUgIkRhdGFiYXNl
Q29udGV4dC5oIgogI2luY2x1ZGUgIkRhdGFiYXNlU3luYy5oIgorI2luY2x1ZGUgIkRhdGFiYXNl
VGFzay5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlSW5zdHJ1bWVudGF0aW9uLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
QEAgLTEyMiwxNiArMTIzLDU4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJh
Y2s+IG1fY3JlYXRpb25DYWxsYmFjazsKIH07CiAKK1Bhc3NSZWZQdHI8RGF0YWJhc2VDb250ZXh0
PiBEYXRhYmFzZU1hbmFnZXI6OmdldEV4aXN0aW5nRGF0YWJhc2VDb250ZXh0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fY29udGV4
dE1hcExvY2spOworICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9
IGFkb3B0UmVmKG1fY29udGV4dE1hcC5nZXQoY29udGV4dCkpOworICAgIGlmIChkYXRhYmFzZUNv
bnRleHQpIHsKKyAgICAgICAgLy8gSWYgd2UncmUgaW5zdGFudGlhdGluZyBhIG5ldyBEYXRhYmFz
ZUNvbnRleHQsIHRoZSBuZXcgaW5zdGFuY2Ugd291bGQKKyAgICAgICAgLy8gY2FycnkgYSBuZXcg
cmVmQ291bnQgb2YgMS4gVGhlIGNsaWVudCBleHBlY3RzIHRoaXMgYW5kIHdpbGwgc2ltcGx5Cisg
ICAgICAgIC8vIGFkb3B0UmVmIHRoZSBkYXRhYmFzZUNvbnRleHQgd2l0aG91dCByZWYnaW5nIGl0
LgorICAgICAgICAvLyAgICAgSG93ZXZlciwgaW5zdGVhZCBvZiBpbnN0YW50aWF0aW5nIGEgbmV3
IGluc3RhbmNlLCB3ZSdyZSByZXVzaW5nCisgICAgICAgIC8vIGFuIGV4aXN0aW5nIG9uZSB0aGF0
IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dC4KKyAg
ICAgICAgLy8gSGVuY2UsIHRoYXQgbmV3IHJlZkNvdW50IG5lZWQgdG8gYmUgYXR0cmlidXRlZCB0
byB0aGUgcmV1c2VkIGluc3RhbmNlCisgICAgICAgIC8vIHRvIGVuc3VyZSB0aGF0IHRoZSByZWZD
b3VudCBpcyBhY2N1cmF0ZSB3aGVuIHRoZSBjbGllbnQgYWRvcHRzIHRoZSByZWYuCisgICAgICAg
IC8vIFdlIGRvIHRoaXMgYnkgcmVmJ2luZyB0aGUgcmV1c2VkIGRhdGFiYXNlQ29udGV4dCBiZWZv
cmUgcmV0dXJuaW5nIGl0LgorICAgICAgICBkYXRhYmFzZUNvbnRleHQtPnJlZigpOworICAgIH0K
KyAgICByZXR1cm4gZGF0YWJhc2VDb250ZXh0LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxE
YXRhYmFzZUNvbnRleHQ+IERhdGFiYXNlTWFuYWdlcjo6Z2V0RGF0YWJhc2VDb250ZXh0KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgUmVmUHRyPERhdGFiYXNlQ29udGV4
dD4gZGF0YWJhc2VDb250ZXh0ID0gZ2V0RXhpc3RpbmdEYXRhYmFzZUNvbnRleHQoY29udGV4dCk7
CisgICAgaWYgKCFkYXRhYmFzZUNvbnRleHQpCisgICAgICAgIGRhdGFiYXNlQ29udGV4dCA9IGFk
b3B0UmVmKG5ldyBEYXRhYmFzZUNvbnRleHQoY29udGV4dCkpOworICAgIHJldHVybiBkYXRhYmFz
ZUNvbnRleHQucmVsZWFzZSgpOworfQorCit2b2lkIERhdGFiYXNlTWFuYWdlcjo6cmVnaXN0ZXJE
YXRhYmFzZUNvbnRleHQoRGF0YWJhc2VDb250ZXh0KiBkYXRhYmFzZUNvbnRleHQpCit7CisgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fY29udGV4dE1hcExvY2spOworICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQgPSBkYXRhYmFzZUNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICBtX2NvbnRleHRNYXAuc2V0KGNvbnRleHQsIGRhdGFiYXNlQ29udGV4dCk7Cit9
CisKK3ZvaWQgRGF0YWJhc2VNYW5hZ2VyOjp1bnJlZ2lzdGVyRGF0YWJhc2VDb250ZXh0KERhdGFi
YXNlQ29udGV4dCogZGF0YWJhc2VDb250ZXh0KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X2NvbnRleHRNYXBMb2NrKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0g
ZGF0YWJhc2VDb250ZXh0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgbV9jb250ZXh0
TWFwLnJlbW92ZShjb250ZXh0KTsKK30KKwogUGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0YWJhc2VN
YW5hZ2VyOjpvcGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKICAg
ICBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25z
dCBTdHJpbmcmIGRpc3BsYXlOYW1lLAogICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwg
UGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25D
b2RlJiBlKQogeworICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9
IGdldERhdGFiYXNlQ29udGV4dChjb250ZXh0KTsKKwogICAgIGlmICghY2FuRXN0YWJsaXNoRGF0
YWJhc2UoY29udGV4dCwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKSB7CiAgICAg
ICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgJXMgZm9yIG9yaWdpbiAlcyBub3QgYWxsb3dl
ZCB0byBiZSBlc3RhYmxpc2hlZCIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIGNvbnRleHQtPnNlY3Vy
aXR5T3JpZ2luKCktPnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKLSAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gYWRvcHRSZWYobmV3
IERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVz
dGltYXRlZFNpemUpKTsKKyAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gYWRvcHRSZWYo
bmV3IERhdGFiYXNlKGRhdGFiYXNlQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNw
bGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOwogCiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKICAg
ICBpZiAoIWRhdGFiYXNlLT5vcGVuQW5kVmVyaWZ5VmVyc2lvbighY3JlYXRpb25DYWxsYmFjaywg
ZSwgZXJyb3JNZXNzYWdlKSkgewpAQCAtMTQxLDcgKzE4NCw3IEBAIFBhc3NSZWZQdHI8RGF0YWJh
c2U+IERhdGFiYXNlTWFuYWdlcjo6b3AKICAgICB9CiAKICAgICBEYXRhYmFzZU1hbmFnZXI6Om1h
bmFnZXIoKS5zZXREYXRhYmFzZURldGFpbHMoY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgbmFt
ZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOwotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFu
YWdlcigpLnNldEhhc09wZW5EYXRhYmFzZXMoY29udGV4dCk7CisgICAgZGF0YWJhc2VDb250ZXh0
LT5zZXRIYXNPcGVuRGF0YWJhc2VzKCk7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZE9wZW5EYXRhYmFzZShjb250ZXh0LCBkYXRhYmFzZSwgY29udGV4dC0+c2VjdXJpdHlPcmln
aW4oKS0+aG9zdCgpLCBuYW1lLCBleHBlY3RlZFZlcnNpb24pOwogCkBAIC0xNTAsMTMgKzE5Mywx
NCBAQCBQYXNzUmVmUHRyPERhdGFiYXNlPiBEYXRhYmFzZU1hbmFnZXI6Om9wCiAgICAgICAgIGRh
dGFiYXNlLT5tX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKERhdGFiYXNlQ3JlYXRp
b25DYWxsYmFja1Rhc2s6OmNyZWF0ZShkYXRhYmFzZSwgY3JlYXRpb25DYWxsYmFjaykpOwogICAg
IH0KIAotICAgIHJldHVybiBkYXRhYmFzZTsKKyAgICByZXR1cm4gZGF0YWJhc2UucmVsZWFzZSgp
OwogfQogCiBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gRGF0YWJhc2VNYW5hZ2VyOjpvcGVuRGF0
YWJhc2VTeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCiAgICAgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBk
aXNwbGF5TmFtZSwKICAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8
RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CisgICAgUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gZ2V0RGF0YWJh
c2VDb250ZXh0KGNvbnRleHQpOwogICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQo
KSk7CiAKICAgICBpZiAoIWNhbkVzdGFibGlzaERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGRpc3Bs
YXlOYW1lLCBlc3RpbWF0ZWRTaXplKSkgewpAQCAtMTY0LDcgKzIwOCw3IEBAIFBhc3NSZWZQdHI8
RGF0YWJhc2VTeW5jPiBEYXRhYmFzZU1hbmFnZXIKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
Ci0gICAgUmVmUHRyPERhdGFiYXNlU3luYz4gZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJh
c2VTeW5jKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGlt
YXRlZFNpemUpKTsKKyAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBkYXRhYmFzZSA9IGFkb3B0UmVm
KG5ldyBEYXRhYmFzZVN5bmMoZGF0YWJhc2VDb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24s
IGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7CiAKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdl
OwogICAgIGlmICghZGF0YWJhc2UtPnBlcmZvcm1PcGVuQW5kVmVyaWZ5KCFjcmVhdGlvbkNhbGxi
YWNrLCBlYywgZXJyb3JNZXNzYWdlKSkgewpAQCAtMTgwLDIyICsyMjQsMjMgQEAgUGFzc1JlZlB0
cjxEYXRhYmFzZVN5bmM+IERhdGFiYXNlTWFuYWdlcgogICAgICAgICBjcmVhdGlvbkNhbGxiYWNr
LT5oYW5kbGVFdmVudChkYXRhYmFzZS5nZXQoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGRhdGFi
YXNlOworICAgIHJldHVybiBkYXRhYmFzZS5yZWxlYXNlKCk7CiB9CiAKIGJvb2wgRGF0YWJhc2VN
YW5hZ2VyOjpoYXNPcGVuRGF0YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQp
CiB7Ci0gICAgcmV0dXJuIERhdGFiYXNlQ29udGV4dDo6aGFzT3BlbkRhdGFiYXNlcyhjb250ZXh0
KTsKLX0KLQotdm9pZCBEYXRhYmFzZU1hbmFnZXI6OnNldEhhc09wZW5EYXRhYmFzZXMoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBEYXRhYmFzZUNvbnRleHQ6OmZyb20o
Y29udGV4dCktPnNldEhhc09wZW5EYXRhYmFzZXMoKTsKKyAgICBSZWZQdHI8RGF0YWJhc2VDb250
ZXh0PiBkYXRhYmFzZUNvbnRleHQgPSBnZXRFeGlzdGluZ0RhdGFiYXNlQ29udGV4dChjb250ZXh0
KTsKKyAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBkYXRhYmFzZUNvbnRleHQtPm1faGFzT3BlbkRhdGFiYXNlczsKIH0KIAogdm9pZCBE
YXRhYmFzZU1hbmFnZXI6OnN0b3BEYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIpCiB7Ci0gICAgRGF0
YWJhc2VDb250ZXh0OjpzdG9wRGF0YWJhc2VzKGNvbnRleHQsIHN5bmNocm9uaXplcik7CisgICAg
UmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gZ2V0RXhpc3RpbmdEYXRh
YmFzZUNvbnRleHQoY29udGV4dCk7CisgICAgaWYgKCFkYXRhYmFzZUNvbnRleHQgfHwgIWRhdGFi
YXNlQ29udGV4dC0+c3RvcERhdGFiYXNlcyhzeW5jaHJvbml6ZXIpKQorICAgICAgICBpZiAoc3lu
Y2hyb25pemVyKQorICAgICAgICAgICAgc3luY2hyb25pemVyLT50YXNrQ29tcGxldGVkKCk7CiB9
CiAKIFN0cmluZyBEYXRhYmFzZU1hbmFnZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2UoU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4
aXN0KQpAQCAtMjcyLDkgKzMxNywxMSBAQCB2b2lkIERhdGFiYXNlTWFuYWdlcjo6Y2xvc2VEYXRh
YmFzZXNJbW1lCiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oQ0hST01JVU0pCiAKLXZvaWQgRGF0YWJh
c2VNYW5hZ2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit2b2lkIERhdGFiYXNlTWFuYWdlcjo6aW50ZXJydXB0
QWxsRGF0YWJhc2VzRm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQog
ewotICAgIG1fc2VydmVyLT5pbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnRleHQp
OworICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9IGdldEV4aXN0
aW5nRGF0YWJhc2VDb250ZXh0KGNvbnRleHQpOworICAgIGlmIChkYXRhYmFzZUNvbnRleHQpCisg
ICAgICAgIG1fc2VydmVyLT5pbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnRleHQp
OwogfQogCiBib29sIERhdGFiYXNlTWFuYWdlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2Vy
LmgJKHJldmlzaW9uIDE0MDc5MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwxNiBAQAog
CiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oIgogI2luY2x1ZGUgIkRhdGFiYXNl
QmFzaWNUeXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQWJzdHJhY3REYXRhYmFzZVNlcnZlcjsKIGNsYXNzIERhdGFiYXNlOwog
Y2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKK2NsYXNzIERhdGFiYXNlQ29udGV4dDsKIGNsYXNzIERh
dGFiYXNlTWFuYWdlckNsaWVudDsKIGNsYXNzIERhdGFiYXNlU3luYzsKIGNsYXNzIERhdGFiYXNl
VGFza1N5bmNocm9uaXplcjsKQEAgLTU2LDExICs1OSwyMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c0F2YWlsYWJsZSgpOwogICAgIHZvaWQgc2V0SXNBdmFpbGFibGUoYm9vbCk7CiAKKyAgICAvLyBU
aGlzIGdldHMgYSBEYXRhYmFzZUNvbnRleHQgZm9yIHRoZSBzcGVjaWZpZWQgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCBpZgorICAgIC8vIGl0IGFscmVhZHkgZXhpc3QgcHJldmlvdXNseS4gT3RoZXJ3
aXNlLCBpdCByZXR1cm5zIDAuCisgICAgUGFzc1JlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGdldEV4
aXN0aW5nRGF0YWJhc2VDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKworICAgIC8v
IFRoaXMgZ2V0cyBhIERhdGFiYXNlQ29udGV4dCBmb3IgdGhlIHNwZWNpZmllZCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0LgorICAgIC8vIElmIG9uZSBkb2Vzbid0IGFscmVhZHkgZXhpc3QsIGl0IHdp
bGwgY3JlYXRlIGEgbmV3IG9uZS4KKyAgICBQYXNzUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZ2V0
RGF0YWJhc2VDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKworICAgIC8vIFRoZXNl
IDIgbWV0aG9kcyBhcmUgZm9yIERhdGFiYXNlQ29udGV4dCAodW4pcmVnaXN0cmF0aW9uLCBhbmQg
c2hvdWxkIG9ubHkKKyAgICAvLyBiZSBjYWxsZWQgYnkgdGhlIERhdGFiYXNlQ29udGV4dCBjb25z
dHJ1Y3RvciBhbmQgZGVzdHJ1Y3Rvci4KKyAgICB2b2lkIHJlZ2lzdGVyRGF0YWJhc2VDb250ZXh0
KERhdGFiYXNlQ29udGV4dCopOworICAgIHZvaWQgdW5yZWdpc3RlckRhdGFiYXNlQ29udGV4dChE
YXRhYmFzZUNvbnRleHQqKTsKKwogICAgIFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFz
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQg
bG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBFeGNlcHRp
b25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IG9wZW5EYXRhYmFzZVN5bmMo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9u
Q29kZSYpOwogCiAgICAgYm9vbCBoYXNPcGVuRGF0YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqKTsKLSAgICB2b2lkIHNldEhhc09wZW5EYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopOwogICAgIHZvaWQgc3RvcERhdGFiYXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRGF0
YWJhc2VUYXNrU3luY2hyb25pemVyKik7CiAKICAgICBTdHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFz
ZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNO
b3RFeGlzdCA9IHRydWUpOwpAQCAtODksNyArMTA0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xv
c2VEYXRhYmFzZXNJbW1lZGlhdGVseShjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgbmFtZSk7CiAjZW5kaWYgLy8gUExBVEZPUk0oQ0hST01JVU0pCiAKLSAgICB2
b2lkIGludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3QgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCopOworICAgIHZvaWQgaW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Kik7CiAKICAgICBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
ZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgdm9pZCBhZGRP
cGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSopOwpAQCAtMTAyLDYgKzExNywxMCBAQCBwcml2
YXRlOgogICAgIERhdGFiYXNlTWFuYWdlcigpOwogICAgIH5EYXRhYmFzZU1hbmFnZXIoKSB7IH0K
IAorICAgIHR5cGVkZWYgSGFzaE1hcDxTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRGF0YWJhc2VD
b250ZXh0KiwgUHRySGFzaDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Kj4gPiBDb250ZXh0TWFwOwor
ICAgIENvbnRleHRNYXAgbV9jb250ZXh0TWFwOworICAgIE11dGV4IG1fY29udGV4dE1hcExvY2s7
CisKICAgICBBYnN0cmFjdERhdGFiYXNlU2VydmVyKiBtX3NlcnZlcjsKICAgICBEYXRhYmFzZU1h
bmFnZXJDbGllbnQqIG1fY2xpZW50OwogICAgIGJvb2wgbV9kYXRhYmFzZUlzQXZhaWxhYmxlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VTeW5jLmNwcAkocmV2aXNpb24gMTQwNzkwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw5ICs0Nyw5
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRGF0YWJhc2VTeW5jOjpEYXRhYmFzZVN5bmMo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKK0RhdGFiYXNlU3luYzo6RGF0YWJhc2VTeW5jKFJl
ZlB0cjxEYXRhYmFzZUNvbnRleHQ+JiBkYXRhYmFzZUNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNp
emUpCi0gICAgOiBBYnN0cmFjdERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lv
biwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIFN5bmNEYXRhYmFzZSkKKyAgICA6IEFic3Ry
YWN0RGF0YWJhc2UoZGF0YWJhc2VDb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3Bs
YXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBTeW5jRGF0YWJhc2UpCiB7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuaAkocmV2
aXNpb24gMTQwNzkwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBEYXRhYmFzZUNhbGxiYWNrOwogY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5j
OwogY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s7Ci1jbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIC8vIEluc3RhbmNlcyBvZiB0aGlz
IGNsYXNzIHNob3VsZCBiZSBjcmVhdGVkIGFuZCB1c2VkIG9ubHkgb24gdGhlIHdvcmtlcidzIGNv
bnRleHQgdGhyZWFkLgpAQCAtNzQsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRl
OgotICAgIERhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKKyAgICBEYXRhYmFzZVN5bmMo
UmVmUHRyPERhdGFiYXNlQ29udGV4dD4mLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3Bs
YXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwogICAgIHZvaWQgcnVuVHJhbnNh
Y3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIGJvb2wgcmVhZE9u
bHksIEV4Y2VwdGlvbkNvZGUmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAJKHJldmlzaW9uIDE0MDc5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1MiwxMSBAQCBEYXRhYmFzZVRocmVhZDo6RGF0YWJh
c2VUaHJlYWQoKQogCiBEYXRhYmFzZVRocmVhZDo6fkRhdGFiYXNlVGhyZWFkKCkKIHsKLSAgICAv
LyBGSVhNRTogQW55IGNsZWFudXAgcmVxdWlyZWQgaGVyZT8gIFNpbmNlIHRoZSB0aHJlYWQgZGVs
ZXRlcyBpdHNlbGYgYWZ0ZXIgcnVubmluZyBpdHMgZGV0YWNoZWQgY291cnNlLCBJIGRvbid0IHRo
aW5rIHNvLiAgTGV0cyBiZSBzdXJlLgorICAgIC8vIFRoZSBEYXRhYmFzZVRocmVhZCB3aWxsIG9u
bHkgYmUgZGVzdHJ1Y3RlZCB3aGVuIGl0cyBvd25lcgorICAgIC8vIERhdGFiYXNlQ29udGV4dCBp
cyBkZXN0cnVjdGVkLiBUaGUgRGF0YWJhc2VDb250ZXh0IGRlc3RydWN0b3Igd2lsbCB0YWtlCisg
ICAgLy8gY2FyZSBvZiBlbnN1cmluZyB0aGF0IGEgdGVybWluYXRpb24gcmVxdWVzdCBoYXMgYmVl
biBpc3N1ZS4gVGhlCisgICAgLy8gdGVybWluYXRpb24gcmVxdWVzdCB3aWxsIHRyaWdnZXIgYW4g
b3JkZXJseSBzaHV0ZG93biBvZiB0aGUgdGhyZWFkLCBhbmQKKyAgICAvLyB0aGVuIGRlbGV0ZSBp
dHNlbGYgdmlhIGEgZGVyZWYuIAogICAgIEFTU0VSVCh0ZXJtaW5hdGlvblJlcXVlc3RlZCgpKTsK
IH0KIApAQCAtNzAsNyArNzQsNiBAQCBib29sIERhdGFiYXNlVGhyZWFkOjpzdGFydCgpCiAKIHZv
aWQgRGF0YWJhc2VUaHJlYWQ6OnJlcXVlc3RUZXJtaW5hdGlvbihEYXRhYmFzZVRhc2tTeW5jaHJv
bml6ZXIgKmNsZWFudXBTeW5jKQogewotICAgIEFTU0VSVCghbV9jbGVhbnVwU3luYyk7CiAgICAg
bV9jbGVhbnVwU3luYyA9IGNsZWFudXBTeW5jOwogICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJh
c2VUaHJlYWQgJXAgd2FzIGFza2VkIHRvIHRlcm1pbmF0ZVxuIiwgdGhpcyk7CiAgICAgbV9xdWV1
ZS5raWxsKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCShyZXZpc2lvbiAxNDA3OTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJD
aHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJEYXRhYmFzZUNvbnRleHQuaCIKKyNpbmNsdWRlICJE
YXRhYmFzZU1hbmFnZXIuaCIKICNpbmNsdWRlICJEYXRhYmFzZU1hbmFnZXJDbGllbnQuaCIKICNp
bmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTE2Nyw3
ICsxNjgsOSBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhCiAKICAg
ICAvLyBHaXZlIHRoZSBjaHJvbWUgY2xpZW50IGEgY2hhbmNlIHRvIGluY3JlYXNlIHRoZSBxdW90
YS4KICAgICAvLyBEcm9wIGFsbCBsb2NrcyBiZWZvcmUgY2FsbGluZyBvdXQ7IHdlIGRvbid0IGtu
b3cgd2hhdCB0aGV5J2xsIGRvLgotICAgIERhdGFiYXNlQ29udGV4dDo6ZnJvbShjb250ZXh0KS0+
ZGF0YWJhc2VFeGNlZWRlZFF1b3RhKG5hbWUsIERhdGFiYXNlRGV0YWlscyhuYW1lLmlzb2xhdGVk
Q29weSgpLCBkaXNwbGF5TmFtZS5pc29sYXRlZENvcHkoKSwgZXN0aW1hdGVkU2l6ZSwgMCkpOwor
ICAgIERhdGFiYXNlTWFuYWdlciYgbWFuYWdlciA9IERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigp
OworICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9IG1hbmFnZXIu
Z2V0RGF0YWJhc2VDb250ZXh0KGNvbnRleHQpOworICAgIGRhdGFiYXNlQ29udGV4dC0+ZGF0YWJh
c2VFeGNlZWRlZFF1b3RhKG5hbWUsIERhdGFiYXNlRGV0YWlscyhuYW1lLmlzb2xhdGVkQ29weSgp
LCBkaXNwbGF5TmFtZS5pc29sYXRlZENvcHkoKSwgZXN0aW1hdGVkU2l6ZSwgMCkpOwogCiAgICAg
TXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185158</attachid>
            <date>2013-01-28 22:35:28 -0800</date>
            <delta_ts>2013-01-29 00:15:07 -0800</delta_ts>
            <desc>the final final patch?</desc>
            <filename>bug-107784.patch</filename>
            <type>text/plain</type>
            <size>35363</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTA1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBACisyMDEzLTAxLTI4ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgRGF0YWJhc2VDb250ZXh0
IGxvb2t1cCB0byBiZSB0aHJlYWQtc2FmZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwNzc4NC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBEYXRhYmFzZUNvbnRleHQgd2lsbCBubyBsb25nZXIgYmUgYSBT
dXBwbGVtZW50IG9mIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAgICAgIEluc3RlYWQgd2Ug
d2lsbCBtYWludGFpbiBhIG11dGV4IGd1YXJkZWQgY29udGV4dE1hcCBpbiB0aGUgRGF0YWJhc2VN
YW5hZ2VyCisgICAgICAgIHdoaWNoIG1hcHMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dHMgdG8gRGF0
YWJhc2VDb250ZXh0cy4KKworICAgICAgICBBbHNvIGNsZWFuZWQgdXAgdGhlIHNodXRkb3duIG1l
Y2hhbmlzbSBvZiB0aGUgRGF0YWJhc2VDb250ZXh0LAorICAgICAgICBEYXRhYmFzZVRocmVhZCwg
YW5kIERhdGFiYXNlcyB3aGVuIHRoZWlyIG93bmVyIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKKyAg
ICAgICAgZGVzdHJ1Y3RzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIE1v
ZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBYnN0cmFjdERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U6OmRhdGFiYXNlQ29udGV4dCk6CisgICAgICAgIChBYnN0cmFjdERhdGFiYXNl
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEYXRhYmFzZSk6
CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNvbnRleHQ6OkRhdGFi
YXNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNvbnRleHQ6On5EYXRhYmFz
ZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDb250ZXh0Ojpjb250ZXh0RGVz
dHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQ29udGV4dDo6c3RvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZUNvbnRleHQ6OmRhdGFiYXNlVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlQ29udGV4dDo6c3RvcERhdGFiYXNlcyk6CisgICAgICAgICogTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuaDoKKyAgICAgICAgKERhdGFiYXNlQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNvbnRleHQ6OnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDb250ZXh0OjpoYXNPcGVuRGF0
YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQ29udGV4dDo6c3RvcERhdGFiYXNl
cyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6RGF0YWJhc2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlTWFuYWdlcjo6Z2V0RXhpc3RpbmdEYXRhYmFzZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OmdldERhdGFi
YXNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OnJlZ2lzdGVy
RGF0YWJhc2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6dW5y
ZWdpc3RlckRhdGFiYXNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFn
ZXI6Om5vdGlmeURhdGFiYXNlQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlTWFuYWdlcjo6bm90aWZ5RGF0YWJhc2VDb250ZXh0RGVzdHJ1Y3RlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZVN5bmMpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpoYXNPcGVuRGF0YWJhc2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlTWFuYWdlcjo6c3RvcERhdGFiYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZU1hbmFnZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKERhdGFiYXNlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZU1hbmFnZXI6Om5vdGlmeURhdGFiYXNlQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6bm90aWZ5RGF0YWJhc2VDb250ZXh0RGVzdHJ1Y3Rl
ZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpEYXRhYmFzZVN5bmMpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKERhdGFiYXNlU3luYyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6fkRhdGFi
YXNlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpyZXF1ZXN0VGVy
bWluYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0
YWJhc2UpOgorICAgICAgICAqIGRvbS9BY3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QWN0aXZlRE9NT2JqZWN0Ojp+QWN0aXZlRE9NT2JqZWN0KToKKwogMjAxMy0wMS0yOCAg
R2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFN0YXRpYyBzaXpl
IGluZmVyZW5jZSBmb3IgSmF2YVNjcmlwdCBvYmplY3RzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAJKHJl
dmlzaW9uIDE0MTA0OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJz
dHJhY3REYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwxMCArMTc0LDEwIEBAIGNv
bnN0IGNoYXIqIEFic3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNlSW4KICAgICByZXR1cm4gaW5mb1Rh
YmxlTmFtZTsKIH0KIAotQWJzdHJhY3REYXRhYmFzZTo6QWJzdHJhY3REYXRhYmFzZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZXhwZWN0ZWRWZXJzaW9uLAorQWJzdHJhY3REYXRhYmFzZTo6QWJzdHJhY3REYXRhYmFzZShQ
YXNzUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25n
IGVzdGltYXRlZFNpemUsIERhdGFiYXNlVHlwZSBkYXRhYmFzZVR5cGUpCi0gICAgOiBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKLSAgICAsIG1fZGF0YWJhc2VDb250ZXh0KERhdGFi
YXNlQ29udGV4dDo6ZnJvbShjb250ZXh0KSkKKyAgICA6IG1fZGF0YWJhc2VDb250ZXh0KGRhdGFi
YXNlQ29udGV4dCkKKyAgICAsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChtX2RhdGFiYXNlQ29u
dGV4dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICwgbV9uYW1lKG5hbWUuaXNvbGF0
ZWRDb3B5KCkpCiAgICAgLCBtX2V4cGVjdGVkVmVyc2lvbihleHBlY3RlZFZlcnNpb24uaXNvbGF0
ZWRDb3B5KCkpCiAgICAgLCBtX2Rpc3BsYXlOYW1lKGRpc3BsYXlOYW1lLmlzb2xhdGVkQ29weSgp
KQpAQCAtMTg3LDggKzE4Nyw4IEBAIEFic3RyYWN0RGF0YWJhc2U6OkFic3RyYWN0RGF0YWJhc2Uo
U2NyaXAKICAgICAsIG1fbmV3KGZhbHNlKQogICAgICwgbV9pc1N5bmNEYXRhYmFzZShkYXRhYmFz
ZVR5cGUgPT0gU3luY0RhdGFiYXNlKQogewotICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRU
aHJlYWQoKSk7Ci0gICAgbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VD
b250ZXh0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAg
ICBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbiA9IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+c2VjdXJpdHlPcmlnaW4oKS0+aXNvbGF0ZWRDb3B5KCk7CiAKICAgICBtX2RhdGFiYXNlQXV0
aG9yaXplciA9IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlKGluZm9UYWJsZU5hbWUpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3Ry
YWN0RGF0YWJhc2UuaAkocmV2aXNpb24gMTQxMDQ5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYg
KzM1LDcgQEAKICNpbmNsdWRlICJEYXRhYmFzZURldGFpbHMuaCIKICNpbmNsdWRlICJTUUxpdGVE
YXRhYmFzZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC04Niw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3NlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBj
bG9zZUltbWVkaWF0ZWx5KCkgPSAwOwogCi0gICAgRGF0YWJhc2VDb250ZXh0KiBkYXRhYmFzZUNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlQ29udGV4dDsgfQorICAgIERhdGFiYXNl
Q29udGV4dCogZGF0YWJhc2VDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZUNvbnRl
eHQuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyBDaGFuZ2VWZXJzaW9u
V3JhcHBlcjsKQEAgLTEwMCw3ICsxMDEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIFN5bmNEYXRh
YmFzZQogICAgIH07CiAKLSAgICBBYnN0cmFjdERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAor
ICAgIEFic3RyYWN0RGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZUNvbnRleHQ+LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0
ZWRTaXplLCBEYXRhYmFzZVR5cGUpOwogCiAgICAgdm9pZCBjbG9zZURhdGFiYXNlKCk7CkBAIC0x
MjcsOCArMTI4LDggQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkYXRhYmFz
ZUluZm9UYWJsZU5hbWUoKTsKIAogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9jb250ZXh0
VGhyZWFkU2VjdXJpdHlPcmlnaW47CisgICAgUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gbV9kYXRh
YmFzZUNvbnRleHQ7IC8vIEFzc29jaWF0ZWQgd2l0aCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
CiAgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKLSAgICBEYXRhYmFzZUNvbnRleHQqIG1fZGF0YWJhc2VDb250ZXh0OyAvLyBPd25lZCBi
eSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCiAKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFN0
cmluZyBtX2V4cGVjdGVkVmVyc2lvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxNDEwNDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjUsOCArNjUsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURhdGFiYXNlOjpEYXRh
YmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1l
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCi0gICAgOiBBYnN0cmFjdERhdGFiYXNlKGNv
bnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUs
IEFzeW5jRGF0YWJhc2UpCitEYXRhYmFzZTo6RGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZUNv
bnRleHQ+IGRhdGFiYXNlQ29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplKQorICAgIDogQWJzdHJhY3REYXRhYmFzZShkYXRhYmFzZUNvbnRleHQs
IG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIEFzeW5j
RGF0YWJhc2UpCiAgICAgLCBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyhmYWxzZSkKICAgICAsIG1f
aXNUcmFuc2FjdGlvblF1ZXVlRW5hYmxlZCh0cnVlKQogICAgICwgbV9kZWxldGVkKGZhbHNlKQpA
QCAtNzQsNyArNzQsNyBAQCBEYXRhYmFzZTo6RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
CiAgICAgbV9kYXRhYmFzZVRocmVhZFNlY3VyaXR5T3JpZ2luID0gbV9jb250ZXh0VGhyZWFkU2Vj
dXJpdHlPcmlnaW4tPmlzb2xhdGVkQ29weSgpOwogCiAgICAgU2NyaXB0Q29udHJvbGxlcjo6aW5p
dGlhbGl6ZVRocmVhZGluZygpOwotICAgIEFTU0VSVChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJh
c2VUaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VDb250ZXh0LT5kYXRhYmFzZVRocmVh
ZCgpKTsKIH0KIAogY2xhc3MgRGVyZWZDb250ZXh0VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpUYXNrIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlLmgJKHJldmlzaW9uIDE0MTA0OSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEYXRhYmFzZUNhbGxiYWNrOwotY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3Mg
U1FMVHJhbnNhY3Rpb247CiBjbGFzcyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOwpAQCAtODcsNyAr
ODYsNyBAQCBwcml2YXRlOgogICAgIGNsYXNzIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOwogICAg
IGNsYXNzIERhdGFiYXNlVGFibGVOYW1lc1Rhc2s7CiAKLSAgICBEYXRhYmFzZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVk
VmVyc2lvbiwKKyAgICBEYXRhYmFzZShQYXNzUmVmUHRyPERhdGFiYXNlQ29udGV4dD4sIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCiAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXpl
KTsKICAgICB2b2lkIHJ1blRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxs
YmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKICAgICAgICAg
ICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ss
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25seSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZUNvbnRleHQuY3BwCShyZXZpc2lvbiAxNDEwNDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDQ0
ICs0NCw3OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IGNoYXIqIERhdGFiYXNl
Q29udGV4dDo6c3VwcGxlbWVudE5hbWUoKQotewotICAgIHJldHVybiAiRGF0YWJhc2VDb250ZXh0
IjsKLX0KLQotRGF0YWJhc2VDb250ZXh0KiBEYXRhYmFzZUNvbnRleHQ6OmV4aXN0aW5nRGF0YWJh
c2VDb250ZXh0RnJvbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQotewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxEYXRhYmFzZUNvbnRleHQqPihTdXBwbGVtZW50PFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ+Ojpmcm9tKGNvbnRleHQsIHN1cHBsZW1lbnROYW1lKCkpKTsKLX0KLQogRGF0
YWJhc2VDb250ZXh0OjpEYXRhYmFzZUNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCkKLSAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQorICAgIDogQWN0
aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCiAgICAgLCBtX2hhc09wZW5EYXRhYmFzZXMoZmFs
c2UpCisgICAgLCBtX2lzUmVnaXN0ZXJlZCh0cnVlKSAvLyB3aWxsIHJlZ2lzdGVyIG9uIGNvbnN0
cnVjdGlvbiBiZWxvdy4KKyAgICAsIG1faGFzUmVxdWVzdGVkVGVybWluYXRpb24oZmFsc2UpCiB7
CisgICAgLy8gRm9yIGRlYnVnIGFjY291bnRpbmcgb25seS4gV2UgbXVzdCBkbyB0aGlzIGJlZm9y
ZSB3ZSByZWdpc3RlciB0aGUKKyAgICAvLyBpbnN0YW5jZS4gVGhlIGFzc2VydGlvbnMgYXNzdW1l
IHRoaXMuCisgICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkubm90aWZ5RGF0YWJhc2VDb250
ZXh0Q29uc3RydWN0ZWQoKTsgCisgICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkucmVnaXN0
ZXJEYXRhYmFzZUNvbnRleHQodGhpcyk7CisKKyAgICAvLyBBY3RpdmVET01PYmplY3QgZXhwZWN0
cyB0aGlzIHRvIGJlIGNhbGxlZCB0byBzZXQgaW50ZXJuYWwgZmxhZ3MuCisgICAgc3VzcGVuZElm
TmVlZGVkKCk7CiB9CiAKIERhdGFiYXNlQ29udGV4dDo6fkRhdGFiYXNlQ29udGV4dCgpCiB7Cisg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIERhdGFiYXNlVGhyZWFkIGlzIHN0b3BwZWQgYmVmb3Jl
IHdlIGRlc3RydWN0LgorICAgIHN0b3BEYXRhYmFzZXMoKTsKKworICAgIC8vIFRob3VnaCB3ZSBp
bml0aWF0ZSB0ZXJtaW5hdGlvbiBvZiB0aGUgRGF0YWJhc2VUaHJlYWQgaW4gc3RvcERhdGFiYXNl
cygpLAorICAgIC8vIHdlIGNhbid0IGNsZWFyIHRoZSBtX2RhdGFiYXNlVGhyZWFkIHJlZiB0aWxs
IGhlcmUgaW4gdGhlIGRlc3RydWN0b3IuCisgICAgLy8gVGhpcyBpcyBiZWNhdXNlIHRoZSBEYXRh
YmFzZXMgdGhhdCBhcmUgbWFuYWdlZCBieSBEYXRhYmFzZVRocmVhZCBzdGlsbAorICAgIC8vIHJl
bGllcyBvbiB0aGlzIHJlZiBiZXR3ZWVuIHRoZSBjb250ZXh0IGFuZCB0aGUgdGhyZWFkIHRvIGV4
ZWN1dGUgdGhlCisgICAgLy8gdGFzayBmb3IgY2xvc2luZyB0aGUgZGF0YWJhc2UuIEJ5IHRoZSB0
aW1lIHdlIGdldCB0byB0aGlzIGRlc3RydWN0b3IsCisgICAgLy8gd2UncmUgZ3VhcmFudGVlZCB0
aGF0IHRoZSBkYXRhYmFzZXMgYXJlIGRlc3RydWN0ZWQgKHdoaWNoIGlzIHdoeSBvdXIgcmVmCisg
ICAgLy8gY291bnQgaXMgMCBhbmQgd2UncmUgZGVzdHJ1Y3RpbmcpLiBTbywgaXQncyBub3cgc2Fm
ZSB0byBkZXJlZiB0aGUgdGhyZWFkLgogICAgIGlmIChtX2RhdGFiYXNlVGhyZWFkKSB7CiAgICAg
ICAgIEFTU0VSVChtX2RhdGFiYXNlVGhyZWFkLT50ZXJtaW5hdGlvblJlcXVlc3RlZCgpKTsKICAg
ICAgICAgbV9kYXRhYmFzZVRocmVhZCA9IDA7CiAgICAgfQotfQogCi1EYXRhYmFzZUNvbnRleHQq
IERhdGFiYXNlQ29udGV4dDo6ZnJvbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQor
ICAgIC8vIEZvciBkZWJ1ZyBhY2NvdW50aW5nIG9ubHkuIFdlIG11c3QgY2FsbCB0aGlzIGxhc3Qu
IFRoZSBhc3NlcnRpb25zIGFzc3VtZQorICAgIC8vIHRoaXMuCisgICAgRGF0YWJhc2VNYW5hZ2Vy
OjptYW5hZ2VyKCkubm90aWZ5RGF0YWJhc2VDb250ZXh0RGVzdHJ1Y3RlZCgpOworfQorCisvLyBU
aGlzIGlzIGNhbGxlZCBpZiB0aGUgYXNzb2NpYXRlZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0IGlz
IGRlc3RydWN0aW5nIHdoaWxlCisvLyB3ZSdyZSBzdGlsbCBhc3NvY2lhdGVkIHdpdGggaXQuIFRo
YXQncyBvdXIgY3VlIHRvIGRpc2Fzc29jaWF0ZSBhbmQgc2h1dGRvd24uCisvLyBUbyBkbyB0aGlz
LCB3ZSBzdG9wIHRoZSBkYXRhYmFzZSBhbmQgbGV0IGV2ZXJ5dGhpbmcgc2h1dGRvd24gbmF0dXJh
bGx5CisvLyBiZWNhdXNlIHRoZSBkYXRhYmFzZSBjbG9zaW5nIHByb2Nlc3MgbWF5IHN0aWxsIG1h
a2UgdXNlIG9mIHRoaXMgY29udGV4dC4KKy8vIEl0IGlzIG5vdCBzYWZlIHRvIGp1c3QgZGVsZXRl
IHRoZSBjb250ZXh0IGhlcmUuCit2b2lkIERhdGFiYXNlQ29udGV4dDo6Y29udGV4dERlc3Ryb3ll
ZCgpCit7CisgICAgc3RvcERhdGFiYXNlcygpOworCisgICAgLy8gTm9ybWFsbHksIHdpbGxEZXN0
cm95QWN0aXZlRE9NT2JqZWN0KCkgaXMgY2FsbGVkIGluIH5BY3RpdmVET01PYmplY3QoKS4KKyAg
ICAvLyBIb3dldmVyLCB3ZSdyZSBoZXJlIGJlY2F1c2UgdGhlIGRlc3RydWN0b3IgaGFzbid0IGJl
ZW4gY2FsbGVkLCBhbmQgdGhlCisgICAgLy8gU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB3ZSdyZSBh
c3NvY2lhdGVkIHdpdGggaXMgYWJvdXQgdG8gYmUgZGVzdHJ1Y3RlZC4KKyAgICAvLyBTbywgZ28g
YWhlYWQgYW4gdW5yZWdpc3RlciBzZWxmIGZyb20gdGhlIEFjdGl2ZURPTU9iamVjdCBsaXN0LCBh
bmQKKyAgICAvLyBzZXQgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0IHRvIDAgc28gdGhhdCB+QWN0
aXZlRE9NT2JqZWN0KCkgZG9lc24ndAorICAgIC8vIHRyeSB0byBkbyBzbyBhZ2Fpbi4KKyAgICBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPndpbGxEZXN0cm95QWN0aXZlRE9NT2JqZWN0KHRoaXMp
OworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IDA7Cit9CisKKy8vIHN0b3AoKSBpcyBm
cm9tIHN0b3BBY3RpdmVET01PYmplY3RzKCkgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIG93bmVy
IEZyYW1lCisvLyBvciBXb3JrZXJUaHJlYWQgaXMgc2h1dHRpbmcgZG93bi4gSW5pdGlhdGUgdGhl
IG9yZGVybHkgc2h1dGRvd24gYnkgc3RvcHBpbmcKKy8vIHRoZSBhc3NvY2lhdGVkIGRhdGFiYXNl
cy4KK3ZvaWQgRGF0YWJhc2VDb250ZXh0OjpzdG9wKCkKIHsKLSAgICBEYXRhYmFzZUNvbnRleHQq
IHN1cHBsZW1lbnQgPSBleGlzdGluZ0RhdGFiYXNlQ29udGV4dEZyb20oY29udGV4dCk7Ci0gICAg
aWYgKCFzdXBwbGVtZW50KSB7Ci0gICAgICAgIHN1cHBsZW1lbnQgPSBuZXcgRGF0YWJhc2VDb250
ZXh0KGNvbnRleHQpOwotICAgICAgICBwcm92aWRlVG8oY29udGV4dCwgc3VwcGxlbWVudE5hbWUo
KSwgYWRvcHRQdHIoc3VwcGxlbWVudCkpOwotICAgICAgICBBU1NFUlQoc3VwcGxlbWVudCA9PSBl
eGlzdGluZ0RhdGFiYXNlQ29udGV4dEZyb20oY29udGV4dCkpOwotICAgIH0KLSAgICByZXR1cm4g
c3VwcGxlbWVudDsKKyAgICBzdG9wRGF0YWJhc2VzKCk7CiB9CiAKIERhdGFiYXNlVGhyZWFkKiBE
YXRhYmFzZUNvbnRleHQ6OmRhdGFiYXNlVGhyZWFkKCkKIHsKICAgICBpZiAoIW1fZGF0YWJhc2VU
aHJlYWQgJiYgIW1faGFzT3BlbkRhdGFiYXNlcykgeworICAgICAgICAvLyBJdCdzIE9LIHRvIGFz
ayBmb3IgdGhlIG1fZGF0YWJhc2VUaHJlYWQgYWZ0ZXIgd2UndmUgcmVxdWVzdGVkCisgICAgICAg
IC8vIHRlcm1pbmF0aW9uIGJlY2F1c2Ugd2UncmUgc3RpbGwgdXNpbmcgaXQgdG8gZXhlY3V0ZSB0
aGUgY2xvc2luZworICAgICAgICAvLyBvZiB0aGUgZGF0YWJhc2UuIEhvd2V2ZXIsIGl0IGlzIE5P
VCBPSyB0byBjcmVhdGUgYSBuZXcgdGhyZWFkCisgICAgICAgIC8vIGFmdGVyIHdlJ3ZlIHJlcXVl
c3RlZCB0ZXJtaW5hdGlvbi4KKyAgICAgICAgQVNTRVJUKCFtX2hhc1JlcXVlc3RlZFRlcm1pbmF0
aW9uKTsKKwogICAgICAgICAvLyBDcmVhdGUgdGhlIGRhdGFiYXNlIHRocmVhZCBvbiBmaXJzdCBy
ZXF1ZXN0IC0gYnV0IG5vdCBpZiBhdCBsZWFzdCBvbmUgZGF0YWJhc2Ugd2FzIGFscmVhZHkgb3Bl
bmVkLAogICAgICAgICAvLyBiZWNhdXNlIGluIHRoYXQgY2FzZSB3ZSBhbHJlYWR5IGhhZCBhIGRh
dGFiYXNlIHRocmVhZCBhbmQgdGVybWluYXRlZCBpdCBhbmQgc2hvdWxkIG5vdCBjcmVhdGUgYW5v
dGhlci4KICAgICAgICAgbV9kYXRhYmFzZVRocmVhZCA9IERhdGFiYXNlVGhyZWFkOjpjcmVhdGUo
KTsKQEAgLTkyLDI2ICsxMjcsMTkgQEAgRGF0YWJhc2VUaHJlYWQqIERhdGFiYXNlQ29udGV4dDo6
ZGF0YWJhcwogICAgIHJldHVybiBtX2RhdGFiYXNlVGhyZWFkLmdldCgpOwogfQogCi1ib29sIERh
dGFiYXNlQ29udGV4dDo6aGFzT3BlbkRhdGFiYXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0KQorYm9vbCBEYXRhYmFzZUNvbnRleHQ6OnN0b3BEYXRhYmFzZXMoRGF0YWJhc2VUYXNr
U3luY2hyb25pemVyKiBjbGVhbnVwU3luYykKIHsKLSAgICAvLyBXZSBkb24ndCB1c2UgRGF0YWJh
c2VDb250ZXh0Ojpmcm9tIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBjYXVzZQotICAgIC8vIERh
dGFiYXNlQ29udGV4dCB0byBiZSBhbGxvY2F0ZWQgaWYgd2UgZG9uJ3QgaGF2ZSBvbmUgYWxyZWFk
eS4KLSAgICBEYXRhYmFzZUNvbnRleHQqIGRhdGFiYXNlQ29udGV4dCA9IGV4aXN0aW5nRGF0YWJh
c2VDb250ZXh0RnJvbShjb250ZXh0KTsKLSAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBkYXRhYmFzZUNvbnRleHQtPm1faGFzT3BlbkRh
dGFiYXNlczsKLX0KLQotdm9pZCBEYXRhYmFzZUNvbnRleHQ6OnN0b3BEYXRhYmFzZXMoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBjbGVh
bnVwU3luYykKLXsKLSAgICAvLyBXZSBkb24ndCB1c2UgRGF0YWJhc2VDb250ZXh0Ojpmcm9tIGJl
Y2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBjYXVzZQotICAgIC8vIERhdGFiYXNlQ29udGV4dCB0byBi
ZSBhbGxvY2F0ZWQgaWYgd2UgZG9uJ3QgaGF2ZSBvbmUgYWxyZWFkeS4KLSAgICBEYXRhYmFzZUNv
bnRleHQqIGRhdGFiYXNlQ29udGV4dCA9IGV4aXN0aW5nRGF0YWJhc2VDb250ZXh0RnJvbShjb250
ZXh0KTsKLQotICAgIGlmIChkYXRhYmFzZUNvbnRleHQgJiYgZGF0YWJhc2VDb250ZXh0LT5tX2Rh
dGFiYXNlVGhyZWFkKQotICAgICAgICBkYXRhYmFzZUNvbnRleHQtPm1fZGF0YWJhc2VUaHJlYWQt
PnJlcXVlc3RUZXJtaW5hdGlvbihjbGVhbnVwU3luYyk7Ci0gICAgZWxzZSBpZiAoY2xlYW51cFN5
bmMpCi0gICAgICAgIGNsZWFudXBTeW5jLT50YXNrQ29tcGxldGVkKCk7CisgICAgaWYgKG1faXNS
ZWdpc3RlcmVkKSB7CisgICAgICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLnVucmVnaXN0
ZXJEYXRhYmFzZUNvbnRleHQodGhpcyk7CisgICAgICAgIG1faXNSZWdpc3RlcmVkID0gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKG1fZGF0YWJhc2VUaHJlYWQgJiYgIW1faGFzUmVxdWVzdGVkVGVy
bWluYXRpb24pIHsKKyAgICAgICAgbV9kYXRhYmFzZVRocmVhZC0+cmVxdWVzdFRlcm1pbmF0aW9u
KGNsZWFudXBTeW5jKTsKKyAgICAgICAgbV9oYXNSZXF1ZXN0ZWRUZXJtaW5hdGlvbiA9IHRydWU7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJv
b2wgRGF0YWJhc2VDb250ZXh0OjphbGxvd0RhdGFiYXNlQWNjZXNzKCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRl
eHQuaAkocmV2aXNpb24gMTQxMDQ5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZUNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsMTEgQEAK
IAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKICNpbmNsdWRlICJEYXRhYmFzZURldGFpbHMuaCIKICNpbmNsdWRlICJTdXBwbGVtZW50YWJs
ZS5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCwzMSArNDMsMzcgQEAgY2xhc3Mg
RGF0YWJhc2VUYXNrU3luY2hyb25pemVyOwogY2xhc3MgRGF0YWJhc2VUaHJlYWQ7CiBjbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OwogCi1jbGFzcyBEYXRhYmFzZUNvbnRleHQgOiBwdWJsaWMg
U3VwcGxlbWVudDxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiB7CitjbGFzcyBEYXRhYmFzZUNvbnRl
eHQgOiBwdWJsaWMgUmVmQ291bnRlZDxEYXRhYmFzZUNvbnRleHQ+LCBBY3RpdmVET01PYmplY3Qg
ewogcHVibGljOgogICAgIHZpcnR1YWwgfkRhdGFiYXNlQ29udGV4dCgpOwotICAgIHN0YXRpYyBE
YXRhYmFzZUNvbnRleHQqIGZyb20oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCisgICAgLy8g
Rm9yIGxpZmUtY3ljbGUgbWFuYWdlbWVudCAoaW5oZXJpdGVkIGZyb20gQWN0aXZlRE9NT2JqZWN0
KToKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dERlc3Ryb3llZCgpOworICAgIHZpcnR1YWwgdm9p
ZCBzdG9wKCk7CisKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgeyByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OyB9CiAgICAgRGF0YWJh
c2VUaHJlYWQqIGRhdGFiYXNlVGhyZWFkKCk7CiAKICAgICB2b2lkIHNldEhhc09wZW5EYXRhYmFz
ZXMoKSB7IG1faGFzT3BlbkRhdGFiYXNlcyA9IHRydWU7IH0KLQotICAgIHN0YXRpYyBib29sIGhh
c09wZW5EYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIGJvb2wgaGFzT3Bl
bkRhdGFiYXNlcygpIHsgcmV0dXJuIG1faGFzT3BlbkRhdGFiYXNlczsgfQogCiAgICAgLy8gV2hl
biB0aGUgZGF0YWJhc2UgY2xlYW51cCBpcyBkb25lLCBjbGVhbnVwU3luYyB3aWxsIGJlIHNpZ25h
bGxlZC4KLSAgICBzdGF0aWMgdm9pZCBzdG9wRGF0YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqKTsKKyAgICBib29sIHN0b3BEYXRhYmFzZXMo
RGF0YWJhc2VUYXNrU3luY2hyb25pemVyKik7CiAKICAgICBib29sIGFsbG93RGF0YWJhc2VBY2Nl
c3MoKSBjb25zdDsKICAgICB2b2lkIGRhdGFiYXNlRXhjZWVkZWRRdW90YShjb25zdCBTdHJpbmcm
IG5hbWUsIERhdGFiYXNlRGV0YWlscyk7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgRGF0YWJh
c2VDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLSAgICBzdGF0aWMgY29uc3QgY2hh
ciogc3VwcGxlbWVudE5hbWUoKTsKLSAgICBzdGF0aWMgRGF0YWJhc2VDb250ZXh0KiBleGlzdGlu
Z0RhdGFiYXNlQ29udGV4dEZyb20oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCi0gICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OworICAgIHZvaWQg
c3RvcERhdGFiYXNlcygpIHsgc3RvcERhdGFiYXNlcygwKTsgfQorCiAgICAgUmVmUHRyPERhdGFi
YXNlVGhyZWFkPiBtX2RhdGFiYXNlVGhyZWFkOwogICAgIGJvb2wgbV9oYXNPcGVuRGF0YWJhc2Vz
OyAvLyBUaGlzIG5ldmVyIGNoYW5nZXMgYmFjayB0byBmYWxzZSwgZXZlbiBhZnRlciB0aGUgZGF0
YWJhc2UgdGhyZWFkIGlzIGNsb3NlZC4KKyAgICBib29sIG1faXNSZWdpc3RlcmVkOworICAgIGJv
b2wgbV9oYXNSZXF1ZXN0ZWRUZXJtaW5hdGlvbjsKKworICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFz
ZU1hbmFnZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3Bw
CShyZXZpc2lvbiAxNDEwNDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJEYXRhYmFzZUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yRGF0YWJhc2VJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJM
b2dnaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgpAQCAtNTAsNiAr
NTEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBEYXRhYmFzZU1hbmFnZXImIERhdGFiYXNlTWFu
YWdlcjo6bWFuYWdlcigpCiB7CiAgICAgc3RhdGljIERhdGFiYXNlTWFuYWdlciogZGJNYW5hZ2Vy
ID0gMDsKKyAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBpcyB2dWxuZXJhYmxlIHRvIGEgcmFj
ZSBiZXR3ZWVuIHRocmVhZHMuIE5lZWQgdG8KKyAgICAvLyBpbXBsZW1lbnQgYSB0aHJlYWQgc2Fm
ZSBvbi1maXJzdC11c2Ugc3RhdGljIGluaXRpYWxpemVyLgogICAgIGlmICghZGJNYW5hZ2VyKQog
ICAgICAgICBkYk1hbmFnZXIgPSBuZXcgRGF0YWJhc2VNYW5hZ2VyKCk7CiAKQEAgLTU5LDYgKzYy
LDEwIEBAIERhdGFiYXNlTWFuYWdlciYgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2UKIERhdGFiYXNl
TWFuYWdlcjo6RGF0YWJhc2VNYW5hZ2VyKCkKICAgICA6IG1fY2xpZW50KDApCiAgICAgLCBtX2Rh
dGFiYXNlSXNBdmFpbGFibGUodHJ1ZSkKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgLCBtX2Rh
dGFiYXNlQ29udGV4dFJlZ2lzdGVyZWRDb3VudCgwKQorICAgICwgbV9kYXRhYmFzZUNvbnRleHRJ
bnN0YW5jZUNvdW50KDApCisjZW5kaWYKIHsKICNpZiBVU0UoUExBVEZPUk1fU1RSQVRFR0lFUykK
ICAgICBtX3NlcnZlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5kYXRhYmFzZVN0cmF0ZWd5KCkt
PmdldERhdGFiYXNlU2VydmVyKCk7CkBAIC0xMjIsMjYgKzEyOSw5NSBAQCBwcml2YXRlOgogICAg
IFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBtX2NyZWF0aW9uQ2FsbGJhY2s7CiB9OwogCitQYXNz
UmVmUHRyPERhdGFiYXNlQ29udGV4dD4gRGF0YWJhc2VNYW5hZ2VyOjpnZXRFeGlzdGluZ0RhdGFi
YXNlQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX2NvbnRleHRNYXBMb2NrKTsKKworICAgIEFTU0VSVChtX2RhdGFiYXNl
Q29udGV4dFJlZ2lzdGVyZWRDb3VudCA+PSAwKTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZUNvbnRl
eHRJbnN0YW5jZUNvdW50ID49IDApOworICAgIEFTU0VSVChtX2RhdGFiYXNlQ29udGV4dFJlZ2lz
dGVyZWRDb3VudCA8PSBtX2RhdGFiYXNlQ29udGV4dEluc3RhbmNlQ291bnQpOworCisgICAgUmVm
UHRyPERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gYWRvcHRSZWYobV9jb250ZXh0
TWFwLmdldChjb250ZXh0KSk7CisgICAgaWYgKGRhdGFiYXNlQ29udGV4dCkgeworICAgICAgICAv
LyBJZiB3ZSdyZSBpbnN0YW50aWF0aW5nIGEgbmV3IERhdGFiYXNlQ29udGV4dCwgdGhlIG5ldyBp
bnN0YW5jZSB3b3VsZAorICAgICAgICAvLyBjYXJyeSBhIG5ldyByZWZDb3VudCBvZiAxLiBUaGUg
Y2xpZW50IGV4cGVjdHMgdGhpcyBhbmQgd2lsbCBzaW1wbHkKKyAgICAgICAgLy8gYWRvcHRSZWYg
dGhlIGRhdGFiYXNlQ29udGV4dCB3aXRob3V0IHJlZidpbmcgaXQuCisgICAgICAgIC8vICAgICBI
b3dldmVyLCBpbnN0ZWFkIG9mIGluc3RhbnRpYXRpbmcgYSBuZXcgaW5zdGFuY2UsIHdlJ3JlIHJl
dXNpbmcKKyAgICAgICAgLy8gYW4gZXhpc3Rpbmcgb25lIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhl
IHNwZWNpZmllZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorICAgICAgICAvLyBIZW5jZSwgdGhh
dCBuZXcgcmVmQ291bnQgbmVlZCB0byBiZSBhdHRyaWJ1dGVkIHRvIHRoZSByZXVzZWQgaW5zdGFu
Y2UKKyAgICAgICAgLy8gdG8gZW5zdXJlIHRoYXQgdGhlIHJlZkNvdW50IGlzIGFjY3VyYXRlIHdo
ZW4gdGhlIGNsaWVudCBhZG9wdHMgdGhlIHJlZi4KKyAgICAgICAgLy8gV2UgZG8gdGhpcyBieSBy
ZWYnaW5nIHRoZSByZXVzZWQgZGF0YWJhc2VDb250ZXh0IGJlZm9yZSByZXR1cm5pbmcgaXQuCisg
ICAgICAgIGRhdGFiYXNlQ29udGV4dC0+cmVmKCk7CisgICAgfQorICAgIHJldHVybiBkYXRhYmFz
ZUNvbnRleHQucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gRGF0
YWJhc2VNYW5hZ2VyOjpnZXREYXRhYmFzZUNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQg
PSBnZXRFeGlzdGluZ0RhdGFiYXNlQ29udGV4dChjb250ZXh0KTsKKyAgICBpZiAoIWRhdGFiYXNl
Q29udGV4dCkKKyAgICAgICAgZGF0YWJhc2VDb250ZXh0ID0gYWRvcHRSZWYobmV3IERhdGFiYXNl
Q29udGV4dChjb250ZXh0KSk7CisgICAgcmV0dXJuIGRhdGFiYXNlQ29udGV4dC5yZWxlYXNlKCk7
Cit9CisKK3ZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpyZWdpc3RlckRhdGFiYXNlQ29udGV4dChEYXRh
YmFzZUNvbnRleHQqIGRhdGFiYXNlQ29udGV4dCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9jb250ZXh0TWFwTG9jayk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9
IGRhdGFiYXNlQ29udGV4dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIG1fY29udGV4
dE1hcC5zZXQoY29udGV4dCwgZGF0YWJhc2VDb250ZXh0KTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVE
CisgICAgbV9kYXRhYmFzZUNvbnRleHRSZWdpc3RlcmVkQ291bnQrKzsKKyNlbmRpZgorfQorCit2
b2lkIERhdGFiYXNlTWFuYWdlcjo6dW5yZWdpc3RlckRhdGFiYXNlQ29udGV4dChEYXRhYmFzZUNv
bnRleHQqIGRhdGFiYXNlQ29udGV4dCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9jb250
ZXh0TWFwTG9jayk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGRhdGFi
YXNlQ29udGV4dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIEFTU0VSVChtX2NvbnRl
eHRNYXAuZ2V0KGNvbnRleHQpKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgbV9kYXRhYmFz
ZUNvbnRleHRSZWdpc3RlcmVkQ291bnQtLTsKKyNlbmRpZgorICAgIG1fY29udGV4dE1hcC5yZW1v
dmUoY29udGV4dCk7Cit9CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECit2b2lkIERhdGFiYXNlTWFu
YWdlcjo6bm90aWZ5RGF0YWJhc2VDb250ZXh0Q29uc3RydWN0ZWQoKQoreworICAgIE11dGV4TG9j
a2VyIGxvY2sobV9jb250ZXh0TWFwTG9jayk7CisgICAgbV9kYXRhYmFzZUNvbnRleHRJbnN0YW5j
ZUNvdW50Kys7Cit9CisKK3ZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpub3RpZnlEYXRhYmFzZUNvbnRl
eHREZXN0cnVjdGVkKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1fY29udGV4dE1hcExvY2sp
OworICAgIG1fZGF0YWJhc2VDb250ZXh0SW5zdGFuY2VDb3VudC0tOworICAgIEFTU0VSVChtX2Rh
dGFiYXNlQ29udGV4dFJlZ2lzdGVyZWRDb3VudCA8PSBtX2RhdGFiYXNlQ29udGV4dEluc3RhbmNl
Q291bnQpOworfQorI2VuZGlmCisKIFBhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlTWFuYWdl
cjo6b3BlbkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCiAgICAgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3Ry
aW5nJiBkaXNwbGF5TmFtZSwKICAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NS
ZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYg
ZSkKIHsKKyAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQgPSBnZXRE
YXRhYmFzZUNvbnRleHQoY29udGV4dCk7CisKICAgICBpZiAoIWNhbkVzdGFibGlzaERhdGFiYXNl
KGNvbnRleHQsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSkgewogICAgICAgICBM
T0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVzIGZvciBvcmlnaW4gJXMgbm90IGFsbG93ZWQgdG8g
YmUgZXN0YWJsaXNoZWQiLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBjb250ZXh0LT5zZWN1cml0eU9y
aWdpbigpLT50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogCi0gICAgUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSA9IGFkb3B0UmVmKG5ldyBEYXRh
YmFzZShjb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0
ZWRTaXplKSk7CisgICAgUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSA9IGFkb3B0UmVmKG5ldyBE
YXRhYmFzZShkYXRhYmFzZUNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5h
bWUsIGVzdGltYXRlZFNpemUpKTsKIAogICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CiAgICAgaWYg
KCFkYXRhYmFzZS0+b3BlbkFuZFZlcmlmeVZlcnNpb24oIWNyZWF0aW9uQ2FsbGJhY2ssIGUsIGVy
cm9yTWVzc2FnZSkpIHsKICAgICAgICAgZGF0YWJhc2UtPmxvZ0Vycm9yTWVzc2FnZShlcnJvck1l
c3NhZ2UpOwotICAgICAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5yZW1vdmVPcGVuRGF0
YWJhc2UoZGF0YWJhc2UuZ2V0KCkpOworICAgICAgICByZW1vdmVPcGVuRGF0YWJhc2UoZGF0YWJh
c2UuZ2V0KCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBEYXRhYmFzZU1hbmFn
ZXI6Om1hbmFnZXIoKS5zZXREYXRhYmFzZURldGFpbHMoY29udGV4dC0+c2VjdXJpdHlPcmlnaW4o
KSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOwotICAgIERhdGFiYXNlTWFuYWdl
cjo6bWFuYWdlcigpLnNldEhhc09wZW5EYXRhYmFzZXMoY29udGV4dCk7CisgICAgc2V0RGF0YWJh
c2VEZXRhaWxzKGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIG5hbWUsIGRpc3BsYXlOYW1lLCBl
c3RpbWF0ZWRTaXplKTsKKyAgICBkYXRhYmFzZUNvbnRleHQtPnNldEhhc09wZW5EYXRhYmFzZXMo
KTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlKGNvbnRl
eHQsIGRhdGFiYXNlLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5ob3N0KCksIG5hbWUsIGV4
cGVjdGVkVmVyc2lvbik7CiAKQEAgLTE1MCwxMyArMjI2LDE0IEBAIFBhc3NSZWZQdHI8RGF0YWJh
c2U+IERhdGFiYXNlTWFuYWdlcjo6b3AKICAgICAgICAgZGF0YWJhc2UtPm1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+cG9zdFRhc2soRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzazo6Y3JlYXRl
KGRhdGFiYXNlLCBjcmVhdGlvbkNhbGxiYWNrKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGRhdGFi
YXNlOworICAgIHJldHVybiBkYXRhYmFzZS5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8RGF0
YWJhc2VTeW5jPiBEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwKICAgICBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLAogICAgIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVh
dGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBSZWZQdHI8RGF0YWJhc2VD
b250ZXh0PiBkYXRhYmFzZUNvbnRleHQgPSBnZXREYXRhYmFzZUNvbnRleHQoY29udGV4dCk7CiAg
ICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKIAogICAgIGlmICghY2FuRXN0
YWJsaXNoRGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUp
KSB7CkBAIC0xNjQsMzggKzI0MSwzOSBAQCBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gRGF0YWJh
c2VNYW5hZ2VyCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFJlZlB0cjxEYXRhYmFz
ZVN5bmM+IGRhdGFiYXNlID0gYWRvcHRSZWYobmV3IERhdGFiYXNlU3luYyhjb250ZXh0LCBuYW1l
LCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7CisgICAgUmVm
UHRyPERhdGFiYXNlU3luYz4gZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2VTeW5jKGRh
dGFiYXNlQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSkpOwogCiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKICAgICBpZiAoIWRhdGFiYXNl
LT5wZXJmb3JtT3BlbkFuZFZlcmlmeSghY3JlYXRpb25DYWxsYmFjaywgZWMsIGVycm9yTWVzc2Fn
ZSkpIHsKICAgICAgICAgZGF0YWJhc2UtPmxvZ0Vycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOwot
ICAgICAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2UoZGF0
YWJhc2UuZ2V0KCkpOworICAgICAgICByZW1vdmVPcGVuRGF0YWJhc2UoZGF0YWJhc2UuZ2V0KCkp
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFn
ZXIoKS5zZXREYXRhYmFzZURldGFpbHMoY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgbmFtZSwg
ZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOworICAgIHNldERhdGFiYXNlRGV0YWlscyhjb250
ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7
CiAKICAgICBpZiAoZGF0YWJhc2UtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5nZXQoKSkg
ewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkludm9raW5nIHRoZSBjcmVhdGlvbiBjYWxsYmFj
ayBmb3IgZGF0YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdldCgpKTsKICAgICAgICAgY3JlYXRpb25D
YWxsYmFjay0+aGFuZGxlRXZlbnQoZGF0YWJhc2UuZ2V0KCkpOwogICAgIH0KIAotICAgIHJldHVy
biBkYXRhYmFzZTsKKyAgICByZXR1cm4gZGF0YWJhc2UucmVsZWFzZSgpOwogfQogCiBib29sIERh
dGFiYXNlTWFuYWdlcjo6aGFzT3BlbkRhdGFiYXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0KQogewotICAgIHJldHVybiBEYXRhYmFzZUNvbnRleHQ6Omhhc09wZW5EYXRhYmFzZXMo
Y29udGV4dCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpzZXRIYXNPcGVuRGF0YWJhc2Vz
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgRGF0YWJhc2VDb250ZXh0
Ojpmcm9tKGNvbnRleHQpLT5zZXRIYXNPcGVuRGF0YWJhc2VzKCk7CisgICAgUmVmUHRyPERhdGFi
YXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gZ2V0RXhpc3RpbmdEYXRhYmFzZUNvbnRleHQo
Y29udGV4dCk7CisgICAgaWYgKCFkYXRhYmFzZUNvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gZGF0YWJhc2VDb250ZXh0LT5tX2hhc09wZW5EYXRhYmFzZXM7CiB9CiAK
IHZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpzdG9wRGF0YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyKQogewot
ICAgIERhdGFiYXNlQ29udGV4dDo6c3RvcERhdGFiYXNlcyhjb250ZXh0LCBzeW5jaHJvbml6ZXIp
OworICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9IGdldEV4aXN0
aW5nRGF0YWJhc2VDb250ZXh0KGNvbnRleHQpOworICAgIGlmICghZGF0YWJhc2VDb250ZXh0IHx8
ICFkYXRhYmFzZUNvbnRleHQtPnN0b3BEYXRhYmFzZXMoc3luY2hyb25pemVyKSkKKyAgICAgICAg
aWYgKHN5bmNocm9uaXplcikKKyAgICAgICAgICAgIHN5bmNocm9uaXplci0+dGFza0NvbXBsZXRl
ZCgpOwogfQogCiBTdHJpbmcgRGF0YWJhc2VNYW5hZ2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlKFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRv
ZXNOb3RFeGlzdCkKQEAgLTI3Miw5ICszNTAsMTEgQEAgdm9pZCBEYXRhYmFzZU1hbmFnZXI6OmNs
b3NlRGF0YWJhc2VzSW1tZQogfQogI2VuZGlmIC8vIFBMQVRGT1JNKENIUk9NSVVNKQogCi12b2lk
IERhdGFiYXNlTWFuYWdlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQordm9pZCBEYXRhYmFzZU1hbmFnZXI6Omlu
dGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCkKIHsKLSAgICBtX3NlcnZlci0+aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChj
b250ZXh0KTsKKyAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQgPSBn
ZXRFeGlzdGluZ0RhdGFiYXNlQ29udGV4dChjb250ZXh0KTsKKyAgICBpZiAoZGF0YWJhc2VDb250
ZXh0KQorICAgICAgICBtX3NlcnZlci0+aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChj
b250ZXh0KTsKIH0KIAogYm9vbCBEYXRhYmFzZU1hbmFnZXI6OmNhbkVzdGFibGlzaERhdGFiYXNl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
TWFuYWdlci5oCShyZXZpc2lvbiAxNDEwNDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMyArMzAs
MTcgQEAKIAogI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaCIKICNpbmNsdWRlICJE
YXRhYmFzZUJhc2ljVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWJzdHJh
Y3REYXRhYmFzZVNlcnZlcjsKIGNsYXNzIERhdGFiYXNlOwogY2xhc3MgRGF0YWJhc2VDYWxsYmFj
azsKK2NsYXNzIERhdGFiYXNlQ29udGV4dDsKIGNsYXNzIERhdGFiYXNlTWFuYWdlckNsaWVudDsK
IGNsYXNzIERhdGFiYXNlU3luYzsKIGNsYXNzIERhdGFiYXNlVGFza1N5bmNocm9uaXplcjsKQEAg
LTU2LDExICs2MCwyNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0F2YWlsYWJsZSgpOwogICAgIHZv
aWQgc2V0SXNBdmFpbGFibGUoYm9vbCk7CiAKKyAgICAvLyBUaGlzIGdldHMgYSBEYXRhYmFzZUNv
bnRleHQgZm9yIHRoZSBzcGVjaWZpZWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dC4KKyAgICAvLyBJ
ZiBvbmUgZG9lc24ndCBhbHJlYWR5IGV4aXN0LCBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBvbmUuCisg
ICAgUGFzc1JlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGdldERhdGFiYXNlQ29udGV4dChTY3JpcHRF
eGVjdXRpb25Db250ZXh0Kik7CisKKyAgICAvLyBUaGVzZSAyIG1ldGhvZHMgYXJlIGZvciBEYXRh
YmFzZUNvbnRleHQgKHVuKXJlZ2lzdHJhdGlvbiwgYW5kIHNob3VsZCBvbmx5CisgICAgLy8gYmUg
Y2FsbGVkIGJ5IHRoZSBEYXRhYmFzZUNvbnRleHQgY29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3Iu
CisgICAgdm9pZCByZWdpc3RlckRhdGFiYXNlQ29udGV4dChEYXRhYmFzZUNvbnRleHQqKTsKKyAg
ICB2b2lkIHVucmVnaXN0ZXJEYXRhYmFzZUNvbnRleHQoRGF0YWJhc2VDb250ZXh0Kik7CisKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgdm9pZCBub3RpZnlEYXRhYmFzZUNvbnRleHRDb25zdHJ1
Y3RlZCgpOworICAgIHZvaWQgbm90aWZ5RGF0YWJhc2VDb250ZXh0RGVzdHJ1Y3RlZCgpOworI2Vs
c2UKKyAgICB2b2lkIG5vdGlmeURhdGFiYXNlQ29udGV4dENvbnN0cnVjdGVkKCkgeyB9CisgICAg
dm9pZCBub3RpZnlEYXRhYmFzZUNvbnRleHREZXN0cnVjdGVkKCkgeyB9CisjZW5kaWYKKwogICAg
IFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNz
UmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0
cjxEYXRhYmFzZVN5bmM+IG9wZW5EYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1Jl
ZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgYm9vbCBoYXNP
cGVuRGF0YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLSAgICB2b2lkIHNldEhhc09w
ZW5EYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogICAgIHZvaWQgc3RvcERhdGFi
YXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKik7
CiAKICAgICBTdHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCA9IHRydWUpOwpAQCAtODks
NyArMTA5LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xvc2VEYXRhYmFzZXNJbW1lZGlhdGVseShj
b25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAjZW5k
aWYgLy8gUExBVEZPUk0oQ0hST01JVU0pCiAKLSAgICB2b2lkIGludGVycnVwdEFsbERhdGFiYXNl
c0ZvckNvbnRleHQoY29uc3QgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIHZvaWQgaW50
ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAK
ICAgICBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgdm9pZCBhZGRPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRh
YmFzZSopOwpAQCAtMTAyLDkgKzEyMiwyMSBAQCBwcml2YXRlOgogICAgIERhdGFiYXNlTWFuYWdl
cigpOwogICAgIH5EYXRhYmFzZU1hbmFnZXIoKSB7IH0KIAorICAgIC8vIFRoaXMgZ2V0cyBhIERh
dGFiYXNlQ29udGV4dCBmb3IgdGhlIHNwZWNpZmllZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0IGlm
CisgICAgLy8gaXQgYWxyZWFkeSBleGlzdCBwcmV2aW91c2x5LiBPdGhlcndpc2UsIGl0IHJldHVy
bnMgMC4KKyAgICBQYXNzUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZ2V0RXhpc3RpbmdEYXRhYmFz
ZUNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworCisgICAgdHlwZWRlZiBIYXNoTWFw
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBEYXRhYmFzZUNvbnRleHQqLCBQdHJIYXNoPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqPiA+IENvbnRleHRNYXA7CisgICAgQ29udGV4dE1hcCBtX2NvbnRl
eHRNYXA7CisgICAgTXV0ZXggbV9jb250ZXh0TWFwTG9jazsKKwogICAgIEFic3RyYWN0RGF0YWJh
c2VTZXJ2ZXIqIG1fc2VydmVyOwogICAgIERhdGFiYXNlTWFuYWdlckNsaWVudCogbV9jbGllbnQ7
CiAgICAgYm9vbCBtX2RhdGFiYXNlSXNBdmFpbGFibGU7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
ICAgIGludCBtX2RhdGFiYXNlQ29udGV4dFJlZ2lzdGVyZWRDb3VudDsKKyAgICBpbnQgbV9kYXRh
YmFzZUNvbnRleHRJbnN0YW5jZUNvdW50OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
U3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVN5bmMuY3BwCShyZXZpc2lvbiAxNDEwNDkpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiRGF0YWJh
c2VDYWxsYmFjay5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQ29udGV4dC5oIgogI2luY2x1ZGUgIkRh
dGFiYXNlTWFuYWdlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTUUxFeGNl
cHRpb24uaCIKQEAgLTQ3LDkgKzQ4LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EYXRh
YmFzZVN5bmM6OkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAorRGF0YWJh
c2VTeW5jOjpEYXRhYmFzZVN5bmMoUGFzc1JlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNl
Q29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lv
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKLSAgICA6IEFic3RyYWN0RGF0YWJhc2UoY29u
dGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwg
U3luY0RhdGFiYXNlKQorICAgIDogQWJzdHJhY3REYXRhYmFzZShkYXRhYmFzZUNvbnRleHQsIG5h
bWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIFN5bmNEYXRh
YmFzZSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlU3luYy5oCShyZXZpc2lvbiAxNDEwNDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw3ICs0Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2s7
CiBjbGFzcyBTUUxUcmFuc2FjdGlvblN5bmM7CiBjbGFzcyBTUUxUcmFuc2FjdGlvblN5bmNDYWxs
YmFjazsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTZWN1cml0eU9yaWdp
bjsKIAogLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGNyZWF0ZWQgYW5kIHVz
ZWQgb25seSBvbiB0aGUgd29ya2VyJ3MgY29udGV4dCB0aHJlYWQuCkBAIC03NCw3ICs3Myw3IEBA
IHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VTeW5jKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRW
ZXJzaW9uLAorICAgIERhdGFiYXNlU3luYyhQYXNzUmVmUHRyPERhdGFiYXNlQ29udGV4dD4sIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCiAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1h
dGVkU2l6ZSk7CiAgICAgdm9pZCBydW5UcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25seSwgRXhjZXB0aW9uQ29kZSYpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
VGhyZWFkLmNwcAkocmV2aXNpb24gMTQxMDQ5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUy
LDEyIEBAIERhdGFiYXNlVGhyZWFkOjpEYXRhYmFzZVRocmVhZCgpCiAKIERhdGFiYXNlVGhyZWFk
Ojp+RGF0YWJhc2VUaHJlYWQoKQogewotICAgIC8vIEZJWE1FOiBBbnkgY2xlYW51cCByZXF1aXJl
ZCBoZXJlPyAgU2luY2UgdGhlIHRocmVhZCBkZWxldGVzIGl0c2VsZiBhZnRlciBydW5uaW5nIGl0
cyBkZXRhY2hlZCBjb3Vyc2UsIEkgZG9uJ3QgdGhpbmsgc28uICBMZXRzIGJlIHN1cmUuCisgICAg
Ly8gVGhlIERhdGFiYXNlVGhyZWFkIHdpbGwgb25seSBiZSBkZXN0cnVjdGVkIHdoZW4gYm90aCBp
dHMgb3duZXIKKyAgICAvLyBEYXRhYmFzZUNvbnRleHQgaGFzIGRlcmVmJ2VkIGl0LCBhbmQgdGhl
IGRhdGFiYXNlVGhyZWFkKCkgdGhyZWFkCisgICAgLy8gaGFzIGRlcmVmJ2VkIGl0c2VsZi4gVGhl
IERhdGFiYXNlQ29udGV4dCBkZXN0cnVjdG9yIHdpbGwgdGFrZQorICAgIC8vIGNhcmUgb2YgZW5z
dXJpbmcgdGhhdCBhIHRlcm1pbmF0aW9uIHJlcXVlc3QgaGFzIGJlZW4gaXNzdWUuIFRoZQorICAg
IC8vIHRlcm1pbmF0aW9uIHJlcXVlc3Qgd2lsbCB0cmlnZ2VyIGFuIG9yZGVybHkgc2h1dGRvd24g
b2YgdGhlIHRocmVhZCwgYW5kCisgICAgLy8gdGhlbiBkZXJlZiBpdHNlbGYuCiAgICAgQVNTRVJU
KHRlcm1pbmF0aW9uUmVxdWVzdGVkKCkpOwogfQogCkBAIC03MCw3ICs3NSw2IEBAIGJvb2wgRGF0
YWJhc2VUaHJlYWQ6OnN0YXJ0KCkKIAogdm9pZCBEYXRhYmFzZVRocmVhZDo6cmVxdWVzdFRlcm1p
bmF0aW9uKERhdGFiYXNlVGFza1N5bmNocm9uaXplciAqY2xlYW51cFN5bmMpCiB7Ci0gICAgQVNT
RVJUKCFtX2NsZWFudXBTeW5jKTsKICAgICBtX2NsZWFudXBTeW5jID0gY2xlYW51cFN5bmM7CiAg
ICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZVRocmVhZCAlcCB3YXMgYXNrZWQgdG8gdGVybWlu
YXRlXG4iLCB0aGlzKTsKICAgICBtX3F1ZXVlLmtpbGwoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAJKHJl
dmlzaW9uIDE0MTA0OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1
ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRhdGFi
YXNlQ29udGV4dC5oIgorI2luY2x1ZGUgIkRhdGFiYXNlTWFuYWdlci5oIgogI2luY2x1ZGUgIkRh
dGFiYXNlTWFuYWdlckNsaWVudC5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgpAQCAtMTY3LDcgKzE2OCw4IEBAIGJvb2wgRGF0YWJhc2VUcmFja2Vy
OjpjYW5Fc3RhYmxpc2hEYXRhYmEKIAogICAgIC8vIEdpdmUgdGhlIGNocm9tZSBjbGllbnQgYSBj
aGFuY2UgdG8gaW5jcmVhc2UgdGhlIHF1b3RhLgogICAgIC8vIERyb3AgYWxsIGxvY2tzIGJlZm9y
ZSBjYWxsaW5nIG91dDsgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZXknbGwgZG8uCi0gICAgRGF0YWJh
c2VDb250ZXh0Ojpmcm9tKGNvbnRleHQpLT5kYXRhYmFzZUV4Y2VlZGVkUXVvdGEobmFtZSwgRGF0
YWJhc2VEZXRhaWxzKG5hbWUuaXNvbGF0ZWRDb3B5KCksIGRpc3BsYXlOYW1lLmlzb2xhdGVkQ29w
eSgpLCBlc3RpbWF0ZWRTaXplLCAwKSk7CisgICAgUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZGF0
YWJhc2VDb250ZXh0ID0gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuZ2V0RGF0YWJhc2VDb250
ZXh0KGNvbnRleHQpOworICAgIGRhdGFiYXNlQ29udGV4dC0+ZGF0YWJhc2VFeGNlZWRlZFF1b3Rh
KG5hbWUsIERhdGFiYXNlRGV0YWlscyhuYW1lLmlzb2xhdGVkQ29weSgpLCBkaXNwbGF5TmFtZS5p
c29sYXRlZENvcHkoKSwgZXN0aW1hdGVkU2l6ZSwgMCkpOwogCiAgICAgTXV0ZXhMb2NrZXIgbG9j
a0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9B
Y3RpdmVET01PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BY3Rp
dmVET01PYmplY3QuY3BwCShyZXZpc2lvbiAxNDEwNDkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
QWN0aXZlRE9NT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsOCArNTQsMTcgQEAgQWN0
aXZlRE9NT2JqZWN0Ojp+QWN0aXZlRE9NT2JqZWN0KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
QVNTRVJUKG1fc3VzcGVuZElmTmVlZGVkQ2FsbGVkKTsKLSAgICBBU1NFUlQobV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LT53aWxsRGVzdHJveUFjdGl2ZURPTU9iamVjdCh0aGlzKTsKKworICAgIC8vIEFjdGl2
ZURPTU9iamVjdCBtYXkgYmUgaW5oZXJpdGVkIGJ5IGEgc3ViLWNsYXNzIHdob3NlIGxpZmUtY3lj
bGUKKyAgICAvLyBleGNlZWRzIHRoYXQgb2YgdGhlIGFzc29jaWF0ZWQgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC4gSW4gdGhvc2UgY2FzZXMsCisgICAgLy8gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
IHdvdWxkL3Nob3VsZCBoYXZlIGJlZW4gbnVsbGlmeSBieQorICAgIC8vIENvbnRleHREZXN0cnVj
dGlvbk9ic2VydmVyOjpjb250ZXh0RGVzdHJveWVkKCkgKHdoaWNoIHdlIGltcGxlbWVudCAvCisg
ICAgLy8gaW5oZXJpdCkuIEhlbmNlLCB3ZSBzaG91bGQgZW5zdXJlIHRoYXQgdGhpcyBpcyBub3Qg
MCBiZWZvcmUgdXNlIGl0CisgICAgLy8gaGVyZS4KKyAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0KSB7CisgICAgICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29u
dGV4dFRocmVhZCgpKTsKKyAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT53aWxsRGVz
dHJveUFjdGl2ZURPTU9iamVjdCh0aGlzKTsKKyAgICB9CiB9CiAKIHZvaWQgQWN0aXZlRE9NT2Jq
ZWN0OjpzdXNwZW5kSWZOZWVkZWQoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185182</attachid>
            <date>2013-01-29 00:15:07 -0800</date>
            <delta_ts>2013-01-29 13:49:08 -0800</delta_ts>
            <desc>svn up&apos;ed to fix patch apply problem.</desc>
            <filename>bug-107784.patch</filename>
            <type>text/plain</type>
            <size>35293</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTA3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBACisyMDEzLTAxLTI5ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgRGF0YWJhc2VDb250ZXh0
IGxvb2t1cCB0byBiZSB0aHJlYWQtc2FmZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwNzc4NC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBEYXRhYmFzZUNvbnRleHQgd2lsbCBubyBsb25nZXIgYmUgYSBT
dXBwbGVtZW50IG9mIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAgICAgIEluc3RlYWQgd2Ug
d2lsbCBtYWludGFpbiBhIG11dGV4IGd1YXJkZWQgY29udGV4dE1hcCBpbiB0aGUgRGF0YWJhc2VN
YW5hZ2VyCisgICAgICAgIHdoaWNoIG1hcHMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dHMgdG8gRGF0
YWJhc2VDb250ZXh0cy4KKworICAgICAgICBBbHNvIGNsZWFuZWQgdXAgdGhlIHNodXRkb3duIG1l
Y2hhbmlzbSBvZiB0aGUgRGF0YWJhc2VDb250ZXh0LAorICAgICAgICBEYXRhYmFzZVRocmVhZCwg
YW5kIERhdGFiYXNlcyB3aGVuIHRoZWlyIG93bmVyIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKKyAg
ICAgICAgZGVzdHJ1Y3RzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIE1v
ZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBYnN0cmFjdERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U6OmRhdGFiYXNlQ29udGV4dCk6CisgICAgICAgIChBYnN0cmFjdERhdGFiYXNl
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEYXRhYmFzZSk6
CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNvbnRleHQ6OkRhdGFi
YXNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNvbnRleHQ6On5EYXRhYmFz
ZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDb250ZXh0Ojpjb250ZXh0RGVz
dHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQ29udGV4dDo6c3RvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZUNvbnRleHQ6OmRhdGFiYXNlVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlQ29udGV4dDo6c3RvcERhdGFiYXNlcyk6CisgICAgICAgICogTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuaDoKKyAgICAgICAgKERhdGFiYXNlQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNvbnRleHQ6OnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDb250ZXh0OjpoYXNPcGVuRGF0
YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQ29udGV4dDo6c3RvcERhdGFiYXNl
cyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6RGF0YWJhc2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlTWFuYWdlcjo6Z2V0RXhpc3RpbmdEYXRhYmFzZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OmdldERhdGFi
YXNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OnJlZ2lzdGVy
RGF0YWJhc2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6dW5y
ZWdpc3RlckRhdGFiYXNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFn
ZXI6Om5vdGlmeURhdGFiYXNlQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlTWFuYWdlcjo6bm90aWZ5RGF0YWJhc2VDb250ZXh0RGVzdHJ1Y3RlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZVN5bmMpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpoYXNPcGVuRGF0YWJhc2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlTWFuYWdlcjo6c3RvcERhdGFiYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZU1hbmFnZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKERhdGFiYXNlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZU1hbmFnZXI6Om5vdGlmeURhdGFiYXNlQ29udGV4dENvbnN0cnVjdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6bm90aWZ5RGF0YWJhc2VDb250ZXh0RGVzdHJ1Y3Rl
ZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpEYXRhYmFzZVN5bmMpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKERhdGFiYXNlU3luYyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6fkRhdGFi
YXNlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpyZXF1ZXN0VGVy
bWluYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0
YWJhc2UpOgorICAgICAgICAqIGRvbS9BY3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QWN0aXZlRE9NT2JqZWN0Ojp+QWN0aXZlRE9NT2JqZWN0KToKKwogMjAxMy0wMS0yOCAg
QWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIEhUTUxEb2N1bWVudFBh
cnNlciBzaG91bGQgaG9sZCB0aGUgSFRNTFRva2VuIHVzaW5nIGFuIE93blB0cgpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0
YWJhc2UuY3BwCShyZXZpc2lvbiAxNDEwNzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTAg
KzE3NCwxMCBAQCBjb25zdCBjaGFyKiBBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZUluCiAgICAg
cmV0dXJuIGluZm9UYWJsZU5hbWU7CiB9CiAKLUFic3RyYWN0RGF0YWJhc2U6OkFic3RyYWN0RGF0
YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKK0Fic3RyYWN0RGF0YWJhc2U6OkFic3Ry
YWN0RGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwg
dW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBEYXRhYmFzZVR5cGUgZGF0YWJhc2VUeXBlKQot
ICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2RhdGFiYXNl
Q29udGV4dChEYXRhYmFzZUNvbnRleHQ6OmZyb20oY29udGV4dCkpCisgICAgOiBtX2RhdGFiYXNl
Q29udGV4dChkYXRhYmFzZUNvbnRleHQpCisgICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
bV9kYXRhYmFzZUNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKICAgICAsIG1fbmFt
ZShuYW1lLmlzb2xhdGVkQ29weSgpKQogICAgICwgbV9leHBlY3RlZFZlcnNpb24oZXhwZWN0ZWRW
ZXJzaW9uLmlzb2xhdGVkQ29weSgpKQogICAgICwgbV9kaXNwbGF5TmFtZShkaXNwbGF5TmFtZS5p
c29sYXRlZENvcHkoKSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBBYnN0cmFjdERhdGFiYXNlOjpBYnN0
cmFjdERhdGFiYXNlKFNjcmlwCiAgICAgLCBtX25ldyhmYWxzZSkKICAgICAsIG1faXNTeW5jRGF0
YWJhc2UoZGF0YWJhc2VUeXBlID09IFN5bmNEYXRhYmFzZSkKIHsKLSAgICBBU1NFUlQoY29udGV4
dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIEFTU0VSVChtX2RhdGFiYXNlQ29udGV4dC0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CiAgICAgbV9jb250ZXh0
VGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5
T3JpZ2luKCktPmlzb2xhdGVkQ29weSgpOwogCiAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXIgPSBE
YXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZShpbmZvVGFibGVOYW1lKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5o
CShyZXZpc2lvbiAxNDEwNzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0Fic3RyYWN0RGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgIkRhdGFiYXNlRGV0YWlscy5oIgogI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKQEAgLTg2LDcgKzg3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBtYXJr
QXNEZWxldGVkQW5kQ2xvc2UoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRpYXRl
bHkoKSA9IDA7CiAKLSAgICBEYXRhYmFzZUNvbnRleHQqIGRhdGFiYXNlQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YWJhc2VDb250ZXh0OyB9CisgICAgRGF0YWJhc2VDb250ZXh0KiBkYXRh
YmFzZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlQ29udGV4dC5nZXQoKTsgfQog
CiBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIENoYW5nZVZlcnNpb25XcmFwcGVyOwpAQCAt
MTAwLDcgKzEwMSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgU3luY0RhdGFiYXNlCiAgICAgfTsK
IAotICAgIEFic3RyYWN0RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCisgICAgQWJzdHJhY3RE
YXRhYmFzZShQYXNzUmVmUHRyPERhdGFiYXNlQ29udGV4dD4sIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFi
YXNlVHlwZSk7CiAKICAgICB2b2lkIGNsb3NlRGF0YWJhc2UoKTsKQEAgLTEyNyw4ICsxMjgsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRhdGFiYXNlSW5mb1RhYmxlTmFt
ZSgpOwogCiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX2NvbnRleHRUaHJlYWRTZWN1cml0
eU9yaWdpbjsKKyAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBtX2RhdGFiYXNlQ29udGV4dDsg
Ly8gQXNzb2NpYXRlZCB3aXRoIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC4KICAgICBSZWZQdHI8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAgIERh
dGFiYXNlQ29udGV4dCogbV9kYXRhYmFzZUNvbnRleHQ7IC8vIE93bmVkIGJ5IG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC4KIAogICAgIFN0cmluZyBtX25hbWU7CiAgICAgU3RyaW5nIG1fZXhwZWN0
ZWRWZXJzaW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDE0MTA3MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRGF0YWJhc2U6OkRhdGFiYXNlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSkKLSAgICA6IEFic3RyYWN0RGF0YWJhc2UoY29udGV4dCwgbmFtZSwg
ZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgQXN5bmNEYXRhYmFz
ZSkKK0RhdGFiYXNlOjpEYXRhYmFzZShQYXNzUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZGF0YWJh
c2VDb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJz
aW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNp
emUpCisgICAgOiBBYnN0cmFjdERhdGFiYXNlKGRhdGFiYXNlQ29udGV4dCwgbmFtZSwgZXhwZWN0
ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgQXN5bmNEYXRhYmFzZSkKICAg
ICAsIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzKGZhbHNlKQogICAgICwgbV9pc1RyYW5zYWN0aW9u
UXVldWVFbmFibGVkKHRydWUpCiAgICAgLCBtX2RlbGV0ZWQoZmFsc2UpCkBAIC03NCw3ICs3NCw3
IEBAIERhdGFiYXNlOjpEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXgKICAgICBtX2RhdGFi
YXNlVGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+
aXNvbGF0ZWRDb3B5KCk7CiAKICAgICBTY3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFk
aW5nKCk7Ci0gICAgQVNTRVJUKGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKTsK
KyAgICBBU1NFUlQobV9kYXRhYmFzZUNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCkpOwogfQogCiBj
bGFzcyBEZXJlZkNvbnRleHRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2sgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2UuaAkocmV2aXNpb24gMTQxMDcwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2s7Ci1jbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBTUUxUcmFuc2FjdGlv
bjsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s7CkBAIC04Nyw3ICs4Niw3IEBAIHByaXZh
dGU6CiAgICAgY2xhc3MgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2s7CiAgICAgY2xhc3MgRGF0YWJh
c2VUYWJsZU5hbWVzVGFzazsKIAotICAgIERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAorICAg
IERhdGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwogICAgIHZvaWQg
cnVuVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LAogICAgICAgICAgICAgICAgICAgICAg
ICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxT
UUxUcmFuc2FjdGlvbldyYXBwZXI+LCBib29sIHJlYWRPbmx5KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5jcHAJ
KHJldmlzaW9uIDE0MTA3MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNDQgKzQ0LDc5IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgY2hhciogRGF0YWJhc2VDb250ZXh0OjpzdXBw
bGVtZW50TmFtZSgpCi17Ci0gICAgcmV0dXJuICJEYXRhYmFzZUNvbnRleHQiOwotfQotCi1EYXRh
YmFzZUNvbnRleHQqIERhdGFiYXNlQ29udGV4dDo6ZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGcm9t
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PERhdGFiYXNlQ29udGV4dCo+KFN1cHBsZW1lbnQ8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD46
OmZyb20oY29udGV4dCwgc3VwcGxlbWVudE5hbWUoKSkpOwotfQotCiBEYXRhYmFzZUNvbnRleHQ6
OkRhdGFiYXNlQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQotICAgIDog
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCisgICAgOiBBY3RpdmVET01PYmplY3Qo
Y29udGV4dCwgdGhpcykKICAgICAsIG1faGFzT3BlbkRhdGFiYXNlcyhmYWxzZSkKKyAgICAsIG1f
aXNSZWdpc3RlcmVkKHRydWUpIC8vIHdpbGwgcmVnaXN0ZXIgb24gY29uc3RydWN0aW9uIGJlbG93
LgorICAgICwgbV9oYXNSZXF1ZXN0ZWRUZXJtaW5hdGlvbihmYWxzZSkKIHsKKyAgICAvLyBGb3Ig
ZGVidWcgYWNjb3VudGluZyBvbmx5LiBXZSBtdXN0IGRvIHRoaXMgYmVmb3JlIHdlIHJlZ2lzdGVy
IHRoZQorICAgIC8vIGluc3RhbmNlLiBUaGUgYXNzZXJ0aW9ucyBhc3N1bWUgdGhpcy4KKyAgICBE
YXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5ub3RpZnlEYXRhYmFzZUNvbnRleHRDb25zdHJ1Y3Rl
ZCgpOyAKKyAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5yZWdpc3RlckRhdGFiYXNlQ29u
dGV4dCh0aGlzKTsKKworICAgIC8vIEFjdGl2ZURPTU9iamVjdCBleHBlY3RzIHRoaXMgdG8gYmUg
Y2FsbGVkIHRvIHNldCBpbnRlcm5hbCBmbGFncy4KKyAgICBzdXNwZW5kSWZOZWVkZWQoKTsKIH0K
IAogRGF0YWJhc2VDb250ZXh0Ojp+RGF0YWJhc2VDb250ZXh0KCkKIHsKKyAgICAvLyBNYWtlIHN1
cmUgdGhhdCB0aGUgRGF0YWJhc2VUaHJlYWQgaXMgc3RvcHBlZCBiZWZvcmUgd2UgZGVzdHJ1Y3Qu
CisgICAgc3RvcERhdGFiYXNlcygpOworCisgICAgLy8gVGhvdWdoIHdlIGluaXRpYXRlIHRlcm1p
bmF0aW9uIG9mIHRoZSBEYXRhYmFzZVRocmVhZCBpbiBzdG9wRGF0YWJhc2VzKCksCisgICAgLy8g
d2UgY2FuJ3QgY2xlYXIgdGhlIG1fZGF0YWJhc2VUaHJlYWQgcmVmIHRpbGwgaGVyZSBpbiB0aGUg
ZGVzdHJ1Y3Rvci4KKyAgICAvLyBUaGlzIGlzIGJlY2F1c2UgdGhlIERhdGFiYXNlcyB0aGF0IGFy
ZSBtYW5hZ2VkIGJ5IERhdGFiYXNlVGhyZWFkIHN0aWxsCisgICAgLy8gcmVsaWVzIG9uIHRoaXMg
cmVmIGJldHdlZW4gdGhlIGNvbnRleHQgYW5kIHRoZSB0aHJlYWQgdG8gZXhlY3V0ZSB0aGUKKyAg
ICAvLyB0YXNrIGZvciBjbG9zaW5nIHRoZSBkYXRhYmFzZS4gQnkgdGhlIHRpbWUgd2UgZ2V0IHRv
IHRoaXMgZGVzdHJ1Y3RvciwKKyAgICAvLyB3ZSdyZSBndWFyYW50ZWVkIHRoYXQgdGhlIGRhdGFi
YXNlcyBhcmUgZGVzdHJ1Y3RlZCAod2hpY2ggaXMgd2h5IG91ciByZWYKKyAgICAvLyBjb3VudCBp
cyAwIGFuZCB3ZSdyZSBkZXN0cnVjdGluZykuIFNvLCBpdCdzIG5vdyBzYWZlIHRvIGRlcmVmIHRo
ZSB0aHJlYWQuCiAgICAgaWYgKG1fZGF0YWJhc2VUaHJlYWQpIHsKICAgICAgICAgQVNTRVJUKG1f
ZGF0YWJhc2VUaHJlYWQtPnRlcm1pbmF0aW9uUmVxdWVzdGVkKCkpOwogICAgICAgICBtX2RhdGFi
YXNlVGhyZWFkID0gMDsKICAgICB9Ci19CiAKLURhdGFiYXNlQ29udGV4dCogRGF0YWJhc2VDb250
ZXh0Ojpmcm9tKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgLy8gRm9yIGRl
YnVnIGFjY291bnRpbmcgb25seS4gV2UgbXVzdCBjYWxsIHRoaXMgbGFzdC4gVGhlIGFzc2VydGlv
bnMgYXNzdW1lCisgICAgLy8gdGhpcy4KKyAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5u
b3RpZnlEYXRhYmFzZUNvbnRleHREZXN0cnVjdGVkKCk7Cit9CisKKy8vIFRoaXMgaXMgY2FsbGVk
IGlmIHRoZSBhc3NvY2lhdGVkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaXMgZGVzdHJ1Y3Rpbmcg
d2hpbGUKKy8vIHdlJ3JlIHN0aWxsIGFzc29jaWF0ZWQgd2l0aCBpdC4gVGhhdCdzIG91ciBjdWUg
dG8gZGlzYXNzb2NpYXRlIGFuZCBzaHV0ZG93bi4KKy8vIFRvIGRvIHRoaXMsIHdlIHN0b3AgdGhl
IGRhdGFiYXNlIGFuZCBsZXQgZXZlcnl0aGluZyBzaHV0ZG93biBuYXR1cmFsbHkKKy8vIGJlY2F1
c2UgdGhlIGRhdGFiYXNlIGNsb3NpbmcgcHJvY2VzcyBtYXkgc3RpbGwgbWFrZSB1c2Ugb2YgdGhp
cyBjb250ZXh0LgorLy8gSXQgaXMgbm90IHNhZmUgdG8ganVzdCBkZWxldGUgdGhlIGNvbnRleHQg
aGVyZS4KK3ZvaWQgRGF0YWJhc2VDb250ZXh0Ojpjb250ZXh0RGVzdHJveWVkKCkKK3sKKyAgICBz
dG9wRGF0YWJhc2VzKCk7CisKKyAgICAvLyBOb3JtYWxseSwgd2lsbERlc3Ryb3lBY3RpdmVET01P
YmplY3QoKSBpcyBjYWxsZWQgaW4gfkFjdGl2ZURPTU9iamVjdCgpLgorICAgIC8vIEhvd2V2ZXIs
IHdlJ3JlIGhlcmUgYmVjYXVzZSB0aGUgZGVzdHJ1Y3RvciBoYXNuJ3QgYmVlbiBjYWxsZWQsIGFu
ZCB0aGUKKyAgICAvLyBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHdlJ3JlIGFzc29jaWF0ZWQgd2l0
aCBpcyBhYm91dCB0byBiZSBkZXN0cnVjdGVkLgorICAgIC8vIFNvLCBnbyBhaGVhZCBhbiB1bnJl
Z2lzdGVyIHNlbGYgZnJvbSB0aGUgQWN0aXZlRE9NT2JqZWN0IGxpc3QsIGFuZAorICAgIC8vIHNl
dCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgdG8gMCBzbyB0aGF0IH5BY3RpdmVET01PYmplY3Qo
KSBkb2Vzbid0CisgICAgLy8gdHJ5IHRvIGRvIHNvIGFnYWluLgorICAgIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+d2lsbERlc3Ryb3lBY3RpdmVET01PYmplY3QodGhpcyk7CisgICAgbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0ID0gMDsKK30KKworLy8gc3RvcCgpIGlzIGZyb20gc3RvcEFjdGl2
ZURPTU9iamVjdHMoKSB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgb3duZXIgRnJhbWUKKy8vIG9y
IFdvcmtlclRocmVhZCBpcyBzaHV0dGluZyBkb3duLiBJbml0aWF0ZSB0aGUgb3JkZXJseSBzaHV0
ZG93biBieSBzdG9wcGluZworLy8gdGhlIGFzc29jaWF0ZWQgZGF0YWJhc2VzLgordm9pZCBEYXRh
YmFzZUNvbnRleHQ6OnN0b3AoKQogewotICAgIERhdGFiYXNlQ29udGV4dCogc3VwcGxlbWVudCA9
IGV4aXN0aW5nRGF0YWJhc2VDb250ZXh0RnJvbShjb250ZXh0KTsKLSAgICBpZiAoIXN1cHBsZW1l
bnQpIHsKLSAgICAgICAgc3VwcGxlbWVudCA9IG5ldyBEYXRhYmFzZUNvbnRleHQoY29udGV4dCk7
Ci0gICAgICAgIHByb3ZpZGVUbyhjb250ZXh0LCBzdXBwbGVtZW50TmFtZSgpLCBhZG9wdFB0cihz
dXBwbGVtZW50KSk7Ci0gICAgICAgIEFTU0VSVChzdXBwbGVtZW50ID09IGV4aXN0aW5nRGF0YWJh
c2VDb250ZXh0RnJvbShjb250ZXh0KSk7Ci0gICAgfQotICAgIHJldHVybiBzdXBwbGVtZW50Owor
ICAgIHN0b3BEYXRhYmFzZXMoKTsKIH0KIAogRGF0YWJhc2VUaHJlYWQqIERhdGFiYXNlQ29udGV4
dDo6ZGF0YWJhc2VUaHJlYWQoKQogewogICAgIGlmICghbV9kYXRhYmFzZVRocmVhZCAmJiAhbV9o
YXNPcGVuRGF0YWJhc2VzKSB7CisgICAgICAgIC8vIEl0J3MgT0sgdG8gYXNrIGZvciB0aGUgbV9k
YXRhYmFzZVRocmVhZCBhZnRlciB3ZSd2ZSByZXF1ZXN0ZWQKKyAgICAgICAgLy8gdGVybWluYXRp
b24gYmVjYXVzZSB3ZSdyZSBzdGlsbCB1c2luZyBpdCB0byBleGVjdXRlIHRoZSBjbG9zaW5nCisg
ICAgICAgIC8vIG9mIHRoZSBkYXRhYmFzZS4gSG93ZXZlciwgaXQgaXMgTk9UIE9LIHRvIGNyZWF0
ZSBhIG5ldyB0aHJlYWQKKyAgICAgICAgLy8gYWZ0ZXIgd2UndmUgcmVxdWVzdGVkIHRlcm1pbmF0
aW9uLgorICAgICAgICBBU1NFUlQoIW1faGFzUmVxdWVzdGVkVGVybWluYXRpb24pOworCiAgICAg
ICAgIC8vIENyZWF0ZSB0aGUgZGF0YWJhc2UgdGhyZWFkIG9uIGZpcnN0IHJlcXVlc3QgLSBidXQg
bm90IGlmIGF0IGxlYXN0IG9uZSBkYXRhYmFzZSB3YXMgYWxyZWFkeSBvcGVuZWQsCiAgICAgICAg
IC8vIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHdlIGFscmVhZHkgaGFkIGEgZGF0YWJhc2UgdGhyZWFk
IGFuZCB0ZXJtaW5hdGVkIGl0IGFuZCBzaG91bGQgbm90IGNyZWF0ZSBhbm90aGVyLgogICAgICAg
ICBtX2RhdGFiYXNlVGhyZWFkID0gRGF0YWJhc2VUaHJlYWQ6OmNyZWF0ZSgpOwpAQCAtOTIsMjYg
KzEyNywxOSBAQCBEYXRhYmFzZVRocmVhZCogRGF0YWJhc2VDb250ZXh0OjpkYXRhYmFzCiAgICAg
cmV0dXJuIG1fZGF0YWJhc2VUaHJlYWQuZ2V0KCk7CiB9CiAKLWJvb2wgRGF0YWJhc2VDb250ZXh0
OjpoYXNPcGVuRGF0YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCitib29s
IERhdGFiYXNlQ29udGV4dDo6c3RvcERhdGFiYXNlcyhEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIq
IGNsZWFudXBTeW5jKQogewotICAgIC8vIFdlIGRvbid0IHVzZSBEYXRhYmFzZUNvbnRleHQ6OmZy
b20gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGNhdXNlCi0gICAgLy8gRGF0YWJhc2VDb250ZXh0
IHRvIGJlIGFsbG9jYXRlZCBpZiB3ZSBkb24ndCBoYXZlIG9uZSBhbHJlYWR5LgotICAgIERhdGFi
YXNlQ29udGV4dCogZGF0YWJhc2VDb250ZXh0ID0gZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGcm9t
KGNvbnRleHQpOwotICAgIGlmICghZGF0YWJhc2VDb250ZXh0KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIGRhdGFiYXNlQ29udGV4dC0+bV9oYXNPcGVuRGF0YWJhc2VzOwotfQot
Ci12b2lkIERhdGFiYXNlQ29udGV4dDo6c3RvcERhdGFiYXNlcyhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNsZWFudXBTeW5jKQotewot
ICAgIC8vIFdlIGRvbid0IHVzZSBEYXRhYmFzZUNvbnRleHQ6OmZyb20gYmVjYXVzZSB3ZSBkb24n
dCB3YW50IHRvIGNhdXNlCi0gICAgLy8gRGF0YWJhc2VDb250ZXh0IHRvIGJlIGFsbG9jYXRlZCBp
ZiB3ZSBkb24ndCBoYXZlIG9uZSBhbHJlYWR5LgotICAgIERhdGFiYXNlQ29udGV4dCogZGF0YWJh
c2VDb250ZXh0ID0gZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGcm9tKGNvbnRleHQpOwotCi0gICAg
aWYgKGRhdGFiYXNlQ29udGV4dCAmJiBkYXRhYmFzZUNvbnRleHQtPm1fZGF0YWJhc2VUaHJlYWQp
Ci0gICAgICAgIGRhdGFiYXNlQ29udGV4dC0+bV9kYXRhYmFzZVRocmVhZC0+cmVxdWVzdFRlcm1p
bmF0aW9uKGNsZWFudXBTeW5jKTsKLSAgICBlbHNlIGlmIChjbGVhbnVwU3luYykKLSAgICAgICAg
Y2xlYW51cFN5bmMtPnRhc2tDb21wbGV0ZWQoKTsKKyAgICBpZiAobV9pc1JlZ2lzdGVyZWQpIHsK
KyAgICAgICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkudW5yZWdpc3RlckRhdGFiYXNlQ29u
dGV4dCh0aGlzKTsKKyAgICAgICAgbV9pc1JlZ2lzdGVyZWQgPSBmYWxzZTsKKyAgICB9CisKKyAg
ICBpZiAobV9kYXRhYmFzZVRocmVhZCAmJiAhbV9oYXNSZXF1ZXN0ZWRUZXJtaW5hdGlvbikgewor
ICAgICAgICBtX2RhdGFiYXNlVGhyZWFkLT5yZXF1ZXN0VGVybWluYXRpb24oY2xlYW51cFN5bmMp
OworICAgICAgICBtX2hhc1JlcXVlc3RlZFRlcm1pbmF0aW9uID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBEYXRhYmFzZUNv
bnRleHQ6OmFsbG93RGF0YWJhc2VBY2Nlc3MoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5oCShyZXZpc2lv
biAxNDEwNzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwxMSBAQAogCiAjaWYgRU5BQkxF
KFNRTF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUg
IkRhdGFiYXNlRGV0YWlscy5oIgogI2luY2x1ZGUgIlN1cHBsZW1lbnRhYmxlLmgiCisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDMxICs0MywzNyBAQCBjbGFzcyBEYXRhYmFzZVRhc2tT
eW5jaHJvbml6ZXI7CiBjbGFzcyBEYXRhYmFzZVRocmVhZDsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ7CiAKLWNsYXNzIERhdGFiYXNlQ29udGV4dCA6IHB1YmxpYyBTdXBwbGVtZW50PFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHsKK2NsYXNzIERhdGFiYXNlQ29udGV4dCA6IHB1YmxpYyBS
ZWZDb3VudGVkPERhdGFiYXNlQ29udGV4dD4sIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6CiAg
ICAgdmlydHVhbCB+RGF0YWJhc2VDb250ZXh0KCk7Ci0gICAgc3RhdGljIERhdGFiYXNlQ29udGV4
dCogZnJvbShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKKyAgICAvLyBGb3IgbGlmZS1jeWNs
ZSBtYW5hZ2VtZW50IChpbmhlcml0ZWQgZnJvbSBBY3RpdmVET01PYmplY3QpOgorICAgIHZpcnR1
YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKwor
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB7IHJl
dHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7IH0KICAgICBEYXRhYmFzZVRocmVhZCogZGF0
YWJhc2VUaHJlYWQoKTsKIAogICAgIHZvaWQgc2V0SGFzT3BlbkRhdGFiYXNlcygpIHsgbV9oYXNP
cGVuRGF0YWJhc2VzID0gdHJ1ZTsgfQotCi0gICAgc3RhdGljIGJvb2wgaGFzT3BlbkRhdGFiYXNl
cyhTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgYm9vbCBoYXNPcGVuRGF0YWJhc2VzKCkg
eyByZXR1cm4gbV9oYXNPcGVuRGF0YWJhc2VzOyB9CiAKICAgICAvLyBXaGVuIHRoZSBkYXRhYmFz
ZSBjbGVhbnVwIGlzIGRvbmUsIGNsZWFudXBTeW5jIHdpbGwgYmUgc2lnbmFsbGVkLgotICAgIHN0
YXRpYyB2b2lkIHN0b3BEYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIERhdGFiYXNl
VGFza1N5bmNocm9uaXplciopOworICAgIGJvb2wgc3RvcERhdGFiYXNlcyhEYXRhYmFzZVRhc2tT
eW5jaHJvbml6ZXIqKTsKIAogICAgIGJvb2wgYWxsb3dEYXRhYmFzZUFjY2VzcygpIGNvbnN0Owog
ICAgIHZvaWQgZGF0YWJhc2VFeGNlZWRlZFF1b3RhKGNvbnN0IFN0cmluZyYgbmFtZSwgRGF0YWJh
c2VEZXRhaWxzKTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBEYXRhYmFzZUNvbnRleHQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCopOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50
TmFtZSgpOwotICAgIHN0YXRpYyBEYXRhYmFzZUNvbnRleHQqIGV4aXN0aW5nRGF0YWJhc2VDb250
ZXh0RnJvbShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKLSAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgdm9pZCBzdG9wRGF0YWJhc2Vz
KCkgeyBzdG9wRGF0YWJhc2VzKDApOyB9CisKICAgICBSZWZQdHI8RGF0YWJhc2VUaHJlYWQ+IG1f
ZGF0YWJhc2VUaHJlYWQ7CiAgICAgYm9vbCBtX2hhc09wZW5EYXRhYmFzZXM7IC8vIFRoaXMgbmV2
ZXIgY2hhbmdlcyBiYWNrIHRvIGZhbHNlLCBldmVuIGFmdGVyIHRoZSBkYXRhYmFzZSB0aHJlYWQg
aXMgY2xvc2VkLgorICAgIGJvb2wgbV9pc1JlZ2lzdGVyZWQ7CisgICAgYm9vbCBtX2hhc1JlcXVl
c3RlZFRlcm1pbmF0aW9uOworCisgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlTWFuYWdlcjsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAJKHJldmlzaW9uIDE0
MTA3MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5h
Z2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRhdGFi
YXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJEYXRhYmFzZUNvbnRleHQuaCIKICNpbmNsdWRlICJE
YXRhYmFzZVN5bmMuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRhc2suaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JEYXRhYmFzZUluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCkBAIC01MCw2ICs1MSw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIERhdGFiYXNlTWFuYWdlciYgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2Vy
KCkKIHsKICAgICBzdGF0aWMgRGF0YWJhc2VNYW5hZ2VyKiBkYk1hbmFnZXIgPSAwOworICAgIC8v
IEZJWE1FOiBUaGUgZm9sbG93aW5nIGlzIHZ1bG5lcmFibGUgdG8gYSByYWNlIGJldHdlZW4gdGhy
ZWFkcy4gTmVlZCB0bworICAgIC8vIGltcGxlbWVudCBhIHRocmVhZCBzYWZlIG9uLWZpcnN0LXVz
ZSBzdGF0aWMgaW5pdGlhbGl6ZXIuCiAgICAgaWYgKCFkYk1hbmFnZXIpCiAgICAgICAgIGRiTWFu
YWdlciA9IG5ldyBEYXRhYmFzZU1hbmFnZXIoKTsKIApAQCAtNTksNiArNjIsMTAgQEAgRGF0YWJh
c2VNYW5hZ2VyJiBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZQogRGF0YWJhc2VNYW5hZ2VyOjpEYXRh
YmFzZU1hbmFnZXIoKQogICAgIDogbV9jbGllbnQoMCkKICAgICAsIG1fZGF0YWJhc2VJc0F2YWls
YWJsZSh0cnVlKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAsIG1fZGF0YWJhc2VDb250ZXh0
UmVnaXN0ZXJlZENvdW50KDApCisgICAgLCBtX2RhdGFiYXNlQ29udGV4dEluc3RhbmNlQ291bnQo
MCkKKyNlbmRpZgogewogI2lmIFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQogICAgIG1fc2VydmVy
ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPmRhdGFiYXNlU3RyYXRlZ3koKS0+Z2V0RGF0YWJhc2VT
ZXJ2ZXIoKTsKQEAgLTEyMiwyNiArMTI5LDk1IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERhdGFi
YXNlQ2FsbGJhY2s+IG1fY3JlYXRpb25DYWxsYmFjazsKIH07CiAKK1Bhc3NSZWZQdHI8RGF0YWJh
c2VDb250ZXh0PiBEYXRhYmFzZU1hbmFnZXI6OmdldEV4aXN0aW5nRGF0YWJhc2VDb250ZXh0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fY29udGV4dE1hcExvY2spOworCisgICAgQVNTRVJUKG1fZGF0YWJhc2VDb250ZXh0UmVnaXN0
ZXJlZENvdW50ID49IDApOworICAgIEFTU0VSVChtX2RhdGFiYXNlQ29udGV4dEluc3RhbmNlQ291
bnQgPj0gMCk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VDb250ZXh0UmVnaXN0ZXJlZENvdW50IDw9
IG1fZGF0YWJhc2VDb250ZXh0SW5zdGFuY2VDb3VudCk7CisKKyAgICBSZWZQdHI8RGF0YWJhc2VD
b250ZXh0PiBkYXRhYmFzZUNvbnRleHQgPSBhZG9wdFJlZihtX2NvbnRleHRNYXAuZ2V0KGNvbnRl
eHQpKTsKKyAgICBpZiAoZGF0YWJhc2VDb250ZXh0KSB7CisgICAgICAgIC8vIElmIHdlJ3JlIGlu
c3RhbnRpYXRpbmcgYSBuZXcgRGF0YWJhc2VDb250ZXh0LCB0aGUgbmV3IGluc3RhbmNlIHdvdWxk
CisgICAgICAgIC8vIGNhcnJ5IGEgbmV3IHJlZkNvdW50IG9mIDEuIFRoZSBjbGllbnQgZXhwZWN0
cyB0aGlzIGFuZCB3aWxsIHNpbXBseQorICAgICAgICAvLyBhZG9wdFJlZiB0aGUgZGF0YWJhc2VD
b250ZXh0IHdpdGhvdXQgcmVmJ2luZyBpdC4KKyAgICAgICAgLy8gICAgIEhvd2V2ZXIsIGluc3Rl
YWQgb2YgaW5zdGFudGlhdGluZyBhIG5ldyBpbnN0YW5jZSwgd2UncmUgcmV1c2luZworICAgICAg
ICAvLyBhbiBleGlzdGluZyBvbmUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3BlY2lmaWVkIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAgICAgIC8vIEhlbmNlLCB0aGF0IG5ldyByZWZDb3Vu
dCBuZWVkIHRvIGJlIGF0dHJpYnV0ZWQgdG8gdGhlIHJldXNlZCBpbnN0YW5jZQorICAgICAgICAv
LyB0byBlbnN1cmUgdGhhdCB0aGUgcmVmQ291bnQgaXMgYWNjdXJhdGUgd2hlbiB0aGUgY2xpZW50
IGFkb3B0cyB0aGUgcmVmLgorICAgICAgICAvLyBXZSBkbyB0aGlzIGJ5IHJlZidpbmcgdGhlIHJl
dXNlZCBkYXRhYmFzZUNvbnRleHQgYmVmb3JlIHJldHVybmluZyBpdC4KKyAgICAgICAgZGF0YWJh
c2VDb250ZXh0LT5yZWYoKTsKKyAgICB9CisgICAgcmV0dXJuIGRhdGFiYXNlQ29udGV4dC5yZWxl
YXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBEYXRhYmFzZU1hbmFnZXI6
OmdldERhdGFiYXNlQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorewor
ICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9IGdldEV4aXN0aW5n
RGF0YWJhc2VDb250ZXh0KGNvbnRleHQpOworICAgIGlmICghZGF0YWJhc2VDb250ZXh0KQorICAg
ICAgICBkYXRhYmFzZUNvbnRleHQgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2VDb250ZXh0KGNvbnRl
eHQpKTsKKyAgICByZXR1cm4gZGF0YWJhc2VDb250ZXh0LnJlbGVhc2UoKTsKK30KKwordm9pZCBE
YXRhYmFzZU1hbmFnZXI6OnJlZ2lzdGVyRGF0YWJhc2VDb250ZXh0KERhdGFiYXNlQ29udGV4dCog
ZGF0YWJhc2VDb250ZXh0KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2NvbnRleHRNYXBM
b2NrKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gZGF0YWJhc2VDb250
ZXh0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgbV9jb250ZXh0TWFwLnNldChjb250
ZXh0LCBkYXRhYmFzZUNvbnRleHQpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBtX2RhdGFi
YXNlQ29udGV4dFJlZ2lzdGVyZWRDb3VudCsrOworI2VuZGlmCit9CisKK3ZvaWQgRGF0YWJhc2VN
YW5hZ2VyOjp1bnJlZ2lzdGVyRGF0YWJhc2VDb250ZXh0KERhdGFiYXNlQ29udGV4dCogZGF0YWJh
c2VDb250ZXh0KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2NvbnRleHRNYXBMb2NrKTsK
KyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gZGF0YWJhc2VDb250ZXh0LT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgQVNTRVJUKG1fY29udGV4dE1hcC5nZXQoY29u
dGV4dCkpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBtX2RhdGFiYXNlQ29udGV4dFJlZ2lz
dGVyZWRDb3VudC0tOworI2VuZGlmCisgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0KTsK
K30KKworI2lmICFBU1NFUlRfRElTQUJMRUQKK3ZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpub3RpZnlE
YXRhYmFzZUNvbnRleHRDb25zdHJ1Y3RlZCgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2Nv
bnRleHRNYXBMb2NrKTsKKyAgICBtX2RhdGFiYXNlQ29udGV4dEluc3RhbmNlQ291bnQrKzsKK30K
Kwordm9pZCBEYXRhYmFzZU1hbmFnZXI6Om5vdGlmeURhdGFiYXNlQ29udGV4dERlc3RydWN0ZWQo
KQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9jb250ZXh0TWFwTG9jayk7CisgICAgbV9kYXRh
YmFzZUNvbnRleHRJbnN0YW5jZUNvdW50LS07CisgICAgQVNTRVJUKG1fZGF0YWJhc2VDb250ZXh0
UmVnaXN0ZXJlZENvdW50IDw9IG1fZGF0YWJhc2VDb250ZXh0SW5zdGFuY2VDb3VudCk7Cit9Cisj
ZW5kaWYKKwogUGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0YWJhc2VNYW5hZ2VyOjpvcGVuRGF0YWJh
c2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKICAgICBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlO
YW1lLAogICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFz
ZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlKQogeworICAgIFJl
ZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9IGdldERhdGFiYXNlQ29udGV4
dChjb250ZXh0KTsKKwogICAgIGlmICghY2FuRXN0YWJsaXNoRGF0YWJhc2UoY29udGV4dCwgbmFt
ZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKSB7CiAgICAgICAgIExPRyhTdG9yYWdlQVBJ
LCAiRGF0YWJhc2UgJXMgZm9yIG9yaWdpbiAlcyBub3QgYWxsb3dlZCB0byBiZSBlc3RhYmxpc2hl
ZCIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBS
ZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gYWRvcHRSZWYobmV3IERhdGFiYXNlKGNvbnRleHQs
IG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKKyAg
ICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gYWRvcHRSZWYobmV3IERhdGFiYXNlKGRhdGFi
YXNlQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVk
U2l6ZSkpOwogCiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKICAgICBpZiAoIWRhdGFiYXNlLT5v
cGVuQW5kVmVyaWZ5VmVyc2lvbighY3JlYXRpb25DYWxsYmFjaywgZSwgZXJyb3JNZXNzYWdlKSkg
ewogICAgICAgICBkYXRhYmFzZS0+bG9nRXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7Ci0gICAg
ICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLnJlbW92ZU9wZW5EYXRhYmFzZShkYXRhYmFz
ZS5nZXQoKSk7CisgICAgICAgIHJlbW92ZU9wZW5EYXRhYmFzZShkYXRhYmFzZS5nZXQoKSk7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigp
LnNldERhdGFiYXNlRGV0YWlscyhjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBuYW1lLCBkaXNw
bGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7Ci0gICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCku
c2V0SGFzT3BlbkRhdGFiYXNlcyhjb250ZXh0KTsKKyAgICBzZXREYXRhYmFzZURldGFpbHMoY29u
dGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUp
OworICAgIGRhdGFiYXNlQ29udGV4dC0+c2V0SGFzT3BlbkRhdGFiYXNlcygpOwogCiAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRPcGVuRGF0YWJhc2UoY29udGV4dCwgZGF0YWJhc2Us
IGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmhvc3QoKSwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9u
KTsKIApAQCAtMTUwLDEzICsyMjYsMTQgQEAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0YWJhc2VN
YW5hZ2VyOjpvcAogICAgICAgICBkYXRhYmFzZS0+bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5w
b3N0VGFzayhEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrOjpjcmVhdGUoZGF0YWJhc2UsIGNy
ZWF0aW9uQ2FsbGJhY2spKTsKICAgICB9CiAKLSAgICByZXR1cm4gZGF0YWJhc2U7CisgICAgcmV0
dXJuIGRhdGFiYXNlLnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IERh
dGFiYXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LAogICAgIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZl
cnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsCiAgICAgdW5zaWduZWQgbG9uZyBlc3Rp
bWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ss
IEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFi
YXNlQ29udGV4dCA9IGdldERhdGFiYXNlQ29udGV4dChjb250ZXh0KTsKICAgICBBU1NFUlQoY29u
dGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwogCiAgICAgaWYgKCFjYW5Fc3RhYmxpc2hEYXRhYmFz
ZShjb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpIHsKQEAgLTE2NCwz
OCArMjQxLDM5IEBAIFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBEYXRhYmFzZU1hbmFnZXIKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgUmVmUHRyPERhdGFiYXNlU3luYz4gZGF0YWJh
c2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2VTeW5jKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVy
c2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKKyAgICBSZWZQdHI8RGF0YWJhc2VT
eW5jPiBkYXRhYmFzZSA9IGFkb3B0UmVmKG5ldyBEYXRhYmFzZVN5bmMoZGF0YWJhc2VDb250ZXh0
LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7CiAK
ICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwogICAgIGlmICghZGF0YWJhc2UtPnBlcmZvcm1PcGVu
QW5kVmVyaWZ5KCFjcmVhdGlvbkNhbGxiYWNrLCBlYywgZXJyb3JNZXNzYWdlKSkgewogICAgICAg
ICBkYXRhYmFzZS0+bG9nRXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIERhdGFi
YXNlTWFuYWdlcjo6bWFuYWdlcigpLnJlbW92ZU9wZW5EYXRhYmFzZShkYXRhYmFzZS5nZXQoKSk7
CisgICAgICAgIHJlbW92ZU9wZW5EYXRhYmFzZShkYXRhYmFzZS5nZXQoKSk7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIAotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLnNldERhdGFi
YXNlRGV0YWlscyhjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBuYW1lLCBkaXNwbGF5TmFtZSwg
ZXN0aW1hdGVkU2l6ZSk7CisgICAgc2V0RGF0YWJhc2VEZXRhaWxzKGNvbnRleHQtPnNlY3VyaXR5
T3JpZ2luKCksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKIAogICAgIGlmIChk
YXRhYmFzZS0+aXNOZXcoKSAmJiBjcmVhdGlvbkNhbGxiYWNrLmdldCgpKSB7CiAgICAgICAgIExP
RyhTdG9yYWdlQVBJLCAiSW52b2tpbmcgdGhlIGNyZWF0aW9uIGNhbGxiYWNrIGZvciBkYXRhYmFz
ZSAlcFxuIiwgZGF0YWJhc2UuZ2V0KCkpOwogICAgICAgICBjcmVhdGlvbkNhbGxiYWNrLT5oYW5k
bGVFdmVudChkYXRhYmFzZS5nZXQoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGRhdGFiYXNlOwor
ICAgIHJldHVybiBkYXRhYmFzZS5yZWxlYXNlKCk7CiB9CiAKIGJvb2wgRGF0YWJhc2VNYW5hZ2Vy
OjpoYXNPcGVuRGF0YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0g
ICAgcmV0dXJuIERhdGFiYXNlQ29udGV4dDo6aGFzT3BlbkRhdGFiYXNlcyhjb250ZXh0KTsKLX0K
LQotdm9pZCBEYXRhYmFzZU1hbmFnZXI6OnNldEhhc09wZW5EYXRhYmFzZXMoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBEYXRhYmFzZUNvbnRleHQ6OmZyb20oY29udGV4
dCktPnNldEhhc09wZW5EYXRhYmFzZXMoKTsKKyAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBk
YXRhYmFzZUNvbnRleHQgPSBnZXRFeGlzdGluZ0RhdGFiYXNlQ29udGV4dChjb250ZXh0KTsKKyAg
ICBpZiAoIWRhdGFiYXNlQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBkYXRhYmFzZUNvbnRleHQtPm1faGFzT3BlbkRhdGFiYXNlczsKIH0KIAogdm9pZCBEYXRhYmFz
ZU1hbmFnZXI6OnN0b3BEYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
RGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIpCiB7Ci0gICAgRGF0YWJhc2VD
b250ZXh0OjpzdG9wRGF0YWJhc2VzKGNvbnRleHQsIHN5bmNocm9uaXplcik7CisgICAgUmVmUHRy
PERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gZ2V0RXhpc3RpbmdEYXRhYmFzZUNv
bnRleHQoY29udGV4dCk7CisgICAgaWYgKCFkYXRhYmFzZUNvbnRleHQgfHwgIWRhdGFiYXNlQ29u
dGV4dC0+c3RvcERhdGFiYXNlcyhzeW5jaHJvbml6ZXIpKQorICAgICAgICBpZiAoc3luY2hyb25p
emVyKQorICAgICAgICAgICAgc3luY2hyb25pemVyLT50YXNrQ29tcGxldGVkKCk7CiB9CiAKIFN0
cmluZyBEYXRhYmFzZU1hbmFnZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQpA
QCAtMjcyLDkgKzM1MCwxMSBAQCB2b2lkIERhdGFiYXNlTWFuYWdlcjo6Y2xvc2VEYXRhYmFzZXNJ
bW1lCiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oQ0hST01JVU0pCiAKLXZvaWQgRGF0YWJhc2VNYW5h
Z2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpCit2b2lkIERhdGFiYXNlTWFuYWdlcjo6aW50ZXJydXB0QWxsRGF0
YWJhc2VzRm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewotICAg
IG1fc2VydmVyLT5pbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnRleHQpOworICAg
IFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9IGdldEV4aXN0aW5nRGF0
YWJhc2VDb250ZXh0KGNvbnRleHQpOworICAgIGlmIChkYXRhYmFzZUNvbnRleHQpCisgICAgICAg
IG1fc2VydmVyLT5pbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnRleHQpOwogfQog
CiBib29sIERhdGFiYXNlTWFuYWdlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHJl
dmlzaW9uIDE0MTA3MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwxNyBAQAogCiAjaW5j
bHVkZSAiQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQmFzaWNU
eXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBYnN0cmFjdERhdGFiYXNlU2Vy
dmVyOwogY2xhc3MgRGF0YWJhc2U7CiBjbGFzcyBEYXRhYmFzZUNhbGxiYWNrOworY2xhc3MgRGF0
YWJhc2VDb250ZXh0OwogY2xhc3MgRGF0YWJhc2VNYW5hZ2VyQ2xpZW50OwogY2xhc3MgRGF0YWJh
c2VTeW5jOwogY2xhc3MgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyOwpAQCAtNTYsMTEgKzYwLDI3
IEBAIHB1YmxpYzoKICAgICBib29sIGlzQXZhaWxhYmxlKCk7CiAgICAgdm9pZCBzZXRJc0F2YWls
YWJsZShib29sKTsKIAorICAgIC8vIFRoaXMgZ2V0cyBhIERhdGFiYXNlQ29udGV4dCBmb3IgdGhl
IHNwZWNpZmllZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorICAgIC8vIElmIG9uZSBkb2Vzbid0
IGFscmVhZHkgZXhpc3QsIGl0IHdpbGwgY3JlYXRlIGEgbmV3IG9uZS4KKyAgICBQYXNzUmVmUHRy
PERhdGFiYXNlQ29udGV4dD4gZ2V0RGF0YWJhc2VDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqKTsKKworICAgIC8vIFRoZXNlIDIgbWV0aG9kcyBhcmUgZm9yIERhdGFiYXNlQ29udGV4dCAo
dW4pcmVnaXN0cmF0aW9uLCBhbmQgc2hvdWxkIG9ubHkKKyAgICAvLyBiZSBjYWxsZWQgYnkgdGhl
IERhdGFiYXNlQ29udGV4dCBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3Rvci4KKyAgICB2b2lkIHJl
Z2lzdGVyRGF0YWJhc2VDb250ZXh0KERhdGFiYXNlQ29udGV4dCopOworICAgIHZvaWQgdW5yZWdp
c3RlckRhdGFiYXNlQ29udGV4dChEYXRhYmFzZUNvbnRleHQqKTsKKworI2lmICFBU1NFUlRfRElT
QUJMRUQKKyAgICB2b2lkIG5vdGlmeURhdGFiYXNlQ29udGV4dENvbnN0cnVjdGVkKCk7CisgICAg
dm9pZCBub3RpZnlEYXRhYmFzZUNvbnRleHREZXN0cnVjdGVkKCk7CisjZWxzZQorICAgIHZvaWQg
bm90aWZ5RGF0YWJhc2VDb250ZXh0Q29uc3RydWN0ZWQoKSB7IH0KKyAgICB2b2lkIG5vdGlmeURh
dGFiYXNlQ29udGV4dERlc3RydWN0ZWQoKSB7IH0KKyNlbmRpZgorCiAgICAgUGFzc1JlZlB0cjxE
YXRhYmFzZT4gb3BlbkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJh
c2VDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPERhdGFiYXNlU3lu
Yz4gb3BlbkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNw
bGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNl
Q2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBib29sIGhhc09wZW5EYXRhYmFzZXMo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotICAgIHZvaWQgc2V0SGFzT3BlbkRhdGFiYXNlcyhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAgICAgdm9pZCBzdG9wRGF0YWJhc2VzKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqKTsKIAogICAgIFN0cmlu
ZyBmdWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0ID0gdHJ1ZSk7CkBAIC04OSw3ICsxMDksNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBjbG9zZURhdGFiYXNlc0ltbWVkaWF0ZWx5KGNvbnN0IFN0cmluZyYg
b3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICNlbmRpZiAvLyBQTEFURk9S
TShDSFJPTUlVTSkKIAotICAgIHZvaWQgaW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChj
b25zdCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgdm9pZCBpbnRlcnJ1cHRBbGxEYXRh
YmFzZXNGb3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAgIGJvb2wgY2Fu
RXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplKTsKICAgICB2b2lkIGFkZE9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKik7CkBAIC0x
MDIsOSArMTIyLDIxIEBAIHByaXZhdGU6CiAgICAgRGF0YWJhc2VNYW5hZ2VyKCk7CiAgICAgfkRh
dGFiYXNlTWFuYWdlcigpIHsgfQogCisgICAgLy8gVGhpcyBnZXRzIGEgRGF0YWJhc2VDb250ZXh0
IGZvciB0aGUgc3BlY2lmaWVkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaWYKKyAgICAvLyBpdCBh
bHJlYWR5IGV4aXN0IHByZXZpb3VzbHkuIE90aGVyd2lzZSwgaXQgcmV0dXJucyAwLgorICAgIFBh
c3NSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBnZXRFeGlzdGluZ0RhdGFiYXNlQ29udGV4dChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Kik7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIERhdGFiYXNlQ29udGV4dCosIFB0ckhhc2g8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCo+ID4gQ29udGV4dE1hcDsKKyAgICBDb250ZXh0TWFwIG1fY29udGV4dE1hcDsKKyAgICBN
dXRleCBtX2NvbnRleHRNYXBMb2NrOworCiAgICAgQWJzdHJhY3REYXRhYmFzZVNlcnZlciogbV9z
ZXJ2ZXI7CiAgICAgRGF0YWJhc2VNYW5hZ2VyQ2xpZW50KiBtX2NsaWVudDsKICAgICBib29sIG1f
ZGF0YWJhc2VJc0F2YWlsYWJsZTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgaW50IG1fZGF0
YWJhc2VDb250ZXh0UmVnaXN0ZXJlZENvdW50OworICAgIGludCBtX2RhdGFiYXNlQ29udGV4dElu
c3RhbmNlQ291bnQ7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3lu
Yy5jcHAJKHJldmlzaW9uIDE0MTA3MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKICNpbmNsdWRlICJEYXRhYmFzZUNhbGxiYWNrLmgi
CisjaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VNYW5hZ2Vy
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlNRTEV4Y2VwdGlvbi5oIgpAQCAt
NDcsOSArNDgsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURhdGFiYXNlU3luYzo6RGF0
YWJhc2VTeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCitEYXRhYmFzZVN5bmM6OkRhdGFi
YXNlU3luYyhQYXNzUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplKQotICAgIDogQWJzdHJhY3REYXRhYmFzZShjb250ZXh0LCBuYW1lLCBl
eHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBTeW5jRGF0YWJhc2Up
CisgICAgOiBBYnN0cmFjdERhdGFiYXNlKGRhdGFiYXNlQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRW
ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgU3luY0RhdGFiYXNlKQogewogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VTeW5jLmgJKHJldmlzaW9uIDE0MTA3MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKIGNsYXNzIFNRTFRy
YW5zYWN0aW9uU3luYzsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOwotY2xhc3Mg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiAvLyBJbnN0
YW5jZXMgb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCBvbmx5IG9uIHRo
ZSB3b3JrZXIncyBjb250ZXh0IHRocmVhZC4KQEAgLTc0LDcgKzczLDcgQEAgcHVibGljOgogICAg
IH0KIAogcHJpdmF0ZToKLSAgICBEYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCisgICAg
RGF0YWJhc2VTeW5jKFBhc3NSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKICAg
ICB2b2lkIHJ1blRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJh
Y2s+LCBib29sIHJlYWRPbmx5LCBFeGNlcHRpb25Db2RlJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwCShy
ZXZpc2lvbiAxNDEwNzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsMTIgQEAgRGF0YWJh
c2VUaHJlYWQ6OkRhdGFiYXNlVGhyZWFkKCkKIAogRGF0YWJhc2VUaHJlYWQ6On5EYXRhYmFzZVRo
cmVhZCgpCiB7Ci0gICAgLy8gRklYTUU6IEFueSBjbGVhbnVwIHJlcXVpcmVkIGhlcmU/ICBTaW5j
ZSB0aGUgdGhyZWFkIGRlbGV0ZXMgaXRzZWxmIGFmdGVyIHJ1bm5pbmcgaXRzIGRldGFjaGVkIGNv
dXJzZSwgSSBkb24ndCB0aGluayBzby4gIExldHMgYmUgc3VyZS4KKyAgICAvLyBUaGUgRGF0YWJh
c2VUaHJlYWQgd2lsbCBvbmx5IGJlIGRlc3RydWN0ZWQgd2hlbiBib3RoIGl0cyBvd25lcgorICAg
IC8vIERhdGFiYXNlQ29udGV4dCBoYXMgZGVyZWYnZWQgaXQsIGFuZCB0aGUgZGF0YWJhc2VUaHJl
YWQoKSB0aHJlYWQKKyAgICAvLyBoYXMgZGVyZWYnZWQgaXRzZWxmLiBUaGUgRGF0YWJhc2VDb250
ZXh0IGRlc3RydWN0b3Igd2lsbCB0YWtlCisgICAgLy8gY2FyZSBvZiBlbnN1cmluZyB0aGF0IGEg
dGVybWluYXRpb24gcmVxdWVzdCBoYXMgYmVlbiBpc3N1ZS4gVGhlCisgICAgLy8gdGVybWluYXRp
b24gcmVxdWVzdCB3aWxsIHRyaWdnZXIgYW4gb3JkZXJseSBzaHV0ZG93biBvZiB0aGUgdGhyZWFk
LCBhbmQKKyAgICAvLyB0aGVuIGRlcmVmIGl0c2VsZi4KICAgICBBU1NFUlQodGVybWluYXRpb25S
ZXF1ZXN0ZWQoKSk7CiB9CiAKQEAgLTcwLDcgKzc1LDYgQEAgYm9vbCBEYXRhYmFzZVRocmVhZDo6
c3RhcnQoKQogCiB2b2lkIERhdGFiYXNlVGhyZWFkOjpyZXF1ZXN0VGVybWluYXRpb24oRGF0YWJh
c2VUYXNrU3luY2hyb25pemVyICpjbGVhbnVwU3luYykKIHsKLSAgICBBU1NFUlQoIW1fY2xlYW51
cFN5bmMpOwogICAgIG1fY2xlYW51cFN5bmMgPSBjbGVhbnVwU3luYzsKICAgICBMT0coU3RvcmFn
ZUFQSSwgIkRhdGFiYXNlVGhyZWFkICVwIHdhcyBhc2tlZCB0byB0ZXJtaW5hdGVcbiIsIHRoaXMp
OwogICAgIG1fcXVldWUua2lsbCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAkocmV2aXNpb24gMTQxMDcw
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQ2hyb21lLmgi
CiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0Lmgi
CisjaW5jbHVkZSAiRGF0YWJhc2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VNYW5hZ2Vy
Q2xpZW50LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKICNpbmNsdWRlICJMb2dnaW5n
LmgiCkBAIC0xNjcsNyArMTY4LDggQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmNhbkVzdGFibGlz
aERhdGFiYQogCiAgICAgLy8gR2l2ZSB0aGUgY2hyb21lIGNsaWVudCBhIGNoYW5jZSB0byBpbmNy
ZWFzZSB0aGUgcXVvdGEuCiAgICAgLy8gRHJvcCBhbGwgbG9ja3MgYmVmb3JlIGNhbGxpbmcgb3V0
OyB3ZSBkb24ndCBrbm93IHdoYXQgdGhleSdsbCBkby4KLSAgICBEYXRhYmFzZUNvbnRleHQ6OmZy
b20oY29udGV4dCktPmRhdGFiYXNlRXhjZWVkZWRRdW90YShuYW1lLCBEYXRhYmFzZURldGFpbHMo
bmFtZS5pc29sYXRlZENvcHkoKSwgZGlzcGxheU5hbWUuaXNvbGF0ZWRDb3B5KCksIGVzdGltYXRl
ZFNpemUsIDApKTsKKyAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQg
PSBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5nZXREYXRhYmFzZUNvbnRleHQoY29udGV4dCk7
CisgICAgZGF0YWJhc2VDb250ZXh0LT5kYXRhYmFzZUV4Y2VlZGVkUXVvdGEobmFtZSwgRGF0YWJh
c2VEZXRhaWxzKG5hbWUuaXNvbGF0ZWRDb3B5KCksIGRpc3BsYXlOYW1lLmlzb2xhdGVkQ29weSgp
LCBlc3RpbWF0ZWRTaXplLCAwKSk7CiAKICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9k
YXRhYmFzZUd1YXJkKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5j
cHAJKHJldmlzaW9uIDE0MTA3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw4ICs1NCwxNyBAQCBBY3RpdmVET01PYmplY3Q6
On5BY3RpdmVET01PYmplY3QoKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9zdXNw
ZW5kSWZOZWVkZWRDYWxsZWQpOwotICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPndpbGxE
ZXN0cm95QWN0aXZlRE9NT2JqZWN0KHRoaXMpOworCisgICAgLy8gQWN0aXZlRE9NT2JqZWN0IG1h
eSBiZSBpbmhlcml0ZWQgYnkgYSBzdWItY2xhc3Mgd2hvc2UgbGlmZS1jeWNsZQorICAgIC8vIGV4
Y2VlZHMgdGhhdCBvZiB0aGUgYXNzb2NpYXRlZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0LiBJbiB0
aG9zZSBjYXNlcywKKyAgICAvLyBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgd291bGQvc2hvdWxk
IGhhdmUgYmVlbiBudWxsaWZ5IGJ5CisgICAgLy8gQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXI6
OmNvbnRleHREZXN0cm95ZWQoKSAod2hpY2ggd2UgaW1wbGVtZW50IC8KKyAgICAvLyBpbmhlcml0
KS4gSGVuY2UsIHdlIHNob3VsZCBlbnN1cmUgdGhhdCB0aGlzIGlzIG5vdCAwIGJlZm9yZSB1c2Ug
aXQKKyAgICAvLyBoZXJlLgorICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpIHsKKyAg
ICAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkp
OworICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPndpbGxEZXN0cm95QWN0aXZlRE9N
T2JqZWN0KHRoaXMpOworICAgIH0KIH0KIAogdm9pZCBBY3RpdmVET01PYmplY3Q6OnN1c3BlbmRJ
Zk5lZWRlZCgpCg==
</data>
<flag name="review"
          id="204144"
          type_id="1"
          status="-"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="204221"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>