<?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>26054</bug_id>
          
          <creation_ts>2009-05-27 18:15:41 -0700</creation_ts>
          <short_desc>Need a new abstraction layer between the DB classes and the file system</short_desc>
          <delta_ts>2009-07-02 14:43:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dumitru Daniliuc">dumi</reporter>
          <assigned_to name="Dumitru Daniliuc">dumi</assigned_to>
          <cc>andersca</cc>
    
    <cc>aroben</cc>
    
    <cc>beidson</cc>
    
    <cc>dglazkov</cc>
    
    <cc>jorlow</cc>
    
    <cc>michaeln</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>123349</commentid>
    <comment_count>0</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-05-27 18:15:41 -0700</bug_when>
    <thetext>We need an abstraction layer between the DB classes and the file system. It would remove the assumption that each DB is stored in a file on the hard drive, and would allow us to implement our own logic of storing/opening/deleting/etc. databases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123350</commentid>
    <comment_count>1</comment_count>
      <attachid>30724</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-05-27 18:17:05 -0700</bug_when>
    <thetext>Created attachment 30724
Adds the required abstraction layer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123351</commentid>
    <comment_count>2</comment_count>
      <attachid>30725</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-05-27 18:17:23 -0700</bug_when>
    <thetext>Created attachment 30725
Adds the required abstraction layer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123356</commentid>
    <comment_count>3</comment_count>
      <attachid>30725</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-05-27 20:29:58 -0700</bug_when>
    <thetext>Comment on attachment 30725
Adds the required abstraction layer

Need XCode project changes.

The ChangeLog entry needs a description of the bug and URL of the bug.

Also, I would really like Brady or Anders to review this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123408</commentid>
    <comment_count>4</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-05-28 08:33:23 -0700</bug_when>
    <thetext>Since I&apos;ll be the one landing this once reviewed, I&apos;ll go ahead and commit to adding the XCode build changes to the patch, since Dumi doesn&apos;t have a Mac.

Dumi, can you resubmit after addressing the ChangeLog entries? Leave reviewer field blank.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123502</commentid>
    <comment_count>5</comment_count>
      <attachid>30760</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-05-28 17:36:49 -0700</bug_when>
    <thetext>Created attachment 30760
new patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123598</commentid>
    <comment_count>6</comment_count>
      <attachid>30760</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-05-29 13:24:15 -0700</bug_when>
    <thetext>Comment on attachment 30760
new patch

Adding review flag to make sure this is in the review queue. Anders, Adam, Brady, could you guys review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124419</commentid>
    <comment_count>7</comment_count>
      <attachid>30977</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-06-04 17:58:21 -0700</bug_when>
    <thetext>Created attachment 30977
same patch with a minor change

removed SQLiteFileSystem::allDatabasesClosed().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124894</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-06-08 22:46:28 -0700</bug_when>
    <thetext>FWIW, this code looks reasonable to me.

nit: Maybe use c++ style comments instead of c style in SQLiteFileSystem.h, the c style looks out of place to me for webkit (maybe I&apos;m wrong?). 

Dimitry said...
&gt; Also, I would really like Brady or Anders to review this.

I would really like Brady or Anders (or whomever is guilty of the existing Database code) to have a decent understanding of where we&apos;re heading with this refactoring. The direction is not really apparent with the modest changes in this initial patch.

Part of our plan is to have a chromium specific impl of the SQLiteFileSystem class (in platform/chromium). No surprises there I&apos;m sure.

The more interesting parts of our plans are around the functionality provided by the central DatabaseTracker class. In chrome, access to the tracker database file will by constrained to code executing in the main browser process. The main browser process will also serve as a &apos;transaction coordinator&apos; in chrome. That &apos;coordinator&apos; is something the current Database impl has no notion of at this point (afaik).
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125140</commentid>
    <comment_count>9</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-10 09:12:57 -0700</bug_when>
    <thetext>Dumi, one of the reasons why your patch hasn&apos;t gotten any attention could be because you haven&apos;t marked it for review. Please do :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125201</commentid>
    <comment_count>10</comment_count>
      <attachid>30977</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-10 12:41:34 -0700</bug_when>
    <thetext>Comment on attachment 30977
same patch with a minor change

I looked over existing WebKit code and it looks like the practice of just defining functions, rather than a static class is preferred. I don&apos;t have hard feelings either way.
Overall, this looks fine. There are a couple of style nits below:


Now that I think about it, since the code in SQLiteFileSystem.* is reused from other files, we should take the copyright header from those files and add (C) Google blah line to it.

&gt; Property changes on: WebCore/platform/sql/SQLiteFileSystem.cpp
&gt; ___________________________________________________________________
&gt; Added: svn:executable
&gt;    + *

No need for this svn prop.

&gt; +    /*
&gt; +     * Registers a user-defined SQLite VFS.
&gt; +     */
&gt; +    static void registerSQLiteVFS();

Use C++ style comments here and elsewhere. No need for extra lines.

&gt;      if (result == SQLResultRow)
&gt; -        return pathByAppendingComponent(originPath, statement.getColumnText(0));
&gt; +      return SQLiteFileSystem::appendDatabaseFileNameToPath(originPath, statement.getColumnText(0));

A spacing issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125263</commentid>
    <comment_count>11</comment_count>
      <attachid>31151</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-06-10 18:59:46 -0700</bug_when>
    <thetext>Created attachment 31151
same patch (with all comments addressed)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125264</commentid>
    <comment_count>12</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-06-10 19:02:29 -0700</bug_when>
    <thetext>&gt; I looked over existing WebKit code and it looks like the practice of just
&gt; defining functions, rather than a static class is preferred. I don&apos;t have hard
&gt; feelings either way.

i left it as a class with all static methods. it seems to me like Class::Method makes the code a bit clearer than just methodThatCameOutOfNoWhere().

&gt; Now that I think about it, since the code in SQLiteFileSystem.* is reused from
&gt; other files, we should take the copyright header from those files and add (C)
&gt; Google blah line to it.

done (if i understood correctly what you meant). please take another look.

&gt; &gt; Property changes on: WebCore/platform/sql/SQLiteFileSystem.cpp
&gt; &gt; ___________________________________________________________________
&gt; &gt; Added: svn:executable
&gt; &gt;    + *

removed. never meant to have +x added to these files...

&gt; &gt; +    /*
&gt; &gt; +     * Registers a user-defined SQLite VFS.
&gt; &gt; +     */
&gt; &gt; +    static void registerSQLiteVFS();
&gt; 
&gt; Use C++ style comments here and elsewhere. No need for extra lines.

changed all comments to //.

&gt; &gt;      if (result == SQLResultRow)
&gt; &gt; -        return pathByAppendingComponent(originPath, statement.getColumnText(0));
&gt; &gt; +      return SQLiteFileSystem::appendDatabaseFileNameToPath(originPath, statement.getColumnText(0));
&gt; 
&gt; A spacing issue?

fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125366</commentid>
    <comment_count>13</comment_count>
      <attachid>31151</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-11 13:24:58 -0700</bug_when>
    <thetext>Comment on attachment 31151
same patch (with all comments addressed)

Are you sure you uploaded the right patch? The C-style comments are still there.

Also, I just saw that changes to WebCore.pro (Qt build) are missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126079</commentid>
    <comment_count>14</comment_count>
      <attachid>31317</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-06-15 16:22:50 -0700</bug_when>
    <thetext>Created attachment 31317
patch

added the changes to WebCore.pro and changed all /* */ comments to // (not sure how i missed that in the last patch).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126086</commentid>
    <comment_count>15</comment_count>
      <attachid>31317</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-06-15 16:47:10 -0700</bug_when>
    <thetext>Comment on attachment 31317
patch

&gt; Index: WebCore/platform/sql/SQLiteFileSystem.cpp
...
&gt; +String SQLiteFileSystem::getFileNameForNewDatabase(const String&amp; dbDir, const String&amp; dbName,
...
&gt; +    if (result == SQLResultRow) {
&gt; +        seq = sequenceStatement.getColumnInt64(0);
&gt; +    } else if (result != SQLResultDone)

nit: no brackets around single statement body


&gt; Index: WebCore/platform/sql/SQLiteFileSystem.h
...
&gt; +class SQLiteFileSystem {
...
&gt; +    static String getFileNameForNewDatabase(const String&amp; dbDir, const String&amp; dbName,
&gt; +					    const String&amp; originIdentifier, SQLiteDatabase* db);

nit: probably want to indent this second line by 2 more chars


&gt; Index: WebCore/storage/DatabaseTracker.cpp
...
&gt;      if (result == SQLResultRow)
&gt; -        return pathByAppendingComponent(originPath, statement.getColumnText(0));
&gt; +      return SQLiteFileSystem::appendDatabaseFileNameToPath(originPath, statement.getColumnText(0));

nit: indent by 4 white spaces</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126120</commentid>
    <comment_count>16</comment_count>
      <attachid>31328</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-06-15 20:08:04 -0700</bug_when>
    <thetext>Created attachment 31328
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126121</commentid>
    <comment_count>17</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-06-15 20:09:35 -0700</bug_when>
    <thetext>&gt; &gt; Index: WebCore/platform/sql/SQLiteFileSystem.cpp
&gt; ...
&gt; &gt; +String SQLiteFileSystem::getFileNameForNewDatabase(const String&amp; dbDir, const String&amp; dbName,
&gt; ...
&gt; &gt; +    if (result == SQLResultRow) {
&gt; &gt; +        seq = sequenceStatement.getColumnInt64(0);
&gt; &gt; +    } else if (result != SQLResultDone)
&gt; 
&gt; nit: no brackets around single statement body

removed.

&gt; &gt; Index: WebCore/platform/sql/SQLiteFileSystem.h
&gt; ...
&gt; &gt; +class SQLiteFileSystem {
&gt; ...
&gt; &gt; +    static String getFileNameForNewDatabase(const String&amp; dbDir, const String&amp; dbName,
&gt; &gt; +					    const String&amp; originIdentifier, SQLiteDatabase* db);
&gt; 
&gt; nit: probably want to indent this second line by 2 more chars

this looked ok in emacs because of tabs. replaced all tabs with empty spaces.

&gt; &gt; Index: WebCore/storage/DatabaseTracker.cpp
&gt; ...
&gt; &gt;      if (result == SQLResultRow)
&gt; &gt; -        return pathByAppendingComponent(originPath, statement.getColumnText(0));
&gt; &gt; +      return SQLiteFileSystem::appendDatabaseFileNameToPath(originPath, statement.getColumnText(0));
&gt; 
&gt; nit: indent by 4 white spaces

done.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126207</commentid>
    <comment_count>18</comment_count>
      <attachid>31328</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-16 08:59:42 -0700</bug_when>
    <thetext>Comment on attachment 31328
patch

Looks fine to me. I&apos;ll add xcodeproj changes when landing. beidson, andersca, unless you have any objections, I will r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126216</commentid>
    <comment_count>19</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-06-16 10:02:56 -0700</bug_when>
    <thetext>I&apos;ve been busy with conference stuff as of late - sorry for ignoring this!  I hope to give a full review today, please hold off till then  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127454</commentid>
    <comment_count>20</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-22 14:45:10 -0700</bug_when>
    <thetext>Any luck with finding time to review this? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127489</commentid>
    <comment_count>21</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-06-22 16:03:46 -0700</bug_when>
    <thetext>I am actually mopping up things today, Jeremy beat you out for LocalStorage though.  Gimme a bit.  ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128497</commentid>
    <comment_count>22</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-26 10:13:18 -0700</bug_when>
    <thetext>Dumi, can you rebase the patch? It&apos;s bit-rotten and I can&apos;t apply (damn WebCore.vcproj!) locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128530</commentid>
    <comment_count>23</comment_count>
      <attachid>31940</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-06-26 11:44:55 -0700</bug_when>
    <thetext>Created attachment 31940
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128531</commentid>
    <comment_count>24</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-06-26 11:47:13 -0700</bug_when>
    <thetext>Brady, we are submitting this patch because we need to move forward. However, if you get to reviewing this patch and have comments, I&apos;ll be happy to address them in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128575</commentid>
    <comment_count>25</comment_count>
      <attachid>31940</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-06-26 15:02:15 -0700</bug_when>
    <thetext>Comment on attachment 31940
patch

This looks fine in general, but...

&gt; +#if PLATFORM(WIN)
&gt; +#define PATH_SEPARATOR &apos;\\&apos;
&gt; +#else
&gt; +#define PATH_SEPARATOR &apos;/&apos;
&gt; +#endif
...
&gt; +bool SQLiteFileSystem::ensureDatabaseFileExists(const String&amp; fileName, bool checkPathOnly)
...
&gt; +        int lastIndexOfBackSlash = dir.reverseFind(PATH_SEPARATOR);
&gt; +        if (lastIndexOfBackSlash &gt; 0) {
&gt; +            dir.truncate(lastIndexOfBackSlash);
&gt; +            return ensureDatabaseDirectoryExists(dir);
&gt; +        }
...

*Please* don&apos;t add more platform specific ifdefs where not necessary - There is already a FileSystem.h abstraction for handling the difference in filesystem paths on Windows and non-Windows platforms.  
Use pathGetFileName() or directoryName() here instead!

r+ with that change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128576</commentid>
    <comment_count>26</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-06-26 15:03:00 -0700</bug_when>
    <thetext>(and nuke the windows.h include, which was discussed on IRC)  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128619</commentid>
    <comment_count>27</comment_count>
      <attachid>31967</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-06-26 18:35:30 -0700</bug_when>
    <thetext>Created attachment 31967
patch

Dimitri, Brady, please take one more quick look at this patch before we land it. I&apos;ve only made a few minor changes to address Brady&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128849</commentid>
    <comment_count>28</comment_count>
      <attachid>31967</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-29 11:31:20 -0700</bug_when>
    <thetext>Comment on attachment 31967
patch

Looks ok, needs XCode changes. Since this is going to break the canary and it needs the XCode project changes, I won&apos;t be able to land it until tomorrow. Not settting r+ to avoid accidental landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128866</commentid>
    <comment_count>29</comment_count>
      <attachid>31940</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-29 13:21:44 -0700</bug_when>
    <thetext>Comment on attachment 31940
patch

Clearing r+ on this obsolete patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129343</commentid>
    <comment_count>30</comment_count>
      <attachid>32136</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-01 13:02:42 -0700</bug_when>
    <thetext>Created attachment 32136
new patch with a bug fix + xcode changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129362</commentid>
    <comment_count>31</comment_count>
      <attachid>32139</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-01 14:15:58 -0700</bug_when>
    <thetext>Created attachment 32139
final version

forgot to add project.pbxproj to the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129377</commentid>
    <comment_count>32</comment_count>
      <attachid>32136</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-01 14:49:52 -0700</bug_when>
    <thetext>Comment on attachment 32136
new patch with a bug fix + xcode changes

r=me, will land.

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 45444)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,47 @@
&gt; +2009-07-01  Dumitru Daniliuc  &lt;dumi@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Adds an abstraction layer between the DB classes and the file
&gt; +        system, which allows us to add our own logic for storing, opening,
&gt; +        deleting, etc. databases.
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=26054
&gt; +
&gt; +        * GNUmakefile.am:
&gt; +        * WebCore.pro:
&gt; +        * WebCore.vcproj/WebCore.vcproj:
&gt; +        * platform/sql/SQLiteDatabase.cpp:
&gt; +        (WebCore::SQLiteDatabase::open):
&gt; +        * platform/sql/SQLiteFileSystem.cpp: Added.
&gt; +        (WebCore::SQLiteFileSystem::SQLiteFileSystem):
&gt; +        (WebCore::SQLiteFileSystem::registerSQLiteVFS):
&gt; +        (WebCore::SQLiteFileSystem::openDatabase):
&gt; +        (WebCore::SQLiteFileSystem::getFileNameForNewDatabase):
&gt; +        (WebCore::SQLiteFileSystem::appendDatabaseFileNameToPath):
&gt; +        (WebCore::SQLiteFileSystem::ensureDatabaseDirectoryExists):
&gt; +        (WebCore::SQLiteFileSystem::ensureDatabaseFileExists):
&gt; +        (WebCore::SQLiteFileSystem::deleteEmptyDatabaseDirectory):
&gt; +        (WebCore::SQLiteFileSystem::deleteDatabaseFile):
&gt; +        (WebCore::SQLiteFileSystem::getDatabaseFileSize):

When adding new files, you can remove entries listing new methods/funcs that are auto-generated by the prepare-ChangeLog script.

&gt; +        * platform/sql/SQLiteFileSystem.h: Added.
&gt; +        * platform/win/FileSystemWin.cpp:
&gt; +        (WebCore::directoryName):
&gt; +        * storage/Database.cpp:
&gt; +        (WebCore::Database::databaseSize):
&gt; +        * storage/DatabaseTracker.cpp:
&gt; +        (WebCore::DatabaseTracker::DatabaseTracker):
&gt; +        (WebCore::DatabaseTracker::trackerDatabasePath):
&gt; +        (WebCore::DatabaseTracker::openTrackerDatabase):
&gt; +        (WebCore::DatabaseTracker::originPath):
&gt; +        (WebCore::DatabaseTracker::fullPathForDatabase):
&gt; +        (WebCore::DatabaseTracker::usageForDatabase):
&gt; +        (WebCore::DatabaseTracker::deleteOrigin):
&gt; +        (WebCore::DatabaseTracker::deleteDatabaseFile):
&gt; +        * storage/OriginUsageRecord.cpp:
&gt; +        (WebCore::OriginUsageRecord::diskUsage):

It&apos;s a very good idea (though not required) to list what was done in each method. This auto-generated list is just for that purpose.

Also, you should mention which tests are affected, added, or used to ensure validity of patch.

&gt; +  String fileName = pathGetFileName(path);
&gt; +  String dirName = String(path);
&gt; +  dirName.truncate(dirName.length() - pathGetFileName(path).length());
&gt; +  return dirName;

4 spaces indent.

&gt;  #endif
&gt;  {
&gt; +  SQLiteFileSystem::registerSQLiteVFS();
&gt;  }

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129379</commentid>
    <comment_count>33</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-01 14:53:50 -0700</bug_when>
    <thetext>Also, please set your EMAIL_ADDRESS environment variable to make sure the prepare-ChangeLog script populates the top line of the entry correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129381</commentid>
    <comment_count>34</comment_count>
      <attachid>32139</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-01 15:02:18 -0700</bug_when>
    <thetext>Comment on attachment 32139
final version


&gt; +String SQLiteFileSystem::getFileNameForNewDatabase(const String&amp; dbDir, const String&amp; dbName,
&gt; +                                                   const String&amp; originIdentifier, SQLiteDatabase* db)
&gt; +{

&gt; +    // dbName and originIdentifier not used in the default WebKit implementation
&gt; +    // touch them so gcc doesn&apos;t complain about that when building on Mac
&gt; +    String unused = dbName;
&gt; +    unused = originIdentifier;

Oops, this is wrong. Let&apos;s not create more work. You can just do:

String SQLiteFileSystem::getFileNameForNewDatabase(const String&amp; dbDir, const String&amp;, const String&amp;, SQLiteDatabase* db)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129387</commentid>
    <comment_count>35</comment_count>
      <attachid>32148</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-01 15:21:02 -0700</bug_when>
    <thetext>Created attachment 32148
patch

addressing all dimitri&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129394</commentid>
    <comment_count>36</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-07-01 15:34:29 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; (From update of attachment 32139 [review])
&gt; 
&gt; &gt; +String SQLiteFileSystem::getFileNameForNewDatabase(const String&amp; dbDir, const String&amp; dbName,
&gt; &gt; +                                                   const String&amp; originIdentifier, SQLiteDatabase* db)
&gt; &gt; +{
&gt; 
&gt; &gt; +    // dbName and originIdentifier not used in the default WebKit implementation
&gt; &gt; +    // touch them so gcc doesn&apos;t complain about that when building on Mac
&gt; &gt; +    String unused = dbName;
&gt; &gt; +    unused = originIdentifier;
&gt; 
&gt; Oops, this is wrong. Let&apos;s not create more work. You can just do:
&gt; 
&gt; String SQLiteFileSystem::getFileNameForNewDatabase(const String&amp; dbDir, const
&gt; String&amp;, const String&amp;, SQLiteDatabase* db)

If you *really* had to name the parameters, you could use UNUSED_PARAM from &lt;wtf/UnusedParam.h&gt;:

UNUSED_PARAM(dbName);
UNUSED_PARAM(originIdentifier);

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129395</commentid>
    <comment_count>37</comment_count>
      <attachid>32148</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-01 15:35:19 -0700</bug_when>
    <thetext>Comment on attachment 32148
patch

Just one more thing! I promise!

&gt; +	    SQLiteFileSystem::deleteDatabaseFile(trackerDatabasePath());
&gt; +	    SQLiteFileSystem::deleteEmptyDatabaseDirectory(m_databaseDirectoryPath);

4 spaces?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129399</commentid>
    <comment_count>38</comment_count>
      <attachid>32151</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-01 15:42:55 -0700</bug_when>
    <thetext>Created attachment 32151
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129402</commentid>
    <comment_count>39</comment_count>
      <attachid>32154</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-01 15:55:25 -0700</bug_when>
    <thetext>Created attachment 32154
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129404</commentid>
    <comment_count>40</comment_count>
      <attachid>32154</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-01 16:04:03 -0700</bug_when>
    <thetext>Comment on attachment 32154
patch

r=me for realz. Landing now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129584</commentid>
    <comment_count>41</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-02 14:43:01 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/45487.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30724</attachid>
            <date>2009-05-27 18:17:05 -0700</date>
            <delta_ts>2009-05-27 20:26:09 -0700</delta_ts>
            <desc>Adds the required abstraction layer</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>22172</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDIxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMDktMDUtMjcgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyB0ZXN0cyByZXF1aXJlZCwgYmVjYXVzZSBubyBuZXcgZnVuY3Rpb25hbGl0eSB3YXMgYWRk
ZWQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6Om9wZW4pOgorICAgICAgICAq
IHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
UUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3Rv
cnlFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0
YWJhc2VGaWxlRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmRl
bGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmls
ZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZp
bGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
RmlsZVN5c3RlbTo6YWxsRGF0YWJhc2VzQ2xvc2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlRmlsZVN5c3RlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpkYXRhYmFzZVNpemUpOgorICAgICAgICAq
IHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6RGF0YWJhc2VUcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjpvcmlnaW5QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6
ZnVsbFBhdGhGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6
OnVzYWdlRm9yRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpk
ZWxldGVPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVE
YXRhYmFzZUZpbGUpOgorICAgICAgICAqIHN0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6T3JpZ2luVXNhZ2VSZWNvcmQ6OmRpc2tVc2FnZSk6CisKIDIwMDkt
MDUtMjcgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLCBidWlsZCBmaXguCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ0MjAxKQorKysg
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjAwNSw2ICsyMDA1LDgg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVBdXRo
b3JpemVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oIFwKKwlXZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlRmlsZVN5c3RlbS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQu
Y3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDQyMDEpCisrKyBXZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01OTEyLDYgKzU5MTIs
MTQgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXHNxbFxTUUxpdGVGaWxlU3lzdGVtLmNwcCINCisJCQkJCT4NCisJCQkJ
PC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxzcWxc
U1FMaXRlRmlsZVN5c3RlbS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQog
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHNxbFxTUUxpdGVTdGF0ZW1lbnQuY3BwIg0K
IAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRl
RGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURh
dGFiYXNlLmNwcAkocmV2aXNpb24gNDQyMDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1
ZGUgIkRhdGFiYXNlQXV0aG9yaXplci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRl
ICJTUUxpdGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCiAKICNp
bmNsdWRlIDxzcWxpdGUzLmg+CkBAIC02MSw4ICs2Miw3IEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6
Om9wZW4oY29uc3QgU3RyaW5nJiAKICAgICBjbG9zZSgpOwogICAgIAogICAgIC8vIFNRTGl0ZSBl
eHBlY3RzIGEgbnVsbCB0ZXJtaW5hdG9yIG9uIGl0cyBVVEYtMTYgc3RyaW5ncy4KLSAgICBTdHJp
bmcgcGF0aCA9IGZpbGVuYW1lOwotICAgIG1fbGFzdEVycm9yID0gc3FsaXRlM19vcGVuMTYocGF0
aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAmbV9kYik7CisgICAgbV9sYXN0RXJy
b3IgPSBTUUxpdGVGaWxlU3lzdGVtOjpvcGVuRGF0YWJhc2UoZmlsZW5hbWUsICZtX2RiKTsKICAg
ICBpZiAobV9sYXN0RXJyb3IgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIExPR19FUlJPUigiU1FM
aXRlIGRhdGFiYXNlIGZhaWxlZCB0byBsb2FkIGZyb20gJXNcbkNhdXNlIC0gJXMiLCBmaWxlbmFt
ZS5hc2NpaSgpLmRhdGEoKSwKICAgICAgICAgICAgIHNxbGl0ZTNfZXJybXNnKG1fZGIpKTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTGl0
ZUZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJTUUxp
dGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgorI2luY2x1ZGUgPHNx
bGl0ZTMuaD4KKworI2lmIFBMQVRGT1JNKFdJTikKKyNkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJ1xc
JworI2Vsc2UKKyNkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJy8nCisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKCkKK3sKK30K
Kwordm9pZCBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpCit7Cit9CisKK2lu
dCBTUUxpdGVGaWxlU3lzdGVtOjpvcGVuRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwg
c3FsaXRlMyoqIGRhdGFiYXNlKQoreworICAgIC8vIFNRTGl0ZSBleHBlY3RzIGEgbnVsbCB0ZXJt
aW5hdG9yIG9uIGl0cyBVVEYtMTYgc3RyaW5ncy4KKyAgICBTdHJpbmcgcGF0aCA9IGZpbGVOYW1l
OworICAgIHJldHVybiBzcWxpdGUzX29wZW4xNihwYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1p
bmF0aW9uKCksIGRhdGFiYXNlKTsKK30KKworU3RyaW5nIFNRTGl0ZUZpbGVTeXN0ZW06OmdldEZp
bGVOYW1lRm9yTmV3RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBkYkRpciwgY29uc3QgU3RyaW5nJiBk
Yk5hbWUsCisJCQkJCQkgICBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIFNRTGl0ZURh
dGFiYXNlKiBkYikKK3sKKyAgICAvLyB0cnkgdG8gZ2V0IHRoZSBuZXh0IHNlcXVlbmNlIG51bWJl
ciBmcm9tIHRoZSBnaXZlbiBkYXRhYmFzZQorICAgIC8vIGlmIHdlIGNhbid0IGdldCBhIG51bWJl
ciwgcmV0dXJuIGFuIGVtcHR5IHN0cmluZworICAgIFNRTGl0ZVN0YXRlbWVudCBzZXF1ZW5jZVN0
YXRlbWVudCgqZGIsICJTRUxFQ1Qgc2VxIEZST00gc3FsaXRlX3NlcXVlbmNlIFdIRVJFIG5hbWU9
J0RhdGFiYXNlcyc7Iik7CisgICAgaWYgKHNlcXVlbmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIGludCByZXN1bHQgPSBz
ZXF1ZW5jZVN0YXRlbWVudC5zdGVwKCk7CisgICAgaW50NjRfdCBzZXEgPSAwOworICAgIGlmIChy
ZXN1bHQgPT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgIHNlcSA9IHNlcXVlbmNlU3RhdGVtZW50
LmdldENvbHVtbkludDY0KDApOworICAgIH0gZWxzZSBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERv
bmUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBzZXF1ZW5jZVN0YXRlbWVudC5maW5h
bGl6ZSgpOworCisgICAgLy8gaW5jcmVtZW50IHRoZSBudW1iZXIgdW50aWwgd2UgY2FuIHVzZSBp
dCB0byBmb3JtIGEgZmlsZSBuYW1lIHRoYXQgZG9lc24ndCBleGlzdAorICAgIFN0cmluZyBmaWxl
TmFtZTsKKyAgICBkbyB7CisgICAgICAgICsrc2VxOworICAgICAgICBmaWxlTmFtZSA9IHBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChkYkRpciwgU3RyaW5nOjpmb3JtYXQoIiUwMTZsbHguZGIiLCBz
ZXEpKTsKKyAgICB9IHdoaWxlIChmaWxlRXhpc3RzKGZpbGVOYW1lKSk7CisKKyAgICByZXR1cm4g
ZmlsZU5hbWU7Cit9CisKK1N0cmluZyBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZp
bGVOYW1lVG9QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkK
K3sKKyAgICByZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGgsIGZpbGVOYW1lKTsK
K30KKworYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZURpcmVjdG9yeUV4aXN0
cyhjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1ha2VBbGxEaXJlY3RvcmllcyhwYXRoKTsKK30K
KworYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMoY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSwgYm9vbCBjaGVja1BhdGhPbmx5KQoreworICAgIGlmIChmaWxlTmFt
ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChjaGVja1BhdGhP
bmx5KSB7CisgICAgICAgIFN0cmluZyBkaXIgPSBmaWxlTmFtZTsKKyAgICAgICAgaW50IGxhc3RJ
bmRleE9mQmFja1NsYXNoID0gZGlyLnJldmVyc2VGaW5kKFBBVEhfU0VQQVJBVE9SKTsKKyAgICAg
ICAgaWYgKGxhc3RJbmRleE9mQmFja1NsYXNoID4gMCkgeworICAgICAgICAgICAgZGlyLnRydW5j
YXRlKGxhc3RJbmRleE9mQmFja1NsYXNoKTsKKyAgICAgICAgICAgIHJldHVybiBlbnN1cmVEYXRh
YmFzZURpcmVjdG9yeUV4aXN0cyhkaXIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHJldHVybiBmaWxlRXhpc3RzKGZpbGVOYW1lKTsKK30KKworYm9vbCBT
UUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gZGVsZXRlRW1wdHlEaXJlY3RvcnkocGF0aCk7Cit9CisK
K2Jvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYg
ZmlsZU5hbWUpCit7CisgICAgcmV0dXJuIGRlbGV0ZUZpbGUoZmlsZU5hbWUpOworfQorCitsb25n
IGxvbmcgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJpbmcm
IGZpbGVOYW1lKQoreyAgICAgICAgCisgICAgbG9uZyBsb25nIHNpemU7CisgICAgcmV0dXJuIGdl
dEZpbGVTaXplKGZpbGVOYW1lLCBzaXplKSA/IHNpemUgOiAwOworfQorCit2b2lkIFNRTGl0ZUZp
bGVTeXN0ZW06OmFsbERhdGFiYXNlc0Nsb3NlZCgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZp
bGVTeXN0ZW0uY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBTUUxpdGVGaWxlU3lzdGVtX2gKKyNkZWZpbmUgU1FMaXRl
RmlsZVN5c3RlbV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK3N0cnVjdCBzcWxpdGUzOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNRTGl0ZURhdGFiYXNlOworCisvKgorICog
QSBjbGFzcyB0aGF0IGFic3RyYWN0cyB0aGUgZmlsZSBzeXN0ZW0gcmVsYXRlZCBvcGVyYXRpb25z
IHJlcXVpcmVkCisgKiBieSB0aGUgV2ViS2l0IGRhdGFiYXNlIGNvZGUuCisgKi8KK2NsYXNzIFNR
TGl0ZUZpbGVTeXN0ZW0geworcHVibGljOgorICAgIC8qCisgICAgICogUmVnaXN0ZXJzIGEgdXNl
ci1kZWZpbmVkIFNRTGl0ZSBWRlMuCisgICAgICovCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJT
UUxpdGVWRlMoKTsKKworICAgIC8qCisgICAgICogT3BlbnMgYSBkYXRhYmFzZSBmaWxlLgorICAg
ICAqCisgICAgICogZmlsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgZmlsZS4KKyAg
ICAgKiBkYXRhYmFzZSAtIFRoZSBTUUxpdGUgc3RydWN0dXJlIHRoYXQgcmVwcmVzZW50cyB0aGUg
ZGF0YWJhc2Ugc3RvcmVkCisgICAgICogICAgICAgICAgICBpbiB0aGUgZ2l2ZW4gZmlsZS4KKyAg
ICAgKi8KKyAgICBzdGF0aWMgaW50IG9wZW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIGZpbGVOYW1l
LCBzcWxpdGUzKiogZGF0YWJhc2UpOworCisgICAgLyoKKyAgICAgKiBSZXR1cm5zIHRoZSBmaWxl
IG5hbWUgZm9yIGEgZGF0YWJhc2UuCisgICAgICoKKyAgICAgKiBkYkRpciAtIFRoZSBkaXJlY3Rv
cnkgd2hlcmUgYWxsIGRhdGFiYXNlcyBhcmUgc3RvcmVkLgorICAgICAqIGRiTmFtZSAtIFRoZSBu
YW1lIG9mIHRoZSBkYXRhYmFzZS4KKyAgICAgKiBvcmlnaW5JZGVudGlmaWVyIC0gVGhlIG9yaWdp
biB0aGF0IHdhbnRzIHRvIHVzZSB0aGlzIGRhdGFiYXNlLgorICAgICAqIGRiIC0gQSBkYXRhYmFz
ZSB3aXRoIGEgbnVtYmVyIGdlbmVyYXRvciB1c2VkIHRvIGNyZWF0ZSB1bmlxdWUgZmlsZSBuYW1l
cy4KKyAgICAgKi8KKyAgICBzdGF0aWMgU3RyaW5nIGdldEZpbGVOYW1lRm9yTmV3RGF0YWJhc2Uo
Y29uc3QgU3RyaW5nJiBkYkRpciwgY29uc3QgU3RyaW5nJiBkYk5hbWUsCisJCQkJCSAgICBjb25z
dCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIFNRTGl0ZURhdGFiYXNlKiBkYik7CisKKyAgICAv
KgorICAgICAqIENyZWF0ZXMgYW4gYWJzb2x1dGUgZmlsZSBwYXRoIGdpdmVuIGEgZGlyZWN0b3J5
IGFuZCBhIGZpbGUgbmFtZS4KKyAgICAgKgorICAgICAqIHBhdGggLSBUaGUgZGlyZWN0b3J5Lgor
ICAgICAqIGZpbGVOYW1lIC0gVGhlIGZpbGUgbmFtZS4KKyAgICAgKi8KKyAgICBzdGF0aWMgU3Ry
aW5nIGFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCBTdHJpbmcmIGZpbGVOYW1lKTsKKworICAgIC8qCisgICAgICogTWFrZXMgc3VyZSB0aGUgZ2l2
ZW4gZGlyZWN0b3J5IGV4aXN0cywgYnkgY3JlYXRpbmcgYWxsIG1pc3NpbmcgZGlyZWN0b3JpZXMK
KyAgICAgKiBvbiB0aGUgZ2l2ZW4gcGF0aC4KKyAgICAgKgorICAgICAqIHBhdGggLSBUaGUgZGly
ZWN0b3J5LgorICAgICAqLworICAgIHN0YXRpYyBib29sIGVuc3VyZURhdGFiYXNlRGlyZWN0b3J5
RXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCk7CisKKyAgICAvKgorICAgICAqIElmICdjaGVja1Bh
dGhPbmx5JyBpcyBmYWxzZSwgdGhlbiB0aGlzIG1ldGhvZCBvbmx5IGNoZWNrcyBpZiB0aGUgZ2l2
ZW4gZmlsZSBleGlzdHMuCisgICAgICogSWYgJ2NoZWNrUGF0aE9ubHknIGlzIHRydWUsIHRoZW4g
dGhpcyBtZXRob2QgbWFrZXMgc3VyZSBhbGwgZGlyZWN0b3JpZXMgb24gdGhlCisgICAgICogZ2l2
ZW4gcGF0aCBleGlzdCBieSBjcmVhdGluZyB0aGUgbWlzc2luZyBvbmVzLCBhbmQgZG9lcyBub3Qg
Y2hlY2sgaWYgdGhlIGZpbGUKKyAgICAgKiBpdHNlbGYgZXhpc3RzLgorICAgICAqCisgICAgICog
U29tZXRpbWVzIHdlIGV4cGVjdCBhIERCIGZpbGUgdG8gZXhpc3Q7IG90aGVyIHRpbWVzLCB3ZSdy
ZSBPSyB3aXRoIGNyZWF0aW5nIGEgbmV3CisgICAgICogREIgZmlsZSwgYnV0IHdlIHdhbnQgdG8g
bWFrZSBzdXJlIHRoYXQgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB3ZSB3YW50IHRvIHB1dCB0aGUK
KyAgICAgKiBuZXcgREIgZmlsZSBleGlzdHMuIFRoaXMgbWV0aG9kIGNvdmVycyBib3RoIGNhc2Vz
LgorICAgICAqCisgICAgICogZmlsZU5hbWUgLSBUaGUgZmlsZSBuYW1lLgorICAgICAqIGNoZWNr
UGF0aE9ubHkgLSBJZiB0cnVlLCB3ZSBvbmx5IG1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiBkaXJl
Y3RvcnkgZXhpc3RzLgorICAgICAqICAgICAgICAgICAgICAgICBJZiBmYWxzZSwgd2Ugb25seSBj
aGVjayBpZiB0aGUgZmlsZSBleGlzdHMuCisgICAgICovCisgICAgc3RhdGljIGJvb2wgZW5zdXJl
RGF0YWJhc2VGaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGJvb2wgY2hlY2tQYXRo
T25seSk7CisKKyAgICAvKgorICAgICAqIERlbGV0ZXMgYW4gZW1wdHkgZGF0YWJhc2UgZGlyZWN0
b3J5LgorICAgICAqCisgICAgICogcGF0aCAtIFRoZSBkaXJlY3RvcnkuCisgICAgICovCisgICAg
c3RhdGljIGJvb2wgZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBh
dGgpOworCisgICAgLyoKKyAgICAgKiBEZWxldGVzIGEgZGF0YWJhc2UgZmlsZS4KKyAgICAgKgor
ICAgICAqIGZpbGVOYW1lIC0gVGhlIGZpbGUgbmFtZS4KKyAgICAgKi8KKyAgICBzdGF0aWMgYm9v
bCBkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisKKyAgICAvKgor
ICAgICAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGRhdGFiYXNlIGZpbGUuCisgICAgICoKKyAg
ICAgKiBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuCisgICAgICovCisgICAgc3RhdGljIGxvbmcg
bG9uZyBnZXREYXRhYmFzZUZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOworCisgICAg
LyoKKyAgICAgKiBOb3RpZmllcyBvdGhlciBsYXllcnMgdGhhdCBhbGwgZGF0YWJhc2VzIGhhdmUg
YmVlbiBjbG9zZWQuCisgICAgICovCisgICAgc3RhdGljIHZvaWQgYWxsRGF0YWJhc2VzQ2xvc2Vk
KCk7CisKK3ByaXZhdGU6CisgICAgLy8gZG8gbm90IGluc3RhbnRpYXRlIHRoaXMgY2xhc3MKKyAg
ICBTUUxpdGVGaWxlU3lzdGVtKCk7Cit9OyAvLyBjbGFzcyBTUUxpdGVGaWxlU3lzdGVtCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA0NDIw
MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDYgQEAKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVt
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtNDgsNiArNDcsNyBAQAogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJPcmlnaW5RdW90YU1hbmFnZXIuaCIKICNpbmNsdWRlICJTUUxpdGVEYXRh
YmFzZS5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVT
dGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTUUxSZXN1bHRTZXQuaCIKICNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgpAQCAtMzM4LDEwICszMzgsNyBAQCB2b2lkIERhdGFiYXNlOjpzdG9wKCkKIAog
dW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlOjpkYXRhYmFzZVNpemUoKSBjb25zdAogewotICAg
IGxvbmcgbG9uZyBzaXplOwotICAgIGlmICghZ2V0RmlsZVNpemUobV9maWxlbmFtZSwgc2l6ZSkp
Ci0gICAgICAgIHNpemUgPSAwOwotICAgIHJldHVybiBzaXplOworICAgIHJldHVybiBTUUxpdGVG
aWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKG1fZmlsZW5hbWUpOwogfQogCiB1bnNpZ25l
ZCBsb25nIGxvbmcgRGF0YWJhc2U6Om1heGltdW1TaXplKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZVRyYWNrZXIuY3BwCShyZXZpc2lvbiA0NDIwMSkKKysrIFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTIgQEAK
ICNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlckNsaWVudC5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJPcmlnaW5RdW90YU1hbmFnZXIuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbkhhc2guaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAi
U1FMaXRlU3RhdGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC02OSw2ICs2OSw3IEBAIERhdGFiYXNlVHJhY2tlcjo6
RGF0YWJhc2VUcmFja2VyKCkKICAgICAsIG1fdGhyZWFkKGN1cnJlbnRUaHJlYWQoKSkKICNlbmRp
ZgogeworICBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpOwogfQogCiB2b2lk
IERhdGFiYXNlVHJhY2tlcjo6c2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYg
cGF0aCkKQEAgLTg3LDkgKzg4LDcgQEAgY29uc3QgU3RyaW5nJiBEYXRhYmFzZVRyYWNrZXI6OmRh
dGFiYXNlRAogU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZCk7Ci0gICAgaWYg
KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9kYXRhYmFzZURpcmVj
dG9yeVBhdGgsICJEYXRhYmFzZXMuZGIiKTsKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6
YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgIkRh
dGFiYXNlcy5kYiIpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRh
YmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQpAQCAtMTAwLDEzICs5OSw5IEBAIHZvaWQg
RGF0YWJhc2VUcmFja2VyOjpvcGVuVHJhY2tlckRhdGFiYXMKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgU3RyaW5nIGRhdGFiYXNlUGF0aCA9IHRyYWNrZXJEYXRhYmFzZVBhdGgoKTsKLSAgICBpZiAo
ZGF0YWJhc2VQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFjcmVh
dGVJZkRvZXNOb3RFeGlzdCAmJiAhZmlsZUV4aXN0cyhkYXRhYmFzZVBhdGgpKQorICAgIGlmICgh
U1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGRhdGFiYXNlUGF0aCwg
Y3JlYXRlSWZEb2VzTm90RXhpc3QpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtlQWxsRGly
ZWN0b3JpZXMobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgpOwogICAgIGlmICghbV9kYXRhYmFzZS5v
cGVuKGRhdGFiYXNlUGF0aCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdoYXQgZG8gZG8gaGVyZT8K
ICAgICAgICAgcmV0dXJuOwpAQCAtMTkwLDkgKzE4NSw3IEBAIGJvb2wgRGF0YWJhc2VUcmFja2Vy
OjpoYXNFbnRyeUZvckRhdGFiYXMKIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6Om9yaWdpblBhdGgo
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbikgY29uc3QKIHsKICAgICBBU1NFUlQoY3VycmVudFRocmVh
ZCgpID09IG1fdGhyZWFkKTsKLSAgICBpZiAobV9kYXRhYmFzZURpcmVjdG9yeVBhdGguaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgb3JpZ2luLT5kYXRhYmFzZUlkZW50
aWZpZXIoKSk7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmls
ZU5hbWVUb1BhdGgobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOwogfQogCiBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFi
YXNlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVh
dGVJZk5vdEV4aXN0cykKQEAgLTIwNiw3ICsxOTksNyBAQCBTdHJpbmcgRGF0YWJhc2VUcmFja2Vy
OjpmdWxsUGF0aEZvckRhdGFiCiAgICAgU3RyaW5nIG9yaWdpblBhdGggPSB0aGlzLT5vcmlnaW5Q
YXRoKG9yaWdpbik7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBwYXRoIGZvciB0aGlzIFNl
Y3VyaXR5T3JpZ2luIGV4aXN0cwotICAgIGlmIChjcmVhdGVJZk5vdEV4aXN0cyAmJiAhbWFrZUFs
bERpcmVjdG9yaWVzKG9yaWdpblBhdGgpKQorICAgIGlmIChjcmVhdGVJZk5vdEV4aXN0cyAmJiAh
U1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMob3JpZ2luUGF0
aCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAKICAgICAvLyBTZWUgaWYgd2UgaGF2
ZSBhIHBhdGggZm9yIHRoaXMgZGF0YWJhc2UgeWV0CkBAIC0yMjQsNyArMjE3LDcgQEAgU3RyaW5n
IERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYgogICAgIGludCByZXN1bHQgPSBzdGF0
ZW1lbnQuc3RlcCgpOwogCiAgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpCi0gICAgICAg
IHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQob3JpZ2luUGF0aCwgc3RhdGVtZW50Lmdl
dENvbHVtblRleHQoMCkpOworICAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERh
dGFiYXNlRmlsZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRleHQo
MCkpOwogICAgIGlmICghY3JlYXRlSWZOb3RFeGlzdHMpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKICAgICAgICAgCkBAIC0yNDEsMjIgKzIzNCw4IEBAIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6
OmZ1bGxQYXRoRm9yRGF0YWIKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIHJlc3VsdCA9
IHNlcXVlbmNlU3RhdGVtZW50LnN0ZXAoKTsKIAotICAgIC8vIFRoaXMgaGFzIGEgcmFuZ2Ugb2Yg
Ml42MyBhbmQgc3RhcnRzIGF0IDAgZm9yIGV2ZXJ5IHRpbWUgYSB1c2VyIHJlc2V0cyBTYWZhcmkg
LQotICAgIC8vIEkgY2FuJ3QgaW1hZ2luZSBpdCdkIG92ZXIgb3ZlcmZsb3cKLSAgICBpbnQ2NF90
IHNlcSA9IDA7Ci0gICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpIHsKLSAgICAgICAgc2Vx
ID0gc2VxdWVuY2VTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7Ci0gICAgfSBlbHNlIGlmIChy
ZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHNl
cXVlbmNlU3RhdGVtZW50LmZpbmFsaXplKCk7Ci0KLSAgICBTdHJpbmcgZmlsZW5hbWU7Ci0gICAg
ZG8gewotICAgICAgICArK3NlcTsKLSAgICAgICAgZmlsZW5hbWUgPSBwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQob3JpZ2luUGF0aCwgU3RyaW5nOjpmb3JtYXQoIiUwMTZsbHguZGIiLCBzZXEpKTsK
LSAgICB9IHdoaWxlIChmaWxlRXhpc3RzKGZpbGVuYW1lKSk7Ci0KLSAgICBpZiAoIWFkZERhdGFi
YXNlKG9yaWdpbiwgbmFtZSwgU3RyaW5nOjpmb3JtYXQoIiUwMTZsbHguZGIiLCBzZXEpKSkKKyAg
ICBTdHJpbmcgZmlsZU5hbWUgPSBTUUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5ld0Rh
dGFiYXNlKG9yaWdpblBhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCksIG5hbWUsICZt
X2RhdGFiYXNlKTsKKyAgICBpZiAoIWFkZERhdGFiYXNlKG9yaWdpbiwgbmFtZSwgZmlsZU5hbWUp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICAvLyBJZiB0aGlzIG9yaWdpbidzIHF1
b3RhIGlzIGJlaW5nIHRyYWNrZWQgKG9wZW4gaGFuZGxlIHRvIGEgZGF0YWJhc2UgaW4gdGhpcyBv
cmlnaW4pLCBhZGQgdGhpcyBuZXcgZGF0YWJhc2UKQEAgLTI2NCwxMCArMjQzLDEwIEBAIFN0cmlu
ZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICB7CiAgICAgICAgIExvY2tl
cjxPcmlnaW5RdW90YU1hbmFnZXI+IGxvY2tlcihvcmlnaW5RdW90YU1hbmFnZXIoKSk7CiAgICAg
ICAgIGlmIChvcmlnaW5RdW90YU1hbmFnZXIoKS50cmFja3NPcmlnaW4ob3JpZ2luKSkKLSAgICAg
ICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLmFkZERhdGFiYXNlKG9yaWdpbiwgbmFtZSwgZmls
ZW5hbWUpOworICAgICAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkuYWRkRGF0YWJhc2Uob3Jp
Z2luLCBuYW1lLCBmaWxlTmFtZSk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBmaWxlbmFtZTsK
KyAgICByZXR1cm4gZmlsZU5hbWU7CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpwb3B1bGF0
ZU9yaWdpbnMoKQpAQCAtNDIzLDggKzQwMiw3IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFz
ZVRyYWNrZXI6OnVzYWcKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAw
OwogICAgICAgICAKLSAgICBsb25nIGxvbmcgc2l6ZTsKLSAgICByZXR1cm4gZ2V0RmlsZVNpemUo
cGF0aCwgc2l6ZSkgPyBzaXplIDogMDsKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0
RGF0YWJhc2VGaWxlU2l6ZShwYXRoKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9w
ZW5EYXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2UpCkBAIC02NjUsNyArNjQzLDcgQEAgdm9pZCBE
YXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbihTZWN1cgogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgZGVsZXRlRW1wdHlEaXJlY3Rvcnkob3JpZ2luUGF0aChvcmlnaW4pKTsKKyAgICBT
UUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KG9yaWdpblBhdGgo
b3JpZ2luKSk7CiAKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpblBvc3NpYmx5TGFz
dFJlZmVyZW5jZSA9IG9yaWdpbjsKICAgICB7CkBAIC02NzksOCArNjU3LDggQEAgdm9pZCBEYXRh
YmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbihTZWN1cgogICAgICAgICBpZiAobV9xdW90YU1hcC0+
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAg
ICAgICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICBkZWxldGVGaWxlKHRy
YWNrZXJEYXRhYmFzZVBhdGgoKSk7Ci0gICAgICAgICAgICBkZWxldGVFbXB0eURpcmVjdG9yeSht
X2RhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CisJICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURh
dGFiYXNlRmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOworCSAgICBTUUxpdGVGaWxlU3lzdGVt
OjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoKTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtNzYzLDcgKzc0MSw3IEBAIGJvb2wgRGF0YWJhc2VUcmFj
a2VyOjpkZWxldGVEYXRhYmFzZUZpbGUKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVs
ZXRlZERhdGFiYXNlcy5zaXplKCk7ICsraSkKICAgICAgICAgZGVsZXRlZERhdGFiYXNlc1tpXS0+
bWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CiAKLSAgICByZXR1cm4gZGVsZXRlRmlsZShmdWxsUGF0
aCk7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShmdWxs
UGF0aCk7CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXRDbGllbnQoRGF0YWJhc2VUcmFj
a2VyQ2xpZW50KiBjbGllbnQpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNv
cmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5j
cHAJKHJldmlzaW9uIDQ0MjAxKQorKysgV2ViQ29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3Jk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaWYgRU5BQkxFKERBVEFC
QVNFKQogCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0
ZW0uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04Miw4ICs4Miw4IEBAIHVuc2lnbmVk
IGxvbmcgbG9uZyBPcmlnaW5Vc2FnZVJlY29yZDo6ZGkKICAgICAgICAgY29uc3QgU3RyaW5nJiBw
YXRoID0gbV9kYXRhYmFzZU1hcC5nZXQoKmlVbmtub3duKS5maWxlbmFtZTsKICAgICAgICAgQVNT
RVJUKCFwYXRoLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgIGxvbmcgbG9u
ZyBzaXplOwotICAgICAgICBpZiAoZ2V0RmlsZVNpemUocGF0aCwgc2l6ZSkpCisgICAgICAgIGxv
bmcgbG9uZyBzaXplID0gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShwYXRo
KTsKKyAgICAgICAgaWYgKHNpemUgPiAwKQogICAgICAgICAgICAgbV9kYXRhYmFzZU1hcC5zZXQo
KmlVbmtub3duLCBEYXRhYmFzZUVudHJ5KHBhdGgsIHNpemUpKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAvLyBXaGVuIHdlIGNhbid0IGRldGVybWluZSB0aGUgZmlsZSBzaXplLCB3ZSds
bCBqdXN0IGhhdmUgdG8gYXNzdW1lIHRoZSBmaWxlIGlzIG1pc3NpbmcvaW5hY2Nlc3NpYmxlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30725</attachid>
            <date>2009-05-27 18:17:23 -0700</date>
            <delta_ts>2009-05-29 13:23:33 -0700</delta_ts>
            <desc>Adds the required abstraction layer</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>22172</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDIxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMDktMDUtMjcgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyB0ZXN0cyByZXF1aXJlZCwgYmVjYXVzZSBubyBuZXcgZnVuY3Rpb25hbGl0eSB3YXMgYWRk
ZWQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6Om9wZW4pOgorICAgICAgICAq
IHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
UUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3Rv
cnlFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0
YWJhc2VGaWxlRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmRl
bGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmls
ZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZp
bGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
RmlsZVN5c3RlbTo6YWxsRGF0YWJhc2VzQ2xvc2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlRmlsZVN5c3RlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpkYXRhYmFzZVNpemUpOgorICAgICAgICAq
IHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6RGF0YWJhc2VUcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjpvcmlnaW5QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6
ZnVsbFBhdGhGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6
OnVzYWdlRm9yRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpk
ZWxldGVPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVE
YXRhYmFzZUZpbGUpOgorICAgICAgICAqIHN0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6T3JpZ2luVXNhZ2VSZWNvcmQ6OmRpc2tVc2FnZSk6CisKIDIwMDkt
MDUtMjcgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLCBidWlsZCBmaXguCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ0MjAxKQorKysg
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjAwNSw2ICsyMDA1LDgg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVBdXRo
b3JpemVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oIFwKKwlXZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlRmlsZVN5c3RlbS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQu
Y3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDQyMDEpCisrKyBXZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01OTEyLDYgKzU5MTIs
MTQgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXHNxbFxTUUxpdGVGaWxlU3lzdGVtLmNwcCINCisJCQkJCT4NCisJCQkJ
PC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxzcWxc
U1FMaXRlRmlsZVN5c3RlbS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQog
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHNxbFxTUUxpdGVTdGF0ZW1lbnQuY3BwIg0K
IAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRl
RGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURh
dGFiYXNlLmNwcAkocmV2aXNpb24gNDQyMDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1
ZGUgIkRhdGFiYXNlQXV0aG9yaXplci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRl
ICJTUUxpdGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCiAKICNp
bmNsdWRlIDxzcWxpdGUzLmg+CkBAIC02MSw4ICs2Miw3IEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6
Om9wZW4oY29uc3QgU3RyaW5nJiAKICAgICBjbG9zZSgpOwogICAgIAogICAgIC8vIFNRTGl0ZSBl
eHBlY3RzIGEgbnVsbCB0ZXJtaW5hdG9yIG9uIGl0cyBVVEYtMTYgc3RyaW5ncy4KLSAgICBTdHJp
bmcgcGF0aCA9IGZpbGVuYW1lOwotICAgIG1fbGFzdEVycm9yID0gc3FsaXRlM19vcGVuMTYocGF0
aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAmbV9kYik7CisgICAgbV9sYXN0RXJy
b3IgPSBTUUxpdGVGaWxlU3lzdGVtOjpvcGVuRGF0YWJhc2UoZmlsZW5hbWUsICZtX2RiKTsKICAg
ICBpZiAobV9sYXN0RXJyb3IgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIExPR19FUlJPUigiU1FM
aXRlIGRhdGFiYXNlIGZhaWxlZCB0byBsb2FkIGZyb20gJXNcbkNhdXNlIC0gJXMiLCBmaWxlbmFt
ZS5hc2NpaSgpLmRhdGEoKSwKICAgICAgICAgICAgIHNxbGl0ZTNfZXJybXNnKG1fZGIpKTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTGl0
ZUZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJTUUxp
dGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgorI2luY2x1ZGUgPHNx
bGl0ZTMuaD4KKworI2lmIFBMQVRGT1JNKFdJTikKKyNkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJ1xc
JworI2Vsc2UKKyNkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJy8nCisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKCkKK3sKK30K
Kwordm9pZCBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpCit7Cit9CisKK2lu
dCBTUUxpdGVGaWxlU3lzdGVtOjpvcGVuRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwg
c3FsaXRlMyoqIGRhdGFiYXNlKQoreworICAgIC8vIFNRTGl0ZSBleHBlY3RzIGEgbnVsbCB0ZXJt
aW5hdG9yIG9uIGl0cyBVVEYtMTYgc3RyaW5ncy4KKyAgICBTdHJpbmcgcGF0aCA9IGZpbGVOYW1l
OworICAgIHJldHVybiBzcWxpdGUzX29wZW4xNihwYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1p
bmF0aW9uKCksIGRhdGFiYXNlKTsKK30KKworU3RyaW5nIFNRTGl0ZUZpbGVTeXN0ZW06OmdldEZp
bGVOYW1lRm9yTmV3RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBkYkRpciwgY29uc3QgU3RyaW5nJiBk
Yk5hbWUsCisJCQkJCQkgICBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIFNRTGl0ZURh
dGFiYXNlKiBkYikKK3sKKyAgICAvLyB0cnkgdG8gZ2V0IHRoZSBuZXh0IHNlcXVlbmNlIG51bWJl
ciBmcm9tIHRoZSBnaXZlbiBkYXRhYmFzZQorICAgIC8vIGlmIHdlIGNhbid0IGdldCBhIG51bWJl
ciwgcmV0dXJuIGFuIGVtcHR5IHN0cmluZworICAgIFNRTGl0ZVN0YXRlbWVudCBzZXF1ZW5jZVN0
YXRlbWVudCgqZGIsICJTRUxFQ1Qgc2VxIEZST00gc3FsaXRlX3NlcXVlbmNlIFdIRVJFIG5hbWU9
J0RhdGFiYXNlcyc7Iik7CisgICAgaWYgKHNlcXVlbmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIGludCByZXN1bHQgPSBz
ZXF1ZW5jZVN0YXRlbWVudC5zdGVwKCk7CisgICAgaW50NjRfdCBzZXEgPSAwOworICAgIGlmIChy
ZXN1bHQgPT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgIHNlcSA9IHNlcXVlbmNlU3RhdGVtZW50
LmdldENvbHVtbkludDY0KDApOworICAgIH0gZWxzZSBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERv
bmUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBzZXF1ZW5jZVN0YXRlbWVudC5maW5h
bGl6ZSgpOworCisgICAgLy8gaW5jcmVtZW50IHRoZSBudW1iZXIgdW50aWwgd2UgY2FuIHVzZSBp
dCB0byBmb3JtIGEgZmlsZSBuYW1lIHRoYXQgZG9lc24ndCBleGlzdAorICAgIFN0cmluZyBmaWxl
TmFtZTsKKyAgICBkbyB7CisgICAgICAgICsrc2VxOworICAgICAgICBmaWxlTmFtZSA9IHBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChkYkRpciwgU3RyaW5nOjpmb3JtYXQoIiUwMTZsbHguZGIiLCBz
ZXEpKTsKKyAgICB9IHdoaWxlIChmaWxlRXhpc3RzKGZpbGVOYW1lKSk7CisKKyAgICByZXR1cm4g
ZmlsZU5hbWU7Cit9CisKK1N0cmluZyBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZp
bGVOYW1lVG9QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkK
K3sKKyAgICByZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGgsIGZpbGVOYW1lKTsK
K30KKworYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZURpcmVjdG9yeUV4aXN0
cyhjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1ha2VBbGxEaXJlY3RvcmllcyhwYXRoKTsKK30K
KworYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMoY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSwgYm9vbCBjaGVja1BhdGhPbmx5KQoreworICAgIGlmIChmaWxlTmFt
ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChjaGVja1BhdGhP
bmx5KSB7CisgICAgICAgIFN0cmluZyBkaXIgPSBmaWxlTmFtZTsKKyAgICAgICAgaW50IGxhc3RJ
bmRleE9mQmFja1NsYXNoID0gZGlyLnJldmVyc2VGaW5kKFBBVEhfU0VQQVJBVE9SKTsKKyAgICAg
ICAgaWYgKGxhc3RJbmRleE9mQmFja1NsYXNoID4gMCkgeworICAgICAgICAgICAgZGlyLnRydW5j
YXRlKGxhc3RJbmRleE9mQmFja1NsYXNoKTsKKyAgICAgICAgICAgIHJldHVybiBlbnN1cmVEYXRh
YmFzZURpcmVjdG9yeUV4aXN0cyhkaXIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHJldHVybiBmaWxlRXhpc3RzKGZpbGVOYW1lKTsKK30KKworYm9vbCBT
UUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gZGVsZXRlRW1wdHlEaXJlY3RvcnkocGF0aCk7Cit9CisK
K2Jvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYg
ZmlsZU5hbWUpCit7CisgICAgcmV0dXJuIGRlbGV0ZUZpbGUoZmlsZU5hbWUpOworfQorCitsb25n
IGxvbmcgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJpbmcm
IGZpbGVOYW1lKQoreyAgICAgICAgCisgICAgbG9uZyBsb25nIHNpemU7CisgICAgcmV0dXJuIGdl
dEZpbGVTaXplKGZpbGVOYW1lLCBzaXplKSA/IHNpemUgOiAwOworfQorCit2b2lkIFNRTGl0ZUZp
bGVTeXN0ZW06OmFsbERhdGFiYXNlc0Nsb3NlZCgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZp
bGVTeXN0ZW0uY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBTUUxpdGVGaWxlU3lzdGVtX2gKKyNkZWZpbmUgU1FMaXRl
RmlsZVN5c3RlbV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK3N0cnVjdCBzcWxpdGUzOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNRTGl0ZURhdGFiYXNlOworCisvKgorICog
QSBjbGFzcyB0aGF0IGFic3RyYWN0cyB0aGUgZmlsZSBzeXN0ZW0gcmVsYXRlZCBvcGVyYXRpb25z
IHJlcXVpcmVkCisgKiBieSB0aGUgV2ViS2l0IGRhdGFiYXNlIGNvZGUuCisgKi8KK2NsYXNzIFNR
TGl0ZUZpbGVTeXN0ZW0geworcHVibGljOgorICAgIC8qCisgICAgICogUmVnaXN0ZXJzIGEgdXNl
ci1kZWZpbmVkIFNRTGl0ZSBWRlMuCisgICAgICovCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJT
UUxpdGVWRlMoKTsKKworICAgIC8qCisgICAgICogT3BlbnMgYSBkYXRhYmFzZSBmaWxlLgorICAg
ICAqCisgICAgICogZmlsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgZmlsZS4KKyAg
ICAgKiBkYXRhYmFzZSAtIFRoZSBTUUxpdGUgc3RydWN0dXJlIHRoYXQgcmVwcmVzZW50cyB0aGUg
ZGF0YWJhc2Ugc3RvcmVkCisgICAgICogICAgICAgICAgICBpbiB0aGUgZ2l2ZW4gZmlsZS4KKyAg
ICAgKi8KKyAgICBzdGF0aWMgaW50IG9wZW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIGZpbGVOYW1l
LCBzcWxpdGUzKiogZGF0YWJhc2UpOworCisgICAgLyoKKyAgICAgKiBSZXR1cm5zIHRoZSBmaWxl
IG5hbWUgZm9yIGEgZGF0YWJhc2UuCisgICAgICoKKyAgICAgKiBkYkRpciAtIFRoZSBkaXJlY3Rv
cnkgd2hlcmUgYWxsIGRhdGFiYXNlcyBhcmUgc3RvcmVkLgorICAgICAqIGRiTmFtZSAtIFRoZSBu
YW1lIG9mIHRoZSBkYXRhYmFzZS4KKyAgICAgKiBvcmlnaW5JZGVudGlmaWVyIC0gVGhlIG9yaWdp
biB0aGF0IHdhbnRzIHRvIHVzZSB0aGlzIGRhdGFiYXNlLgorICAgICAqIGRiIC0gQSBkYXRhYmFz
ZSB3aXRoIGEgbnVtYmVyIGdlbmVyYXRvciB1c2VkIHRvIGNyZWF0ZSB1bmlxdWUgZmlsZSBuYW1l
cy4KKyAgICAgKi8KKyAgICBzdGF0aWMgU3RyaW5nIGdldEZpbGVOYW1lRm9yTmV3RGF0YWJhc2Uo
Y29uc3QgU3RyaW5nJiBkYkRpciwgY29uc3QgU3RyaW5nJiBkYk5hbWUsCisJCQkJCSAgICBjb25z
dCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIFNRTGl0ZURhdGFiYXNlKiBkYik7CisKKyAgICAv
KgorICAgICAqIENyZWF0ZXMgYW4gYWJzb2x1dGUgZmlsZSBwYXRoIGdpdmVuIGEgZGlyZWN0b3J5
IGFuZCBhIGZpbGUgbmFtZS4KKyAgICAgKgorICAgICAqIHBhdGggLSBUaGUgZGlyZWN0b3J5Lgor
ICAgICAqIGZpbGVOYW1lIC0gVGhlIGZpbGUgbmFtZS4KKyAgICAgKi8KKyAgICBzdGF0aWMgU3Ry
aW5nIGFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCBTdHJpbmcmIGZpbGVOYW1lKTsKKworICAgIC8qCisgICAgICogTWFrZXMgc3VyZSB0aGUgZ2l2
ZW4gZGlyZWN0b3J5IGV4aXN0cywgYnkgY3JlYXRpbmcgYWxsIG1pc3NpbmcgZGlyZWN0b3JpZXMK
KyAgICAgKiBvbiB0aGUgZ2l2ZW4gcGF0aC4KKyAgICAgKgorICAgICAqIHBhdGggLSBUaGUgZGly
ZWN0b3J5LgorICAgICAqLworICAgIHN0YXRpYyBib29sIGVuc3VyZURhdGFiYXNlRGlyZWN0b3J5
RXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCk7CisKKyAgICAvKgorICAgICAqIElmICdjaGVja1Bh
dGhPbmx5JyBpcyBmYWxzZSwgdGhlbiB0aGlzIG1ldGhvZCBvbmx5IGNoZWNrcyBpZiB0aGUgZ2l2
ZW4gZmlsZSBleGlzdHMuCisgICAgICogSWYgJ2NoZWNrUGF0aE9ubHknIGlzIHRydWUsIHRoZW4g
dGhpcyBtZXRob2QgbWFrZXMgc3VyZSBhbGwgZGlyZWN0b3JpZXMgb24gdGhlCisgICAgICogZ2l2
ZW4gcGF0aCBleGlzdCBieSBjcmVhdGluZyB0aGUgbWlzc2luZyBvbmVzLCBhbmQgZG9lcyBub3Qg
Y2hlY2sgaWYgdGhlIGZpbGUKKyAgICAgKiBpdHNlbGYgZXhpc3RzLgorICAgICAqCisgICAgICog
U29tZXRpbWVzIHdlIGV4cGVjdCBhIERCIGZpbGUgdG8gZXhpc3Q7IG90aGVyIHRpbWVzLCB3ZSdy
ZSBPSyB3aXRoIGNyZWF0aW5nIGEgbmV3CisgICAgICogREIgZmlsZSwgYnV0IHdlIHdhbnQgdG8g
bWFrZSBzdXJlIHRoYXQgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB3ZSB3YW50IHRvIHB1dCB0aGUK
KyAgICAgKiBuZXcgREIgZmlsZSBleGlzdHMuIFRoaXMgbWV0aG9kIGNvdmVycyBib3RoIGNhc2Vz
LgorICAgICAqCisgICAgICogZmlsZU5hbWUgLSBUaGUgZmlsZSBuYW1lLgorICAgICAqIGNoZWNr
UGF0aE9ubHkgLSBJZiB0cnVlLCB3ZSBvbmx5IG1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiBkaXJl
Y3RvcnkgZXhpc3RzLgorICAgICAqICAgICAgICAgICAgICAgICBJZiBmYWxzZSwgd2Ugb25seSBj
aGVjayBpZiB0aGUgZmlsZSBleGlzdHMuCisgICAgICovCisgICAgc3RhdGljIGJvb2wgZW5zdXJl
RGF0YWJhc2VGaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGJvb2wgY2hlY2tQYXRo
T25seSk7CisKKyAgICAvKgorICAgICAqIERlbGV0ZXMgYW4gZW1wdHkgZGF0YWJhc2UgZGlyZWN0
b3J5LgorICAgICAqCisgICAgICogcGF0aCAtIFRoZSBkaXJlY3RvcnkuCisgICAgICovCisgICAg
c3RhdGljIGJvb2wgZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBh
dGgpOworCisgICAgLyoKKyAgICAgKiBEZWxldGVzIGEgZGF0YWJhc2UgZmlsZS4KKyAgICAgKgor
ICAgICAqIGZpbGVOYW1lIC0gVGhlIGZpbGUgbmFtZS4KKyAgICAgKi8KKyAgICBzdGF0aWMgYm9v
bCBkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisKKyAgICAvKgor
ICAgICAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGRhdGFiYXNlIGZpbGUuCisgICAgICoKKyAg
ICAgKiBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuCisgICAgICovCisgICAgc3RhdGljIGxvbmcg
bG9uZyBnZXREYXRhYmFzZUZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOworCisgICAg
LyoKKyAgICAgKiBOb3RpZmllcyBvdGhlciBsYXllcnMgdGhhdCBhbGwgZGF0YWJhc2VzIGhhdmUg
YmVlbiBjbG9zZWQuCisgICAgICovCisgICAgc3RhdGljIHZvaWQgYWxsRGF0YWJhc2VzQ2xvc2Vk
KCk7CisKK3ByaXZhdGU6CisgICAgLy8gZG8gbm90IGluc3RhbnRpYXRlIHRoaXMgY2xhc3MKKyAg
ICBTUUxpdGVGaWxlU3lzdGVtKCk7Cit9OyAvLyBjbGFzcyBTUUxpdGVGaWxlU3lzdGVtCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA0NDIw
MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDYgQEAKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVt
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtNDgsNiArNDcsNyBAQAogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJPcmlnaW5RdW90YU1hbmFnZXIuaCIKICNpbmNsdWRlICJTUUxpdGVEYXRh
YmFzZS5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVT
dGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTUUxSZXN1bHRTZXQuaCIKICNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgpAQCAtMzM4LDEwICszMzgsNyBAQCB2b2lkIERhdGFiYXNlOjpzdG9wKCkKIAog
dW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlOjpkYXRhYmFzZVNpemUoKSBjb25zdAogewotICAg
IGxvbmcgbG9uZyBzaXplOwotICAgIGlmICghZ2V0RmlsZVNpemUobV9maWxlbmFtZSwgc2l6ZSkp
Ci0gICAgICAgIHNpemUgPSAwOwotICAgIHJldHVybiBzaXplOworICAgIHJldHVybiBTUUxpdGVG
aWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKG1fZmlsZW5hbWUpOwogfQogCiB1bnNpZ25l
ZCBsb25nIGxvbmcgRGF0YWJhc2U6Om1heGltdW1TaXplKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZVRyYWNrZXIuY3BwCShyZXZpc2lvbiA0NDIwMSkKKysrIFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTIgQEAK
ICNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlckNsaWVudC5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJPcmlnaW5RdW90YU1hbmFnZXIuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbkhhc2guaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAi
U1FMaXRlU3RhdGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC02OSw2ICs2OSw3IEBAIERhdGFiYXNlVHJhY2tlcjo6
RGF0YWJhc2VUcmFja2VyKCkKICAgICAsIG1fdGhyZWFkKGN1cnJlbnRUaHJlYWQoKSkKICNlbmRp
ZgogeworICBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpOwogfQogCiB2b2lk
IERhdGFiYXNlVHJhY2tlcjo6c2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYg
cGF0aCkKQEAgLTg3LDkgKzg4LDcgQEAgY29uc3QgU3RyaW5nJiBEYXRhYmFzZVRyYWNrZXI6OmRh
dGFiYXNlRAogU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZCk7Ci0gICAgaWYg
KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9kYXRhYmFzZURpcmVj
dG9yeVBhdGgsICJEYXRhYmFzZXMuZGIiKTsKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6
YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgIkRh
dGFiYXNlcy5kYiIpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRh
YmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQpAQCAtMTAwLDEzICs5OSw5IEBAIHZvaWQg
RGF0YWJhc2VUcmFja2VyOjpvcGVuVHJhY2tlckRhdGFiYXMKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgU3RyaW5nIGRhdGFiYXNlUGF0aCA9IHRyYWNrZXJEYXRhYmFzZVBhdGgoKTsKLSAgICBpZiAo
ZGF0YWJhc2VQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFjcmVh
dGVJZkRvZXNOb3RFeGlzdCAmJiAhZmlsZUV4aXN0cyhkYXRhYmFzZVBhdGgpKQorICAgIGlmICgh
U1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGRhdGFiYXNlUGF0aCwg
Y3JlYXRlSWZEb2VzTm90RXhpc3QpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtlQWxsRGly
ZWN0b3JpZXMobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgpOwogICAgIGlmICghbV9kYXRhYmFzZS5v
cGVuKGRhdGFiYXNlUGF0aCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdoYXQgZG8gZG8gaGVyZT8K
ICAgICAgICAgcmV0dXJuOwpAQCAtMTkwLDkgKzE4NSw3IEBAIGJvb2wgRGF0YWJhc2VUcmFja2Vy
OjpoYXNFbnRyeUZvckRhdGFiYXMKIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6Om9yaWdpblBhdGgo
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbikgY29uc3QKIHsKICAgICBBU1NFUlQoY3VycmVudFRocmVh
ZCgpID09IG1fdGhyZWFkKTsKLSAgICBpZiAobV9kYXRhYmFzZURpcmVjdG9yeVBhdGguaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgb3JpZ2luLT5kYXRhYmFzZUlkZW50
aWZpZXIoKSk7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmls
ZU5hbWVUb1BhdGgobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOwogfQogCiBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFi
YXNlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVh
dGVJZk5vdEV4aXN0cykKQEAgLTIwNiw3ICsxOTksNyBAQCBTdHJpbmcgRGF0YWJhc2VUcmFja2Vy
OjpmdWxsUGF0aEZvckRhdGFiCiAgICAgU3RyaW5nIG9yaWdpblBhdGggPSB0aGlzLT5vcmlnaW5Q
YXRoKG9yaWdpbik7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBwYXRoIGZvciB0aGlzIFNl
Y3VyaXR5T3JpZ2luIGV4aXN0cwotICAgIGlmIChjcmVhdGVJZk5vdEV4aXN0cyAmJiAhbWFrZUFs
bERpcmVjdG9yaWVzKG9yaWdpblBhdGgpKQorICAgIGlmIChjcmVhdGVJZk5vdEV4aXN0cyAmJiAh
U1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMob3JpZ2luUGF0
aCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAKICAgICAvLyBTZWUgaWYgd2UgaGF2
ZSBhIHBhdGggZm9yIHRoaXMgZGF0YWJhc2UgeWV0CkBAIC0yMjQsNyArMjE3LDcgQEAgU3RyaW5n
IERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYgogICAgIGludCByZXN1bHQgPSBzdGF0
ZW1lbnQuc3RlcCgpOwogCiAgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpCi0gICAgICAg
IHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQob3JpZ2luUGF0aCwgc3RhdGVtZW50Lmdl
dENvbHVtblRleHQoMCkpOworICAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERh
dGFiYXNlRmlsZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRleHQo
MCkpOwogICAgIGlmICghY3JlYXRlSWZOb3RFeGlzdHMpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKICAgICAgICAgCkBAIC0yNDEsMjIgKzIzNCw4IEBAIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6
OmZ1bGxQYXRoRm9yRGF0YWIKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIHJlc3VsdCA9
IHNlcXVlbmNlU3RhdGVtZW50LnN0ZXAoKTsKIAotICAgIC8vIFRoaXMgaGFzIGEgcmFuZ2Ugb2Yg
Ml42MyBhbmQgc3RhcnRzIGF0IDAgZm9yIGV2ZXJ5IHRpbWUgYSB1c2VyIHJlc2V0cyBTYWZhcmkg
LQotICAgIC8vIEkgY2FuJ3QgaW1hZ2luZSBpdCdkIG92ZXIgb3ZlcmZsb3cKLSAgICBpbnQ2NF90
IHNlcSA9IDA7Ci0gICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpIHsKLSAgICAgICAgc2Vx
ID0gc2VxdWVuY2VTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7Ci0gICAgfSBlbHNlIGlmIChy
ZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHNl
cXVlbmNlU3RhdGVtZW50LmZpbmFsaXplKCk7Ci0KLSAgICBTdHJpbmcgZmlsZW5hbWU7Ci0gICAg
ZG8gewotICAgICAgICArK3NlcTsKLSAgICAgICAgZmlsZW5hbWUgPSBwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQob3JpZ2luUGF0aCwgU3RyaW5nOjpmb3JtYXQoIiUwMTZsbHguZGIiLCBzZXEpKTsK
LSAgICB9IHdoaWxlIChmaWxlRXhpc3RzKGZpbGVuYW1lKSk7Ci0KLSAgICBpZiAoIWFkZERhdGFi
YXNlKG9yaWdpbiwgbmFtZSwgU3RyaW5nOjpmb3JtYXQoIiUwMTZsbHguZGIiLCBzZXEpKSkKKyAg
ICBTdHJpbmcgZmlsZU5hbWUgPSBTUUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5ld0Rh
dGFiYXNlKG9yaWdpblBhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCksIG5hbWUsICZt
X2RhdGFiYXNlKTsKKyAgICBpZiAoIWFkZERhdGFiYXNlKG9yaWdpbiwgbmFtZSwgZmlsZU5hbWUp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICAvLyBJZiB0aGlzIG9yaWdpbidzIHF1
b3RhIGlzIGJlaW5nIHRyYWNrZWQgKG9wZW4gaGFuZGxlIHRvIGEgZGF0YWJhc2UgaW4gdGhpcyBv
cmlnaW4pLCBhZGQgdGhpcyBuZXcgZGF0YWJhc2UKQEAgLTI2NCwxMCArMjQzLDEwIEBAIFN0cmlu
ZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICB7CiAgICAgICAgIExvY2tl
cjxPcmlnaW5RdW90YU1hbmFnZXI+IGxvY2tlcihvcmlnaW5RdW90YU1hbmFnZXIoKSk7CiAgICAg
ICAgIGlmIChvcmlnaW5RdW90YU1hbmFnZXIoKS50cmFja3NPcmlnaW4ob3JpZ2luKSkKLSAgICAg
ICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLmFkZERhdGFiYXNlKG9yaWdpbiwgbmFtZSwgZmls
ZW5hbWUpOworICAgICAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkuYWRkRGF0YWJhc2Uob3Jp
Z2luLCBuYW1lLCBmaWxlTmFtZSk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBmaWxlbmFtZTsK
KyAgICByZXR1cm4gZmlsZU5hbWU7CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpwb3B1bGF0
ZU9yaWdpbnMoKQpAQCAtNDIzLDggKzQwMiw3IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFz
ZVRyYWNrZXI6OnVzYWcKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAw
OwogICAgICAgICAKLSAgICBsb25nIGxvbmcgc2l6ZTsKLSAgICByZXR1cm4gZ2V0RmlsZVNpemUo
cGF0aCwgc2l6ZSkgPyBzaXplIDogMDsKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0
RGF0YWJhc2VGaWxlU2l6ZShwYXRoKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9w
ZW5EYXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2UpCkBAIC02NjUsNyArNjQzLDcgQEAgdm9pZCBE
YXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbihTZWN1cgogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgZGVsZXRlRW1wdHlEaXJlY3Rvcnkob3JpZ2luUGF0aChvcmlnaW4pKTsKKyAgICBT
UUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KG9yaWdpblBhdGgo
b3JpZ2luKSk7CiAKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpblBvc3NpYmx5TGFz
dFJlZmVyZW5jZSA9IG9yaWdpbjsKICAgICB7CkBAIC02NzksOCArNjU3LDggQEAgdm9pZCBEYXRh
YmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbihTZWN1cgogICAgICAgICBpZiAobV9xdW90YU1hcC0+
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAg
ICAgICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICBkZWxldGVGaWxlKHRy
YWNrZXJEYXRhYmFzZVBhdGgoKSk7Ci0gICAgICAgICAgICBkZWxldGVFbXB0eURpcmVjdG9yeSht
X2RhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CisJICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURh
dGFiYXNlRmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOworCSAgICBTUUxpdGVGaWxlU3lzdGVt
OjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoKTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtNzYzLDcgKzc0MSw3IEBAIGJvb2wgRGF0YWJhc2VUcmFj
a2VyOjpkZWxldGVEYXRhYmFzZUZpbGUKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVs
ZXRlZERhdGFiYXNlcy5zaXplKCk7ICsraSkKICAgICAgICAgZGVsZXRlZERhdGFiYXNlc1tpXS0+
bWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CiAKLSAgICByZXR1cm4gZGVsZXRlRmlsZShmdWxsUGF0
aCk7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShmdWxs
UGF0aCk7CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXRDbGllbnQoRGF0YWJhc2VUcmFj
a2VyQ2xpZW50KiBjbGllbnQpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNv
cmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5j
cHAJKHJldmlzaW9uIDQ0MjAxKQorKysgV2ViQ29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3Jk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaWYgRU5BQkxFKERBVEFC
QVNFKQogCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0
ZW0uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04Miw4ICs4Miw4IEBAIHVuc2lnbmVk
IGxvbmcgbG9uZyBPcmlnaW5Vc2FnZVJlY29yZDo6ZGkKICAgICAgICAgY29uc3QgU3RyaW5nJiBw
YXRoID0gbV9kYXRhYmFzZU1hcC5nZXQoKmlVbmtub3duKS5maWxlbmFtZTsKICAgICAgICAgQVNT
RVJUKCFwYXRoLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgIGxvbmcgbG9u
ZyBzaXplOwotICAgICAgICBpZiAoZ2V0RmlsZVNpemUocGF0aCwgc2l6ZSkpCisgICAgICAgIGxv
bmcgbG9uZyBzaXplID0gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShwYXRo
KTsKKyAgICAgICAgaWYgKHNpemUgPiAwKQogICAgICAgICAgICAgbV9kYXRhYmFzZU1hcC5zZXQo
KmlVbmtub3duLCBEYXRhYmFzZUVudHJ5KHBhdGgsIHNpemUpKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAvLyBXaGVuIHdlIGNhbid0IGRldGVybWluZSB0aGUgZmlsZSBzaXplLCB3ZSds
bCBqdXN0IGhhdmUgdG8gYXNzdW1lIHRoZSBmaWxlIGlzIG1pc3NpbmcvaW5hY2Nlc3NpYmxlLgo=
</data>
<flag name="review"
          id="15575"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30760</attachid>
            <date>2009-05-28 17:36:49 -0700</date>
            <delta_ts>2009-06-04 17:58:21 -0700</delta_ts>
            <desc>new patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>22692</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDI1OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDktMDUtMjcgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRzIGFuIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW4gdGhlIERCIGNsYXNzZXMgYW5kIHRo
ZSBmaWxlCisgICAgICAgIHN5c3RlbSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFkZCBvdXIgb3duIGxv
Z2ljIGZvciBzdG9yaW5nLCBvcGVuaW5nLAorICAgICAgICBkZWxldGluZywgZXRjLiBkYXRhYmFz
ZXMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2
MDU0CisKKyAgICAgICAgTm8gdGVzdHMgcmVxdWlyZWQsIGJlY2F1c2Ugbm8gbmV3IGZ1bmN0aW9u
YWxpdHkgd2FzIGFkZGVkLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICog
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NR
TGl0ZURhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpvcGVu
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6U1FMaXRlRmlsZVN5c3RlbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpvcGVuRGF0YWJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6Z2V0RmlsZU5hbWVGb3JOZXdEYXRhYmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVO
YW1lVG9QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURh
dGFiYXNlRGlyZWN0b3J5RXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0
ZW06OmVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVG
aWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmFsbERhdGFiYXNlc0Nsb3NlZCk6CisgICAgICAgICog
cGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaDogQWRkZWQuCisgICAgICAgICogc3RvcmFn
ZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6ZGF0YWJhc2VTaXpl
KToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OkRhdGFiYXNlVHJhY2tlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VUcmFja2VyOjpvcGVuVHJhY2tlckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlVHJhY2tlcjo6b3JpZ2luUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VUcmFja2VyOjp1c2FnZUZvckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAgICAgICAgKiBzdG9yYWdlL09yaWdpblVzYWdl
UmVjb3JkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9yaWdpblVzYWdlUmVjb3JkOjpkaXNrVXNh
Z2UpOgorCiAyMDA5LTA1LTI4ICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNp
b24gNDQyMDEpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDA1LDYgKzIwMDUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0v
c3FsL1NRTGl0ZUF1dGhvcml6ZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVE
YXRhYmFzZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmggXAor
CVdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwIFwKKwlXZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZVN0YXRlbWVudC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVu
dC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5jcHAgXApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0NDIwMSkKKysr
IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAg
LTU5MTIsNiArNTkxMiwxNCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cc3FsXFNRTGl0ZUZpbGVTeXN0ZW0uY3BwIg0K
KwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXHNxbFxTUUxpdGVGaWxlU3lzdGVtLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4N
CisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cc3FsXFNRTGl0ZVN0
YXRlbWVudC5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA0NDIwMSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
NyBAQAogCiAjaW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVyLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0
ZW1lbnQuaCIKIAogI2luY2x1ZGUgPHNxbGl0ZTMuaD4KQEAgLTYxLDggKzYyLDcgQEAgYm9vbCBT
UUxpdGVEYXRhYmFzZTo6b3Blbihjb25zdCBTdHJpbmcmIAogICAgIGNsb3NlKCk7CiAgICAgCiAg
ICAgLy8gU1FMaXRlIGV4cGVjdHMgYSBudWxsIHRlcm1pbmF0b3Igb24gaXRzIFVURi0xNiBzdHJp
bmdzLgotICAgIFN0cmluZyBwYXRoID0gZmlsZW5hbWU7Ci0gICAgbV9sYXN0RXJyb3IgPSBzcWxp
dGUzX29wZW4xNihwYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksICZtX2RiKTsK
KyAgICBtX2xhc3RFcnJvciA9IFNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFzZShmaWxlbmFt
ZSwgJm1fZGIpOwogICAgIGlmIChtX2xhc3RFcnJvciAhPSBTUUxJVEVfT0spIHsKICAgICAgICAg
TE9HX0VSUk9SKCJTUUxpdGUgZGF0YWJhc2UgZmFpbGVkIHRvIGxvYWQgZnJvbSAlc1xuQ2F1c2Ug
LSAlcyIsIGZpbGVuYW1lLmFzY2lpKCkuZGF0YSgpLAogICAgICAgICAgICAgc3FsaXRlM19lcnJt
c2cobV9kYikpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVt
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzggQEAKKy8qDQorICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlDQorICogbWV0Og0KKyAqDQorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuDQorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQ0KKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXINCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQorICogZGlzdHJp
YnV0aW9uLg0KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMNCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
DQorICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLA0KKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkNCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisg
Ki8NCisNCisjaW5jbHVkZSAiY29uZmlnLmgiDQorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0u
aCINCisNCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIg0KKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFz
ZS5oIg0KKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCINCisjaW5jbHVkZSA8c3FsaXRlMy5o
Pg0KKw0KKyNpZiBQTEFURk9STShXSU4pDQorI2RlZmluZSBQQVRIX1NFUEFSQVRPUiAnXFwnDQor
I2Vsc2UNCisjZGVmaW5lIFBBVEhfU0VQQVJBVE9SICcvJw0KKyNlbmRpZg0KKw0KK25hbWVzcGFj
ZSBXZWJDb3JlIHsNCisNCitTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKCkNCit7
DQorfQ0KKw0KK3ZvaWQgU1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKQ0KK3sN
Cit9DQorDQoraW50IFNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFzZShjb25zdCBTdHJpbmcm
IGZpbGVOYW1lLCBzcWxpdGUzKiogZGF0YWJhc2UpDQorew0KKyAgICAvLyBTUUxpdGUgZXhwZWN0
cyBhIG51bGwgdGVybWluYXRvciBvbiBpdHMgVVRGLTE2IHN0cmluZ3MuDQorICAgIFN0cmluZyBw
YXRoID0gZmlsZU5hbWU7DQorICAgIHJldHVybiBzcWxpdGUzX29wZW4xNihwYXRoLmNoYXJhY3Rl
cnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIGRhdGFiYXNlKTsNCit9DQorDQorU3RyaW5nIFNRTGl0
ZUZpbGVTeXN0ZW06OmdldEZpbGVOYW1lRm9yTmV3RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBkYkRp
ciwgY29uc3QgU3RyaW5nJiBkYk5hbWUsDQorCQkJCQkJICAgY29uc3QgU3RyaW5nJiBvcmlnaW5J
ZGVudGlmaWVyLCBTUUxpdGVEYXRhYmFzZSogZGIpDQorew0KKyAgICAvLyB0cnkgdG8gZ2V0IHRo
ZSBuZXh0IHNlcXVlbmNlIG51bWJlciBmcm9tIHRoZSBnaXZlbiBkYXRhYmFzZQ0KKyAgICAvLyBp
ZiB3ZSBjYW4ndCBnZXQgYSBudW1iZXIsIHJldHVybiBhbiBlbXB0eSBzdHJpbmcNCisgICAgU1FM
aXRlU3RhdGVtZW50IHNlcXVlbmNlU3RhdGVtZW50KCpkYiwgIlNFTEVDVCBzZXEgRlJPTSBzcWxp
dGVfc2VxdWVuY2UgV0hFUkUgbmFtZT0nRGF0YWJhc2VzJzsiKTsNCisgICAgaWYgKHNlcXVlbmNl
U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykNCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsNCisgICAgaW50IHJlc3VsdCA9IHNlcXVlbmNlU3RhdGVtZW50LnN0ZXAoKTsNCisgICAg
aW50NjRfdCBzZXEgPSAwOw0KKyAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykgew0KKyAg
ICAgICAgc2VxID0gc2VxdWVuY2VTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7DQorICAgIH0g
ZWxzZSBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpDQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7DQorICAgIHNlcXVlbmNlU3RhdGVtZW50LmZpbmFsaXplKCk7DQorDQorICAgIC8vIGluY3Jl
bWVudCB0aGUgbnVtYmVyIHVudGlsIHdlIGNhbiB1c2UgaXQgdG8gZm9ybSBhIGZpbGUgbmFtZSB0
aGF0IGRvZXNuJ3QgZXhpc3QNCisgICAgU3RyaW5nIGZpbGVOYW1lOw0KKyAgICBkbyB7DQorICAg
ICAgICArK3NlcTsNCisgICAgICAgIGZpbGVOYW1lID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KGRiRGlyLCBTdHJpbmc6OmZvcm1hdCgiJTAxNmxseC5kYiIsIHNlcSkpOw0KKyAgICB9IHdoaWxl
IChmaWxlRXhpc3RzKGZpbGVOYW1lKSk7DQorDQorICAgIHJldHVybiBmaWxlTmFtZTsNCit9DQor
DQorU3RyaW5nIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgo
Y29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQ0KK3sNCisgICAgcmV0
dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoLCBmaWxlTmFtZSk7DQorfQ0KKw0KK2Jv
b2wgU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMoY29uc3Qg
U3RyaW5nJiBwYXRoKQ0KK3sNCisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQ0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOw0KKyAgICByZXR1cm4gbWFrZUFsbERpcmVjdG9yaWVzKHBhdGgpOw0KK30NCisN
Citib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyhjb25zdCBT
dHJpbmcmIGZpbGVOYW1lLCBib29sIGNoZWNrUGF0aE9ubHkpDQorew0KKyAgICBpZiAoZmlsZU5h
bWUuaXNFbXB0eSgpKQ0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKw0KKyAgICBpZiAoY2hlY2tQ
YXRoT25seSkgew0KKyAgICAgICAgU3RyaW5nIGRpciA9IGZpbGVOYW1lOw0KKyAgICAgICAgaW50
IGxhc3RJbmRleE9mQmFja1NsYXNoID0gZGlyLnJldmVyc2VGaW5kKFBBVEhfU0VQQVJBVE9SKTsN
CisgICAgICAgIGlmIChsYXN0SW5kZXhPZkJhY2tTbGFzaCA+IDApIHsNCisgICAgICAgICAgICBk
aXIudHJ1bmNhdGUobGFzdEluZGV4T2ZCYWNrU2xhc2gpOw0KKyAgICAgICAgICAgIHJldHVybiBl
bnN1cmVEYXRhYmFzZURpcmVjdG9yeUV4aXN0cyhkaXIpOw0KKyAgICAgICAgfQ0KKyAgICAgICAg
cmV0dXJuIHRydWU7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGZpbGVFeGlzdHMoZmlsZU5hbWUp
Ow0KK30NCisNCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJl
Y3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQ0KK3sNCisgICAgcmV0dXJuIGRlbGV0ZUVtcHR5RGly
ZWN0b3J5KHBhdGgpOw0KK30NCisNCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFi
YXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQ0KK3sNCisgICAgcmV0dXJuIGRlbGV0ZUZp
bGUoZmlsZU5hbWUpOw0KK30NCisNCitsb25nIGxvbmcgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0
YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQ0KK3sgICAgICAgIA0KKyAgICBs
b25nIGxvbmcgc2l6ZTsNCisgICAgcmV0dXJuIGdldEZpbGVTaXplKGZpbGVOYW1lLCBzaXplKSA/
IHNpemUgOiAwOw0KK30NCisNCit2b2lkIFNRTGl0ZUZpbGVTeXN0ZW06OmFsbERhdGFiYXNlc0Ns
b3NlZCgpDQorew0KK30NCisNCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
c3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
c3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDAgQEAKKy8q
DQorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
DQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlDQorICogbWV0Og0KKyAqDQor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQNCisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0KKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXINCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlDQorICogZGlzdHJpYnV0aW9uLg0KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQor
ICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTDQorICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1INCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVA0KKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwNCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkNCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4NCisgKi8NCisNCisjaWZuZGVmIFNRTGl0ZUZpbGVTeXN0ZW1faA0KKyNk
ZWZpbmUgU1FMaXRlRmlsZVN5c3RlbV9oDQorDQorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
DQorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4NCisjaW5jbHVkZSA8d2luZG93cy5oPg0KKw0K
K3N0cnVjdCBzcWxpdGUzOw0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisNCitjbGFzcyBTUUxp
dGVEYXRhYmFzZTsNCisNCisvKg0KKyAqIEEgY2xhc3MgdGhhdCBhYnN0cmFjdHMgdGhlIGZpbGUg
c3lzdGVtIHJlbGF0ZWQgb3BlcmF0aW9ucyByZXF1aXJlZA0KKyAqIGJ5IHRoZSBXZWJLaXQgZGF0
YWJhc2UgY29kZS4NCisgKi8NCitjbGFzcyBTUUxpdGVGaWxlU3lzdGVtIHsNCitwdWJsaWM6DQor
ICAgIC8qDQorICAgICAqIFJlZ2lzdGVycyBhIHVzZXItZGVmaW5lZCBTUUxpdGUgVkZTLg0KKyAg
ICAgKi8NCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJTUUxpdGVWRlMoKTsNCisNCisgICAgLyoN
CisgICAgICogT3BlbnMgYSBkYXRhYmFzZSBmaWxlLg0KKyAgICAgKg0KKyAgICAgKiBmaWxlTmFt
ZSAtIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSBmaWxlLg0KKyAgICAgKiBkYXRhYmFzZSAtIFRo
ZSBTUUxpdGUgc3RydWN0dXJlIHRoYXQgcmVwcmVzZW50cyB0aGUgZGF0YWJhc2Ugc3RvcmVkDQor
ICAgICAqICAgICAgICAgICAgaW4gdGhlIGdpdmVuIGZpbGUuDQorICAgICAqLw0KKyAgICBzdGF0
aWMgaW50IG9wZW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBzcWxpdGUzKiogZGF0
YWJhc2UpOw0KKw0KKyAgICAvKg0KKyAgICAgKiBSZXR1cm5zIHRoZSBmaWxlIG5hbWUgZm9yIGEg
ZGF0YWJhc2UuDQorICAgICAqDQorICAgICAqIGRiRGlyIC0gVGhlIGRpcmVjdG9yeSB3aGVyZSBh
bGwgZGF0YWJhc2VzIGFyZSBzdG9yZWQuDQorICAgICAqIGRiTmFtZSAtIFRoZSBuYW1lIG9mIHRo
ZSBkYXRhYmFzZS4NCisgICAgICogb3JpZ2luSWRlbnRpZmllciAtIFRoZSBvcmlnaW4gdGhhdCB3
YW50cyB0byB1c2UgdGhpcyBkYXRhYmFzZS4NCisgICAgICogZGIgLSBBIGRhdGFiYXNlIHdpdGgg
YSBudW1iZXIgZ2VuZXJhdG9yIHVzZWQgdG8gY3JlYXRlIHVuaXF1ZSBmaWxlIG5hbWVzLg0KKyAg
ICAgKi8NCisgICAgc3RhdGljIFN0cmluZyBnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNlKGNvbnN0
IFN0cmluZyYgZGJEaXIsIGNvbnN0IFN0cmluZyYgZGJOYW1lLA0KKwkJCQkJICAgIGNvbnN0IFN0
cmluZyYgb3JpZ2luSWRlbnRpZmllciwgU1FMaXRlRGF0YWJhc2UqIGRiKTsNCisNCisgICAgLyoN
CisgICAgICogQ3JlYXRlcyBhbiBhYnNvbHV0ZSBmaWxlIHBhdGggZ2l2ZW4gYSBkaXJlY3Rvcnkg
YW5kIGEgZmlsZSBuYW1lLg0KKyAgICAgKg0KKyAgICAgKiBwYXRoIC0gVGhlIGRpcmVjdG9yeS4N
CisgICAgICogZmlsZU5hbWUgLSBUaGUgZmlsZSBuYW1lLg0KKyAgICAgKi8NCisgICAgc3RhdGlj
IFN0cmluZyBhcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7DQorDQorICAgIC8qDQorICAgICAqIE1ha2VzIHN1cmUg
dGhlIGdpdmVuIGRpcmVjdG9yeSBleGlzdHMsIGJ5IGNyZWF0aW5nIGFsbCBtaXNzaW5nIGRpcmVj
dG9yaWVzDQorICAgICAqIG9uIHRoZSBnaXZlbiBwYXRoLg0KKyAgICAgKg0KKyAgICAgKiBwYXRo
IC0gVGhlIGRpcmVjdG9yeS4NCisgICAgICovDQorICAgIHN0YXRpYyBib29sIGVuc3VyZURhdGFi
YXNlRGlyZWN0b3J5RXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCk7DQorDQorICAgIC8qDQorICAg
ICAqIElmICdjaGVja1BhdGhPbmx5JyBpcyBmYWxzZSwgdGhlbiB0aGlzIG1ldGhvZCBvbmx5IGNo
ZWNrcyBpZiB0aGUgZ2l2ZW4gZmlsZSBleGlzdHMuDQorICAgICAqIElmICdjaGVja1BhdGhPbmx5
JyBpcyB0cnVlLCB0aGVuIHRoaXMgbWV0aG9kIG1ha2VzIHN1cmUgYWxsIGRpcmVjdG9yaWVzIG9u
IHRoZQ0KKyAgICAgKiBnaXZlbiBwYXRoIGV4aXN0IGJ5IGNyZWF0aW5nIHRoZSBtaXNzaW5nIG9u
ZXMsIGFuZCBkb2VzIG5vdCBjaGVjayBpZiB0aGUgZmlsZQ0KKyAgICAgKiBpdHNlbGYgZXhpc3Rz
Lg0KKyAgICAgKg0KKyAgICAgKiBTb21ldGltZXMgd2UgZXhwZWN0IGEgREIgZmlsZSB0byBleGlz
dDsgb3RoZXIgdGltZXMsIHdlJ3JlIE9LIHdpdGggY3JlYXRpbmcgYSBuZXcNCisgICAgICogREIg
ZmlsZSwgYnV0IHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGRpcmVjdG9yeSBpbiB3aGlj
aCB3ZSB3YW50IHRvIHB1dCB0aGUNCisgICAgICogbmV3IERCIGZpbGUgZXhpc3RzLiBUaGlzIG1l
dGhvZCBjb3ZlcnMgYm90aCBjYXNlcy4NCisgICAgICoNCisgICAgICogZmlsZU5hbWUgLSBUaGUg
ZmlsZSBuYW1lLg0KKyAgICAgKiBjaGVja1BhdGhPbmx5IC0gSWYgdHJ1ZSwgd2Ugb25seSBtYWtl
IHN1cmUgdGhhdCB0aGUgZ2l2ZW4gZGlyZWN0b3J5IGV4aXN0cy4NCisgICAgICogICAgICAgICAg
ICAgICAgIElmIGZhbHNlLCB3ZSBvbmx5IGNoZWNrIGlmIHRoZSBmaWxlIGV4aXN0cy4NCisgICAg
ICovDQorICAgIHN0YXRpYyBib29sIGVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyhjb25zdCBTdHJp
bmcmIGZpbGVOYW1lLCBib29sIGNoZWNrUGF0aE9ubHkpOw0KKw0KKyAgICAvKg0KKyAgICAgKiBE
ZWxldGVzIGFuIGVtcHR5IGRhdGFiYXNlIGRpcmVjdG9yeS4NCisgICAgICoNCisgICAgICogcGF0
aCAtIFRoZSBkaXJlY3RvcnkuDQorICAgICAqLw0KKyAgICBzdGF0aWMgYm9vbCBkZWxldGVFbXB0
eURhdGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCk7DQorDQorICAgIC8qDQorICAg
ICAqIERlbGV0ZXMgYSBkYXRhYmFzZSBmaWxlLg0KKyAgICAgKg0KKyAgICAgKiBmaWxlTmFtZSAt
IFRoZSBmaWxlIG5hbWUuDQorICAgICAqLw0KKyAgICBzdGF0aWMgYm9vbCBkZWxldGVEYXRhYmFz
ZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7DQorDQorICAgIC8qDQorICAgICAqIFJldHVy
bnMgdGhlIHNpemUgb2YgdGhlIGRhdGFiYXNlIGZpbGUuDQorICAgICAqDQorICAgICAqIGZpbGVO
YW1lIC0gVGhlIGZpbGUgbmFtZS4NCisgICAgICovDQorICAgIHN0YXRpYyBsb25nIGxvbmcgZ2V0
RGF0YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsNCisNCisgICAgLyoNCisg
ICAgICogTm90aWZpZXMgb3RoZXIgbGF5ZXJzIHRoYXQgYWxsIGRhdGFiYXNlcyBoYXZlIGJlZW4g
Y2xvc2VkLg0KKyAgICAgKi8NCisgICAgc3RhdGljIHZvaWQgYWxsRGF0YWJhc2VzQ2xvc2VkKCk7
DQorDQorcHJpdmF0ZToNCisgICAgLy8gZG8gbm90IGluc3RhbnRpYXRlIHRoaXMgY2xhc3MNCisg
ICAgU1FMaXRlRmlsZVN5c3RlbSgpOw0KK307IC8vIGNsYXNzIFNRTGl0ZUZpbGVTeXN0ZW0NCisN
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQorDQorI2VuZGlmDQoKUHJvcGVydHkgY2hhbmdlcyBv
bjogV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNp
b24gNDQyMDEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRmls
ZVN5c3RlbS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTQ4LDYgKzQ3LDcgQEAKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiT3JpZ2luUXVvdGFNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiU1FM
aXRlRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAi
U1FMaXRlU3RhdGVtZW50LmgiCiAjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCiAjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KQEAgLTMzOCwxMCArMzM4LDcgQEAgdm9pZCBEYXRhYmFzZTo6c3Rv
cCgpCiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZTo6ZGF0YWJhc2VTaXplKCkgY29uc3QK
IHsKLSAgICBsb25nIGxvbmcgc2l6ZTsKLSAgICBpZiAoIWdldEZpbGVTaXplKG1fZmlsZW5hbWUs
IHNpemUpKQotICAgICAgICBzaXplID0gMDsKLSAgICByZXR1cm4gc2l6ZTsKKyAgICByZXR1cm4g
U1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShtX2ZpbGVuYW1lKTsKIH0KIAog
dW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlOjptYXhpbXVtU2l6ZSgpIGNvbnN0CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAkocmV2aXNpb24gNDQyMDEpCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1
LDEyIEBACiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXJD
bGllbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiT3JpZ2luUXVvdGFNYW5hZ2VyLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW5IYXNoLmgiCisjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogI2lu
Y2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNjksNiArNjksNyBAQCBEYXRhYmFzZVRy
YWNrZXI6OkRhdGFiYXNlVHJhY2tlcigpCiAgICAgLCBtX3RocmVhZChjdXJyZW50VGhyZWFkKCkp
CiAjZW5kaWYKIHsKKyAgU1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKTsKIH0K
IAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChjb25zdCBT
dHJpbmcmIHBhdGgpCkBAIC04Nyw5ICs4OCw3IEBAIGNvbnN0IFN0cmluZyYgRGF0YWJhc2VUcmFj
a2VyOjpkYXRhYmFzZUQKIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBh
dGgoKSBjb25zdAogewogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWQpOwot
ICAgIGlmIChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLSAgICByZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fZGF0YWJh
c2VEaXJlY3RvcnlQYXRoLCAiRGF0YWJhc2VzLmRiIik7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVT
eXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgobV9kYXRhYmFzZURpcmVjdG9yeVBh
dGgsICJEYXRhYmFzZXMuZGIiKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6Om9wZW5UcmFj
a2VyRGF0YWJhc2UoYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCkKQEAgLTEwMCwxMyArOTksOSBA
QCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFN0cmluZyBkYXRhYmFzZVBhdGggPSB0cmFja2VyRGF0YWJhc2VQYXRoKCk7Ci0g
ICAgaWYgKGRhdGFiYXNlUGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghY3JlYXRlSWZEb2VzTm90RXhpc3QgJiYgIWZpbGVFeGlzdHMoZGF0YWJhc2VQYXRoKSkKKyAg
ICBpZiAoIVNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyhkYXRhYmFz
ZVBhdGgsIGNyZWF0ZUlmRG9lc05vdEV4aXN0KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbWFr
ZUFsbERpcmVjdG9yaWVzKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoKTsKICAgICBpZiAoIW1fZGF0
YWJhc2Uub3BlbihkYXRhYmFzZVBhdGgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGRvIGRv
IGhlcmU/CiAgICAgICAgIHJldHVybjsKQEAgLTE5MCw5ICsxODUsNyBAQCBib29sIERhdGFiYXNl
VHJhY2tlcjo6aGFzRW50cnlGb3JEYXRhYmFzCiBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpvcmln
aW5QYXRoKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWQoKSA9PSBtX3RocmVhZCk7Ci0gICAgaWYgKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRo
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsIG9yaWdpbi0+ZGF0YWJh
c2VJZGVudGlmaWVyKCkpOworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRh
YmFzZUZpbGVOYW1lVG9QYXRoKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBvcmlnaW4tPmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKIH0KIAogU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhG
b3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wgY3JlYXRlSWZOb3RFeGlzdHMpCkBAIC0yMDYsNyArMTk5LDcgQEAgU3RyaW5nIERhdGFiYXNl
VHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYgogICAgIFN0cmluZyBvcmlnaW5QYXRoID0gdGhpcy0+
b3JpZ2luUGF0aChvcmlnaW4pOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgcGF0aCBmb3Ig
dGhpcyBTZWN1cml0eU9yaWdpbiBleGlzdHMKLSAgICBpZiAoY3JlYXRlSWZOb3RFeGlzdHMgJiYg
IW1ha2VBbGxEaXJlY3RvcmllcyhvcmlnaW5QYXRoKSkKKyAgICBpZiAoY3JlYXRlSWZOb3RFeGlz
dHMgJiYgIVNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRGlyZWN0b3J5RXhpc3RzKG9y
aWdpblBhdGgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgCiAgICAgLy8gU2VlIGlm
IHdlIGhhdmUgYSBwYXRoIGZvciB0aGlzIGRhdGFiYXNlIHlldApAQCAtMjI0LDcgKzIxNyw3IEBA
IFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICBpbnQgcmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKTsKIAogICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KQot
ICAgICAgICByZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG9yaWdpblBhdGgsIHN0YXRl
bWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjph
cHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKG9yaWdpblBhdGgsIHN0YXRlbWVudC5nZXRDb2x1
bW5UZXh0KDApKTsKICAgICBpZiAoIWNyZWF0ZUlmTm90RXhpc3RzKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAgICAgICAgIApAQCAtMjQxLDIyICsyMzQsOCBAQCBTdHJpbmcgRGF0YWJhc2VU
cmFja2VyOjpmdWxsUGF0aEZvckRhdGFiCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICBy
ZXN1bHQgPSBzZXF1ZW5jZVN0YXRlbWVudC5zdGVwKCk7CiAKLSAgICAvLyBUaGlzIGhhcyBhIHJh
bmdlIG9mIDJeNjMgYW5kIHN0YXJ0cyBhdCAwIGZvciBldmVyeSB0aW1lIGEgdXNlciByZXNldHMg
U2FmYXJpIC0KLSAgICAvLyBJIGNhbid0IGltYWdpbmUgaXQnZCBvdmVyIG92ZXJmbG93Ci0gICAg
aW50NjRfdCBzZXEgPSAwOwotICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KSB7Ci0gICAg
ICAgIHNlcSA9IHNlcXVlbmNlU3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOwotICAgIH0gZWxz
ZSBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICBzZXF1ZW5jZVN0YXRlbWVudC5maW5hbGl6ZSgpOwotCi0gICAgU3RyaW5nIGZpbGVuYW1l
OwotICAgIGRvIHsKLSAgICAgICAgKytzZXE7Ci0gICAgICAgIGZpbGVuYW1lID0gcGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KG9yaWdpblBhdGgsIFN0cmluZzo6Zm9ybWF0KCIlMDE2bGx4LmRiIiwg
c2VxKSk7Ci0gICAgfSB3aGlsZSAoZmlsZUV4aXN0cyhmaWxlbmFtZSkpOwotCi0gICAgaWYgKCFh
ZGREYXRhYmFzZShvcmlnaW4sIG5hbWUsIFN0cmluZzo6Zm9ybWF0KCIlMDE2bGx4LmRiIiwgc2Vx
KSkpCisgICAgU3RyaW5nIGZpbGVOYW1lID0gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RmlsZU5hbWVG
b3JOZXdEYXRhYmFzZShvcmlnaW5QYXRoLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLCBu
YW1lLCAmbV9kYXRhYmFzZSk7CisgICAgaWYgKCFhZGREYXRhYmFzZShvcmlnaW4sIG5hbWUsIGZp
bGVOYW1lKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgLy8gSWYgdGhpcyBvcmln
aW4ncyBxdW90YSBpcyBiZWluZyB0cmFja2VkIChvcGVuIGhhbmRsZSB0byBhIGRhdGFiYXNlIGlu
IHRoaXMgb3JpZ2luKSwgYWRkIHRoaXMgbmV3IGRhdGFiYXNlCkBAIC0yNjQsMTAgKzI0MywxMCBA
QCBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiCiAgICAgewogICAgICAg
ICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBsb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkp
OwogICAgICAgICBpZiAob3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJhY2tzT3JpZ2luKG9yaWdpbikp
Ci0gICAgICAgICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5hZGREYXRhYmFzZShvcmlnaW4sIG5h
bWUsIGZpbGVuYW1lKTsKKyAgICAgICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLmFkZERhdGFi
YXNlKG9yaWdpbiwgbmFtZSwgZmlsZU5hbWUpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gZmls
ZW5hbWU7CisgICAgcmV0dXJuIGZpbGVOYW1lOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6
cG9wdWxhdGVPcmlnaW5zKCkKQEAgLTQyMyw4ICs0MDIsNyBAQCB1bnNpZ25lZCBsb25nIGxvbmcg
RGF0YWJhc2VUcmFja2VyOjp1c2FnCiAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgCi0gICAgbG9uZyBsb25nIHNpemU7Ci0gICAgcmV0dXJuIGdldEZp
bGVTaXplKHBhdGgsIHNpemUpID8gc2l6ZSA6IDA7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0
ZW06OmdldERhdGFiYXNlRmlsZVNpemUocGF0aCk7CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2Vy
OjphZGRPcGVuRGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFiYXNlKQpAQCAtNjY1LDcgKzY0Myw3IEBA
IHZvaWQgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXIKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KG9yaWdpblBhdGgob3JpZ2luKSk7
CisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShvcmln
aW5QYXRoKG9yaWdpbikpOwogCiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW5Qb3Nz
aWJseUxhc3RSZWZlcmVuY2UgPSBvcmlnaW47CiAgICAgewpAQCAtNjc5LDggKzY1Nyw4IEBAIHZv
aWQgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXIKICAgICAgICAgaWYgKG1fcXVv
dGFNYXAtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkp
CiAgICAgICAgICAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICAgICAgZGVsZXRl
RmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOwotICAgICAgICAgICAgZGVsZXRlRW1wdHlEaXJl
Y3RvcnkobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgpOworCSAgICBTUUxpdGVGaWxlU3lzdGVtOjpk
ZWxldGVEYXRhYmFzZUZpbGUodHJhY2tlckRhdGFiYXNlUGF0aCgpKTsKKwkgICAgU1FMaXRlRmls
ZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShtX2RhdGFiYXNlRGlyZWN0b3J5
UGF0aCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTc2Myw3ICs3NDEsNyBAQCBib29sIERhdGFi
YXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRlbGV0ZWREYXRhYmFzZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGRlbGV0ZWREYXRhYmFz
ZXNbaV0tPm1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOwogCi0gICAgcmV0dXJuIGRlbGV0ZUZpbGUo
ZnVsbFBhdGgpOworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZp
bGUoZnVsbFBhdGgpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6c2V0Q2xpZW50KERhdGFi
YXNlVHJhY2tlckNsaWVudCogY2xpZW50KQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL09yaWdpblVz
YWdlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvT3JpZ2luVXNhZ2VS
ZWNvcmQuY3BwCShyZXZpc2lvbiA0NDIwMSkKKysrIFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5Vc2Fn
ZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2lmIEVOQUJM
RShEQVRBQkFTRSkKIAotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJTUUxpdGVG
aWxlU3lzdGVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODIsOCArODIsOCBAQCB1
bnNpZ25lZCBsb25nIGxvbmcgT3JpZ2luVXNhZ2VSZWNvcmQ6OmRpCiAgICAgICAgIGNvbnN0IFN0
cmluZyYgcGF0aCA9IG1fZGF0YWJhc2VNYXAuZ2V0KCppVW5rbm93bikuZmlsZW5hbWU7CiAgICAg
ICAgIEFTU0VSVCghcGF0aC5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAgIAotICAgICAgICBs
b25nIGxvbmcgc2l6ZTsKLSAgICAgICAgaWYgKGdldEZpbGVTaXplKHBhdGgsIHNpemUpKQorICAg
ICAgICBsb25nIGxvbmcgc2l6ZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNp
emUocGF0aCk7CisgICAgICAgIGlmIChzaXplID4gMCkKICAgICAgICAgICAgIG1fZGF0YWJhc2VN
YXAuc2V0KCppVW5rbm93biwgRGF0YWJhc2VFbnRyeShwYXRoLCBzaXplKSk7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgLy8gV2hlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgdGhlIGZpbGUgc2l6
ZSwgd2UnbGwganVzdCBoYXZlIHRvIGFzc3VtZSB0aGUgZmlsZSBpcyBtaXNzaW5nL2luYWNjZXNz
aWJsZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30977</attachid>
            <date>2009-06-04 17:58:21 -0700</date>
            <delta_ts>2009-06-10 18:59:46 -0700</delta_ts>
            <desc>same patch with a minor change</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>22373</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDQ0MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMDktMDYtMDQgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRzIGFuIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW4gdGhlIERCIGNsYXNzZXMgYW5kIHRo
ZSBmaWxlCisgICAgICAgIHN5c3RlbSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFkZCBvdXIgb3duIGxv
Z2ljIGZvciBzdG9yaW5nLCBvcGVuaW5nLAorICAgICAgICBkZWxldGluZywgZXRjLiBkYXRhYmFz
ZXMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2
MDU0CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6Om9wZW4pOgorICAgICAgICAq
IHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
UUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3Rv
cnlFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0
YWJhc2VGaWxlRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmRl
bGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmls
ZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZp
bGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9T
UUxpdGVGaWxlU3lzdGVtLmg6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OmRhdGFiYXNlU2l6ZSk6CisgICAgICAgICog
c3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjpEYXRhYmFzZVRyYWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFj
a2VyOjp0cmFja2VyRGF0YWJhc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6Om9yaWdpblBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpm
dWxsUGF0aEZvckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6
dXNhZ2VGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRl
bGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURh
dGFiYXNlRmlsZSk6CisgICAgICAgICogc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpPcmlnaW5Vc2FnZVJlY29yZDo6ZGlza1VzYWdlKToKKwogMjAwOS0w
Ni0wNCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIC0gdHJ5IHRv
IGZpeCB0aGUgVGlnZXIgYnVpbGQKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDQyMDEpCisrKyBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDA1LDYgKzIwMDUsOCBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUF1dGhvcml6
ZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAgXAogCVdl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmggXAorCVdlYkNvcmUvcGxhdGZvcm0v
c3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVG
aWxlU3lzdGVtLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAg
XAogCVdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oIFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0NDIwMSkKKysrIFdlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTU5MTIsNiArNTkxMiwxNCBA
QAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cc3FsXFNRTGl0ZUZpbGVTeXN0ZW0uY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0Zp
bGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHNxbFxTUUxp
dGVGaWxlU3lzdGVtLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cc3FsXFNRTGl0ZVN0YXRlbWVudC5jcHAiDQogCQkJ
CQk+DQogCQkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRh
YmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJh
c2UuY3BwCShyZXZpc2lvbiA0NDIwMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURh
dGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAi
RGF0YWJhc2VBdXRob3JpemVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNR
TGl0ZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKIAogI2luY2x1
ZGUgPHNxbGl0ZTMuaD4KQEAgLTYxLDggKzYyLDcgQEAgYm9vbCBTUUxpdGVEYXRhYmFzZTo6b3Bl
bihjb25zdCBTdHJpbmcmIAogICAgIGNsb3NlKCk7CiAgICAgCiAgICAgLy8gU1FMaXRlIGV4cGVj
dHMgYSBudWxsIHRlcm1pbmF0b3Igb24gaXRzIFVURi0xNiBzdHJpbmdzLgotICAgIFN0cmluZyBw
YXRoID0gZmlsZW5hbWU7Ci0gICAgbV9sYXN0RXJyb3IgPSBzcWxpdGUzX29wZW4xNihwYXRoLmNo
YXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksICZtX2RiKTsKKyAgICBtX2xhc3RFcnJvciA9
IFNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFzZShmaWxlbmFtZSwgJm1fZGIpOwogICAgIGlm
IChtX2xhc3RFcnJvciAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUg
ZGF0YWJhc2UgZmFpbGVkIHRvIGxvYWQgZnJvbSAlc1xuQ2F1c2UgLSAlcyIsIGZpbGVuYW1lLmFz
Y2lpKCkuZGF0YSgpLAogICAgICAgICAgICAgc3FsaXRlM19lcnJtc2cobV9kYikpOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMzQgQEAKKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlDQorICogbWV0Og0KKyAqDQorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0K
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXINCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQorICogZGlzdHJpYnV0aW9uLg0KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQ0KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QNCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
DQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKi8NCisNCisjaW5jbHVkZSAi
Y29uZmlnLmgiDQorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCINCisNCisjaW5jbHVkZSAi
RmlsZVN5c3RlbS5oIg0KKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIg0KKyNpbmNsdWRlICJT
UUxpdGVTdGF0ZW1lbnQuaCINCisjaW5jbHVkZSA8c3FsaXRlMy5oPg0KKw0KKyNpZiBQTEFURk9S
TShXSU4pDQorI2RlZmluZSBQQVRIX1NFUEFSQVRPUiAnXFwnDQorI2Vsc2UNCisjZGVmaW5lIFBB
VEhfU0VQQVJBVE9SICcvJw0KKyNlbmRpZg0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisNCitT
UUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKCkNCit7DQorfQ0KKw0KK3ZvaWQgU1FM
aXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKQ0KK3sNCit9DQorDQoraW50IFNRTGl0
ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBzcWxpdGUz
KiogZGF0YWJhc2UpDQorew0KKyAgICAvLyBTUUxpdGUgZXhwZWN0cyBhIG51bGwgdGVybWluYXRv
ciBvbiBpdHMgVVRGLTE2IHN0cmluZ3MuDQorICAgIFN0cmluZyBwYXRoID0gZmlsZU5hbWU7DQor
ICAgIHJldHVybiBzcWxpdGUzX29wZW4xNihwYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCksIGRhdGFiYXNlKTsNCit9DQorDQorU3RyaW5nIFNRTGl0ZUZpbGVTeXN0ZW06OmdldEZp
bGVOYW1lRm9yTmV3RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBkYkRpciwgY29uc3QgU3RyaW5nJiBk
Yk5hbWUsDQorCQkJCQkJICAgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBTUUxpdGVE
YXRhYmFzZSogZGIpDQorew0KKyAgICAvLyB0cnkgdG8gZ2V0IHRoZSBuZXh0IHNlcXVlbmNlIG51
bWJlciBmcm9tIHRoZSBnaXZlbiBkYXRhYmFzZQ0KKyAgICAvLyBpZiB3ZSBjYW4ndCBnZXQgYSBu
dW1iZXIsIHJldHVybiBhbiBlbXB0eSBzdHJpbmcNCisgICAgU1FMaXRlU3RhdGVtZW50IHNlcXVl
bmNlU3RhdGVtZW50KCpkYiwgIlNFTEVDVCBzZXEgRlJPTSBzcWxpdGVfc2VxdWVuY2UgV0hFUkUg
bmFtZT0nRGF0YWJhc2VzJzsiKTsNCisgICAgaWYgKHNlcXVlbmNlU3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxSZXN1bHRPaykNCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsNCisgICAgaW50IHJl
c3VsdCA9IHNlcXVlbmNlU3RhdGVtZW50LnN0ZXAoKTsNCisgICAgaW50NjRfdCBzZXEgPSAwOw0K
KyAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykgew0KKyAgICAgICAgc2VxID0gc2VxdWVu
Y2VTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7DQorICAgIH0gZWxzZSBpZiAocmVzdWx0ICE9
IFNRTFJlc3VsdERvbmUpDQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7DQorICAgIHNlcXVlbmNl
U3RhdGVtZW50LmZpbmFsaXplKCk7DQorDQorICAgIC8vIGluY3JlbWVudCB0aGUgbnVtYmVyIHVu
dGlsIHdlIGNhbiB1c2UgaXQgdG8gZm9ybSBhIGZpbGUgbmFtZSB0aGF0IGRvZXNuJ3QgZXhpc3QN
CisgICAgU3RyaW5nIGZpbGVOYW1lOw0KKyAgICBkbyB7DQorICAgICAgICArK3NlcTsNCisgICAg
ICAgIGZpbGVOYW1lID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRiRGlyLCBTdHJpbmc6OmZv
cm1hdCgiJTAxNmxseC5kYiIsIHNlcSkpOw0KKyAgICB9IHdoaWxlIChmaWxlRXhpc3RzKGZpbGVO
YW1lKSk7DQorDQorICAgIHJldHVybiBmaWxlTmFtZTsNCit9DQorDQorU3RyaW5nIFNRTGl0ZUZp
bGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQ0KK3sNCisgICAgcmV0dXJuIHBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChwYXRoLCBmaWxlTmFtZSk7DQorfQ0KKw0KK2Jvb2wgU1FMaXRlRmlsZVN5c3Rl
bTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQ0KK3sN
CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQ0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICBy
ZXR1cm4gbWFrZUFsbERpcmVjdG9yaWVzKHBhdGgpOw0KK30NCisNCitib29sIFNRTGl0ZUZpbGVT
eXN0ZW06OmVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBi
b29sIGNoZWNrUGF0aE9ubHkpDQorew0KKyAgICBpZiAoZmlsZU5hbWUuaXNFbXB0eSgpKQ0KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOw0KKw0KKyAgICBpZiAoY2hlY2tQYXRoT25seSkgew0KKyAgICAg
ICAgU3RyaW5nIGRpciA9IGZpbGVOYW1lOw0KKyAgICAgICAgaW50IGxhc3RJbmRleE9mQmFja1Ns
YXNoID0gZGlyLnJldmVyc2VGaW5kKFBBVEhfU0VQQVJBVE9SKTsNCisgICAgICAgIGlmIChsYXN0
SW5kZXhPZkJhY2tTbGFzaCA+IDApIHsNCisgICAgICAgICAgICBkaXIudHJ1bmNhdGUobGFzdElu
ZGV4T2ZCYWNrU2xhc2gpOw0KKyAgICAgICAgICAgIHJldHVybiBlbnN1cmVEYXRhYmFzZURpcmVj
dG9yeUV4aXN0cyhkaXIpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAg
IH0NCisNCisgICAgcmV0dXJuIGZpbGVFeGlzdHMoZmlsZU5hbWUpOw0KK30NCisNCitib29sIFNR
TGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5n
JiBwYXRoKQ0KK3sNCisgICAgcmV0dXJuIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KHBhdGgpOw0KK30N
CisNCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJp
bmcmIGZpbGVOYW1lKQ0KK3sNCisgICAgcmV0dXJuIGRlbGV0ZUZpbGUoZmlsZU5hbWUpOw0KK30N
CisNCitsb25nIGxvbmcgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShjb25z
dCBTdHJpbmcmIGZpbGVOYW1lKQ0KK3sgICAgICAgIA0KKyAgICBsb25nIGxvbmcgc2l6ZTsNCisg
ICAgcmV0dXJuIGdldEZpbGVTaXplKGZpbGVOYW1lLCBzaXplKSA/IHNpemUgOiAwOw0KK30NCisN
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4
ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5
c3RlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0
ZW0uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0
ZW0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzUgQEAKKy8qDQorICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlDQorICogbWV0Og0KKyAqDQorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuDQorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQ0KKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXINCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQorICogZGlzdHJp
YnV0aW9uLg0KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMNCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
DQorICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLA0KKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkNCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisg
Ki8NCisNCisjaWZuZGVmIFNRTGl0ZUZpbGVTeXN0ZW1faA0KKyNkZWZpbmUgU1FMaXRlRmlsZVN5
c3RlbV9oDQorDQorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiDQorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4NCisjaW5jbHVkZSA8d2luZG93cy5oPg0KKw0KK3N0cnVjdCBzcWxpdGUzOw0K
Kw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisNCitjbGFzcyBTUUxpdGVEYXRhYmFzZTsNCisNCisv
Kg0KKyAqIEEgY2xhc3MgdGhhdCBhYnN0cmFjdHMgdGhlIGZpbGUgc3lzdGVtIHJlbGF0ZWQgb3Bl
cmF0aW9ucyByZXF1aXJlZA0KKyAqIGJ5IHRoZSBXZWJLaXQgZGF0YWJhc2UgY29kZS4NCisgKi8N
CitjbGFzcyBTUUxpdGVGaWxlU3lzdGVtIHsNCitwdWJsaWM6DQorICAgIC8qDQorICAgICAqIFJl
Z2lzdGVycyBhIHVzZXItZGVmaW5lZCBTUUxpdGUgVkZTLg0KKyAgICAgKi8NCisgICAgc3RhdGlj
IHZvaWQgcmVnaXN0ZXJTUUxpdGVWRlMoKTsNCisNCisgICAgLyoNCisgICAgICogT3BlbnMgYSBk
YXRhYmFzZSBmaWxlLg0KKyAgICAgKg0KKyAgICAgKiBmaWxlTmFtZSAtIFRoZSBuYW1lIG9mIHRo
ZSBkYXRhYmFzZSBmaWxlLg0KKyAgICAgKiBkYXRhYmFzZSAtIFRoZSBTUUxpdGUgc3RydWN0dXJl
IHRoYXQgcmVwcmVzZW50cyB0aGUgZGF0YWJhc2Ugc3RvcmVkDQorICAgICAqICAgICAgICAgICAg
aW4gdGhlIGdpdmVuIGZpbGUuDQorICAgICAqLw0KKyAgICBzdGF0aWMgaW50IG9wZW5EYXRhYmFz
ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBzcWxpdGUzKiogZGF0YWJhc2UpOw0KKw0KKyAgICAv
Kg0KKyAgICAgKiBSZXR1cm5zIHRoZSBmaWxlIG5hbWUgZm9yIGEgZGF0YWJhc2UuDQorICAgICAq
DQorICAgICAqIGRiRGlyIC0gVGhlIGRpcmVjdG9yeSB3aGVyZSBhbGwgZGF0YWJhc2VzIGFyZSBz
dG9yZWQuDQorICAgICAqIGRiTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZS4NCisgICAg
ICogb3JpZ2luSWRlbnRpZmllciAtIFRoZSBvcmlnaW4gdGhhdCB3YW50cyB0byB1c2UgdGhpcyBk
YXRhYmFzZS4NCisgICAgICogZGIgLSBBIGRhdGFiYXNlIHdpdGggYSBudW1iZXIgZ2VuZXJhdG9y
IHVzZWQgdG8gY3JlYXRlIHVuaXF1ZSBmaWxlIG5hbWVzLg0KKyAgICAgKi8NCisgICAgc3RhdGlj
IFN0cmluZyBnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNlKGNvbnN0IFN0cmluZyYgZGJEaXIsIGNv
bnN0IFN0cmluZyYgZGJOYW1lLA0KKwkJCQkJICAgIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRp
ZmllciwgU1FMaXRlRGF0YWJhc2UqIGRiKTsNCisNCisgICAgLyoNCisgICAgICogQ3JlYXRlcyBh
biBhYnNvbHV0ZSBmaWxlIHBhdGggZ2l2ZW4gYSBkaXJlY3RvcnkgYW5kIGEgZmlsZSBuYW1lLg0K
KyAgICAgKg0KKyAgICAgKiBwYXRoIC0gVGhlIGRpcmVjdG9yeS4NCisgICAgICogZmlsZU5hbWUg
LSBUaGUgZmlsZSBuYW1lLg0KKyAgICAgKi8NCisgICAgc3RhdGljIFN0cmluZyBhcHBlbmREYXRh
YmFzZUZpbGVOYW1lVG9QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSk7DQorDQorICAgIC8qDQorICAgICAqIE1ha2VzIHN1cmUgdGhlIGdpdmVuIGRpcmVjdG9y
eSBleGlzdHMsIGJ5IGNyZWF0aW5nIGFsbCBtaXNzaW5nIGRpcmVjdG9yaWVzDQorICAgICAqIG9u
IHRoZSBnaXZlbiBwYXRoLg0KKyAgICAgKg0KKyAgICAgKiBwYXRoIC0gVGhlIGRpcmVjdG9yeS4N
CisgICAgICovDQorICAgIHN0YXRpYyBib29sIGVuc3VyZURhdGFiYXNlRGlyZWN0b3J5RXhpc3Rz
KGNvbnN0IFN0cmluZyYgcGF0aCk7DQorDQorICAgIC8qDQorICAgICAqIElmICdjaGVja1BhdGhP
bmx5JyBpcyBmYWxzZSwgdGhlbiB0aGlzIG1ldGhvZCBvbmx5IGNoZWNrcyBpZiB0aGUgZ2l2ZW4g
ZmlsZSBleGlzdHMuDQorICAgICAqIElmICdjaGVja1BhdGhPbmx5JyBpcyB0cnVlLCB0aGVuIHRo
aXMgbWV0aG9kIG1ha2VzIHN1cmUgYWxsIGRpcmVjdG9yaWVzIG9uIHRoZQ0KKyAgICAgKiBnaXZl
biBwYXRoIGV4aXN0IGJ5IGNyZWF0aW5nIHRoZSBtaXNzaW5nIG9uZXMsIGFuZCBkb2VzIG5vdCBj
aGVjayBpZiB0aGUgZmlsZQ0KKyAgICAgKiBpdHNlbGYgZXhpc3RzLg0KKyAgICAgKg0KKyAgICAg
KiBTb21ldGltZXMgd2UgZXhwZWN0IGEgREIgZmlsZSB0byBleGlzdDsgb3RoZXIgdGltZXMsIHdl
J3JlIE9LIHdpdGggY3JlYXRpbmcgYSBuZXcNCisgICAgICogREIgZmlsZSwgYnV0IHdlIHdhbnQg
dG8gbWFrZSBzdXJlIHRoYXQgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB3ZSB3YW50IHRvIHB1dCB0
aGUNCisgICAgICogbmV3IERCIGZpbGUgZXhpc3RzLiBUaGlzIG1ldGhvZCBjb3ZlcnMgYm90aCBj
YXNlcy4NCisgICAgICoNCisgICAgICogZmlsZU5hbWUgLSBUaGUgZmlsZSBuYW1lLg0KKyAgICAg
KiBjaGVja1BhdGhPbmx5IC0gSWYgdHJ1ZSwgd2Ugb25seSBtYWtlIHN1cmUgdGhhdCB0aGUgZ2l2
ZW4gZGlyZWN0b3J5IGV4aXN0cy4NCisgICAgICogICAgICAgICAgICAgICAgIElmIGZhbHNlLCB3
ZSBvbmx5IGNoZWNrIGlmIHRoZSBmaWxlIGV4aXN0cy4NCisgICAgICovDQorICAgIHN0YXRpYyBi
b29sIGVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBib29s
IGNoZWNrUGF0aE9ubHkpOw0KKw0KKyAgICAvKg0KKyAgICAgKiBEZWxldGVzIGFuIGVtcHR5IGRh
dGFiYXNlIGRpcmVjdG9yeS4NCisgICAgICoNCisgICAgICogcGF0aCAtIFRoZSBkaXJlY3Rvcnku
DQorICAgICAqLw0KKyAgICBzdGF0aWMgYm9vbCBkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYgcGF0aCk7DQorDQorICAgIC8qDQorICAgICAqIERlbGV0ZXMgYSBkYXRh
YmFzZSBmaWxlLg0KKyAgICAgKg0KKyAgICAgKiBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuDQor
ICAgICAqLw0KKyAgICBzdGF0aWMgYm9vbCBkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5n
JiBmaWxlTmFtZSk7DQorDQorICAgIC8qDQorICAgICAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhl
IGRhdGFiYXNlIGZpbGUuDQorICAgICAqDQorICAgICAqIGZpbGVOYW1lIC0gVGhlIGZpbGUgbmFt
ZS4NCisgICAgICovDQorICAgIHN0YXRpYyBsb25nIGxvbmcgZ2V0RGF0YWJhc2VGaWxlU2l6ZShj
b25zdCBTdHJpbmcmIGZpbGVOYW1lKTsNCisNCitwcml2YXRlOg0KKyAgICAvLyBkbyBub3QgaW5z
dGFudGlhdGUgdGhpcyBjbGFzcw0KKyAgICBTUUxpdGVGaWxlU3lzdGVtKCk7DQorfTsgLy8gY2xh
c3MgU1FMaXRlRmlsZVN5c3RlbQ0KKw0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUNCisNCisjZW5k
aWYNCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxl
U3lzdGVtLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDog
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA0NDIwMSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlICJEYXRh
YmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAt
NDgsNiArNDcsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJPcmlnaW5RdW90YU1h
bmFnZXIuaCIKICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlNRTGl0ZUZp
bGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTUUxS
ZXN1bHRTZXQuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAtMzM4LDEwICszMzgs
NyBAQCB2b2lkIERhdGFiYXNlOjpzdG9wKCkKIAogdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNl
OjpkYXRhYmFzZVNpemUoKSBjb25zdAogewotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIGlmICgh
Z2V0RmlsZVNpemUobV9maWxlbmFtZSwgc2l6ZSkpCi0gICAgICAgIHNpemUgPSAwOwotICAgIHJl
dHVybiBzaXplOworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVT
aXplKG1fZmlsZW5hbWUpOwogfQogCiB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2U6Om1heGlt
dW1TaXplKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCShyZXZp
c2lvbiA0NDIwMSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTIgQEAKICNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2lu
Y2x1ZGUgIkRhdGFiYXNlVHJhY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJP
cmlnaW5RdW90YU1hbmFnZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU2VjdXJp
dHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIKKyNpbmNsdWRlICJT
UUxpdGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCiAjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC02
OSw2ICs2OSw3IEBAIERhdGFiYXNlVHJhY2tlcjo6RGF0YWJhc2VUcmFja2VyKCkKICAgICAsIG1f
dGhyZWFkKGN1cnJlbnRUaHJlYWQoKSkKICNlbmRpZgogeworICBTUUxpdGVGaWxlU3lzdGVtOjpy
ZWdpc3RlclNRTGl0ZVZGUygpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6c2V0RGF0YWJh
c2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKQEAgLTg3LDkgKzg4LDcgQEAgY29u
c3QgU3RyaW5nJiBEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlRAogU3RyaW5nIERhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWQoKSA9PSBtX3RocmVhZCk7Ci0gICAgaWYgKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsICJEYXRhYmFzZXMuZGIiKTsK
KyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0
aChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgIkRhdGFiYXNlcy5kYiIpOwogfQogCiB2b2lkIERh
dGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4
aXN0KQpAQCAtMTAwLDEzICs5OSw5IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpvcGVuVHJhY2tl
ckRhdGFiYXMKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGRhdGFiYXNlUGF0aCA9IHRy
YWNrZXJEYXRhYmFzZVBhdGgoKTsKLSAgICBpZiAoZGF0YWJhc2VQYXRoLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFjcmVhdGVJZkRvZXNOb3RFeGlzdCAmJiAhZmlsZUV4
aXN0cyhkYXRhYmFzZVBhdGgpKQorICAgIGlmICghU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0
YWJhc2VGaWxlRXhpc3RzKGRhdGFiYXNlUGF0aCwgY3JlYXRlSWZEb2VzTm90RXhpc3QpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtYWtlQWxsRGlyZWN0b3JpZXMobV9kYXRhYmFzZURpcmVjdG9y
eVBhdGgpOwogICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKGRhdGFiYXNlUGF0aCkpIHsKICAgICAg
ICAgLy8gRklYTUU6IFdoYXQgZG8gZG8gaGVyZT8KICAgICAgICAgcmV0dXJuOwpAQCAtMTkwLDkg
KzE4NSw3IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvckRhdGFiYXMKIFN0cmlu
ZyBEYXRhYmFzZVRyYWNrZXI6Om9yaWdpblBhdGgoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikgY29u
c3QKIHsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkKTsKLSAgICBpZiAo
bV9kYXRhYmFzZURpcmVjdG9yeVBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gU3RyaW5n
KCk7Ci0gICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2RhdGFiYXNlRGlyZWN0
b3J5UGF0aCwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgcmV0dXJuIFNRTGl0
ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgobV9kYXRhYmFzZURpcmVj
dG9yeVBhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkpOwogfQogCiBTdHJpbmcgRGF0
YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4s
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZk5vdEV4aXN0cykKQEAgLTIwNiw3ICsx
OTksNyBAQCBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiCiAgICAgU3Ry
aW5nIG9yaWdpblBhdGggPSB0aGlzLT5vcmlnaW5QYXRoKG9yaWdpbik7CiAgICAgCiAgICAgLy8g
TWFrZSBzdXJlIHRoZSBwYXRoIGZvciB0aGlzIFNlY3VyaXR5T3JpZ2luIGV4aXN0cwotICAgIGlm
IChjcmVhdGVJZk5vdEV4aXN0cyAmJiAhbWFrZUFsbERpcmVjdG9yaWVzKG9yaWdpblBhdGgpKQor
ICAgIGlmIChjcmVhdGVJZk5vdEV4aXN0cyAmJiAhU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0
YWJhc2VEaXJlY3RvcnlFeGlzdHMob3JpZ2luUGF0aCkpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKICAgICAKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHBhdGggZm9yIHRoaXMgZGF0YWJhc2Ug
eWV0CkBAIC0yMjQsNyArMjE3LDcgQEAgU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhG
b3JEYXRhYgogICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwogCiAgICAgaWYgKHJl
c3VsdCA9PSBTUUxSZXN1bHRSb3cpCi0gICAgICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOworICAgICAgcmV0
dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgob3JpZ2lu
UGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOwogICAgIGlmICghY3JlYXRlSWZOb3RF
eGlzdHMpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgCkBAIC0yNDEsMjIgKzIz
NCw4IEBAIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogICAgIHJlc3VsdCA9IHNlcXVlbmNlU3RhdGVtZW50LnN0ZXAoKTsK
IAotICAgIC8vIFRoaXMgaGFzIGEgcmFuZ2Ugb2YgMl42MyBhbmQgc3RhcnRzIGF0IDAgZm9yIGV2
ZXJ5IHRpbWUgYSB1c2VyIHJlc2V0cyBTYWZhcmkgLQotICAgIC8vIEkgY2FuJ3QgaW1hZ2luZSBp
dCdkIG92ZXIgb3ZlcmZsb3cKLSAgICBpbnQ2NF90IHNlcSA9IDA7Ci0gICAgaWYgKHJlc3VsdCA9
PSBTUUxSZXN1bHRSb3cpIHsKLSAgICAgICAgc2VxID0gc2VxdWVuY2VTdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50NjQoMCk7Ci0gICAgfSBlbHNlIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHNlcXVlbmNlU3RhdGVtZW50LmZpbmFsaXplKCk7
Ci0KLSAgICBTdHJpbmcgZmlsZW5hbWU7Ci0gICAgZG8gewotICAgICAgICArK3NlcTsKLSAgICAg
ICAgZmlsZW5hbWUgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQob3JpZ2luUGF0aCwgU3RyaW5n
Ojpmb3JtYXQoIiUwMTZsbHguZGIiLCBzZXEpKTsKLSAgICB9IHdoaWxlIChmaWxlRXhpc3RzKGZp
bGVuYW1lKSk7Ci0KLSAgICBpZiAoIWFkZERhdGFiYXNlKG9yaWdpbiwgbmFtZSwgU3RyaW5nOjpm
b3JtYXQoIiUwMTZsbHguZGIiLCBzZXEpKSkKKyAgICBTdHJpbmcgZmlsZU5hbWUgPSBTUUxpdGVG
aWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNlKG9yaWdpblBhdGgsIG9yaWdpbi0+
ZGF0YWJhc2VJZGVudGlmaWVyKCksIG5hbWUsICZtX2RhdGFiYXNlKTsKKyAgICBpZiAoIWFkZERh
dGFiYXNlKG9yaWdpbiwgbmFtZSwgZmlsZU5hbWUpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CiAKICAgICAvLyBJZiB0aGlzIG9yaWdpbidzIHF1b3RhIGlzIGJlaW5nIHRyYWNrZWQgKG9wZW4g
aGFuZGxlIHRvIGEgZGF0YWJhc2UgaW4gdGhpcyBvcmlnaW4pLCBhZGQgdGhpcyBuZXcgZGF0YWJh
c2UKQEAgLTI2NCwxMCArMjQzLDEwIEBAIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRo
Rm9yRGF0YWIKICAgICB7CiAgICAgICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IGxvY2tl
cihvcmlnaW5RdW90YU1hbmFnZXIoKSk7CiAgICAgICAgIGlmIChvcmlnaW5RdW90YU1hbmFnZXIo
KS50cmFja3NPcmlnaW4ob3JpZ2luKSkKLSAgICAgICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigp
LmFkZERhdGFiYXNlKG9yaWdpbiwgbmFtZSwgZmlsZW5hbWUpOworICAgICAgICAgICAgb3JpZ2lu
UXVvdGFNYW5hZ2VyKCkuYWRkRGF0YWJhc2Uob3JpZ2luLCBuYW1lLCBmaWxlTmFtZSk7CiAgICAg
fQogICAgIAotICAgIHJldHVybiBmaWxlbmFtZTsKKyAgICByZXR1cm4gZmlsZU5hbWU7CiB9CiAK
IHZvaWQgRGF0YWJhc2VUcmFja2VyOjpwb3B1bGF0ZU9yaWdpbnMoKQpAQCAtNDIzLDggKzQwMiw3
IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnVzYWcKICAgICBpZiAocGF0
aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKLSAgICBsb25nIGxvbmcg
c2l6ZTsKLSAgICByZXR1cm4gZ2V0RmlsZVNpemUocGF0aCwgc2l6ZSkgPyBzaXplIDogMDsKKyAg
ICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShwYXRoKTsKIH0K
IAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZSogZGF0YWJh
c2UpCkBAIC02NjUsNyArNjQzLDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdp
bihTZWN1cgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZGVsZXRlRW1wdHlEaXJlY3Rv
cnkob3JpZ2luUGF0aChvcmlnaW4pKTsKKyAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0
eURhdGFiYXNlRGlyZWN0b3J5KG9yaWdpblBhdGgob3JpZ2luKSk7CiAKICAgICBSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IG9yaWdpblBvc3NpYmx5TGFzdFJlZmVyZW5jZSA9IG9yaWdpbjsKICAgICB7
CkBAIC02NzksOCArNjU3LDggQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbihT
ZWN1cgogICAgICAgICBpZiAobV9xdW90YU1hcC0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBp
ZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgICAgICAgICBtX2RhdGFiYXNlLmNsb3Nl
KCk7Ci0gICAgICAgICAgICBkZWxldGVGaWxlKHRyYWNrZXJEYXRhYmFzZVBhdGgoKSk7Ci0gICAg
ICAgICAgICBkZWxldGVFbXB0eURpcmVjdG9yeShtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CisJ
ICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZSh0cmFja2VyRGF0YWJhc2VQ
YXRoKCkpOworCSAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0
b3J5KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzYz
LDcgKzc0MSw3IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZpbGUKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVsZXRlZERhdGFiYXNlcy5zaXplKCk7ICsraSkK
ICAgICAgICAgZGVsZXRlZERhdGFiYXNlc1tpXS0+bWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CiAK
LSAgICByZXR1cm4gZGVsZXRlRmlsZShmdWxsUGF0aCk7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVT
eXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShmdWxsUGF0aCk7CiB9CiAKIHZvaWQgRGF0YWJhc2VU
cmFja2VyOjpzZXRDbGllbnQoRGF0YWJhc2VUcmFja2VyQ2xpZW50KiBjbGllbnQpCkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAJKHJldmlzaW9uIDQ0MjAxKQorKysgV2Vi
Q29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsNyBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5jbHVkZSAiRmlsZVN5c3Rl
bS5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC04Miw4ICs4Miw4IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBPcmlnaW5Vc2FnZVJlY29y
ZDo6ZGkKICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gbV9kYXRhYmFzZU1hcC5nZXQoKmlV
bmtub3duKS5maWxlbmFtZTsKICAgICAgICAgQVNTRVJUKCFwYXRoLmlzRW1wdHkoKSk7CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgIGxvbmcgbG9uZyBzaXplOwotICAgICAgICBpZiAoZ2V0Rmls
ZVNpemUocGF0aCwgc2l6ZSkpCisgICAgICAgIGxvbmcgbG9uZyBzaXplID0gU1FMaXRlRmlsZVN5
c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShwYXRoKTsKKyAgICAgICAgaWYgKHNpemUgPiAwKQog
ICAgICAgICAgICAgbV9kYXRhYmFzZU1hcC5zZXQoKmlVbmtub3duLCBEYXRhYmFzZUVudHJ5KHBh
dGgsIHNpemUpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBXaGVuIHdlIGNhbid0
IGRldGVybWluZSB0aGUgZmlsZSBzaXplLCB3ZSdsbCBqdXN0IGhhdmUgdG8gYXNzdW1lIHRoZSBm
aWxlIGlzIG1pc3NpbmcvaW5hY2Nlc3NpYmxlLgo=
</data>
<flag name="review"
          id="15870"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31151</attachid>
            <date>2009-06-10 18:59:46 -0700</date>
            <delta_ts>2009-06-15 16:22:50 -0700</delta_ts>
            <desc>same patch (with all comments addressed)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>22052</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDU5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMDktMDYtMTAgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRzIGFuIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW4gdGhlIERCIGNsYXNzZXMgYW5kIHRo
ZSBmaWxlCisgICAgICAgIHN5c3RlbSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFkZCBvdXIgb3duIGxv
Z2ljIGZvciBzdG9yaW5nLCBvcGVuaW5nLAorICAgICAgICBkZWxldGluZywgZXRjLiBkYXRhYmFz
ZXMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2
MDU0CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6Om9wZW4pOgorICAgICAgICAq
IHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
UUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3Rv
cnlFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0
YWJhc2VGaWxlRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmRl
bGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmls
ZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZp
bGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9T
UUxpdGVGaWxlU3lzdGVtLmg6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OmRhdGFiYXNlU2l6ZSk6CisgICAgICAgICog
c3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjpEYXRhYmFzZVRyYWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFj
a2VyOjp0cmFja2VyRGF0YWJhc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6Om9yaWdpblBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpm
dWxsUGF0aEZvckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6
dXNhZ2VGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRl
bGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURh
dGFiYXNlRmlsZSk6CisgICAgICAgICogc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpPcmlnaW5Vc2FnZVJlY29yZDo6ZGlza1VzYWdlKToKKwogMjAwOS0w
Ni0xMCAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ0NTk3KQorKysgV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjAwMCw2ICsyMDAwLDggQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVBdXRob3Jp
emVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwIFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oIFwKKwlXZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRl
RmlsZVN5c3RlbS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3Bw
IFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDQ1OTcpCisrKyBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01OTEyLDYgKzU5MTIsMTQg
QEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXHNxbFxTUUxpdGVGaWxlU3lzdGVtLmNwcCINCisJCQkJCT4NCisJCQkJPC9G
aWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxzcWxcU1FM
aXRlRmlsZVN5c3RlbS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHNxbFxTUUxpdGVTdGF0ZW1lbnQuY3BwIg0KIAkJ
CQkJPg0KIAkJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0
YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFi
YXNlLmNwcAkocmV2aXNpb24gNDQ1OTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVE
YXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUg
IkRhdGFiYXNlQXV0aG9yaXplci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJT
UUxpdGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCiAKICNpbmNs
dWRlIDxzcWxpdGUzLmg+CkBAIC02MSw4ICs2Miw3IEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6Om9w
ZW4oY29uc3QgU3RyaW5nJiAKICAgICBjbG9zZSgpOwogICAgIAogICAgIC8vIFNRTGl0ZSBleHBl
Y3RzIGEgbnVsbCB0ZXJtaW5hdG9yIG9uIGl0cyBVVEYtMTYgc3RyaW5ncy4KLSAgICBTdHJpbmcg
cGF0aCA9IGZpbGVuYW1lOwotICAgIG1fbGFzdEVycm9yID0gc3FsaXRlM19vcGVuMTYocGF0aC5j
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAmbV9kYik7CisgICAgbV9sYXN0RXJyb3Ig
PSBTUUxpdGVGaWxlU3lzdGVtOjpvcGVuRGF0YWJhc2UoZmlsZW5hbWUsICZtX2RiKTsKICAgICBp
ZiAobV9sYXN0RXJyb3IgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIExPR19FUlJPUigiU1FMaXRl
IGRhdGFiYXNlIGZhaWxlZCB0byBsb2FkIGZyb20gJXNcbkNhdXNlIC0gJXMiLCBmaWxlbmFtZS5h
c2NpaSgpLmRhdGEoKSwKICAgICAgICAgICAgIHNxbGl0ZTNfZXJybXNnKG1fZGIpKTsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTM0IEBACisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQ0KKyAqIG1ldDoNCisgKg0KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUN
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyDQorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KKyAqIGRpc3RyaWJ1dGlvbi4NCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzDQor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20NCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUw0KKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UDQor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SDQorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQNCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwNCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UDQorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZDQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICovDQorDQorI2luY2x1ZGUg
ImNvbmZpZy5oIg0KKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiDQorDQorI2luY2x1ZGUg
IkZpbGVTeXN0ZW0uaCINCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCINCisjaW5jbHVkZSAi
U1FMaXRlU3RhdGVtZW50LmgiDQorI2luY2x1ZGUgPHNxbGl0ZTMuaD4NCisNCisjaWYgUExBVEZP
Uk0oV0lOKQ0KKyNkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJ1xcJw0KKyNlbHNlDQorI2RlZmluZSBQ
QVRIX1NFUEFSQVRPUiAnLycNCisjZW5kaWYNCisNCituYW1lc3BhY2UgV2ViQ29yZSB7DQorDQor
U1FMaXRlRmlsZVN5c3RlbTo6U1FMaXRlRmlsZVN5c3RlbSgpDQorew0KK30NCisNCit2b2lkIFNR
TGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKCkNCit7DQorfQ0KKw0KK2ludCBTUUxp
dGVGaWxlU3lzdGVtOjpvcGVuRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgc3FsaXRl
MyoqIGRhdGFiYXNlKQ0KK3sNCisgICAgLy8gU1FMaXRlIGV4cGVjdHMgYSBudWxsIHRlcm1pbmF0
b3Igb24gaXRzIFVURi0xNiBzdHJpbmdzLg0KKyAgICBTdHJpbmcgcGF0aCA9IGZpbGVOYW1lOw0K
KyAgICByZXR1cm4gc3FsaXRlM19vcGVuMTYocGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpLCBkYXRhYmFzZSk7DQorfQ0KKw0KK1N0cmluZyBTUUxpdGVGaWxlU3lzdGVtOjpnZXRG
aWxlTmFtZUZvck5ld0RhdGFiYXNlKGNvbnN0IFN0cmluZyYgZGJEaXIsIGNvbnN0IFN0cmluZyYg
ZGJOYW1lLA0KKwkJCQkJCSAgIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgU1FMaXRl
RGF0YWJhc2UqIGRiKQ0KK3sNCisgICAgLy8gdHJ5IHRvIGdldCB0aGUgbmV4dCBzZXF1ZW5jZSBu
dW1iZXIgZnJvbSB0aGUgZ2l2ZW4gZGF0YWJhc2UNCisgICAgLy8gaWYgd2UgY2FuJ3QgZ2V0IGEg
bnVtYmVyLCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nDQorICAgIFNRTGl0ZVN0YXRlbWVudCBzZXF1
ZW5jZVN0YXRlbWVudCgqZGIsICJTRUxFQ1Qgc2VxIEZST00gc3FsaXRlX3NlcXVlbmNlIFdIRVJF
IG5hbWU9J0RhdGFiYXNlcyc7Iik7DQorICAgIGlmIChzZXF1ZW5jZVN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMUmVzdWx0T2spDQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7DQorICAgIGludCBy
ZXN1bHQgPSBzZXF1ZW5jZVN0YXRlbWVudC5zdGVwKCk7DQorICAgIGludDY0X3Qgc2VxID0gMDsN
CisgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpIHsNCisgICAgICAgIHNlcSA9IHNlcXVl
bmNlU3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOw0KKyAgICB9IGVsc2UgaWYgKHJlc3VsdCAh
PSBTUUxSZXN1bHREb25lKQ0KKyAgICAgICAgcmV0dXJuIFN0cmluZygpOw0KKyAgICBzZXF1ZW5j
ZVN0YXRlbWVudC5maW5hbGl6ZSgpOw0KKw0KKyAgICAvLyBpbmNyZW1lbnQgdGhlIG51bWJlciB1
bnRpbCB3ZSBjYW4gdXNlIGl0IHRvIGZvcm0gYSBmaWxlIG5hbWUgdGhhdCBkb2Vzbid0IGV4aXN0
DQorICAgIFN0cmluZyBmaWxlTmFtZTsNCisgICAgZG8gew0KKyAgICAgICAgKytzZXE7DQorICAg
ICAgICBmaWxlTmFtZSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChkYkRpciwgU3RyaW5nOjpm
b3JtYXQoIiUwMTZsbHguZGIiLCBzZXEpKTsNCisgICAgfSB3aGlsZSAoZmlsZUV4aXN0cyhmaWxl
TmFtZSkpOw0KKw0KKyAgICByZXR1cm4gZmlsZU5hbWU7DQorfQ0KKw0KK1N0cmluZyBTUUxpdGVG
aWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkNCit7DQorICAgIHJldHVybiBwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQocGF0aCwgZmlsZU5hbWUpOw0KK30NCisNCitib29sIFNRTGl0ZUZpbGVTeXN0
ZW06OmVuc3VyZURhdGFiYXNlRGlyZWN0b3J5RXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkNCit7
DQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAg
cmV0dXJuIG1ha2VBbGxEaXJlY3RvcmllcyhwYXRoKTsNCit9DQorDQorYm9vbCBTUUxpdGVGaWxl
U3lzdGVtOjplbnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwg
Ym9vbCBjaGVja1BhdGhPbmx5KQ0KK3sNCisgICAgaWYgKGZpbGVOYW1lLmlzRW1wdHkoKSkNCisg
ICAgICAgIHJldHVybiBmYWxzZTsNCisNCisgICAgaWYgKGNoZWNrUGF0aE9ubHkpIHsNCisgICAg
ICAgIFN0cmluZyBkaXIgPSBmaWxlTmFtZTsNCisgICAgICAgIGludCBsYXN0SW5kZXhPZkJhY2tT
bGFzaCA9IGRpci5yZXZlcnNlRmluZChQQVRIX1NFUEFSQVRPUik7DQorICAgICAgICBpZiAobGFz
dEluZGV4T2ZCYWNrU2xhc2ggPiAwKSB7DQorICAgICAgICAgICAgZGlyLnRydW5jYXRlKGxhc3RJ
bmRleE9mQmFja1NsYXNoKTsNCisgICAgICAgICAgICByZXR1cm4gZW5zdXJlRGF0YWJhc2VEaXJl
Y3RvcnlFeGlzdHMoZGlyKTsNCisgICAgICAgIH0NCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAg
ICB9DQorDQorICAgIHJldHVybiBmaWxlRXhpc3RzKGZpbGVOYW1lKTsNCit9DQorDQorYm9vbCBT
UUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgcGF0aCkNCit7DQorICAgIHJldHVybiBkZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsNCit9
DQorDQorYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3Ry
aW5nJiBmaWxlTmFtZSkNCit7DQorICAgIHJldHVybiBkZWxldGVGaWxlKGZpbGVOYW1lKTsNCit9
DQorDQorbG9uZyBsb25nIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUoY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSkNCit7ICAgICAgICANCisgICAgbG9uZyBsb25nIHNpemU7DQor
ICAgIHJldHVybiBnZXRGaWxlU2l6ZShmaWxlTmFtZSwgc2l6ZSkgPyBzaXplIDogMDsNCit9DQor
DQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQ0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZUZpbGVTeXN0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVGaWxlU3lzdGVtLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVGaWxlU3lzdGVtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM1IEBACisvKg0KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQ0KKyAqIG1ldDoNCisgKg0KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0DQorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLg0KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUNCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyDQorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0K
KyAqIGRpc3RyaWJ1dGlvbi4NCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUw0KKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UDQorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SDQorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQNCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwNCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZDQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuDQorICovDQorDQorI2lmbmRlZiBTUUxpdGVGaWxlU3lzdGVtX2gNCisjZGVmaW5lIFNR
TGl0ZUZpbGVTeXN0ZW1faA0KKw0KKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIg0KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nLmg+DQorI2luY2x1ZGUgPHdpbmRvd3MuaD4NCisNCitzdHJ1Y3Qg
c3FsaXRlMzsNCisNCituYW1lc3BhY2UgV2ViQ29yZSB7DQorDQorY2xhc3MgU1FMaXRlRGF0YWJh
c2U7DQorDQorLyoNCisgKiBBIGNsYXNzIHRoYXQgYWJzdHJhY3RzIHRoZSBmaWxlIHN5c3RlbSBy
ZWxhdGVkIG9wZXJhdGlvbnMgcmVxdWlyZWQNCisgKiBieSB0aGUgV2ViS2l0IGRhdGFiYXNlIGNv
ZGUuDQorICovDQorY2xhc3MgU1FMaXRlRmlsZVN5c3RlbSB7DQorcHVibGljOg0KKyAgICAvKg0K
KyAgICAgKiBSZWdpc3RlcnMgYSB1c2VyLWRlZmluZWQgU1FMaXRlIFZGUy4NCisgICAgICovDQor
ICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyU1FMaXRlVkZTKCk7DQorDQorICAgIC8qDQorICAgICAq
IE9wZW5zIGEgZGF0YWJhc2UgZmlsZS4NCisgICAgICoNCisgICAgICogZmlsZU5hbWUgLSBUaGUg
bmFtZSBvZiB0aGUgZGF0YWJhc2UgZmlsZS4NCisgICAgICogZGF0YWJhc2UgLSBUaGUgU1FMaXRl
IHN0cnVjdHVyZSB0aGF0IHJlcHJlc2VudHMgdGhlIGRhdGFiYXNlIHN0b3JlZA0KKyAgICAgKiAg
ICAgICAgICAgIGluIHRoZSBnaXZlbiBmaWxlLg0KKyAgICAgKi8NCisgICAgc3RhdGljIGludCBv
cGVuRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgc3FsaXRlMyoqIGRhdGFiYXNlKTsN
CisNCisgICAgLyoNCisgICAgICogUmV0dXJucyB0aGUgZmlsZSBuYW1lIGZvciBhIGRhdGFiYXNl
Lg0KKyAgICAgKg0KKyAgICAgKiBkYkRpciAtIFRoZSBkaXJlY3Rvcnkgd2hlcmUgYWxsIGRhdGFi
YXNlcyBhcmUgc3RvcmVkLg0KKyAgICAgKiBkYk5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZGF0YWJh
c2UuDQorICAgICAqIG9yaWdpbklkZW50aWZpZXIgLSBUaGUgb3JpZ2luIHRoYXQgd2FudHMgdG8g
dXNlIHRoaXMgZGF0YWJhc2UuDQorICAgICAqIGRiIC0gQSBkYXRhYmFzZSB3aXRoIGEgbnVtYmVy
IGdlbmVyYXRvciB1c2VkIHRvIGNyZWF0ZSB1bmlxdWUgZmlsZSBuYW1lcy4NCisgICAgICovDQor
ICAgIHN0YXRpYyBTdHJpbmcgZ2V0RmlsZU5hbWVGb3JOZXdEYXRhYmFzZShjb25zdCBTdHJpbmcm
IGRiRGlyLCBjb25zdCBTdHJpbmcmIGRiTmFtZSwNCisJCQkJCSAgICBjb25zdCBTdHJpbmcmIG9y
aWdpbklkZW50aWZpZXIsIFNRTGl0ZURhdGFiYXNlKiBkYik7DQorDQorICAgIC8qDQorICAgICAq
IENyZWF0ZXMgYW4gYWJzb2x1dGUgZmlsZSBwYXRoIGdpdmVuIGEgZGlyZWN0b3J5IGFuZCBhIGZp
bGUgbmFtZS4NCisgICAgICoNCisgICAgICogcGF0aCAtIFRoZSBkaXJlY3RvcnkuDQorICAgICAq
IGZpbGVOYW1lIC0gVGhlIGZpbGUgbmFtZS4NCisgICAgICovDQorICAgIHN0YXRpYyBTdHJpbmcg
YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0
cmluZyYgZmlsZU5hbWUpOw0KKw0KKyAgICAvKg0KKyAgICAgKiBNYWtlcyBzdXJlIHRoZSBnaXZl
biBkaXJlY3RvcnkgZXhpc3RzLCBieSBjcmVhdGluZyBhbGwgbWlzc2luZyBkaXJlY3Rvcmllcw0K
KyAgICAgKiBvbiB0aGUgZ2l2ZW4gcGF0aC4NCisgICAgICoNCisgICAgICogcGF0aCAtIFRoZSBk
aXJlY3RvcnkuDQorICAgICAqLw0KKyAgICBzdGF0aWMgYm9vbCBlbnN1cmVEYXRhYmFzZURpcmVj
dG9yeUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpOw0KKw0KKyAgICAvKg0KKyAgICAgKiBJZiAn
Y2hlY2tQYXRoT25seScgaXMgZmFsc2UsIHRoZW4gdGhpcyBtZXRob2Qgb25seSBjaGVja3MgaWYg
dGhlIGdpdmVuIGZpbGUgZXhpc3RzLg0KKyAgICAgKiBJZiAnY2hlY2tQYXRoT25seScgaXMgdHJ1
ZSwgdGhlbiB0aGlzIG1ldGhvZCBtYWtlcyBzdXJlIGFsbCBkaXJlY3RvcmllcyBvbiB0aGUNCisg
ICAgICogZ2l2ZW4gcGF0aCBleGlzdCBieSBjcmVhdGluZyB0aGUgbWlzc2luZyBvbmVzLCBhbmQg
ZG9lcyBub3QgY2hlY2sgaWYgdGhlIGZpbGUNCisgICAgICogaXRzZWxmIGV4aXN0cy4NCisgICAg
ICoNCisgICAgICogU29tZXRpbWVzIHdlIGV4cGVjdCBhIERCIGZpbGUgdG8gZXhpc3Q7IG90aGVy
IHRpbWVzLCB3ZSdyZSBPSyB3aXRoIGNyZWF0aW5nIGEgbmV3DQorICAgICAqIERCIGZpbGUsIGJ1
dCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggd2Ugd2Fu
dCB0byBwdXQgdGhlDQorICAgICAqIG5ldyBEQiBmaWxlIGV4aXN0cy4gVGhpcyBtZXRob2QgY292
ZXJzIGJvdGggY2FzZXMuDQorICAgICAqDQorICAgICAqIGZpbGVOYW1lIC0gVGhlIGZpbGUgbmFt
ZS4NCisgICAgICogY2hlY2tQYXRoT25seSAtIElmIHRydWUsIHdlIG9ubHkgbWFrZSBzdXJlIHRo
YXQgdGhlIGdpdmVuIGRpcmVjdG9yeSBleGlzdHMuDQorICAgICAqICAgICAgICAgICAgICAgICBJ
ZiBmYWxzZSwgd2Ugb25seSBjaGVjayBpZiB0aGUgZmlsZSBleGlzdHMuDQorICAgICAqLw0KKyAg
ICBzdGF0aWMgYm9vbCBlbnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSwgYm9vbCBjaGVja1BhdGhPbmx5KTsNCisNCisgICAgLyoNCisgICAgICogRGVsZXRlcyBh
biBlbXB0eSBkYXRhYmFzZSBkaXJlY3RvcnkuDQorICAgICAqDQorICAgICAqIHBhdGggLSBUaGUg
ZGlyZWN0b3J5Lg0KKyAgICAgKi8NCisgICAgc3RhdGljIGJvb2wgZGVsZXRlRW1wdHlEYXRhYmFz
ZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpOw0KKw0KKyAgICAvKg0KKyAgICAgKiBEZWxl
dGVzIGEgZGF0YWJhc2UgZmlsZS4NCisgICAgICoNCisgICAgICogZmlsZU5hbWUgLSBUaGUgZmls
ZSBuYW1lLg0KKyAgICAgKi8NCisgICAgc3RhdGljIGJvb2wgZGVsZXRlRGF0YWJhc2VGaWxlKGNv
bnN0IFN0cmluZyYgZmlsZU5hbWUpOw0KKw0KKyAgICAvKg0KKyAgICAgKiBSZXR1cm5zIHRoZSBz
aXplIG9mIHRoZSBkYXRhYmFzZSBmaWxlLg0KKyAgICAgKg0KKyAgICAgKiBmaWxlTmFtZSAtIFRo
ZSBmaWxlIG5hbWUuDQorICAgICAqLw0KKyAgICBzdGF0aWMgbG9uZyBsb25nIGdldERhdGFiYXNl
RmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7DQorDQorcHJpdmF0ZToNCisgICAgLy8g
ZG8gbm90IGluc3RhbnRpYXRlIHRoaXMgY2xhc3MNCisgICAgU1FMaXRlRmlsZVN5c3RlbSgpOw0K
K307IC8vIGNsYXNzIFNRTGl0ZUZpbGVTeXN0ZW0NCisNCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
DQorDQorI2VuZGlmDQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA0NDU5NykKKysr
IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDYgQEAKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgpAQCAtNDgsNiArNDcsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlICJPcmlnaW5RdW90YU1hbmFnZXIuaCIKICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5o
IgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1l
bnQuaCIKICNpbmNsdWRlICJTUUxSZXN1bHRTZXQuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgpAQCAtMzM4LDEwICszMzgsNyBAQCB2b2lkIERhdGFiYXNlOjpzdG9wKCkKIAogdW5zaWdu
ZWQgbG9uZyBsb25nIERhdGFiYXNlOjpkYXRhYmFzZVNpemUoKSBjb25zdAogewotICAgIGxvbmcg
bG9uZyBzaXplOwotICAgIGlmICghZ2V0RmlsZVNpemUobV9maWxlbmFtZSwgc2l6ZSkpCi0gICAg
ICAgIHNpemUgPSAwOwotICAgIHJldHVybiBzaXplOworICAgIHJldHVybiBTUUxpdGVGaWxlU3lz
dGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKG1fZmlsZW5hbWUpOwogfQogCiB1bnNpZ25lZCBsb25n
IGxvbmcgRGF0YWJhc2U6Om1heGltdW1TaXplKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZVRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZVRyYWNrZXIuY3BwCShyZXZpc2lvbiA0NDU5NykKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTIgQEAKICNpbmNs
dWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlckNsaWVudC5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKICNpbmNsdWRlICJPcmlnaW5RdW90YU1hbmFnZXIuaCIKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bkhhc2guaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiU1FMaXRl
U3RhdGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CkBAIC02OSw2ICs2OSw3IEBAIERhdGFiYXNlVHJhY2tlcjo6RGF0YWJh
c2VUcmFja2VyKCkKICAgICAsIG1fdGhyZWFkKGN1cnJlbnRUaHJlYWQoKSkKICNlbmRpZgogewor
ICBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpOwogfQogCiB2b2lkIERhdGFi
YXNlVHJhY2tlcjo6c2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkK
QEAgLTg3LDkgKzg4LDcgQEAgY29uc3QgU3RyaW5nJiBEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNl
RAogU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCgpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZCk7Ci0gICAgaWYgKG1fZGF0
YWJhc2VEaXJlY3RvcnlQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
ICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9kYXRhYmFzZURpcmVjdG9yeVBh
dGgsICJEYXRhYmFzZXMuZGIiKTsKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5k
RGF0YWJhc2VGaWxlTmFtZVRvUGF0aChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgIkRhdGFiYXNl
cy5kYiIpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZShi
b29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQpAQCAtMTAwLDEzICs5OSw5IEBAIHZvaWQgRGF0YWJh
c2VUcmFja2VyOjpvcGVuVHJhY2tlckRhdGFiYXMKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3Ry
aW5nIGRhdGFiYXNlUGF0aCA9IHRyYWNrZXJEYXRhYmFzZVBhdGgoKTsKLSAgICBpZiAoZGF0YWJh
c2VQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFjcmVhdGVJZkRv
ZXNOb3RFeGlzdCAmJiAhZmlsZUV4aXN0cyhkYXRhYmFzZVBhdGgpKQorICAgIGlmICghU1FMaXRl
RmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGRhdGFiYXNlUGF0aCwgY3JlYXRl
SWZEb2VzTm90RXhpc3QpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtlQWxsRGlyZWN0b3Jp
ZXMobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgpOwogICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKGRh
dGFiYXNlUGF0aCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdoYXQgZG8gZG8gaGVyZT8KICAgICAg
ICAgcmV0dXJuOwpAQCAtMTkwLDkgKzE4NSw3IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNF
bnRyeUZvckRhdGFiYXMKIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6Om9yaWdpblBhdGgoU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbikgY29uc3QKIHsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09
IG1fdGhyZWFkKTsKLSAgICBpZiAobV9kYXRhYmFzZURpcmVjdG9yeVBhdGguaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIo
KSk7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVU
b1BhdGgobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVy
KCkpOwogfQogCiBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlKFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZk5v
dEV4aXN0cykKQEAgLTIwNiw3ICsxOTksNyBAQCBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxs
UGF0aEZvckRhdGFiCiAgICAgU3RyaW5nIG9yaWdpblBhdGggPSB0aGlzLT5vcmlnaW5QYXRoKG9y
aWdpbik7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBwYXRoIGZvciB0aGlzIFNlY3VyaXR5
T3JpZ2luIGV4aXN0cwotICAgIGlmIChjcmVhdGVJZk5vdEV4aXN0cyAmJiAhbWFrZUFsbERpcmVj
dG9yaWVzKG9yaWdpblBhdGgpKQorICAgIGlmIChjcmVhdGVJZk5vdEV4aXN0cyAmJiAhU1FMaXRl
RmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMob3JpZ2luUGF0aCkpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHBh
dGggZm9yIHRoaXMgZGF0YWJhc2UgeWV0CkBAIC0yMjQsNyArMjE3LDcgQEAgU3RyaW5nIERhdGFi
YXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYgogICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQu
c3RlcCgpOwogCiAgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpCi0gICAgICAgIHJldHVy
biBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVt
blRleHQoMCkpOworICAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNl
RmlsZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOwog
ICAgIGlmICghY3JlYXRlSWZOb3RFeGlzdHMpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAg
ICAgICAgCkBAIC0yNDEsMjIgKzIzNCw4IEBAIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQ
YXRoRm9yRGF0YWIKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIHJlc3VsdCA9IHNlcXVl
bmNlU3RhdGVtZW50LnN0ZXAoKTsKIAotICAgIC8vIFRoaXMgaGFzIGEgcmFuZ2Ugb2YgMl42MyBh
bmQgc3RhcnRzIGF0IDAgZm9yIGV2ZXJ5IHRpbWUgYSB1c2VyIHJlc2V0cyBTYWZhcmkgLQotICAg
IC8vIEkgY2FuJ3QgaW1hZ2luZSBpdCdkIG92ZXIgb3ZlcmZsb3cKLSAgICBpbnQ2NF90IHNlcSA9
IDA7Ci0gICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpIHsKLSAgICAgICAgc2VxID0gc2Vx
dWVuY2VTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7Ci0gICAgfSBlbHNlIGlmIChyZXN1bHQg
IT0gU1FMUmVzdWx0RG9uZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHNlcXVlbmNl
U3RhdGVtZW50LmZpbmFsaXplKCk7Ci0KLSAgICBTdHJpbmcgZmlsZW5hbWU7Ci0gICAgZG8gewot
ICAgICAgICArK3NlcTsKLSAgICAgICAgZmlsZW5hbWUgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQob3JpZ2luUGF0aCwgU3RyaW5nOjpmb3JtYXQoIiUwMTZsbHguZGIiLCBzZXEpKTsKLSAgICB9
IHdoaWxlIChmaWxlRXhpc3RzKGZpbGVuYW1lKSk7Ci0KLSAgICBpZiAoIWFkZERhdGFiYXNlKG9y
aWdpbiwgbmFtZSwgU3RyaW5nOjpmb3JtYXQoIiUwMTZsbHguZGIiLCBzZXEpKSkKKyAgICBTdHJp
bmcgZmlsZU5hbWUgPSBTUUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNl
KG9yaWdpblBhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCksIG5hbWUsICZtX2RhdGFi
YXNlKTsKKyAgICBpZiAoIWFkZERhdGFiYXNlKG9yaWdpbiwgbmFtZSwgZmlsZU5hbWUpKQogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICAvLyBJZiB0aGlzIG9yaWdpbidzIHF1b3RhIGlz
IGJlaW5nIHRyYWNrZWQgKG9wZW4gaGFuZGxlIHRvIGEgZGF0YWJhc2UgaW4gdGhpcyBvcmlnaW4p
LCBhZGQgdGhpcyBuZXcgZGF0YWJhc2UKQEAgLTI2NCwxMCArMjQzLDEwIEBAIFN0cmluZyBEYXRh
YmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICB7CiAgICAgICAgIExvY2tlcjxPcmln
aW5RdW90YU1hbmFnZXI+IGxvY2tlcihvcmlnaW5RdW90YU1hbmFnZXIoKSk7CiAgICAgICAgIGlm
IChvcmlnaW5RdW90YU1hbmFnZXIoKS50cmFja3NPcmlnaW4ob3JpZ2luKSkKLSAgICAgICAgICAg
IG9yaWdpblF1b3RhTWFuYWdlcigpLmFkZERhdGFiYXNlKG9yaWdpbiwgbmFtZSwgZmlsZW5hbWUp
OworICAgICAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkuYWRkRGF0YWJhc2Uob3JpZ2luLCBu
YW1lLCBmaWxlTmFtZSk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBmaWxlbmFtZTsKKyAgICBy
ZXR1cm4gZmlsZU5hbWU7CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpwb3B1bGF0ZU9yaWdp
bnMoKQpAQCAtNDIzLDggKzQwMiw3IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNr
ZXI6OnVzYWcKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICAKLSAgICBsb25nIGxvbmcgc2l6ZTsKLSAgICByZXR1cm4gZ2V0RmlsZVNpemUocGF0aCwg
c2l6ZSkgPyBzaXplIDogMDsKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJh
c2VGaWxlU2l6ZShwYXRoKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRh
YmFzZShEYXRhYmFzZSogZGF0YWJhc2UpCkBAIC02NjUsNyArNjQzLDcgQEAgdm9pZCBEYXRhYmFz
ZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbihTZWN1cgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgZGVsZXRlRW1wdHlEaXJlY3Rvcnkob3JpZ2luUGF0aChvcmlnaW4pKTsKKyAgICBTUUxpdGVG
aWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KG9yaWdpblBhdGgob3JpZ2lu
KSk7CiAKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpblBvc3NpYmx5TGFzdFJlZmVy
ZW5jZSA9IG9yaWdpbjsKICAgICB7CkBAIC02NzksOCArNjU3LDggQEAgdm9pZCBEYXRhYmFzZVRy
YWNrZXI6OmRlbGV0ZU9yaWdpbihTZWN1cgogICAgICAgICBpZiAobV9xdW90YU1hcC0+aXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgICAg
ICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICBkZWxldGVGaWxlKHRyYWNrZXJE
YXRhYmFzZVBhdGgoKSk7Ci0gICAgICAgICAgICBkZWxldGVFbXB0eURpcmVjdG9yeShtX2RhdGFi
YXNlRGlyZWN0b3J5UGF0aCk7CisJICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNl
RmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOworCSAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxl
dGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoKTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtNzYzLDcgKzc0MSw3IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpk
ZWxldGVEYXRhYmFzZUZpbGUKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVsZXRlZERh
dGFiYXNlcy5zaXplKCk7ICsraSkKICAgICAgICAgZGVsZXRlZERhdGFiYXNlc1tpXS0+bWFya0Fz
RGVsZXRlZEFuZENsb3NlKCk7CiAKLSAgICByZXR1cm4gZGVsZXRlRmlsZShmdWxsUGF0aCk7Cisg
ICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShmdWxsUGF0aCk7
CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXRDbGllbnQoRGF0YWJhc2VUcmFja2VyQ2xp
ZW50KiBjbGllbnQpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAJKHJl
dmlzaW9uIDQ0NTk3KQorKysgV2ViQ29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQog
Ci0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04Miw4ICs4Miw4IEBAIHVuc2lnbmVkIGxvbmcg
bG9uZyBPcmlnaW5Vc2FnZVJlY29yZDo6ZGkKICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0g
bV9kYXRhYmFzZU1hcC5nZXQoKmlVbmtub3duKS5maWxlbmFtZTsKICAgICAgICAgQVNTRVJUKCFw
YXRoLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgIGxvbmcgbG9uZyBzaXpl
OwotICAgICAgICBpZiAoZ2V0RmlsZVNpemUocGF0aCwgc2l6ZSkpCisgICAgICAgIGxvbmcgbG9u
ZyBzaXplID0gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShwYXRoKTsKKyAg
ICAgICAgaWYgKHNpemUgPiAwKQogICAgICAgICAgICAgbV9kYXRhYmFzZU1hcC5zZXQoKmlVbmtu
b3duLCBEYXRhYmFzZUVudHJ5KHBhdGgsIHNpemUpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAvLyBXaGVuIHdlIGNhbid0IGRldGVybWluZSB0aGUgZmlsZSBzaXplLCB3ZSdsbCBqdXN0
IGhhdmUgdG8gYXNzdW1lIHRoZSBmaWxlIGlzIG1pc3NpbmcvaW5hY2Nlc3NpYmxlLgo=
</data>
<flag name="review"
          id="15878"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31317</attachid>
            <date>2009-06-15 16:22:50 -0700</date>
            <delta_ts>2009-06-15 20:08:04 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>22414</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDY5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMDktMDYtMTUgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRzIGFuIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW4gdGhlIERCIGNsYXNzZXMgYW5kIHRo
ZSBmaWxlCisgICAgICAgIHN5c3RlbSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFkZCBvdXIgb3duIGxv
Z2ljIGZvciBzdG9yaW5nLCBvcGVuaW5nLAorICAgICAgICBkZWxldGluZywgZXRjLiBkYXRhYmFz
ZXMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2
MDU0CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoK
KyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBwbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U6Om9wZW4pOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxl
U3lzdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FM
aXRlVkZTKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5l
d0RhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERh
dGFiYXNlRmlsZU5hbWVUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3Rl
bTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUpOgor
ICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmg6IEFkZGVkLgorICAgICAg
ICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OmRh
dGFiYXNlU2l6ZSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpEYXRhYmFzZVRyYWNrZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Om9yaWdpblBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dXNhZ2VGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZSk6CisgICAgICAgICogc3RvcmFnZS9P
cmlnaW5Vc2FnZVJlY29yZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5Vc2FnZVJlY29y
ZDo6ZGlza1VzYWdlKToKKwogMjAwOS0wNi0xNSAgS2V2aW4gTWNDdWxsb3VnaCAgPGttY2N1bGxv
dWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KSW5kZXg6
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQkocmV2aXNpb24gNDQ2OTYpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDAzLDYgKzIwMDMsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUF1dGhvcml6ZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURh
dGFiYXNlLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwIFwK
KwlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmggXAogCVdlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZVN0YXRlbWVudC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlv
bi5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUucHJvCShyZXZpc2lvbiA0NDY5NikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTEzMDYsNiArMTMwNiw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9TUUxJVEU9MSkgewogICAgIFNPVVJDRVMgKz0gXAogICAgICAgICBwbGF0Zm9ybS9zcWwvU1FM
aXRlQXV0aG9yaXplci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2Uu
Y3BwIFwKKyAgICAgICAgcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwIFwKICAgICAg
ICAgcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9z
cWwvU1FMaXRlVHJhbnNhY3Rpb24uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vc3FsL1NRTFZhbHVl
LmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9u
IDQ0Njk2KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNTkxMiw2ICs1OTEyLDE0IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJ
CQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxzcWxcU1FMaXRlRmlsZVN5
c3RlbS5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cc3FsXFNRTGl0ZUZpbGVTeXN0ZW0uaCINCisJCQkJCT4NCisJ
CQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxz
cWxcU1FMaXRlU3RhdGVtZW50LmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDQ0Njk2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKICNpbmNs
dWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUg
IlNRTGl0ZVN0YXRlbWVudC5oIgogCiAjaW5jbHVkZSA8c3FsaXRlMy5oPgpAQCAtNjAsOSArNjEs
NyBAQCBib29sIFNRTGl0ZURhdGFiYXNlOjpvcGVuKGNvbnN0IFN0cmluZyYgCiB7CiAgICAgY2xv
c2UoKTsKICAgICAKLSAgICAvLyBTUUxpdGUgZXhwZWN0cyBhIG51bGwgdGVybWluYXRvciBvbiBp
dHMgVVRGLTE2IHN0cmluZ3MuCi0gICAgU3RyaW5nIHBhdGggPSBmaWxlbmFtZTsKLSAgICBtX2xh
c3RFcnJvciA9IHNxbGl0ZTNfb3BlbjE2KHBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRp
b24oKSwgJm1fZGIpOworICAgIG1fbGFzdEVycm9yID0gU1FMaXRlRmlsZVN5c3RlbTo6b3BlbkRh
dGFiYXNlKGZpbGVuYW1lLCAmbV9kYik7CiAgICAgaWYgKG1fbGFzdEVycm9yICE9IFNRTElURV9P
SykgewogICAgICAgICBMT0dfRVJST1IoIlNRTGl0ZSBkYXRhYmFzZSBmYWlsZWQgdG8gbG9hZCBm
cm9tICVzXG5DYXVzZSAtICVzIiwgZmlsZW5hbWUuYXNjaWkoKS5kYXRhKCksCiAgICAgICAgICAg
ICBzcWxpdGUzX2Vycm1zZyhtX2RiKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVGaWxlU3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVGaWxlU3lzdGVtLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZUZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNCBAQAorLyoNCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisg
Kg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUNCisgKiBtZXQ6DQorICoNCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodA0KKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlDQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcg0KKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUNCisgKiBkaXN0cmlidXRpb24uDQorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0K
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMNCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVA0KKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUg0KKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUDQorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsDQorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLA0K
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQ0KKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLg0KKyAqLw0KKw0KKyNpbmNsdWRlICJjb25maWcuaCINCisjaW5jbHVkZSAiU1FM
aXRlRmlsZVN5c3RlbS5oIg0KKw0KKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiDQorI2luY2x1ZGUg
IlNRTGl0ZURhdGFiYXNlLmgiDQorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIg0KKyNpbmNs
dWRlIDxzcWxpdGUzLmg+DQorDQorI2lmIFBMQVRGT1JNKFdJTikNCisjZGVmaW5lIFBBVEhfU0VQ
QVJBVE9SICdcXCcNCisjZWxzZQ0KKyNkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJy8nDQorI2VuZGlm
DQorDQorbmFtZXNwYWNlIFdlYkNvcmUgew0KKw0KK1NRTGl0ZUZpbGVTeXN0ZW06OlNRTGl0ZUZp
bGVTeXN0ZW0oKQ0KK3sNCit9DQorDQordm9pZCBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNR
TGl0ZVZGUygpDQorew0KK30NCisNCitpbnQgU1FMaXRlRmlsZVN5c3RlbTo6b3BlbkRhdGFiYXNl
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIHNxbGl0ZTMqKiBkYXRhYmFzZSkNCit7DQorICAgIC8v
IFNRTGl0ZSBleHBlY3RzIGEgbnVsbCB0ZXJtaW5hdG9yIG9uIGl0cyBVVEYtMTYgc3RyaW5ncy4N
CisgICAgU3RyaW5nIHBhdGggPSBmaWxlTmFtZTsNCisgICAgcmV0dXJuIHNxbGl0ZTNfb3BlbjE2
KHBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgZGF0YWJhc2UpOw0KK30NCisN
CitTdHJpbmcgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RmlsZU5hbWVGb3JOZXdEYXRhYmFzZShjb25z
dCBTdHJpbmcmIGRiRGlyLCBjb25zdCBTdHJpbmcmIGRiTmFtZSwNCisJCQkJCQkgICBjb25zdCBT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIFNRTGl0ZURhdGFiYXNlKiBkYikNCit7DQorICAgIC8v
IHRyeSB0byBnZXQgdGhlIG5leHQgc2VxdWVuY2UgbnVtYmVyIGZyb20gdGhlIGdpdmVuIGRhdGFi
YXNlDQorICAgIC8vIGlmIHdlIGNhbid0IGdldCBhIG51bWJlciwgcmV0dXJuIGFuIGVtcHR5IHN0
cmluZw0KKyAgICBTUUxpdGVTdGF0ZW1lbnQgc2VxdWVuY2VTdGF0ZW1lbnQoKmRiLCAiU0VMRUNU
IHNlcSBGUk9NIHNxbGl0ZV9zZXF1ZW5jZSBXSEVSRSBuYW1lPSdEYXRhYmFzZXMnOyIpOw0KKyAg
ICBpZiAoc2VxdWVuY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQ0KKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOw0KKyAgICBpbnQgcmVzdWx0ID0gc2VxdWVuY2VTdGF0ZW1lbnQu
c3RlcCgpOw0KKyAgICBpbnQ2NF90IHNlcSA9IDA7DQorICAgIGlmIChyZXN1bHQgPT0gU1FMUmVz
dWx0Um93KSB7DQorICAgICAgICBzZXEgPSBzZXF1ZW5jZVN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2
NCgwKTsNCisgICAgfSBlbHNlIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkNCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsNCisgICAgc2VxdWVuY2VTdGF0ZW1lbnQuZmluYWxpemUoKTsNCisN
CisgICAgLy8gaW5jcmVtZW50IHRoZSBudW1iZXIgdW50aWwgd2UgY2FuIHVzZSBpdCB0byBmb3Jt
IGEgZmlsZSBuYW1lIHRoYXQgZG9lc24ndCBleGlzdA0KKyAgICBTdHJpbmcgZmlsZU5hbWU7DQor
ICAgIGRvIHsNCisgICAgICAgICsrc2VxOw0KKyAgICAgICAgZmlsZU5hbWUgPSBwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQoZGJEaXIsIFN0cmluZzo6Zm9ybWF0KCIlMDE2bGx4LmRiIiwgc2VxKSk7
DQorICAgIH0gd2hpbGUgKGZpbGVFeGlzdHMoZmlsZU5hbWUpKTsNCisNCisgICAgcmV0dXJuIGZp
bGVOYW1lOw0KK30NCisNCitTdHJpbmcgU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VG
aWxlTmFtZVRvUGF0aChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUp
DQorew0KKyAgICByZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGgsIGZpbGVOYW1l
KTsNCit9DQorDQorYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZURpcmVjdG9y
eUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpDQorew0KKyAgICBpZiAocGF0aC5pc0VtcHR5KCkp
DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIHJldHVybiBtYWtlQWxsRGlyZWN0b3JpZXMo
cGF0aCk7DQorfQ0KKw0KK2Jvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxl
RXhpc3RzKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGJvb2wgY2hlY2tQYXRoT25seSkNCit7DQor
ICAgIGlmIChmaWxlTmFtZS5pc0VtcHR5KCkpDQorICAgICAgICByZXR1cm4gZmFsc2U7DQorDQor
ICAgIGlmIChjaGVja1BhdGhPbmx5KSB7DQorICAgICAgICBTdHJpbmcgZGlyID0gZmlsZU5hbWU7
DQorICAgICAgICBpbnQgbGFzdEluZGV4T2ZCYWNrU2xhc2ggPSBkaXIucmV2ZXJzZUZpbmQoUEFU
SF9TRVBBUkFUT1IpOw0KKyAgICAgICAgaWYgKGxhc3RJbmRleE9mQmFja1NsYXNoID4gMCkgew0K
KyAgICAgICAgICAgIGRpci50cnVuY2F0ZShsYXN0SW5kZXhPZkJhY2tTbGFzaCk7DQorICAgICAg
ICAgICAgcmV0dXJuIGVuc3VyZURhdGFiYXNlRGlyZWN0b3J5RXhpc3RzKGRpcik7DQorICAgICAg
ICB9DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gZmlsZUV4
aXN0cyhmaWxlTmFtZSk7DQorfQ0KKw0KK2Jvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1w
dHlEYXRhYmFzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpDQorew0KKyAgICByZXR1cm4g
ZGVsZXRlRW1wdHlEaXJlY3RvcnkocGF0aCk7DQorfQ0KKw0KK2Jvb2wgU1FMaXRlRmlsZVN5c3Rl
bTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpDQorew0KKyAgICBy
ZXR1cm4gZGVsZXRlRmlsZShmaWxlTmFtZSk7DQorfQ0KKw0KK2xvbmcgbG9uZyBTUUxpdGVGaWxl
U3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpDQoreyAg
ICAgICAgDQorICAgIGxvbmcgbG9uZyBzaXplOw0KKyAgICByZXR1cm4gZ2V0RmlsZVNpemUoZmls
ZU5hbWUsIHNpemUpID8gc2l6ZSA6IDA7DQorfQ0KKw0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUN
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDExNSBAQAorLyoNCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUNCisgKiBtZXQ6DQorICoNCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
DQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcg0KKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCisgKiBkaXN0cmlidXRpb24uDQorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cw0K
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tDQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMNCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVA0K
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUg0KKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUDQorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsDQorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVA0KKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLA0KKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQ0KKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqLw0KKw0KKyNpZm5kZWYg
U1FMaXRlRmlsZVN5c3RlbV9oDQorI2RlZmluZSBTUUxpdGVGaWxlU3lzdGVtX2gNCisNCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCINCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPg0KKyNp
bmNsdWRlIDx3aW5kb3dzLmg+DQorDQorc3RydWN0IHNxbGl0ZTM7DQorDQorbmFtZXNwYWNlIFdl
YkNvcmUgew0KKw0KK2NsYXNzIFNRTGl0ZURhdGFiYXNlOw0KKw0KKy8vIEEgY2xhc3MgdGhhdCBh
YnN0cmFjdHMgdGhlIGZpbGUgc3lzdGVtIHJlbGF0ZWQgb3BlcmF0aW9ucyByZXF1aXJlZA0KKy8v
IGJ5IHRoZSBXZWJLaXQgZGF0YWJhc2UgY29kZS4NCitjbGFzcyBTUUxpdGVGaWxlU3lzdGVtIHsN
CitwdWJsaWM6DQorICAgIC8vIFJlZ2lzdGVycyBhIHVzZXItZGVmaW5lZCBTUUxpdGUgVkZTLg0K
KyAgICBzdGF0aWMgdm9pZCByZWdpc3RlclNRTGl0ZVZGUygpOw0KKw0KKyAgICAvLyBPcGVucyBh
IGRhdGFiYXNlIGZpbGUuDQorICAgIC8vDQorICAgIC8vIGZpbGVOYW1lIC0gVGhlIG5hbWUgb2Yg
dGhlIGRhdGFiYXNlIGZpbGUuDQorICAgIC8vIGRhdGFiYXNlIC0gVGhlIFNRTGl0ZSBzdHJ1Y3R1
cmUgdGhhdCByZXByZXNlbnRzIHRoZSBkYXRhYmFzZSBzdG9yZWQNCisgICAgLy8gICAgICAgICAg
ICBpbiB0aGUgZ2l2ZW4gZmlsZS4NCisgICAgc3RhdGljIGludCBvcGVuRGF0YWJhc2UoY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSwgc3FsaXRlMyoqIGRhdGFiYXNlKTsNCisNCisgICAgLy8gUmV0dXJu
cyB0aGUgZmlsZSBuYW1lIGZvciBhIGRhdGFiYXNlLg0KKyAgICAvLw0KKyAgICAvLyBkYkRpciAt
IFRoZSBkaXJlY3Rvcnkgd2hlcmUgYWxsIGRhdGFiYXNlcyBhcmUgc3RvcmVkLg0KKyAgICAvLyBk
Yk5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UuDQorICAgIC8vIG9yaWdpbklkZW50aWZp
ZXIgLSBUaGUgb3JpZ2luIHRoYXQgd2FudHMgdG8gdXNlIHRoaXMgZGF0YWJhc2UuDQorICAgIC8v
IGRiIC0gQSBkYXRhYmFzZSB3aXRoIGEgbnVtYmVyIGdlbmVyYXRvciB1c2VkIHRvIGNyZWF0ZSB1
bmlxdWUgZmlsZSBuYW1lcy4NCisgICAgc3RhdGljIFN0cmluZyBnZXRGaWxlTmFtZUZvck5ld0Rh
dGFiYXNlKGNvbnN0IFN0cmluZyYgZGJEaXIsIGNvbnN0IFN0cmluZyYgZGJOYW1lLA0KKwkJCQkJ
ICAgIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgU1FMaXRlRGF0YWJhc2UqIGRiKTsN
CisNCisgICAgLy8gQ3JlYXRlcyBhbiBhYnNvbHV0ZSBmaWxlIHBhdGggZ2l2ZW4gYSBkaXJlY3Rv
cnkgYW5kIGEgZmlsZSBuYW1lLg0KKyAgICAvLw0KKyAgICAvLyBwYXRoIC0gVGhlIGRpcmVjdG9y
eS4NCisgICAgLy8gZmlsZU5hbWUgLSBUaGUgZmlsZSBuYW1lLg0KKyAgICBzdGF0aWMgU3RyaW5n
IGFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBT
dHJpbmcmIGZpbGVOYW1lKTsNCisNCisgICAgLy8gTWFrZXMgc3VyZSB0aGUgZ2l2ZW4gZGlyZWN0
b3J5IGV4aXN0cywgYnkgY3JlYXRpbmcgYWxsIG1pc3NpbmcgZGlyZWN0b3JpZXMNCisgICAgLy8g
b24gdGhlIGdpdmVuIHBhdGguDQorICAgIC8vDQorICAgIC8vIHBhdGggLSBUaGUgZGlyZWN0b3J5
Lg0KKyAgICBzdGF0aWMgYm9vbCBlbnN1cmVEYXRhYmFzZURpcmVjdG9yeUV4aXN0cyhjb25zdCBT
dHJpbmcmIHBhdGgpOw0KKw0KKyAgICAvLyBJZiAnY2hlY2tQYXRoT25seScgaXMgZmFsc2UsIHRo
ZW4gdGhpcyBtZXRob2Qgb25seSBjaGVja3MgaWYgdGhlIGdpdmVuIGZpbGUgZXhpc3RzLg0KKyAg
ICAvLyBJZiAnY2hlY2tQYXRoT25seScgaXMgdHJ1ZSwgdGhlbiB0aGlzIG1ldGhvZCBtYWtlcyBz
dXJlIGFsbCBkaXJlY3RvcmllcyBvbiB0aGUNCisgICAgLy8gZ2l2ZW4gcGF0aCBleGlzdCBieSBj
cmVhdGluZyB0aGUgbWlzc2luZyBvbmVzLCBhbmQgZG9lcyBub3QgY2hlY2sgaWYgdGhlIGZpbGUN
CisgICAgLy8gaXRzZWxmIGV4aXN0cy4NCisgICAgLy8NCisgICAgLy8gU29tZXRpbWVzIHdlIGV4
cGVjdCBhIERCIGZpbGUgdG8gZXhpc3Q7IG90aGVyIHRpbWVzLCB3ZSdyZSBPSyB3aXRoIGNyZWF0
aW5nIGEgbmV3DQorICAgIC8vIERCIGZpbGUsIGJ1dCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0
IHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggd2Ugd2FudCB0byBwdXQgdGhlDQorICAgIC8vIG5ldyBE
QiBmaWxlIGV4aXN0cy4gVGhpcyBtZXRob2QgY292ZXJzIGJvdGggY2FzZXMuDQorICAgIC8vDQor
ICAgIC8vIGZpbGVOYW1lIC0gVGhlIGZpbGUgbmFtZS4NCisgICAgLy8gY2hlY2tQYXRoT25seSAt
IElmIHRydWUsIHdlIG9ubHkgbWFrZSBzdXJlIHRoYXQgdGhlIGdpdmVuIGRpcmVjdG9yeSBleGlz
dHMuDQorICAgIC8vICAgICAgICAgICAgICAgICBJZiBmYWxzZSwgd2Ugb25seSBjaGVjayBpZiB0
aGUgZmlsZSBleGlzdHMuDQorICAgIHN0YXRpYyBib29sIGVuc3VyZURhdGFiYXNlRmlsZUV4aXN0
cyhjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBib29sIGNoZWNrUGF0aE9ubHkpOw0KKw0KKyAgICAv
LyBEZWxldGVzIGFuIGVtcHR5IGRhdGFiYXNlIGRpcmVjdG9yeS4NCisgICAgLy8NCisgICAgLy8g
cGF0aCAtIFRoZSBkaXJlY3RvcnkuDQorICAgIHN0YXRpYyBib29sIGRlbGV0ZUVtcHR5RGF0YWJh
c2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKTsNCisNCisgICAgLy8gRGVsZXRlcyBhIGRh
dGFiYXNlIGZpbGUuDQorICAgIC8vDQorICAgIC8vIGZpbGVOYW1lIC0gVGhlIGZpbGUgbmFtZS4N
CisgICAgc3RhdGljIGJvb2wgZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpOw0KKw0KKyAgICAvLyBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBkYXRhYmFzZSBmaWxlLg0K
KyAgICAvLw0KKyAgICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuDQorICAgIHN0YXRpYyBs
b25nIGxvbmcgZ2V0RGF0YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsNCisN
Citwcml2YXRlOg0KKyAgICAvLyBkbyBub3QgaW5zdGFudGlhdGUgdGhpcyBjbGFzcw0KKyAgICBT
UUxpdGVGaWxlU3lzdGVtKCk7DQorfTsgLy8gY2xhc3MgU1FMaXRlRmlsZVN5c3RlbQ0KKw0KK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUNCisNCisjZW5kaWYNCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJ
KHJldmlzaW9uIDQ0Njk2KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1
ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCkBAIC00OCw2ICs0Nyw3IEBACiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIk9yaWdpblF1b3RhTWFuYWdlci5oIgogI2luY2x1
ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogI2lu
Y2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgIlNRTFJlc3VsdFNldC5oIgogI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC0zMzgsMTAgKzMzOCw3IEBAIHZvaWQgRGF0YWJh
c2U6OnN0b3AoKQogCiB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2U6OmRhdGFiYXNlU2l6ZSgp
IGNvbnN0CiB7Ci0gICAgbG9uZyBsb25nIHNpemU7Ci0gICAgaWYgKCFnZXRGaWxlU2l6ZShtX2Zp
bGVuYW1lLCBzaXplKSkKLSAgICAgICAgc2l6ZSA9IDA7Ci0gICAgcmV0dXJuIHNpemU7CisgICAg
cmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUobV9maWxlbmFtZSk7
CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZTo6bWF4aW11bVNpemUoKSBjb25zdApJ
bmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAJKHJldmlzaW9uIDQ0Njk2KQorKysg
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDEyICszNSwxMiBAQAogI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VU
cmFja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGaWxlU3lz
dGVtLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk9yaWdpblF1b3RhTWFuYWdl
ci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0u
aCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTY5LDYgKzY5LDcgQEAgRGF0
YWJhc2VUcmFja2VyOjpEYXRhYmFzZVRyYWNrZXIoKQogICAgICwgbV90aHJlYWQoY3VycmVudFRo
cmVhZCgpKQogI2VuZGlmCiB7CisgIFNRTGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRlVkZT
KCk7CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXREYXRhYmFzZURpcmVjdG9yeVBhdGgo
Y29uc3QgU3RyaW5nJiBwYXRoKQpAQCAtODcsOSArODgsNyBAQCBjb25zdCBTdHJpbmcmIERhdGFi
YXNlVHJhY2tlcjo6ZGF0YWJhc2VECiBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyRGF0
YWJhc2VQYXRoKCkgY29uc3QKIHsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhy
ZWFkKTsKLSAgICBpZiAobV9kYXRhYmFzZURpcmVjdG9yeVBhdGguaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCht
X2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgIkRhdGFiYXNlcy5kYiIpOworICAgIHJldHVybiBTUUxp
dGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKG1fZGF0YWJhc2VEaXJl
Y3RvcnlQYXRoLCAiRGF0YWJhc2VzLmRiIik7CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpv
cGVuVHJhY2tlckRhdGFiYXNlKGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3QpCkBAIC0xMDAsMTMg
Kzk5LDkgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhcwogICAgICAg
ICByZXR1cm47CiAKICAgICBTdHJpbmcgZGF0YWJhc2VQYXRoID0gdHJhY2tlckRhdGFiYXNlUGF0
aCgpOwotICAgIGlmIChkYXRhYmFzZVBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIWNyZWF0ZUlmRG9lc05vdEV4aXN0ICYmICFmaWxlRXhpc3RzKGRhdGFiYXNlUGF0
aCkpCisgICAgaWYgKCFTUUxpdGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMo
ZGF0YWJhc2VQYXRoLCBjcmVhdGVJZkRvZXNOb3RFeGlzdCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1ha2VBbGxEaXJlY3RvcmllcyhtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CiAgICAgaWYg
KCFtX2RhdGFiYXNlLm9wZW4oZGF0YWJhc2VQYXRoKSkgewogICAgICAgICAvLyBGSVhNRTogV2hh
dCBkbyBkbyBoZXJlPwogICAgICAgICByZXR1cm47CkBAIC0xOTAsOSArMTg1LDcgQEAgYm9vbCBE
YXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yRGF0YWJhcwogU3RyaW5nIERhdGFiYXNlVHJhY2tl
cjo6b3JpZ2luUGF0aChTZWN1cml0eU9yaWdpbiogb3JpZ2luKSBjb25zdAogewogICAgIEFTU0VS
VChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWQpOwotICAgIGlmIChtX2RhdGFiYXNlRGlyZWN0
b3J5UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4g
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBvcmlnaW4t
PmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBw
ZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgb3JpZ2lu
LT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiB9CiAKIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1
bGxQYXRoRm9yRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sIGNyZWF0ZUlmTm90RXhpc3RzKQpAQCAtMjA2LDcgKzE5OSw3IEBAIFN0cmluZyBE
YXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICBTdHJpbmcgb3JpZ2luUGF0aCA9
IHRoaXMtPm9yaWdpblBhdGgob3JpZ2luKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhlIHBh
dGggZm9yIHRoaXMgU2VjdXJpdHlPcmlnaW4gZXhpc3RzCi0gICAgaWYgKGNyZWF0ZUlmTm90RXhp
c3RzICYmICFtYWtlQWxsRGlyZWN0b3JpZXMob3JpZ2luUGF0aCkpCisgICAgaWYgKGNyZWF0ZUlm
Tm90RXhpc3RzICYmICFTUUxpdGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZURpcmVjdG9yeUV4
aXN0cyhvcmlnaW5QYXRoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIAogICAgIC8v
IFNlZSBpZiB3ZSBoYXZlIGEgcGF0aCBmb3IgdGhpcyBkYXRhYmFzZSB5ZXQKQEAgLTIyNCw3ICsy
MTcsNyBAQCBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiCiAgICAgaW50
IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CiAKICAgICBpZiAocmVzdWx0ID09IFNRTFJlc3Vs
dFJvdykKLSAgICAgICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChvcmlnaW5QYXRo
LCBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7CisgICAgICByZXR1cm4gU1FMaXRlRmlsZVN5
c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChvcmlnaW5QYXRoLCBzdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCgwKSk7CiAgICAgaWYgKCFjcmVhdGVJZk5vdEV4aXN0cykKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogICAgICAgICAKQEAgLTI0MSwyMiArMjM0LDggQEAgU3RyaW5nIERh
dGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYgogICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CiAgICAgcmVzdWx0ID0gc2VxdWVuY2VTdGF0ZW1lbnQuc3RlcCgpOwogCi0gICAgLy8gVGhpcyBo
YXMgYSByYW5nZSBvZiAyXjYzIGFuZCBzdGFydHMgYXQgMCBmb3IgZXZlcnkgdGltZSBhIHVzZXIg
cmVzZXRzIFNhZmFyaSAtCi0gICAgLy8gSSBjYW4ndCBpbWFnaW5lIGl0J2Qgb3ZlciBvdmVyZmxv
dwotICAgIGludDY0X3Qgc2VxID0gMDsKLSAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykg
ewotICAgICAgICBzZXEgPSBzZXF1ZW5jZVN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKLSAg
ICB9IGVsc2UgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKQotICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0gICAgc2VxdWVuY2VTdGF0ZW1lbnQuZmluYWxpemUoKTsKLQotICAgIFN0cmluZyBm
aWxlbmFtZTsKLSAgICBkbyB7Ci0gICAgICAgICsrc2VxOwotICAgICAgICBmaWxlbmFtZSA9IHBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChvcmlnaW5QYXRoLCBTdHJpbmc6OmZvcm1hdCgiJTAxNmxs
eC5kYiIsIHNlcSkpOwotICAgIH0gd2hpbGUgKGZpbGVFeGlzdHMoZmlsZW5hbWUpKTsKLQotICAg
IGlmICghYWRkRGF0YWJhc2Uob3JpZ2luLCBuYW1lLCBTdHJpbmc6OmZvcm1hdCgiJTAxNmxseC5k
YiIsIHNlcSkpKQorICAgIFN0cmluZyBmaWxlTmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmdldEZp
bGVOYW1lRm9yTmV3RGF0YWJhc2Uob3JpZ2luUGF0aCwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZp
ZXIoKSwgbmFtZSwgJm1fZGF0YWJhc2UpOworICAgIGlmICghYWRkRGF0YWJhc2Uob3JpZ2luLCBu
YW1lLCBmaWxlTmFtZSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIC8vIElmIHRo
aXMgb3JpZ2luJ3MgcXVvdGEgaXMgYmVpbmcgdHJhY2tlZCAob3BlbiBoYW5kbGUgdG8gYSBkYXRh
YmFzZSBpbiB0aGlzIG9yaWdpbiksIGFkZCB0aGlzIG5ldyBkYXRhYmFzZQpAQCAtMjY0LDEwICsy
NDMsMTAgQEAgU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYgogICAgIHsK
ICAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gbG9ja2VyKG9yaWdpblF1b3RhTWFu
YWdlcigpKTsKICAgICAgICAgaWYgKG9yaWdpblF1b3RhTWFuYWdlcigpLnRyYWNrc09yaWdpbihv
cmlnaW4pKQotICAgICAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkuYWRkRGF0YWJhc2Uob3Jp
Z2luLCBuYW1lLCBmaWxlbmFtZSk7CisgICAgICAgICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5h
ZGREYXRhYmFzZShvcmlnaW4sIG5hbWUsIGZpbGVOYW1lKTsKICAgICB9CiAgICAgCi0gICAgcmV0
dXJuIGZpbGVuYW1lOworICAgIHJldHVybiBmaWxlTmFtZTsKIH0KIAogdm9pZCBEYXRhYmFzZVRy
YWNrZXI6OnBvcHVsYXRlT3JpZ2lucygpCkBAIC00MjMsOCArNDAyLDcgQEAgdW5zaWduZWQgbG9u
ZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6dXNhZwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIHJldHVy
biBnZXRGaWxlU2l6ZShwYXRoLCBzaXplKSA/IHNpemUgOiAwOworICAgIHJldHVybiBTUUxpdGVG
aWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKHBhdGgpOwogfQogCiB2b2lkIERhdGFiYXNl
VHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSkKQEAgLTY2NSw3ICs2
NDMsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKFNlY3VyCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBkZWxldGVFbXB0eURpcmVjdG9yeShvcmlnaW5QYXRoKG9y
aWdpbikpOworICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3Rv
cnkob3JpZ2luUGF0aChvcmlnaW4pKTsKIAogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3Jp
Z2luUG9zc2libHlMYXN0UmVmZXJlbmNlID0gb3JpZ2luOwogICAgIHsKQEAgLTY3OSw4ICs2NTcs
OCBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKFNlY3VyCiAgICAgICAgIGlm
IChtX3F1b3RhTWFwLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGlmIChtX2RhdGFiYXNlLmlz
T3BlbigpKQogICAgICAgICAgICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgICAg
IGRlbGV0ZUZpbGUodHJhY2tlckRhdGFiYXNlUGF0aCgpKTsKLSAgICAgICAgICAgIGRlbGV0ZUVt
cHR5RGlyZWN0b3J5KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoKTsKKwkgICAgU1FMaXRlRmlsZVN5
c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHRyYWNrZXJEYXRhYmFzZVBhdGgoKSk7CisJICAgIFNR
TGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkobV9kYXRhYmFzZURp
cmVjdG9yeVBhdGgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC03NjMsNyArNzQxLDcgQEAgYm9v
bCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZQogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBkZWxldGVkRGF0YWJhc2VzLnNpemUoKTsgKytpKQogICAgICAgICBkZWxldGVk
RGF0YWJhc2VzW2ldLT5tYXJrQXNEZWxldGVkQW5kQ2xvc2UoKTsKIAotICAgIHJldHVybiBkZWxl
dGVGaWxlKGZ1bGxQYXRoKTsKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0
YWJhc2VGaWxlKGZ1bGxQYXRoKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldENsaWVu
dChEYXRhYmFzZVRyYWNrZXJDbGllbnQqIGNsaWVudCkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9P
cmlnaW5Vc2FnZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL09yaWdp
blVzYWdlUmVjb3JkLmNwcAkocmV2aXNpb24gNDQ2OTYpCisrKyBXZWJDb3JlL3N0b3JhZ2UvT3Jp
Z2luVXNhZ2VSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNp
ZiBFTkFCTEUoREFUQUJBU0UpCiAKLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAi
U1FMaXRlRmlsZVN5c3RlbS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTgyLDggKzgy
LDggQEAgdW5zaWduZWQgbG9uZyBsb25nIE9yaWdpblVzYWdlUmVjb3JkOjpkaQogICAgICAgICBj
b25zdCBTdHJpbmcmIHBhdGggPSBtX2RhdGFiYXNlTWFwLmdldCgqaVVua25vd24pLmZpbGVuYW1l
OwogICAgICAgICBBU1NFUlQoIXBhdGguaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgbG9uZyBsb25nIHNpemU7Ci0gICAgICAgIGlmIChnZXRGaWxlU2l6ZShwYXRoLCBzaXpl
KSkKKyAgICAgICAgbG9uZyBsb25nIHNpemUgPSBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFz
ZUZpbGVTaXplKHBhdGgpOworICAgICAgICBpZiAoc2l6ZSA+IDApCiAgICAgICAgICAgICBtX2Rh
dGFiYXNlTWFwLnNldCgqaVVua25vd24sIERhdGFiYXNlRW50cnkocGF0aCwgc2l6ZSkpOwogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIFdoZW4gd2UgY2FuJ3QgZGV0ZXJtaW5lIHRoZSBm
aWxlIHNpemUsIHdlJ2xsIGp1c3QgaGF2ZSB0byBhc3N1bWUgdGhlIGZpbGUgaXMgbWlzc2luZy9p
bmFjY2Vzc2libGUuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31328</attachid>
            <date>2009-06-15 20:08:04 -0700</date>
            <delta_ts>2009-06-26 11:44:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>22447</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDY5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMDktMDYtMTUgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRzIGFuIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW4gdGhlIERCIGNsYXNzZXMgYW5kIHRo
ZSBmaWxlCisgICAgICAgIHN5c3RlbSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFkZCBvdXIgb3duIGxv
Z2ljIGZvciBzdG9yaW5nLCBvcGVuaW5nLAorICAgICAgICBkZWxldGluZywgZXRjLiBkYXRhYmFz
ZXMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2
MDU0CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoK
KyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBwbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U6Om9wZW4pOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxl
U3lzdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FM
aXRlVkZTKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5l
d0RhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERh
dGFiYXNlRmlsZU5hbWVUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3Rl
bTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUpOgor
ICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmg6IEFkZGVkLgorICAgICAg
ICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OmRh
dGFiYXNlU2l6ZSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpEYXRhYmFzZVRyYWNrZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Om9yaWdpblBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dXNhZ2VGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZSk6CisgICAgICAgICogc3RvcmFnZS9P
cmlnaW5Vc2FnZVJlY29yZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5Vc2FnZVJlY29y
ZDo6ZGlza1VzYWdlKToKKwogMjAwOS0wNi0xNSAgS2V2aW4gTWNDdWxsb3VnaCAgPGttY2N1bGxv
dWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KSW5kZXg6
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQkocmV2aXNpb24gNDQ2OTYpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDAzLDYgKzIwMDMsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUF1dGhvcml6ZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURh
dGFiYXNlLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwIFwK
KwlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmggXAogCVdlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZVN0YXRlbWVudC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlv
bi5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUucHJvCShyZXZpc2lvbiA0NDY5NikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTEzMDYsNiArMTMwNiw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9TUUxJVEU9MSkgewogICAgIFNPVVJDRVMgKz0gXAogICAgICAgICBwbGF0Zm9ybS9zcWwvU1FM
aXRlQXV0aG9yaXplci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2Uu
Y3BwIFwKKyAgICAgICAgcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwIFwKICAgICAg
ICAgcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9z
cWwvU1FMaXRlVHJhbnNhY3Rpb24uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vc3FsL1NRTFZhbHVl
LmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9u
IDQ0Njk2KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNTkxMiw2ICs1OTEyLDE0IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJ
CQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxzcWxcU1FMaXRlRmlsZVN5
c3RlbS5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cc3FsXFNRTGl0ZUZpbGVTeXN0ZW0uaCINCisJCQkJCT4NCisJ
CQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxz
cWxcU1FMaXRlU3RhdGVtZW50LmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDQ0Njk2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKICNpbmNs
dWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUg
IlNRTGl0ZVN0YXRlbWVudC5oIgogCiAjaW5jbHVkZSA8c3FsaXRlMy5oPgpAQCAtNjAsOSArNjEs
NyBAQCBib29sIFNRTGl0ZURhdGFiYXNlOjpvcGVuKGNvbnN0IFN0cmluZyYgCiB7CiAgICAgY2xv
c2UoKTsKICAgICAKLSAgICAvLyBTUUxpdGUgZXhwZWN0cyBhIG51bGwgdGVybWluYXRvciBvbiBp
dHMgVVRGLTE2IHN0cmluZ3MuCi0gICAgU3RyaW5nIHBhdGggPSBmaWxlbmFtZTsKLSAgICBtX2xh
c3RFcnJvciA9IHNxbGl0ZTNfb3BlbjE2KHBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRp
b24oKSwgJm1fZGIpOworICAgIG1fbGFzdEVycm9yID0gU1FMaXRlRmlsZVN5c3RlbTo6b3BlbkRh
dGFiYXNlKGZpbGVuYW1lLCAmbV9kYik7CiAgICAgaWYgKG1fbGFzdEVycm9yICE9IFNRTElURV9P
SykgewogICAgICAgICBMT0dfRVJST1IoIlNRTGl0ZSBkYXRhYmFzZSBmYWlsZWQgdG8gbG9hZCBm
cm9tICVzXG5DYXVzZSAtICVzIiwgZmlsZW5hbWUuYXNjaWkoKS5kYXRhKCksCiAgICAgICAgICAg
ICBzcWxpdGUzX2Vycm1zZyhtX2RiKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVGaWxlU3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVGaWxlU3lzdGVtLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZUZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNCBAQAorLyoNCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisg
Kg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUNCisgKiBtZXQ6DQorICoNCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodA0KKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlDQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcg0KKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUNCisgKiBkaXN0cmlidXRpb24uDQorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0K
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMNCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVA0KKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUg0KKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUDQorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsDQorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLA0K
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQ0KKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLg0KKyAqLw0KKw0KKyNpbmNsdWRlICJjb25maWcuaCINCisjaW5jbHVkZSAiU1FM
aXRlRmlsZVN5c3RlbS5oIg0KKw0KKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiDQorI2luY2x1ZGUg
IlNRTGl0ZURhdGFiYXNlLmgiDQorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIg0KKyNpbmNs
dWRlIDxzcWxpdGUzLmg+DQorDQorI2lmIFBMQVRGT1JNKFdJTikNCisjZGVmaW5lIFBBVEhfU0VQ
QVJBVE9SICdcXCcNCisjZWxzZQ0KKyNkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJy8nDQorI2VuZGlm
DQorDQorbmFtZXNwYWNlIFdlYkNvcmUgew0KKw0KK1NRTGl0ZUZpbGVTeXN0ZW06OlNRTGl0ZUZp
bGVTeXN0ZW0oKQ0KK3sNCit9DQorDQordm9pZCBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNR
TGl0ZVZGUygpDQorew0KK30NCisNCitpbnQgU1FMaXRlRmlsZVN5c3RlbTo6b3BlbkRhdGFiYXNl
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIHNxbGl0ZTMqKiBkYXRhYmFzZSkNCit7DQorICAgIC8v
IFNRTGl0ZSBleHBlY3RzIGEgbnVsbCB0ZXJtaW5hdG9yIG9uIGl0cyBVVEYtMTYgc3RyaW5ncy4N
CisgICAgU3RyaW5nIHBhdGggPSBmaWxlTmFtZTsNCisgICAgcmV0dXJuIHNxbGl0ZTNfb3BlbjE2
KHBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgZGF0YWJhc2UpOw0KK30NCisN
CitTdHJpbmcgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RmlsZU5hbWVGb3JOZXdEYXRhYmFzZShjb25z
dCBTdHJpbmcmIGRiRGlyLCBjb25zdCBTdHJpbmcmIGRiTmFtZSwNCisJCQkJCQkgICBjb25zdCBT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIFNRTGl0ZURhdGFiYXNlKiBkYikNCit7DQorICAgIC8v
IHRyeSB0byBnZXQgdGhlIG5leHQgc2VxdWVuY2UgbnVtYmVyIGZyb20gdGhlIGdpdmVuIGRhdGFi
YXNlDQorICAgIC8vIGlmIHdlIGNhbid0IGdldCBhIG51bWJlciwgcmV0dXJuIGFuIGVtcHR5IHN0
cmluZw0KKyAgICBTUUxpdGVTdGF0ZW1lbnQgc2VxdWVuY2VTdGF0ZW1lbnQoKmRiLCAiU0VMRUNU
IHNlcSBGUk9NIHNxbGl0ZV9zZXF1ZW5jZSBXSEVSRSBuYW1lPSdEYXRhYmFzZXMnOyIpOw0KKyAg
ICBpZiAoc2VxdWVuY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQ0KKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOw0KKyAgICBpbnQgcmVzdWx0ID0gc2VxdWVuY2VTdGF0ZW1lbnQu
c3RlcCgpOw0KKyAgICBpbnQ2NF90IHNlcSA9IDA7DQorICAgIGlmIChyZXN1bHQgPT0gU1FMUmVz
dWx0Um93KQ0KKyAgICAgICAgc2VxID0gc2VxdWVuY2VTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQo
MCk7DQorICAgIGVsc2UgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKQ0KKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOw0KKyAgICBzZXF1ZW5jZVN0YXRlbWVudC5maW5hbGl6ZSgpOw0KKw0KKyAg
ICAvLyBpbmNyZW1lbnQgdGhlIG51bWJlciB1bnRpbCB3ZSBjYW4gdXNlIGl0IHRvIGZvcm0gYSBm
aWxlIG5hbWUgdGhhdCBkb2Vzbid0IGV4aXN0DQorICAgIFN0cmluZyBmaWxlTmFtZTsNCisgICAg
ZG8gew0KKyAgICAgICAgKytzZXE7DQorICAgICAgICBmaWxlTmFtZSA9IHBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChkYkRpciwgU3RyaW5nOjpmb3JtYXQoIiUwMTZsbHguZGIiLCBzZXEpKTsNCisg
ICAgfSB3aGlsZSAoZmlsZUV4aXN0cyhmaWxlTmFtZSkpOw0KKw0KKyAgICByZXR1cm4gZmlsZU5h
bWU7DQorfQ0KKw0KK1N0cmluZyBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVO
YW1lVG9QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkNCit7
DQorICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGF0aCwgZmlsZU5hbWUpOw0K
K30NCisNCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRGlyZWN0b3J5RXhp
c3RzKGNvbnN0IFN0cmluZyYgcGF0aCkNCit7DQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkNCisg
ICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgcmV0dXJuIG1ha2VBbGxEaXJlY3RvcmllcyhwYXRo
KTsNCit9DQorDQorYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZUZpbGVFeGlz
dHMoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgYm9vbCBjaGVja1BhdGhPbmx5KQ0KK3sNCisgICAg
aWYgKGZpbGVOYW1lLmlzRW1wdHkoKSkNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisNCisgICAg
aWYgKGNoZWNrUGF0aE9ubHkpIHsNCisgICAgICAgIFN0cmluZyBkaXIgPSBmaWxlTmFtZTsNCisg
ICAgICAgIGludCBsYXN0SW5kZXhPZkJhY2tTbGFzaCA9IGRpci5yZXZlcnNlRmluZChQQVRIX1NF
UEFSQVRPUik7DQorICAgICAgICBpZiAobGFzdEluZGV4T2ZCYWNrU2xhc2ggPiAwKSB7DQorICAg
ICAgICAgICAgZGlyLnRydW5jYXRlKGxhc3RJbmRleE9mQmFja1NsYXNoKTsNCisgICAgICAgICAg
ICByZXR1cm4gZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMoZGlyKTsNCisgICAgICAgIH0N
CisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorDQorICAgIHJldHVybiBmaWxlRXhpc3Rz
KGZpbGVOYW1lKTsNCit9DQorDQorYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURh
dGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkNCit7DQorICAgIHJldHVybiBkZWxl
dGVFbXB0eURpcmVjdG9yeShwYXRoKTsNCit9DQorDQorYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpk
ZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkNCit7DQorICAgIHJldHVy
biBkZWxldGVGaWxlKGZpbGVOYW1lKTsNCit9DQorDQorbG9uZyBsb25nIFNRTGl0ZUZpbGVTeXN0
ZW06OmdldERhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkNCit7ICAgICAg
ICANCisgICAgbG9uZyBsb25nIHNpemU7DQorICAgIHJldHVybiBnZXRGaWxlU2l6ZShmaWxlTmFt
ZSwgc2l6ZSkgPyBzaXplIDogMDsNCit9DQorDQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQ0KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTE1IEBACisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQ0KKyAqIG1ldDoNCisgKg0KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUNCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyDQorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KKyAqIGRpc3RyaWJ1dGlvbi4NCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20NCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUw0KKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UDQorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SDQorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQNCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwNCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UDQorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsDQorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZDQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0K
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICovDQorDQorI2lmbmRlZiBTUUxp
dGVGaWxlU3lzdGVtX2gNCisjZGVmaW5lIFNRTGl0ZUZpbGVTeXN0ZW1faA0KKw0KKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIg0KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+DQorI2luY2x1
ZGUgPHdpbmRvd3MuaD4NCisNCitzdHJ1Y3Qgc3FsaXRlMzsNCisNCituYW1lc3BhY2UgV2ViQ29y
ZSB7DQorDQorY2xhc3MgU1FMaXRlRGF0YWJhc2U7DQorDQorLy8gQSBjbGFzcyB0aGF0IGFic3Ry
YWN0cyB0aGUgZmlsZSBzeXN0ZW0gcmVsYXRlZCBvcGVyYXRpb25zIHJlcXVpcmVkDQorLy8gYnkg
dGhlIFdlYktpdCBkYXRhYmFzZSBjb2RlLg0KK2NsYXNzIFNRTGl0ZUZpbGVTeXN0ZW0gew0KK3B1
YmxpYzoNCisgICAgLy8gUmVnaXN0ZXJzIGEgdXNlci1kZWZpbmVkIFNRTGl0ZSBWRlMuDQorICAg
IHN0YXRpYyB2b2lkIHJlZ2lzdGVyU1FMaXRlVkZTKCk7DQorDQorICAgIC8vIE9wZW5zIGEgZGF0
YWJhc2UgZmlsZS4NCisgICAgLy8NCisgICAgLy8gZmlsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUg
ZGF0YWJhc2UgZmlsZS4NCisgICAgLy8gZGF0YWJhc2UgLSBUaGUgU1FMaXRlIHN0cnVjdHVyZSB0
aGF0IHJlcHJlc2VudHMgdGhlIGRhdGFiYXNlIHN0b3JlZA0KKyAgICAvLyAgICAgICAgICAgIGlu
IHRoZSBnaXZlbiBmaWxlLg0KKyAgICBzdGF0aWMgaW50IG9wZW5EYXRhYmFzZShjb25zdCBTdHJp
bmcmIGZpbGVOYW1lLCBzcWxpdGUzKiogZGF0YWJhc2UpOw0KKw0KKyAgICAvLyBSZXR1cm5zIHRo
ZSBmaWxlIG5hbWUgZm9yIGEgZGF0YWJhc2UuDQorICAgIC8vDQorICAgIC8vIGRiRGlyIC0gVGhl
IGRpcmVjdG9yeSB3aGVyZSBhbGwgZGF0YWJhc2VzIGFyZSBzdG9yZWQuDQorICAgIC8vIGRiTmFt
ZSAtIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZS4NCisgICAgLy8gb3JpZ2luSWRlbnRpZmllciAt
IFRoZSBvcmlnaW4gdGhhdCB3YW50cyB0byB1c2UgdGhpcyBkYXRhYmFzZS4NCisgICAgLy8gZGIg
LSBBIGRhdGFiYXNlIHdpdGggYSBudW1iZXIgZ2VuZXJhdG9yIHVzZWQgdG8gY3JlYXRlIHVuaXF1
ZSBmaWxlIG5hbWVzLg0KKyAgICBzdGF0aWMgU3RyaW5nIGdldEZpbGVOYW1lRm9yTmV3RGF0YWJh
c2UoY29uc3QgU3RyaW5nJiBkYkRpciwgY29uc3QgU3RyaW5nJiBkYk5hbWUsDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG9yaWdpbklk
ZW50aWZpZXIsIFNRTGl0ZURhdGFiYXNlKiBkYik7DQorDQorICAgIC8vIENyZWF0ZXMgYW4gYWJz
b2x1dGUgZmlsZSBwYXRoIGdpdmVuIGEgZGlyZWN0b3J5IGFuZCBhIGZpbGUgbmFtZS4NCisgICAg
Ly8NCisgICAgLy8gcGF0aCAtIFRoZSBkaXJlY3RvcnkuDQorICAgIC8vIGZpbGVOYW1lIC0gVGhl
IGZpbGUgbmFtZS4NCisgICAgc3RhdGljIFN0cmluZyBhcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9Q
YXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7DQorDQorICAg
IC8vIE1ha2VzIHN1cmUgdGhlIGdpdmVuIGRpcmVjdG9yeSBleGlzdHMsIGJ5IGNyZWF0aW5nIGFs
bCBtaXNzaW5nIGRpcmVjdG9yaWVzDQorICAgIC8vIG9uIHRoZSBnaXZlbiBwYXRoLg0KKyAgICAv
Lw0KKyAgICAvLyBwYXRoIC0gVGhlIGRpcmVjdG9yeS4NCisgICAgc3RhdGljIGJvb2wgZW5zdXJl
RGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKTsNCisNCisgICAgLy8g
SWYgJ2NoZWNrUGF0aE9ubHknIGlzIGZhbHNlLCB0aGVuIHRoaXMgbWV0aG9kIG9ubHkgY2hlY2tz
IGlmIHRoZSBnaXZlbiBmaWxlIGV4aXN0cy4NCisgICAgLy8gSWYgJ2NoZWNrUGF0aE9ubHknIGlz
IHRydWUsIHRoZW4gdGhpcyBtZXRob2QgbWFrZXMgc3VyZSBhbGwgZGlyZWN0b3JpZXMgb24gdGhl
DQorICAgIC8vIGdpdmVuIHBhdGggZXhpc3QgYnkgY3JlYXRpbmcgdGhlIG1pc3Npbmcgb25lcywg
YW5kIGRvZXMgbm90IGNoZWNrIGlmIHRoZSBmaWxlDQorICAgIC8vIGl0c2VsZiBleGlzdHMuDQor
ICAgIC8vDQorICAgIC8vIFNvbWV0aW1lcyB3ZSBleHBlY3QgYSBEQiBmaWxlIHRvIGV4aXN0OyBv
dGhlciB0aW1lcywgd2UncmUgT0sgd2l0aCBjcmVhdGluZyBhIG5ldw0KKyAgICAvLyBEQiBmaWxl
LCBidXQgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHdl
IHdhbnQgdG8gcHV0IHRoZQ0KKyAgICAvLyBuZXcgREIgZmlsZSBleGlzdHMuIFRoaXMgbWV0aG9k
IGNvdmVycyBib3RoIGNhc2VzLg0KKyAgICAvLw0KKyAgICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxl
IG5hbWUuDQorICAgIC8vIGNoZWNrUGF0aE9ubHkgLSBJZiB0cnVlLCB3ZSBvbmx5IG1ha2Ugc3Vy
ZSB0aGF0IHRoZSBnaXZlbiBkaXJlY3RvcnkgZXhpc3RzLg0KKyAgICAvLyAgICAgICAgICAgICAg
ICAgSWYgZmFsc2UsIHdlIG9ubHkgY2hlY2sgaWYgdGhlIGZpbGUgZXhpc3RzLg0KKyAgICBzdGF0
aWMgYm9vbCBlbnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwg
Ym9vbCBjaGVja1BhdGhPbmx5KTsNCisNCisgICAgLy8gRGVsZXRlcyBhbiBlbXB0eSBkYXRhYmFz
ZSBkaXJlY3RvcnkuDQorICAgIC8vDQorICAgIC8vIHBhdGggLSBUaGUgZGlyZWN0b3J5Lg0KKyAg
ICBzdGF0aWMgYm9vbCBkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYg
cGF0aCk7DQorDQorICAgIC8vIERlbGV0ZXMgYSBkYXRhYmFzZSBmaWxlLg0KKyAgICAvLw0KKyAg
ICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuDQorICAgIHN0YXRpYyBib29sIGRlbGV0ZURh
dGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsNCisNCisgICAgLy8gUmV0dXJucyB0
aGUgc2l6ZSBvZiB0aGUgZGF0YWJhc2UgZmlsZS4NCisgICAgLy8NCisgICAgLy8gZmlsZU5hbWUg
LSBUaGUgZmlsZSBuYW1lLg0KKyAgICBzdGF0aWMgbG9uZyBsb25nIGdldERhdGFiYXNlRmlsZVNp
emUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7DQorDQorcHJpdmF0ZToNCisgICAgLy8gZG8gbm90
IGluc3RhbnRpYXRlIHRoaXMgY2xhc3MNCisgICAgU1FMaXRlRmlsZVN5c3RlbSgpOw0KK307IC8v
IGNsYXNzIFNRTGl0ZUZpbGVTeXN0ZW0NCisNCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQorDQor
I2VuZGlmDQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA0NDY5NikKKysrIFdlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAK
ICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgpAQCAtNDgsNiArNDcsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJPcmlnaW5RdW90YU1hbmFnZXIuaCIKICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2lu
Y2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIK
ICNpbmNsdWRlICJTUUxSZXN1bHRTZXQuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpA
QCAtMzM4LDEwICszMzgsNyBAQCB2b2lkIERhdGFiYXNlOjpzdG9wKCkKIAogdW5zaWduZWQgbG9u
ZyBsb25nIERhdGFiYXNlOjpkYXRhYmFzZVNpemUoKSBjb25zdAogewotICAgIGxvbmcgbG9uZyBz
aXplOwotICAgIGlmICghZ2V0RmlsZVNpemUobV9maWxlbmFtZSwgc2l6ZSkpCi0gICAgICAgIHNp
emUgPSAwOwotICAgIHJldHVybiBzaXplOworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjpn
ZXREYXRhYmFzZUZpbGVTaXplKG1fZmlsZW5hbWUpOwogfQogCiB1bnNpZ25lZCBsb25nIGxvbmcg
RGF0YWJhc2U6Om1heGltdW1TaXplKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZVRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRy
YWNrZXIuY3BwCShyZXZpc2lvbiA0NDY5NikKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRy
YWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTIgQEAKICNpbmNsdWRlICJE
YXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlckNsaWVudC5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJPcmlnaW5RdW90YU1hbmFnZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAj
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2gu
aCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVt
ZW50LmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CkBAIC02OSw2ICs2OSw3IEBAIERhdGFiYXNlVHJhY2tlcjo6RGF0YWJhc2VUcmFj
a2VyKCkKICAgICAsIG1fdGhyZWFkKGN1cnJlbnRUaHJlYWQoKSkKICNlbmRpZgogeworICBTUUxp
dGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpOwogfQogCiB2b2lkIERhdGFiYXNlVHJh
Y2tlcjo6c2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKQEAgLTg3
LDkgKzg4LDcgQEAgY29uc3QgU3RyaW5nJiBEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlRAogU3Ry
aW5nIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZCk7Ci0gICAgaWYgKG1fZGF0YWJhc2VE
aXJlY3RvcnlQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJl
dHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsICJE
YXRhYmFzZXMuZGIiKTsKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJh
c2VGaWxlTmFtZVRvUGF0aChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgIkRhdGFiYXNlcy5kYiIp
OwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNy
ZWF0ZUlmRG9lc05vdEV4aXN0KQpAQCAtMTAwLDEzICs5OSw5IEBAIHZvaWQgRGF0YWJhc2VUcmFj
a2VyOjpvcGVuVHJhY2tlckRhdGFiYXMKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGRh
dGFiYXNlUGF0aCA9IHRyYWNrZXJEYXRhYmFzZVBhdGgoKTsKLSAgICBpZiAoZGF0YWJhc2VQYXRo
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFjcmVhdGVJZkRvZXNOb3RF
eGlzdCAmJiAhZmlsZUV4aXN0cyhkYXRhYmFzZVBhdGgpKQorICAgIGlmICghU1FMaXRlRmlsZVN5
c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGRhdGFiYXNlUGF0aCwgY3JlYXRlSWZEb2Vz
Tm90RXhpc3QpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtlQWxsRGlyZWN0b3JpZXMobV9k
YXRhYmFzZURpcmVjdG9yeVBhdGgpOwogICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKGRhdGFiYXNl
UGF0aCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdoYXQgZG8gZG8gaGVyZT8KICAgICAgICAgcmV0
dXJuOwpAQCAtMTkwLDkgKzE4NSw3IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZv
ckRhdGFiYXMKIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6Om9yaWdpblBhdGgoU2VjdXJpdHlPcmln
aW4qIG9yaWdpbikgY29uc3QKIHsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhy
ZWFkKTsKLSAgICBpZiAobV9kYXRhYmFzZURpcmVjdG9yeVBhdGguaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCht
X2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Cisg
ICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgo
bV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkpOwog
fQogCiBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZk5vdEV4aXN0
cykKQEAgLTIwNiw3ICsxOTksNyBAQCBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZv
ckRhdGFiCiAgICAgU3RyaW5nIG9yaWdpblBhdGggPSB0aGlzLT5vcmlnaW5QYXRoKG9yaWdpbik7
CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBwYXRoIGZvciB0aGlzIFNlY3VyaXR5T3JpZ2lu
IGV4aXN0cwotICAgIGlmIChjcmVhdGVJZk5vdEV4aXN0cyAmJiAhbWFrZUFsbERpcmVjdG9yaWVz
KG9yaWdpblBhdGgpKQorICAgIGlmIChjcmVhdGVJZk5vdEV4aXN0cyAmJiAhU1FMaXRlRmlsZVN5
c3RlbTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMob3JpZ2luUGF0aCkpCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKICAgICAKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHBhdGggZm9y
IHRoaXMgZGF0YWJhc2UgeWV0CkBAIC0yMjQsNyArMjE3LDcgQEAgU3RyaW5nIERhdGFiYXNlVHJh
Y2tlcjo6ZnVsbFBhdGhGb3JEYXRhYgogICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgp
OwogCiAgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpCi0gICAgICAgIHJldHVybiBwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRleHQo
MCkpOworICAgICAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxl
TmFtZVRvUGF0aChvcmlnaW5QYXRoLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7CiAgICAg
aWYgKCFjcmVhdGVJZk5vdEV4aXN0cykKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgICAg
ICAKQEAgLTI0MSwyMiArMjM0LDggQEAgU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhG
b3JEYXRhYgogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgcmVzdWx0ID0gc2VxdWVuY2VT
dGF0ZW1lbnQuc3RlcCgpOwogCi0gICAgLy8gVGhpcyBoYXMgYSByYW5nZSBvZiAyXjYzIGFuZCBz
dGFydHMgYXQgMCBmb3IgZXZlcnkgdGltZSBhIHVzZXIgcmVzZXRzIFNhZmFyaSAtCi0gICAgLy8g
SSBjYW4ndCBpbWFnaW5lIGl0J2Qgb3ZlciBvdmVyZmxvdwotICAgIGludDY0X3Qgc2VxID0gMDsK
LSAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykgewotICAgICAgICBzZXEgPSBzZXF1ZW5j
ZVN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKLSAgICB9IGVsc2UgaWYgKHJlc3VsdCAhPSBT
UUxSZXN1bHREb25lKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgc2VxdWVuY2VTdGF0
ZW1lbnQuZmluYWxpemUoKTsKLQotICAgIFN0cmluZyBmaWxlbmFtZTsKLSAgICBkbyB7Ci0gICAg
ICAgICsrc2VxOwotICAgICAgICBmaWxlbmFtZSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChv
cmlnaW5QYXRoLCBTdHJpbmc6OmZvcm1hdCgiJTAxNmxseC5kYiIsIHNlcSkpOwotICAgIH0gd2hp
bGUgKGZpbGVFeGlzdHMoZmlsZW5hbWUpKTsKLQotICAgIGlmICghYWRkRGF0YWJhc2Uob3JpZ2lu
LCBuYW1lLCBTdHJpbmc6OmZvcm1hdCgiJTAxNmxseC5kYiIsIHNlcSkpKQorICAgIFN0cmluZyBm
aWxlTmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmdldEZpbGVOYW1lRm9yTmV3RGF0YWJhc2Uob3Jp
Z2luUGF0aCwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSwgbmFtZSwgJm1fZGF0YWJhc2Up
OworICAgIGlmICghYWRkRGF0YWJhc2Uob3JpZ2luLCBuYW1lLCBmaWxlTmFtZSkpCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKIAogICAgIC8vIElmIHRoaXMgb3JpZ2luJ3MgcXVvdGEgaXMgYmVp
bmcgdHJhY2tlZCAob3BlbiBoYW5kbGUgdG8gYSBkYXRhYmFzZSBpbiB0aGlzIG9yaWdpbiksIGFk
ZCB0aGlzIG5ldyBkYXRhYmFzZQpAQCAtMjY0LDEwICsyNDMsMTAgQEAgU3RyaW5nIERhdGFiYXNl
VHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYgogICAgIHsKICAgICAgICAgTG9ja2VyPE9yaWdpblF1
b3RhTWFuYWdlcj4gbG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKICAgICAgICAgaWYgKG9y
aWdpblF1b3RhTWFuYWdlcigpLnRyYWNrc09yaWdpbihvcmlnaW4pKQotICAgICAgICAgICAgb3Jp
Z2luUXVvdGFNYW5hZ2VyKCkuYWRkRGF0YWJhc2Uob3JpZ2luLCBuYW1lLCBmaWxlbmFtZSk7Cisg
ICAgICAgICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5hZGREYXRhYmFzZShvcmlnaW4sIG5hbWUs
IGZpbGVOYW1lKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIGZpbGVuYW1lOworICAgIHJldHVy
biBmaWxlTmFtZTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnBvcHVsYXRlT3JpZ2lucygp
CkBAIC00MjMsOCArNDAyLDcgQEAgdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6
dXNhZwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IAotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIHJldHVybiBnZXRGaWxlU2l6ZShwYXRoLCBzaXpl
KSA/IHNpemUgOiAwOworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZp
bGVTaXplKHBhdGgpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNl
KERhdGFiYXNlKiBkYXRhYmFzZSkKQEAgLTY2NSw3ICs2NDMsNyBAQCB2b2lkIERhdGFiYXNlVHJh
Y2tlcjo6ZGVsZXRlT3JpZ2luKFNlY3VyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBk
ZWxldGVFbXB0eURpcmVjdG9yeShvcmlnaW5QYXRoKG9yaWdpbikpOworICAgIFNRTGl0ZUZpbGVT
eXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3Rvcnkob3JpZ2luUGF0aChvcmlnaW4pKTsK
IAogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luUG9zc2libHlMYXN0UmVmZXJlbmNl
ID0gb3JpZ2luOwogICAgIHsKQEAgLTY3OSw4ICs2NTcsOCBAQCB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6ZGVsZXRlT3JpZ2luKFNlY3VyCiAgICAgICAgIGlmIChtX3F1b3RhTWFwLT5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICAgICAgICAg
IG1fZGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgICAgIGRlbGV0ZUZpbGUodHJhY2tlckRhdGFi
YXNlUGF0aCgpKTsKLSAgICAgICAgICAgIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KG1fZGF0YWJhc2VE
aXJlY3RvcnlQYXRoKTsKKwkgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxl
KHRyYWNrZXJEYXRhYmFzZVBhdGgoKSk7CisJICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVt
cHR5RGF0YWJhc2VEaXJlY3RvcnkobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC03NjMsNyArNzQxLDcgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0
ZURhdGFiYXNlRmlsZQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZWxldGVkRGF0YWJh
c2VzLnNpemUoKTsgKytpKQogICAgICAgICBkZWxldGVkRGF0YWJhc2VzW2ldLT5tYXJrQXNEZWxl
dGVkQW5kQ2xvc2UoKTsKIAotICAgIHJldHVybiBkZWxldGVGaWxlKGZ1bGxQYXRoKTsKKyAgICBy
ZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGZ1bGxQYXRoKTsKIH0K
IAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldENsaWVudChEYXRhYmFzZVRyYWNrZXJDbGllbnQq
IGNsaWVudCkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmNwcAkocmV2aXNp
b24gNDQ2OTYpCisrKyBXZWJDb3JlL3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKLSNp
bmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTgyLDggKzgyLDggQEAgdW5zaWduZWQgbG9uZyBsb25n
IE9yaWdpblVzYWdlUmVjb3JkOjpkaQogICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBtX2Rh
dGFiYXNlTWFwLmdldCgqaVVua25vd24pLmZpbGVuYW1lOwogICAgICAgICBBU1NFUlQoIXBhdGgu
aXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgbG9uZyBsb25nIHNpemU7Ci0g
ICAgICAgIGlmIChnZXRGaWxlU2l6ZShwYXRoLCBzaXplKSkKKyAgICAgICAgbG9uZyBsb25nIHNp
emUgPSBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKHBhdGgpOworICAgICAg
ICBpZiAoc2l6ZSA+IDApCiAgICAgICAgICAgICBtX2RhdGFiYXNlTWFwLnNldCgqaVVua25vd24s
IERhdGFiYXNlRW50cnkocGF0aCwgc2l6ZSkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IC8vIFdoZW4gd2UgY2FuJ3QgZGV0ZXJtaW5lIHRoZSBmaWxlIHNpemUsIHdlJ2xsIGp1c3QgaGF2
ZSB0byBhc3N1bWUgdGhlIGZpbGUgaXMgbWlzc2luZy9pbmFjY2Vzc2libGUuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31940</attachid>
            <date>2009-06-26 11:44:55 -0700</date>
            <delta_ts>2009-06-29 13:21:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>22441</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTI2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMDktMDYtMjYgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRzIGFuIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW4gdGhlIERCIGNsYXNzZXMgYW5kIHRo
ZSBmaWxlCisgICAgICAgIHN5c3RlbSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFkZCBvdXIgb3duIGxv
Z2ljIGZvciBzdG9yaW5nLCBvcGVuaW5nLAorICAgICAgICBkZWxldGluZywgZXRjLiBkYXRhYmFz
ZXMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2
MDU0CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoK
KyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBwbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U6Om9wZW4pOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxl
U3lzdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FM
aXRlVkZTKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5l
d0RhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERh
dGFiYXNlRmlsZU5hbWVUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3Rl
bTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUpOgor
ICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmg6IEFkZGVkLgorICAgICAg
ICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OmRh
dGFiYXNlU2l6ZSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpEYXRhYmFzZVRyYWNrZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Om9yaWdpblBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dXNhZ2VGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZSk6CisgICAgICAgICogc3RvcmFnZS9P
cmlnaW5Vc2FnZVJlY29yZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5Vc2FnZVJlY29y
ZDo6ZGlza1VzYWdlKToKKwogMjAwOS0wNi0yNiAgQWRlbGUgUGV0ZXJzb24gIDxhZGVsZUBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJl
dmlzaW9uIDQ1MjY5KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpA
QCAtMjAyOCw2ICsyMDI4LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVBdXRob3JpemVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlRGF0YWJhc2UuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5o
IFwKKwlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVTdGF0ZW1lbnQuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0
ZW1lbnQuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uY3BwIFwK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnBybwkocmV2aXNpb24gNDUyNjkpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzIyLDYgKzEzMjIsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1FMSVRF
PTEpIHsKICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgcGxhdGZvcm0vc3FsL1NRTGl0ZUF1dGhv
cml6ZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcCBcCisg
ICAgICAgIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBcCiAgICAgICAgIHBsYXRm
b3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vc3FsL1NRTGl0
ZVRyYW5zYWN0aW9uLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL3NxbC9TUUxWYWx1ZS5jcHAgXApJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0NTI2OSkK
KysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkK
QEAgLTIwMTYwLDYgKzIwMTYwLDE0IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8Rmls
ZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxzcWxcU1FMaXRlRmlsZVN5c3RlbS5j
cHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGxhdGZvcm1cc3FsXFNRTGl0ZUZpbGVTeXN0ZW0uaCINCisJCQkJCT4NCisJCQkJPC9G
aWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxzcWxcU1FM
aXRlU3RhdGVtZW50LmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDQ1MjY5KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw3IEBACiAKICNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKICNpbmNsdWRlICJM
b2dnaW5nLmgiCisjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIlNRTGl0
ZVN0YXRlbWVudC5oIgogCiAjaW5jbHVkZSA8c3FsaXRlMy5oPgpAQCAtNjAsOSArNjEsNyBAQCBi
b29sIFNRTGl0ZURhdGFiYXNlOjpvcGVuKGNvbnN0IFN0cmluZyYgCiB7CiAgICAgY2xvc2UoKTsK
ICAgICAKLSAgICAvLyBTUUxpdGUgZXhwZWN0cyBhIG51bGwgdGVybWluYXRvciBvbiBpdHMgVVRG
LTE2IHN0cmluZ3MuCi0gICAgU3RyaW5nIHBhdGggPSBmaWxlbmFtZTsKLSAgICBtX2xhc3RFcnJv
ciA9IHNxbGl0ZTNfb3BlbjE2KHBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwg
Jm1fZGIpOworICAgIG1fbGFzdEVycm9yID0gU1FMaXRlRmlsZVN5c3RlbTo6b3BlbkRhdGFiYXNl
KGZpbGVuYW1lLCAmbV9kYik7CiAgICAgaWYgKG1fbGFzdEVycm9yICE9IFNRTElURV9PSykgewog
ICAgICAgICBMT0dfRVJST1IoIlNRTGl0ZSBkYXRhYmFzZSBmYWlsZWQgdG8gbG9hZCBmcm9tICVz
XG5DYXVzZSAtICVzIiwgZmlsZW5hbWUuYXNjaWkoKS5kYXRhKCksCiAgICAgICAgICAgICBzcWxp
dGUzX2Vycm1zZyhtX2RiKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxl
U3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxl
U3lzdGVtLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZp
bGVTeXN0ZW0uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNCBAQAorLyoNCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUNCisgKiBtZXQ6DQorICoNCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodA0KKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4NCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlDQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcg0KKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCisg
KiBkaXN0cmlidXRpb24uDQorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMNCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVA0KKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUg0KKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
DQorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsDQorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLA0KKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQ0KKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLg0KKyAqLw0KKw0KKyNpbmNsdWRlICJjb25maWcuaCINCisjaW5jbHVkZSAiU1FMaXRlRmls
ZVN5c3RlbS5oIg0KKw0KKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiDQorI2luY2x1ZGUgIlNRTGl0
ZURhdGFiYXNlLmgiDQorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIg0KKyNpbmNsdWRlIDxz
cWxpdGUzLmg+DQorDQorI2lmIFBMQVRGT1JNKFdJTikNCisjZGVmaW5lIFBBVEhfU0VQQVJBVE9S
ICdcXCcNCisjZWxzZQ0KKyNkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJy8nDQorI2VuZGlmDQorDQor
bmFtZXNwYWNlIFdlYkNvcmUgew0KKw0KK1NRTGl0ZUZpbGVTeXN0ZW06OlNRTGl0ZUZpbGVTeXN0
ZW0oKQ0KK3sNCit9DQorDQordm9pZCBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZG
UygpDQorew0KK30NCisNCitpbnQgU1FMaXRlRmlsZVN5c3RlbTo6b3BlbkRhdGFiYXNlKGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUsIHNxbGl0ZTMqKiBkYXRhYmFzZSkNCit7DQorICAgIC8vIFNRTGl0
ZSBleHBlY3RzIGEgbnVsbCB0ZXJtaW5hdG9yIG9uIGl0cyBVVEYtMTYgc3RyaW5ncy4NCisgICAg
U3RyaW5nIHBhdGggPSBmaWxlTmFtZTsNCisgICAgcmV0dXJuIHNxbGl0ZTNfb3BlbjE2KHBhdGgu
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgZGF0YWJhc2UpOw0KK30NCisNCitTdHJp
bmcgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RmlsZU5hbWVGb3JOZXdEYXRhYmFzZShjb25zdCBTdHJp
bmcmIGRiRGlyLCBjb25zdCBTdHJpbmcmIGRiTmFtZSwNCisJCQkJCQkgICBjb25zdCBTdHJpbmcm
IG9yaWdpbklkZW50aWZpZXIsIFNRTGl0ZURhdGFiYXNlKiBkYikNCit7DQorICAgIC8vIHRyeSB0
byBnZXQgdGhlIG5leHQgc2VxdWVuY2UgbnVtYmVyIGZyb20gdGhlIGdpdmVuIGRhdGFiYXNlDQor
ICAgIC8vIGlmIHdlIGNhbid0IGdldCBhIG51bWJlciwgcmV0dXJuIGFuIGVtcHR5IHN0cmluZw0K
KyAgICBTUUxpdGVTdGF0ZW1lbnQgc2VxdWVuY2VTdGF0ZW1lbnQoKmRiLCAiU0VMRUNUIHNlcSBG
Uk9NIHNxbGl0ZV9zZXF1ZW5jZSBXSEVSRSBuYW1lPSdEYXRhYmFzZXMnOyIpOw0KKyAgICBpZiAo
c2VxdWVuY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQ0KKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOw0KKyAgICBpbnQgcmVzdWx0ID0gc2VxdWVuY2VTdGF0ZW1lbnQuc3RlcCgp
Ow0KKyAgICBpbnQ2NF90IHNlcSA9IDA7DQorICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93
KQ0KKyAgICAgICAgc2VxID0gc2VxdWVuY2VTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7DQor
ICAgIGVsc2UgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKQ0KKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOw0KKyAgICBzZXF1ZW5jZVN0YXRlbWVudC5maW5hbGl6ZSgpOw0KKw0KKyAgICAvLyBp
bmNyZW1lbnQgdGhlIG51bWJlciB1bnRpbCB3ZSBjYW4gdXNlIGl0IHRvIGZvcm0gYSBmaWxlIG5h
bWUgdGhhdCBkb2Vzbid0IGV4aXN0DQorICAgIFN0cmluZyBmaWxlTmFtZTsNCisgICAgZG8gew0K
KyAgICAgICAgKytzZXE7DQorICAgICAgICBmaWxlTmFtZSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudChkYkRpciwgU3RyaW5nOjpmb3JtYXQoIiUwMTZsbHguZGIiLCBzZXEpKTsNCisgICAgfSB3
aGlsZSAoZmlsZUV4aXN0cyhmaWxlTmFtZSkpOw0KKw0KKyAgICByZXR1cm4gZmlsZU5hbWU7DQor
fQ0KKw0KK1N0cmluZyBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9Q
YXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkNCit7DQorICAg
IHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGF0aCwgZmlsZU5hbWUpOw0KK30NCisN
Citib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRGlyZWN0b3J5RXhpc3RzKGNv
bnN0IFN0cmluZyYgcGF0aCkNCit7DQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkNCisgICAgICAg
IHJldHVybiBmYWxzZTsNCisgICAgcmV0dXJuIG1ha2VBbGxEaXJlY3RvcmllcyhwYXRoKTsNCit9
DQorDQorYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMoY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSwgYm9vbCBjaGVja1BhdGhPbmx5KQ0KK3sNCisgICAgaWYgKGZp
bGVOYW1lLmlzRW1wdHkoKSkNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisNCisgICAgaWYgKGNo
ZWNrUGF0aE9ubHkpIHsNCisgICAgICAgIFN0cmluZyBkaXIgPSBmaWxlTmFtZTsNCisgICAgICAg
IGludCBsYXN0SW5kZXhPZkJhY2tTbGFzaCA9IGRpci5yZXZlcnNlRmluZChQQVRIX1NFUEFSQVRP
Uik7DQorICAgICAgICBpZiAobGFzdEluZGV4T2ZCYWNrU2xhc2ggPiAwKSB7DQorICAgICAgICAg
ICAgZGlyLnRydW5jYXRlKGxhc3RJbmRleE9mQmFja1NsYXNoKTsNCisgICAgICAgICAgICByZXR1
cm4gZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMoZGlyKTsNCisgICAgICAgIH0NCisgICAg
ICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorDQorICAgIHJldHVybiBmaWxlRXhpc3RzKGZpbGVO
YW1lKTsNCit9DQorDQorYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNl
RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkNCit7DQorICAgIHJldHVybiBkZWxldGVFbXB0
eURpcmVjdG9yeShwYXRoKTsNCit9DQorDQorYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVE
YXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkNCit7DQorICAgIHJldHVybiBkZWxl
dGVGaWxlKGZpbGVOYW1lKTsNCit9DQorDQorbG9uZyBsb25nIFNRTGl0ZUZpbGVTeXN0ZW06Omdl
dERhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkNCit7ICAgICAgICANCisg
ICAgbG9uZyBsb25nIHNpemU7DQorICAgIHJldHVybiBnZXRGaWxlU2l6ZShmaWxlTmFtZSwgc2l6
ZSkgPyBzaXplIDogMDsNCit9DQorDQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQ0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTE1IEBACisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQ0KKyAq
IG1ldDoNCisgKg0KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUNCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyDQorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQ0KKyAqIGRpc3RyaWJ1dGlvbi4NCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20NCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUw0KKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UDQorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SDQorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQNCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwNCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsDQorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZDQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICovDQorDQorI2lmbmRlZiBTUUxpdGVGaWxl
U3lzdGVtX2gNCisjZGVmaW5lIFNRTGl0ZUZpbGVTeXN0ZW1faA0KKw0KKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIg0KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+DQorI2luY2x1ZGUgPHdp
bmRvd3MuaD4NCisNCitzdHJ1Y3Qgc3FsaXRlMzsNCisNCituYW1lc3BhY2UgV2ViQ29yZSB7DQor
DQorY2xhc3MgU1FMaXRlRGF0YWJhc2U7DQorDQorLy8gQSBjbGFzcyB0aGF0IGFic3RyYWN0cyB0
aGUgZmlsZSBzeXN0ZW0gcmVsYXRlZCBvcGVyYXRpb25zIHJlcXVpcmVkDQorLy8gYnkgdGhlIFdl
YktpdCBkYXRhYmFzZSBjb2RlLg0KK2NsYXNzIFNRTGl0ZUZpbGVTeXN0ZW0gew0KK3B1YmxpYzoN
CisgICAgLy8gUmVnaXN0ZXJzIGEgdXNlci1kZWZpbmVkIFNRTGl0ZSBWRlMuDQorICAgIHN0YXRp
YyB2b2lkIHJlZ2lzdGVyU1FMaXRlVkZTKCk7DQorDQorICAgIC8vIE9wZW5zIGEgZGF0YWJhc2Ug
ZmlsZS4NCisgICAgLy8NCisgICAgLy8gZmlsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZGF0YWJh
c2UgZmlsZS4NCisgICAgLy8gZGF0YWJhc2UgLSBUaGUgU1FMaXRlIHN0cnVjdHVyZSB0aGF0IHJl
cHJlc2VudHMgdGhlIGRhdGFiYXNlIHN0b3JlZA0KKyAgICAvLyAgICAgICAgICAgIGluIHRoZSBn
aXZlbiBmaWxlLg0KKyAgICBzdGF0aWMgaW50IG9wZW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIGZp
bGVOYW1lLCBzcWxpdGUzKiogZGF0YWJhc2UpOw0KKw0KKyAgICAvLyBSZXR1cm5zIHRoZSBmaWxl
IG5hbWUgZm9yIGEgZGF0YWJhc2UuDQorICAgIC8vDQorICAgIC8vIGRiRGlyIC0gVGhlIGRpcmVj
dG9yeSB3aGVyZSBhbGwgZGF0YWJhc2VzIGFyZSBzdG9yZWQuDQorICAgIC8vIGRiTmFtZSAtIFRo
ZSBuYW1lIG9mIHRoZSBkYXRhYmFzZS4NCisgICAgLy8gb3JpZ2luSWRlbnRpZmllciAtIFRoZSBv
cmlnaW4gdGhhdCB3YW50cyB0byB1c2UgdGhpcyBkYXRhYmFzZS4NCisgICAgLy8gZGIgLSBBIGRh
dGFiYXNlIHdpdGggYSBudW1iZXIgZ2VuZXJhdG9yIHVzZWQgdG8gY3JlYXRlIHVuaXF1ZSBmaWxl
IG5hbWVzLg0KKyAgICBzdGF0aWMgU3RyaW5nIGdldEZpbGVOYW1lRm9yTmV3RGF0YWJhc2UoY29u
c3QgU3RyaW5nJiBkYkRpciwgY29uc3QgU3RyaW5nJiBkYk5hbWUsDQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZp
ZXIsIFNRTGl0ZURhdGFiYXNlKiBkYik7DQorDQorICAgIC8vIENyZWF0ZXMgYW4gYWJzb2x1dGUg
ZmlsZSBwYXRoIGdpdmVuIGEgZGlyZWN0b3J5IGFuZCBhIGZpbGUgbmFtZS4NCisgICAgLy8NCisg
ICAgLy8gcGF0aCAtIFRoZSBkaXJlY3RvcnkuDQorICAgIC8vIGZpbGVOYW1lIC0gVGhlIGZpbGUg
bmFtZS4NCisgICAgc3RhdGljIFN0cmluZyBhcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKGNv
bnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7DQorDQorICAgIC8vIE1h
a2VzIHN1cmUgdGhlIGdpdmVuIGRpcmVjdG9yeSBleGlzdHMsIGJ5IGNyZWF0aW5nIGFsbCBtaXNz
aW5nIGRpcmVjdG9yaWVzDQorICAgIC8vIG9uIHRoZSBnaXZlbiBwYXRoLg0KKyAgICAvLw0KKyAg
ICAvLyBwYXRoIC0gVGhlIGRpcmVjdG9yeS4NCisgICAgc3RhdGljIGJvb2wgZW5zdXJlRGF0YWJh
c2VEaXJlY3RvcnlFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKTsNCisNCisgICAgLy8gSWYgJ2No
ZWNrUGF0aE9ubHknIGlzIGZhbHNlLCB0aGVuIHRoaXMgbWV0aG9kIG9ubHkgY2hlY2tzIGlmIHRo
ZSBnaXZlbiBmaWxlIGV4aXN0cy4NCisgICAgLy8gSWYgJ2NoZWNrUGF0aE9ubHknIGlzIHRydWUs
IHRoZW4gdGhpcyBtZXRob2QgbWFrZXMgc3VyZSBhbGwgZGlyZWN0b3JpZXMgb24gdGhlDQorICAg
IC8vIGdpdmVuIHBhdGggZXhpc3QgYnkgY3JlYXRpbmcgdGhlIG1pc3Npbmcgb25lcywgYW5kIGRv
ZXMgbm90IGNoZWNrIGlmIHRoZSBmaWxlDQorICAgIC8vIGl0c2VsZiBleGlzdHMuDQorICAgIC8v
DQorICAgIC8vIFNvbWV0aW1lcyB3ZSBleHBlY3QgYSBEQiBmaWxlIHRvIGV4aXN0OyBvdGhlciB0
aW1lcywgd2UncmUgT0sgd2l0aCBjcmVhdGluZyBhIG5ldw0KKyAgICAvLyBEQiBmaWxlLCBidXQg
d2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHdlIHdhbnQg
dG8gcHV0IHRoZQ0KKyAgICAvLyBuZXcgREIgZmlsZSBleGlzdHMuIFRoaXMgbWV0aG9kIGNvdmVy
cyBib3RoIGNhc2VzLg0KKyAgICAvLw0KKyAgICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUu
DQorICAgIC8vIGNoZWNrUGF0aE9ubHkgLSBJZiB0cnVlLCB3ZSBvbmx5IG1ha2Ugc3VyZSB0aGF0
IHRoZSBnaXZlbiBkaXJlY3RvcnkgZXhpc3RzLg0KKyAgICAvLyAgICAgICAgICAgICAgICAgSWYg
ZmFsc2UsIHdlIG9ubHkgY2hlY2sgaWYgdGhlIGZpbGUgZXhpc3RzLg0KKyAgICBzdGF0aWMgYm9v
bCBlbnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgYm9vbCBj
aGVja1BhdGhPbmx5KTsNCisNCisgICAgLy8gRGVsZXRlcyBhbiBlbXB0eSBkYXRhYmFzZSBkaXJl
Y3RvcnkuDQorICAgIC8vDQorICAgIC8vIHBhdGggLSBUaGUgZGlyZWN0b3J5Lg0KKyAgICBzdGF0
aWMgYm9vbCBkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCk7
DQorDQorICAgIC8vIERlbGV0ZXMgYSBkYXRhYmFzZSBmaWxlLg0KKyAgICAvLw0KKyAgICAvLyBm
aWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuDQorICAgIHN0YXRpYyBib29sIGRlbGV0ZURhdGFiYXNl
RmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsNCisNCisgICAgLy8gUmV0dXJucyB0aGUgc2l6
ZSBvZiB0aGUgZGF0YWJhc2UgZmlsZS4NCisgICAgLy8NCisgICAgLy8gZmlsZU5hbWUgLSBUaGUg
ZmlsZSBuYW1lLg0KKyAgICBzdGF0aWMgbG9uZyBsb25nIGdldERhdGFiYXNlRmlsZVNpemUoY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSk7DQorDQorcHJpdmF0ZToNCisgICAgLy8gZG8gbm90IGluc3Rh
bnRpYXRlIHRoaXMgY2xhc3MNCisgICAgU1FMaXRlRmlsZVN5c3RlbSgpOw0KK307IC8vIGNsYXNz
IFNRTGl0ZUZpbGVTeXN0ZW0NCisNCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQorDQorI2VuZGlm
DQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA0NTI2OSkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNs
dWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgpAQCAtNDgsNiArNDcsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJPcmln
aW5RdW90YU1hbmFnZXIuaCIKICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUg
IlNRTGl0ZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKICNpbmNs
dWRlICJTUUxSZXN1bHRTZXQuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAtMzM4
LDEwICszMzgsNyBAQCB2b2lkIERhdGFiYXNlOjpzdG9wKCkKIAogdW5zaWduZWQgbG9uZyBsb25n
IERhdGFiYXNlOjpkYXRhYmFzZVNpemUoKSBjb25zdAogewotICAgIGxvbmcgbG9uZyBzaXplOwot
ICAgIGlmICghZ2V0RmlsZVNpemUobV9maWxlbmFtZSwgc2l6ZSkpCi0gICAgICAgIHNpemUgPSAw
OwotICAgIHJldHVybiBzaXplOworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRh
YmFzZUZpbGVTaXplKG1fZmlsZW5hbWUpOwogfQogCiB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJh
c2U6Om1heGltdW1TaXplKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRy
YWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIu
Y3BwCShyZXZpc2lvbiA0NTI2OSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTIgQEAKICNpbmNsdWRlICJEYXRhYmFz
ZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJPcmlnaW5RdW90YU1hbmFnZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIKKyNp
bmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50Lmgi
CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CkBAIC02OSw2ICs2OSw3IEBAIERhdGFiYXNlVHJhY2tlcjo6RGF0YWJhc2VUcmFja2VyKCkK
ICAgICAsIG1fdGhyZWFkKGN1cnJlbnRUaHJlYWQoKSkKICNlbmRpZgogeworICBTUUxpdGVGaWxl
U3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6
c2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKQEAgLTg3LDkgKzg4
LDcgQEAgY29uc3QgU3RyaW5nJiBEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlRAogU3RyaW5nIERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCgpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZCk7Ci0gICAgaWYgKG1fZGF0YWJhc2VEaXJlY3Rv
cnlQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsICJEYXRhYmFz
ZXMuZGIiKTsKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxl
TmFtZVRvUGF0aChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgIkRhdGFiYXNlcy5kYiIpOwogfQog
CiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNyZWF0ZUlm
RG9lc05vdEV4aXN0KQpAQCAtMTAwLDEzICs5OSw5IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpv
cGVuVHJhY2tlckRhdGFiYXMKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGRhdGFiYXNl
UGF0aCA9IHRyYWNrZXJEYXRhYmFzZVBhdGgoKTsKLSAgICBpZiAoZGF0YWJhc2VQYXRoLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFjcmVhdGVJZkRvZXNOb3RFeGlzdCAm
JiAhZmlsZUV4aXN0cyhkYXRhYmFzZVBhdGgpKQorICAgIGlmICghU1FMaXRlRmlsZVN5c3RlbTo6
ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGRhdGFiYXNlUGF0aCwgY3JlYXRlSWZEb2VzTm90RXhp
c3QpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtlQWxsRGlyZWN0b3JpZXMobV9kYXRhYmFz
ZURpcmVjdG9yeVBhdGgpOwogICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKGRhdGFiYXNlUGF0aCkp
IHsKICAgICAgICAgLy8gRklYTUU6IFdoYXQgZG8gZG8gaGVyZT8KICAgICAgICAgcmV0dXJuOwpA
QCAtMTkwLDkgKzE4NSw3IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvckRhdGFi
YXMKIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6Om9yaWdpblBhdGgoU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbikgY29uc3QKIHsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkKTsK
LSAgICBpZiAobV9kYXRhYmFzZURpcmVjdG9yeVBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2RhdGFi
YXNlRGlyZWN0b3J5UGF0aCwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgcmV0
dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgobV9kYXRh
YmFzZURpcmVjdG9yeVBhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkpOwogfQogCiBT
dHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZk5vdEV4aXN0cykKQEAg
LTIwNiw3ICsxOTksNyBAQCBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFi
CiAgICAgU3RyaW5nIG9yaWdpblBhdGggPSB0aGlzLT5vcmlnaW5QYXRoKG9yaWdpbik7CiAgICAg
CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBwYXRoIGZvciB0aGlzIFNlY3VyaXR5T3JpZ2luIGV4aXN0
cwotICAgIGlmIChjcmVhdGVJZk5vdEV4aXN0cyAmJiAhbWFrZUFsbERpcmVjdG9yaWVzKG9yaWdp
blBhdGgpKQorICAgIGlmIChjcmVhdGVJZk5vdEV4aXN0cyAmJiAhU1FMaXRlRmlsZVN5c3RlbTo6
ZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMob3JpZ2luUGF0aCkpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKICAgICAKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHBhdGggZm9yIHRoaXMg
ZGF0YWJhc2UgeWV0CkBAIC0yMjQsNyArMjE3LDcgQEAgU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6
ZnVsbFBhdGhGb3JEYXRhYgogICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwogCiAg
ICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpCi0gICAgICAgIHJldHVybiBwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOwor
ICAgICAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRv
UGF0aChvcmlnaW5QYXRoLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7CiAgICAgaWYgKCFj
cmVhdGVJZk5vdEV4aXN0cykKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgICAgICAKQEAg
LTI0MSwyMiArMjM0LDggQEAgU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRh
YgogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgcmVzdWx0ID0gc2VxdWVuY2VTdGF0ZW1l
bnQuc3RlcCgpOwogCi0gICAgLy8gVGhpcyBoYXMgYSByYW5nZSBvZiAyXjYzIGFuZCBzdGFydHMg
YXQgMCBmb3IgZXZlcnkgdGltZSBhIHVzZXIgcmVzZXRzIFNhZmFyaSAtCi0gICAgLy8gSSBjYW4n
dCBpbWFnaW5lIGl0J2Qgb3ZlciBvdmVyZmxvdwotICAgIGludDY0X3Qgc2VxID0gMDsKLSAgICBp
ZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykgewotICAgICAgICBzZXEgPSBzZXF1ZW5jZVN0YXRl
bWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKLSAgICB9IGVsc2UgaWYgKHJlc3VsdCAhPSBTUUxSZXN1
bHREb25lKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgc2VxdWVuY2VTdGF0ZW1lbnQu
ZmluYWxpemUoKTsKLQotICAgIFN0cmluZyBmaWxlbmFtZTsKLSAgICBkbyB7Ci0gICAgICAgICsr
c2VxOwotICAgICAgICBmaWxlbmFtZSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChvcmlnaW5Q
YXRoLCBTdHJpbmc6OmZvcm1hdCgiJTAxNmxseC5kYiIsIHNlcSkpOwotICAgIH0gd2hpbGUgKGZp
bGVFeGlzdHMoZmlsZW5hbWUpKTsKLQotICAgIGlmICghYWRkRGF0YWJhc2Uob3JpZ2luLCBuYW1l
LCBTdHJpbmc6OmZvcm1hdCgiJTAxNmxseC5kYiIsIHNlcSkpKQorICAgIFN0cmluZyBmaWxlTmFt
ZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmdldEZpbGVOYW1lRm9yTmV3RGF0YWJhc2Uob3JpZ2luUGF0
aCwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSwgbmFtZSwgJm1fZGF0YWJhc2UpOworICAg
IGlmICghYWRkRGF0YWJhc2Uob3JpZ2luLCBuYW1lLCBmaWxlTmFtZSkpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKIAogICAgIC8vIElmIHRoaXMgb3JpZ2luJ3MgcXVvdGEgaXMgYmVpbmcgdHJh
Y2tlZCAob3BlbiBoYW5kbGUgdG8gYSBkYXRhYmFzZSBpbiB0aGlzIG9yaWdpbiksIGFkZCB0aGlz
IG5ldyBkYXRhYmFzZQpAQCAtMjY0LDEwICsyNDMsMTAgQEAgU3RyaW5nIERhdGFiYXNlVHJhY2tl
cjo6ZnVsbFBhdGhGb3JEYXRhYgogICAgIHsKICAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFu
YWdlcj4gbG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKICAgICAgICAgaWYgKG9yaWdpblF1
b3RhTWFuYWdlcigpLnRyYWNrc09yaWdpbihvcmlnaW4pKQotICAgICAgICAgICAgb3JpZ2luUXVv
dGFNYW5hZ2VyKCkuYWRkRGF0YWJhc2Uob3JpZ2luLCBuYW1lLCBmaWxlbmFtZSk7CisgICAgICAg
ICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5hZGREYXRhYmFzZShvcmlnaW4sIG5hbWUsIGZpbGVO
YW1lKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIGZpbGVuYW1lOworICAgIHJldHVybiBmaWxl
TmFtZTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnBvcHVsYXRlT3JpZ2lucygpCkBAIC00
MjMsOCArNDAyLDcgQEAgdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6dXNhZwog
ICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAotICAg
IGxvbmcgbG9uZyBzaXplOwotICAgIHJldHVybiBnZXRGaWxlU2l6ZShwYXRoLCBzaXplKSA/IHNp
emUgOiAwOworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXpl
KHBhdGgpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKERhdGFi
YXNlKiBkYXRhYmFzZSkKQEAgLTY2NSw3ICs2NDMsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6
ZGVsZXRlT3JpZ2luKFNlY3VyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBkZWxldGVF
bXB0eURpcmVjdG9yeShvcmlnaW5QYXRoKG9yaWdpbikpOworICAgIFNRTGl0ZUZpbGVTeXN0ZW06
OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3Rvcnkob3JpZ2luUGF0aChvcmlnaW4pKTsKIAogICAg
IFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luUG9zc2libHlMYXN0UmVmZXJlbmNlID0gb3Jp
Z2luOwogICAgIHsKQEAgLTY3OSw4ICs2NTcsOCBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGVs
ZXRlT3JpZ2luKFNlY3VyCiAgICAgICAgIGlmIChtX3F1b3RhTWFwLT5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICAgICAgICAgIG1fZGF0
YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgICAgIGRlbGV0ZUZpbGUodHJhY2tlckRhdGFiYXNlUGF0
aCgpKTsKLSAgICAgICAgICAgIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KG1fZGF0YWJhc2VEaXJlY3Rv
cnlQYXRoKTsKKwkgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHRyYWNr
ZXJEYXRhYmFzZVBhdGgoKSk7CisJICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0
YWJhc2VEaXJlY3RvcnkobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgpOwogICAgICAgICB9CiAgICAg
fQogCkBAIC03NjMsNyArNzQxLDcgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFi
YXNlRmlsZQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZWxldGVkRGF0YWJhc2VzLnNp
emUoKTsgKytpKQogICAgICAgICBkZWxldGVkRGF0YWJhc2VzW2ldLT5tYXJrQXNEZWxldGVkQW5k
Q2xvc2UoKTsKIAotICAgIHJldHVybiBkZWxldGVGaWxlKGZ1bGxQYXRoKTsKKyAgICByZXR1cm4g
U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGZ1bGxQYXRoKTsKIH0KIAogdm9p
ZCBEYXRhYmFzZVRyYWNrZXI6OnNldENsaWVudChEYXRhYmFzZVRyYWNrZXJDbGllbnQqIGNsaWVu
dCkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmNwcAkocmV2aXNpb24gNDUy
NjkpCisrKyBXZWJDb3JlL3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKLSNpbmNsdWRl
ICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTgyLDggKzgyLDggQEAgdW5zaWduZWQgbG9uZyBsb25nIE9yaWdp
blVzYWdlUmVjb3JkOjpkaQogICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBtX2RhdGFiYXNl
TWFwLmdldCgqaVVua25vd24pLmZpbGVuYW1lOwogICAgICAgICBBU1NFUlQoIXBhdGguaXNFbXB0
eSgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgbG9uZyBsb25nIHNpemU7Ci0gICAgICAg
IGlmIChnZXRGaWxlU2l6ZShwYXRoLCBzaXplKSkKKyAgICAgICAgbG9uZyBsb25nIHNpemUgPSBT
UUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKHBhdGgpOworICAgICAgICBpZiAo
c2l6ZSA+IDApCiAgICAgICAgICAgICBtX2RhdGFiYXNlTWFwLnNldCgqaVVua25vd24sIERhdGFi
YXNlRW50cnkocGF0aCwgc2l6ZSkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIFdo
ZW4gd2UgY2FuJ3QgZGV0ZXJtaW5lIHRoZSBmaWxlIHNpemUsIHdlJ2xsIGp1c3QgaGF2ZSB0byBh
c3N1bWUgdGhlIGZpbGUgaXMgbWlzc2luZy9pbmFjY2Vzc2libGUuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31967</attachid>
            <date>2009-06-26 18:35:30 -0700</date>
            <delta_ts>2009-07-01 13:02:42 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>23244</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTMwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDktMDYtMjYgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRzIGFuIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW4gdGhlIERCIGNsYXNzZXMgYW5kIHRo
ZSBmaWxlCisgICAgICAgIHN5c3RlbSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFkZCBvdXIgb3duIGxv
Z2ljIGZvciBzdG9yaW5nLCBvcGVuaW5nLAorICAgICAgICBkZWxldGluZywgZXRjLiBkYXRhYmFz
ZXMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2
MDU0CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoK
KyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBwbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U6Om9wZW4pOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxl
U3lzdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FM
aXRlVkZTKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5l
d0RhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERh
dGFiYXNlRmlsZU5hbWVUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3Rl
bTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUpOgor
ICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmg6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRp
cmVjdG9yeU5hbWUpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2U6OmRhdGFiYXNlU2l6ZSk6CisgICAgICAgICogc3RvcmFnZS9EYXRh
YmFzZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpEYXRh
YmFzZVRyYWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2Vy
RGF0YWJhc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6b3BlblRy
YWNrZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Om9yaWdp
blBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRh
dGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dXNhZ2VGb3JEYXRh
YmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZSk6
CisgICAgICAgICogc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpPcmlnaW5Vc2FnZVJlY29yZDo6ZGlza1VzYWdlKToKKwogMjAwOS0wNi0yNiAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBl
ZCBieSBEYXZlIExldmluCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ1Mjk4KQorKysgV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjAyOCw2ICsyMDI4LDggQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVBdXRob3JpemVyLmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVGaWxlU3lzdGVtLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5
c3RlbS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwIFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaCBcCiAJV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNDUyOTgpCisrKyBX
ZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIyLDYgKzEzMjIsNyBAQCBj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfU1FMSVRFPTEpIHsKICAgICBTT1VSQ0VTICs9IFwKICAg
ICAgICAgcGxhdGZvcm0vc3FsL1NRTGl0ZUF1dGhvcml6ZXIuY3BwIFwKICAgICAgICAgcGxhdGZv
cm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL3NxbC9TUUxpdGVG
aWxlU3lzdGVtLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3Bw
IFwKICAgICAgICAgcGxhdGZvcm0vc3FsL1NRTGl0ZVRyYW5zYWN0aW9uLmNwcCBcCiAgICAgICAg
IHBsYXRmb3JtL3NxbC9TUUxWYWx1ZS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCShyZXZpc2lvbiA0NTI5OCkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTIwMTQwLDYgKzIwMTQwLDE0IEBACiAJ
CQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxw
bGF0Zm9ybVxzcWxcU1FMaXRlRmlsZVN5c3RlbS5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4N
CisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cc3FsXFNRTGl0ZUZp
bGVTeXN0ZW0uaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxzcWxcU1FMaXRlU3RhdGVtZW50LmNwcCINCiAJCQkJCT4N
CiAJCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5j
cHAJKHJldmlzaW9uIDQ1Mjk4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJEYXRh
YmFzZUF1dGhvcml6ZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU1FMaXRl
RmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogCiAjaW5jbHVkZSA8
c3FsaXRlMy5oPgpAQCAtNjAsOSArNjEsNyBAQCBib29sIFNRTGl0ZURhdGFiYXNlOjpvcGVuKGNv
bnN0IFN0cmluZyYgCiB7CiAgICAgY2xvc2UoKTsKICAgICAKLSAgICAvLyBTUUxpdGUgZXhwZWN0
cyBhIG51bGwgdGVybWluYXRvciBvbiBpdHMgVVRGLTE2IHN0cmluZ3MuCi0gICAgU3RyaW5nIHBh
dGggPSBmaWxlbmFtZTsKLSAgICBtX2xhc3RFcnJvciA9IHNxbGl0ZTNfb3BlbjE2KHBhdGguY2hh
cmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgJm1fZGIpOworICAgIG1fbGFzdEVycm9yID0g
U1FMaXRlRmlsZVN5c3RlbTo6b3BlbkRhdGFiYXNlKGZpbGVuYW1lLCAmbV9kYik7CiAgICAgaWYg
KG1fbGFzdEVycm9yICE9IFNRTElURV9PSykgewogICAgICAgICBMT0dfRVJST1IoIlNRTGl0ZSBk
YXRhYmFzZSBmYWlsZWQgdG8gbG9hZCBmcm9tICVzXG5DYXVzZSAtICVzIiwgZmlsZW5hbWUuYXNj
aWkoKS5kYXRhKCksCiAgICAgICAgICAgICBzcWxpdGUzX2Vycm1zZyhtX2RiKSk7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEyMyBAQAorLyoNCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUNCisgKiBtZXQ6DQorICoNCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlDQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcg0KKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCisgKiBkaXN0cmlidXRpb24uDQorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tDQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMNCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVA0KKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUg0KKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUDQorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsDQorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVA0KKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLA0KKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQ0KKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQN
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqLw0KKw0KKyNpbmNsdWRlICJj
b25maWcuaCINCisjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIg0KKw0KKyNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiDQorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiDQorI2luY2x1ZGUgIlNR
TGl0ZVN0YXRlbWVudC5oIg0KKyNpbmNsdWRlIDxzcWxpdGUzLmg+DQorDQorbmFtZXNwYWNlIFdl
YkNvcmUgew0KKw0KK1NRTGl0ZUZpbGVTeXN0ZW06OlNRTGl0ZUZpbGVTeXN0ZW0oKQ0KK3sNCit9
DQorDQordm9pZCBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpDQorew0KK30N
CisNCitpbnQgU1FMaXRlRmlsZVN5c3RlbTo6b3BlbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgZmls
ZU5hbWUsIHNxbGl0ZTMqKiBkYXRhYmFzZSkNCit7DQorICAgIC8vIFNRTGl0ZSBleHBlY3RzIGEg
bnVsbCB0ZXJtaW5hdG9yIG9uIGl0cyBVVEYtMTYgc3RyaW5ncy4NCisgICAgU3RyaW5nIHBhdGgg
PSBmaWxlTmFtZTsNCisgICAgcmV0dXJuIHNxbGl0ZTNfb3BlbjE2KHBhdGguY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKSwgZGF0YWJhc2UpOw0KK30NCisNCitTdHJpbmcgU1FMaXRlRmls
ZVN5c3RlbTo6Z2V0RmlsZU5hbWVGb3JOZXdEYXRhYmFzZShjb25zdCBTdHJpbmcmIGRiRGlyLCBj
b25zdCBTdHJpbmcmIGRiTmFtZSwNCisJCQkJCQkgICBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50
aWZpZXIsIFNRTGl0ZURhdGFiYXNlKiBkYikNCit7DQorICAgIC8vIHRyeSB0byBnZXQgdGhlIG5l
eHQgc2VxdWVuY2UgbnVtYmVyIGZyb20gdGhlIGdpdmVuIGRhdGFiYXNlDQorICAgIC8vIGlmIHdl
IGNhbid0IGdldCBhIG51bWJlciwgcmV0dXJuIGFuIGVtcHR5IHN0cmluZw0KKyAgICBTUUxpdGVT
dGF0ZW1lbnQgc2VxdWVuY2VTdGF0ZW1lbnQoKmRiLCAiU0VMRUNUIHNlcSBGUk9NIHNxbGl0ZV9z
ZXF1ZW5jZSBXSEVSRSBuYW1lPSdEYXRhYmFzZXMnOyIpOw0KKyAgICBpZiAoc2VxdWVuY2VTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQ0KKyAgICAgICAgcmV0dXJuIFN0cmluZygp
Ow0KKyAgICBpbnQgcmVzdWx0ID0gc2VxdWVuY2VTdGF0ZW1lbnQuc3RlcCgpOw0KKyAgICBpbnQ2
NF90IHNlcSA9IDA7DQorICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KQ0KKyAgICAgICAg
c2VxID0gc2VxdWVuY2VTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7DQorICAgIGVsc2UgaWYg
KHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKQ0KKyAgICAgICAgcmV0dXJuIFN0cmluZygpOw0KKyAg
ICBzZXF1ZW5jZVN0YXRlbWVudC5maW5hbGl6ZSgpOw0KKw0KKyAgICAvLyBpbmNyZW1lbnQgdGhl
IG51bWJlciB1bnRpbCB3ZSBjYW4gdXNlIGl0IHRvIGZvcm0gYSBmaWxlIG5hbWUgdGhhdCBkb2Vz
bid0IGV4aXN0DQorICAgIFN0cmluZyBmaWxlTmFtZTsNCisgICAgZG8gew0KKyAgICAgICAgKytz
ZXE7DQorICAgICAgICBmaWxlTmFtZSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChkYkRpciwg
U3RyaW5nOjpmb3JtYXQoIiUwMTZsbHguZGIiLCBzZXEpKTsNCisgICAgfSB3aGlsZSAoZmlsZUV4
aXN0cyhmaWxlTmFtZSkpOw0KKw0KKyAgICByZXR1cm4gZmlsZU5hbWU7DQorfQ0KKw0KK1N0cmlu
ZyBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkNCit7DQorICAgIHJldHVybiBwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQocGF0aCwgZmlsZU5hbWUpOw0KK30NCisNCitib29sIFNRTGl0
ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRGlyZWN0b3J5RXhpc3RzKGNvbnN0IFN0cmluZyYg
cGF0aCkNCit7DQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkNCisgICAgICAgIHJldHVybiBmYWxz
ZTsNCisgICAgcmV0dXJuIG1ha2VBbGxEaXJlY3RvcmllcyhwYXRoKTsNCit9DQorDQorYm9vbCBT
UUxpdGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSwgYm9vbCBjaGVja1BhdGhPbmx5KQ0KK3sNCisgICAgaWYgKGZpbGVOYW1lLmlzRW1w
dHkoKSkNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisNCisgICAgaWYgKGNoZWNrUGF0aE9ubHkp
IHsNCisgICAgICAgIFN0cmluZyBkaXIgPSBkaXJlY3RvcnlOYW1lKGZpbGVOYW1lKTsNCisgICAg
ICAgIHJldHVybiBlbnN1cmVEYXRhYmFzZURpcmVjdG9yeUV4aXN0cyhkaXIpOw0KKyAgICB9DQor
DQorICAgIHJldHVybiBmaWxlRXhpc3RzKGZpbGVOYW1lKTsNCit9DQorDQorYm9vbCBTUUxpdGVG
aWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCkNCit7DQorICAgIHJldHVybiBkZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsNCit9DQorDQor
Ym9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSkNCit7DQorICAgIHJldHVybiBkZWxldGVGaWxlKGZpbGVOYW1lKTsNCit9DQorDQor
bG9uZyBsb25nIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUoY29uc3QgU3Ry
aW5nJiBmaWxlTmFtZSkNCit7ICAgICAgICANCisgICAgbG9uZyBsb25nIHNpemU7DQorICAgIHJl
dHVybiBnZXRGaWxlU2l6ZShmaWxlTmFtZSwgc2l6ZSkgPyBzaXplIDogMDsNCit9DQorDQorfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQ0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZp
bGVTeXN0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxl
U3lzdGVtLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxl
U3lzdGVtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE0IEBACisvKg0KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQ0KKyAqIG1ldDoNCisgKg0KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
DQorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLg0KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUNCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyDQorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KKyAqIGRp
c3RyaWJ1dGlvbi4NCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzDQorICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUw0KKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UDQorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SDQorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQNCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwNCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZDQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
DQorICovDQorDQorI2lmbmRlZiBTUUxpdGVGaWxlU3lzdGVtX2gNCisjZGVmaW5lIFNRTGl0ZUZp
bGVTeXN0ZW1faA0KKw0KKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIg0KKyNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+DQorDQorc3RydWN0IHNxbGl0ZTM7DQorDQorbmFtZXNwYWNlIFdlYkNv
cmUgew0KKw0KK2NsYXNzIFNRTGl0ZURhdGFiYXNlOw0KKw0KKy8vIEEgY2xhc3MgdGhhdCBhYnN0
cmFjdHMgdGhlIGZpbGUgc3lzdGVtIHJlbGF0ZWQgb3BlcmF0aW9ucyByZXF1aXJlZA0KKy8vIGJ5
IHRoZSBXZWJLaXQgZGF0YWJhc2UgY29kZS4NCitjbGFzcyBTUUxpdGVGaWxlU3lzdGVtIHsNCitw
dWJsaWM6DQorICAgIC8vIFJlZ2lzdGVycyBhIHVzZXItZGVmaW5lZCBTUUxpdGUgVkZTLg0KKyAg
ICBzdGF0aWMgdm9pZCByZWdpc3RlclNRTGl0ZVZGUygpOw0KKw0KKyAgICAvLyBPcGVucyBhIGRh
dGFiYXNlIGZpbGUuDQorICAgIC8vDQorICAgIC8vIGZpbGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhl
IGRhdGFiYXNlIGZpbGUuDQorICAgIC8vIGRhdGFiYXNlIC0gVGhlIFNRTGl0ZSBzdHJ1Y3R1cmUg
dGhhdCByZXByZXNlbnRzIHRoZSBkYXRhYmFzZSBzdG9yZWQNCisgICAgLy8gICAgICAgICAgICBp
biB0aGUgZ2l2ZW4gZmlsZS4NCisgICAgc3RhdGljIGludCBvcGVuRGF0YWJhc2UoY29uc3QgU3Ry
aW5nJiBmaWxlTmFtZSwgc3FsaXRlMyoqIGRhdGFiYXNlKTsNCisNCisgICAgLy8gUmV0dXJucyB0
aGUgZmlsZSBuYW1lIGZvciBhIGRhdGFiYXNlLg0KKyAgICAvLw0KKyAgICAvLyBkYkRpciAtIFRo
ZSBkaXJlY3Rvcnkgd2hlcmUgYWxsIGRhdGFiYXNlcyBhcmUgc3RvcmVkLg0KKyAgICAvLyBkYk5h
bWUgLSBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UuDQorICAgIC8vIG9yaWdpbklkZW50aWZpZXIg
LSBUaGUgb3JpZ2luIHRoYXQgd2FudHMgdG8gdXNlIHRoaXMgZGF0YWJhc2UuDQorICAgIC8vIGRi
IC0gQSBkYXRhYmFzZSB3aXRoIGEgbnVtYmVyIGdlbmVyYXRvciB1c2VkIHRvIGNyZWF0ZSB1bmlx
dWUgZmlsZSBuYW1lcy4NCisgICAgc3RhdGljIFN0cmluZyBnZXRGaWxlTmFtZUZvck5ld0RhdGFi
YXNlKGNvbnN0IFN0cmluZyYgZGJEaXIsIGNvbnN0IFN0cmluZyYgZGJOYW1lLA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBvcmlnaW5J
ZGVudGlmaWVyLCBTUUxpdGVEYXRhYmFzZSogZGIpOw0KKw0KKyAgICAvLyBDcmVhdGVzIGFuIGFi
c29sdXRlIGZpbGUgcGF0aCBnaXZlbiBhIGRpcmVjdG9yeSBhbmQgYSBmaWxlIG5hbWUuDQorICAg
IC8vDQorICAgIC8vIHBhdGggLSBUaGUgZGlyZWN0b3J5Lg0KKyAgICAvLyBmaWxlTmFtZSAtIFRo
ZSBmaWxlIG5hbWUuDQorICAgIHN0YXRpYyBTdHJpbmcgYXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRv
UGF0aChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOw0KKw0KKyAg
ICAvLyBNYWtlcyBzdXJlIHRoZSBnaXZlbiBkaXJlY3RvcnkgZXhpc3RzLCBieSBjcmVhdGluZyBh
bGwgbWlzc2luZyBkaXJlY3Rvcmllcw0KKyAgICAvLyBvbiB0aGUgZ2l2ZW4gcGF0aC4NCisgICAg
Ly8NCisgICAgLy8gcGF0aCAtIFRoZSBkaXJlY3RvcnkuDQorICAgIHN0YXRpYyBib29sIGVuc3Vy
ZURhdGFiYXNlRGlyZWN0b3J5RXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCk7DQorDQorICAgIC8v
IElmICdjaGVja1BhdGhPbmx5JyBpcyBmYWxzZSwgdGhlbiB0aGlzIG1ldGhvZCBvbmx5IGNoZWNr
cyBpZiB0aGUgZ2l2ZW4gZmlsZSBleGlzdHMuDQorICAgIC8vIElmICdjaGVja1BhdGhPbmx5JyBp
cyB0cnVlLCB0aGVuIHRoaXMgbWV0aG9kIG1ha2VzIHN1cmUgYWxsIGRpcmVjdG9yaWVzIG9uIHRo
ZQ0KKyAgICAvLyBnaXZlbiBwYXRoIGV4aXN0IGJ5IGNyZWF0aW5nIHRoZSBtaXNzaW5nIG9uZXMs
IGFuZCBkb2VzIG5vdCBjaGVjayBpZiB0aGUgZmlsZQ0KKyAgICAvLyBpdHNlbGYgZXhpc3RzLg0K
KyAgICAvLw0KKyAgICAvLyBTb21ldGltZXMgd2UgZXhwZWN0IGEgREIgZmlsZSB0byBleGlzdDsg
b3RoZXIgdGltZXMsIHdlJ3JlIE9LIHdpdGggY3JlYXRpbmcgYSBuZXcNCisgICAgLy8gREIgZmls
ZSwgYnV0IHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB3
ZSB3YW50IHRvIHB1dCB0aGUNCisgICAgLy8gbmV3IERCIGZpbGUgZXhpc3RzLiBUaGlzIG1ldGhv
ZCBjb3ZlcnMgYm90aCBjYXNlcy4NCisgICAgLy8NCisgICAgLy8gZmlsZU5hbWUgLSBUaGUgZmls
ZSBuYW1lLg0KKyAgICAvLyBjaGVja1BhdGhPbmx5IC0gSWYgdHJ1ZSwgd2Ugb25seSBtYWtlIHN1
cmUgdGhhdCB0aGUgZ2l2ZW4gZGlyZWN0b3J5IGV4aXN0cy4NCisgICAgLy8gICAgICAgICAgICAg
ICAgIElmIGZhbHNlLCB3ZSBvbmx5IGNoZWNrIGlmIHRoZSBmaWxlIGV4aXN0cy4NCisgICAgc3Rh
dGljIGJvb2wgZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUs
IGJvb2wgY2hlY2tQYXRoT25seSk7DQorDQorICAgIC8vIERlbGV0ZXMgYW4gZW1wdHkgZGF0YWJh
c2UgZGlyZWN0b3J5Lg0KKyAgICAvLw0KKyAgICAvLyBwYXRoIC0gVGhlIGRpcmVjdG9yeS4NCisg
ICAgc3RhdGljIGJvb2wgZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShjb25zdCBTdHJpbmcm
IHBhdGgpOw0KKw0KKyAgICAvLyBEZWxldGVzIGEgZGF0YWJhc2UgZmlsZS4NCisgICAgLy8NCisg
ICAgLy8gZmlsZU5hbWUgLSBUaGUgZmlsZSBuYW1lLg0KKyAgICBzdGF0aWMgYm9vbCBkZWxldGVE
YXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7DQorDQorICAgIC8vIFJldHVybnMg
dGhlIHNpemUgb2YgdGhlIGRhdGFiYXNlIGZpbGUuDQorICAgIC8vDQorICAgIC8vIGZpbGVOYW1l
IC0gVGhlIGZpbGUgbmFtZS4NCisgICAgc3RhdGljIGxvbmcgbG9uZyBnZXREYXRhYmFzZUZpbGVT
aXplKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOw0KKw0KK3ByaXZhdGU6DQorICAgIC8vIGRvIG5v
dCBpbnN0YW50aWF0ZSB0aGlzIGNsYXNzDQorICAgIFNRTGl0ZUZpbGVTeXN0ZW0oKTsNCit9OyAv
LyBjbGFzcyBTUUxpdGVGaWxlU3lzdGVtDQorDQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQ0KKw0K
KyNlbmRpZg0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCShyZXZp
c2lvbiA0NTI5OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzMsOCArMTMzLDEwIEBAIFN0cmluZyBwYXRoR2V0RmlsZU5hbWUo
Y29uc3QgU3RyaW5nJiBwYXQKIAogU3RyaW5nIGRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBw
YXRoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOworICBT
dHJpbmcgZmlsZU5hbWUgPSBwYXRoR2V0RmlsZU5hbWUocGF0aCk7CisgIFN0cmluZyBkaXJOYW1l
ID0gU3RyaW5nKHBhdGgpOworICBkaXJOYW1lLnRydW5jYXRlKGRpck5hbWUubGVuZ3RoKCkgLSBw
YXRoR2V0RmlsZU5hbWUocGF0aCkubGVuZ3RoKCkpOworICByZXR1cm4gZGlyTmFtZTsKIH0KIAog
c3RhdGljIFN0cmluZyBidW5kbGVOYW1lKCkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNp
b24gNDUyOTgpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRmls
ZVN5c3RlbS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTQ4LDYgKzQ3LDcgQEAKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiT3JpZ2luUXVvdGFNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiU1FM
aXRlRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAi
U1FMaXRlU3RhdGVtZW50LmgiCiAjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCiAjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KQEAgLTMzOCwxMCArMzM4LDcgQEAgdm9pZCBEYXRhYmFzZTo6c3Rv
cCgpCiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZTo6ZGF0YWJhc2VTaXplKCkgY29uc3QK
IHsKLSAgICBsb25nIGxvbmcgc2l6ZTsKLSAgICBpZiAoIWdldEZpbGVTaXplKG1fZmlsZW5hbWUs
IHNpemUpKQotICAgICAgICBzaXplID0gMDsKLSAgICByZXR1cm4gc2l6ZTsKKyAgICByZXR1cm4g
U1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShtX2ZpbGVuYW1lKTsKIH0KIAog
dW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlOjptYXhpbXVtU2l6ZSgpIGNvbnN0CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAkocmV2aXNpb24gNDUyOTgpCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1
LDEyIEBACiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXJD
bGllbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiT3JpZ2luUXVvdGFNYW5hZ2VyLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW5IYXNoLmgiCisjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogI2lu
Y2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNjksNiArNjksNyBAQCBEYXRhYmFzZVRy
YWNrZXI6OkRhdGFiYXNlVHJhY2tlcigpCiAgICAgLCBtX3RocmVhZChjdXJyZW50VGhyZWFkKCkp
CiAjZW5kaWYKIHsKKyAgU1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKTsKIH0K
IAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChjb25zdCBT
dHJpbmcmIHBhdGgpCkBAIC04Nyw5ICs4OCw3IEBAIGNvbnN0IFN0cmluZyYgRGF0YWJhc2VUcmFj
a2VyOjpkYXRhYmFzZUQKIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBh
dGgoKSBjb25zdAogewogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWQpOwot
ICAgIGlmIChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLSAgICByZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fZGF0YWJh
c2VEaXJlY3RvcnlQYXRoLCAiRGF0YWJhc2VzLmRiIik7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVT
eXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgobV9kYXRhYmFzZURpcmVjdG9yeVBh
dGgsICJEYXRhYmFzZXMuZGIiKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6Om9wZW5UcmFj
a2VyRGF0YWJhc2UoYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCkKQEAgLTEwMCwxMyArOTksOSBA
QCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFN0cmluZyBkYXRhYmFzZVBhdGggPSB0cmFja2VyRGF0YWJhc2VQYXRoKCk7Ci0g
ICAgaWYgKGRhdGFiYXNlUGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghY3JlYXRlSWZEb2VzTm90RXhpc3QgJiYgIWZpbGVFeGlzdHMoZGF0YWJhc2VQYXRoKSkKKyAg
ICBpZiAoIVNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyhkYXRhYmFz
ZVBhdGgsIGNyZWF0ZUlmRG9lc05vdEV4aXN0KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbWFr
ZUFsbERpcmVjdG9yaWVzKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoKTsKICAgICBpZiAoIW1fZGF0
YWJhc2Uub3BlbihkYXRhYmFzZVBhdGgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGRvIGRv
IGhlcmU/CiAgICAgICAgIHJldHVybjsKQEAgLTE5MCw5ICsxODUsNyBAQCBib29sIERhdGFiYXNl
VHJhY2tlcjo6aGFzRW50cnlGb3JEYXRhYmFzCiBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpvcmln
aW5QYXRoKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWQoKSA9PSBtX3RocmVhZCk7Ci0gICAgaWYgKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRo
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsIG9yaWdpbi0+ZGF0YWJh
c2VJZGVudGlmaWVyKCkpOworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRh
YmFzZUZpbGVOYW1lVG9QYXRoKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBvcmlnaW4tPmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKIH0KIAogU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhG
b3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wgY3JlYXRlSWZOb3RFeGlzdHMpCkBAIC0yMDYsNyArMTk5LDcgQEAgU3RyaW5nIERhdGFiYXNl
VHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYgogICAgIFN0cmluZyBvcmlnaW5QYXRoID0gdGhpcy0+
b3JpZ2luUGF0aChvcmlnaW4pOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgcGF0aCBmb3Ig
dGhpcyBTZWN1cml0eU9yaWdpbiBleGlzdHMKLSAgICBpZiAoY3JlYXRlSWZOb3RFeGlzdHMgJiYg
IW1ha2VBbGxEaXJlY3RvcmllcyhvcmlnaW5QYXRoKSkKKyAgICBpZiAoY3JlYXRlSWZOb3RFeGlz
dHMgJiYgIVNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRGlyZWN0b3J5RXhpc3RzKG9y
aWdpblBhdGgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgCiAgICAgLy8gU2VlIGlm
IHdlIGhhdmUgYSBwYXRoIGZvciB0aGlzIGRhdGFiYXNlIHlldApAQCAtMjI0LDcgKzIxNyw3IEBA
IFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICBpbnQgcmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKTsKIAogICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KQot
ICAgICAgICByZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG9yaWdpblBhdGgsIHN0YXRl
bWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06
OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENv
bHVtblRleHQoMCkpOwogICAgIGlmICghY3JlYXRlSWZOb3RFeGlzdHMpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKICAgICAgICAgCkBAIC0yNDEsMjIgKzIzNCw4IEBAIFN0cmluZyBEYXRhYmFz
ZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAg
IHJlc3VsdCA9IHNlcXVlbmNlU3RhdGVtZW50LnN0ZXAoKTsKIAotICAgIC8vIFRoaXMgaGFzIGEg
cmFuZ2Ugb2YgMl42MyBhbmQgc3RhcnRzIGF0IDAgZm9yIGV2ZXJ5IHRpbWUgYSB1c2VyIHJlc2V0
cyBTYWZhcmkgLQotICAgIC8vIEkgY2FuJ3QgaW1hZ2luZSBpdCdkIG92ZXIgb3ZlcmZsb3cKLSAg
ICBpbnQ2NF90IHNlcSA9IDA7Ci0gICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpIHsKLSAg
ICAgICAgc2VxID0gc2VxdWVuY2VTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7Ci0gICAgfSBl
bHNlIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIHNlcXVlbmNlU3RhdGVtZW50LmZpbmFsaXplKCk7Ci0KLSAgICBTdHJpbmcgZmlsZW5h
bWU7Ci0gICAgZG8gewotICAgICAgICArK3NlcTsKLSAgICAgICAgZmlsZW5hbWUgPSBwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQob3JpZ2luUGF0aCwgU3RyaW5nOjpmb3JtYXQoIiUwMTZsbHguZGIi
LCBzZXEpKTsKLSAgICB9IHdoaWxlIChmaWxlRXhpc3RzKGZpbGVuYW1lKSk7Ci0KLSAgICBpZiAo
IWFkZERhdGFiYXNlKG9yaWdpbiwgbmFtZSwgU3RyaW5nOjpmb3JtYXQoIiUwMTZsbHguZGIiLCBz
ZXEpKSkKKyAgICBTdHJpbmcgZmlsZU5hbWUgPSBTUUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFt
ZUZvck5ld0RhdGFiYXNlKG9yaWdpblBhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCks
IG5hbWUsICZtX2RhdGFiYXNlKTsKKyAgICBpZiAoIWFkZERhdGFiYXNlKG9yaWdpbiwgbmFtZSwg
ZmlsZU5hbWUpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICAvLyBJZiB0aGlzIG9y
aWdpbidzIHF1b3RhIGlzIGJlaW5nIHRyYWNrZWQgKG9wZW4gaGFuZGxlIHRvIGEgZGF0YWJhc2Ug
aW4gdGhpcyBvcmlnaW4pLCBhZGQgdGhpcyBuZXcgZGF0YWJhc2UKQEAgLTI2NCwxMCArMjQzLDEw
IEBAIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICB7CiAgICAg
ICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IGxvY2tlcihvcmlnaW5RdW90YU1hbmFnZXIo
KSk7CiAgICAgICAgIGlmIChvcmlnaW5RdW90YU1hbmFnZXIoKS50cmFja3NPcmlnaW4ob3JpZ2lu
KSkKLSAgICAgICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLmFkZERhdGFiYXNlKG9yaWdpbiwg
bmFtZSwgZmlsZW5hbWUpOworICAgICAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkuYWRkRGF0
YWJhc2Uob3JpZ2luLCBuYW1lLCBmaWxlTmFtZSk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBm
aWxlbmFtZTsKKyAgICByZXR1cm4gZmlsZU5hbWU7CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2Vy
Ojpwb3B1bGF0ZU9yaWdpbnMoKQpAQCAtNDIzLDggKzQwMiw3IEBAIHVuc2lnbmVkIGxvbmcgbG9u
ZyBEYXRhYmFzZVRyYWNrZXI6OnVzYWcKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiAwOwogICAgICAgICAKLSAgICBsb25nIGxvbmcgc2l6ZTsKLSAgICByZXR1cm4gZ2V0
RmlsZVNpemUocGF0aCwgc2l6ZSkgPyBzaXplIDogMDsKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5
c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShwYXRoKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNr
ZXI6OmFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2UpCkBAIC02NjUsNyArNjQzLDcg
QEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbihTZWN1cgogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgZGVsZXRlRW1wdHlEaXJlY3Rvcnkob3JpZ2luUGF0aChvcmlnaW4p
KTsKKyAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KG9y
aWdpblBhdGgob3JpZ2luKSk7CiAKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpblBv
c3NpYmx5TGFzdFJlZmVyZW5jZSA9IG9yaWdpbjsKICAgICB7CkBAIC02NzksOCArNjU3LDggQEAg
dm9pZCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbihTZWN1cgogICAgICAgICBpZiAobV9x
dW90YU1hcC0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4o
KSkKICAgICAgICAgICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICBkZWxl
dGVGaWxlKHRyYWNrZXJEYXRhYmFzZVBhdGgoKSk7Ci0gICAgICAgICAgICBkZWxldGVFbXB0eURp
cmVjdG9yeShtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CisJICAgIFNRTGl0ZUZpbGVTeXN0ZW06
OmRlbGV0ZURhdGFiYXNlRmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOworCSAgICBTUUxpdGVG
aWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KG1fZGF0YWJhc2VEaXJlY3Rv
cnlQYXRoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzYzLDcgKzc0MSw3IEBAIGJvb2wgRGF0
YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZpbGUKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZGVsZXRlZERhdGFiYXNlcy5zaXplKCk7ICsraSkKICAgICAgICAgZGVsZXRlZERhdGFi
YXNlc1tpXS0+bWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CiAKLSAgICByZXR1cm4gZGVsZXRlRmls
ZShmdWxsUGF0aCk7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNl
RmlsZShmdWxsUGF0aCk7CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXRDbGllbnQoRGF0
YWJhc2VUcmFja2VyQ2xpZW50KiBjbGllbnQpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvT3JpZ2lu
VXNhZ2VSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5Vc2Fn
ZVJlY29yZC5jcHAJKHJldmlzaW9uIDQ1Mjk4KQorKysgV2ViQ29yZS9zdG9yYWdlL09yaWdpblVz
YWdlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaWYgRU5B
QkxFKERBVEFCQVNFKQogCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlNRTGl0
ZUZpbGVTeXN0ZW0uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04Miw4ICs4Miw4IEBA
IHVuc2lnbmVkIGxvbmcgbG9uZyBPcmlnaW5Vc2FnZVJlY29yZDo6ZGkKICAgICAgICAgY29uc3Qg
U3RyaW5nJiBwYXRoID0gbV9kYXRhYmFzZU1hcC5nZXQoKmlVbmtub3duKS5maWxlbmFtZTsKICAg
ICAgICAgQVNTRVJUKCFwYXRoLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
IGxvbmcgbG9uZyBzaXplOwotICAgICAgICBpZiAoZ2V0RmlsZVNpemUocGF0aCwgc2l6ZSkpCisg
ICAgICAgIGxvbmcgbG9uZyBzaXplID0gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxl
U2l6ZShwYXRoKTsKKyAgICAgICAgaWYgKHNpemUgPiAwKQogICAgICAgICAgICAgbV9kYXRhYmFz
ZU1hcC5zZXQoKmlVbmtub3duLCBEYXRhYmFzZUVudHJ5KHBhdGgsIHNpemUpKTsKICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAvLyBXaGVuIHdlIGNhbid0IGRldGVybWluZSB0aGUgZmlsZSBz
aXplLCB3ZSdsbCBqdXN0IGhhdmUgdG8gYXNzdW1lIHRoZSBmaWxlIGlzIG1pc3NpbmcvaW5hY2Nl
c3NpYmxlLgpJbmRleDogV2ViS2l0L3dpbi9XZWJLaXRETEwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC93aW4vV2ViS2l0RExMLmNwcAkocmV2aXNpb24gNDUyOTgpCisrKyBXZWJLaXQvd2luL1dl
YktpdERMTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJX
ZWJLaXRDbGFzc0ZhY3RvcnkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvSWNvbkRhdGFiYXNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Mb2NhbFN0b3Jh
Z2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VH
cm91cC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVGhlbWVXaW4uaD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32136</attachid>
            <date>2009-07-01 13:02:42 -0700</date>
            <delta_ts>2009-07-01 14:15:58 -0700</delta_ts>
            <desc>new patch with a bug fix + xcode changes</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>27642</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTQ0NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMDktMDctMDEgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRzIGFuIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW4gdGhlIERCIGNsYXNzZXMgYW5kIHRo
ZSBmaWxlCisgICAgICAgIHN5c3RlbSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFkZCBvdXIgb3duIGxv
Z2ljIGZvciBzdG9yaW5nLCBvcGVuaW5nLAorICAgICAgICBkZWxldGluZywgZXRjLiBkYXRhYmFz
ZXMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2
MDU0CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoK
KyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBwbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U6Om9wZW4pOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxl
U3lzdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FM
aXRlVkZTKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5l
d0RhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERh
dGFiYXNlRmlsZU5hbWVUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3Rl
bTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUpOgor
ICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmg6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRp
cmVjdG9yeU5hbWUpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2U6OmRhdGFiYXNlU2l6ZSk6CisgICAgICAgICogc3RvcmFnZS9EYXRh
YmFzZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpEYXRh
YmFzZVRyYWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2Vy
RGF0YWJhc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6b3BlblRy
YWNrZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Om9yaWdp
blBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRh
dGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dXNhZ2VGb3JEYXRh
YmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZSk6
CisgICAgICAgICogc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpPcmlnaW5Vc2FnZVJlY29yZDo6ZGlza1VzYWdlKToKKworCiAyMDA5LTA3LTAxICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuaWtvbGFzLnppbW1lcm1hbm5AdG9yY2htb2JpbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEdlb3JnZSBTdGFpa29zLgpJbmRleDogV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA0
NTQ0NCkKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTIwMzgs
NiArMjAzOCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMaXRlQXV0aG9yaXplci5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFi
YXNlLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaCBcCisJV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAgXAorCVdlYkNvcmUvcGxhdGZv
cm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRl
U3RhdGVtZW50LmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50Lmgg
XAogCVdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVRyYW5zYWN0aW9uLmNwcCBcCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJl
dmlzaW9uIDQ1NDQ0KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAt
MTMyNiw2ICsxMzI2LDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NRTElURT0xKSB7CiAg
ICAgU09VUkNFUyArPSBcCiAgICAgICAgIHBsYXRmb3JtL3NxbC9TUUxpdGVBdXRob3JpemVyLmNw
cCBcCiAgICAgICAgIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAgXAorICAgICAgICBw
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL3NxbC9TUUxpdGVUcmFuc2Fj
dGlvbi5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9zcWwvU1FMVmFsdWUuY3BwIFwKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDU0NDQpCisrKyBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMDE0
MCw2ICsyMDE0MCwxNCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cc3FsXFNRTGl0ZUZpbGVTeXN0ZW0uY3BwIg0KKwkJ
CQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXHNxbFxTUUxpdGVGaWxlU3lzdGVtLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJ
CQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cc3FsXFNRTGl0ZVN0YXRl
bWVudC5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNDU0NDQpCisrKyBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzc4MCw2
ICszNzgwLDggQEAKIAkJQjJGQTNFMTgwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHWm9vbUV2ZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRkEz
RDMwMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1pvb21FdmVudC5jcHAgKi87IH07CiAJCUIyRkEz
RTE5MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1pvb21FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJGQTNEMzEwQUI3NUE2RjAwMEU1QUM0IC8q
IEpTU1ZHWm9vbUV2ZW50LmggKi87IH07CiAJCUI1MEY1QjgxMEU5NkNEOTkwMEFENzFBNiAvKiBX
ZWJDb3JlT2JqQ0V4dHJhcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEI1MEY1QjgwMEU5NkNEOTkwMEFENzFBNiAvKiBXZWJDb3JlT2JqQ0V4dHJhcy5t
bSAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJfRkxBR1MgPSAiLVduby1kZXByZWNhdGVkLWRlY2xh
cmF0aW9ucyI7IH07IH07CisJCUI1QTY4NDIyMEZGQUJFOTgwMEQyNDY4OSAvKiBTUUxpdGVGaWxl
U3lzdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
NUE2ODQyMTBGRkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5oICovOyB9OworCQlC
NUE2ODQyNDBGRkFCRUFBMDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUE2ODQyMzBGRkFCRUFBMDBE
MjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5jcHAgKi87IH07CiAJCUJDMDBGMDA0MEUwQTE4NTUw
MEZEMDRFMyAvKiBET01GaWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovOyB9Owog
CQlCQzAwRjAwNTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZGMEUwQTE4NTUwMEZEMDRFMyAv
KiBET01GaWxlLm1tICovOyB9OwogCQlCQzAwRjAwNjBFMEExODU1MDBGRDA0RTMgLyogRE9NRmls
ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzAwRjAwMDBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZUludGVybmFsLmggKi87IH07CkBA
IC04NTg0LDYgKzg1ODYsOCBAQAogCQlCMkZBM0QzMDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkda
b29tRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZH
Wm9vbUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJGQTNEMzEwQUI3
NUE2RjAwMEU1QUM0IC8qIEpTU1ZHWm9vbUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1NWR1pvb21FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCNTBGNUI4MDBFOTZDRDk5MDBBRDcxQTYgLyogV2ViQ29yZU9iakNFeHRyYXMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlT2JqQ0V4dHJhcy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjVBNjg0MjEwRkZBQkU5ODAwRDI0Njg5IC8q
IFNRTGl0ZUZpbGVTeXN0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU1FM
aXRlRmlsZVN5c3RlbS5oOyBwYXRoID0gc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjVBNjg0MjMwRkZBQkVBQTAwRDI0Njg5IC8qIFNRTGl0ZUZp
bGVTeXN0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU1FMaXRl
RmlsZVN5c3RlbS5jcHA7IHBhdGggPSBzcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDBFRkZFMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUZpbGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMEVGRkYwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01GaWxlLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAwRjAwMDBFMEExODU1MDBGRDA0RTMgLyog
RE9NRmlsZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUZp
bGVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTUxNCw2ICs5NTE4
LDggQEAKIAkJMUEyRTZFNTYwQ0M1NTFFMDAwNEEyMDYyIC8qIHNxbCAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQjVBNjg0MjMwRkZBQkVBQTAwRDI0Njg5
IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwICovLAorCQkJCUI1QTY4NDIxMEZGQUJFOTgwMEQyNDY4
OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmggKi8sCiAJCQkJMUEyRTZFNTcwQ0M1NTIxMzAwNEEyMDYy
IC8qIFNRTFZhbHVlLmNwcCAqLywKIAkJCQkxQTJFNkU1ODBDQzU1MjEzMDA0QTIwNjIgLyogU1FM
VmFsdWUuaCAqLywKIAkJCQkxQTJFNkU3ODBDQzU1NkQ1MDA0QTIwNjIgLyogU1FMaXRlQXV0aG9y
aXplci5jcHAgKi8sCkBAIC0xNjkxMyw2ICsxNjkxOSw3IEBACiAJCQkJQkNCQ0FFM0QwRkYxOTM5
OTAwMDc2MkFFIC8qIEpTRGF0YUdyaWREYXRhU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
NTBEMEU4MzBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM3REFBRUYwRkY5NjE1RDAwQ0UwMTM4IC8qIERPTURhdGFHcmlkRGF0YVNvdXJj
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjVBNjg0MjIwRkZBQkU5ODAwRDI0Njg5IC8qIFNRTGl0
ZUZpbGVTeXN0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTg5MjcsNiArMTg5MzQsNyBAQAogCQkJ
CUJDNzdEMjM5MEZGMjk4MDgwMDcwODg3QiAvKiBEYXRhR3JpZENvbHVtbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlDNTBEMEU4MjBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFnZU5hbWVzcGFjZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzdEQUFFRTBGRjk2MTVEMDBDRTAxMzggLyogRE9NRGF0
YUdyaWREYXRhU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUI1QTY4NDI0MEZGQUJFQUEw
MEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAkocmV2aXNpb24gNDU0NDQpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXplci5oIgogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAi
U1FMaXRlU3RhdGVtZW50LmgiCiAKICNpbmNsdWRlIDxzcWxpdGUzLmg+CkBAIC02MCw5ICs2MSw3
IEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6Om9wZW4oY29uc3QgU3RyaW5nJiAKIHsKICAgICBjbG9z
ZSgpOwogICAgIAotICAgIC8vIFNRTGl0ZSBleHBlY3RzIGEgbnVsbCB0ZXJtaW5hdG9yIG9uIGl0
cyBVVEYtMTYgc3RyaW5ncy4KLSAgICBTdHJpbmcgcGF0aCA9IGZpbGVuYW1lOwotICAgIG1fbGFz
dEVycm9yID0gc3FsaXRlM19vcGVuMTYocGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlv
bigpLCAmbV9kYik7CisgICAgbV9sYXN0RXJyb3IgPSBTUUxpdGVGaWxlU3lzdGVtOjpvcGVuRGF0
YWJhc2UoZmlsZW5hbWUsICZtX2RiKTsKICAgICBpZiAobV9sYXN0RXJyb3IgIT0gU1FMSVRFX09L
KSB7CiAgICAgICAgIExPR19FUlJPUigiU1FMaXRlIGRhdGFiYXNlIGZhaWxlZCB0byBsb2FkIGZy
b20gJXNcbkNhdXNlIC0gJXMiLCBmaWxlbmFtZS5hc2NpaSgpLmRhdGEoKSwKICAgICAgICAgICAg
IHNxbGl0ZTNfZXJybXNnKG1fZGIpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0
ZUZpbGVTeXN0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0
ZUZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI4IEBACisvKg0KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAq
DQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQ0KKyAqIG1ldDoNCisgKg0KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0DQorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUNCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyDQorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQ0KKyAqIGRpc3RyaWJ1dGlvbi4NCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUw0KKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UDQorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SDQorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQNCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwNCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZDQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuDQorICovDQorDQorI2luY2x1ZGUgImNvbmZpZy5oIg0KKyNpbmNsdWRlICJTUUxp
dGVGaWxlU3lzdGVtLmgiDQorDQorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCINCisjaW5jbHVkZSAi
U1FMaXRlRGF0YWJhc2UuaCINCisjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiDQorI2luY2x1
ZGUgPHNxbGl0ZTMuaD4NCisNCituYW1lc3BhY2UgV2ViQ29yZSB7DQorDQorU1FMaXRlRmlsZVN5
c3RlbTo6U1FMaXRlRmlsZVN5c3RlbSgpDQorew0KK30NCisNCit2b2lkIFNRTGl0ZUZpbGVTeXN0
ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKCkNCit7DQorfQ0KKw0KK2ludCBTUUxpdGVGaWxlU3lzdGVt
OjpvcGVuRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgc3FsaXRlMyoqIGRhdGFiYXNl
KQ0KK3sNCisgICAgLy8gU1FMaXRlIGV4cGVjdHMgYSBudWxsIHRlcm1pbmF0b3Igb24gaXRzIFVU
Ri0xNiBzdHJpbmdzLg0KKyAgICBTdHJpbmcgcGF0aCA9IGZpbGVOYW1lOw0KKyAgICByZXR1cm4g
c3FsaXRlM19vcGVuMTYocGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBkYXRh
YmFzZSk7DQorfQ0KKw0KK1N0cmluZyBTUUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5l
d0RhdGFiYXNlKGNvbnN0IFN0cmluZyYgZGJEaXIsIGNvbnN0IFN0cmluZyYgZGJOYW1lLA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyYgb3JpZ2luSWRlbnRpZmllciwgU1FMaXRlRGF0YWJhc2UqIGRiKQ0KK3sNCisgICAgLy8g
ZGJOYW1lIGFuZCBvcmlnaW5JZGVudGlmaWVyIG5vdCB1c2VkIGluIHRoZSBkZWZhdWx0IFdlYktp
dCBpbXBsZW1lbnRhdGlvbg0KKyAgICAvLyB0b3VjaCB0aGVtIHNvIGdjYyBkb2Vzbid0IGNvbXBs
YWluIGFib3V0IHRoYXQgd2hlbiBidWlsZGluZyBvbiBNYWMNCisgICAgU3RyaW5nIHVudXNlZCA9
IGRiTmFtZTsNCisgICAgdW51c2VkID0gb3JpZ2luSWRlbnRpZmllcjsNCisNCisgICAgLy8gdHJ5
IHRvIGdldCB0aGUgbmV4dCBzZXF1ZW5jZSBudW1iZXIgZnJvbSB0aGUgZ2l2ZW4gZGF0YWJhc2UN
CisgICAgLy8gaWYgd2UgY2FuJ3QgZ2V0IGEgbnVtYmVyLCByZXR1cm4gYW4gZW1wdHkgc3RyaW5n
DQorICAgIFNRTGl0ZVN0YXRlbWVudCBzZXF1ZW5jZVN0YXRlbWVudCgqZGIsICJTRUxFQ1Qgc2Vx
IEZST00gc3FsaXRlX3NlcXVlbmNlIFdIRVJFIG5hbWU9J0RhdGFiYXNlcyc7Iik7DQorICAgIGlm
IChzZXF1ZW5jZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spDQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7DQorICAgIGludCByZXN1bHQgPSBzZXF1ZW5jZVN0YXRlbWVudC5zdGVw
KCk7DQorICAgIGludDY0X3Qgc2VxID0gMDsNCisgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRS
b3cpDQorICAgICAgICBzZXEgPSBzZXF1ZW5jZVN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsN
CisgICAgZWxzZSBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpDQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7DQorICAgIHNlcXVlbmNlU3RhdGVtZW50LmZpbmFsaXplKCk7DQorDQorICAgIC8v
IGluY3JlbWVudCB0aGUgbnVtYmVyIHVudGlsIHdlIGNhbiB1c2UgaXQgdG8gZm9ybSBhIGZpbGUg
bmFtZSB0aGF0IGRvZXNuJ3QgZXhpc3QNCisgICAgU3RyaW5nIGZpbGVOYW1lOw0KKyAgICBkbyB7
DQorICAgICAgICArK3NlcTsNCisgICAgICAgIGZpbGVOYW1lID0gcGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KGRiRGlyLCBTdHJpbmc6OmZvcm1hdCgiJTAxNmxseC5kYiIsIHNlcSkpOw0KKyAgICB9
IHdoaWxlIChmaWxlRXhpc3RzKGZpbGVOYW1lKSk7DQorDQorICAgIHJldHVybiBTdHJpbmc6OmZv
cm1hdCgiJTAxNmxseC5kYiIsIHNlcSk7DQorfQ0KKw0KK1N0cmluZyBTUUxpdGVGaWxlU3lzdGVt
OjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSkNCit7DQorICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQocGF0aCwgZmlsZU5hbWUpOw0KK30NCisNCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmVuc3Vy
ZURhdGFiYXNlRGlyZWN0b3J5RXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkNCit7DQorICAgIGlm
IChwYXRoLmlzRW1wdHkoKSkNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgcmV0dXJuIG1h
a2VBbGxEaXJlY3RvcmllcyhwYXRoKTsNCit9DQorDQorYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpl
bnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgYm9vbCBjaGVj
a1BhdGhPbmx5KQ0KK3sNCisgICAgaWYgKGZpbGVOYW1lLmlzRW1wdHkoKSkNCisgICAgICAgIHJl
dHVybiBmYWxzZTsNCisNCisgICAgaWYgKGNoZWNrUGF0aE9ubHkpIHsNCisgICAgICAgIFN0cmlu
ZyBkaXIgPSBkaXJlY3RvcnlOYW1lKGZpbGVOYW1lKTsNCisgICAgICAgIHJldHVybiBlbnN1cmVE
YXRhYmFzZURpcmVjdG9yeUV4aXN0cyhkaXIpOw0KKyAgICB9DQorDQorICAgIHJldHVybiBmaWxl
RXhpc3RzKGZpbGVOYW1lKTsNCit9DQorDQorYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVF
bXB0eURhdGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkNCit7DQorICAgIHJldHVy
biBkZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsNCit9DQorDQorYm9vbCBTUUxpdGVGaWxlU3lz
dGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkNCit7DQorICAg
IHJldHVybiBkZWxldGVGaWxlKGZpbGVOYW1lKTsNCit9DQorDQorbG9uZyBsb25nIFNRTGl0ZUZp
bGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkNCit7
ICAgICAgICANCisgICAgbG9uZyBsb25nIHNpemU7DQorICAgIHJldHVybiBnZXRGaWxlU2l6ZShm
aWxlTmFtZSwgc2l6ZSkgPyBzaXplIDogMDsNCit9DQorDQorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQ0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTE0IEBACisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQ0KKyAqIG1ldDoNCisgKg0KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUNCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyDQorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KKyAqIGRpc3RyaWJ1dGlvbi4NCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
DQorICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20NCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUw0KKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
DQorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SDQorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQNCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwNCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UDQorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZDQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICovDQorDQorI2lmbmRl
ZiBTUUxpdGVGaWxlU3lzdGVtX2gNCisjZGVmaW5lIFNRTGl0ZUZpbGVTeXN0ZW1faA0KKw0KKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIg0KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+DQor
DQorc3RydWN0IHNxbGl0ZTM7DQorDQorbmFtZXNwYWNlIFdlYkNvcmUgew0KKw0KK2NsYXNzIFNR
TGl0ZURhdGFiYXNlOw0KKw0KKy8vIEEgY2xhc3MgdGhhdCBhYnN0cmFjdHMgdGhlIGZpbGUgc3lz
dGVtIHJlbGF0ZWQgb3BlcmF0aW9ucyByZXF1aXJlZA0KKy8vIGJ5IHRoZSBXZWJLaXQgZGF0YWJh
c2UgY29kZS4NCitjbGFzcyBTUUxpdGVGaWxlU3lzdGVtIHsNCitwdWJsaWM6DQorICAgIC8vIFJl
Z2lzdGVycyBhIHVzZXItZGVmaW5lZCBTUUxpdGUgVkZTLg0KKyAgICBzdGF0aWMgdm9pZCByZWdp
c3RlclNRTGl0ZVZGUygpOw0KKw0KKyAgICAvLyBPcGVucyBhIGRhdGFiYXNlIGZpbGUuDQorICAg
IC8vDQorICAgIC8vIGZpbGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlIGZpbGUuDQor
ICAgIC8vIGRhdGFiYXNlIC0gVGhlIFNRTGl0ZSBzdHJ1Y3R1cmUgdGhhdCByZXByZXNlbnRzIHRo
ZSBkYXRhYmFzZSBzdG9yZWQNCisgICAgLy8gICAgICAgICAgICBpbiB0aGUgZ2l2ZW4gZmlsZS4N
CisgICAgc3RhdGljIGludCBvcGVuRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgc3Fs
aXRlMyoqIGRhdGFiYXNlKTsNCisNCisgICAgLy8gUmV0dXJucyB0aGUgZmlsZSBuYW1lIGZvciBh
IGRhdGFiYXNlLg0KKyAgICAvLw0KKyAgICAvLyBkYkRpciAtIFRoZSBkaXJlY3Rvcnkgd2hlcmUg
YWxsIGRhdGFiYXNlcyBhcmUgc3RvcmVkLg0KKyAgICAvLyBkYk5hbWUgLSBUaGUgbmFtZSBvZiB0
aGUgZGF0YWJhc2UuDQorICAgIC8vIG9yaWdpbklkZW50aWZpZXIgLSBUaGUgb3JpZ2luIHRoYXQg
d2FudHMgdG8gdXNlIHRoaXMgZGF0YWJhc2UuDQorICAgIC8vIGRiIC0gQSBkYXRhYmFzZSB3aXRo
IGEgbnVtYmVyIGdlbmVyYXRvciB1c2VkIHRvIGNyZWF0ZSB1bmlxdWUgZmlsZSBuYW1lcy4NCisg
ICAgc3RhdGljIFN0cmluZyBnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNlKGNvbnN0IFN0cmluZyYg
ZGJEaXIsIGNvbnN0IFN0cmluZyYgZGJOYW1lLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBTUUxpdGVE
YXRhYmFzZSogZGIpOw0KKw0KKyAgICAvLyBDcmVhdGVzIGFuIGFic29sdXRlIGZpbGUgcGF0aCBn
aXZlbiBhIGRpcmVjdG9yeSBhbmQgYSBmaWxlIG5hbWUuDQorICAgIC8vDQorICAgIC8vIHBhdGgg
LSBUaGUgZGlyZWN0b3J5Lg0KKyAgICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuDQorICAg
IHN0YXRpYyBTdHJpbmcgYXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChjb25zdCBTdHJpbmcm
IHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOw0KKw0KKyAgICAvLyBNYWtlcyBzdXJlIHRo
ZSBnaXZlbiBkaXJlY3RvcnkgZXhpc3RzLCBieSBjcmVhdGluZyBhbGwgbWlzc2luZyBkaXJlY3Rv
cmllcw0KKyAgICAvLyBvbiB0aGUgZ2l2ZW4gcGF0aC4NCisgICAgLy8NCisgICAgLy8gcGF0aCAt
IFRoZSBkaXJlY3RvcnkuDQorICAgIHN0YXRpYyBib29sIGVuc3VyZURhdGFiYXNlRGlyZWN0b3J5
RXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCk7DQorDQorICAgIC8vIElmICdjaGVja1BhdGhPbmx5
JyBpcyBmYWxzZSwgdGhlbiB0aGlzIG1ldGhvZCBvbmx5IGNoZWNrcyBpZiB0aGUgZ2l2ZW4gZmls
ZSBleGlzdHMuDQorICAgIC8vIElmICdjaGVja1BhdGhPbmx5JyBpcyB0cnVlLCB0aGVuIHRoaXMg
bWV0aG9kIG1ha2VzIHN1cmUgYWxsIGRpcmVjdG9yaWVzIG9uIHRoZQ0KKyAgICAvLyBnaXZlbiBw
YXRoIGV4aXN0IGJ5IGNyZWF0aW5nIHRoZSBtaXNzaW5nIG9uZXMsIGFuZCBkb2VzIG5vdCBjaGVj
ayBpZiB0aGUgZmlsZQ0KKyAgICAvLyBpdHNlbGYgZXhpc3RzLg0KKyAgICAvLw0KKyAgICAvLyBT
b21ldGltZXMgd2UgZXhwZWN0IGEgREIgZmlsZSB0byBleGlzdDsgb3RoZXIgdGltZXMsIHdlJ3Jl
IE9LIHdpdGggY3JlYXRpbmcgYSBuZXcNCisgICAgLy8gREIgZmlsZSwgYnV0IHdlIHdhbnQgdG8g
bWFrZSBzdXJlIHRoYXQgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB3ZSB3YW50IHRvIHB1dCB0aGUN
CisgICAgLy8gbmV3IERCIGZpbGUgZXhpc3RzLiBUaGlzIG1ldGhvZCBjb3ZlcnMgYm90aCBjYXNl
cy4NCisgICAgLy8NCisgICAgLy8gZmlsZU5hbWUgLSBUaGUgZmlsZSBuYW1lLg0KKyAgICAvLyBj
aGVja1BhdGhPbmx5IC0gSWYgdHJ1ZSwgd2Ugb25seSBtYWtlIHN1cmUgdGhhdCB0aGUgZ2l2ZW4g
ZGlyZWN0b3J5IGV4aXN0cy4NCisgICAgLy8gICAgICAgICAgICAgICAgIElmIGZhbHNlLCB3ZSBv
bmx5IGNoZWNrIGlmIHRoZSBmaWxlIGV4aXN0cy4NCisgICAgc3RhdGljIGJvb2wgZW5zdXJlRGF0
YWJhc2VGaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGJvb2wgY2hlY2tQYXRoT25s
eSk7DQorDQorICAgIC8vIERlbGV0ZXMgYW4gZW1wdHkgZGF0YWJhc2UgZGlyZWN0b3J5Lg0KKyAg
ICAvLw0KKyAgICAvLyBwYXRoIC0gVGhlIGRpcmVjdG9yeS4NCisgICAgc3RhdGljIGJvb2wgZGVs
ZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpOw0KKw0KKyAgICAv
LyBEZWxldGVzIGEgZGF0YWJhc2UgZmlsZS4NCisgICAgLy8NCisgICAgLy8gZmlsZU5hbWUgLSBU
aGUgZmlsZSBuYW1lLg0KKyAgICBzdGF0aWMgYm9vbCBkZWxldGVEYXRhYmFzZUZpbGUoY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSk7DQorDQorICAgIC8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGRh
dGFiYXNlIGZpbGUuDQorICAgIC8vDQorICAgIC8vIGZpbGVOYW1lIC0gVGhlIGZpbGUgbmFtZS4N
CisgICAgc3RhdGljIGxvbmcgbG9uZyBnZXREYXRhYmFzZUZpbGVTaXplKGNvbnN0IFN0cmluZyYg
ZmlsZU5hbWUpOw0KKw0KK3ByaXZhdGU6DQorICAgIC8vIGRvIG5vdCBpbnN0YW50aWF0ZSB0aGlz
IGNsYXNzDQorICAgIFNRTGl0ZUZpbGVTeXN0ZW0oKTsNCit9OyAvLyBjbGFzcyBTUUxpdGVGaWxl
U3lzdGVtDQorDQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQ0KKw0KKyNlbmRpZg0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCShyZXZpc2lvbiA0NTQ0NCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzMsOCArMTMzLDEwIEBAIFN0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXQK
IAogU3RyaW5nIGRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOworICBTdHJpbmcgZmlsZU5hbWUgPSBw
YXRoR2V0RmlsZU5hbWUocGF0aCk7CisgIFN0cmluZyBkaXJOYW1lID0gU3RyaW5nKHBhdGgpOwor
ICBkaXJOYW1lLnRydW5jYXRlKGRpck5hbWUubGVuZ3RoKCkgLSBwYXRoR2V0RmlsZU5hbWUocGF0
aCkubGVuZ3RoKCkpOworICByZXR1cm4gZGlyTmFtZTsKIH0KIAogc3RhdGljIFN0cmluZyBidW5k
bGVOYW1lKCkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gNDU0NDQpCisrKyBXZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBA
CiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKQEAgLTQ4LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVk
ZSAiT3JpZ2luUXVvdGFNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKKyNp
bmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
QEAgLTMzOCwxMCArMzM4LDcgQEAgdm9pZCBEYXRhYmFzZTo6c3RvcCgpCiAKIHVuc2lnbmVkIGxv
bmcgbG9uZyBEYXRhYmFzZTo6ZGF0YWJhc2VTaXplKCkgY29uc3QKIHsKLSAgICBsb25nIGxvbmcg
c2l6ZTsKLSAgICBpZiAoIWdldEZpbGVTaXplKG1fZmlsZW5hbWUsIHNpemUpKQotICAgICAgICBz
aXplID0gMDsKLSAgICByZXR1cm4gc2l6ZTsKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6
Z2V0RGF0YWJhc2VGaWxlU2l6ZShtX2ZpbGVuYW1lKTsKIH0KIAogdW5zaWduZWQgbG9uZyBsb25n
IERhdGFiYXNlOjptYXhpbXVtU2l6ZSgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VU
cmFja2VyLmNwcAkocmV2aXNpb24gNDU0NDQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VU
cmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDEyIEBACiAjaW5jbHVkZSAi
RGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJMb2dnaW5n
LmgiCiAjaW5jbHVkZSAiT3JpZ2luUXVvdGFNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNo
LmgiCisjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRl
bWVudC5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgpAQCAtNjksNiArNjksNyBAQCBEYXRhYmFzZVRyYWNrZXI6OkRhdGFiYXNlVHJh
Y2tlcigpCiAgICAgLCBtX3RocmVhZChjdXJyZW50VGhyZWFkKCkpCiAjZW5kaWYKIHsKKyAgU1FM
aXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRy
YWNrZXI6OnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCkBAIC04
Nyw5ICs4OCw3IEBAIGNvbnN0IFN0cmluZyYgRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZUQKIFN0
cmluZyBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBhdGgoKSBjb25zdAogewogICAg
IEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWQpOwotICAgIGlmIChtX2RhdGFiYXNl
RGlyZWN0b3J5UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBy
ZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCAi
RGF0YWJhc2VzLmRiIik7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFi
YXNlRmlsZU5hbWVUb1BhdGgobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsICJEYXRhYmFzZXMuZGIi
KTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UoYm9vbCBj
cmVhdGVJZkRvZXNOb3RFeGlzdCkKQEAgLTEwMCwxMyArOTksOSBAQCB2b2lkIERhdGFiYXNlVHJh
Y2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBk
YXRhYmFzZVBhdGggPSB0cmFja2VyRGF0YWJhc2VQYXRoKCk7Ci0gICAgaWYgKGRhdGFiYXNlUGF0
aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghY3JlYXRlSWZEb2VzTm90
RXhpc3QgJiYgIWZpbGVFeGlzdHMoZGF0YWJhc2VQYXRoKSkKKyAgICBpZiAoIVNRTGl0ZUZpbGVT
eXN0ZW06OmVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyhkYXRhYmFzZVBhdGgsIGNyZWF0ZUlmRG9l
c05vdEV4aXN0KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbWFrZUFsbERpcmVjdG9yaWVzKG1f
ZGF0YWJhc2VEaXJlY3RvcnlQYXRoKTsKICAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihkYXRhYmFz
ZVBhdGgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGRvIGRvIGhlcmU/CiAgICAgICAgIHJl
dHVybjsKQEAgLTE5MCw5ICsxODUsNyBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlG
b3JEYXRhYmFzCiBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5QYXRoKFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3Ro
cmVhZCk7Ci0gICAgaWYgKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
bV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkpOwor
ICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRo
KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
IH0KIAogU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0
eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZOb3RFeGlz
dHMpCkBAIC0yMDYsNyArMTk5LDcgQEAgU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhG
b3JEYXRhYgogICAgIFN0cmluZyBvcmlnaW5QYXRoID0gdGhpcy0+b3JpZ2luUGF0aChvcmlnaW4p
OwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgcGF0aCBmb3IgdGhpcyBTZWN1cml0eU9yaWdp
biBleGlzdHMKLSAgICBpZiAoY3JlYXRlSWZOb3RFeGlzdHMgJiYgIW1ha2VBbGxEaXJlY3Rvcmll
cyhvcmlnaW5QYXRoKSkKKyAgICBpZiAoY3JlYXRlSWZOb3RFeGlzdHMgJiYgIVNRTGl0ZUZpbGVT
eXN0ZW06OmVuc3VyZURhdGFiYXNlRGlyZWN0b3J5RXhpc3RzKG9yaWdpblBhdGgpKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAgICAgCiAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBwYXRoIGZv
ciB0aGlzIGRhdGFiYXNlIHlldApAQCAtMjI0LDcgKzIxNyw3IEBAIFN0cmluZyBEYXRhYmFzZVRy
YWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAo
KTsKIAogICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KQotICAgICAgICByZXR1cm4gcGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG9yaWdpblBhdGgsIHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDApKTsKKyAgICAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmls
ZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOwogICAg
IGlmICghY3JlYXRlSWZOb3RFeGlzdHMpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAg
ICAgCkBAIC0yNDEsMzMgKzIzNCwyMCBAQCBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0
aEZvckRhdGFiCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICByZXN1bHQgPSBzZXF1ZW5j
ZVN0YXRlbWVudC5zdGVwKCk7CiAKLSAgICAvLyBUaGlzIGhhcyBhIHJhbmdlIG9mIDJeNjMgYW5k
IHN0YXJ0cyBhdCAwIGZvciBldmVyeSB0aW1lIGEgdXNlciByZXNldHMgU2FmYXJpIC0KLSAgICAv
LyBJIGNhbid0IGltYWdpbmUgaXQnZCBvdmVyIG92ZXJmbG93Ci0gICAgaW50NjRfdCBzZXEgPSAw
OwotICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KSB7Ci0gICAgICAgIHNlcSA9IHNlcXVl
bmNlU3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOwotICAgIH0gZWxzZSBpZiAocmVzdWx0ICE9
IFNRTFJlc3VsdERvbmUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBzZXF1ZW5jZVN0
YXRlbWVudC5maW5hbGl6ZSgpOwotCi0gICAgU3RyaW5nIGZpbGVuYW1lOwotICAgIGRvIHsKLSAg
ICAgICAgKytzZXE7Ci0gICAgICAgIGZpbGVuYW1lID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KG9yaWdpblBhdGgsIFN0cmluZzo6Zm9ybWF0KCIlMDE2bGx4LmRiIiwgc2VxKSk7Ci0gICAgfSB3
aGlsZSAoZmlsZUV4aXN0cyhmaWxlbmFtZSkpOwotCi0gICAgaWYgKCFhZGREYXRhYmFzZShvcmln
aW4sIG5hbWUsIFN0cmluZzo6Zm9ybWF0KCIlMDE2bGx4LmRiIiwgc2VxKSkpCisgICAgU3RyaW5n
IGZpbGVOYW1lID0gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RmlsZU5hbWVGb3JOZXdEYXRhYmFzZShv
cmlnaW5QYXRoLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLCBuYW1lLCAmbV9kYXRhYmFz
ZSk7CisgICAgaWYgKCFhZGREYXRhYmFzZShvcmlnaW4sIG5hbWUsIGZpbGVOYW1lKSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgLy8gSWYgdGhpcyBvcmlnaW4ncyBxdW90YSBpcyBi
ZWluZyB0cmFja2VkIChvcGVuIGhhbmRsZSB0byBhIGRhdGFiYXNlIGluIHRoaXMgb3JpZ2luKSwg
YWRkIHRoaXMgbmV3IGRhdGFiYXNlCiAgICAgLy8gdG8gdGhlIHF1b3RhIG1hbmFnZXIgbm93Cisg
ICAgU3RyaW5nIGZ1bGxGaWxlUGF0aCA9IFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNl
RmlsZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwgZmlsZU5hbWUpOwogICAgIHsKICAgICAgICAgTG9j
a2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gbG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKICAg
ICAgICAgaWYgKG9yaWdpblF1b3RhTWFuYWdlcigpLnRyYWNrc09yaWdpbihvcmlnaW4pKQotICAg
ICAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkuYWRkRGF0YWJhc2Uob3JpZ2luLCBuYW1lLCBm
aWxlbmFtZSk7CisgICAgICAgICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5hZGREYXRhYmFzZShv
cmlnaW4sIG5hbWUsIGZ1bGxGaWxlUGF0aCk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBmaWxl
bmFtZTsKKyAgICByZXR1cm4gZnVsbEZpbGVQYXRoOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6cG9wdWxhdGVPcmlnaW5zKCkKQEAgLTQyMyw4ICs0MDMsNyBAQCB1bnNpZ25lZCBsb25nIGxv
bmcgRGF0YWJhc2VUcmFja2VyOjp1c2FnCiAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgCi0gICAgbG9uZyBsb25nIHNpemU7Ci0gICAgcmV0dXJuIGdl
dEZpbGVTaXplKHBhdGgsIHNpemUpID8gc2l6ZSA6IDA7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVT
eXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUocGF0aCk7CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFj
a2VyOjphZGRPcGVuRGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFiYXNlKQpAQCAtNjY1LDcgKzY0NCw3
IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXIKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KG9yaWdpblBhdGgob3JpZ2lu
KSk7CisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShv
cmlnaW5QYXRoKG9yaWdpbikpOwogCiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW5Q
b3NzaWJseUxhc3RSZWZlcmVuY2UgPSBvcmlnaW47CiAgICAgewpAQCAtNjc5LDggKzY1OCw4IEBA
IHZvaWQgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXIKICAgICAgICAgaWYgKG1f
cXVvdGFNYXAtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVu
KCkpCiAgICAgICAgICAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICAgICAgZGVs
ZXRlRmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOwotICAgICAgICAgICAgZGVsZXRlRW1wdHlE
aXJlY3RvcnkobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgpOworCSAgICBTUUxpdGVGaWxlU3lzdGVt
OjpkZWxldGVEYXRhYmFzZUZpbGUodHJhY2tlckRhdGFiYXNlUGF0aCgpKTsKKwkgICAgU1FMaXRl
RmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShtX2RhdGFiYXNlRGlyZWN0
b3J5UGF0aCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTc2Myw3ICs3NDIsNyBAQCBib29sIERh
dGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGRlbGV0ZWREYXRhYmFzZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGRlbGV0ZWREYXRh
YmFzZXNbaV0tPm1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOwogCi0gICAgcmV0dXJuIGRlbGV0ZUZp
bGUoZnVsbFBhdGgpOworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFz
ZUZpbGUoZnVsbFBhdGgpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6c2V0Q2xpZW50KERh
dGFiYXNlVHJhY2tlckNsaWVudCogY2xpZW50KQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL09yaWdp
blVzYWdlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvT3JpZ2luVXNh
Z2VSZWNvcmQuY3BwCShyZXZpc2lvbiA0NTQ0NCkKKysrIFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5V
c2FnZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2lmIEVO
QUJMRShEQVRBQkFTRSkKIAotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJTUUxp
dGVGaWxlU3lzdGVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODIsMTMgKzgyLDkg
QEAgdW5zaWduZWQgbG9uZyBsb25nIE9yaWdpblVzYWdlUmVjb3JkOjpkaQogICAgICAgICBjb25z
dCBTdHJpbmcmIHBhdGggPSBtX2RhdGFiYXNlTWFwLmdldCgqaVVua25vd24pLmZpbGVuYW1lOwog
ICAgICAgICBBU1NFUlQoIXBhdGguaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgbG9uZyBsb25nIHNpemU7Ci0gICAgICAgIGlmIChnZXRGaWxlU2l6ZShwYXRoLCBzaXplKSkK
LSAgICAgICAgICAgIG1fZGF0YWJhc2VNYXAuc2V0KCppVW5rbm93biwgRGF0YWJhc2VFbnRyeShw
YXRoLCBzaXplKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gV2hlbiB3ZSBjYW4n
dCBkZXRlcm1pbmUgdGhlIGZpbGUgc2l6ZSwgd2UnbGwganVzdCBoYXZlIHRvIGFzc3VtZSB0aGUg
ZmlsZSBpcyBtaXNzaW5nL2luYWNjZXNzaWJsZS4KLSAgICAgICAgICAgIG1fZGF0YWJhc2VNYXAu
c2V0KCppVW5rbm93biwgRGF0YWJhc2VFbnRyeShwYXRoLCAwKSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgLy8gV2hlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgdGhlIGZpbGUgc2l6ZSwgd2UnbGwganVzdCBo
YXZlIHRvIGFzc3VtZSB0aGUgZmlsZSBpcyBtaXNzaW5nL2luYWNjZXNzaWJsZS4KKyAgICAgICAg
bG9uZyBsb25nIHNpemUgPSBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKHBh
dGgpOworICAgICAgICBtX2RhdGFiYXNlTWFwLnNldCgqaVVua25vd24sIERhdGFiYXNlRW50cnko
cGF0aCwgc2l6ZSkpOwogICAgIH0KICAgICBtX3Vua25vd25TZXQuY2xlYXIoKTsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32139</attachid>
            <date>2009-07-01 14:15:58 -0700</date>
            <delta_ts>2009-07-01 15:21:02 -0700</delta_ts>
            <desc>final version</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>27683</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTQ0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMDktMDctMDEgIER1bWl0cnUgRGFuaWxpdWMgIDxzZXQgRU1BSUxf
QUREUkVTUyBlbnZpcm9ubWVudCB2YXJpYWJsZT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIGFuIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW4g
dGhlIERCIGNsYXNzZXMgYW5kIHRoZSBmaWxlCisgICAgICAgIHN5c3RlbSwgd2hpY2ggYWxsb3dz
IHVzIHRvIGFkZCBvdXIgb3duIGxvZ2ljIGZvciBzdG9yaW5nLCBvcGVuaW5nLAorICAgICAgICBk
ZWxldGluZywgZXRjLiBkYXRhYmFzZXMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI2MDU0CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZURhdGFiYXNlOjpvcGVuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRmls
ZVN5c3RlbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6
U1FMaXRlRmlsZVN5c3RlbSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpy
ZWdpc3RlclNRTGl0ZVZGUyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpv
cGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6Z2V0Rmls
ZU5hbWVGb3JOZXdEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVt
OjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0
ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRGlyZWN0b3J5RXhpc3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0
b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNl
RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZp
bGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpkaXJlY3RvcnlOYW1lKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpkYXRhYmFzZVNpemUpOgorICAgICAgICAqIHN0
b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6RGF0YWJhc2VUcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6dHJhY2tlckRhdGFiYXNlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNr
ZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFj
a2VyOjpvcmlnaW5QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZnVs
bFBhdGhGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnVz
YWdlRm9yRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxl
dGVPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRh
YmFzZUZpbGUpOgorICAgICAgICAqIHN0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6T3JpZ2luVXNhZ2VSZWNvcmQ6OmRpc2tVc2FnZSk6CisKKwogMjAwOS0w
Ny0wMSAgRGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ1NDQ0KQorKysgV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjAzOCw2ICsyMDM4LDggQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVBdXRob3JpemVy
LmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwIFwKIAlXZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmls
ZVN5c3RlbS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5w
cm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNDU0NDQpCisr
KyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xMzI2LDYgKzEzMjYsNyBA
QCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1FMSVRFPTEpIHsKICAgICBTT1VSQ0VTICs9IFwK
ICAgICAgICAgcGxhdGZvcm0vc3FsL1NRTGl0ZUF1dGhvcml6ZXIuY3BwIFwKICAgICAgICAgcGxh
dGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL3NxbC9TUUxp
dGVGaWxlU3lzdGVtLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQu
Y3BwIFwKICAgICAgICAgcGxhdGZvcm0vc3FsL1NRTGl0ZVRyYW5zYWN0aW9uLmNwcCBcCiAgICAg
ICAgIHBsYXRmb3JtL3NxbC9TUUxWYWx1ZS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0NTQ0NCkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTIwMTQwLDYgKzIwMTQwLDE0IEBA
CiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbGF0Zm9ybVxzcWxcU1FMaXRlRmlsZVN5c3RlbS5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmls
ZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cc3FsXFNRTGl0
ZUZpbGVTeXN0ZW0uaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxzcWxcU1FMaXRlU3RhdGVtZW50LmNwcCINCiAJCQkJ
CT4NCiAJCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiA0NTQ0NCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNzgwLDYgKzM3ODAsOCBAQAogCQlC
MkZBM0UxODBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdab29tRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJGQTNEMzAwQUI3NUE2RjAwMEU1
QUM0IC8qIEpTU1ZHWm9vbUV2ZW50LmNwcCAqLzsgfTsKIAkJQjJGQTNFMTkwQUI3NUE2RjAwMEU1
QUM0IC8qIEpTU1ZHWm9vbUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMkZBM0QzMTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdab29tRXZlbnQu
aCAqLzsgfTsKIAkJQjUwRjVCODEwRTk2Q0Q5OTAwQUQ3MUE2IC8qIFdlYkNvcmVPYmpDRXh0cmFz
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjUwRjVC
ODAwRTk2Q0Q5OTAwQUQ3MUE2IC8qIFdlYkNvcmVPYmpDRXh0cmFzLm1tICovOyBzZXR0aW5ncyA9
IHtDT01QSUxFUl9GTEFHUyA9ICItV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIjsgfTsgfTsK
KwkJQjVBNjg0MjIwRkZBQkU5ODAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1QTY4NDIxMEZGQUJFOTgw
MEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmggKi87IH07CisJCUI1QTY4NDI0MEZGQUJFQUEw
MEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1QTY4NDIzMEZGQUJFQUEwMEQyNDY4OSAvKiBTUUxpdGVG
aWxlU3lzdGVtLmNwcCAqLzsgfTsKIAkJQkMwMEYwMDQwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZp
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBF
RkZFMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLmggKi87IH07CiAJCUJDMDBGMDA1MEUwQTE4
NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkMwMEVGRkYwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gKi87
IH07CiAJCUJDMDBGMDA2MEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlSW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBGMDAwMEUwQTE4
NTUwMEZEMDRFMyAvKiBET01GaWxlSW50ZXJuYWwuaCAqLzsgfTsKQEAgLTg1ODQsNiArODU4Niw4
IEBACiAJCUIyRkEzRDMwMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1pvb21FdmVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdab29tRXZlbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkZBM0QzMTBBQjc1QTZGMDAwRTVBQzQgLyog
SlNTVkdab29tRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZH
Wm9vbUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1MEY1QjgwMEU5NkNE
OTkwMEFENzFBNiAvKiBXZWJDb3JlT2JqQ0V4dHJhcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVPYmpDRXh0cmFzLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCNUE2ODQyMTBGRkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3Rl
bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxpdGVGaWxlU3lzdGVtLmg7
IHBhdGggPSBzcWwvU1FMaXRlRmlsZVN5c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCNUE2ODQyMzBGRkFCRUFBMDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTUUxpdGVGaWxlU3lzdGVtLmNwcDsg
cGF0aCA9IHNxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkMwMEVGRkUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQzAwRUZGRjBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTUZpbGUubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDMDBGMDAwMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlSW50ZXJuYWwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRmlsZUludGVybmFsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NTE0LDYgKzk1MTgsOCBAQAogCQkxQTJFNkU1
NjBDQzU1MUUwMDA0QTIwNjIgLyogc3FsICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQlCNUE2ODQyMzBGRkFCRUFBMDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5
c3RlbS5jcHAgKi8sCisJCQkJQjVBNjg0MjEwRkZBQkU5ODAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVT
eXN0ZW0uaCAqLywKIAkJCQkxQTJFNkU1NzBDQzU1MjEzMDA0QTIwNjIgLyogU1FMVmFsdWUuY3Bw
ICovLAogCQkJCTFBMkU2RTU4MENDNTUyMTMwMDRBMjA2MiAvKiBTUUxWYWx1ZS5oICovLAogCQkJ
CTFBMkU2RTc4MENDNTU2RDUwMDRBMjA2MiAvKiBTUUxpdGVBdXRob3JpemVyLmNwcCAqLywKQEAg
LTE2OTEzLDYgKzE2OTE5LDcgQEAKIAkJCQlCQ0JDQUUzRDBGRjE5Mzk5MDAwNzYyQUUgLyogSlNE
YXRhR3JpZERhdGFTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1MEQwRTgzMEZGNDI3Mjkw
MEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdEQUFF
RjBGRjk2MTVEMDBDRTAxMzggLyogRE9NRGF0YUdyaWREYXRhU291cmNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQlCNUE2ODQyMjBGRkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0xODkyNyw2ICsxODkzNCw3IEBACiAJCQkJQkM3N0QyMzkwRkYyOTgw
ODAwNzA4ODdCIC8qIERhdGFHcmlkQ29sdW1uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1MEQw
RTgyMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDN0RBQUVFMEZGOTYxNUQwMENFMDEzOCAvKiBET01EYXRhR3JpZERhdGFTb3VyY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjVBNjg0MjQwRkZBQkVBQTAwRDI0Njg5IC8qIFNRTGl0
ZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVEYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMaXRlRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA0NTQ0NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
c3FsL1NRTGl0ZURhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
CiAjaW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgor
I2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQu
aCIKIAogI2luY2x1ZGUgPHNxbGl0ZTMuaD4KQEAgLTYwLDkgKzYxLDcgQEAgYm9vbCBTUUxpdGVE
YXRhYmFzZTo6b3Blbihjb25zdCBTdHJpbmcmIAogewogICAgIGNsb3NlKCk7CiAgICAgCi0gICAg
Ly8gU1FMaXRlIGV4cGVjdHMgYSBudWxsIHRlcm1pbmF0b3Igb24gaXRzIFVURi0xNiBzdHJpbmdz
LgotICAgIFN0cmluZyBwYXRoID0gZmlsZW5hbWU7Ci0gICAgbV9sYXN0RXJyb3IgPSBzcWxpdGUz
X29wZW4xNihwYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksICZtX2RiKTsKKyAg
ICBtX2xhc3RFcnJvciA9IFNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFzZShmaWxlbmFtZSwg
Jm1fZGIpOwogICAgIGlmIChtX2xhc3RFcnJvciAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgTE9H
X0VSUk9SKCJTUUxpdGUgZGF0YWJhc2UgZmFpbGVkIHRvIGxvYWQgZnJvbSAlc1xuQ2F1c2UgLSAl
cyIsIGZpbGVuYW1lLmFzY2lpKCkuZGF0YSgpLAogICAgICAgICAgICAgc3FsaXRlM19lcnJtc2co
bV9kYikpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjggQEAKKy8qDQorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQN
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlDQorICogbWV0Og0KKyAqDQorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuDQorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQ0KKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXINCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQorICogZGlzdHJpYnV0
aW9uLg0KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMNCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLA0KKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkN
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKi8N
CisNCisjaW5jbHVkZSAiY29uZmlnLmgiDQorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIN
CisNCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIg0KKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5o
Ig0KKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCINCisjaW5jbHVkZSA8c3FsaXRlMy5oPg0K
Kw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisNCitTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxl
U3lzdGVtKCkNCit7DQorfQ0KKw0KK3ZvaWQgU1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxp
dGVWRlMoKQ0KK3sNCit9DQorDQoraW50IFNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFzZShj
b25zdCBTdHJpbmcmIGZpbGVOYW1lLCBzcWxpdGUzKiogZGF0YWJhc2UpDQorew0KKyAgICAvLyBT
UUxpdGUgZXhwZWN0cyBhIG51bGwgdGVybWluYXRvciBvbiBpdHMgVVRGLTE2IHN0cmluZ3MuDQor
ICAgIFN0cmluZyBwYXRoID0gZmlsZU5hbWU7DQorICAgIHJldHVybiBzcWxpdGUzX29wZW4xNihw
YXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIGRhdGFiYXNlKTsNCit9DQorDQor
U3RyaW5nIFNRTGl0ZUZpbGVTeXN0ZW06OmdldEZpbGVOYW1lRm9yTmV3RGF0YWJhc2UoY29uc3Qg
U3RyaW5nJiBkYkRpciwgY29uc3QgU3RyaW5nJiBkYk5hbWUsDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVu
dGlmaWVyLCBTUUxpdGVEYXRhYmFzZSogZGIpDQorew0KKyAgICAvLyBkYk5hbWUgYW5kIG9yaWdp
bklkZW50aWZpZXIgbm90IHVzZWQgaW4gdGhlIGRlZmF1bHQgV2ViS2l0IGltcGxlbWVudGF0aW9u
DQorICAgIC8vIHRvdWNoIHRoZW0gc28gZ2NjIGRvZXNuJ3QgY29tcGxhaW4gYWJvdXQgdGhhdCB3
aGVuIGJ1aWxkaW5nIG9uIE1hYw0KKyAgICBTdHJpbmcgdW51c2VkID0gZGJOYW1lOw0KKyAgICB1
bnVzZWQgPSBvcmlnaW5JZGVudGlmaWVyOw0KKw0KKyAgICAvLyB0cnkgdG8gZ2V0IHRoZSBuZXh0
IHNlcXVlbmNlIG51bWJlciBmcm9tIHRoZSBnaXZlbiBkYXRhYmFzZQ0KKyAgICAvLyBpZiB3ZSBj
YW4ndCBnZXQgYSBudW1iZXIsIHJldHVybiBhbiBlbXB0eSBzdHJpbmcNCisgICAgU1FMaXRlU3Rh
dGVtZW50IHNlcXVlbmNlU3RhdGVtZW50KCpkYiwgIlNFTEVDVCBzZXEgRlJPTSBzcWxpdGVfc2Vx
dWVuY2UgV0hFUkUgbmFtZT0nRGF0YWJhc2VzJzsiKTsNCisgICAgaWYgKHNlcXVlbmNlU3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykNCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsN
CisgICAgaW50IHJlc3VsdCA9IHNlcXVlbmNlU3RhdGVtZW50LnN0ZXAoKTsNCisgICAgaW50NjRf
dCBzZXEgPSAwOw0KKyAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykNCisgICAgICAgIHNl
cSA9IHNlcXVlbmNlU3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOw0KKyAgICBlbHNlIGlmIChy
ZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkNCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsNCisgICAg
c2VxdWVuY2VTdGF0ZW1lbnQuZmluYWxpemUoKTsNCisNCisgICAgLy8gaW5jcmVtZW50IHRoZSBu
dW1iZXIgdW50aWwgd2UgY2FuIHVzZSBpdCB0byBmb3JtIGEgZmlsZSBuYW1lIHRoYXQgZG9lc24n
dCBleGlzdA0KKyAgICBTdHJpbmcgZmlsZU5hbWU7DQorICAgIGRvIHsNCisgICAgICAgICsrc2Vx
Ow0KKyAgICAgICAgZmlsZU5hbWUgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZGJEaXIsIFN0
cmluZzo6Zm9ybWF0KCIlMDE2bGx4LmRiIiwgc2VxKSk7DQorICAgIH0gd2hpbGUgKGZpbGVFeGlz
dHMoZmlsZU5hbWUpKTsNCisNCisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlMDE2bGx4LmRi
Iiwgc2VxKTsNCit9DQorDQorU3RyaW5nIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNl
RmlsZU5hbWVUb1BhdGgoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1l
KQ0KK3sNCisgICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoLCBmaWxlTmFt
ZSk7DQorfQ0KKw0KK2Jvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3Rv
cnlFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQ0KK3sNCisgICAgaWYgKHBhdGguaXNFbXB0eSgp
KQ0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICByZXR1cm4gbWFrZUFsbERpcmVjdG9yaWVz
KHBhdGgpOw0KK30NCisNCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRmls
ZUV4aXN0cyhjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBib29sIGNoZWNrUGF0aE9ubHkpDQorew0K
KyAgICBpZiAoZmlsZU5hbWUuaXNFbXB0eSgpKQ0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKw0K
KyAgICBpZiAoY2hlY2tQYXRoT25seSkgew0KKyAgICAgICAgU3RyaW5nIGRpciA9IGRpcmVjdG9y
eU5hbWUoZmlsZU5hbWUpOw0KKyAgICAgICAgcmV0dXJuIGVuc3VyZURhdGFiYXNlRGlyZWN0b3J5
RXhpc3RzKGRpcik7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGZpbGVFeGlzdHMoZmlsZU5hbWUp
Ow0KK30NCisNCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJl
Y3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQ0KK3sNCisgICAgcmV0dXJuIGRlbGV0ZUVtcHR5RGly
ZWN0b3J5KHBhdGgpOw0KK30NCisNCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFi
YXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQ0KK3sNCisgICAgcmV0dXJuIGRlbGV0ZUZp
bGUoZmlsZU5hbWUpOw0KK30NCisNCitsb25nIGxvbmcgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0
YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQ0KK3sgICAgICAgIA0KKyAgICBs
b25nIGxvbmcgc2l6ZTsNCisgICAgcmV0dXJuIGdldEZpbGVTaXplKGZpbGVOYW1lLCBzaXplKSA/
IHNpemUgOiAwOw0KK30NCisNCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MTQgQEAKKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlDQorICogbWV0
Og0KKyAqDQorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0KKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXINCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlDQorICogZGlzdHJpYnV0aW9uLg0KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQ0KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKi8NCisNCisjaWZuZGVmIFNRTGl0ZUZpbGVTeXN0
ZW1faA0KKyNkZWZpbmUgU1FMaXRlRmlsZVN5c3RlbV9oDQorDQorI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiDQorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4NCisNCitzdHJ1Y3Qgc3FsaXRl
MzsNCisNCituYW1lc3BhY2UgV2ViQ29yZSB7DQorDQorY2xhc3MgU1FMaXRlRGF0YWJhc2U7DQor
DQorLy8gQSBjbGFzcyB0aGF0IGFic3RyYWN0cyB0aGUgZmlsZSBzeXN0ZW0gcmVsYXRlZCBvcGVy
YXRpb25zIHJlcXVpcmVkDQorLy8gYnkgdGhlIFdlYktpdCBkYXRhYmFzZSBjb2RlLg0KK2NsYXNz
IFNRTGl0ZUZpbGVTeXN0ZW0gew0KK3B1YmxpYzoNCisgICAgLy8gUmVnaXN0ZXJzIGEgdXNlci1k
ZWZpbmVkIFNRTGl0ZSBWRlMuDQorICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyU1FMaXRlVkZTKCk7
DQorDQorICAgIC8vIE9wZW5zIGEgZGF0YWJhc2UgZmlsZS4NCisgICAgLy8NCisgICAgLy8gZmls
ZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgZmlsZS4NCisgICAgLy8gZGF0YWJhc2Ug
LSBUaGUgU1FMaXRlIHN0cnVjdHVyZSB0aGF0IHJlcHJlc2VudHMgdGhlIGRhdGFiYXNlIHN0b3Jl
ZA0KKyAgICAvLyAgICAgICAgICAgIGluIHRoZSBnaXZlbiBmaWxlLg0KKyAgICBzdGF0aWMgaW50
IG9wZW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBzcWxpdGUzKiogZGF0YWJhc2Up
Ow0KKw0KKyAgICAvLyBSZXR1cm5zIHRoZSBmaWxlIG5hbWUgZm9yIGEgZGF0YWJhc2UuDQorICAg
IC8vDQorICAgIC8vIGRiRGlyIC0gVGhlIGRpcmVjdG9yeSB3aGVyZSBhbGwgZGF0YWJhc2VzIGFy
ZSBzdG9yZWQuDQorICAgIC8vIGRiTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZS4NCisg
ICAgLy8gb3JpZ2luSWRlbnRpZmllciAtIFRoZSBvcmlnaW4gdGhhdCB3YW50cyB0byB1c2UgdGhp
cyBkYXRhYmFzZS4NCisgICAgLy8gZGIgLSBBIGRhdGFiYXNlIHdpdGggYSBudW1iZXIgZ2VuZXJh
dG9yIHVzZWQgdG8gY3JlYXRlIHVuaXF1ZSBmaWxlIG5hbWVzLg0KKyAgICBzdGF0aWMgU3RyaW5n
IGdldEZpbGVOYW1lRm9yTmV3RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBkYkRpciwgY29uc3QgU3Ry
aW5nJiBkYk5hbWUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIFNRTGl0ZURhdGFiYXNlKiBkYik7DQor
DQorICAgIC8vIENyZWF0ZXMgYW4gYWJzb2x1dGUgZmlsZSBwYXRoIGdpdmVuIGEgZGlyZWN0b3J5
IGFuZCBhIGZpbGUgbmFtZS4NCisgICAgLy8NCisgICAgLy8gcGF0aCAtIFRoZSBkaXJlY3Rvcnku
DQorICAgIC8vIGZpbGVOYW1lIC0gVGhlIGZpbGUgbmFtZS4NCisgICAgc3RhdGljIFN0cmluZyBh
cHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3Ry
aW5nJiBmaWxlTmFtZSk7DQorDQorICAgIC8vIE1ha2VzIHN1cmUgdGhlIGdpdmVuIGRpcmVjdG9y
eSBleGlzdHMsIGJ5IGNyZWF0aW5nIGFsbCBtaXNzaW5nIGRpcmVjdG9yaWVzDQorICAgIC8vIG9u
IHRoZSBnaXZlbiBwYXRoLg0KKyAgICAvLw0KKyAgICAvLyBwYXRoIC0gVGhlIGRpcmVjdG9yeS4N
CisgICAgc3RhdGljIGJvb2wgZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMoY29uc3QgU3Ry
aW5nJiBwYXRoKTsNCisNCisgICAgLy8gSWYgJ2NoZWNrUGF0aE9ubHknIGlzIGZhbHNlLCB0aGVu
IHRoaXMgbWV0aG9kIG9ubHkgY2hlY2tzIGlmIHRoZSBnaXZlbiBmaWxlIGV4aXN0cy4NCisgICAg
Ly8gSWYgJ2NoZWNrUGF0aE9ubHknIGlzIHRydWUsIHRoZW4gdGhpcyBtZXRob2QgbWFrZXMgc3Vy
ZSBhbGwgZGlyZWN0b3JpZXMgb24gdGhlDQorICAgIC8vIGdpdmVuIHBhdGggZXhpc3QgYnkgY3Jl
YXRpbmcgdGhlIG1pc3Npbmcgb25lcywgYW5kIGRvZXMgbm90IGNoZWNrIGlmIHRoZSBmaWxlDQor
ICAgIC8vIGl0c2VsZiBleGlzdHMuDQorICAgIC8vDQorICAgIC8vIFNvbWV0aW1lcyB3ZSBleHBl
Y3QgYSBEQiBmaWxlIHRvIGV4aXN0OyBvdGhlciB0aW1lcywgd2UncmUgT0sgd2l0aCBjcmVhdGlu
ZyBhIG5ldw0KKyAgICAvLyBEQiBmaWxlLCBidXQgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB0
aGUgZGlyZWN0b3J5IGluIHdoaWNoIHdlIHdhbnQgdG8gcHV0IHRoZQ0KKyAgICAvLyBuZXcgREIg
ZmlsZSBleGlzdHMuIFRoaXMgbWV0aG9kIGNvdmVycyBib3RoIGNhc2VzLg0KKyAgICAvLw0KKyAg
ICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuDQorICAgIC8vIGNoZWNrUGF0aE9ubHkgLSBJ
ZiB0cnVlLCB3ZSBvbmx5IG1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiBkaXJlY3RvcnkgZXhpc3Rz
Lg0KKyAgICAvLyAgICAgICAgICAgICAgICAgSWYgZmFsc2UsIHdlIG9ubHkgY2hlY2sgaWYgdGhl
IGZpbGUgZXhpc3RzLg0KKyAgICBzdGF0aWMgYm9vbCBlbnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMo
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgYm9vbCBjaGVja1BhdGhPbmx5KTsNCisNCisgICAgLy8g
RGVsZXRlcyBhbiBlbXB0eSBkYXRhYmFzZSBkaXJlY3RvcnkuDQorICAgIC8vDQorICAgIC8vIHBh
dGggLSBUaGUgZGlyZWN0b3J5Lg0KKyAgICBzdGF0aWMgYm9vbCBkZWxldGVFbXB0eURhdGFiYXNl
RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCk7DQorDQorICAgIC8vIERlbGV0ZXMgYSBkYXRh
YmFzZSBmaWxlLg0KKyAgICAvLw0KKyAgICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuDQor
ICAgIHN0YXRpYyBib29sIGRlbGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1l
KTsNCisNCisgICAgLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZGF0YWJhc2UgZmlsZS4NCisg
ICAgLy8NCisgICAgLy8gZmlsZU5hbWUgLSBUaGUgZmlsZSBuYW1lLg0KKyAgICBzdGF0aWMgbG9u
ZyBsb25nIGdldERhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7DQorDQor
cHJpdmF0ZToNCisgICAgLy8gZG8gbm90IGluc3RhbnRpYXRlIHRoaXMgY2xhc3MNCisgICAgU1FM
aXRlRmlsZVN5c3RlbSgpOw0KK307IC8vIGNsYXNzIFNRTGl0ZUZpbGVTeXN0ZW0NCisNCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlDQorDQorI2VuZGlmDQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93
aW4vRmlsZVN5c3RlbVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4v
RmlsZVN5c3RlbVdpbi5jcHAJKHJldmlzaW9uIDQ1NDQ0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93
aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw4ICsxMzMsMTAgQEAg
U3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdAogCiBTdHJpbmcgZGlyZWN0
b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gU3RyaW5nKCk7CisgIFN0cmluZyBmaWxlTmFtZSA9IHBhdGhHZXRGaWxlTmFtZShw
YXRoKTsKKyAgU3RyaW5nIGRpck5hbWUgPSBTdHJpbmcocGF0aCk7CisgIGRpck5hbWUudHJ1bmNh
dGUoZGlyTmFtZS5sZW5ndGgoKSAtIHBhdGhHZXRGaWxlTmFtZShwYXRoKS5sZW5ndGgoKSk7Cisg
IHJldHVybiBkaXJOYW1lOwogfQogCiBzdGF0aWMgU3RyaW5nIGJ1bmRsZU5hbWUoKQpJbmRleDog
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA0NTQ0NCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlICJEYXRh
YmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAt
NDgsNiArNDcsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJPcmlnaW5RdW90YU1h
bmFnZXIuaCIKICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlNRTGl0ZUZp
bGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTUUxS
ZXN1bHRTZXQuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAtMzM4LDEwICszMzgs
NyBAQCB2b2lkIERhdGFiYXNlOjpzdG9wKCkKIAogdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNl
OjpkYXRhYmFzZVNpemUoKSBjb25zdAogewotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIGlmICgh
Z2V0RmlsZVNpemUobV9maWxlbmFtZSwgc2l6ZSkpCi0gICAgICAgIHNpemUgPSAwOwotICAgIHJl
dHVybiBzaXplOworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVT
aXplKG1fZmlsZW5hbWUpOwogfQogCiB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2U6Om1heGlt
dW1TaXplKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCShyZXZp
c2lvbiA0NTQ0NCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTIgQEAKICNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2lu
Y2x1ZGUgIkRhdGFiYXNlVHJhY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJP
cmlnaW5RdW90YU1hbmFnZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU2VjdXJp
dHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIKKyNpbmNsdWRlICJT
UUxpdGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCiAjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC02
OSw2ICs2OSw3IEBAIERhdGFiYXNlVHJhY2tlcjo6RGF0YWJhc2VUcmFja2VyKCkKICAgICAsIG1f
dGhyZWFkKGN1cnJlbnRUaHJlYWQoKSkKICNlbmRpZgogeworICBTUUxpdGVGaWxlU3lzdGVtOjpy
ZWdpc3RlclNRTGl0ZVZGUygpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6c2V0RGF0YWJh
c2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKQEAgLTg3LDkgKzg4LDcgQEAgY29u
c3QgU3RyaW5nJiBEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlRAogU3RyaW5nIERhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWQoKSA9PSBtX3RocmVhZCk7Ci0gICAgaWYgKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsICJEYXRhYmFzZXMuZGIiKTsK
KyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0
aChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgIkRhdGFiYXNlcy5kYiIpOwogfQogCiB2b2lkIERh
dGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4
aXN0KQpAQCAtMTAwLDEzICs5OSw5IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpvcGVuVHJhY2tl
ckRhdGFiYXMKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGRhdGFiYXNlUGF0aCA9IHRy
YWNrZXJEYXRhYmFzZVBhdGgoKTsKLSAgICBpZiAoZGF0YWJhc2VQYXRoLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFjcmVhdGVJZkRvZXNOb3RFeGlzdCAmJiAhZmlsZUV4
aXN0cyhkYXRhYmFzZVBhdGgpKQorICAgIGlmICghU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0
YWJhc2VGaWxlRXhpc3RzKGRhdGFiYXNlUGF0aCwgY3JlYXRlSWZEb2VzTm90RXhpc3QpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtYWtlQWxsRGlyZWN0b3JpZXMobV9kYXRhYmFzZURpcmVjdG9y
eVBhdGgpOwogICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKGRhdGFiYXNlUGF0aCkpIHsKICAgICAg
ICAgLy8gRklYTUU6IFdoYXQgZG8gZG8gaGVyZT8KICAgICAgICAgcmV0dXJuOwpAQCAtMTkwLDkg
KzE4NSw3IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvckRhdGFiYXMKIFN0cmlu
ZyBEYXRhYmFzZVRyYWNrZXI6Om9yaWdpblBhdGgoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikgY29u
c3QKIHsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkKTsKLSAgICBpZiAo
bV9kYXRhYmFzZURpcmVjdG9yeVBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gU3RyaW5n
KCk7Ci0gICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2RhdGFiYXNlRGlyZWN0
b3J5UGF0aCwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgcmV0dXJuIFNRTGl0
ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgobV9kYXRhYmFzZURpcmVj
dG9yeVBhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkpOwogfQogCiBTdHJpbmcgRGF0
YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4s
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZk5vdEV4aXN0cykKQEAgLTIwNiw3ICsx
OTksNyBAQCBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiCiAgICAgU3Ry
aW5nIG9yaWdpblBhdGggPSB0aGlzLT5vcmlnaW5QYXRoKG9yaWdpbik7CiAgICAgCiAgICAgLy8g
TWFrZSBzdXJlIHRoZSBwYXRoIGZvciB0aGlzIFNlY3VyaXR5T3JpZ2luIGV4aXN0cwotICAgIGlm
IChjcmVhdGVJZk5vdEV4aXN0cyAmJiAhbWFrZUFsbERpcmVjdG9yaWVzKG9yaWdpblBhdGgpKQor
ICAgIGlmIChjcmVhdGVJZk5vdEV4aXN0cyAmJiAhU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0
YWJhc2VEaXJlY3RvcnlFeGlzdHMob3JpZ2luUGF0aCkpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKICAgICAKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHBhdGggZm9yIHRoaXMgZGF0YWJhc2Ug
eWV0CkBAIC0yMjQsNyArMjE3LDcgQEAgU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhG
b3JEYXRhYgogICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwogCiAgICAgaWYgKHJl
c3VsdCA9PSBTUUxSZXN1bHRSb3cpCi0gICAgICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOworICAgICAgICBy
ZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChvcmln
aW5QYXRoLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7CiAgICAgaWYgKCFjcmVhdGVJZk5v
dEV4aXN0cykKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgICAgICAKQEAgLTI0MSwzMyAr
MjM0LDIwIEBAIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwogICAgIHJlc3VsdCA9IHNlcXVlbmNlU3RhdGVtZW50LnN0ZXAo
KTsKIAotICAgIC8vIFRoaXMgaGFzIGEgcmFuZ2Ugb2YgMl42MyBhbmQgc3RhcnRzIGF0IDAgZm9y
IGV2ZXJ5IHRpbWUgYSB1c2VyIHJlc2V0cyBTYWZhcmkgLQotICAgIC8vIEkgY2FuJ3QgaW1hZ2lu
ZSBpdCdkIG92ZXIgb3ZlcmZsb3cKLSAgICBpbnQ2NF90IHNlcSA9IDA7Ci0gICAgaWYgKHJlc3Vs
dCA9PSBTUUxSZXN1bHRSb3cpIHsKLSAgICAgICAgc2VxID0gc2VxdWVuY2VTdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50NjQoMCk7Ci0gICAgfSBlbHNlIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHNlcXVlbmNlU3RhdGVtZW50LmZpbmFsaXpl
KCk7Ci0KLSAgICBTdHJpbmcgZmlsZW5hbWU7Ci0gICAgZG8gewotICAgICAgICArK3NlcTsKLSAg
ICAgICAgZmlsZW5hbWUgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQob3JpZ2luUGF0aCwgU3Ry
aW5nOjpmb3JtYXQoIiUwMTZsbHguZGIiLCBzZXEpKTsKLSAgICB9IHdoaWxlIChmaWxlRXhpc3Rz
KGZpbGVuYW1lKSk7Ci0KLSAgICBpZiAoIWFkZERhdGFiYXNlKG9yaWdpbiwgbmFtZSwgU3RyaW5n
Ojpmb3JtYXQoIiUwMTZsbHguZGIiLCBzZXEpKSkKKyAgICBTdHJpbmcgZmlsZU5hbWUgPSBTUUxp
dGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNlKG9yaWdpblBhdGgsIG9yaWdp
bi0+ZGF0YWJhc2VJZGVudGlmaWVyKCksIG5hbWUsICZtX2RhdGFiYXNlKTsKKyAgICBpZiAoIWFk
ZERhdGFiYXNlKG9yaWdpbiwgbmFtZSwgZmlsZU5hbWUpKQogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAKICAgICAvLyBJZiB0aGlzIG9yaWdpbidzIHF1b3RhIGlzIGJlaW5nIHRyYWNrZWQgKG9w
ZW4gaGFuZGxlIHRvIGEgZGF0YWJhc2UgaW4gdGhpcyBvcmlnaW4pLCBhZGQgdGhpcyBuZXcgZGF0
YWJhc2UKICAgICAvLyB0byB0aGUgcXVvdGEgbWFuYWdlciBub3cKKyAgICBTdHJpbmcgZnVsbEZp
bGVQYXRoID0gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChv
cmlnaW5QYXRoLCBmaWxlTmFtZSk7CiAgICAgewogICAgICAgICBMb2NrZXI8T3JpZ2luUXVvdGFN
YW5hZ2VyPiBsb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOwogICAgICAgICBpZiAob3JpZ2lu
UXVvdGFNYW5hZ2VyKCkudHJhY2tzT3JpZ2luKG9yaWdpbikpCi0gICAgICAgICAgICBvcmlnaW5R
dW90YU1hbmFnZXIoKS5hZGREYXRhYmFzZShvcmlnaW4sIG5hbWUsIGZpbGVuYW1lKTsKKyAgICAg
ICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLmFkZERhdGFiYXNlKG9yaWdpbiwgbmFtZSwgZnVs
bEZpbGVQYXRoKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIGZpbGVuYW1lOworICAgIHJldHVy
biBmdWxsRmlsZVBhdGg7CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpwb3B1bGF0ZU9yaWdp
bnMoKQpAQCAtNDIzLDggKzQwMyw3IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNr
ZXI6OnVzYWcKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICAKLSAgICBsb25nIGxvbmcgc2l6ZTsKLSAgICByZXR1cm4gZ2V0RmlsZVNpemUocGF0aCwg
c2l6ZSkgPyBzaXplIDogMDsKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJh
c2VGaWxlU2l6ZShwYXRoKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRh
YmFzZShEYXRhYmFzZSogZGF0YWJhc2UpCkBAIC02NjUsNyArNjQ0LDcgQEAgdm9pZCBEYXRhYmFz
ZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbihTZWN1cgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgZGVsZXRlRW1wdHlEaXJlY3Rvcnkob3JpZ2luUGF0aChvcmlnaW4pKTsKKyAgICBTUUxpdGVG
aWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KG9yaWdpblBhdGgob3JpZ2lu
KSk7CiAKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpblBvc3NpYmx5TGFzdFJlZmVy
ZW5jZSA9IG9yaWdpbjsKICAgICB7CkBAIC02NzksOCArNjU4LDggQEAgdm9pZCBEYXRhYmFzZVRy
YWNrZXI6OmRlbGV0ZU9yaWdpbihTZWN1cgogICAgICAgICBpZiAobV9xdW90YU1hcC0+aXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgICAg
ICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICBkZWxldGVGaWxlKHRyYWNrZXJE
YXRhYmFzZVBhdGgoKSk7Ci0gICAgICAgICAgICBkZWxldGVFbXB0eURpcmVjdG9yeShtX2RhdGFi
YXNlRGlyZWN0b3J5UGF0aCk7CisJICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNl
RmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOworCSAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxl
dGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoKTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtNzYzLDcgKzc0Miw3IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpk
ZWxldGVEYXRhYmFzZUZpbGUKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVsZXRlZERh
dGFiYXNlcy5zaXplKCk7ICsraSkKICAgICAgICAgZGVsZXRlZERhdGFiYXNlc1tpXS0+bWFya0Fz
RGVsZXRlZEFuZENsb3NlKCk7CiAKLSAgICByZXR1cm4gZGVsZXRlRmlsZShmdWxsUGF0aCk7Cisg
ICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShmdWxsUGF0aCk7
CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXRDbGllbnQoRGF0YWJhc2VUcmFja2VyQ2xp
ZW50KiBjbGllbnQpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAJKHJl
dmlzaW9uIDQ1NDQ0KQorKysgV2ViQ29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQog
Ci0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04MiwxMyArODIsOSBAQCB1bnNpZ25lZCBsb25n
IGxvbmcgT3JpZ2luVXNhZ2VSZWNvcmQ6OmRpCiAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9
IG1fZGF0YWJhc2VNYXAuZ2V0KCppVW5rbm93bikuZmlsZW5hbWU7CiAgICAgICAgIEFTU0VSVCgh
cGF0aC5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAgIAotICAgICAgICBsb25nIGxvbmcgc2l6
ZTsKLSAgICAgICAgaWYgKGdldEZpbGVTaXplKHBhdGgsIHNpemUpKQotICAgICAgICAgICAgbV9k
YXRhYmFzZU1hcC5zZXQoKmlVbmtub3duLCBEYXRhYmFzZUVudHJ5KHBhdGgsIHNpemUpKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXaGVuIHdlIGNhbid0IGRldGVybWluZSB0aGUg
ZmlsZSBzaXplLCB3ZSdsbCBqdXN0IGhhdmUgdG8gYXNzdW1lIHRoZSBmaWxlIGlzIG1pc3Npbmcv
aW5hY2Nlc3NpYmxlLgotICAgICAgICAgICAgbV9kYXRhYmFzZU1hcC5zZXQoKmlVbmtub3duLCBE
YXRhYmFzZUVudHJ5KHBhdGgsIDApKTsKLSAgICAgICAgfQorICAgICAgICAvLyBXaGVuIHdlIGNh
bid0IGRldGVybWluZSB0aGUgZmlsZSBzaXplLCB3ZSdsbCBqdXN0IGhhdmUgdG8gYXNzdW1lIHRo
ZSBmaWxlIGlzIG1pc3NpbmcvaW5hY2Nlc3NpYmxlLgorICAgICAgICBsb25nIGxvbmcgc2l6ZSA9
IFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUocGF0aCk7CisgICAgICAgIG1f
ZGF0YWJhc2VNYXAuc2V0KCppVW5rbm93biwgRGF0YWJhc2VFbnRyeShwYXRoLCBzaXplKSk7CiAg
ICAgfQogICAgIG1fdW5rbm93blNldC5jbGVhcigpOwogICAgIAo=
</data>
<flag name="review"
          id="16643"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32148</attachid>
            <date>2009-07-01 15:21:02 -0700</date>
            <delta_ts>2009-07-01 15:48:07 -0700</delta_ts>
            <desc>patch</desc>
            <filename>ppatch</filename>
            <type>text/plain</type>
            <size>27531</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTQ1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMDktMDctMDEgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRzIGFuIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW4gdGhlIERCIGNsYXNzZXMgYW5kIHRo
ZSBmaWxlCisgICAgICAgIHN5c3RlbSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFkZCBvdXIgb3duIGxv
Z2ljIGZvciBzdG9yaW5nLCBvcGVuaW5nLAorICAgICAgICBkZWxldGluZywgZXRjLiBkYXRhYmFz
ZXMuCisKKyAgICAgICAgVGhlIHBhdGNoIHdhcyB0ZXN0ZWQgdXNpbmcgdGhlIHRlc3RzIGluIFdl
YkNvcmUvc3RvcmFnZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjYwNTQKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdl
YkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U6Om9wZW4pOiBEZWxlZ2F0aW5nIHRoZSBqb2Igb2Ygb3BlbmluZyBEQiBmaWxlcyB0byBT
UUxpdGVGaWxlU3lzdGVtIHRvIGFsbG93IHVzZSBvZiBjdXN0b20gVkZTcy4KKyAgICAgICAgKiBw
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3dp
bi9GaWxlU3lzdGVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUpOiBJ
bXBsZW1lbnRlZC4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlOjpkYXRhYmFzZVNpemUpOiBUaGUgY29kZSB0aGF0IHJldHVybnMgdGhl
IHNpemUgb2YgYSBEQiBmaWxlIG1vdmVkIHRvIFNRTGl0ZUZpbGVTeXN0ZW0uCisgICAgICAgICog
c3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjpEYXRhYmFzZVRyYWNrZXIpOiBBZGRlZCB0aGUgYWJpbGl0eSB0byByZWdpc3RlciBh
IGN1c3RvbSBTUUxpdGUgVkZTLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0
cmFja2VyRGF0YWJhc2VQYXRoKTogREIgZmlsZS1yZWxhdGVkIG9wZXJhdGlvbnMgbW92ZWQgdG8g
U1FMaXRlRmlsZVN5c3RlbS4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6b3Bl
blRyYWNrZXJEYXRhYmFzZSk6IERCIGZpbGUtcmVsYXRlZCBvcGVyYXRpb25zIG1vdmVkIHRvIFNR
TGl0ZUZpbGVTeXN0ZW0uCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Om9yaWdp
blBhdGgpOiBEQiBmaWxlLXJlbGF0ZWQgb3BlcmF0aW9ucyBtb3ZlZCB0byBTUUxpdGVGaWxlU3lz
dGVtLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFi
YXNlKTogREIgZmlsZS1yZWxhdGVkIG9wZXJhdGlvbnMgbW92ZWQgdG8gU1FMaXRlRmlsZVN5c3Rl
bS4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dXNhZ2VGb3JEYXRhYmFzZSk6
IERCIGZpbGUtcmVsYXRlZCBvcGVyYXRpb25zIG1vdmVkIHRvIFNRTGl0ZUZpbGVTeXN0ZW0uCisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6IERCIGZpbGUt
cmVsYXRlZCBvcGVyYXRpb25zIG1vdmVkIHRvIFNRTGl0ZUZpbGVTeXN0ZW0uCisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZSk6IERCIGZpbGUtcmVs
YXRlZCBvcGVyYXRpb25zIG1vdmVkIHRvIFNRTGl0ZUZpbGVTeXN0ZW0uCisgICAgICAgICogc3Rv
cmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5Vc2Fn
ZVJlY29yZDo6ZGlza1VzYWdlKTogREIgZmlsZS1yZWxhdGVkIG9wZXJhdGlvbnMgbW92ZWQgdG8g
U1FMaXRlRmlsZVN5c3RlbS4KKwogMjAwOS0wNy0wMSAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXph
Y2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEJldGggRGFraW4uCkluZGV4OiBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUu
YW0JKHJldmlzaW9uIDQ1NDUxKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBj
b3B5KQpAQCAtMjAzOCw2ICsyMDM4LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVBdXRob3JpemVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlRGF0YWJhc2UuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRh
YmFzZS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBcCisJ
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVTdGF0ZW1lbnQuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24u
Y3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnBybwkocmV2aXNpb24gNDU0NTEpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzI2LDYgKzEzMjYsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
U1FMSVRFPTEpIHsKICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgcGxhdGZvcm0vc3FsL1NRTGl0
ZUF1dGhvcml6ZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNw
cCBcCisgICAgICAgIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBcCiAgICAgICAg
IHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vc3Fs
L1NRTGl0ZVRyYW5zYWN0aW9uLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL3NxbC9TUUxWYWx1ZS5j
cHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0
NTQ1MSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMTQwLDYgKzIwMTQwLDE0IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJ
CQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxzcWxcU1FMaXRlRmlsZVN5
c3RlbS5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cc3FsXFNRTGl0ZUZpbGVTeXN0ZW0uaCINCisJCQkJCT4NCisJ
CQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxz
cWxcU1FMaXRlU3RhdGVtZW50LmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NTQ1MSkK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzgwLDYgKzM3ODAsOCBAQAogCQlCMkZBM0UxODBBQjc1QTZGMDAwRTVBQzQgLyog
SlNTVkdab29tRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJGQTNEMzAwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHWm9vbUV2ZW50LmNwcCAq
LzsgfTsKIAkJQjJGQTNFMTkwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHWm9vbUV2ZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkZBM0QzMTBBQjc1
QTZGMDAwRTVBQzQgLyogSlNTVkdab29tRXZlbnQuaCAqLzsgfTsKIAkJQjUwRjVCODEwRTk2Q0Q5
OTAwQUQ3MUE2IC8qIFdlYkNvcmVPYmpDRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjUwRjVCODAwRTk2Q0Q5OTAwQUQ3MUE2IC8qIFdlYkNv
cmVPYmpDRXh0cmFzLm1tICovOyBzZXR0aW5ncyA9IHtDT01QSUxFUl9GTEFHUyA9ICItV25vLWRl
cHJlY2F0ZWQtZGVjbGFyYXRpb25zIjsgfTsgfTsKKwkJQjVBNjg0MjIwRkZBQkU5ODAwRDI0Njg5
IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEI1QTY4NDIxMEZGQUJFOTgwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVt
LmggKi87IH07CisJCUI1QTY4NDI0MEZGQUJFQUEwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVt
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1QTY4
NDIzMEZGQUJFQUEwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCAqLzsgfTsKIAkJQkMw
MEYwMDQwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZFMEUwQTE4NTUwMEZEMDRFMyAvKiBET01G
aWxlLmggKi87IH07CiAJCUJDMDBGMDA1MEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMEVGRkYwRTBB
MTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gKi87IH07CiAJCUJDMDBGMDA2MEUwQTE4NTUwMEZE
MDRFMyAvKiBET01GaWxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMDBGMDAwMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlSW50ZXJu
YWwuaCAqLzsgfTsKQEAgLTg1ODQsNiArODU4Niw4IEBACiAJCUIyRkEzRDMwMEFCNzVBNkYwMDBF
NUFDNCAvKiBKU1NWR1pvb21FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNTVkdab29tRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkZBM0QzMTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdab29tRXZlbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHWm9vbUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUI1MEY1QjgwMEU5NkNEOTkwMEFENzFBNiAvKiBXZWJDb3JlT2JqQ0V4
dHJhcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVP
YmpDRXh0cmFzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNUE2ODQyMTBGRkFC
RTk4MDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBTUUxpdGVGaWxlU3lzdGVtLmg7IHBhdGggPSBzcWwvU1FMaXRlRmlsZVN5c3Rl
bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNUE2ODQyMzBGRkFCRUFBMDBEMjQ2
ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBTUUxpdGVGaWxlU3lzdGVtLmNwcDsgcGF0aCA9IHNxbC9TUUxpdGVGaWxlU3lzdGVt
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMEVGRkUwRTBBMTg1NTAwRkQw
NEUzIC8qIERPTUZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRmls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAwRUZGRjBFMEExODU1MDBGRDA0
RTMgLyogRE9NRmlsZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IERPTUZpbGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDBGMDAwMEUwQTE4
NTUwMEZEMDRFMyAvKiBET01GaWxlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRE9NRmlsZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC05NTE0LDYgKzk1MTgsOCBAQAogCQkxQTJFNkU1NjBDQzU1MUUwMDA0QTIwNjIgLyogc3FsICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlCNUE2ODQyMzBG
RkFCRUFBMDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5jcHAgKi8sCisJCQkJQjVBNjg0MjEw
RkZBQkU5ODAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uaCAqLywKIAkJCQkxQTJFNkU1NzBD
QzU1MjEzMDA0QTIwNjIgLyogU1FMVmFsdWUuY3BwICovLAogCQkJCTFBMkU2RTU4MENDNTUyMTMw
MDRBMjA2MiAvKiBTUUxWYWx1ZS5oICovLAogCQkJCTFBMkU2RTc4MENDNTU2RDUwMDRBMjA2MiAv
KiBTUUxpdGVBdXRob3JpemVyLmNwcCAqLywKQEAgLTE2OTEzLDYgKzE2OTE5LDcgQEAKIAkJCQlC
Q0JDQUUzRDBGRjE5Mzk5MDAwNzYyQUUgLyogSlNEYXRhR3JpZERhdGFTb3VyY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUM1MEQwRTgzMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdEQUFFRjBGRjk2MTVEMDBDRTAxMzggLyogRE9NRGF0
YUdyaWREYXRhU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCNUE2ODQyMjBGRkFCRTk4MDBE
MjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xODkyNyw2ICsx
ODkzNCw3IEBACiAJCQkJQkM3N0QyMzkwRkYyOTgwODAwNzA4ODdCIC8qIERhdGFHcmlkQ29sdW1u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1MEQwRTgyMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9y
YWdlTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDN0RBQUVFMEZGOTYxNUQwMENF
MDEzOCAvKiBET01EYXRhR3JpZERhdGFTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjVB
Njg0MjQwRkZBQkVBQTAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCShyZXZpc2lv
biA0NTQ1MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiRGF0YWJhc2VBdXRob3Jp
emVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0u
aCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKIAogI2luY2x1ZGUgPHNxbGl0ZTMuaD4K
QEAgLTYwLDkgKzYxLDcgQEAgYm9vbCBTUUxpdGVEYXRhYmFzZTo6b3Blbihjb25zdCBTdHJpbmcm
IAogewogICAgIGNsb3NlKCk7CiAgICAgCi0gICAgLy8gU1FMaXRlIGV4cGVjdHMgYSBudWxsIHRl
cm1pbmF0b3Igb24gaXRzIFVURi0xNiBzdHJpbmdzLgotICAgIFN0cmluZyBwYXRoID0gZmlsZW5h
bWU7Ci0gICAgbV9sYXN0RXJyb3IgPSBzcWxpdGUzX29wZW4xNihwYXRoLmNoYXJhY3RlcnNXaXRo
TnVsbFRlcm1pbmF0aW9uKCksICZtX2RiKTsKKyAgICBtX2xhc3RFcnJvciA9IFNRTGl0ZUZpbGVT
eXN0ZW06Om9wZW5EYXRhYmFzZShmaWxlbmFtZSwgJm1fZGIpOwogICAgIGlmIChtX2xhc3RFcnJv
ciAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgZGF0YWJhc2UgZmFp
bGVkIHRvIGxvYWQgZnJvbSAlc1xuQ2F1c2UgLSAlcyIsIGZpbGVuYW1lLmFzY2lpKCkuZGF0YSgp
LAogICAgICAgICAgICAgc3FsaXRlM19lcnJtc2cobV9kYikpOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MjMgQEAKKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlDQorICogbWV0
Og0KKyAqDQorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0KKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXINCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlDQorICogZGlzdHJpYnV0aW9uLg0KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQ0KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKi8NCisNCisjaW5jbHVkZSAiY29uZmlnLmgiDQor
I2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCINCisNCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5o
Ig0KKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIg0KKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1l
bnQuaCINCisjaW5jbHVkZSA8c3FsaXRlMy5oPg0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisN
CitTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKCkNCit7DQorfQ0KKw0KK3ZvaWQg
U1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKQ0KK3sNCit9DQorDQoraW50IFNR
TGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBzcWxp
dGUzKiogZGF0YWJhc2UpDQorew0KKyAgICAvLyBTUUxpdGUgZXhwZWN0cyBhIG51bGwgdGVybWlu
YXRvciBvbiBpdHMgVVRGLTE2IHN0cmluZ3MuDQorICAgIFN0cmluZyBwYXRoID0gZmlsZU5hbWU7
DQorICAgIHJldHVybiBzcWxpdGUzX29wZW4xNihwYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1p
bmF0aW9uKCksIGRhdGFiYXNlKTsNCit9DQorDQorU3RyaW5nIFNRTGl0ZUZpbGVTeXN0ZW06Omdl
dEZpbGVOYW1lRm9yTmV3RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBkYkRpciwgY29uc3QgU3RyaW5n
JiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmLCBTUUxpdGVEYXRhYmFzZSogZGIpDQorew0KKyAgICAvLyB0cnkgdG8gZ2V0
IHRoZSBuZXh0IHNlcXVlbmNlIG51bWJlciBmcm9tIHRoZSBnaXZlbiBkYXRhYmFzZQ0KKyAgICAv
LyBpZiB3ZSBjYW4ndCBnZXQgYSBudW1iZXIsIHJldHVybiBhbiBlbXB0eSBzdHJpbmcNCisgICAg
U1FMaXRlU3RhdGVtZW50IHNlcXVlbmNlU3RhdGVtZW50KCpkYiwgIlNFTEVDVCBzZXEgRlJPTSBz
cWxpdGVfc2VxdWVuY2UgV0hFUkUgbmFtZT0nRGF0YWJhc2VzJzsiKTsNCisgICAgaWYgKHNlcXVl
bmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykNCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsNCisgICAgaW50IHJlc3VsdCA9IHNlcXVlbmNlU3RhdGVtZW50LnN0ZXAoKTsNCisg
ICAgaW50NjRfdCBzZXEgPSAwOw0KKyAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykNCisg
ICAgICAgIHNlcSA9IHNlcXVlbmNlU3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOw0KKyAgICBl
bHNlIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkNCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsNCisgICAgc2VxdWVuY2VTdGF0ZW1lbnQuZmluYWxpemUoKTsNCisNCisgICAgLy8gaW5jcmVt
ZW50IHRoZSBudW1iZXIgdW50aWwgd2UgY2FuIHVzZSBpdCB0byBmb3JtIGEgZmlsZSBuYW1lIHRo
YXQgZG9lc24ndCBleGlzdA0KKyAgICBTdHJpbmcgZmlsZU5hbWU7DQorICAgIGRvIHsNCisgICAg
ICAgICsrc2VxOw0KKyAgICAgICAgZmlsZU5hbWUgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
ZGJEaXIsIFN0cmluZzo6Zm9ybWF0KCIlMDE2bGx4LmRiIiwgc2VxKSk7DQorICAgIH0gd2hpbGUg
KGZpbGVFeGlzdHMoZmlsZU5hbWUpKTsNCisNCisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIl
MDE2bGx4LmRiIiwgc2VxKTsNCit9DQorDQorU3RyaW5nIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVu
ZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcm
IGZpbGVOYW1lKQ0KK3sNCisgICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRo
LCBmaWxlTmFtZSk7DQorfQ0KKw0KK2Jvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJh
c2VEaXJlY3RvcnlFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQ0KK3sNCisgICAgaWYgKHBhdGgu
aXNFbXB0eSgpKQ0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICByZXR1cm4gbWFrZUFsbERp
cmVjdG9yaWVzKHBhdGgpOw0KK30NCisNCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURh
dGFiYXNlRmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBib29sIGNoZWNrUGF0aE9u
bHkpDQorew0KKyAgICBpZiAoZmlsZU5hbWUuaXNFbXB0eSgpKQ0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOw0KKw0KKyAgICBpZiAoY2hlY2tQYXRoT25seSkgew0KKyAgICAgICAgU3RyaW5nIGRpciA9
IGRpcmVjdG9yeU5hbWUoZmlsZU5hbWUpOw0KKyAgICAgICAgcmV0dXJuIGVuc3VyZURhdGFiYXNl
RGlyZWN0b3J5RXhpc3RzKGRpcik7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGZpbGVFeGlzdHMo
ZmlsZU5hbWUpOw0KK30NCisNCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0
YWJhc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQ0KK3sNCisgICAgcmV0dXJuIGRlbGV0
ZUVtcHR5RGlyZWN0b3J5KHBhdGgpOw0KK30NCisNCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRl
bGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQ0KK3sNCisgICAgcmV0dXJu
IGRlbGV0ZUZpbGUoZmlsZU5hbWUpOw0KK30NCisNCitsb25nIGxvbmcgU1FMaXRlRmlsZVN5c3Rl
bTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQ0KK3sgICAgICAg
IA0KKyAgICBsb25nIGxvbmcgc2l6ZTsNCisgICAgcmV0dXJuIGdldEZpbGVTaXplKGZpbGVOYW1l
LCBzaXplKSA/IHNpemUgOiAwOw0KK30NCisNCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMTQgQEAKKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
DQorICogbWV0Og0KKyAqDQorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0KKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXINCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQorICogZGlzdHJpYnV0aW9uLg0KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQ0KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QNCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKi8NCisNCisjaWZuZGVmIFNRTGl0
ZUZpbGVTeXN0ZW1faA0KKyNkZWZpbmUgU1FMaXRlRmlsZVN5c3RlbV9oDQorDQorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiDQorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4NCisNCitzdHJ1
Y3Qgc3FsaXRlMzsNCisNCituYW1lc3BhY2UgV2ViQ29yZSB7DQorDQorY2xhc3MgU1FMaXRlRGF0
YWJhc2U7DQorDQorLy8gQSBjbGFzcyB0aGF0IGFic3RyYWN0cyB0aGUgZmlsZSBzeXN0ZW0gcmVs
YXRlZCBvcGVyYXRpb25zIHJlcXVpcmVkDQorLy8gYnkgdGhlIFdlYktpdCBkYXRhYmFzZSBjb2Rl
Lg0KK2NsYXNzIFNRTGl0ZUZpbGVTeXN0ZW0gew0KK3B1YmxpYzoNCisgICAgLy8gUmVnaXN0ZXJz
IGEgdXNlci1kZWZpbmVkIFNRTGl0ZSBWRlMuDQorICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyU1FM
aXRlVkZTKCk7DQorDQorICAgIC8vIE9wZW5zIGEgZGF0YWJhc2UgZmlsZS4NCisgICAgLy8NCisg
ICAgLy8gZmlsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgZmlsZS4NCisgICAgLy8g
ZGF0YWJhc2UgLSBUaGUgU1FMaXRlIHN0cnVjdHVyZSB0aGF0IHJlcHJlc2VudHMgdGhlIGRhdGFi
YXNlIHN0b3JlZA0KKyAgICAvLyAgICAgICAgICAgIGluIHRoZSBnaXZlbiBmaWxlLg0KKyAgICBz
dGF0aWMgaW50IG9wZW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBzcWxpdGUzKiog
ZGF0YWJhc2UpOw0KKw0KKyAgICAvLyBSZXR1cm5zIHRoZSBmaWxlIG5hbWUgZm9yIGEgZGF0YWJh
c2UuDQorICAgIC8vDQorICAgIC8vIGRiRGlyIC0gVGhlIGRpcmVjdG9yeSB3aGVyZSBhbGwgZGF0
YWJhc2VzIGFyZSBzdG9yZWQuDQorICAgIC8vIGRiTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBkYXRh
YmFzZS4NCisgICAgLy8gb3JpZ2luSWRlbnRpZmllciAtIFRoZSBvcmlnaW4gdGhhdCB3YW50cyB0
byB1c2UgdGhpcyBkYXRhYmFzZS4NCisgICAgLy8gZGIgLSBBIGRhdGFiYXNlIHdpdGggYSBudW1i
ZXIgZ2VuZXJhdG9yIHVzZWQgdG8gY3JlYXRlIHVuaXF1ZSBmaWxlIG5hbWVzLg0KKyAgICBzdGF0
aWMgU3RyaW5nIGdldEZpbGVOYW1lRm9yTmV3RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBkYkRpciwg
Y29uc3QgU3RyaW5nJiBkYk5hbWUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIFNRTGl0ZURhdGFiYXNl
KiBkYik7DQorDQorICAgIC8vIENyZWF0ZXMgYW4gYWJzb2x1dGUgZmlsZSBwYXRoIGdpdmVuIGEg
ZGlyZWN0b3J5IGFuZCBhIGZpbGUgbmFtZS4NCisgICAgLy8NCisgICAgLy8gcGF0aCAtIFRoZSBk
aXJlY3RvcnkuDQorICAgIC8vIGZpbGVOYW1lIC0gVGhlIGZpbGUgbmFtZS4NCisgICAgc3RhdGlj
IFN0cmluZyBhcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7DQorDQorICAgIC8vIE1ha2VzIHN1cmUgdGhlIGdpdmVu
IGRpcmVjdG9yeSBleGlzdHMsIGJ5IGNyZWF0aW5nIGFsbCBtaXNzaW5nIGRpcmVjdG9yaWVzDQor
ICAgIC8vIG9uIHRoZSBnaXZlbiBwYXRoLg0KKyAgICAvLw0KKyAgICAvLyBwYXRoIC0gVGhlIGRp
cmVjdG9yeS4NCisgICAgc3RhdGljIGJvb2wgZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMo
Y29uc3QgU3RyaW5nJiBwYXRoKTsNCisNCisgICAgLy8gSWYgJ2NoZWNrUGF0aE9ubHknIGlzIGZh
bHNlLCB0aGVuIHRoaXMgbWV0aG9kIG9ubHkgY2hlY2tzIGlmIHRoZSBnaXZlbiBmaWxlIGV4aXN0
cy4NCisgICAgLy8gSWYgJ2NoZWNrUGF0aE9ubHknIGlzIHRydWUsIHRoZW4gdGhpcyBtZXRob2Qg
bWFrZXMgc3VyZSBhbGwgZGlyZWN0b3JpZXMgb24gdGhlDQorICAgIC8vIGdpdmVuIHBhdGggZXhp
c3QgYnkgY3JlYXRpbmcgdGhlIG1pc3Npbmcgb25lcywgYW5kIGRvZXMgbm90IGNoZWNrIGlmIHRo
ZSBmaWxlDQorICAgIC8vIGl0c2VsZiBleGlzdHMuDQorICAgIC8vDQorICAgIC8vIFNvbWV0aW1l
cyB3ZSBleHBlY3QgYSBEQiBmaWxlIHRvIGV4aXN0OyBvdGhlciB0aW1lcywgd2UncmUgT0sgd2l0
aCBjcmVhdGluZyBhIG5ldw0KKyAgICAvLyBEQiBmaWxlLCBidXQgd2Ugd2FudCB0byBtYWtlIHN1
cmUgdGhhdCB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHdlIHdhbnQgdG8gcHV0IHRoZQ0KKyAgICAv
LyBuZXcgREIgZmlsZSBleGlzdHMuIFRoaXMgbWV0aG9kIGNvdmVycyBib3RoIGNhc2VzLg0KKyAg
ICAvLw0KKyAgICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuDQorICAgIC8vIGNoZWNrUGF0
aE9ubHkgLSBJZiB0cnVlLCB3ZSBvbmx5IG1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiBkaXJlY3Rv
cnkgZXhpc3RzLg0KKyAgICAvLyAgICAgICAgICAgICAgICAgSWYgZmFsc2UsIHdlIG9ubHkgY2hl
Y2sgaWYgdGhlIGZpbGUgZXhpc3RzLg0KKyAgICBzdGF0aWMgYm9vbCBlbnN1cmVEYXRhYmFzZUZp
bGVFeGlzdHMoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgYm9vbCBjaGVja1BhdGhPbmx5KTsNCisN
CisgICAgLy8gRGVsZXRlcyBhbiBlbXB0eSBkYXRhYmFzZSBkaXJlY3RvcnkuDQorICAgIC8vDQor
ICAgIC8vIHBhdGggLSBUaGUgZGlyZWN0b3J5Lg0KKyAgICBzdGF0aWMgYm9vbCBkZWxldGVFbXB0
eURhdGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCk7DQorDQorICAgIC8vIERlbGV0
ZXMgYSBkYXRhYmFzZSBmaWxlLg0KKyAgICAvLw0KKyAgICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxl
IG5hbWUuDQorICAgIHN0YXRpYyBib29sIGRlbGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcm
IGZpbGVOYW1lKTsNCisNCisgICAgLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZGF0YWJhc2Ug
ZmlsZS4NCisgICAgLy8NCisgICAgLy8gZmlsZU5hbWUgLSBUaGUgZmlsZSBuYW1lLg0KKyAgICBz
dGF0aWMgbG9uZyBsb25nIGdldERhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSk7DQorDQorcHJpdmF0ZToNCisgICAgLy8gZG8gbm90IGluc3RhbnRpYXRlIHRoaXMgY2xhc3MN
CisgICAgU1FMaXRlRmlsZVN5c3RlbSgpOw0KK307IC8vIGNsYXNzIFNRTGl0ZUZpbGVTeXN0ZW0N
CisNCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQorDQorI2VuZGlmDQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJldmlzaW9uIDQ1NDUxKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw4ICsx
MzMsMTAgQEAgU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdAogCiBTdHJp
bmcgZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgU3RyaW5nIGZpbGVOYW1lID0gcGF0aEdl
dEZpbGVOYW1lKHBhdGgpOworICAgIFN0cmluZyBkaXJOYW1lID0gU3RyaW5nKHBhdGgpOworICAg
IGRpck5hbWUudHJ1bmNhdGUoZGlyTmFtZS5sZW5ndGgoKSAtIHBhdGhHZXRGaWxlTmFtZShwYXRo
KS5sZW5ndGgoKSk7CisgICAgcmV0dXJuIGRpck5hbWU7CiB9CiAKIHN0YXRpYyBTdHJpbmcgYnVu
ZGxlTmFtZSgpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDQ1NDUxKQorKysgV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBA
QAogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCkBAIC00OCw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIk9yaWdpblF1b3RhTWFuYWdlci5oIgogI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisj
aW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5o
IgogI2luY2x1ZGUgIlNRTFJlc3VsdFNldC5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CkBAIC0zMzgsMTAgKzMzOCw3IEBAIHZvaWQgRGF0YWJhc2U6OnN0b3AoKQogCiB1bnNpZ25lZCBs
b25nIGxvbmcgRGF0YWJhc2U6OmRhdGFiYXNlU2l6ZSgpIGNvbnN0CiB7Ci0gICAgbG9uZyBsb25n
IHNpemU7Ci0gICAgaWYgKCFnZXRGaWxlU2l6ZShtX2ZpbGVuYW1lLCBzaXplKSkKLSAgICAgICAg
c2l6ZSA9IDA7Ci0gICAgcmV0dXJuIHNpemU7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06
OmdldERhdGFiYXNlRmlsZVNpemUobV9maWxlbmFtZSk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9u
ZyBEYXRhYmFzZTo6bWF4aW11bVNpemUoKSBjb25zdApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
VHJhY2tlci5jcHAJKHJldmlzaW9uIDQ1NDUxKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
VHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxMiBAQAogI2luY2x1ZGUg
IkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIk9yaWdpblF1b3RhTWFuYWdlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFz
aC5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0
ZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KQEAgLTY5LDYgKzY5LDcgQEAgRGF0YWJhc2VUcmFja2VyOjpEYXRhYmFzZVRy
YWNrZXIoKQogICAgICwgbV90aHJlYWQoY3VycmVudFRocmVhZCgpKQogI2VuZGlmCiB7CisgICAg
U1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKTsKIH0KIAogdm9pZCBEYXRhYmFz
ZVRyYWNrZXI6OnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCkBA
IC04Nyw5ICs4OCw3IEBAIGNvbnN0IFN0cmluZyYgRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZUQK
IFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBhdGgoKSBjb25zdAogewog
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWQpOwotICAgIGlmIChtX2RhdGFi
YXNlRGlyZWN0b3J5UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICByZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRo
LCAiRGF0YWJhc2VzLmRiIik7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERh
dGFiYXNlRmlsZU5hbWVUb1BhdGgobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsICJEYXRhYmFzZXMu
ZGIiKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UoYm9v
bCBjcmVhdGVJZkRvZXNOb3RFeGlzdCkKQEAgLTEwMCwxMyArOTksOSBAQCB2b2lkIERhdGFiYXNl
VHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmlu
ZyBkYXRhYmFzZVBhdGggPSB0cmFja2VyRGF0YWJhc2VQYXRoKCk7Ci0gICAgaWYgKGRhdGFiYXNl
UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghY3JlYXRlSWZEb2Vz
Tm90RXhpc3QgJiYgIWZpbGVFeGlzdHMoZGF0YWJhc2VQYXRoKSkKKyAgICBpZiAoIVNRTGl0ZUZp
bGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyhkYXRhYmFzZVBhdGgsIGNyZWF0ZUlm
RG9lc05vdEV4aXN0KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbWFrZUFsbERpcmVjdG9yaWVz
KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoKTsKICAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihkYXRh
YmFzZVBhdGgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGRvIGRvIGhlcmU/CiAgICAgICAg
IHJldHVybjsKQEAgLTE5MCw5ICsxODUsNyBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50
cnlGb3JEYXRhYmFzCiBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5QYXRoKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBt
X3RocmVhZCk7Ci0gICAgaWYgKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkp
OworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9Q
YXRoKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigp
KTsKIH0KIAogU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1
cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZOb3RF
eGlzdHMpCkBAIC0yMDYsNyArMTk5LDcgQEAgU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBh
dGhGb3JEYXRhYgogICAgIFN0cmluZyBvcmlnaW5QYXRoID0gdGhpcy0+b3JpZ2luUGF0aChvcmln
aW4pOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgcGF0aCBmb3IgdGhpcyBTZWN1cml0eU9y
aWdpbiBleGlzdHMKLSAgICBpZiAoY3JlYXRlSWZOb3RFeGlzdHMgJiYgIW1ha2VBbGxEaXJlY3Rv
cmllcyhvcmlnaW5QYXRoKSkKKyAgICBpZiAoY3JlYXRlSWZOb3RFeGlzdHMgJiYgIVNRTGl0ZUZp
bGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRGlyZWN0b3J5RXhpc3RzKG9yaWdpblBhdGgpKQogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgCiAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBwYXRo
IGZvciB0aGlzIGRhdGFiYXNlIHlldApAQCAtMjI0LDcgKzIxNyw3IEBAIFN0cmluZyBEYXRhYmFz
ZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0
ZXAoKTsKIAogICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KQotICAgICAgICByZXR1cm4g
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG9yaWdpblBhdGgsIHN0YXRlbWVudC5nZXRDb2x1bW5U
ZXh0KDApKTsKKyAgICAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNl
RmlsZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOwog
ICAgIGlmICghY3JlYXRlSWZOb3RFeGlzdHMpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAg
ICAgICAgCkBAIC0yNDEsMzMgKzIzNCwyMCBAQCBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxs
UGF0aEZvckRhdGFiCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICByZXN1bHQgPSBzZXF1
ZW5jZVN0YXRlbWVudC5zdGVwKCk7CiAKLSAgICAvLyBUaGlzIGhhcyBhIHJhbmdlIG9mIDJeNjMg
YW5kIHN0YXJ0cyBhdCAwIGZvciBldmVyeSB0aW1lIGEgdXNlciByZXNldHMgU2FmYXJpIC0KLSAg
ICAvLyBJIGNhbid0IGltYWdpbmUgaXQnZCBvdmVyIG92ZXJmbG93Ci0gICAgaW50NjRfdCBzZXEg
PSAwOwotICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KSB7Ci0gICAgICAgIHNlcSA9IHNl
cXVlbmNlU3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOwotICAgIH0gZWxzZSBpZiAocmVzdWx0
ICE9IFNRTFJlc3VsdERvbmUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBzZXF1ZW5j
ZVN0YXRlbWVudC5maW5hbGl6ZSgpOwotCi0gICAgU3RyaW5nIGZpbGVuYW1lOwotICAgIGRvIHsK
LSAgICAgICAgKytzZXE7Ci0gICAgICAgIGZpbGVuYW1lID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KG9yaWdpblBhdGgsIFN0cmluZzo6Zm9ybWF0KCIlMDE2bGx4LmRiIiwgc2VxKSk7Ci0gICAg
fSB3aGlsZSAoZmlsZUV4aXN0cyhmaWxlbmFtZSkpOwotCi0gICAgaWYgKCFhZGREYXRhYmFzZShv
cmlnaW4sIG5hbWUsIFN0cmluZzo6Zm9ybWF0KCIlMDE2bGx4LmRiIiwgc2VxKSkpCisgICAgU3Ry
aW5nIGZpbGVOYW1lID0gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RmlsZU5hbWVGb3JOZXdEYXRhYmFz
ZShvcmlnaW5QYXRoLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLCBuYW1lLCAmbV9kYXRh
YmFzZSk7CisgICAgaWYgKCFhZGREYXRhYmFzZShvcmlnaW4sIG5hbWUsIGZpbGVOYW1lKSkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgLy8gSWYgdGhpcyBvcmlnaW4ncyBxdW90YSBp
cyBiZWluZyB0cmFja2VkIChvcGVuIGhhbmRsZSB0byBhIGRhdGFiYXNlIGluIHRoaXMgb3JpZ2lu
KSwgYWRkIHRoaXMgbmV3IGRhdGFiYXNlCiAgICAgLy8gdG8gdGhlIHF1b3RhIG1hbmFnZXIgbm93
CisgICAgU3RyaW5nIGZ1bGxGaWxlUGF0aCA9IFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFi
YXNlRmlsZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwgZmlsZU5hbWUpOwogICAgIHsKICAgICAgICAg
TG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gbG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsK
ICAgICAgICAgaWYgKG9yaWdpblF1b3RhTWFuYWdlcigpLnRyYWNrc09yaWdpbihvcmlnaW4pKQot
ICAgICAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkuYWRkRGF0YWJhc2Uob3JpZ2luLCBuYW1l
LCBmaWxlbmFtZSk7CisgICAgICAgICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5hZGREYXRhYmFz
ZShvcmlnaW4sIG5hbWUsIGZ1bGxGaWxlUGF0aCk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBm
aWxlbmFtZTsKKyAgICByZXR1cm4gZnVsbEZpbGVQYXRoOwogfQogCiB2b2lkIERhdGFiYXNlVHJh
Y2tlcjo6cG9wdWxhdGVPcmlnaW5zKCkKQEAgLTQyMyw4ICs0MDMsNyBAQCB1bnNpZ25lZCBsb25n
IGxvbmcgRGF0YWJhc2VUcmFja2VyOjp1c2FnCiAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgCi0gICAgbG9uZyBsb25nIHNpemU7Ci0gICAgcmV0dXJu
IGdldEZpbGVTaXplKHBhdGgsIHNpemUpID8gc2l6ZSA6IDA7CisgICAgcmV0dXJuIFNRTGl0ZUZp
bGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUocGF0aCk7CiB9CiAKIHZvaWQgRGF0YWJhc2VU
cmFja2VyOjphZGRPcGVuRGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFiYXNlKQpAQCAtNjY1LDcgKzY0
NCw3IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXIKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KG9yaWdpblBhdGgob3Jp
Z2luKSk7CisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9y
eShvcmlnaW5QYXRoKG9yaWdpbikpOwogCiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmln
aW5Qb3NzaWJseUxhc3RSZWZlcmVuY2UgPSBvcmlnaW47CiAgICAgewpAQCAtNjc5LDggKzY1OCw4
IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXIKICAgICAgICAgaWYg
KG1fcXVvdGFNYXAtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYgKG1fZGF0YWJhc2UuaXNP
cGVuKCkpCiAgICAgICAgICAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICAgICAg
ZGVsZXRlRmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOwotICAgICAgICAgICAgZGVsZXRlRW1w
dHlEaXJlY3RvcnkobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgpOworCSAgICBTUUxpdGVGaWxlU3lz
dGVtOjpkZWxldGVEYXRhYmFzZUZpbGUodHJhY2tlckRhdGFiYXNlUGF0aCgpKTsKKwkgICAgU1FM
aXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShtX2RhdGFiYXNlRGly
ZWN0b3J5UGF0aCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTc2Myw3ICs3NDIsNyBAQCBib29s
IERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRlbGV0ZWREYXRhYmFzZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGRlbGV0ZWRE
YXRhYmFzZXNbaV0tPm1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOwogCi0gICAgcmV0dXJuIGRlbGV0
ZUZpbGUoZnVsbFBhdGgpOworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRh
YmFzZUZpbGUoZnVsbFBhdGgpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6c2V0Q2xpZW50
KERhdGFiYXNlVHJhY2tlckNsaWVudCogY2xpZW50KQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL09y
aWdpblVzYWdlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvT3JpZ2lu
VXNhZ2VSZWNvcmQuY3BwCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9Pcmln
aW5Vc2FnZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2lm
IEVOQUJMRShEQVRBQkFTRSkKIAotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJT
UUxpdGVGaWxlU3lzdGVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODIsMTMgKzgy
LDkgQEAgdW5zaWduZWQgbG9uZyBsb25nIE9yaWdpblVzYWdlUmVjb3JkOjpkaQogICAgICAgICBj
b25zdCBTdHJpbmcmIHBhdGggPSBtX2RhdGFiYXNlTWFwLmdldCgqaVVua25vd24pLmZpbGVuYW1l
OwogICAgICAgICBBU1NFUlQoIXBhdGguaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgbG9uZyBsb25nIHNpemU7Ci0gICAgICAgIGlmIChnZXRGaWxlU2l6ZShwYXRoLCBzaXpl
KSkKLSAgICAgICAgICAgIG1fZGF0YWJhc2VNYXAuc2V0KCppVW5rbm93biwgRGF0YWJhc2VFbnRy
eShwYXRoLCBzaXplKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gV2hlbiB3ZSBj
YW4ndCBkZXRlcm1pbmUgdGhlIGZpbGUgc2l6ZSwgd2UnbGwganVzdCBoYXZlIHRvIGFzc3VtZSB0
aGUgZmlsZSBpcyBtaXNzaW5nL2luYWNjZXNzaWJsZS4KLSAgICAgICAgICAgIG1fZGF0YWJhc2VN
YXAuc2V0KCppVW5rbm93biwgRGF0YWJhc2VFbnRyeShwYXRoLCAwKSk7Ci0gICAgICAgIH0KKyAg
ICAgICAgLy8gV2hlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgdGhlIGZpbGUgc2l6ZSwgd2UnbGwganVz
dCBoYXZlIHRvIGFzc3VtZSB0aGUgZmlsZSBpcyBtaXNzaW5nL2luYWNjZXNzaWJsZS4KKyAgICAg
ICAgbG9uZyBsb25nIHNpemUgPSBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXpl
KHBhdGgpOworICAgICAgICBtX2RhdGFiYXNlTWFwLnNldCgqaVVua25vd24sIERhdGFiYXNlRW50
cnkocGF0aCwgc2l6ZSkpOwogICAgIH0KICAgICBtX3Vua25vd25TZXQuY2xlYXIoKTsKICAgICAK
</data>
<flag name="review"
          id="16650"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32151</attachid>
            <date>2009-07-01 15:42:55 -0700</date>
            <delta_ts>2009-07-01 15:55:25 -0700</delta_ts>
            <desc>patch</desc>
            <filename>ppatch</filename>
            <type>text/plain</type>
            <size>27537</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTQ1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMDktMDctMDEgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRzIGFuIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW4gdGhlIERCIGNsYXNzZXMgYW5kIHRo
ZSBmaWxlCisgICAgICAgIHN5c3RlbSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFkZCBvdXIgb3duIGxv
Z2ljIGZvciBzdG9yaW5nLCBvcGVuaW5nLAorICAgICAgICBkZWxldGluZywgZXRjLiBkYXRhYmFz
ZXMuCisKKyAgICAgICAgVGhlIHBhdGNoIHdhcyB0ZXN0ZWQgdXNpbmcgdGhlIHRlc3RzIGluIFdl
YkNvcmUvc3RvcmFnZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjYwNTQKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdl
YkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U6Om9wZW4pOiBEZWxlZ2F0aW5nIHRoZSBqb2Igb2Ygb3BlbmluZyBEQiBmaWxlcyB0byBT
UUxpdGVGaWxlU3lzdGVtIHRvIGFsbG93IHVzZSBvZiBjdXN0b20gVkZTcy4KKyAgICAgICAgKiBw
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3dp
bi9GaWxlU3lzdGVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUpOiBJ
bXBsZW1lbnRlZC4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlOjpkYXRhYmFzZVNpemUpOiBUaGUgY29kZSB0aGF0IHJldHVybnMgdGhl
IHNpemUgb2YgYSBEQiBmaWxlIG1vdmVkIHRvIFNRTGl0ZUZpbGVTeXN0ZW0uCisgICAgICAgICog
c3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjpEYXRhYmFzZVRyYWNrZXIpOiBBZGRlZCB0aGUgYWJpbGl0eSB0byByZWdpc3RlciBh
IGN1c3RvbSBTUUxpdGUgVkZTLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0
cmFja2VyRGF0YWJhc2VQYXRoKTogREIgZmlsZS1yZWxhdGVkIG9wZXJhdGlvbnMgbW92ZWQgdG8g
U1FMaXRlRmlsZVN5c3RlbS4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6b3Bl
blRyYWNrZXJEYXRhYmFzZSk6IERCIGZpbGUtcmVsYXRlZCBvcGVyYXRpb25zIG1vdmVkIHRvIFNR
TGl0ZUZpbGVTeXN0ZW0uCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Om9yaWdp
blBhdGgpOiBEQiBmaWxlLXJlbGF0ZWQgb3BlcmF0aW9ucyBtb3ZlZCB0byBTUUxpdGVGaWxlU3lz
dGVtLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFi
YXNlKTogREIgZmlsZS1yZWxhdGVkIG9wZXJhdGlvbnMgbW92ZWQgdG8gU1FMaXRlRmlsZVN5c3Rl
bS4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dXNhZ2VGb3JEYXRhYmFzZSk6
IERCIGZpbGUtcmVsYXRlZCBvcGVyYXRpb25zIG1vdmVkIHRvIFNRTGl0ZUZpbGVTeXN0ZW0uCisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6IERCIGZpbGUt
cmVsYXRlZCBvcGVyYXRpb25zIG1vdmVkIHRvIFNRTGl0ZUZpbGVTeXN0ZW0uCisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZSk6IERCIGZpbGUtcmVs
YXRlZCBvcGVyYXRpb25zIG1vdmVkIHRvIFNRTGl0ZUZpbGVTeXN0ZW0uCisgICAgICAgICogc3Rv
cmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5Vc2Fn
ZVJlY29yZDo6ZGlza1VzYWdlKTogREIgZmlsZS1yZWxhdGVkIG9wZXJhdGlvbnMgbW92ZWQgdG8g
U1FMaXRlRmlsZVN5c3RlbS4KKwogMjAwOS0wNy0wMSAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXph
Y2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEJldGggRGFraW4uCkluZGV4OiBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUu
YW0JKHJldmlzaW9uIDQ1NDUxKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBj
b3B5KQpAQCAtMjAzOCw2ICsyMDM4LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVBdXRob3JpemVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlRGF0YWJhc2UuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRh
YmFzZS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBcCisJ
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVTdGF0ZW1lbnQuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24u
Y3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnBybwkocmV2aXNpb24gNDU0NTEpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzI2LDYgKzEzMjYsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
U1FMSVRFPTEpIHsKICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgcGxhdGZvcm0vc3FsL1NRTGl0
ZUF1dGhvcml6ZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNw
cCBcCisgICAgICAgIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBcCiAgICAgICAg
IHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vc3Fs
L1NRTGl0ZVRyYW5zYWN0aW9uLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL3NxbC9TUUxWYWx1ZS5j
cHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0
NTQ1MSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMTQwLDYgKzIwMTQwLDE0IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJ
CQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxzcWxcU1FMaXRlRmlsZVN5
c3RlbS5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cc3FsXFNRTGl0ZUZpbGVTeXN0ZW0uaCINCisJCQkJCT4NCisJ
CQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxz
cWxcU1FMaXRlU3RhdGVtZW50LmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NTQ1MSkK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzgwLDYgKzM3ODAsOCBAQAogCQlCMkZBM0UxODBBQjc1QTZGMDAwRTVBQzQgLyog
SlNTVkdab29tRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJGQTNEMzAwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHWm9vbUV2ZW50LmNwcCAq
LzsgfTsKIAkJQjJGQTNFMTkwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHWm9vbUV2ZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkZBM0QzMTBBQjc1
QTZGMDAwRTVBQzQgLyogSlNTVkdab29tRXZlbnQuaCAqLzsgfTsKIAkJQjUwRjVCODEwRTk2Q0Q5
OTAwQUQ3MUE2IC8qIFdlYkNvcmVPYmpDRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjUwRjVCODAwRTk2Q0Q5OTAwQUQ3MUE2IC8qIFdlYkNv
cmVPYmpDRXh0cmFzLm1tICovOyBzZXR0aW5ncyA9IHtDT01QSUxFUl9GTEFHUyA9ICItV25vLWRl
cHJlY2F0ZWQtZGVjbGFyYXRpb25zIjsgfTsgfTsKKwkJQjVBNjg0MjIwRkZBQkU5ODAwRDI0Njg5
IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEI1QTY4NDIxMEZGQUJFOTgwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVt
LmggKi87IH07CisJCUI1QTY4NDI0MEZGQUJFQUEwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVt
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1QTY4
NDIzMEZGQUJFQUEwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCAqLzsgfTsKIAkJQkMw
MEYwMDQwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZFMEUwQTE4NTUwMEZEMDRFMyAvKiBET01G
aWxlLmggKi87IH07CiAJCUJDMDBGMDA1MEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMEVGRkYwRTBB
MTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gKi87IH07CiAJCUJDMDBGMDA2MEUwQTE4NTUwMEZE
MDRFMyAvKiBET01GaWxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMDBGMDAwMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlSW50ZXJu
YWwuaCAqLzsgfTsKQEAgLTg1ODQsNiArODU4Niw4IEBACiAJCUIyRkEzRDMwMEFCNzVBNkYwMDBF
NUFDNCAvKiBKU1NWR1pvb21FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNTVkdab29tRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkZBM0QzMTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdab29tRXZlbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHWm9vbUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUI1MEY1QjgwMEU5NkNEOTkwMEFENzFBNiAvKiBXZWJDb3JlT2JqQ0V4
dHJhcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVP
YmpDRXh0cmFzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNUE2ODQyMTBGRkFC
RTk4MDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBTUUxpdGVGaWxlU3lzdGVtLmg7IHBhdGggPSBzcWwvU1FMaXRlRmlsZVN5c3Rl
bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNUE2ODQyMzBGRkFCRUFBMDBEMjQ2
ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBTUUxpdGVGaWxlU3lzdGVtLmNwcDsgcGF0aCA9IHNxbC9TUUxpdGVGaWxlU3lzdGVt
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMEVGRkUwRTBBMTg1NTAwRkQw
NEUzIC8qIERPTUZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRmls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAwRUZGRjBFMEExODU1MDBGRDA0
RTMgLyogRE9NRmlsZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IERPTUZpbGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDBGMDAwMEUwQTE4
NTUwMEZEMDRFMyAvKiBET01GaWxlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRE9NRmlsZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC05NTE0LDYgKzk1MTgsOCBAQAogCQkxQTJFNkU1NjBDQzU1MUUwMDA0QTIwNjIgLyogc3FsICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlCNUE2ODQyMzBG
RkFCRUFBMDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5jcHAgKi8sCisJCQkJQjVBNjg0MjEw
RkZBQkU5ODAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uaCAqLywKIAkJCQkxQTJFNkU1NzBD
QzU1MjEzMDA0QTIwNjIgLyogU1FMVmFsdWUuY3BwICovLAogCQkJCTFBMkU2RTU4MENDNTUyMTMw
MDRBMjA2MiAvKiBTUUxWYWx1ZS5oICovLAogCQkJCTFBMkU2RTc4MENDNTU2RDUwMDRBMjA2MiAv
KiBTUUxpdGVBdXRob3JpemVyLmNwcCAqLywKQEAgLTE2OTEzLDYgKzE2OTE5LDcgQEAKIAkJCQlC
Q0JDQUUzRDBGRjE5Mzk5MDAwNzYyQUUgLyogSlNEYXRhR3JpZERhdGFTb3VyY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUM1MEQwRTgzMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdEQUFFRjBGRjk2MTVEMDBDRTAxMzggLyogRE9NRGF0
YUdyaWREYXRhU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCNUE2ODQyMjBGRkFCRTk4MDBE
MjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xODkyNyw2ICsx
ODkzNCw3IEBACiAJCQkJQkM3N0QyMzkwRkYyOTgwODAwNzA4ODdCIC8qIERhdGFHcmlkQ29sdW1u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1MEQwRTgyMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9y
YWdlTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDN0RBQUVFMEZGOTYxNUQwMENF
MDEzOCAvKiBET01EYXRhR3JpZERhdGFTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjVB
Njg0MjQwRkZBQkVBQTAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCShyZXZpc2lv
biA0NTQ1MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiRGF0YWJhc2VBdXRob3Jp
emVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0u
aCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKIAogI2luY2x1ZGUgPHNxbGl0ZTMuaD4K
QEAgLTYwLDkgKzYxLDcgQEAgYm9vbCBTUUxpdGVEYXRhYmFzZTo6b3Blbihjb25zdCBTdHJpbmcm
IAogewogICAgIGNsb3NlKCk7CiAgICAgCi0gICAgLy8gU1FMaXRlIGV4cGVjdHMgYSBudWxsIHRl
cm1pbmF0b3Igb24gaXRzIFVURi0xNiBzdHJpbmdzLgotICAgIFN0cmluZyBwYXRoID0gZmlsZW5h
bWU7Ci0gICAgbV9sYXN0RXJyb3IgPSBzcWxpdGUzX29wZW4xNihwYXRoLmNoYXJhY3RlcnNXaXRo
TnVsbFRlcm1pbmF0aW9uKCksICZtX2RiKTsKKyAgICBtX2xhc3RFcnJvciA9IFNRTGl0ZUZpbGVT
eXN0ZW06Om9wZW5EYXRhYmFzZShmaWxlbmFtZSwgJm1fZGIpOwogICAgIGlmIChtX2xhc3RFcnJv
ciAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgZGF0YWJhc2UgZmFp
bGVkIHRvIGxvYWQgZnJvbSAlc1xuQ2F1c2UgLSAlcyIsIGZpbGVuYW1lLmFzY2lpKCkuZGF0YSgp
LAogICAgICAgICAgICAgc3FsaXRlM19lcnJtc2cobV9kYikpOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MjMgQEAKKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlDQorICogbWV0
Og0KKyAqDQorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0KKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXINCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlDQorICogZGlzdHJpYnV0aW9uLg0KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQ0KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKi8NCisNCisjaW5jbHVkZSAiY29uZmlnLmgiDQor
I2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCINCisNCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5o
Ig0KKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIg0KKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1l
bnQuaCINCisjaW5jbHVkZSA8c3FsaXRlMy5oPg0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisN
CitTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKCkNCit7DQorfQ0KKw0KK3ZvaWQg
U1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKQ0KK3sNCit9DQorDQoraW50IFNR
TGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBzcWxp
dGUzKiogZGF0YWJhc2UpDQorew0KKyAgICAvLyBTUUxpdGUgZXhwZWN0cyBhIG51bGwgdGVybWlu
YXRvciBvbiBpdHMgVVRGLTE2IHN0cmluZ3MuDQorICAgIFN0cmluZyBwYXRoID0gZmlsZU5hbWU7
DQorICAgIHJldHVybiBzcWxpdGUzX29wZW4xNihwYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1p
bmF0aW9uKCksIGRhdGFiYXNlKTsNCit9DQorDQorU3RyaW5nIFNRTGl0ZUZpbGVTeXN0ZW06Omdl
dEZpbGVOYW1lRm9yTmV3RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBkYkRpciwgY29uc3QgU3RyaW5n
JiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmLCBTUUxpdGVEYXRhYmFzZSogZGIpDQorew0KKyAgICAvLyB0cnkgdG8gZ2V0
IHRoZSBuZXh0IHNlcXVlbmNlIG51bWJlciBmcm9tIHRoZSBnaXZlbiBkYXRhYmFzZQ0KKyAgICAv
LyBpZiB3ZSBjYW4ndCBnZXQgYSBudW1iZXIsIHJldHVybiBhbiBlbXB0eSBzdHJpbmcNCisgICAg
U1FMaXRlU3RhdGVtZW50IHNlcXVlbmNlU3RhdGVtZW50KCpkYiwgIlNFTEVDVCBzZXEgRlJPTSBz
cWxpdGVfc2VxdWVuY2UgV0hFUkUgbmFtZT0nRGF0YWJhc2VzJzsiKTsNCisgICAgaWYgKHNlcXVl
bmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykNCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsNCisgICAgaW50IHJlc3VsdCA9IHNlcXVlbmNlU3RhdGVtZW50LnN0ZXAoKTsNCisg
ICAgaW50NjRfdCBzZXEgPSAwOw0KKyAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykNCisg
ICAgICAgIHNlcSA9IHNlcXVlbmNlU3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOw0KKyAgICBl
bHNlIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkNCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsNCisgICAgc2VxdWVuY2VTdGF0ZW1lbnQuZmluYWxpemUoKTsNCisNCisgICAgLy8gaW5jcmVt
ZW50IHRoZSBudW1iZXIgdW50aWwgd2UgY2FuIHVzZSBpdCB0byBmb3JtIGEgZmlsZSBuYW1lIHRo
YXQgZG9lc24ndCBleGlzdA0KKyAgICBTdHJpbmcgZmlsZU5hbWU7DQorICAgIGRvIHsNCisgICAg
ICAgICsrc2VxOw0KKyAgICAgICAgZmlsZU5hbWUgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
ZGJEaXIsIFN0cmluZzo6Zm9ybWF0KCIlMDE2bGx4LmRiIiwgc2VxKSk7DQorICAgIH0gd2hpbGUg
KGZpbGVFeGlzdHMoZmlsZU5hbWUpKTsNCisNCisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIl
MDE2bGx4LmRiIiwgc2VxKTsNCit9DQorDQorU3RyaW5nIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVu
ZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcm
IGZpbGVOYW1lKQ0KK3sNCisgICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRo
LCBmaWxlTmFtZSk7DQorfQ0KKw0KK2Jvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJh
c2VEaXJlY3RvcnlFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQ0KK3sNCisgICAgaWYgKHBhdGgu
aXNFbXB0eSgpKQ0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICByZXR1cm4gbWFrZUFsbERp
cmVjdG9yaWVzKHBhdGgpOw0KK30NCisNCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURh
dGFiYXNlRmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBib29sIGNoZWNrUGF0aE9u
bHkpDQorew0KKyAgICBpZiAoZmlsZU5hbWUuaXNFbXB0eSgpKQ0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOw0KKw0KKyAgICBpZiAoY2hlY2tQYXRoT25seSkgew0KKyAgICAgICAgU3RyaW5nIGRpciA9
IGRpcmVjdG9yeU5hbWUoZmlsZU5hbWUpOw0KKyAgICAgICAgcmV0dXJuIGVuc3VyZURhdGFiYXNl
RGlyZWN0b3J5RXhpc3RzKGRpcik7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGZpbGVFeGlzdHMo
ZmlsZU5hbWUpOw0KK30NCisNCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0
YWJhc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQ0KK3sNCisgICAgcmV0dXJuIGRlbGV0
ZUVtcHR5RGlyZWN0b3J5KHBhdGgpOw0KK30NCisNCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRl
bGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQ0KK3sNCisgICAgcmV0dXJu
IGRlbGV0ZUZpbGUoZmlsZU5hbWUpOw0KK30NCisNCitsb25nIGxvbmcgU1FMaXRlRmlsZVN5c3Rl
bTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQ0KK3sgICAgICAg
IA0KKyAgICBsb25nIGxvbmcgc2l6ZTsNCisgICAgcmV0dXJuIGdldEZpbGVTaXplKGZpbGVOYW1l
LCBzaXplKSA/IHNpemUgOiAwOw0KK30NCisNCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMTQgQEAKKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
DQorICogbWV0Og0KKyAqDQorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0KKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXINCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQorICogZGlzdHJpYnV0aW9uLg0KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQ0KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QNCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKi8NCisNCisjaWZuZGVmIFNRTGl0
ZUZpbGVTeXN0ZW1faA0KKyNkZWZpbmUgU1FMaXRlRmlsZVN5c3RlbV9oDQorDQorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiDQorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4NCisNCitzdHJ1
Y3Qgc3FsaXRlMzsNCisNCituYW1lc3BhY2UgV2ViQ29yZSB7DQorDQorY2xhc3MgU1FMaXRlRGF0
YWJhc2U7DQorDQorLy8gQSBjbGFzcyB0aGF0IGFic3RyYWN0cyB0aGUgZmlsZSBzeXN0ZW0gcmVs
YXRlZCBvcGVyYXRpb25zIHJlcXVpcmVkDQorLy8gYnkgdGhlIFdlYktpdCBkYXRhYmFzZSBjb2Rl
Lg0KK2NsYXNzIFNRTGl0ZUZpbGVTeXN0ZW0gew0KK3B1YmxpYzoNCisgICAgLy8gUmVnaXN0ZXJz
IGEgdXNlci1kZWZpbmVkIFNRTGl0ZSBWRlMuDQorICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyU1FM
aXRlVkZTKCk7DQorDQorICAgIC8vIE9wZW5zIGEgZGF0YWJhc2UgZmlsZS4NCisgICAgLy8NCisg
ICAgLy8gZmlsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgZmlsZS4NCisgICAgLy8g
ZGF0YWJhc2UgLSBUaGUgU1FMaXRlIHN0cnVjdHVyZSB0aGF0IHJlcHJlc2VudHMgdGhlIGRhdGFi
YXNlIHN0b3JlZA0KKyAgICAvLyAgICAgICAgICAgIGluIHRoZSBnaXZlbiBmaWxlLg0KKyAgICBz
dGF0aWMgaW50IG9wZW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBzcWxpdGUzKiog
ZGF0YWJhc2UpOw0KKw0KKyAgICAvLyBSZXR1cm5zIHRoZSBmaWxlIG5hbWUgZm9yIGEgZGF0YWJh
c2UuDQorICAgIC8vDQorICAgIC8vIGRiRGlyIC0gVGhlIGRpcmVjdG9yeSB3aGVyZSBhbGwgZGF0
YWJhc2VzIGFyZSBzdG9yZWQuDQorICAgIC8vIGRiTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBkYXRh
YmFzZS4NCisgICAgLy8gb3JpZ2luSWRlbnRpZmllciAtIFRoZSBvcmlnaW4gdGhhdCB3YW50cyB0
byB1c2UgdGhpcyBkYXRhYmFzZS4NCisgICAgLy8gZGIgLSBBIGRhdGFiYXNlIHdpdGggYSBudW1i
ZXIgZ2VuZXJhdG9yIHVzZWQgdG8gY3JlYXRlIHVuaXF1ZSBmaWxlIG5hbWVzLg0KKyAgICBzdGF0
aWMgU3RyaW5nIGdldEZpbGVOYW1lRm9yTmV3RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBkYkRpciwg
Y29uc3QgU3RyaW5nJiBkYk5hbWUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIFNRTGl0ZURhdGFiYXNl
KiBkYik7DQorDQorICAgIC8vIENyZWF0ZXMgYW4gYWJzb2x1dGUgZmlsZSBwYXRoIGdpdmVuIGEg
ZGlyZWN0b3J5IGFuZCBhIGZpbGUgbmFtZS4NCisgICAgLy8NCisgICAgLy8gcGF0aCAtIFRoZSBk
aXJlY3RvcnkuDQorICAgIC8vIGZpbGVOYW1lIC0gVGhlIGZpbGUgbmFtZS4NCisgICAgc3RhdGlj
IFN0cmluZyBhcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7DQorDQorICAgIC8vIE1ha2VzIHN1cmUgdGhlIGdpdmVu
IGRpcmVjdG9yeSBleGlzdHMsIGJ5IGNyZWF0aW5nIGFsbCBtaXNzaW5nIGRpcmVjdG9yaWVzDQor
ICAgIC8vIG9uIHRoZSBnaXZlbiBwYXRoLg0KKyAgICAvLw0KKyAgICAvLyBwYXRoIC0gVGhlIGRp
cmVjdG9yeS4NCisgICAgc3RhdGljIGJvb2wgZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMo
Y29uc3QgU3RyaW5nJiBwYXRoKTsNCisNCisgICAgLy8gSWYgJ2NoZWNrUGF0aE9ubHknIGlzIGZh
bHNlLCB0aGVuIHRoaXMgbWV0aG9kIG9ubHkgY2hlY2tzIGlmIHRoZSBnaXZlbiBmaWxlIGV4aXN0
cy4NCisgICAgLy8gSWYgJ2NoZWNrUGF0aE9ubHknIGlzIHRydWUsIHRoZW4gdGhpcyBtZXRob2Qg
bWFrZXMgc3VyZSBhbGwgZGlyZWN0b3JpZXMgb24gdGhlDQorICAgIC8vIGdpdmVuIHBhdGggZXhp
c3QgYnkgY3JlYXRpbmcgdGhlIG1pc3Npbmcgb25lcywgYW5kIGRvZXMgbm90IGNoZWNrIGlmIHRo
ZSBmaWxlDQorICAgIC8vIGl0c2VsZiBleGlzdHMuDQorICAgIC8vDQorICAgIC8vIFNvbWV0aW1l
cyB3ZSBleHBlY3QgYSBEQiBmaWxlIHRvIGV4aXN0OyBvdGhlciB0aW1lcywgd2UncmUgT0sgd2l0
aCBjcmVhdGluZyBhIG5ldw0KKyAgICAvLyBEQiBmaWxlLCBidXQgd2Ugd2FudCB0byBtYWtlIHN1
cmUgdGhhdCB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHdlIHdhbnQgdG8gcHV0IHRoZQ0KKyAgICAv
LyBuZXcgREIgZmlsZSBleGlzdHMuIFRoaXMgbWV0aG9kIGNvdmVycyBib3RoIGNhc2VzLg0KKyAg
ICAvLw0KKyAgICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuDQorICAgIC8vIGNoZWNrUGF0
aE9ubHkgLSBJZiB0cnVlLCB3ZSBvbmx5IG1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiBkaXJlY3Rv
cnkgZXhpc3RzLg0KKyAgICAvLyAgICAgICAgICAgICAgICAgSWYgZmFsc2UsIHdlIG9ubHkgY2hl
Y2sgaWYgdGhlIGZpbGUgZXhpc3RzLg0KKyAgICBzdGF0aWMgYm9vbCBlbnN1cmVEYXRhYmFzZUZp
bGVFeGlzdHMoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgYm9vbCBjaGVja1BhdGhPbmx5KTsNCisN
CisgICAgLy8gRGVsZXRlcyBhbiBlbXB0eSBkYXRhYmFzZSBkaXJlY3RvcnkuDQorICAgIC8vDQor
ICAgIC8vIHBhdGggLSBUaGUgZGlyZWN0b3J5Lg0KKyAgICBzdGF0aWMgYm9vbCBkZWxldGVFbXB0
eURhdGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCk7DQorDQorICAgIC8vIERlbGV0
ZXMgYSBkYXRhYmFzZSBmaWxlLg0KKyAgICAvLw0KKyAgICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxl
IG5hbWUuDQorICAgIHN0YXRpYyBib29sIGRlbGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcm
IGZpbGVOYW1lKTsNCisNCisgICAgLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZGF0YWJhc2Ug
ZmlsZS4NCisgICAgLy8NCisgICAgLy8gZmlsZU5hbWUgLSBUaGUgZmlsZSBuYW1lLg0KKyAgICBz
dGF0aWMgbG9uZyBsb25nIGdldERhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSk7DQorDQorcHJpdmF0ZToNCisgICAgLy8gZG8gbm90IGluc3RhbnRpYXRlIHRoaXMgY2xhc3MN
CisgICAgU1FMaXRlRmlsZVN5c3RlbSgpOw0KK307IC8vIGNsYXNzIFNRTGl0ZUZpbGVTeXN0ZW0N
CisNCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQorDQorI2VuZGlmDQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJldmlzaW9uIDQ1NDUxKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw4ICsx
MzMsMTAgQEAgU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdAogCiBTdHJp
bmcgZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgU3RyaW5nIGZpbGVOYW1lID0gcGF0aEdl
dEZpbGVOYW1lKHBhdGgpOworICAgIFN0cmluZyBkaXJOYW1lID0gU3RyaW5nKHBhdGgpOworICAg
IGRpck5hbWUudHJ1bmNhdGUoZGlyTmFtZS5sZW5ndGgoKSAtIHBhdGhHZXRGaWxlTmFtZShwYXRo
KS5sZW5ndGgoKSk7CisgICAgcmV0dXJuIGRpck5hbWU7CiB9CiAKIHN0YXRpYyBTdHJpbmcgYnVu
ZGxlTmFtZSgpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDQ1NDUxKQorKysgV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBA
QAogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCkBAIC00OCw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIk9yaWdpblF1b3RhTWFuYWdlci5oIgogI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisj
aW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5o
IgogI2luY2x1ZGUgIlNRTFJlc3VsdFNldC5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CkBAIC0zMzgsMTAgKzMzOCw3IEBAIHZvaWQgRGF0YWJhc2U6OnN0b3AoKQogCiB1bnNpZ25lZCBs
b25nIGxvbmcgRGF0YWJhc2U6OmRhdGFiYXNlU2l6ZSgpIGNvbnN0CiB7Ci0gICAgbG9uZyBsb25n
IHNpemU7Ci0gICAgaWYgKCFnZXRGaWxlU2l6ZShtX2ZpbGVuYW1lLCBzaXplKSkKLSAgICAgICAg
c2l6ZSA9IDA7Ci0gICAgcmV0dXJuIHNpemU7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06
OmdldERhdGFiYXNlRmlsZVNpemUobV9maWxlbmFtZSk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9u
ZyBEYXRhYmFzZTo6bWF4aW11bVNpemUoKSBjb25zdApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
VHJhY2tlci5jcHAJKHJldmlzaW9uIDQ1NDUxKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
VHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxMiBAQAogI2luY2x1ZGUg
IkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIk9yaWdpblF1b3RhTWFuYWdlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFz
aC5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0
ZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KQEAgLTY5LDYgKzY5LDcgQEAgRGF0YWJhc2VUcmFja2VyOjpEYXRhYmFzZVRy
YWNrZXIoKQogICAgICwgbV90aHJlYWQoY3VycmVudFRocmVhZCgpKQogI2VuZGlmCiB7CisgICAg
U1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKTsKIH0KIAogdm9pZCBEYXRhYmFz
ZVRyYWNrZXI6OnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCkBA
IC04Nyw5ICs4OCw3IEBAIGNvbnN0IFN0cmluZyYgRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZUQK
IFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBhdGgoKSBjb25zdAogewog
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWQpOwotICAgIGlmIChtX2RhdGFi
YXNlRGlyZWN0b3J5UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICByZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRo
LCAiRGF0YWJhc2VzLmRiIik7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERh
dGFiYXNlRmlsZU5hbWVUb1BhdGgobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsICJEYXRhYmFzZXMu
ZGIiKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UoYm9v
bCBjcmVhdGVJZkRvZXNOb3RFeGlzdCkKQEAgLTEwMCwxMyArOTksOSBAQCB2b2lkIERhdGFiYXNl
VHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmlu
ZyBkYXRhYmFzZVBhdGggPSB0cmFja2VyRGF0YWJhc2VQYXRoKCk7Ci0gICAgaWYgKGRhdGFiYXNl
UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghY3JlYXRlSWZEb2Vz
Tm90RXhpc3QgJiYgIWZpbGVFeGlzdHMoZGF0YWJhc2VQYXRoKSkKKyAgICBpZiAoIVNRTGl0ZUZp
bGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyhkYXRhYmFzZVBhdGgsIGNyZWF0ZUlm
RG9lc05vdEV4aXN0KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbWFrZUFsbERpcmVjdG9yaWVz
KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoKTsKICAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihkYXRh
YmFzZVBhdGgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGRvIGRvIGhlcmU/CiAgICAgICAg
IHJldHVybjsKQEAgLTE5MCw5ICsxODUsNyBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50
cnlGb3JEYXRhYmFzCiBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5QYXRoKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBt
X3RocmVhZCk7Ci0gICAgaWYgKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkp
OworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9Q
YXRoKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigp
KTsKIH0KIAogU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1
cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZOb3RF
eGlzdHMpCkBAIC0yMDYsNyArMTk5LDcgQEAgU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBh
dGhGb3JEYXRhYgogICAgIFN0cmluZyBvcmlnaW5QYXRoID0gdGhpcy0+b3JpZ2luUGF0aChvcmln
aW4pOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgcGF0aCBmb3IgdGhpcyBTZWN1cml0eU9y
aWdpbiBleGlzdHMKLSAgICBpZiAoY3JlYXRlSWZOb3RFeGlzdHMgJiYgIW1ha2VBbGxEaXJlY3Rv
cmllcyhvcmlnaW5QYXRoKSkKKyAgICBpZiAoY3JlYXRlSWZOb3RFeGlzdHMgJiYgIVNRTGl0ZUZp
bGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRGlyZWN0b3J5RXhpc3RzKG9yaWdpblBhdGgpKQogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgCiAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBwYXRo
IGZvciB0aGlzIGRhdGFiYXNlIHlldApAQCAtMjI0LDcgKzIxNyw3IEBAIFN0cmluZyBEYXRhYmFz
ZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0
ZXAoKTsKIAogICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KQotICAgICAgICByZXR1cm4g
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG9yaWdpblBhdGgsIHN0YXRlbWVudC5nZXRDb2x1bW5U
ZXh0KDApKTsKKyAgICAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNl
RmlsZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOwog
ICAgIGlmICghY3JlYXRlSWZOb3RFeGlzdHMpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAg
ICAgICAgCkBAIC0yNDEsMzMgKzIzNCwyMCBAQCBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxs
UGF0aEZvckRhdGFiCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICByZXN1bHQgPSBzZXF1
ZW5jZVN0YXRlbWVudC5zdGVwKCk7CiAKLSAgICAvLyBUaGlzIGhhcyBhIHJhbmdlIG9mIDJeNjMg
YW5kIHN0YXJ0cyBhdCAwIGZvciBldmVyeSB0aW1lIGEgdXNlciByZXNldHMgU2FmYXJpIC0KLSAg
ICAvLyBJIGNhbid0IGltYWdpbmUgaXQnZCBvdmVyIG92ZXJmbG93Ci0gICAgaW50NjRfdCBzZXEg
PSAwOwotICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KSB7Ci0gICAgICAgIHNlcSA9IHNl
cXVlbmNlU3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOwotICAgIH0gZWxzZSBpZiAocmVzdWx0
ICE9IFNRTFJlc3VsdERvbmUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBzZXF1ZW5j
ZVN0YXRlbWVudC5maW5hbGl6ZSgpOwotCi0gICAgU3RyaW5nIGZpbGVuYW1lOwotICAgIGRvIHsK
LSAgICAgICAgKytzZXE7Ci0gICAgICAgIGZpbGVuYW1lID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KG9yaWdpblBhdGgsIFN0cmluZzo6Zm9ybWF0KCIlMDE2bGx4LmRiIiwgc2VxKSk7Ci0gICAg
fSB3aGlsZSAoZmlsZUV4aXN0cyhmaWxlbmFtZSkpOwotCi0gICAgaWYgKCFhZGREYXRhYmFzZShv
cmlnaW4sIG5hbWUsIFN0cmluZzo6Zm9ybWF0KCIlMDE2bGx4LmRiIiwgc2VxKSkpCisgICAgU3Ry
aW5nIGZpbGVOYW1lID0gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RmlsZU5hbWVGb3JOZXdEYXRhYmFz
ZShvcmlnaW5QYXRoLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLCBuYW1lLCAmbV9kYXRh
YmFzZSk7CisgICAgaWYgKCFhZGREYXRhYmFzZShvcmlnaW4sIG5hbWUsIGZpbGVOYW1lKSkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgLy8gSWYgdGhpcyBvcmlnaW4ncyBxdW90YSBp
cyBiZWluZyB0cmFja2VkIChvcGVuIGhhbmRsZSB0byBhIGRhdGFiYXNlIGluIHRoaXMgb3JpZ2lu
KSwgYWRkIHRoaXMgbmV3IGRhdGFiYXNlCiAgICAgLy8gdG8gdGhlIHF1b3RhIG1hbmFnZXIgbm93
CisgICAgU3RyaW5nIGZ1bGxGaWxlUGF0aCA9IFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFi
YXNlRmlsZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwgZmlsZU5hbWUpOwogICAgIHsKICAgICAgICAg
TG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gbG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsK
ICAgICAgICAgaWYgKG9yaWdpblF1b3RhTWFuYWdlcigpLnRyYWNrc09yaWdpbihvcmlnaW4pKQot
ICAgICAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkuYWRkRGF0YWJhc2Uob3JpZ2luLCBuYW1l
LCBmaWxlbmFtZSk7CisgICAgICAgICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5hZGREYXRhYmFz
ZShvcmlnaW4sIG5hbWUsIGZ1bGxGaWxlUGF0aCk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBm
aWxlbmFtZTsKKyAgICByZXR1cm4gZnVsbEZpbGVQYXRoOwogfQogCiB2b2lkIERhdGFiYXNlVHJh
Y2tlcjo6cG9wdWxhdGVPcmlnaW5zKCkKQEAgLTQyMyw4ICs0MDMsNyBAQCB1bnNpZ25lZCBsb25n
IGxvbmcgRGF0YWJhc2VUcmFja2VyOjp1c2FnCiAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgCi0gICAgbG9uZyBsb25nIHNpemU7Ci0gICAgcmV0dXJu
IGdldEZpbGVTaXplKHBhdGgsIHNpemUpID8gc2l6ZSA6IDA7CisgICAgcmV0dXJuIFNRTGl0ZUZp
bGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUocGF0aCk7CiB9CiAKIHZvaWQgRGF0YWJhc2VU
cmFja2VyOjphZGRPcGVuRGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFiYXNlKQpAQCAtNjY1LDcgKzY0
NCw3IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXIKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KG9yaWdpblBhdGgob3Jp
Z2luKSk7CisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9y
eShvcmlnaW5QYXRoKG9yaWdpbikpOwogCiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmln
aW5Qb3NzaWJseUxhc3RSZWZlcmVuY2UgPSBvcmlnaW47CiAgICAgewpAQCAtNjc5LDggKzY1OCw4
IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXIKICAgICAgICAgaWYg
KG1fcXVvdGFNYXAtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYgKG1fZGF0YWJhc2UuaXNP
cGVuKCkpCiAgICAgICAgICAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICAgICAg
ZGVsZXRlRmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOwotICAgICAgICAgICAgZGVsZXRlRW1w
dHlEaXJlY3RvcnkobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgpOworCSAgICBTUUxpdGVGaWxlU3lz
dGVtOjpkZWxldGVEYXRhYmFzZUZpbGUodHJhY2tlckRhdGFiYXNlUGF0aCgpKTsKKyAgICAgICAg
ICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShtX2RhdGFi
YXNlRGlyZWN0b3J5UGF0aCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTc2Myw3ICs3NDIsNyBA
QCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGRlbGV0ZWREYXRhYmFzZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGRl
bGV0ZWREYXRhYmFzZXNbaV0tPm1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOwogCi0gICAgcmV0dXJu
IGRlbGV0ZUZpbGUoZnVsbFBhdGgpOworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjpkZWxl
dGVEYXRhYmFzZUZpbGUoZnVsbFBhdGgpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6c2V0
Q2xpZW50KERhdGFiYXNlVHJhY2tlckNsaWVudCogY2xpZW50KQpJbmRleDogV2ViQ29yZS9zdG9y
YWdlL09yaWdpblVzYWdlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
T3JpZ2luVXNhZ2VSZWNvcmQuY3BwCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdlYkNvcmUvc3RvcmFn
ZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAK
IAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNs
dWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODIs
MTMgKzgyLDkgQEAgdW5zaWduZWQgbG9uZyBsb25nIE9yaWdpblVzYWdlUmVjb3JkOjpkaQogICAg
ICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBtX2RhdGFiYXNlTWFwLmdldCgqaVVua25vd24pLmZp
bGVuYW1lOwogICAgICAgICBBU1NFUlQoIXBhdGguaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgbG9uZyBsb25nIHNpemU7Ci0gICAgICAgIGlmIChnZXRGaWxlU2l6ZShwYXRo
LCBzaXplKSkKLSAgICAgICAgICAgIG1fZGF0YWJhc2VNYXAuc2V0KCppVW5rbm93biwgRGF0YWJh
c2VFbnRyeShwYXRoLCBzaXplKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gV2hl
biB3ZSBjYW4ndCBkZXRlcm1pbmUgdGhlIGZpbGUgc2l6ZSwgd2UnbGwganVzdCBoYXZlIHRvIGFz
c3VtZSB0aGUgZmlsZSBpcyBtaXNzaW5nL2luYWNjZXNzaWJsZS4KLSAgICAgICAgICAgIG1fZGF0
YWJhc2VNYXAuc2V0KCppVW5rbm93biwgRGF0YWJhc2VFbnRyeShwYXRoLCAwKSk7Ci0gICAgICAg
IH0KKyAgICAgICAgLy8gV2hlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgdGhlIGZpbGUgc2l6ZSwgd2Un
bGwganVzdCBoYXZlIHRvIGFzc3VtZSB0aGUgZmlsZSBpcyBtaXNzaW5nL2luYWNjZXNzaWJsZS4K
KyAgICAgICAgbG9uZyBsb25nIHNpemUgPSBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZp
bGVTaXplKHBhdGgpOworICAgICAgICBtX2RhdGFiYXNlTWFwLnNldCgqaVVua25vd24sIERhdGFi
YXNlRW50cnkocGF0aCwgc2l6ZSkpOwogICAgIH0KICAgICBtX3Vua25vd25TZXQuY2xlYXIoKTsK
ICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32154</attachid>
            <date>2009-07-01 15:55:25 -0700</date>
            <delta_ts>2009-07-01 16:04:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>ppatch</filename>
            <type>text/plain</type>
            <size>27543</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTQ1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMDktMDctMDEgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRzIGFuIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW4gdGhlIERCIGNsYXNzZXMgYW5kIHRo
ZSBmaWxlCisgICAgICAgIHN5c3RlbSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFkZCBvdXIgb3duIGxv
Z2ljIGZvciBzdG9yaW5nLCBvcGVuaW5nLAorICAgICAgICBkZWxldGluZywgZXRjLiBkYXRhYmFz
ZXMuCisKKyAgICAgICAgVGhlIHBhdGNoIHdhcyB0ZXN0ZWQgdXNpbmcgdGhlIHRlc3RzIGluIFdl
YkNvcmUvc3RvcmFnZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjYwNTQKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdl
YkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U6Om9wZW4pOiBEZWxlZ2F0aW5nIHRoZSBqb2Igb2Ygb3BlbmluZyBEQiBmaWxlcyB0byBT
UUxpdGVGaWxlU3lzdGVtIHRvIGFsbG93IHVzZSBvZiBjdXN0b20gVkZTcy4KKyAgICAgICAgKiBw
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3dp
bi9GaWxlU3lzdGVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUpOiBJ
bXBsZW1lbnRlZC4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlOjpkYXRhYmFzZVNpemUpOiBUaGUgY29kZSB0aGF0IHJldHVybnMgdGhl
IHNpemUgb2YgYSBEQiBmaWxlIG1vdmVkIHRvIFNRTGl0ZUZpbGVTeXN0ZW0uCisgICAgICAgICog
c3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjpEYXRhYmFzZVRyYWNrZXIpOiBBZGRlZCB0aGUgYWJpbGl0eSB0byByZWdpc3RlciBh
IGN1c3RvbSBTUUxpdGUgVkZTLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0
cmFja2VyRGF0YWJhc2VQYXRoKTogREIgZmlsZS1yZWxhdGVkIG9wZXJhdGlvbnMgbW92ZWQgdG8g
U1FMaXRlRmlsZVN5c3RlbS4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6b3Bl
blRyYWNrZXJEYXRhYmFzZSk6IERCIGZpbGUtcmVsYXRlZCBvcGVyYXRpb25zIG1vdmVkIHRvIFNR
TGl0ZUZpbGVTeXN0ZW0uCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Om9yaWdp
blBhdGgpOiBEQiBmaWxlLXJlbGF0ZWQgb3BlcmF0aW9ucyBtb3ZlZCB0byBTUUxpdGVGaWxlU3lz
dGVtLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFi
YXNlKTogREIgZmlsZS1yZWxhdGVkIG9wZXJhdGlvbnMgbW92ZWQgdG8gU1FMaXRlRmlsZVN5c3Rl
bS4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dXNhZ2VGb3JEYXRhYmFzZSk6
IERCIGZpbGUtcmVsYXRlZCBvcGVyYXRpb25zIG1vdmVkIHRvIFNRTGl0ZUZpbGVTeXN0ZW0uCisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6IERCIGZpbGUt
cmVsYXRlZCBvcGVyYXRpb25zIG1vdmVkIHRvIFNRTGl0ZUZpbGVTeXN0ZW0uCisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZSk6IERCIGZpbGUtcmVs
YXRlZCBvcGVyYXRpb25zIG1vdmVkIHRvIFNRTGl0ZUZpbGVTeXN0ZW0uCisgICAgICAgICogc3Rv
cmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5Vc2Fn
ZVJlY29yZDo6ZGlza1VzYWdlKTogREIgZmlsZS1yZWxhdGVkIG9wZXJhdGlvbnMgbW92ZWQgdG8g
U1FMaXRlRmlsZVN5c3RlbS4KKwogMjAwOS0wNy0wMSAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXph
Y2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEJldGggRGFraW4uCkluZGV4OiBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUu
YW0JKHJldmlzaW9uIDQ1NDUxKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBj
b3B5KQpAQCAtMjAzOCw2ICsyMDM4LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVBdXRob3JpemVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlRGF0YWJhc2UuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRh
YmFzZS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBcCisJ
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVTdGF0ZW1lbnQuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24u
Y3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnBybwkocmV2aXNpb24gNDU0NTEpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzI2LDYgKzEzMjYsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
U1FMSVRFPTEpIHsKICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgcGxhdGZvcm0vc3FsL1NRTGl0
ZUF1dGhvcml6ZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNw
cCBcCisgICAgICAgIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBcCiAgICAgICAg
IHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vc3Fs
L1NRTGl0ZVRyYW5zYWN0aW9uLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL3NxbC9TUUxWYWx1ZS5j
cHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0
NTQ1MSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMTQwLDYgKzIwMTQwLDE0IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJ
CQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxzcWxcU1FMaXRlRmlsZVN5
c3RlbS5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cc3FsXFNRTGl0ZUZpbGVTeXN0ZW0uaCINCisJCQkJCT4NCisJ
CQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxz
cWxcU1FMaXRlU3RhdGVtZW50LmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NTQ1MSkK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzgwLDYgKzM3ODAsOCBAQAogCQlCMkZBM0UxODBBQjc1QTZGMDAwRTVBQzQgLyog
SlNTVkdab29tRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJGQTNEMzAwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHWm9vbUV2ZW50LmNwcCAq
LzsgfTsKIAkJQjJGQTNFMTkwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHWm9vbUV2ZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkZBM0QzMTBBQjc1
QTZGMDAwRTVBQzQgLyogSlNTVkdab29tRXZlbnQuaCAqLzsgfTsKIAkJQjUwRjVCODEwRTk2Q0Q5
OTAwQUQ3MUE2IC8qIFdlYkNvcmVPYmpDRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjUwRjVCODAwRTk2Q0Q5OTAwQUQ3MUE2IC8qIFdlYkNv
cmVPYmpDRXh0cmFzLm1tICovOyBzZXR0aW5ncyA9IHtDT01QSUxFUl9GTEFHUyA9ICItV25vLWRl
cHJlY2F0ZWQtZGVjbGFyYXRpb25zIjsgfTsgfTsKKwkJQjVBNjg0MjIwRkZBQkU5ODAwRDI0Njg5
IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEI1QTY4NDIxMEZGQUJFOTgwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVt
LmggKi87IH07CisJCUI1QTY4NDI0MEZGQUJFQUEwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVt
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1QTY4
NDIzMEZGQUJFQUEwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCAqLzsgfTsKIAkJQkMw
MEYwMDQwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZFMEUwQTE4NTUwMEZEMDRFMyAvKiBET01G
aWxlLmggKi87IH07CiAJCUJDMDBGMDA1MEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMEVGRkYwRTBB
MTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gKi87IH07CiAJCUJDMDBGMDA2MEUwQTE4NTUwMEZE
MDRFMyAvKiBET01GaWxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMDBGMDAwMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlSW50ZXJu
YWwuaCAqLzsgfTsKQEAgLTg1ODQsNiArODU4Niw4IEBACiAJCUIyRkEzRDMwMEFCNzVBNkYwMDBF
NUFDNCAvKiBKU1NWR1pvb21FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNTVkdab29tRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkZBM0QzMTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdab29tRXZlbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHWm9vbUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUI1MEY1QjgwMEU5NkNEOTkwMEFENzFBNiAvKiBXZWJDb3JlT2JqQ0V4
dHJhcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVP
YmpDRXh0cmFzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNUE2ODQyMTBGRkFC
RTk4MDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBTUUxpdGVGaWxlU3lzdGVtLmg7IHBhdGggPSBzcWwvU1FMaXRlRmlsZVN5c3Rl
bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNUE2ODQyMzBGRkFCRUFBMDBEMjQ2
ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBTUUxpdGVGaWxlU3lzdGVtLmNwcDsgcGF0aCA9IHNxbC9TUUxpdGVGaWxlU3lzdGVt
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMEVGRkUwRTBBMTg1NTAwRkQw
NEUzIC8qIERPTUZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRmls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAwRUZGRjBFMEExODU1MDBGRDA0
RTMgLyogRE9NRmlsZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IERPTUZpbGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDBGMDAwMEUwQTE4
NTUwMEZEMDRFMyAvKiBET01GaWxlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRE9NRmlsZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC05NTE0LDYgKzk1MTgsOCBAQAogCQkxQTJFNkU1NjBDQzU1MUUwMDA0QTIwNjIgLyogc3FsICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlCNUE2ODQyMzBG
RkFCRUFBMDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5jcHAgKi8sCisJCQkJQjVBNjg0MjEw
RkZBQkU5ODAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uaCAqLywKIAkJCQkxQTJFNkU1NzBD
QzU1MjEzMDA0QTIwNjIgLyogU1FMVmFsdWUuY3BwICovLAogCQkJCTFBMkU2RTU4MENDNTUyMTMw
MDRBMjA2MiAvKiBTUUxWYWx1ZS5oICovLAogCQkJCTFBMkU2RTc4MENDNTU2RDUwMDRBMjA2MiAv
KiBTUUxpdGVBdXRob3JpemVyLmNwcCAqLywKQEAgLTE2OTEzLDYgKzE2OTE5LDcgQEAKIAkJCQlC
Q0JDQUUzRDBGRjE5Mzk5MDAwNzYyQUUgLyogSlNEYXRhR3JpZERhdGFTb3VyY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUM1MEQwRTgzMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdEQUFFRjBGRjk2MTVEMDBDRTAxMzggLyogRE9NRGF0
YUdyaWREYXRhU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCNUE2ODQyMjBGRkFCRTk4MDBE
MjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xODkyNyw2ICsx
ODkzNCw3IEBACiAJCQkJQkM3N0QyMzkwRkYyOTgwODAwNzA4ODdCIC8qIERhdGFHcmlkQ29sdW1u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1MEQwRTgyMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9y
YWdlTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDN0RBQUVFMEZGOTYxNUQwMENF
MDEzOCAvKiBET01EYXRhR3JpZERhdGFTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjVB
Njg0MjQwRkZBQkVBQTAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCShyZXZpc2lv
biA0NTQ1MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiRGF0YWJhc2VBdXRob3Jp
emVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0u
aCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKIAogI2luY2x1ZGUgPHNxbGl0ZTMuaD4K
QEAgLTYwLDkgKzYxLDcgQEAgYm9vbCBTUUxpdGVEYXRhYmFzZTo6b3Blbihjb25zdCBTdHJpbmcm
IAogewogICAgIGNsb3NlKCk7CiAgICAgCi0gICAgLy8gU1FMaXRlIGV4cGVjdHMgYSBudWxsIHRl
cm1pbmF0b3Igb24gaXRzIFVURi0xNiBzdHJpbmdzLgotICAgIFN0cmluZyBwYXRoID0gZmlsZW5h
bWU7Ci0gICAgbV9sYXN0RXJyb3IgPSBzcWxpdGUzX29wZW4xNihwYXRoLmNoYXJhY3RlcnNXaXRo
TnVsbFRlcm1pbmF0aW9uKCksICZtX2RiKTsKKyAgICBtX2xhc3RFcnJvciA9IFNRTGl0ZUZpbGVT
eXN0ZW06Om9wZW5EYXRhYmFzZShmaWxlbmFtZSwgJm1fZGIpOwogICAgIGlmIChtX2xhc3RFcnJv
ciAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgZGF0YWJhc2UgZmFp
bGVkIHRvIGxvYWQgZnJvbSAlc1xuQ2F1c2UgLSAlcyIsIGZpbGVuYW1lLmFzY2lpKCkuZGF0YSgp
LAogICAgICAgICAgICAgc3FsaXRlM19lcnJtc2cobV9kYikpOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MjMgQEAKKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlDQorICogbWV0
Og0KKyAqDQorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0KKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXINCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlDQorICogZGlzdHJpYnV0aW9uLg0KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQ0KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKi8NCisNCisjaW5jbHVkZSAiY29uZmlnLmgiDQor
I2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCINCisNCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5o
Ig0KKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIg0KKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1l
bnQuaCINCisjaW5jbHVkZSA8c3FsaXRlMy5oPg0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisN
CitTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKCkNCit7DQorfQ0KKw0KK3ZvaWQg
U1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKQ0KK3sNCit9DQorDQoraW50IFNR
TGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBzcWxp
dGUzKiogZGF0YWJhc2UpDQorew0KKyAgICAvLyBTUUxpdGUgZXhwZWN0cyBhIG51bGwgdGVybWlu
YXRvciBvbiBpdHMgVVRGLTE2IHN0cmluZ3MuDQorICAgIFN0cmluZyBwYXRoID0gZmlsZU5hbWU7
DQorICAgIHJldHVybiBzcWxpdGUzX29wZW4xNihwYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1p
bmF0aW9uKCksIGRhdGFiYXNlKTsNCit9DQorDQorU3RyaW5nIFNRTGl0ZUZpbGVTeXN0ZW06Omdl
dEZpbGVOYW1lRm9yTmV3RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBkYkRpciwgY29uc3QgU3RyaW5n
JiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmLCBTUUxpdGVEYXRhYmFzZSogZGIpDQorew0KKyAgICAvLyB0cnkgdG8gZ2V0
IHRoZSBuZXh0IHNlcXVlbmNlIG51bWJlciBmcm9tIHRoZSBnaXZlbiBkYXRhYmFzZQ0KKyAgICAv
LyBpZiB3ZSBjYW4ndCBnZXQgYSBudW1iZXIsIHJldHVybiBhbiBlbXB0eSBzdHJpbmcNCisgICAg
U1FMaXRlU3RhdGVtZW50IHNlcXVlbmNlU3RhdGVtZW50KCpkYiwgIlNFTEVDVCBzZXEgRlJPTSBz
cWxpdGVfc2VxdWVuY2UgV0hFUkUgbmFtZT0nRGF0YWJhc2VzJzsiKTsNCisgICAgaWYgKHNlcXVl
bmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykNCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsNCisgICAgaW50IHJlc3VsdCA9IHNlcXVlbmNlU3RhdGVtZW50LnN0ZXAoKTsNCisg
ICAgaW50NjRfdCBzZXEgPSAwOw0KKyAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykNCisg
ICAgICAgIHNlcSA9IHNlcXVlbmNlU3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOw0KKyAgICBl
bHNlIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkNCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsNCisgICAgc2VxdWVuY2VTdGF0ZW1lbnQuZmluYWxpemUoKTsNCisNCisgICAgLy8gaW5jcmVt
ZW50IHRoZSBudW1iZXIgdW50aWwgd2UgY2FuIHVzZSBpdCB0byBmb3JtIGEgZmlsZSBuYW1lIHRo
YXQgZG9lc24ndCBleGlzdA0KKyAgICBTdHJpbmcgZmlsZU5hbWU7DQorICAgIGRvIHsNCisgICAg
ICAgICsrc2VxOw0KKyAgICAgICAgZmlsZU5hbWUgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
ZGJEaXIsIFN0cmluZzo6Zm9ybWF0KCIlMDE2bGx4LmRiIiwgc2VxKSk7DQorICAgIH0gd2hpbGUg
KGZpbGVFeGlzdHMoZmlsZU5hbWUpKTsNCisNCisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIl
MDE2bGx4LmRiIiwgc2VxKTsNCit9DQorDQorU3RyaW5nIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVu
ZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcm
IGZpbGVOYW1lKQ0KK3sNCisgICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRo
LCBmaWxlTmFtZSk7DQorfQ0KKw0KK2Jvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJh
c2VEaXJlY3RvcnlFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQ0KK3sNCisgICAgaWYgKHBhdGgu
aXNFbXB0eSgpKQ0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICByZXR1cm4gbWFrZUFsbERp
cmVjdG9yaWVzKHBhdGgpOw0KK30NCisNCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURh
dGFiYXNlRmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBib29sIGNoZWNrUGF0aE9u
bHkpDQorew0KKyAgICBpZiAoZmlsZU5hbWUuaXNFbXB0eSgpKQ0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOw0KKw0KKyAgICBpZiAoY2hlY2tQYXRoT25seSkgew0KKyAgICAgICAgU3RyaW5nIGRpciA9
IGRpcmVjdG9yeU5hbWUoZmlsZU5hbWUpOw0KKyAgICAgICAgcmV0dXJuIGVuc3VyZURhdGFiYXNl
RGlyZWN0b3J5RXhpc3RzKGRpcik7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGZpbGVFeGlzdHMo
ZmlsZU5hbWUpOw0KK30NCisNCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0
YWJhc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQ0KK3sNCisgICAgcmV0dXJuIGRlbGV0
ZUVtcHR5RGlyZWN0b3J5KHBhdGgpOw0KK30NCisNCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRl
bGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQ0KK3sNCisgICAgcmV0dXJu
IGRlbGV0ZUZpbGUoZmlsZU5hbWUpOw0KK30NCisNCitsb25nIGxvbmcgU1FMaXRlRmlsZVN5c3Rl
bTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQ0KK3sgICAgICAg
IA0KKyAgICBsb25nIGxvbmcgc2l6ZTsNCisgICAgcmV0dXJuIGdldEZpbGVTaXplKGZpbGVOYW1l
LCBzaXplKSA/IHNpemUgOiAwOw0KK30NCisNCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMTQgQEAKKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
DQorICogbWV0Og0KKyAqDQorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0KKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXINCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQorICogZGlzdHJpYnV0aW9uLg0KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQ0KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QNCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKi8NCisNCisjaWZuZGVmIFNRTGl0
ZUZpbGVTeXN0ZW1faA0KKyNkZWZpbmUgU1FMaXRlRmlsZVN5c3RlbV9oDQorDQorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiDQorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4NCisNCitzdHJ1
Y3Qgc3FsaXRlMzsNCisNCituYW1lc3BhY2UgV2ViQ29yZSB7DQorDQorY2xhc3MgU1FMaXRlRGF0
YWJhc2U7DQorDQorLy8gQSBjbGFzcyB0aGF0IGFic3RyYWN0cyB0aGUgZmlsZSBzeXN0ZW0gcmVs
YXRlZCBvcGVyYXRpb25zIHJlcXVpcmVkDQorLy8gYnkgdGhlIFdlYktpdCBkYXRhYmFzZSBjb2Rl
Lg0KK2NsYXNzIFNRTGl0ZUZpbGVTeXN0ZW0gew0KK3B1YmxpYzoNCisgICAgLy8gUmVnaXN0ZXJz
IGEgdXNlci1kZWZpbmVkIFNRTGl0ZSBWRlMuDQorICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyU1FM
aXRlVkZTKCk7DQorDQorICAgIC8vIE9wZW5zIGEgZGF0YWJhc2UgZmlsZS4NCisgICAgLy8NCisg
ICAgLy8gZmlsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgZmlsZS4NCisgICAgLy8g
ZGF0YWJhc2UgLSBUaGUgU1FMaXRlIHN0cnVjdHVyZSB0aGF0IHJlcHJlc2VudHMgdGhlIGRhdGFi
YXNlIHN0b3JlZA0KKyAgICAvLyAgICAgICAgICAgIGluIHRoZSBnaXZlbiBmaWxlLg0KKyAgICBz
dGF0aWMgaW50IG9wZW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBzcWxpdGUzKiog
ZGF0YWJhc2UpOw0KKw0KKyAgICAvLyBSZXR1cm5zIHRoZSBmaWxlIG5hbWUgZm9yIGEgZGF0YWJh
c2UuDQorICAgIC8vDQorICAgIC8vIGRiRGlyIC0gVGhlIGRpcmVjdG9yeSB3aGVyZSBhbGwgZGF0
YWJhc2VzIGFyZSBzdG9yZWQuDQorICAgIC8vIGRiTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBkYXRh
YmFzZS4NCisgICAgLy8gb3JpZ2luSWRlbnRpZmllciAtIFRoZSBvcmlnaW4gdGhhdCB3YW50cyB0
byB1c2UgdGhpcyBkYXRhYmFzZS4NCisgICAgLy8gZGIgLSBBIGRhdGFiYXNlIHdpdGggYSBudW1i
ZXIgZ2VuZXJhdG9yIHVzZWQgdG8gY3JlYXRlIHVuaXF1ZSBmaWxlIG5hbWVzLg0KKyAgICBzdGF0
aWMgU3RyaW5nIGdldEZpbGVOYW1lRm9yTmV3RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBkYkRpciwg
Y29uc3QgU3RyaW5nJiBkYk5hbWUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIFNRTGl0ZURhdGFiYXNl
KiBkYik7DQorDQorICAgIC8vIENyZWF0ZXMgYW4gYWJzb2x1dGUgZmlsZSBwYXRoIGdpdmVuIGEg
ZGlyZWN0b3J5IGFuZCBhIGZpbGUgbmFtZS4NCisgICAgLy8NCisgICAgLy8gcGF0aCAtIFRoZSBk
aXJlY3RvcnkuDQorICAgIC8vIGZpbGVOYW1lIC0gVGhlIGZpbGUgbmFtZS4NCisgICAgc3RhdGlj
IFN0cmluZyBhcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7DQorDQorICAgIC8vIE1ha2VzIHN1cmUgdGhlIGdpdmVu
IGRpcmVjdG9yeSBleGlzdHMsIGJ5IGNyZWF0aW5nIGFsbCBtaXNzaW5nIGRpcmVjdG9yaWVzDQor
ICAgIC8vIG9uIHRoZSBnaXZlbiBwYXRoLg0KKyAgICAvLw0KKyAgICAvLyBwYXRoIC0gVGhlIGRp
cmVjdG9yeS4NCisgICAgc3RhdGljIGJvb2wgZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMo
Y29uc3QgU3RyaW5nJiBwYXRoKTsNCisNCisgICAgLy8gSWYgJ2NoZWNrUGF0aE9ubHknIGlzIGZh
bHNlLCB0aGVuIHRoaXMgbWV0aG9kIG9ubHkgY2hlY2tzIGlmIHRoZSBnaXZlbiBmaWxlIGV4aXN0
cy4NCisgICAgLy8gSWYgJ2NoZWNrUGF0aE9ubHknIGlzIHRydWUsIHRoZW4gdGhpcyBtZXRob2Qg
bWFrZXMgc3VyZSBhbGwgZGlyZWN0b3JpZXMgb24gdGhlDQorICAgIC8vIGdpdmVuIHBhdGggZXhp
c3QgYnkgY3JlYXRpbmcgdGhlIG1pc3Npbmcgb25lcywgYW5kIGRvZXMgbm90IGNoZWNrIGlmIHRo
ZSBmaWxlDQorICAgIC8vIGl0c2VsZiBleGlzdHMuDQorICAgIC8vDQorICAgIC8vIFNvbWV0aW1l
cyB3ZSBleHBlY3QgYSBEQiBmaWxlIHRvIGV4aXN0OyBvdGhlciB0aW1lcywgd2UncmUgT0sgd2l0
aCBjcmVhdGluZyBhIG5ldw0KKyAgICAvLyBEQiBmaWxlLCBidXQgd2Ugd2FudCB0byBtYWtlIHN1
cmUgdGhhdCB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHdlIHdhbnQgdG8gcHV0IHRoZQ0KKyAgICAv
LyBuZXcgREIgZmlsZSBleGlzdHMuIFRoaXMgbWV0aG9kIGNvdmVycyBib3RoIGNhc2VzLg0KKyAg
ICAvLw0KKyAgICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuDQorICAgIC8vIGNoZWNrUGF0
aE9ubHkgLSBJZiB0cnVlLCB3ZSBvbmx5IG1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiBkaXJlY3Rv
cnkgZXhpc3RzLg0KKyAgICAvLyAgICAgICAgICAgICAgICAgSWYgZmFsc2UsIHdlIG9ubHkgY2hl
Y2sgaWYgdGhlIGZpbGUgZXhpc3RzLg0KKyAgICBzdGF0aWMgYm9vbCBlbnN1cmVEYXRhYmFzZUZp
bGVFeGlzdHMoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgYm9vbCBjaGVja1BhdGhPbmx5KTsNCisN
CisgICAgLy8gRGVsZXRlcyBhbiBlbXB0eSBkYXRhYmFzZSBkaXJlY3RvcnkuDQorICAgIC8vDQor
ICAgIC8vIHBhdGggLSBUaGUgZGlyZWN0b3J5Lg0KKyAgICBzdGF0aWMgYm9vbCBkZWxldGVFbXB0
eURhdGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCk7DQorDQorICAgIC8vIERlbGV0
ZXMgYSBkYXRhYmFzZSBmaWxlLg0KKyAgICAvLw0KKyAgICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxl
IG5hbWUuDQorICAgIHN0YXRpYyBib29sIGRlbGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcm
IGZpbGVOYW1lKTsNCisNCisgICAgLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZGF0YWJhc2Ug
ZmlsZS4NCisgICAgLy8NCisgICAgLy8gZmlsZU5hbWUgLSBUaGUgZmlsZSBuYW1lLg0KKyAgICBz
dGF0aWMgbG9uZyBsb25nIGdldERhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSk7DQorDQorcHJpdmF0ZToNCisgICAgLy8gZG8gbm90IGluc3RhbnRpYXRlIHRoaXMgY2xhc3MN
CisgICAgU1FMaXRlRmlsZVN5c3RlbSgpOw0KK307IC8vIGNsYXNzIFNRTGl0ZUZpbGVTeXN0ZW0N
CisNCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQorDQorI2VuZGlmDQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJldmlzaW9uIDQ1NDUxKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw4ICsx
MzMsMTAgQEAgU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdAogCiBTdHJp
bmcgZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgU3RyaW5nIGZpbGVOYW1lID0gcGF0aEdl
dEZpbGVOYW1lKHBhdGgpOworICAgIFN0cmluZyBkaXJOYW1lID0gU3RyaW5nKHBhdGgpOworICAg
IGRpck5hbWUudHJ1bmNhdGUoZGlyTmFtZS5sZW5ndGgoKSAtIHBhdGhHZXRGaWxlTmFtZShwYXRo
KS5sZW5ndGgoKSk7CisgICAgcmV0dXJuIGRpck5hbWU7CiB9CiAKIHN0YXRpYyBTdHJpbmcgYnVu
ZGxlTmFtZSgpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDQ1NDUxKQorKysgV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBA
QAogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCkBAIC00OCw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIk9yaWdpblF1b3RhTWFuYWdlci5oIgogI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisj
aW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5o
IgogI2luY2x1ZGUgIlNRTFJlc3VsdFNldC5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CkBAIC0zMzgsMTAgKzMzOCw3IEBAIHZvaWQgRGF0YWJhc2U6OnN0b3AoKQogCiB1bnNpZ25lZCBs
b25nIGxvbmcgRGF0YWJhc2U6OmRhdGFiYXNlU2l6ZSgpIGNvbnN0CiB7Ci0gICAgbG9uZyBsb25n
IHNpemU7Ci0gICAgaWYgKCFnZXRGaWxlU2l6ZShtX2ZpbGVuYW1lLCBzaXplKSkKLSAgICAgICAg
c2l6ZSA9IDA7Ci0gICAgcmV0dXJuIHNpemU7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06
OmdldERhdGFiYXNlRmlsZVNpemUobV9maWxlbmFtZSk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9u
ZyBEYXRhYmFzZTo6bWF4aW11bVNpemUoKSBjb25zdApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
VHJhY2tlci5jcHAJKHJldmlzaW9uIDQ1NDUxKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
VHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxMiBAQAogI2luY2x1ZGUg
IkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIk9yaWdpblF1b3RhTWFuYWdlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFz
aC5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0
ZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KQEAgLTY5LDYgKzY5LDcgQEAgRGF0YWJhc2VUcmFja2VyOjpEYXRhYmFzZVRy
YWNrZXIoKQogICAgICwgbV90aHJlYWQoY3VycmVudFRocmVhZCgpKQogI2VuZGlmCiB7CisgICAg
U1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKTsKIH0KIAogdm9pZCBEYXRhYmFz
ZVRyYWNrZXI6OnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCkBA
IC04Nyw5ICs4OCw3IEBAIGNvbnN0IFN0cmluZyYgRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZUQK
IFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBhdGgoKSBjb25zdAogewog
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWQpOwotICAgIGlmIChtX2RhdGFi
YXNlRGlyZWN0b3J5UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICByZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRo
LCAiRGF0YWJhc2VzLmRiIik7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERh
dGFiYXNlRmlsZU5hbWVUb1BhdGgobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsICJEYXRhYmFzZXMu
ZGIiKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UoYm9v
bCBjcmVhdGVJZkRvZXNOb3RFeGlzdCkKQEAgLTEwMCwxMyArOTksOSBAQCB2b2lkIERhdGFiYXNl
VHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmlu
ZyBkYXRhYmFzZVBhdGggPSB0cmFja2VyRGF0YWJhc2VQYXRoKCk7Ci0gICAgaWYgKGRhdGFiYXNl
UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghY3JlYXRlSWZEb2Vz
Tm90RXhpc3QgJiYgIWZpbGVFeGlzdHMoZGF0YWJhc2VQYXRoKSkKKyAgICBpZiAoIVNRTGl0ZUZp
bGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyhkYXRhYmFzZVBhdGgsIGNyZWF0ZUlm
RG9lc05vdEV4aXN0KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbWFrZUFsbERpcmVjdG9yaWVz
KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoKTsKICAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihkYXRh
YmFzZVBhdGgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGRvIGRvIGhlcmU/CiAgICAgICAg
IHJldHVybjsKQEAgLTE5MCw5ICsxODUsNyBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50
cnlGb3JEYXRhYmFzCiBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5QYXRoKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBt
X3RocmVhZCk7Ci0gICAgaWYgKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkp
OworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9Q
YXRoKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigp
KTsKIH0KIAogU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1
cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZOb3RF
eGlzdHMpCkBAIC0yMDYsNyArMTk5LDcgQEAgU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBh
dGhGb3JEYXRhYgogICAgIFN0cmluZyBvcmlnaW5QYXRoID0gdGhpcy0+b3JpZ2luUGF0aChvcmln
aW4pOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgcGF0aCBmb3IgdGhpcyBTZWN1cml0eU9y
aWdpbiBleGlzdHMKLSAgICBpZiAoY3JlYXRlSWZOb3RFeGlzdHMgJiYgIW1ha2VBbGxEaXJlY3Rv
cmllcyhvcmlnaW5QYXRoKSkKKyAgICBpZiAoY3JlYXRlSWZOb3RFeGlzdHMgJiYgIVNRTGl0ZUZp
bGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRGlyZWN0b3J5RXhpc3RzKG9yaWdpblBhdGgpKQogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgCiAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBwYXRo
IGZvciB0aGlzIGRhdGFiYXNlIHlldApAQCAtMjI0LDcgKzIxNyw3IEBAIFN0cmluZyBEYXRhYmFz
ZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0
ZXAoKTsKIAogICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KQotICAgICAgICByZXR1cm4g
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG9yaWdpblBhdGgsIHN0YXRlbWVudC5nZXRDb2x1bW5U
ZXh0KDApKTsKKyAgICAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNl
RmlsZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwgc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOwog
ICAgIGlmICghY3JlYXRlSWZOb3RFeGlzdHMpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAg
ICAgICAgCkBAIC0yNDEsMzMgKzIzNCwyMCBAQCBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxs
UGF0aEZvckRhdGFiCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICByZXN1bHQgPSBzZXF1
ZW5jZVN0YXRlbWVudC5zdGVwKCk7CiAKLSAgICAvLyBUaGlzIGhhcyBhIHJhbmdlIG9mIDJeNjMg
YW5kIHN0YXJ0cyBhdCAwIGZvciBldmVyeSB0aW1lIGEgdXNlciByZXNldHMgU2FmYXJpIC0KLSAg
ICAvLyBJIGNhbid0IGltYWdpbmUgaXQnZCBvdmVyIG92ZXJmbG93Ci0gICAgaW50NjRfdCBzZXEg
PSAwOwotICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KSB7Ci0gICAgICAgIHNlcSA9IHNl
cXVlbmNlU3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOwotICAgIH0gZWxzZSBpZiAocmVzdWx0
ICE9IFNRTFJlc3VsdERvbmUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBzZXF1ZW5j
ZVN0YXRlbWVudC5maW5hbGl6ZSgpOwotCi0gICAgU3RyaW5nIGZpbGVuYW1lOwotICAgIGRvIHsK
LSAgICAgICAgKytzZXE7Ci0gICAgICAgIGZpbGVuYW1lID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KG9yaWdpblBhdGgsIFN0cmluZzo6Zm9ybWF0KCIlMDE2bGx4LmRiIiwgc2VxKSk7Ci0gICAg
fSB3aGlsZSAoZmlsZUV4aXN0cyhmaWxlbmFtZSkpOwotCi0gICAgaWYgKCFhZGREYXRhYmFzZShv
cmlnaW4sIG5hbWUsIFN0cmluZzo6Zm9ybWF0KCIlMDE2bGx4LmRiIiwgc2VxKSkpCisgICAgU3Ry
aW5nIGZpbGVOYW1lID0gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RmlsZU5hbWVGb3JOZXdEYXRhYmFz
ZShvcmlnaW5QYXRoLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLCBuYW1lLCAmbV9kYXRh
YmFzZSk7CisgICAgaWYgKCFhZGREYXRhYmFzZShvcmlnaW4sIG5hbWUsIGZpbGVOYW1lKSkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgLy8gSWYgdGhpcyBvcmlnaW4ncyBxdW90YSBp
cyBiZWluZyB0cmFja2VkIChvcGVuIGhhbmRsZSB0byBhIGRhdGFiYXNlIGluIHRoaXMgb3JpZ2lu
KSwgYWRkIHRoaXMgbmV3IGRhdGFiYXNlCiAgICAgLy8gdG8gdGhlIHF1b3RhIG1hbmFnZXIgbm93
CisgICAgU3RyaW5nIGZ1bGxGaWxlUGF0aCA9IFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFi
YXNlRmlsZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwgZmlsZU5hbWUpOwogICAgIHsKICAgICAgICAg
TG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gbG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsK
ICAgICAgICAgaWYgKG9yaWdpblF1b3RhTWFuYWdlcigpLnRyYWNrc09yaWdpbihvcmlnaW4pKQot
ICAgICAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkuYWRkRGF0YWJhc2Uob3JpZ2luLCBuYW1l
LCBmaWxlbmFtZSk7CisgICAgICAgICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5hZGREYXRhYmFz
ZShvcmlnaW4sIG5hbWUsIGZ1bGxGaWxlUGF0aCk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBm
aWxlbmFtZTsKKyAgICByZXR1cm4gZnVsbEZpbGVQYXRoOwogfQogCiB2b2lkIERhdGFiYXNlVHJh
Y2tlcjo6cG9wdWxhdGVPcmlnaW5zKCkKQEAgLTQyMyw4ICs0MDMsNyBAQCB1bnNpZ25lZCBsb25n
IGxvbmcgRGF0YWJhc2VUcmFja2VyOjp1c2FnCiAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgCi0gICAgbG9uZyBsb25nIHNpemU7Ci0gICAgcmV0dXJu
IGdldEZpbGVTaXplKHBhdGgsIHNpemUpID8gc2l6ZSA6IDA7CisgICAgcmV0dXJuIFNRTGl0ZUZp
bGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUocGF0aCk7CiB9CiAKIHZvaWQgRGF0YWJhc2VU
cmFja2VyOjphZGRPcGVuRGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFiYXNlKQpAQCAtNjY1LDcgKzY0
NCw3IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXIKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KG9yaWdpblBhdGgob3Jp
Z2luKSk7CisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9y
eShvcmlnaW5QYXRoKG9yaWdpbikpOwogCiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmln
aW5Qb3NzaWJseUxhc3RSZWZlcmVuY2UgPSBvcmlnaW47CiAgICAgewpAQCAtNjc5LDggKzY1OCw4
IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXIKICAgICAgICAgaWYg
KG1fcXVvdGFNYXAtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYgKG1fZGF0YWJhc2UuaXNP
cGVuKCkpCiAgICAgICAgICAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICAgICAg
ZGVsZXRlRmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOwotICAgICAgICAgICAgZGVsZXRlRW1w
dHlEaXJlY3RvcnkobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgpOworICAgICAgICAgICBTUUxpdGVG
aWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUodHJhY2tlckRhdGFiYXNlUGF0aCgpKTsKKyAg
ICAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeSht
X2RhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTc2Myw3ICs3
NDIsNyBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlbGV0ZWREYXRhYmFzZXMuc2l6ZSgpOyArK2kpCiAgICAg
ICAgIGRlbGV0ZWREYXRhYmFzZXNbaV0tPm1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOwogCi0gICAg
cmV0dXJuIGRlbGV0ZUZpbGUoZnVsbFBhdGgpOworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVt
OjpkZWxldGVEYXRhYmFzZUZpbGUoZnVsbFBhdGgpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6c2V0Q2xpZW50KERhdGFiYXNlVHJhY2tlckNsaWVudCogY2xpZW50KQpJbmRleDogV2ViQ29y
ZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdlYkNvcmUv
c3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMw
LDcgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIK
KyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtODIsMTMgKzgyLDkgQEAgdW5zaWduZWQgbG9uZyBsb25nIE9yaWdpblVzYWdlUmVjb3JkOjpk
aQogICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBtX2RhdGFiYXNlTWFwLmdldCgqaVVua25v
d24pLmZpbGVuYW1lOwogICAgICAgICBBU1NFUlQoIXBhdGguaXNFbXB0eSgpKTsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgbG9uZyBsb25nIHNpemU7Ci0gICAgICAgIGlmIChnZXRGaWxlU2l6
ZShwYXRoLCBzaXplKSkKLSAgICAgICAgICAgIG1fZGF0YWJhc2VNYXAuc2V0KCppVW5rbm93biwg
RGF0YWJhc2VFbnRyeShwYXRoLCBzaXplKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
Ly8gV2hlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgdGhlIGZpbGUgc2l6ZSwgd2UnbGwganVzdCBoYXZl
IHRvIGFzc3VtZSB0aGUgZmlsZSBpcyBtaXNzaW5nL2luYWNjZXNzaWJsZS4KLSAgICAgICAgICAg
IG1fZGF0YWJhc2VNYXAuc2V0KCppVW5rbm93biwgRGF0YWJhc2VFbnRyeShwYXRoLCAwKSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgLy8gV2hlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgdGhlIGZpbGUgc2l6
ZSwgd2UnbGwganVzdCBoYXZlIHRvIGFzc3VtZSB0aGUgZmlsZSBpcyBtaXNzaW5nL2luYWNjZXNz
aWJsZS4KKyAgICAgICAgbG9uZyBsb25nIHNpemUgPSBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRh
YmFzZUZpbGVTaXplKHBhdGgpOworICAgICAgICBtX2RhdGFiYXNlTWFwLnNldCgqaVVua25vd24s
IERhdGFiYXNlRW50cnkocGF0aCwgc2l6ZSkpOwogICAgIH0KICAgICBtX3Vua25vd25TZXQuY2xl
YXIoKTsKICAgICAK
</data>
<flag name="review"
          id="16656"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>