<?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>108431</bug_id>
          
          <creation_ts>2013-01-30 22:55:29 -0800</creation_ts>
          <short_desc>webdatabase: Clean up calls to DatabaseTracker::add/removeOpenDatabase()</short_desc>
          <delta_ts>2013-02-01 15:07:12 -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>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ggaren</cc>
    
    <cc>levin</cc>
    
    <cc>levin+threading</cc>
    
    <cc>michaeln</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>821110</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-30 22:55:29 -0800</bug_when>
    <thetext>In the existing code, DatabaseTracker::add/removeOpenDatabase() are called from many different places.  We can clean this up so that addOpenDatabase() is only called when we successfully open a database, and removeOpenDatabase() when we close the database.

Previously, the code would call DatabaseTracker::recordCreatingDatabase() in DatabaseTracker::canEstablishDatabase() (called from DatabaseManager::openDatabase()) and call the corresponding DatabaseTracker::doneCreatingDatabase() in DatabaseTracker::addOpenDatabase() (called from the DatabaseBackend constructor).  After the DatabaseBackend constructor is called, we may find that we fail to open the backing SQL database.  In that case, there was nothing more to do for cleaning up the &quot;CreatingDatabase&quot; state, but to call removeOpenDatabase() to undo the effects of addOpenDatabase(). 

Now that we only call addOpenDatabase() if successfully open the database (not just create its interface object in memory), we may fail to open the database and addOpenDatabase() will not be called.  As a result, doneCreatingDatabase() will also not be called though we had called recordCreatingDatabase() earlier.  The clean up the &quot;CreatingDatabase&quot; state, we need call doneCreatingdatabase() in  DatabaseBackend::performOpenAndVerify() if it should fail to open the backing SQL database.

Note: the old code can call DatabaseTracker::removeOpenDatabase() directly from DatabaseManager::openDatabase().  We don&apos;t want that, nor do we want to call DatabaseTracker::doneCreatingDatabase() from there though it seems like a convenient place to do so.  The reason for this is because DatabaseTracker is a back-end data structure which eventually belongs in the DatabaseProcess while the DatabaseManager is a client-side / front-end data structure which belongs in the WebProcess.

Hence, this patch removes one instance of the front-end code from touching the back-end DatabaseTracker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821160</commentid>
    <comment_count>1</comment_count>
      <attachid>185695</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-31 00:05:47 -0800</bug_when>
    <thetext>Created attachment 185695
The fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821183</commentid>
    <comment_count>2</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2013-01-31 00:20:26 -0800</bug_when>
    <thetext>Just happened to look, you don&apos;t need to fix this at all, but doesn&apos;t it strike you as unfortunate that nearly the same code is repeated before every return false in DatabaseBackend::performOpenAndVerify?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821194</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-31 00:26:56 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Just happened to look, you don&apos;t need to fix this at all, but doesn&apos;t it strike you as unfortunate that nearly the same code is repeated before every return false in DatabaseBackend::performOpenAndVerify?

Yes, I don&apos;t like it.  I failed in my previous attempt to make it cleaner, but I&apos;ll see if I give it another look to se what I can do to fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821197</commentid>
    <comment_count>4</comment_count>
      <attachid>185695</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-31 00:28:12 -0800</bug_when>
    <thetext>Comment on attachment 185695
The fix.

Attachment 185695 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16270048</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821199</commentid>
    <comment_count>5</comment_count>
      <attachid>185695</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-31 00:29:55 -0800</bug_when>
    <thetext>Comment on attachment 185695
The fix.

Need to fix the chromium build failure.  Will upload another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821213</commentid>
    <comment_count>6</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2013-01-31 00:36:02 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Just happened to look, you don&apos;t need to fix this at all, but doesn&apos;t it strike you as unfortunate that nearly the same code is repeated before every return false in DatabaseBackend::performOpenAndVerify?
&gt; 
&gt; Yes, I don&apos;t like it.  I failed in my previous attempt to make it cleaner, but I&apos;ll see if I give it another look to se what I can do to fix that.

Perhaps a common function would be better than repeating the same 5 lines?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821260</commentid>
    <comment_count>7</comment_count>
      <attachid>185719</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-31 01:55:43 -0800</bug_when>
    <thetext>Created attachment 185719
a better patch.

Fixed chromium build failure.  Also used RAII pattern to call DatabaseTracker::doneCreatingDatabase() on exit.  To do this, I also need to remove the call to doneCreatingDatabase() from addOpenDatabase(), which actually makes it cleaner.  Please review.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821602</commentid>
    <comment_count>8</comment_count>
      <attachid>185719</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-01-31 09:58:42 -0800</bug_when>
    <thetext>Comment on attachment 185719
a better patch.

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

r=me

&gt; Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp:60
&gt; +// &quot;opened&quot; so that the client can call interrupt or delete every database

Typo: Should be &quot;on every&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822122</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-01-31 16:48:11 -0800</bug_when>
    <thetext>Geez... DatabaseManager is new to me, ditto DatbaseBackend. I have to look at some prior patches to understand the method to the madness:  107535 107784 108275 108278 108279 108431.

Looking at just this snippet and the build artifacts really doesn&apos;t tell me much. Do you have an umbrella bug that points at the related set of changes? I see this one (107475), buts its real new and i see a bunch of related changes that happened in december? I&apos;ll look at the svn revision history for the Modules/webdatabase directory to make sense out of it, but a quick overview from you might help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822128</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-31 16:51:55 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Geez... DatabaseManager is new to me, ditto DatbaseBackend. I have to look at some prior patches to understand the method to the madness:  107535 107784 108275 108278 108279 108431.
&gt; 
&gt; Looking at just this snippet and the build artifacts really doesn&apos;t tell me much. Do you have an umbrella bug that points at the related set of changes? I see this one (107475), buts its real new and i see a bunch of related changes that happened in december? I&apos;ll look at the svn revision history for the Modules/webdatabase directory to make sense out of it, but a quick overview from you might help.

Here are the changes so far in a nutshell:

1. DatabaseManager is a wrapper around DatabaseTracker (mostly).  It is meant to be front-end Manager handling script side database activity (e.g. callbacks) eventually, while the Tracker handles the tracking of SQL db instances like before in the back-end.

2. DatabaseBackend is a renamed AbstractDatabase (for now).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822233</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-01-31 19:06:06 -0800</bug_when>
    <thetext>Sounds like this patch may change the order of somethings that matter for the chromium port. In chromium the interface between renderers and our main process looks like this (modulo some stuff around the edges about permissions and quotas).


  // WebDatabaseObserver implementation, these are called on the script
  // execution context thread on which the database is opened. This may be
  // the main thread or background WebWorker threads.
  virtual void databaseOpened(const WebKit::WebDatabase&amp; database);
  virtual void databaseModified(const WebKit::WebDatabase&amp; database);
  virtual void databaseClosed(const WebKit::WebDatabase&amp; database);

  // SQLite VFS related methods, these are called on webcore&apos;s
  // background database threads via the WebKitPlatformSupport impl.
  base::PlatformFile OpenFile(const string16&amp; vfs_file_name, int desired_flags);
  int DeleteFile(const string16&amp; vfs_file_name, bool sync_dir);
  uint32 GetFileAttributes(const string16&amp; vfs_file_name);
  int64 GetFileSize(const string16&amp; vfs_file_name);
  int64 GetSpaceAvailable(const string16&amp; origin_identifier);


The opened/closed methods in that first block relate to what WebCore::DatabaseTracker sees. The second block  are lower level hooks that we use to satisfy sqlite&apos;s need to poke at files.

I think in your changes the ordering of databaseOpened() vs OpenFile(vfs_file_name) may have been reversed? That would matter for chrome because until that databaseOpened() call has happened there is no way to compute an actual OS filepath (vfs_file_name is not a real path). We assign filepaths in databaseOpened() and store the value in our tracker&apos;s database at that point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822293</commentid>
    <comment_count>12</comment_count>
      <attachid>185935</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-31 21:21:54 -0800</bug_when>
    <thetext>Created attachment 185935
the patch plus fixing up the chromium port to work with this change.

Thanks to Michael for pointing out what the chromium port expects in terms of when it needs databaseOpened() and databaseClosed() to be called.  I introduced (for the Chromium port only) DatabaseTracker::prepareToOpenDatabase() and DatabaseTracker::failedToOpenDatabase() which takes care of calling databaseOpened() and databaseClosed() at the right time.  May I have a review from the Chromium folks on these port specific changes please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822310</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-31 21:43:01 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Thanks to Michael for pointing out what the chromium port expects in terms of when it needs databaseOpened() and databaseClosed() to be called.  I introduced (for the Chromium port only) DatabaseTracker::prepareToOpenDatabase() and DatabaseTracker::failedToOpenDatabase() which takes care of calling databaseOpened() and databaseClosed() at the right time.  May I have a review from the Chromium folks on these port specific changes please?

Just to give some additional details on what I did for the Chromium port:

1. Michael said that DatabaseObserver::databaseOpened() needs to be called before we attempt to open the actual SQL database.
    - To achieve this, I have Database::openAndVerifyVersion() call DatabaseTracker::tracker().prepareToOpenDatabase().
    - I also have DatabaseBackend::performOpenAndVerify() call DatabaseTracker::tracker().prepareToOpenDatabase().
    - DatabaseTracker::tracker().prepareToOpenDatabase() will check the m_isPreparedToOpenDatabase flag in the database.  If it is not set, prepareToOpenDatabase() will call DatabaseObserver::databaseOpened() and set the flag.  Else, it will consider the database &quot;prepared&quot; and do nothing.
    - This achieves the guarantee that DatabaseObserver::databaseOpened() is called exactly once before DatabaseBackend::performOpenAndVerify() actually opens the SQL database, but I don&apos;t hijack piggy back on DatabaseTracker::addOpenDatabase() (as before) to do it.

2. Previously, the client side code (i.e. DatabaseManager) will need to detect when we fail to open the SQL database, and call DatabaseTracker::removeOpenDatabase().  This is asymmetrical with who called addOpenDatabase().  One side-effect of calling removeOpenDatabase() here is that it will also call DatabaseObserver::databaseClosed().
    - In the new code, DatabaseBackend::performOpenAndVerify() who is responsible for opening the SQL database will know when it failed to do so.  If it failed, it will clean up after itself by using the DoneCreatingDatabaseOnExitCaller RAII object to call DatabaseTracker::failedToOpenDatabase().
    - DatabaseTracker::failedToOpenDatabase() will call DatabaseObserver::databaseClosed() if we&apos;re running on the script thread.  Else, it will post a task to run on the script thread that will call databaseClosed() later.

With that I have satisfied the expectations of the DatabaseObserver without compromising my goal of not having the front end / script side code call add/removeOpenDatabase().

FWIW, I&apos;ve also run a subset of the layout tests (those relevant to webdatabase work) on a chromium build.  They used to fail before this change.  They now all pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822515</commentid>
    <comment_count>14</comment_count>
      <attachid>185984</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-01 01:59:40 -0800</bug_when>
    <thetext>Created attachment 185984
test patch to test the baseline on the EWS.  This patch does nothing and is not for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823171</commentid>
    <comment_count>15</comment_count>
      <attachid>185935</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-02-01 13:08:26 -0800</bug_when>
    <thetext>Comment on attachment 185935
the patch plus fixing up the chromium port to work with this change.

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

&gt; Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp:314
&gt; +    DatabaseTracker::tracker().prepareToOpenDatabase(this);

Thnx for not breaking the chromium port!

Its a little unfortunate that the callsites to DatabaseTracker::prepareToOpenDatabase for the DatabaseSync vs Database classes are different and we have the somewhat gunky isPrepared flag to notice the difference?

Would it make sense to move this call to prepareToOpenDatabase() to an override in DatabaseSync.

bool DatabaseSync::performOpenAndVerify(...) {
#if CHROMIUM
  DatabaseTracker::tracker().prepareToOpenDatabase(this);
#endif
  return DatabseBackend::performOpenAndVerify(...);
}

... and to remove the isPrepared flag/getter/setter. So the call to prepareToOpenDatabase() for the Database case happens in Database.cpp and for DatabaseSync in DatabaseSync.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823181</commentid>
    <comment_count>16</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-01 13:16:50 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Its a little unfortunate that the callsites to DatabaseTracker::prepareToOpenDatabase for the DatabaseSync vs Database classes are different and we have the somewhat gunky isPrepared flag to notice the difference?
&gt; 
&gt; Would it make sense to move this call to prepareToOpenDatabase() to an override in DatabaseSync.
&gt; 
&gt; bool DatabaseSync::performOpenAndVerify(...) {
&gt; #if CHROMIUM
&gt;   DatabaseTracker::tracker().prepareToOpenDatabase(this);
&gt; #endif
&gt;   return DatabseBackend::performOpenAndVerify(...);
&gt; }
&gt; 
&gt; ... and to remove the isPrepared flag/getter/setter. So the call to prepareToOpenDatabase() for the Database case happens in Database.cpp and for DatabaseSync in DatabaseSync.cpp.

Thanks.  That is a good idea.  But instead of overriding performOpenAndVerify(), I&apos;ll add an openAndVerifyVersion() function.  That makes it more consistent with how Database handles opening database and hides what we do in the backend to make that happen i.e. call performOpenAndVerify().  Will apply this change, retest, and commit if I don&apos;t see new layout test failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823196</commentid>
    <comment_count>17</comment_count>
      <attachid>185935</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2013-02-01 13:24:21 -0800</bug_when>
    <thetext>Comment on attachment 185935
the patch plus fixing up the chromium port to work with this change.

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

r=me 

esp with the attempt to address Michael&apos;s feedback that you mentioned.

&gt; Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp:297
&gt; +#endif

Maybe the if could go away here if ExceptionCode were passed in? (Or if that is a layering violation and it may be... then &quot;m_ec == INVALID_STATE_ERR&quot; converted to an enum and passed into doneCreatingDatabase which could call &quot;DatabaseTracker::tracker().failedToOpenDatabase&quot; when appropriate in the chromium impl.


Just an idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823199</commentid>
    <comment_count>18</comment_count>
      <attachid>185935</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-01 13:29:51 -0800</bug_when>
    <thetext>Comment on attachment 185935
the patch plus fixing up the chromium port to work with this change.

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

&gt;&gt; Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp:297
&gt;&gt; +#endif
&gt; 
&gt; Maybe the if could go away here if ExceptionCode were passed in? (Or if that is a layering violation and it may be... then &quot;m_ec == INVALID_STATE_ERR&quot; converted to an enum and passed into doneCreatingDatabase which could call &quot;DatabaseTracker::tracker().failedToOpenDatabase&quot; when appropriate in the chromium impl.
&gt; 
&gt; 
&gt; Just an idea.

Thanks, but I think it is cleaner as it is right now.  No need to pass the ec down to the tracker.  The tracker just does what we tell it, and is not conditional on a higher level situation like a failure to open a database.  This is another reason I like Michael&apos;s idea to not have to check for prepared-ness in the DatabaseTracker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823320</commentid>
    <comment_count>19</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-01 15:07:12 -0800</bug_when>
    <thetext>Updated with Michael&apos;s suggestion.  There were no new layout test failures running on chromium.

Landed in r141649: &lt;http://trac.webkit.org/changeset/141649&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185695</attachid>
            <date>2013-01-31 00:05:47 -0800</date>
            <delta_ts>2013-01-31 00:29:55 -0800</delta_ts>
            <desc>The fix.</desc>
            <filename>bug-108431.patch</filename>
            <type>text/plain</type>
            <size>15278</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTM4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDEzLTAxLTMwICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCBjYWxscyB0byBEYXRh
YmFzZVRyYWNrZXI6OmFkZC9yZW1vdmVPcGVuRGF0YWJhc2UoKS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODQzMQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgcGFydCBvZiB0aGUgd2ViZGF0
YWJhc2UgcmVmYWN0b3JpbmcgZWZmb3J0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAg
ICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oOgorICAg
ICAgICAoQWJzdHJhY3REYXRhYmFzZVNlcnZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6Y2xvc2UpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6RGF0YWJhc2VCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6Y2xvc2VEYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZUJhY2tlbmQ6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZVN5bmMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuaDoKKyAgICAgICAgKERh
dGFiYXNlTWFuYWdlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNl
cnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlU2VydmVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjp+RGF0YWJhc2VT
eW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6Y2xvc2VJbW1lZGlhdGVseSk6
CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkb25lQ3JlYXRpbmdEYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
VHJhY2tlci5oOgorICAgICAgICAoRGF0YWJhc2VUcmFja2VyKToKKwogMjAxMy0wMS0zMCAgUGF0
cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBQb3J0IERyYWdJ
bWFnZVdpbi5jcHAgdG8gV2luQ0UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oCShyZXZpc2lv
biAxNDEzODApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0
RGF0YWJhc2VTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsOCArNzYsNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3Qg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5Fc3Rh
Ymxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZCop
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2Vu
ZCopID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhYmFzZURldGFpbHMoU2VjdXJpdHlP
cmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkgPSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgbG9u
ZyBsb25nIGdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBEYXRhYmFzZUJhY2tlbmQqKSA9IDA7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
LmNwcAkocmV2aXNpb24gMTQxMzgwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw3ICsxNzEsNiBAQCB2b2lk
IERhdGFiYXNlOjpjbG9zZSgpCiAgICAgUmVmUHRyPERhdGFiYXNlPiBwcm90ZWN0ID0gdGhpczsK
ICAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VD
bG9zZWQodGhpcyk7CiAgICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnVu
c2NoZWR1bGVEYXRhYmFzZVRhc2tzKHRoaXMpOwotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdl
cigpLnJlbW92ZU9wZW5EYXRhYmFzZSh0aGlzKTsKIH0KIAogdm9pZCBEYXRhYmFzZTo6Y2xvc2VJ
bW1lZGlhdGVseSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuY3BwCShyZXZpc2lvbiAxNDEzODApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIu
aCIKICNpbmNsdWRlICJEYXRhYmFzZUNvbnRleHQuaCIKICNpbmNsdWRlICJEYXRhYmFzZU1hbmFn
ZXIuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5o
IgpAQCAtNTMsNiArNTQsMzUgQEAKICNpbmNsdWRlICJEYXRhYmFzZU9ic2VydmVyLmgiIC8vIEZv
ciBlcnJvciByZXBvcnRpbmcuCiAjZW5kaWYKIAorLy8gUmVnaXN0ZXJpbmcgIm9wZW5lZCIgZGF0
YWJhc2VzIHdpdGggdGhlIERhdGFiYXNlVHJhY2tlcgorLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gVGhlIERhdGFiYXNlVHJhY2tl
ciBtYWludGFpbnMgYSBsaXN0IG9mIGRhdGFiYXNlcyB0aGF0IGhhdmUgYmVlbgorLy8gIm9wZW5l
ZCIgc28gdGhhdCB0aGUgY2xpZW50IGNhbiBjYWxsIGludGVycnVwdCBvciBkZWxldGUgZXZlcnkg
ZGF0YWJhc2UKKy8vIGFzc29jaWF0ZWQgd2l0aCBhIERhdGFiYXNlQ29udGV4dC4KKy8vCisvLyBX
ZSB3aWxsIG9ubHkgY2FsbCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZSgpIHRvIGFk
ZCB0aGUgZGF0YWJhc2UKKy8vIHRvIHRoZSB0cmFja2VyIGFzIG9wZW5lZCB3aGVuIHdlJ3ZlIHN1
Y2NlZWRlZCBpbiBvcGVuaW5nIHRoZSBkYXRhYmFzZSwKKy8vIGFuZCB3aWxsIHNldCBtX29wZW5l
ZCB0byB0cnVlLiBTaW1pbGFybHksIHdlIG9ubHkgY2FsbAorLy8gRGF0YWJhc2VUcmFja2VyOjpy
ZW1vdmVPcGVuRGF0YWJhc2UoKSB0byByZW1vdmUgdGhlIGRhdGFiYXNlIGZyb20gdGhlCisvLyB0
cmFja2VyIHdoZW4gd2Ugc2V0IG1fb3BlbmVkIHRvIGZhbHNlIGluIGNsb3NlRGF0YWJhc2UoKS4g
VGhpcyBzZXRzIHVwCisvLyBhIHNpbXBsZSBzeW1tZXRyeSBiZXR3ZWVuIG9wZW4gYW5kIGNsb3Nl
IG9wZXJhdGlvbnMsIGFuZCBhIGRpcmVjdAorLy8gY29ycmVsYXRpb24gdG8gYWRkaW5nIGFuZCBy
ZW1vdmluZyBkYXRhYmFzZXMgZnJvbSB0aGUgdHJhY2tlcidzIGxpc3QsCisvLyB0aHVzIGVuc3Vy
aW5nIHRoYXQgd2UgaGF2ZSBhIGNvcnJlY3QgbGlzdCBmb3IgdGhlIGludGVycnVwdCBhbmQKKy8v
IGRlbGV0ZSBvcGVyYXRpb25zIHRvIHdvcmsgb24uCisvLworLy8gVGhlIG9ubHkgZGF0YWJhc2Vz
IGluc3RhbmNlcyBub3QgdHJhY2tlZCBieSB0aGUgdHJhY2tlcidzIG9wZW4gZGF0YWJhc2UKKy8v
IGxpc3QgYXJlIHRoZSBvbmVzIHRoYXQgaGF2ZSBub3QgYmVlbiBhZGRlZCB5ZXQsIG9yIHRoZSBv
bmVzIHRoYXQgd2UKKy8vIGF0dGVtcHRlZCBhbiBvcGVuIG9uIGJ1dCBmYWlsZWQgdG8uIFN1Y2gg
aW5zdGFuY2VzIG9ubHkgZXhpc3QgaW4gdGhlCisvLyBEYXRhYmFzZU1hbmFnZXIncyBmYWN0b3J5
IG1ldGhvZHMgZm9yIGNyZWF0aW5nIERhdGFiYXNlQmFja2VuZHMuCisvLworLy8gVGhlIGZhY3Rv
cnkgbWV0aG9kcyB3aWxsIGVpdGhlciBjYWxsIG9wZW5BbmRWZXJpZnlWZXJzaW9uKCkgb3IKKy8v
IHBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkuIFRoZXNlIG1ldGhvZHMgd2lsbCBhZGQgdGhlIG5ld2x5
IGluc3RhbnRpYXRlZAorLy8gRGF0YWJhc2VCYWNrZW5kIGlmIHRoZXkgc3VjY2VlZCBpbiBvcGVu
aW5nIHRoZSByZXF1ZXN0ZWQgZGF0YWJhc2UuCisvLyBJbiB0aGUgY2FzZSBvZiBmYWlsdXJlIHRv
IG9wZW4gdGhlIGRhdGFiYXNlLCB0aGUgZmFjdG9yeSBtZXRob2RzIHdpbGwKKy8vIHNpbXBseSBk
aXNjYXJkIHRoZSBuZXdseSBpbnN0YW50aWF0ZWQgRGF0YWJhc2VCYWNrZW5kIHdoZW4gdGhleSBy
ZXR1cm4uCisvLyBUaGUgcmVmIGNvdW50aW5nIG1lY2hhbmltcyB3aWxsIGF1dG9tYXRpY2FsbHkg
ZGVzdHJ1Y3QgdGhlIHVuLWFkZGVkCisvLyAoYW5kIHVuLXJldHVybmVkKSBkYXRhYmFzZXMgaW5z
dGFuY2VzLgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyIHZlcnNp
b25LZXlbXSA9ICJXZWJLaXREYXRhYmFzZVZlcnNpb25LZXkiOwpAQCAtMjA4LDcgKzIzOCw2IEBA
IERhdGFiYXNlQmFja2VuZDo6RGF0YWJhc2VCYWNrZW5kKFBhc3NSZWYKICAgICB9CiAKICAgICBt
X2ZpbGVuYW1lID0gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuZnVsbFBhdGhGb3JEYXRhYmFz
ZShzZWN1cml0eU9yaWdpbigpLCBtX25hbWUpOwotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdl
cigpLmFkZE9wZW5EYXRhYmFzZSh0aGlzKTsKIH0KIAogRGF0YWJhc2VCYWNrZW5kOjp+RGF0YWJh
c2VCYWNrZW5kKCkKQEAgLTIyMyw2ICsyNTIsOCBAQCB2b2lkIERhdGFiYXNlQmFja2VuZDo6Y2xv
c2VEYXRhYmFzZSgpCiAKICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CiAgICAgbV9vcGVu
ZWQgPSBmYWxzZTsKKyAgICAvLyBTZWUgY29tbWVudCBhdCB0aGUgdG9wIHRoaXMgZmlsZSByZWdh
cmRpbmcgY2FsbGluZyByZW1vdmVPcGVuRGF0YWJhc2UoKS4KKyAgICBEYXRhYmFzZVRyYWNrZXI6
OnRyYWNrZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2UodGhpcyk7CiAgICAgewogICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwogCkBAIC0yNTYsNiArMjg3LDcgQEAgYm9vbCBE
YXRhYmFzZUJhY2tlbmQ6OnBlcmZvcm1PcGVuQW5kVmVyaQogICAgICAgICByZXBvcnRPcGVuRGF0
YWJhc2VSZXN1bHQoMSwgSU5WQUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVy
cm9yKCkpOwogICAgICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVuYWJs
ZSB0byBvcGVuIGRhdGFiYXNlIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxp
dGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9F
UlI7CisgICAgICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRvbmVDcmVhdGluZ0RhdGFi
YXNlKHRoaXMpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICghbV9zcWxp
dGVEYXRhYmFzZS50dXJuT25JbmNyZW1lbnRhbEF1dG9WYWN1dW0oKSkKQEAgLTI5OSw2ICszMzEs
NyBAQCBib29sIERhdGFiYXNlQmFja2VuZDo6cGVyZm9ybU9wZW5BbmRWZXJpCiAgICAgICAgICAg
ICAgICAgZXJyb3JNZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBk
YXRhYmFzZSwgZmFpbGVkIHRvIHN0YXJ0IHRyYW5zYWN0aW9uIiwgbV9zcWxpdGVEYXRhYmFzZS5s
YXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAg
ICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgICAgICAgICBtX3NxbGl0ZURh
dGFiYXNlLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2Vy
KCkuZG9uZUNyZWF0aW5nRGF0YWJhc2UodGhpcyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgfQogCkBAIC0zMTIsNiArMzQ1LDcgQEAgYm9vbCBEYXRhYmFzZUJh
Y2tlbmQ6OnBlcmZvcm1PcGVuQW5kVmVyaQogICAgICAgICAgICAgICAgICAgICBlYyA9IElOVkFM
SURfU1RBVEVfRVJSOwogICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5yb2xsYmFjaygp
OwogICAgICAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAg
ICAgICAgICAgICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRvbmVDcmVhdGluZ0RhdGFi
YXNlKHRoaXMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmICghZ2V0VmVyc2lvbkZyb21EYXRhYmFzZShj
dXJyZW50VmVyc2lvbiwgZmFsc2UpKSB7CkBAIC0zMjAsNiArMzU0LDcgQEAgYm9vbCBEYXRhYmFz
ZUJhY2tlbmQ6OnBlcmZvcm1PcGVuQW5kVmVyaQogICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJ
RF9TVEFURV9FUlI7CiAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKICAg
ICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgICAgICAgICAg
RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZG9uZUNyZWF0aW5nRGF0YWJhc2UodGhpcyk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogCkBAIC0zMzMsNiAr
MzY4LDcgQEAgYm9vbCBEYXRhYmFzZUJhY2tlbmQ6OnBlcmZvcm1PcGVuQW5kVmVyaQogICAgICAg
ICAgICAgICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICAgICAgICAgICAg
ICB0cmFuc2FjdGlvbi5yb2xsYmFjaygpOwogICAgICAgICAgICAgICAgICAgICBtX3NxbGl0ZURh
dGFiYXNlLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIERhdGFiYXNlVHJhY2tlcjo6dHJh
Y2tlcigpLmRvbmVDcmVhdGluZ0RhdGFiYXNlKHRoaXMpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGN1cnJlbnRW
ZXJzaW9uID0gbV9leHBlY3RlZFZlcnNpb247CkBAIC0zNTQsMTIgKzM5MCwxNSBAQCBib29sIERh
dGFiYXNlQmFja2VuZDo6cGVyZm9ybU9wZW5BbmRWZXJpCiAgICAgICAgIGVycm9yTWVzc2FnZSA9
ICJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSwgdmVyc2lvbiBtaXNtYXRjaCwgJyIgKyBtX2V4cGVj
dGVkVmVyc2lvbiArICInIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50VmVyc2lvbiBvZiAnIiAr
IGN1cnJlbnRWZXJzaW9uICsgIiciOwogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwog
ICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgIERhdGFiYXNlVHJhY2tl
cjo6dHJhY2tlcigpLmRvbmVDcmVhdGluZ0RhdGFiYXNlKHRoaXMpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCiAgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKICAgICBt
X3NxbGl0ZURhdGFiYXNlLnNldEF1dGhvcml6ZXIobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwogCisg
ICAgLy8gU2VlIGNvbW1lbnQgYXQgdGhlIHRvcCB0aGlzIGZpbGUgcmVnYXJkaW5nIGNhbGxpbmcg
YWRkT3BlbkRhdGFiYXNlKCkuCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuYWRkT3Bl
bkRhdGFiYXNlKHRoaXMpOwogICAgIG1fb3BlbmVkID0gdHJ1ZTsKIAogICAgIGlmIChtX25ldyAm
JiAhc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJhc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCShyZXZp
c2lvbiAxNDEzODApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw3ICsyMTIsNiBAQCBQYXNzUmVm
UHRyPERhdGFiYXNlPiBEYXRhYmFzZU1hbmFnZXI6Om9wCiAgICAgU3RyaW5nIGVycm9yTWVzc2Fn
ZTsKICAgICBpZiAoIWRhdGFiYXNlLT5vcGVuQW5kVmVyaWZ5VmVyc2lvbighY3JlYXRpb25DYWxs
YmFjaywgZSwgZXJyb3JNZXNzYWdlKSkgewogICAgICAgICBkYXRhYmFzZS0+bG9nRXJyb3JNZXNz
YWdlKGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIHJlbW92ZU9wZW5EYXRhYmFzZShkYXRhYmFzZS5n
ZXQoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMjQ2LDcgKzI0NSw2IEBAIFBh
c3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBEYXRhYmFzZU1hbmFnZXIKICAgICBTdHJpbmcgZXJyb3JN
ZXNzYWdlOwogICAgIGlmICghZGF0YWJhc2UtPnBlcmZvcm1PcGVuQW5kVmVyaWZ5KCFjcmVhdGlv
bkNhbGxiYWNrLCBlYywgZXJyb3JNZXNzYWdlKSkgewogICAgICAgICBkYXRhYmFzZS0+bG9nRXJy
b3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIHJlbW92ZU9wZW5EYXRhYmFzZShkYXRh
YmFzZS5nZXQoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMzYyLDE2ICszNjAs
NiBAQCBib29sIERhdGFiYXNlTWFuYWdlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhCiAgICAgcmV0dXJu
IG1fc2VydmVyLT5jYW5Fc3RhYmxpc2hEYXRhYmFzZShjb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFt
ZSwgZXN0aW1hdGVkU2l6ZSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VNYW5hZ2VyOjphZGRPcGVuRGF0
YWJhc2UoRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSkKLXsKLSAgICBtX3NlcnZlci0+YWRkT3Bl
bkRhdGFiYXNlKGRhdGFiYXNlKTsKLX0KLQotdm9pZCBEYXRhYmFzZU1hbmFnZXI6OnJlbW92ZU9w
ZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQotewotICAgIG1fc2VydmVyLT5y
ZW1vdmVPcGVuRGF0YWJhc2UoZGF0YWJhc2UpOwotfQotCiB2b2lkIERhdGFiYXNlTWFuYWdlcjo6
c2V0RGF0YWJhc2VEZXRhaWxzKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplKQogewogICAgIG1fc2VydmVyLT5zZXREYXRhYmFzZURldGFpbHMob3JpZ2luLCBuYW1lLCBk
aXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHJldmlzaW9uIDE0MTM4
MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2Vy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw4ICsxMTIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBp
bnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsK
IAogICAgIGJvb2wgY2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQg
bG9uZyBlc3RpbWF0ZWRTaXplKTsKLSAgICB2b2lkIGFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZUJh
Y2tlbmQqKTsKLSAgICB2b2lkIHJlbW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqKTsK
IAogICAgIHZvaWQgc2V0RGF0YWJhc2VEZXRhaWxzKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGlt
YXRlZFNpemUpOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRNYXhTaXplRm9yRGF0YWJhc2Uo
Y29uc3QgRGF0YWJhc2VCYWNrZW5kKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNwcAkocmV2aXNpb24gMTQxMzgw
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSwxNiArMTUxLDYgQEAgYm9vbCBEYXRhYmFzZVNlcnZl
cjo6Y2FuRXN0YWJsaXNoRGF0YWJhcwogICAgIHJldHVybiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNr
ZXIoKS5jYW5Fc3RhYmxpc2hEYXRhYmFzZShjb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0
aW1hdGVkU2l6ZSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VTZXJ2ZXI6OmFkZE9wZW5EYXRhYmFzZShE
YXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQotewotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tl
cigpLmFkZE9wZW5EYXRhYmFzZShkYXRhYmFzZSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VTZXJ2ZXI6
OnJlbW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQotewotICAgIERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZShkYXRhYmFzZSk7Ci19
Ci0KIHZvaWQgRGF0YWJhc2VTZXJ2ZXI6OnNldERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdp
biogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKIHsKICAgICBEYXRhYmFzZVRyYWNrZXI6OnRy
YWNrZXIoKS5zZXREYXRhYmFzZURldGFpbHMob3JpZ2luLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0
aW1hdGVkU2l6ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlU2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVNlcnZlci5oCShyZXZpc2lvbiAxNDEzODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTcxLDggKzcxLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpbnRlcnJ1cHRBbGxE
YXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAg
IHZpcnR1YWwgYm9vbCBjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRPcGVuRGF0YWJhc2Uo
RGF0YWJhc2VCYWNrZW5kKik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZU9wZW5EYXRhYmFzZShE
YXRhYmFzZUJhY2tlbmQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhYmFzZURldGFpbHMo
U2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgdmlydHVhbCB1bnNpZ25l
ZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IERhdGFiYXNlQmFja2VuZCop
OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VTeW5jLmNwcAkocmV2aXNpb24gMTQxMzgwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMCAr
NTgsOCBAQCBEYXRhYmFzZVN5bmM6On5EYXRhYmFzZVN5bmMoKQogewogICAgIEFTU0VSVChtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKIAotICAgIGlmIChvcGVu
ZWQoKSkgewotICAgICAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5yZW1vdmVPcGVuRGF0
YWJhc2UodGhpcyk7CisgICAgaWYgKG9wZW5lZCgpKQogICAgICAgICBjbG9zZURhdGFiYXNlKCk7
Ci0gICAgfQogfQogCiB2b2lkIERhdGFiYXNlU3luYzo6Y2hhbmdlVmVyc2lvbihjb25zdCBTdHJp
bmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2hhbmdlVmVyc2lvbkNhbGxiYWNrLCBFeGNlcHRpb25D
b2RlJiBlYykKQEAgLTE4Myw3ICsxODEsNiBAQCB2b2lkIERhdGFiYXNlU3luYzo6Y2xvc2VJbW1l
ZGlhdGVseSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGxvZ0Vycm9yTWVzc2FnZSgiZm9yY2li
bHkgY2xvc2luZyBkYXRhYmFzZSIpOwotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLnJl
bW92ZU9wZW5EYXRhYmFzZSh0aGlzKTsKICAgICBjbG9zZURhdGFiYXNlKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
VHJhY2tlci5jcHAJKHJldmlzaW9uIDE0MTM4MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDYg
KzQ5MiwxMiBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjp1c2FnCiAgICAg
cmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUocGF0aCk7CiB9CiAK
K3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpkb25lQ3JlYXRpbmdEYXRhYmFzZShEYXRhYmFzZUJhY2tl
bmQqIGRhdGFiYXNlKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNl
R3VhcmQpOworICAgIGRvbmVDcmVhdGluZ0RhdGFiYXNlKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdp
bigpLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsKK30KKwogdm9pZCBEYXRhYmFzZVRy
YWNrZXI6OmFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQogewogICAg
IGlmICghZGF0YWJhc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlVHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmgJKHJldmlzaW9uIDE0MTM4MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDYgKzc0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RGF0YWJhc2VEZXRh
aWxzKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwogICAgIFN0cmluZyBmdWxs
UGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
IGNyZWF0ZUlmRG9lc05vdEV4aXN0ID0gdHJ1ZSk7CiAKKyAgICB2b2lkIGRvbmVDcmVhdGluZ0Rh
dGFiYXNlKERhdGFiYXNlQmFja2VuZCopOwogICAgIHZvaWQgYWRkT3BlbkRhdGFiYXNlKERhdGFi
YXNlQmFja2VuZCopOwogICAgIHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2Vu
ZCopOwogICAgIHZvaWQgZ2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0
cmluZyYgbmFtZSwgSGFzaFNldDxSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiA+KiBkYXRhYmFzZXMp
Owo=
</data>
<flag name="commit-queue"
          id="204863"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185719</attachid>
            <date>2013-01-31 01:55:43 -0800</date>
            <delta_ts>2013-01-31 21:21:54 -0800</delta_ts>
            <desc>a better patch.</desc>
            <filename>bug-108431.patch</filename>
            <type>text/plain</type>
            <size>15110</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDEzLTAxLTMxICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCBjYWxscyB0byBEYXRh
YmFzZVRyYWNrZXI6OmFkZC9yZW1vdmVPcGVuRGF0YWJhc2UoKS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODQzMQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgcGFydCBvZiB0aGUgd2ViZGF0
YWJhc2UgcmVmYWN0b3JpbmcgZWZmb3J0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAg
ICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oOgorICAg
ICAgICAoQWJzdHJhY3REYXRhYmFzZVNlcnZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6Y2xvc2UpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6RGF0YWJhc2VCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6Y2xvc2VEYXRhYmFzZSk6CisgICAgICAgIChEb25l
Q3JlYXRpbmdEYXRhYmFzZU9uRXhpdENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEb25lQ3Jl
YXRpbmdEYXRhYmFzZU9uRXhpdENhbGxlcjo6RG9uZUNyZWF0aW5nRGF0YWJhc2VPbkV4aXRDYWxs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9uZUNyZWF0aW5nRGF0YWJhc2VPbkV4aXRDYWxsZXI6
On5Eb25lQ3JlYXRpbmdEYXRhYmFzZU9uRXhpdENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZUJhY2tlbmQ6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1h
bmFnZXI6Om9wZW5EYXRhYmFzZVN5bmMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VNYW5hZ2VyLmg6CisgICAgICAgIChEYXRhYmFzZU1hbmFnZXIpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuY3BwOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6
On5EYXRhYmFzZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpjbG9zZUlt
bWVkaWF0ZWx5KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRvbmVDcmVhdGluZ0Rh
dGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFi
YXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oOgor
ICAgICAgICAoRGF0YWJhc2VUcmFja2VyKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlVHJhY2tlcjo6ZG9uZUNyZWF0aW5nRGF0YWJhc2UpOgorCiAyMDEzLTAxLTMxICBL
ZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbVjhdIFRyYWNl
IG5vdCBvbmx5IG1ham9yIERPTSBHQ3MgYnV0IGFsc28gbWlub3IgRE9NIEdDcwpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlU2VydmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFj
dERhdGFiYXNlU2VydmVyLmgJKHJldmlzaW9uIDE0MTM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC03Niw4ICs3Niw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaW50ZXJydXB0QWxs
RGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgPSAwOwog
CiAgICAgdmlydHVhbCBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZGRPcGVu
RGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVP
cGVuRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kKikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHNl
dERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKSA9IDA7
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNv
bnN0IERhdGFiYXNlQmFja2VuZCopID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxNDEzOTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTcxLDcgKzE3MSw2IEBAIHZvaWQgRGF0YWJhc2U6OmNsb3NlKCkKICAgICBSZWZQdHI8
RGF0YWJhc2U+IHByb3RlY3QgPSB0aGlzOwogICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFz
ZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZUNsb3NlZCh0aGlzKTsKICAgICBkYXRhYmFzZUNvbnRl
eHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+dW5zY2hlZHVsZURhdGFiYXNlVGFza3ModGhpcyk7Ci0g
ICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOwog
fQogCiB2b2lkIERhdGFiYXNlOjpjbG9zZUltbWVkaWF0ZWx5KCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5jcHAJ
KHJldmlzaW9uIDE0MTM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2lu
Y2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXplci5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQ29udGV4dC5o
IgogI2luY2x1ZGUgIkRhdGFiYXNlTWFuYWdlci5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tl
ci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAj
aW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCkBAIC01Myw2ICs1NCwzNSBAQAogI2luY2x1ZGUg
IkRhdGFiYXNlT2JzZXJ2ZXIuaCIgLy8gRm9yIGVycm9yIHJlcG9ydGluZy4KICNlbmRpZgogCisv
LyBSZWdpc3RlcmluZyAib3BlbmVkIiBkYXRhYmFzZXMgd2l0aCB0aGUgRGF0YWJhc2VUcmFja2Vy
CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CisvLyBUaGUgRGF0YWJhc2VUcmFja2VyIG1haW50YWlucyBhIGxpc3Qgb2YgZGF0YWJhc2Vz
IHRoYXQgaGF2ZSBiZWVuCisvLyAib3BlbmVkIiBzbyB0aGF0IHRoZSBjbGllbnQgY2FuIGNhbGwg
aW50ZXJydXB0IG9yIGRlbGV0ZSBldmVyeSBkYXRhYmFzZQorLy8gYXNzb2NpYXRlZCB3aXRoIGEg
RGF0YWJhc2VDb250ZXh0LgorLy8KKy8vIFdlIHdpbGwgb25seSBjYWxsIERhdGFiYXNlVHJhY2tl
cjo6YWRkT3BlbkRhdGFiYXNlKCkgdG8gYWRkIHRoZSBkYXRhYmFzZQorLy8gdG8gdGhlIHRyYWNr
ZXIgYXMgb3BlbmVkIHdoZW4gd2UndmUgc3VjY2VlZGVkIGluIG9wZW5pbmcgdGhlIGRhdGFiYXNl
LAorLy8gYW5kIHdpbGwgc2V0IG1fb3BlbmVkIHRvIHRydWUuIFNpbWlsYXJseSwgd2Ugb25seSBj
YWxsCisvLyBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZSgpIHRvIHJlbW92ZSB0
aGUgZGF0YWJhc2UgZnJvbSB0aGUKKy8vIHRyYWNrZXIgd2hlbiB3ZSBzZXQgbV9vcGVuZWQgdG8g
ZmFsc2UgaW4gY2xvc2VEYXRhYmFzZSgpLiBUaGlzIHNldHMgdXAKKy8vIGEgc2ltcGxlIHN5bW1l
dHJ5IGJldHdlZW4gb3BlbiBhbmQgY2xvc2Ugb3BlcmF0aW9ucywgYW5kIGEgZGlyZWN0CisvLyBj
b3JyZWxhdGlvbiB0byBhZGRpbmcgYW5kIHJlbW92aW5nIGRhdGFiYXNlcyBmcm9tIHRoZSB0cmFj
a2VyJ3MgbGlzdCwKKy8vIHRodXMgZW5zdXJpbmcgdGhhdCB3ZSBoYXZlIGEgY29ycmVjdCBsaXN0
IGZvciB0aGUgaW50ZXJydXB0IGFuZAorLy8gZGVsZXRlIG9wZXJhdGlvbnMgdG8gd29yayBvbi4K
Ky8vCisvLyBUaGUgb25seSBkYXRhYmFzZXMgaW5zdGFuY2VzIG5vdCB0cmFja2VkIGJ5IHRoZSB0
cmFja2VyJ3Mgb3BlbiBkYXRhYmFzZQorLy8gbGlzdCBhcmUgdGhlIG9uZXMgdGhhdCBoYXZlIG5v
dCBiZWVuIGFkZGVkIHlldCwgb3IgdGhlIG9uZXMgdGhhdCB3ZQorLy8gYXR0ZW1wdGVkIGFuIG9w
ZW4gb24gYnV0IGZhaWxlZCB0by4gU3VjaCBpbnN0YW5jZXMgb25seSBleGlzdCBpbiB0aGUKKy8v
IERhdGFiYXNlTWFuYWdlcidzIGZhY3RvcnkgbWV0aG9kcyBmb3IgY3JlYXRpbmcgRGF0YWJhc2VC
YWNrZW5kcy4KKy8vCisvLyBUaGUgZmFjdG9yeSBtZXRob2RzIHdpbGwgZWl0aGVyIGNhbGwgb3Bl
bkFuZFZlcmlmeVZlcnNpb24oKSBvcgorLy8gcGVyZm9ybU9wZW5BbmRWZXJpZnkoKS4gVGhlc2Ug
bWV0aG9kcyB3aWxsIGFkZCB0aGUgbmV3bHkgaW5zdGFudGlhdGVkCisvLyBEYXRhYmFzZUJhY2tl
bmQgaWYgdGhleSBzdWNjZWVkIGluIG9wZW5pbmcgdGhlIHJlcXVlc3RlZCBkYXRhYmFzZS4KKy8v
IEluIHRoZSBjYXNlIG9mIGZhaWx1cmUgdG8gb3BlbiB0aGUgZGF0YWJhc2UsIHRoZSBmYWN0b3J5
IG1ldGhvZHMgd2lsbAorLy8gc2ltcGx5IGRpc2NhcmQgdGhlIG5ld2x5IGluc3RhbnRpYXRlZCBE
YXRhYmFzZUJhY2tlbmQgd2hlbiB0aGV5IHJldHVybi4KKy8vIFRoZSByZWYgY291bnRpbmcgbWVj
aGFuaW1zIHdpbGwgYXV0b21hdGljYWxseSBkZXN0cnVjdCB0aGUgdW4tYWRkZWQKKy8vIChhbmQg
dW4tcmV0dXJuZWQpIGRhdGFiYXNlcyBpbnN0YW5jZXMuCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbktleVtdID0gIldlYktpdERhdGFiYXNlVmVyc2lv
bktleSI7CkBAIC0yMDgsNyArMjM4LDYgQEAgRGF0YWJhc2VCYWNrZW5kOjpEYXRhYmFzZUJhY2tl
bmQoUGFzc1JlZgogICAgIH0KIAogICAgIG1fZmlsZW5hbWUgPSBEYXRhYmFzZU1hbmFnZXI6Om1h
bmFnZXIoKS5mdWxsUGF0aEZvckRhdGFiYXNlKHNlY3VyaXR5T3JpZ2luKCksIG1fbmFtZSk7Ci0g
ICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuYWRkT3BlbkRhdGFiYXNlKHRoaXMpOwogfQog
CiBEYXRhYmFzZUJhY2tlbmQ6On5EYXRhYmFzZUJhY2tlbmQoKQpAQCAtMjIzLDYgKzI1Miw4IEBA
IHZvaWQgRGF0YWJhc2VCYWNrZW5kOjpjbG9zZURhdGFiYXNlKCkKIAogICAgIG1fc3FsaXRlRGF0
YWJhc2UuY2xvc2UoKTsKICAgICBtX29wZW5lZCA9IGZhbHNlOworICAgIC8vIFNlZSBjb21tZW50
IGF0IHRoZSB0b3AgdGhpcyBmaWxlIHJlZ2FyZGluZyBjYWxsaW5nIHJlbW92ZU9wZW5EYXRhYmFz
ZSgpLgorICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZSh0
aGlzKTsKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CiAK
QEAgLTI0Niw4ICsyNzcsMjMgQEAgU3RyaW5nIERhdGFiYXNlQmFja2VuZDo6dmVyc2lvbigpIGNv
bnN0CiAgICAgcmV0dXJuIGdldENhY2hlZFZlcnNpb24oKTsKIH0KIAorY2xhc3MgRG9uZUNyZWF0
aW5nRGF0YWJhc2VPbkV4aXRDYWxsZXIgeworcHVibGljOgorICAgIERvbmVDcmVhdGluZ0RhdGFi
YXNlT25FeGl0Q2FsbGVyKERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCisgICAgICAgIDogbV9k
YXRhYmFzZShkYXRhYmFzZSkKKyAgICB7CisgICAgfQorICAgIH5Eb25lQ3JlYXRpbmdEYXRhYmFz
ZU9uRXhpdENhbGxlcigpCisgICAgeworICAgICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIo
KS5kb25lQ3JlYXRpbmdEYXRhYmFzZShtX2RhdGFiYXNlKTsKKyAgICB9Citwcml2YXRlOgorICAg
IERhdGFiYXNlQmFja2VuZCogbV9kYXRhYmFzZTsKK307CisKIGJvb2wgRGF0YWJhc2VCYWNrZW5k
OjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNl
LCBFeGNlcHRpb25Db2RlJiBlYywgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7CisgICAgRG9uZUNy
ZWF0aW5nRGF0YWJhc2VPbkV4aXRDYWxsZXIgb25FeGl0Q2FsbGVyKHRoaXMpOwogICAgIEFTU0VS
VChlcnJvck1lc3NhZ2UuaXNFbXB0eSgpKTsKIAogICAgIGNvbnN0IGludCBtYXhTcWxpdGVCdXN5
V2FpdFRpbWUgPSAzMDAwMDsKQEAgLTM2MCw2ICs0MDYsOCBAQCBib29sIERhdGFiYXNlQmFja2Vu
ZDo6cGVyZm9ybU9wZW5BbmRWZXJpCiAgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsK
ICAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEF1dGhvcml6ZXIobV9kYXRhYmFzZUF1dGhvcml6ZXIp
OwogCisgICAgLy8gU2VlIGNvbW1lbnQgYXQgdGhlIHRvcCB0aGlzIGZpbGUgcmVnYXJkaW5nIGNh
bGxpbmcgYWRkT3BlbkRhdGFiYXNlKCkuCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCku
YWRkT3BlbkRhdGFiYXNlKHRoaXMpOwogICAgIG1fb3BlbmVkID0gdHJ1ZTsKIAogICAgIGlmICht
X25ldyAmJiAhc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJhc2UpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3Bw
CShyZXZpc2lvbiAxNDEzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw3ICsyMTIsNiBAQCBQ
YXNzUmVmUHRyPERhdGFiYXNlPiBEYXRhYmFzZU1hbmFnZXI6Om9wCiAgICAgU3RyaW5nIGVycm9y
TWVzc2FnZTsKICAgICBpZiAoIWRhdGFiYXNlLT5vcGVuQW5kVmVyaWZ5VmVyc2lvbighY3JlYXRp
b25DYWxsYmFjaywgZSwgZXJyb3JNZXNzYWdlKSkgewogICAgICAgICBkYXRhYmFzZS0+bG9nRXJy
b3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIHJlbW92ZU9wZW5EYXRhYmFzZShkYXRh
YmFzZS5nZXQoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMjQ2LDcgKzI0NSw2
IEBAIFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBEYXRhYmFzZU1hbmFnZXIKICAgICBTdHJpbmcg
ZXJyb3JNZXNzYWdlOwogICAgIGlmICghZGF0YWJhc2UtPnBlcmZvcm1PcGVuQW5kVmVyaWZ5KCFj
cmVhdGlvbkNhbGxiYWNrLCBlYywgZXJyb3JNZXNzYWdlKSkgewogICAgICAgICBkYXRhYmFzZS0+
bG9nRXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIHJlbW92ZU9wZW5EYXRhYmFz
ZShkYXRhYmFzZS5nZXQoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMzYyLDE2
ICszNjAsNiBAQCBib29sIERhdGFiYXNlTWFuYWdlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhCiAgICAg
cmV0dXJuIG1fc2VydmVyLT5jYW5Fc3RhYmxpc2hEYXRhYmFzZShjb250ZXh0LCBuYW1lLCBkaXNw
bGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VNYW5hZ2VyOjphZGRP
cGVuRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSkKLXsKLSAgICBtX3NlcnZlci0+
YWRkT3BlbkRhdGFiYXNlKGRhdGFiYXNlKTsKLX0KLQotdm9pZCBEYXRhYmFzZU1hbmFnZXI6OnJl
bW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQotewotICAgIG1fc2Vy
dmVyLT5yZW1vdmVPcGVuRGF0YWJhc2UoZGF0YWJhc2UpOwotfQotCiB2b2lkIERhdGFiYXNlTWFu
YWdlcjo6c2V0RGF0YWJhc2VEZXRhaWxzKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3Rp
bWF0ZWRTaXplKQogewogICAgIG1fc2VydmVyLT5zZXREYXRhYmFzZURldGFpbHMob3JpZ2luLCBu
YW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHJldmlzaW9u
IDE0MTM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VN
YW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw4ICsxMTIsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBpbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqKTsKIAogICAgIGJvb2wgY2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5z
aWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKLSAgICB2b2lkIGFkZE9wZW5EYXRhYmFzZShEYXRh
YmFzZUJhY2tlbmQqKTsKLSAgICB2b2lkIHJlbW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tl
bmQqKTsKIAogICAgIHZvaWQgc2V0RGF0YWJhc2VEZXRhaWxzKFNlY3VyaXR5T3JpZ2luKiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25n
IGVzdGltYXRlZFNpemUpOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRNYXhTaXplRm9yRGF0
YWJhc2UoY29uc3QgRGF0YWJhc2VCYWNrZW5kKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNwcAkocmV2aXNpb24g
MTQxMzkwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNl
cnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSwxNiArMTUxLDYgQEAgYm9vbCBEYXRhYmFz
ZVNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhcwogICAgIHJldHVybiBEYXRhYmFzZVRyYWNrZXI6
OnRyYWNrZXIoKS5jYW5Fc3RhYmxpc2hEYXRhYmFzZShjb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFt
ZSwgZXN0aW1hdGVkU2l6ZSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VTZXJ2ZXI6OmFkZE9wZW5EYXRh
YmFzZShEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQotewotICAgIERhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLmFkZE9wZW5EYXRhYmFzZShkYXRhYmFzZSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VT
ZXJ2ZXI6OnJlbW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQotewot
ICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZShkYXRhYmFz
ZSk7Ci19Ci0KIHZvaWQgRGF0YWJhc2VTZXJ2ZXI6OnNldERhdGFiYXNlRGV0YWlscyhTZWN1cml0
eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKIHsKICAgICBEYXRhYmFzZVRyYWNr
ZXI6OnRyYWNrZXIoKS5zZXREYXRhYmFzZURldGFpbHMob3JpZ2luLCBuYW1lLCBkaXNwbGF5TmFt
ZSwgZXN0aW1hdGVkU2l6ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlU2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5oCShyZXZpc2lvbiAxNDEzOTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcxLDggKzcxLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpbnRlcnJ1
cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsK
IAogICAgIHZpcnR1YWwgYm9vbCBjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1
bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRPcGVuRGF0
YWJhc2UoRGF0YWJhc2VCYWNrZW5kKik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZU9wZW5EYXRh
YmFzZShEYXRhYmFzZUJhY2tlbmQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhYmFzZURl
dGFpbHMoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
ZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgdmlydHVhbCB1
bnNpZ25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IERhdGFiYXNlQmFj
a2VuZCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VTeW5jLmNwcAkocmV2aXNpb24gMTQxMzkwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
OCwxMCArNTgsOCBAQCBEYXRhYmFzZVN5bmM6On5EYXRhYmFzZVN5bmMoKQogewogICAgIEFTU0VS
VChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKIAotICAgIGlm
IChvcGVuZWQoKSkgewotICAgICAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5yZW1vdmVP
cGVuRGF0YWJhc2UodGhpcyk7CisgICAgaWYgKG9wZW5lZCgpKQogICAgICAgICBjbG9zZURhdGFi
YXNlKCk7Ci0gICAgfQogfQogCiB2b2lkIERhdGFiYXNlU3luYzo6Y2hhbmdlVmVyc2lvbihjb25z
dCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbiwgUGFzc1JlZlB0
cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2hhbmdlVmVyc2lvbkNhbGxiYWNrLCBFeGNl
cHRpb25Db2RlJiBlYykKQEAgLTE4Myw3ICsxODEsNiBAQCB2b2lkIERhdGFiYXNlU3luYzo6Y2xv
c2VJbW1lZGlhdGVseSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGxvZ0Vycm9yTWVzc2FnZSgi
Zm9yY2libHkgY2xvc2luZyBkYXRhYmFzZSIpOwotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdl
cigpLnJlbW92ZU9wZW5EYXRhYmFzZSh0aGlzKTsKICAgICBjbG9zZURhdGFiYXNlKCk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVHJhY2tlci5jcHAJKHJldmlzaW9uIDE0MTM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDkyLDYgKzQ5MiwxMiBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjp1c2Fn
CiAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUocGF0aCk7
CiB9CiAKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpkb25lQ3JlYXRpbmdEYXRhYmFzZShEYXRhYmFz
ZUJhY2tlbmQqIGRhdGFiYXNlKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2Rh
dGFiYXNlR3VhcmQpOworICAgIGRvbmVDcmVhdGluZ0RhdGFiYXNlKGRhdGFiYXNlLT5zZWN1cml0
eU9yaWdpbigpLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsKK30KKwogdm9pZCBEYXRh
YmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQog
ewogICAgIGlmICghZGF0YWJhc2UpCkBAIC01MjYsOSArNTMyLDYgQEAgdm9pZCBEYXRhYmFzZVRy
YWNrZXI6OmFkZE9wZW5EYXRhYmFzZShEYQogICAgICAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2Vy
KCkuYWRkRGF0YWJhc2UoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCksIGRhdGFiYXNlLT5zdHJp
bmdJZGVudGlmaWVyKCksIGRhdGFiYXNlLT5maWxlTmFtZSgpKTsKICAgICAgICAgfQogICAgIH0K
LQotICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwotICAgIGRv
bmVDcmVhdGluZ0RhdGFiYXNlKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZS0+
c3RyaW5nSWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9w
ZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oCShyZXZp
c2lvbiAxNDEzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlVHJhY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplKTsKICAgICBTdHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNv
bnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCA9IHRydWUpOwogCisg
ICAgdm9pZCBkb25lQ3JlYXRpbmdEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqKTsKICAgICB2b2lk
IGFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqKTsKICAgICB2b2lkIHJlbW92ZU9wZW5E
YXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqKTsKICAgICB2b2lkIGdldE9wZW5EYXRhYmFzZXMoU2Vj
dXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNl
QmFja2VuZD4gPiogZGF0YWJhc2VzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VU
cmFja2VyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxNDEzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTAgQEAgU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6
ZnVsbFBhdGhGb3JEYXRhYgogICAgIHJldHVybiBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigp
ICsgIi8iICsgbmFtZSArICIjIjsKIH0KIAordm9pZCBEYXRhYmFzZVRyYWNrZXI6OmRvbmVDcmVh
dGluZ0RhdGFiYXNlKERhdGFiYXNlQmFja2VuZCopCit7Cit9CisKIHZvaWQgRGF0YWJhc2VUcmFj
a2VyOjphZGRPcGVuRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSkKIHsKICAgICBB
U1NFUlQoZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFk
KCkpOwo=
</data>
<flag name="review"
          id="204882"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185935</attachid>
            <date>2013-01-31 21:21:54 -0800</date>
            <delta_ts>2013-02-01 13:29:51 -0800</delta_ts>
            <desc>the patch plus fixing up the chromium port to work with this change.</desc>
            <filename>bug-108431.patch</filename>
            <type>text/plain</type>
            <size>20029</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTUzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDEzLTAxLTMxICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCBjYWxscyB0byBEYXRh
YmFzZVRyYWNrZXI6OmFkZC9yZW1vdmVPcGVuRGF0YWJhc2UoKS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODQzMQorCisgICAgICAgIFJldmlld2Vk
IGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgIEFsc28gYWRhcHRlZCB0aGUgY2hyb21pdW0g
cG9ydCB0byB3b3JrIHdpdGggdGhpcyBuZXcgY29kZS4KKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9m
IHRoZSB3ZWJkYXRhYmFzZSByZWZhY3RvcmluZyBlZmZvcnQuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLgorCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlU2Vy
dmVyLmg6CisgICAgICAgIChBYnN0cmFjdERhdGFiYXNlU2VydmVyKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
OjpvcGVuQW5kVmVyaWZ5VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6Y2xv
c2UpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6RGF0YWJhc2VCYWNrZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6Y2xvc2VEYXRhYmFzZSk6CisgICAgICAg
IChEb25lQ3JlYXRpbmdEYXRhYmFzZU9uRXhpdENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpE
b25lQ3JlYXRpbmdEYXRhYmFzZU9uRXhpdENhbGxlcjo6RG9uZUNyZWF0aW5nRGF0YWJhc2VPbkV4
aXRDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9uZUNyZWF0aW5nRGF0YWJhc2VPbkV4aXRD
YWxsZXI6On5Eb25lQ3JlYXRpbmdEYXRhYmFzZU9uRXhpdENhbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZUJhY2tlbmQ6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5oOgorICAgICAgICAoRGF0YWJhc2VC
YWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6aXNQcmVwYXJlZFRv
T3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6c2V0SXNQ
cmVwYXJlZFRvT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Om9w
ZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRh
YmFzZVN5bmMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2Vy
Lmg6CisgICAgICAgIChEYXRhYmFzZU1hbmFnZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuY3BwOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VTZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
U3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6On5EYXRhYmFzZVN5bmMp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpjbG9zZUltbWVkaWF0ZWx5KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRvbmVDcmVhdGluZ0RhdGFiYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oOgorICAgICAgICAoRGF0YWJh
c2VUcmFja2VyKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFi
YXNlVHJhY2tlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6YWRkT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6
cHJlcGFyZVRvT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6ZmFpbGVkVG9PcGVuRGF0YWJhc2UpOgorCiAyMDEzLTAxLTMxICBLZW50IFRhbXVyYSAgPHRr
ZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZWZhY3RvcmluZzogUmVtb3ZlIHRoZSBkZWZh
dWx0IGFyZ3VtZW50IHZhbHVlIGZvciBOb2RlOjpzZXRGb2N1cwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlU2VydmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNl
U2VydmVyLmgJKHJldmlzaW9uIDE0MTUzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw4
ICs3Niw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaW50ZXJydXB0QWxsRGF0YWJhc2Vz
Rm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgPSAwOwogCiAgICAgdmly
dHVhbCBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZGRPcGVuRGF0YWJhc2Uo
RGF0YWJhc2VCYWNrZW5kKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVPcGVuRGF0YWJh
c2UoRGF0YWJhc2VCYWNrZW5kKikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHNldERhdGFiYXNl
RGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKSA9IDA7CiAgICAgdmly
dHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IERhdGFi
YXNlQmFja2VuZCopID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxNDE1MzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsNyBAQAogI2luY2x1ZGUgIkRhdGFiYXNlTWFuYWdlci5oIgogI2luY2x1ZGUgIkRhdGFi
YXNlVGFzay5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCisjaW5jbHVkZSAiRGF0YWJh
c2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTEyNiw2ICsxMjcsOSBAQCBib29sIERh
dGFiYXNlOjpvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sCiAgICAgaWYgKCFkYXRhYmFzZUNvbnRl
eHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSB8fCBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJl
YWQoKS0+dGVybWluYXRpb25SZXF1ZXN0ZWQoJnN5bmNocm9uaXplcikpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIERhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLnByZXBhcmVUb09wZW5EYXRhYmFzZSh0aGlzKTsKKyNlbmRpZgogICAgIGJvb2wg
c3VjY2VzcyA9IGZhbHNlOwogICAgIE93blB0cjxEYXRhYmFzZU9wZW5UYXNrPiB0YXNrID0gRGF0
YWJhc2VPcGVuVGFzazo6Y3JlYXRlKHRoaXMsIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCAmc3lu
Y2hyb25pemVyLCBlLCBlcnJvck1lc3NhZ2UsIHN1Y2Nlc3MpOwogICAgIGRhdGFiYXNlQ29udGV4
dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5zY2hlZHVsZUltbWVkaWF0ZVRhc2sodGFzay5yZWxlYXNl
KCkpOwpAQCAtMTcxLDcgKzE3NSw2IEBAIHZvaWQgRGF0YWJhc2U6OmNsb3NlKCkKICAgICBSZWZQ
dHI8RGF0YWJhc2U+IHByb3RlY3QgPSB0aGlzOwogICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRh
YmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZUNsb3NlZCh0aGlzKTsKICAgICBkYXRhYmFzZUNv
bnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+dW5zY2hlZHVsZURhdGFiYXNlVGFza3ModGhpcyk7
Ci0gICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMp
OwogfQogCiB2b2lkIERhdGFiYXNlOjpjbG9zZUltbWVkaWF0ZWx5KCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5j
cHAJKHJldmlzaW9uIDE0MTUzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXplci5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQ29udGV4
dC5oIgogI2luY2x1ZGUgIkRhdGFiYXNlTWFuYWdlci5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVHJh
Y2tlci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCkBAIC01Myw2ICs1NCwzNSBAQAogI2luY2x1
ZGUgIkRhdGFiYXNlT2JzZXJ2ZXIuaCIgLy8gRm9yIGVycm9yIHJlcG9ydGluZy4KICNlbmRpZgog
CisvLyBSZWdpc3RlcmluZyAib3BlbmVkIiBkYXRhYmFzZXMgd2l0aCB0aGUgRGF0YWJhc2VUcmFj
a2VyCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CisvLyBUaGUgRGF0YWJhc2VUcmFja2VyIG1haW50YWlucyBhIGxpc3Qgb2YgZGF0YWJh
c2VzIHRoYXQgaGF2ZSBiZWVuCisvLyAib3BlbmVkIiBzbyB0aGF0IHRoZSBjbGllbnQgY2FuIGNh
bGwgaW50ZXJydXB0IG9yIGRlbGV0ZSBvbiBldmVyeSBkYXRhYmFzZQorLy8gYXNzb2NpYXRlZCB3
aXRoIGEgRGF0YWJhc2VDb250ZXh0LgorLy8KKy8vIFdlIHdpbGwgb25seSBjYWxsIERhdGFiYXNl
VHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKCkgdG8gYWRkIHRoZSBkYXRhYmFzZQorLy8gdG8gdGhl
IHRyYWNrZXIgYXMgb3BlbmVkIHdoZW4gd2UndmUgc3VjY2VlZGVkIGluIG9wZW5pbmcgdGhlIGRh
dGFiYXNlLAorLy8gYW5kIHdpbGwgc2V0IG1fb3BlbmVkIHRvIHRydWUuIFNpbWlsYXJseSwgd2Ug
b25seSBjYWxsCisvLyBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZSgpIHRvIHJl
bW92ZSB0aGUgZGF0YWJhc2UgZnJvbSB0aGUKKy8vIHRyYWNrZXIgd2hlbiB3ZSBzZXQgbV9vcGVu
ZWQgdG8gZmFsc2UgaW4gY2xvc2VEYXRhYmFzZSgpLiBUaGlzIHNldHMgdXAKKy8vIGEgc2ltcGxl
IHN5bW1ldHJ5IGJldHdlZW4gb3BlbiBhbmQgY2xvc2Ugb3BlcmF0aW9ucywgYW5kIGEgZGlyZWN0
CisvLyBjb3JyZWxhdGlvbiB0byBhZGRpbmcgYW5kIHJlbW92aW5nIGRhdGFiYXNlcyBmcm9tIHRo
ZSB0cmFja2VyJ3MgbGlzdCwKKy8vIHRodXMgZW5zdXJpbmcgdGhhdCB3ZSBoYXZlIGEgY29ycmVj
dCBsaXN0IGZvciB0aGUgaW50ZXJydXB0IGFuZAorLy8gZGVsZXRlIG9wZXJhdGlvbnMgdG8gd29y
ayBvbi4KKy8vCisvLyBUaGUgb25seSBkYXRhYmFzZXMgaW5zdGFuY2VzIG5vdCB0cmFja2VkIGJ5
IHRoZSB0cmFja2VyJ3Mgb3BlbiBkYXRhYmFzZQorLy8gbGlzdCBhcmUgdGhlIG9uZXMgdGhhdCBo
YXZlIG5vdCBiZWVuIGFkZGVkIHlldCwgb3IgdGhlIG9uZXMgdGhhdCB3ZQorLy8gYXR0ZW1wdGVk
IGFuIG9wZW4gb24gYnV0IGZhaWxlZCB0by4gU3VjaCBpbnN0YW5jZXMgb25seSBleGlzdCBpbiB0
aGUKKy8vIERhdGFiYXNlTWFuYWdlcidzIGZhY3RvcnkgbWV0aG9kcyBmb3IgY3JlYXRpbmcgRGF0
YWJhc2VCYWNrZW5kcy4KKy8vCisvLyBUaGUgZmFjdG9yeSBtZXRob2RzIHdpbGwgZWl0aGVyIGNh
bGwgb3BlbkFuZFZlcmlmeVZlcnNpb24oKSBvcgorLy8gcGVyZm9ybU9wZW5BbmRWZXJpZnkoKS4g
VGhlc2UgbWV0aG9kcyB3aWxsIGFkZCB0aGUgbmV3bHkgaW5zdGFudGlhdGVkCisvLyBEYXRhYmFz
ZUJhY2tlbmQgaWYgdGhleSBzdWNjZWVkIGluIG9wZW5pbmcgdGhlIHJlcXVlc3RlZCBkYXRhYmFz
ZS4KKy8vIEluIHRoZSBjYXNlIG9mIGZhaWx1cmUgdG8gb3BlbiB0aGUgZGF0YWJhc2UsIHRoZSBm
YWN0b3J5IG1ldGhvZHMgd2lsbAorLy8gc2ltcGx5IGRpc2NhcmQgdGhlIG5ld2x5IGluc3RhbnRp
YXRlZCBEYXRhYmFzZUJhY2tlbmQgd2hlbiB0aGV5IHJldHVybi4KKy8vIFRoZSByZWYgY291bnRp
bmcgbWVjaGFuaW1zIHdpbGwgYXV0b21hdGljYWxseSBkZXN0cnVjdCB0aGUgdW4tYWRkZWQKKy8v
IChhbmQgdW4tcmV0dXJuZWQpIGRhdGFiYXNlcyBpbnN0YW5jZXMuCisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbktleVtdID0gIldlYktpdERhdGFiYXNl
VmVyc2lvbktleSI7CkBAIC0xODYsNiArMjE2LDkgQEAgRGF0YWJhc2VCYWNrZW5kOjpEYXRhYmFz
ZUJhY2tlbmQoUGFzc1JlZgogICAgICwgbV9vcGVuZWQoZmFsc2UpCiAgICAgLCBtX25ldyhmYWxz
ZSkKICAgICAsIG1faXNTeW5jRGF0YWJhc2UoZGF0YWJhc2VUeXBlID09IFN5bmNEYXRhYmFzZSkK
KyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAsIG1faXNQcmVwYXJlZFRvT3BlbkRhdGFiYXNl
KGZhbHNlKQorI2VuZGlmCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2VDb250ZXh0LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBtX2NvbnRleHRUaHJl
YWRTZWN1cml0eU9yaWdpbiA9IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlPcmln
aW4oKS0+aXNvbGF0ZWRDb3B5KCk7CkBAIC0yMDgsNyArMjQxLDYgQEAgRGF0YWJhc2VCYWNrZW5k
OjpEYXRhYmFzZUJhY2tlbmQoUGFzc1JlZgogICAgIH0KIAogICAgIG1fZmlsZW5hbWUgPSBEYXRh
YmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5mdWxsUGF0aEZvckRhdGFiYXNlKHNlY3VyaXR5T3JpZ2lu
KCksIG1fbmFtZSk7Ci0gICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuYWRkT3BlbkRhdGFi
YXNlKHRoaXMpOwogfQogCiBEYXRhYmFzZUJhY2tlbmQ6On5EYXRhYmFzZUJhY2tlbmQoKQpAQCAt
MjIzLDYgKzI1NSw4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kOjpjbG9zZURhdGFiYXNlKCkKIAog
ICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKICAgICBtX29wZW5lZCA9IGZhbHNlOworICAg
IC8vIFNlZSBjb21tZW50IGF0IHRoZSB0b3AgdGhpcyBmaWxlIHJlZ2FyZGluZyBjYWxsaW5nIHJl
bW92ZU9wZW5EYXRhYmFzZSgpLgorICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92
ZU9wZW5EYXRhYmFzZSh0aGlzKTsKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihn
dWlkTXV0ZXgoKSk7CiAKQEAgLTI0NiwxMiArMjgwLDM5IEBAIFN0cmluZyBEYXRhYmFzZUJhY2tl
bmQ6OnZlcnNpb24oKSBjb25zdAogICAgIHJldHVybiBnZXRDYWNoZWRWZXJzaW9uKCk7CiB9CiAK
K2NsYXNzIERvbmVDcmVhdGluZ0RhdGFiYXNlT25FeGl0Q2FsbGVyIHsKK3B1YmxpYzoKKyAgICBE
b25lQ3JlYXRpbmdEYXRhYmFzZU9uRXhpdENhbGxlcihEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNl
LCBFeGNlcHRpb25Db2RlJiBlYykKKyAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAg
ICAgICAsIG1fZWMoZWMpCisgICAgeworICAgIH0KKyAgICB+RG9uZUNyZWF0aW5nRGF0YWJhc2VP
bkV4aXRDYWxsZXIoKQorICAgIHsKKyNpZiAhUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAgIERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRvbmVDcmVhdGluZ0RhdGFiYXNlKG1fZGF0YWJhc2Up
OworI2Vsc2UKKyAgICAgICAgaWYgKG1fZWMgPT0gSU5WQUxJRF9TVEFURV9FUlIpCisgICAgICAg
ICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5mYWlsZWRUb09wZW5EYXRhYmFzZShtX2Rh
dGFiYXNlKTsKKyNlbmRpZgorICAgICAgICAgICAgCisgICAgfQorcHJpdmF0ZToKKyAgICBEYXRh
YmFzZUJhY2tlbmQqIG1fZGF0YWJhc2U7CisgICAgRXhjZXB0aW9uQ29kZSYgbV9lYzsKK307CisK
IGJvb2wgRGF0YWJhc2VCYWNrZW5kOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNl
dFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiBlYywgU3RyaW5nJiBlcnJvck1l
c3NhZ2UpCiB7CisgICAgRG9uZUNyZWF0aW5nRGF0YWJhc2VPbkV4aXRDYWxsZXIgb25FeGl0Q2Fs
bGVyKHRoaXMsIGVjKTsKICAgICBBU1NFUlQoZXJyb3JNZXNzYWdlLmlzRW1wdHkoKSk7CisgICAg
QVNTRVJUKCFlYyk7IC8vIEJldHRlciBub3QgaGF2ZSBhbnkgZXhjZXB0aW9ucyBhbHJlYWR5Lgog
CiAgICAgY29uc3QgaW50IG1heFNxbGl0ZUJ1c3lXYWl0VGltZSA9IDMwMDAwOwogCisjaWYgUExB
VEZPUk0oQ0hST01JVU0pCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucHJlcGFyZVRv
T3BlbkRhdGFiYXNlKHRoaXMpOworI2VuZGlmCiAgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLm9w
ZW4obV9maWxlbmFtZSwgdHJ1ZSkpIHsKICAgICAgICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0
KDEsIElOVkFMSURfU1RBVEVfRVJSLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKICAg
ICAgICAgZXJyb3JNZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBk
YXRhYmFzZSIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwpAQCAtMzYwLDYgKzQyMSw4IEBAIGJvb2wgRGF0YWJhc2VCYWNrZW5k
OjpwZXJmb3JtT3BlbkFuZFZlcmkKICAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwog
ICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QXV0aG9yaXplcihtX2RhdGFiYXNlQXV0aG9yaXplcik7
CiAKKyAgICAvLyBTZWUgY29tbWVudCBhdCB0aGUgdG9wIHRoaXMgZmlsZSByZWdhcmRpbmcgY2Fs
bGluZyBhZGRPcGVuRGF0YWJhc2UoKS4KKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5h
ZGRPcGVuRGF0YWJhc2UodGhpcyk7CiAgICAgbV9vcGVuZWQgPSB0cnVlOwogCiAgICAgaWYgKG1f
bmV3ICYmICFzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaAkocmV2
aXNpb24gMTQxNTM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZUJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtODksNiArODksMTEgQEAgcHVibGljOgog
CiAgICAgRGF0YWJhc2VDb250ZXh0KiBkYXRhYmFzZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBt
X2RhdGFiYXNlQ29udGV4dC5nZXQoKTsgfQogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAg
Ym9vbCBpc1ByZXBhcmVkVG9PcGVuRGF0YWJhc2UoKSBjb25zdCB7IHJldHVybiBtX2lzUHJlcGFy
ZWRUb09wZW5EYXRhYmFzZTsgfQorICAgIHZvaWQgc2V0SXNQcmVwYXJlZFRvT3BlbkRhdGFiYXNl
KGJvb2wgcHJlcGFyZWRuZXNzKSB7IG1faXNQcmVwYXJlZFRvT3BlbkRhdGFiYXNlID0gcHJlcGFy
ZWRuZXNzOyB9CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyBDaGFuZ2VW
ZXJzaW9uV3JhcHBlcjsKICAgICBmcmllbmQgY2xhc3MgU1FMU3RhdGVtZW50OwpAQCAtMTUwLDYg
KzE1NSw5IEBAIHByaXZhdGU6CiAgICAgU1FMaXRlRGF0YWJhc2UgbV9zcWxpdGVEYXRhYmFzZTsK
IAogICAgIFJlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IG1fZGF0YWJhc2VBdXRob3JpemVyOwor
I2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIGJvb2wgbV9pc1ByZXBhcmVkVG9PcGVuRGF0YWJh
c2U7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5j
cHAJKHJldmlzaW9uIDE0MTUzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDcgKzIxMiw2IEBA
IFBhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlTWFuYWdlcjo6b3AKICAgICBTdHJpbmcgZXJy
b3JNZXNzYWdlOwogICAgIGlmICghZGF0YWJhc2UtPm9wZW5BbmRWZXJpZnlWZXJzaW9uKCFjcmVh
dGlvbkNhbGxiYWNrLCBlLCBlcnJvck1lc3NhZ2UpKSB7CiAgICAgICAgIGRhdGFiYXNlLT5sb2dF
cnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgcmVtb3ZlT3BlbkRhdGFiYXNlKGRh
dGFiYXNlLmdldCgpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0yNDYsNyArMjQ1
LDYgQEAgUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IERhdGFiYXNlTWFuYWdlcgogICAgIFN0cmlu
ZyBlcnJvck1lc3NhZ2U7CiAgICAgaWYgKCFkYXRhYmFzZS0+cGVyZm9ybU9wZW5BbmRWZXJpZnko
IWNyZWF0aW9uQ2FsbGJhY2ssIGVjLCBlcnJvck1lc3NhZ2UpKSB7CiAgICAgICAgIGRhdGFiYXNl
LT5sb2dFcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgcmVtb3ZlT3BlbkRhdGFi
YXNlKGRhdGFiYXNlLmdldCgpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0zNjIs
MTYgKzM2MCw2IEBAIGJvb2wgRGF0YWJhc2VNYW5hZ2VyOjpjYW5Fc3RhYmxpc2hEYXRhYmEKICAg
ICByZXR1cm4gbV9zZXJ2ZXItPmNhbkVzdGFibGlzaERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGRp
c3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKIH0KIAotdm9pZCBEYXRhYmFzZU1hbmFnZXI6OmFk
ZE9wZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQotewotICAgIG1fc2VydmVy
LT5hZGRPcGVuRGF0YWJhc2UoZGF0YWJhc2UpOwotfQotCi12b2lkIERhdGFiYXNlTWFuYWdlcjo6
cmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCi17Ci0gICAgbV9z
ZXJ2ZXItPnJlbW92ZU9wZW5EYXRhYmFzZShkYXRhYmFzZSk7Ci19Ci0KIHZvaWQgRGF0YWJhc2VN
YW5hZ2VyOjpzZXREYXRhYmFzZURldGFpbHMoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUpCiB7CiAgICAgbV9zZXJ2ZXItPnNldERhdGFiYXNlRGV0YWlscyhvcmlnaW4s
IG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuaAkocmV2aXNp
b24gMTQxNTM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDggKzExMiw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCopOwogCiAgICAgYm9vbCBjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1
bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwotICAgIHZvaWQgYWRkT3BlbkRhdGFiYXNlKERh
dGFiYXNlQmFja2VuZCopOwotICAgIHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFj
a2VuZCopOwogCiAgICAgdm9pZCBzZXREYXRhYmFzZURldGFpbHMoU2VjdXJpdHlPcmlnaW4qLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGdldE1heFNpemVGb3JE
YXRhYmFzZShjb25zdCBEYXRhYmFzZUJhY2tlbmQqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuY3BwCShyZXZpc2lv
biAxNDE1MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
U2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDE2ICsxNTEsNiBAQCBib29sIERhdGFi
YXNlU2VydmVyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzCiAgICAgcmV0dXJuIERhdGFiYXNlVHJhY2tl
cjo6dHJhY2tlcigpLmNhbkVzdGFibGlzaERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGRpc3BsYXlO
YW1lLCBlc3RpbWF0ZWRTaXplKTsKIH0KIAotdm9pZCBEYXRhYmFzZVNlcnZlcjo6YWRkT3BlbkRh
dGFiYXNlKERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCi17Ci0gICAgRGF0YWJhc2VUcmFja2Vy
Ojp0cmFja2VyKCkuYWRkT3BlbkRhdGFiYXNlKGRhdGFiYXNlKTsKLX0KLQotdm9pZCBEYXRhYmFz
ZVNlcnZlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCi17
Ci0gICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKGRhdGFi
YXNlKTsKLX0KLQogdm9pZCBEYXRhYmFzZVNlcnZlcjo6c2V0RGF0YWJhc2VEZXRhaWxzKFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNw
bGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQogewogICAgIERhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlcigpLnNldERhdGFiYXNlRGV0YWlscyhvcmlnaW4sIG5hbWUsIGRpc3BsYXlO
YW1lLCBlc3RpbWF0ZWRTaXplKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmgJKHJldmlzaW9uIDE0MTUzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzEsOCArNzEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGludGVy
cnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3QgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCop
OwogCiAgICAgdmlydHVhbCBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFkZE9wZW5E
YXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlT3BlbkRh
dGFiYXNlKERhdGFiYXNlQmFja2VuZCopOwogCiAgICAgdmlydHVhbCB2b2lkIHNldERhdGFiYXNl
RGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKICAgICB2aXJ0dWFs
IHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgRGF0YWJhc2VC
YWNrZW5kKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVN5bmMuY3BwCShyZXZpc2lvbiAxNDE1MzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDEwICs1OCw4IEBAIERhdGFiYXNlU3luYzo6fkRhdGFiYXNlU3luYygpCiB7CiAgICAgQVNT
RVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwogCi0gICAg
aWYgKG9wZW5lZCgpKSB7Ci0gICAgICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLnJlbW92
ZU9wZW5EYXRhYmFzZSh0aGlzKTsKKyAgICBpZiAob3BlbmVkKCkpCiAgICAgICAgIGNsb3NlRGF0
YWJhc2UoKTsKLSAgICB9CiB9CiAKIHZvaWQgRGF0YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9uKGNv
bnN0IFN0cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLCBQYXNzUmVm
UHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjaGFuZ2VWZXJzaW9uQ2FsbGJhY2ssIEV4
Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTgzLDcgKzE4MSw2IEBAIHZvaWQgRGF0YWJhc2VTeW5jOjpj
bG9zZUltbWVkaWF0ZWx5KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbG9nRXJyb3JNZXNzYWdl
KCJmb3JjaWJseSBjbG9zaW5nIGRhdGFiYXNlIik7Ci0gICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5h
Z2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOwogICAgIGNsb3NlRGF0YWJhc2UoKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNr
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VUcmFja2VyLmNwcAkocmV2aXNpb24gMTQxNTM0KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OTIsNiArNDkyLDEyIEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnVz
YWcKICAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShwYXRo
KTsKIH0KIAordm9pZCBEYXRhYmFzZVRyYWNrZXI6OmRvbmVDcmVhdGluZ0RhdGFiYXNlKERhdGFi
YXNlQmFja2VuZCogZGF0YWJhc2UpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1f
ZGF0YWJhc2VHdWFyZCk7CisgICAgZG9uZUNyZWF0aW5nRGF0YWJhc2UoZGF0YWJhc2UtPnNlY3Vy
aXR5T3JpZ2luKCksIGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOworfQorCiB2b2lkIERh
dGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2Up
CiB7CiAgICAgaWYgKCFkYXRhYmFzZSkKQEAgLTUyNiw5ICs1MzIsNiBAQCB2b2lkIERhdGFiYXNl
VHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKERhCiAgICAgICAgICAgICBvcmlnaW5RdW90YU1hbmFn
ZXIoKS5hZGREYXRhYmFzZShkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSwgZGF0YWJhc2UtPnN0
cmluZ0lkZW50aWZpZXIoKSwgZGF0YWJhc2UtPmZpbGVOYW1lKCkpOwogICAgICAgICB9CiAgICAg
fQotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAg
ZG9uZUNyZWF0aW5nRGF0YWJhc2UoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCksIGRhdGFiYXNl
LT5zdHJpbmdJZGVudGlmaWVyKCkpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3Zl
T3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmgJKHJl
dmlzaW9uIDE0MTUzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsOCBAQCBwdWJsaWM6
CiAKICAgICBib29sIGhhc0VudHJ5Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7CiAKKyAgICB2
b2lkIGRvbmVDcmVhdGluZ0RhdGFiYXNlKERhdGFiYXNlQmFja2VuZCopOworCiBwcml2YXRlOgog
ICAgIGJvb2wgaGFzRW50cnlGb3JPcmlnaW5Ob0xvY2soU2VjdXJpdHlPcmlnaW4qIG9yaWdpbik7
CiAgICAgU3RyaW5nIGZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2soU2VjdXJpdHlPcmlnaW4qLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3QpOwpAQCAtMTcwLDEw
ICsxNzIsMTMgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyB2b2lkIHNjaGVkdWxlRm9yTm90aWZp
Y2F0aW9uKCk7CiAgICAgc3RhdGljIHZvaWQgbm90aWZ5RGF0YWJhc2VzQ2hhbmdlZCh2b2lkKik7
Ci0jZWxzZQorI2Vsc2UgLy8gUExBVEZPUk0oQ0hST01JVU0pCiBwdWJsaWM6CiAgICAgdm9pZCBj
bG9zZURhdGFiYXNlc0ltbWVkaWF0ZWx5KGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBuYW1lKTsKIAorICAgIHZvaWQgcHJlcGFyZVRvT3BlbkRhdGFiYXNlKERh
dGFiYXNlQmFja2VuZCopOworICAgIHZvaWQgZmFpbGVkVG9PcGVuRGF0YWJhc2UoRGF0YWJhc2VC
YWNrZW5kKik7CisKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoU2V0PERhdGFiYXNlQmFja2Vu
ZCo+IERhdGFiYXNlU2V0OwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlU2V0
Kj4gRGF0YWJhc2VOYW1lTWFwOwpAQCAtMTg0LDcgKzE4OSw3IEBAIHByaXZhdGU6CiAKICAgICBN
dXRleCBtX29wZW5EYXRhYmFzZU1hcEd1YXJkOwogICAgIG11dGFibGUgT3duUHRyPERhdGFiYXNl
T3JpZ2luTWFwPiBtX29wZW5EYXRhYmFzZU1hcDsKLSNlbmRpZiAvLyAhUExBVEZPUk0oQ0hST01J
VU0pCisjZW5kaWYgLy8gUExBVEZPUk0oQ0hST01JVU0pCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVt
L0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNw
cAkocmV2aXNpb24gMTQxNTM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTczLDcgKzczLDYgQEAgU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYgog
CiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZCog
ZGF0YWJhc2UpCiB7Ci0gICAgQVNTRVJUKGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBM
b2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwogICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXAp
CiAgICAgICAgIG1fb3BlbkRhdGFiYXNlTWFwID0gYWRvcHRQdHIobmV3IERhdGFiYXNlT3JpZ2lu
TWFwKTsKQEAgLTkzLDggKzkyLDYgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRh
YmFzZShEYQogICAgIH0KIAogICAgIGRhdGFiYXNlU2V0LT5hZGQoZGF0YWJhc2UpOwotCi0gICAg
RGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VPcGVuZWQoZGF0YWJhc2UpOwogfQogCiBjbGFzcyBO
b3RpZnlEYXRhYmFzZU9ic2VydmVyT25DbG9zZVRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzayB7CkBAIC0xNTcsNiArMTU0LDI0IEBAIHZvaWQgRGF0YWJhc2VUcmFja2Vy
OjpyZW1vdmVPcGVuRGF0YWJhc2UKICAgICAgICAgRGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VD
bG9zZWQoZGF0YWJhc2UpOwogfQogCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6cHJlcGFyZVRvT3Bl
bkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCit7CisgICAgaWYgKCFkYXRhYmFz
ZS0+aXNQcmVwYXJlZFRvT3BlbkRhdGFiYXNlKCkpIHsKKyAgICAgICAgQVNTRVJUKGRhdGFiYXNl
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICAgICAg
RGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VPcGVuZWQoZGF0YWJhc2UpOworICAgICAgICBkYXRh
YmFzZS0+c2V0SXNQcmVwYXJlZFRvT3BlbkRhdGFiYXNlKHRydWUpOworICAgIH0KK30KKwordm9p
ZCBEYXRhYmFzZVRyYWNrZXI6OmZhaWxlZFRvT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZCog
ZGF0YWJhc2UpCit7CisgICAgZGF0YWJhc2UtPnNldElzUHJlcGFyZWRUb09wZW5EYXRhYmFzZShm
YWxzZSk7IC8vIHJlc2V0IHRoZSBwcmVwYXJlZC1uZXNzIHN0YXRlLgorICAgIGlmICghZGF0YWJh
c2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpCisgICAgICAg
IGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKE5vdGlmeURhdGFi
YXNlT2JzZXJ2ZXJPbkNsb3NlVGFzazo6Y3JlYXRlKGRhdGFiYXNlKSk7CisgICAgZWxzZQorICAg
ICAgICBEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFzZUNsb3NlZChkYXRhYmFzZSk7Cit9CisKIHVu
c2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZShj
b25zdCBEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQogewogICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyBzcGFjZUF2YWlsYWJsZSA9IDA7Cg==
</data>
<flag name="review"
          id="205198"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185984</attachid>
            <date>2013-02-01 01:59:40 -0800</date>
            <delta_ts>2013-02-01 08:39:31 -0800</delta_ts>
            <desc>test patch to test the baseline on the EWS.  This patch does nothing and is not for review.</desc>
            <filename>test.patch</filename>
            <type>text/plain</type>
            <size>418</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0
YXRlbWVudC5jcHAJKHJldmlzaW9uIDE0MTU0MikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNRTFN0YXRlbWVudC5oIgogCisv
LyBKdXN0IGEgdGVzdCBjb21tZW50LgorCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAogI2lu
Y2x1ZGUgIkRhdGFiYXNlLmgiCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>