<?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>26940</bug_id>
          <alias>alias</alias>
          <creation_ts>2009-07-02 16:05:27 -0700</creation_ts>
          <short_desc>[Chromium] Add a SQLite VFS for Chromium</short_desc>
          <delta_ts>2025-11-21 12:52:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>P2</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>beidson</cc>
    
    <cc>crasher049</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eroman</cc>
    
    <cc>japhet</cc>
    
    <cc>jorlow</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>129608</commentid>
    <comment_count>0</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-02 16:05:27 -0700</bug_when>
    <thetext>Because of sandboxed renderer processes, Chromium needs a special SQLite VFS implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129614</commentid>
    <comment_count>1</comment_count>
      <attachid>32205</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-02 16:29:16 -0700</bug_when>
    <thetext>Created attachment 32205
win patch

SQLite VFS: only the code that deals directly with files was slightly modified.
FileSystem: openDatabase() uses &quot;chromium_vfs&quot; to open files, all other functions are either very simple or delegate to ChromiumBridge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129615</commentid>
    <comment_count>2</comment_count>
      <attachid>32206</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-02 16:31:58 -0700</bug_when>
    <thetext>Created attachment 32206
win patch

Attached the wrong patch...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129619</commentid>
    <comment_count>3</comment_count>
      <attachid>32206</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-02 16:34:50 -0700</bug_when>
    <thetext>Comment on attachment 32206
win patch

&gt; +        } else {
&gt; +            return SQLITE_CANTOPEN;
&gt; +	}

&apos;}&apos; is not aligned properly. i will fix that with the other comments you might have (don&apos;t want to upload another patch for this only).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129975</commentid>
    <comment_count>4</comment_count>
      <attachid>32206</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-06 12:41:25 -0700</bug_when>
    <thetext>Comment on attachment 32206
win patch

&gt; Index: WebCore/platform/sql/chromium/SQLiteFileSystemChromium.cpp

If this is a Windows-specific file, it should be SQLiteFileSystemChromiumWin.cpp

&gt; +        if (desiredFlags &amp; SQLITE_OPEN_READWRITE) {
&gt; +            int newFlags = (desiredFlags | SQLITE_OPEN_READONLY) &amp; ~SQLITE_OPEN_READWRITE;
&gt; +            return chromiumOpen(0, fileName, id, newFlags, usedFlags);
&gt; +        } else {
&gt; +            return SQLITE_CANTOPEN;
&gt; +	}

Fix indentation, no need for brackets for one-liners.

&gt; +#ifndef SQLITE_OMIT_LOAD_EXTENSION
&gt; +// Returns NULL, thus disallowing loading libraries in the renderer process.
&gt; +//
&gt; +// vfs - pointer to the sqlite3_vfs object.
&gt; +// fileName - the name of the shared library file.
&gt; +void* chromiumDlOpen(sqlite3_vfs* vfs, const char* fileName)
&gt; +{
&gt; +    return NULL;

return 0;

&gt; +    static sqlite3_vfs chromium_vfs = {
&gt; +      1,
&gt; +      win32_vfs-&gt;szOsFile,
&gt; +      win32_vfs-&gt;mxPathname,
&gt; +      0,
&gt; +      &quot;chromium_vfs&quot;,
&gt; +      0,
&gt; +      chromiumOpen,
&gt; +      chromiumDelete,
&gt; +      chromiumAccess,
&gt; +      chromiumFullPathname,
&gt; +      chromiumDlOpen,
&gt; +      win32_vfs-&gt;xDlError,
&gt; +      win32_vfs-&gt;xDlSym,
&gt; +      win32_vfs-&gt;xDlClose,
&gt; +      win32_vfs-&gt;xRandomness,
&gt; +      win32_vfs-&gt;xSleep,
&gt; +      win32_vfs-&gt;xCurrentTime,
&gt; +      win32_vfs-&gt;xGetLastError

4 space indent.

&gt; +
&gt; +bool SQLiteFileSystem::ensureDatabaseDirectoryExists(const String&amp; path)
&gt; +{

Should probably eliminate unused param for consistency.

&gt; +bool SQLiteFileSystem::ensureDatabaseFileExists(const String&amp; fileName, bool checkPathOnly)
&gt; +{

Ditto.

&gt; +bool SQLiteFileSystem::deleteEmptyDatabaseDirectory(const String&amp; path)
&gt; +{

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129976</commentid>
    <comment_count>5</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-06 12:48:41 -0700</bug_when>
    <thetext>Also, instead of including windows.h and having platform-specific #ifdef in ChromiumBridge, just use PlatformFileHandle from FileSystem.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130071</commentid>
    <comment_count>6</comment_count>
      <attachid>32338</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-06 18:02:34 -0700</bug_when>
    <thetext>Created attachment 32338
win patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130077</commentid>
    <comment_count>7</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-06 18:10:41 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 32206 [details])
&gt; &gt; Index: WebCore/platform/sql/chromium/SQLiteFileSystemChromium.cpp
&gt; 
&gt; If this is a Windows-specific file, it should be
&gt; SQLiteFileSystemChromiumWin.cpp
&gt; 
&gt; &gt; +        if (desiredFlags &amp; SQLITE_OPEN_READWRITE) {
&gt; &gt; +            int newFlags = (desiredFlags | SQLITE_OPEN_READONLY) &amp; ~SQLITE_OPEN_READWRITE;
&gt; &gt; +            return chromiumOpen(0, fileName, id, newFlags, usedFlags);
&gt; &gt; +        } else {
&gt; &gt; +            return SQLITE_CANTOPEN;
&gt; &gt; +	}
&gt; 
&gt; Fix indentation, no need for brackets for one-liners.

removed the brackets.

&gt; &gt; +#ifndef SQLITE_OMIT_LOAD_EXTENSION
&gt; &gt; +// Returns NULL, thus disallowing loading libraries in the renderer process.
&gt; &gt; +//
&gt; &gt; +// vfs - pointer to the sqlite3_vfs object.
&gt; &gt; +// fileName - the name of the shared library file.
&gt; &gt; +void* chromiumDlOpen(sqlite3_vfs* vfs, const char* fileName)
&gt; &gt; +{
&gt; &gt; +    return NULL;
&gt; 
&gt; return 0;

done.

&gt; &gt; +    static sqlite3_vfs chromium_vfs = {
&gt; &gt; +      1,
&gt; &gt; +      win32_vfs-&gt;szOsFile,
&gt; &gt; +      win32_vfs-&gt;mxPathname,
&gt; &gt; +      0,
&gt; &gt; +      &quot;chromium_vfs&quot;,
&gt; &gt; +      0,
&gt; &gt; +      chromiumOpen,
&gt; &gt; +      chromiumDelete,
&gt; &gt; +      chromiumAccess,
&gt; &gt; +      chromiumFullPathname,
&gt; &gt; +      chromiumDlOpen,
&gt; &gt; +      win32_vfs-&gt;xDlError,
&gt; &gt; +      win32_vfs-&gt;xDlSym,
&gt; &gt; +      win32_vfs-&gt;xDlClose,
&gt; &gt; +      win32_vfs-&gt;xRandomness,
&gt; &gt; +      win32_vfs-&gt;xSleep,
&gt; &gt; +      win32_vfs-&gt;xCurrentTime,
&gt; &gt; +      win32_vfs-&gt;xGetLastError
&gt; 
&gt; 4 space indent.

done.

&gt; &gt; +
&gt; &gt; +bool SQLiteFileSystem::ensureDatabaseDirectoryExists(const String&amp; path)
&gt; &gt; +{
&gt; 
&gt; Should probably eliminate unused param for consistency.

fixed everywhere.

&gt; &gt; +bool SQLiteFileSystem::ensureDatabaseFileExists(const String&amp; fileName, bool checkPathOnly)
&gt; &gt; +{
&gt; 
&gt; Ditto.

done.

&gt; &gt; +bool SQLiteFileSystem::deleteEmptyDatabaseDirectory(const String&amp; path)
&gt; &gt; +{
&gt; 
&gt; Ditto.

done.

&gt; Also, instead of including windows.h and having platform-specific #ifdef in
&gt; ChromiumBridge, just use PlatformFileHandle from FileSystem.h.

i didn&apos;t change this.

from what i understand, webkit has only one chromium port: PLATFORM(CHROMIUM). it doesn&apos;t know how to differentiate between chromium compiled on windows and chromium compiled on linux/mac. so we can&apos;t use #defines in FileSystem.h. basically, if we define something in FileSystem.h for PLATFORM(CHROMIUM), we&apos;d have to use those definitions for all OSes we&apos;re compiling chromium on, and it just doesn&apos;t work.

i talked a bit to john about this and he said that separate, per-OS function signatures should be fine in this case.

let me know what you think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130322</commentid>
    <comment_count>8</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-07 18:16:42 -0700</bug_when>
    <thetext>After talking to Darin, it looks like we can use PLATFORM(WIN_OS) (instead of PLATFORM(WIN)) in WebKit to get some code in all ports when built on a Windows OS. Patch pending: https://bugs.webkit.org/show_bug.cgi?id=27013.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130530</commentid>
    <comment_count>9</comment_count>
      <attachid>32476</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-08 14:59:25 -0700</bug_when>
    <thetext>Created attachment 32476
win patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130533</commentid>
    <comment_count>10</comment_count>
      <attachid>32476</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-08 15:05:57 -0700</bug_when>
    <thetext>Comment on attachment 32476
win patch

Looking much prettier -- two minor issues below:

&gt; +String SQLiteFileSystem::appendDatabaseFileNameToPath(const String&amp; path, const String&amp; fileName)
&gt; +{
&gt; +    if (path.isEmpty())
&gt; +        return fileName;
&gt; +    else
&gt; +        return path + &quot;\\&quot; + fileName;
&gt; +}

Whoops. This is a Windows-ism. Can we use FileSystem.h magic here?

&gt; +int chromiumDelete(sqlite3_vfs* vfs, const char* fileName, int syncDir)

unused param syncDir?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130559</commentid>
    <comment_count>11</comment_count>
      <attachid>32482</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-08 16:00:13 -0700</bug_when>
    <thetext>Created attachment 32482
win patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130599</commentid>
    <comment_count>12</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-08 19:13:26 -0700</bug_when>
    <thetext>Land tomorrow?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130797</commentid>
    <comment_count>13</comment_count>
      <attachid>32546</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-09 18:30:34 -0700</bug_when>
    <thetext>Created attachment 32546
win patch

minor bug fix in appendDatabaseFileNameToPath() in SQLiteFileSystemChromium.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130995</commentid>
    <comment_count>14</comment_count>
      <attachid>32588</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-10 15:57:53 -0700</bug_when>
    <thetext>Created attachment 32588
win patch

same patch + WebCore/WebCore.gypi changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131974</commentid>
    <comment_count>15</comment_count>
      <attachid>32588</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-15 11:39:09 -0700</bug_when>
    <thetext>Comment on attachment 32588
win patch

Please add WebCore.gypi changes and we&apos;ll be good to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132079</commentid>
    <comment_count>16</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-07-15 16:19:39 -0700</bug_when>
    <thetext>Landed as r45959.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132679</commentid>
    <comment_count>17</comment_count>
      <attachid>32967</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-17 13:38:40 -0700</bug_when>
    <thetext>Created attachment 32967
win patch + mac/linux stubs

Same patch + stubs for Mac/Linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132712</commentid>
    <comment_count>18</comment_count>
      <attachid>32967</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-17 14:37:49 -0700</bug_when>
    <thetext>Comment on attachment 32967
win patch + mac/linux stubs

ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132713</commentid>
    <comment_count>19</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-17 14:38:17 -0700</bug_when>
    <thetext>Eric, can you coordinate w/Dumi to land this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132733</commentid>
    <comment_count>20</comment_count>
      <attachid>32980</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-17 15:24:32 -0700</bug_when>
    <thetext>Created attachment 32980
win VFS + mac/linux stubs

Last patch for this bug hopefully...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132740</commentid>
    <comment_count>21</comment_count>
      <attachid>32983</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-07-17 15:42:19 -0700</bug_when>
    <thetext>Created attachment 32983
same patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132741</commentid>
    <comment_count>22</comment_count>
      <attachid>32983</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-17 15:43:44 -0700</bug_when>
    <thetext>Comment on attachment 32983
same patch

good deal. Let&apos;s land this puppy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132822</commentid>
    <comment_count>23</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-07-17 19:03:12 -0700</bug_when>
    <thetext>A note to any prospective committers: this patch is going to require special landing in conjunction with Chromium.  Right now, we&apos;re just waiting for the tree to go green.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133173</commentid>
    <comment_count>24</comment_count>
    <who name="Eric Roman">eroman</who>
    <bug_when>2009-07-20 10:59:15 -0700</bug_when>
    <thetext>landed r46126.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1949786</commentid>
    <comment_count>27</comment_count>
    <who name="John">crasher049</who>
    <bug_when>2023-04-19 11:24:03 -0700</bug_when>
    <thetext>nice</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32205</attachid>
            <date>2009-07-02 16:29:16 -0700</date>
            <delta_ts>2009-07-02 16:31:58 -0700</delta_ts>
            <desc>win patch</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>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32206</attachid>
            <date>2009-07-02 16:31:58 -0700</date>
            <delta_ts>2009-07-06 18:02:34 -0700</delta_ts>
            <desc>win patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>10554</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTQ5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMDktMDctMDIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgdGhlIENocm9taXVtIFNRTGl0ZSBWRlMgYW5kIFNRTGl0ZUZpbGVTeXN0ZW0gaW1w
bGVtZW50YXRpb25zLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1Ccmlk
Z2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvY2hyb21pdW06IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOiBBZGRl
ZC4KKwogMjAwOS0wNy0wMiAgQWRhbSBMYW5nbGV5ICA8YWdsQGdvb2dsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0Nocm9taXVtQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DaHJvbWl1bUJyaWRnZS5oCShyZXZpc2lvbiA0NTQ4OSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMs
NyBAQCB0eXBlZGVmIE5QUF90KiBOUFA7CiAKICNpZiBQTEFURk9STShXSU5fT1MpCiB0eXBlZGVm
IHN0cnVjdCBIRk9OVF9fKiBIRk9OVDsKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTc0LDYgKzE3NSwyNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIC8vIFdpZGdldCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIHN0YXRpYyB2b2lkIHdpZGdldFNl
dEN1cnNvcihXaWRnZXQqLCBjb25zdCBDdXJzb3ImKTsKICAgICAgICAgc3RhdGljIHZvaWQgd2lk
Z2V0U2V0Rm9jdXMoV2lkZ2V0Kik7CisKKyAgICAgICAgLy8gSFRNTDUgREIgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAg
ICAvLyBPcGVucyBhIGRhdGFiYXNlIGZpbGUKKyAgICAgICAgLy8gJ2Rlc2lyZWRGbGFncycgaXMg
YSBjb2xsZWN0aW9uIG9mIE9SJ2QgU1FMaXRlIGNvbnN0YW50cyB0aGF0CisgICAgICAgIC8vIGRl
dGVybWluZSBob3cgdGhlIGZpbGUgc2hvdWxkIGJlIG9wZW5lZAorI2lmIFBMQVRGT1JNKFdJTl9P
UykKKyAgICAgICAgc3RhdGljIEhBTkRMRSBkYXRhYmFzZU9wZW5GaWxlKGNvbnN0IFN0cmluZyYg
ZmlsZU5hbWUsIGludCBkZXNpcmVkRmxhZ3MpOworI2Vsc2UKKyAgICAgICAgc3RhdGljIGludCBk
YXRhYmFzZU9wZW5GaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBkZXNpcmVkRmxhZ3Mp
OworI2VuZGlmCisKKyAgICAgICAgLy8gRGVsZXRlcyBhIGRhdGFiYXNlIGZpbGUKKyAgICAgICAg
Ly8gUmV0dXJucyAndHJ1ZScgaWYgdGhlIGZpbGUgd2FzIGRlbGV0ZWQ7ICdmYWxzZScgb3RoZXJ3
aXNlCisgICAgICAgIHN0YXRpYyBib29sIGRhdGFiYXNlRGVsZXRlRmlsZShjb25zdCBTdHJpbmcm
IGZpbGVOYW1lKTsKKworICAgICAgICAvLyBSZXR1cm5zIHRoZSBmaWxlIGF0dHJpYnV0ZXMgb2Yg
dGhlIGdpdmVuIGRhdGFiYXNlIGZpbGUKKyAgICAgICAgc3RhdGljIGxvbmcgZGF0YWJhc2VHZXRG
aWxlQXR0cmlidXRlcyhjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKKworICAgICAgICAvLyBSZXR1
cm5zIHNpemUgb2YgdGhlIGdpdmVuIGZpbGUKKyAgICAgICAgc3RhdGljIGxvbmcgbG9uZyBkYXRh
YmFzZUdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOwogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NR
TGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUgIkNocm9taXVtQnJpZGdl
LmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisj
aW5jbHVkZSA8c3FsaXRlMy5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2lmbmRlZiBTUUxJ
VEVfT1BFTl9GVUxMTVVURVgKKyNkZWZpbmUgU1FMSVRFX09QRU5fRlVMTE1VVEVYIDB4MDAwMTAw
MDAKKyNlbmRpZgorCisvLyBEZWZpbmVkIGluIENocm9taXVtJ3MgY29kZWJhc2UgaW4gdGhpcmRf
cGFydHkvc3FsaXRlL3NyYy9vc193aW4uYworZXh0ZXJuICJDIiB7CitpbnQgY2hyb21pdW1fc3Fs
aXRlM19pbml0aWFsaXplX3dpbl9zcWxpdGUzX2ZpbGUoc3FsaXRlM19maWxlKiBmaWxlLCBIQU5E
TEUgaGFuZGxlKTsKK30KKworLy8gQ2hyb21pdW0ncyBpbXBsZW1lbnRhdGlvbiBvZiBTUUxpdGVG
aWxlU3lzdGVtCituYW1lc3BhY2UgeworCisvLyBPcGVucyBhIGZpbGUuCisvLworLy8gdmZzIC0g
cG9pbnRlciB0byB0aGUgc3FsaXRlM192ZnMgb2JqZWN0LgorLy8gZmlsZU5hbWUgLSB0aGUgbmFt
ZSBvZiB0aGUgZmlsZS4KKy8vIGlkIC0gdGhlIHN0cnVjdHVyZSB0aGF0IHdpbGwgbWFuaXB1bGF0
ZSB0aGUgbmV3bHkgb3BlbmVkIGZpbGUuCisvLyBkZXNpcmVkRmxhZ3MgLSB0aGUgZGVzaXJlZCBv
cGVuIG1vZGUgZmxhZ3MuCisvLyB1c2VkRmxhZ3MgLSB0aGUgYWN0dWFsIG9wZW4gbW9kZSBmbGFn
cyB0aGF0IHdlcmUgdXNlZC4KK2ludCBjaHJvbWl1bU9wZW4oc3FsaXRlM192ZnMqIHZmcywgY29u
c3QgY2hhciogZmlsZU5hbWUsCisgICAgICAgICAgICAgICAgIHNxbGl0ZTNfZmlsZSogaWQsIGlu
dCBkZXNpcmVkRmxhZ3MsIGludCogdXNlZEZsYWdzKQoreworICAgIEhBTkRMRSBoID0gV2ViQ29y
ZTo6Q2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlT3BlbkZpbGUoZmlsZU5hbWUsIGRlc2lyZWRGbGFn
cyk7CisgICAgaWYgKGggPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgaWYgKGRl
c2lyZWRGbGFncyAmIFNRTElURV9PUEVOX1JFQURXUklURSkgeworICAgICAgICAgICAgaW50IG5l
d0ZsYWdzID0gKGRlc2lyZWRGbGFncyB8IFNRTElURV9PUEVOX1JFQURPTkxZKSAmIH5TUUxJVEVf
T1BFTl9SRUFEV1JJVEU7CisgICAgICAgICAgICByZXR1cm4gY2hyb21pdW1PcGVuKDAsIGZpbGVO
YW1lLCBpZCwgbmV3RmxhZ3MsIHVzZWRGbGFncyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICByZXR1cm4gU1FMSVRFX0NBTlRPUEVOOworCX0KKyAgICB9CisgICAgaWYgKHVzZWRGbGFn
cykgeworICAgICAgICBpZiAoZGVzaXJlZEZsYWdzICYgU1FMSVRFX09QRU5fUkVBRFdSSVRFKQor
ICAgICAgICAgICAgKnVzZWRGbGFncyA9IFNRTElURV9PUEVOX1JFQURXUklURTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgKnVzZWRGbGFncyA9IFNRTElURV9PUEVOX1JFQURPTkxZOworICAg
IH0KKworICAgIGNocm9taXVtX3NxbGl0ZTNfaW5pdGlhbGl6ZV93aW5fc3FsaXRlM19maWxlKGlk
LCBoKTsKKyAgICByZXR1cm4gU1FMSVRFX09LOworfQorCisvLyBEZWxldGVzIHRoZSBnaXZlbiBm
aWxlLgorLy8KKy8vIHZmcyAtIHBvaW50ZXIgdG8gdGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KKy8v
IGZpbGVOYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisvLyBzeW5jRGlyIC0gZGV0ZXJtaW5l
cyBpZiB0aGUgZGlyZWN0b3J5IHRvIHdoaWNoIHRoaXMgZmlsZSBiZWxvbmdzCisvLyAgICAgICAg
ICAgc2hvdWxkIGJlIHN5bmNoZWQgYWZ0ZXIgdGhlIGZpbGUgaXMgZGVsZXRlZC4KK2ludCBjaHJv
bWl1bURlbGV0ZShzcWxpdGUzX3ZmcyogdmZzLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50IHN5
bmNEaXIpCit7CisgICAgYm9vbCBkZWxldGVkID0gV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRh
dGFiYXNlRGVsZXRlRmlsZShmaWxlTmFtZSk7CisgICAgRFdPUkQgcmMgPSBXZWJDb3JlOjpDaHJv
bWl1bUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhmaWxlTmFtZSk7CisgICAgcmV0
dXJuICgocmMgPT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpICYmIGRlbGV0ZWQgPworICAgICAg
ICAgICAgU1FMSVRFX09LIDogU1FMSVRFX0lPRVJSX0RFTEVURSk7Cit9CisKKy8vIENoZWNrIHRo
ZSBleGlzdGFuY2UgYW5kIHN0YXR1cyBvZiB0aGUgZ2l2ZW4gZmlsZS4KKy8vCisvLyB2ZnMgLSBw
b2ludGVyIHRvIHRoZSBzcWxpdGUzX3ZmcyBvYmplY3QuCisvLyBmaWxlTmFtZSAtIHRoZSBuYW1l
IG9mIHRoZSBmaWxlLgorLy8gZmxhZyAtIHRoZSB0eXBlIG9mIHRlc3QgdG8gbWFrZSBvbiB0aGlz
IGZpbGUuCisvLyByZXMgLSB0aGUgcmVzdWx0LgoraW50IGNocm9taXVtQWNjZXNzKHNxbGl0ZTNf
dmZzKiB2ZnMsIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBpbnQgZmxhZywgaW50KiByZXMpCit7Cisg
ICAgRFdPUkQgYXR0ciA9IFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVB
dHRyaWJ1dGVzKGZpbGVOYW1lKTsKKyAgICBzd2l0Y2ggKGZsYWcpIHsKKyAgICBjYXNlIFNRTElU
RV9BQ0NFU1NfUkVBRDoKKyAgICBjYXNlIFNRTElURV9BQ0NFU1NfRVhJU1RTOgorICAgICAgICAq
cmVzID0gKGF0dHIgIT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFNRTElURV9BQ0NFU1NfUkVBRFdSSVRFOgorICAgICAgICAqcmVzID0gKChhdHRy
ICYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpID09IDApOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gU1FMSVRFX0VSUk9SOworICAgIH0KKworICAgIHJldHVy
biBTUUxJVEVfT0s7Cit9CisKKy8vIFR1cm5zIGEgcmVsYXRpdmUgcGF0aG5hbWUgaW50byBhIGZ1
bGwgcGF0aG5hbWUuCisvLworLy8gdmZzIC0gcG9pbnRlciB0byB0aGUgc3FsaXRlM192ZnMgb2Jq
ZWN0LgorLy8gcmVsYXRpdmVQYXRoIC0gdGhlIHJlbGF0aXZlIHBhdGguCisvLyBidWZTaXplIC0g
dGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIgaW4gYnl0ZXMuCisvLyBhYnNvbHV0ZVBhdGgg
LSB0aGUgb3V0cHV0IGJ1ZmZlciB3aGVyZSB0aGUgYWJzb2x1dGUgcGF0aCB3aWxsIGJlIHN0b3Jl
ZC4KK2ludCBjaHJvbWl1bUZ1bGxQYXRobmFtZShzcWxpdGUzX3ZmcyogdmZzLCBjb25zdCBjaGFy
KiByZWxhdGl2ZVBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1ZlNpemUsIGNo
YXIqIGFic29sdXRlUGF0aCkKK3sKKyAgICAvLyBUaGUgcmVuZGVyZXIgcHJvY2VzcyBkb2Vzbid0
IG5lZWQgdG8ga25vdyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZmlsZQorICAgIHNxbGl0ZTNf
c25wcmludGYodmZzLT5teFBhdGhuYW1lLCBhYnNvbHV0ZVBhdGgsICIlcyIsIHJlbGF0aXZlUGF0
aCk7CisgICAgcmV0dXJuIFNRTElURV9PSzsKK30KKworI2lmbmRlZiBTUUxJVEVfT01JVF9MT0FE
X0VYVEVOU0lPTgorLy8gUmV0dXJucyBOVUxMLCB0aHVzIGRpc2FsbG93aW5nIGxvYWRpbmcgbGli
cmFyaWVzIGluIHRoZSByZW5kZXJlciBwcm9jZXNzLgorLy8KKy8vIHZmcyAtIHBvaW50ZXIgdG8g
dGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KKy8vIGZpbGVOYW1lIC0gdGhlIG5hbWUgb2YgdGhlIHNo
YXJlZCBsaWJyYXJ5IGZpbGUuCit2b2lkKiBjaHJvbWl1bURsT3BlbihzcWxpdGUzX3ZmcyogdmZz
LCBjb25zdCBjaGFyKiBmaWxlTmFtZSkKK3sKKyAgICByZXR1cm4gTlVMTDsKK30KKyNlbHNlCisj
ZGVmaW5lIGNocm9taXVtRGxPcGVuIDAKKyNlbmRpZiAvLyBTUUxJVEVfT01JVF9MT0FEX0VYVEVO
U0lPTgorCit9IC8vIG5hbWVzcGFjZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NRTGl0ZUZp
bGVTeXN0ZW06OlNRTGl0ZUZpbGVTeXN0ZW0oKQoreworfQorCit2b2lkIFNRTGl0ZUZpbGVTeXN0
ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKCkKK3sKKyAgICBzcWxpdGUzX3Zmcyogd2luMzJfdmZzID0g
c3FsaXRlM192ZnNfZmluZCgid2luMzIiKTsKKyAgICBzdGF0aWMgc3FsaXRlM192ZnMgY2hyb21p
dW1fdmZzID0geworICAgICAgMSwKKyAgICAgIHdpbjMyX3Zmcy0+c3pPc0ZpbGUsCisgICAgICB3
aW4zMl92ZnMtPm14UGF0aG5hbWUsCisgICAgICAwLAorICAgICAgImNocm9taXVtX3ZmcyIsCisg
ICAgICAwLAorICAgICAgY2hyb21pdW1PcGVuLAorICAgICAgY2hyb21pdW1EZWxldGUsCisgICAg
ICBjaHJvbWl1bUFjY2VzcywKKyAgICAgIGNocm9taXVtRnVsbFBhdGhuYW1lLAorICAgICAgY2hy
b21pdW1EbE9wZW4sCisgICAgICB3aW4zMl92ZnMtPnhEbEVycm9yLAorICAgICAgd2luMzJfdmZz
LT54RGxTeW0sCisgICAgICB3aW4zMl92ZnMtPnhEbENsb3NlLAorICAgICAgd2luMzJfdmZzLT54
UmFuZG9tbmVzcywKKyAgICAgIHdpbjMyX3Zmcy0+eFNsZWVwLAorICAgICAgd2luMzJfdmZzLT54
Q3VycmVudFRpbWUsCisgICAgICB3aW4zMl92ZnMtPnhHZXRMYXN0RXJyb3IKKyAgICB9OworICAg
IHNxbGl0ZTNfdmZzX3JlZ2lzdGVyKCZjaHJvbWl1bV92ZnMsIDEpOworfQorCitpbnQgU1FMaXRl
RmlsZVN5c3RlbTo6b3BlbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIHNxbGl0ZTMq
KiBkYXRhYmFzZSkKK3sKKyAgICAvLyBvcGVuIGRhdGFiYXNlcyB1c2luZyBDaHJvbWl1bSdzIFZG
UworICAgIHJldHVybiBzcWxpdGUzX29wZW5fdjIoZmlsZU5hbWUudXRmOCgpLmRhdGEoKSwgZGF0
YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUUxJVEVfT1BFTl9SRUFEV1JJVEUg
fCBTUUxJVEVfT1BFTl9DUkVBVEUgfCBTUUxJVEVfT1BFTl9GVUxMTVVURVgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiY2hyb21pdW1fdmZzIik7Cit9CisKK1N0cmluZyBTUUxpdGVGaWxl
U3lzdGVtOjpnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNlKAorICBjb25zdCBTdHJpbmcgJmRiRGly
LCBjb25zdCBTdHJpbmcmIGRiTmFtZSwgY29uc3QgU3RyaW5nICZvcmlnaW5JZGVudGlmaWVyLCBT
UUxpdGVEYXRhYmFzZSogZGIpCit7CisgICAgLy8gQ2hyb21pdW0gbmFtZXMgREIgZmlsZXMgYmFz
ZWQgb24gb3JpZ2luIGFuZCBEQiBuYW1lIG9ubHkKKyAgICByZXR1cm4gb3JpZ2luSWRlbnRpZmll
ciArICJfIiArIGRiTmFtZSArICIuZGIiOworfQorCitTdHJpbmcgU1FMaXRlRmlsZVN5c3RlbTo6
YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0
cmluZyYgZmlsZU5hbWUpCit7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gZmlsZU5hbWU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gcGF0aCArICJcXCIgKyBmaWxl
TmFtZTsKK30KKworYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZURpcmVjdG9y
eUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgLy8gaWYgdGhlIGRpcmVjdG9yeSB3
aGVyZSBDaHJvbWl1bSBzdG9yZXMgdGhlIGRhdGFiYXNlcyBkb2VzIG5vdCBleGlzdCwKKyAgICAv
LyBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSB0aGUgYnJvd3NlciBwcm9jZXNz
OworICAgIC8vIHNvIGFzIGZhciBhcyB0aGUgV2ViS2l0IGNvZGUgaXMgY29uY2VybmVkLCB0aGlz
IGRpcmVjdG9yeSBhbHdheXMgZXhpc3RzCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1FM
aXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgZmls
ZU5hbWUsIGJvb2wgY2hlY2tQYXRoT25seSkKK3sKKyAgICAvLyBhbGwgZGF0YWJhc2UgZGlyZWN0
b3JpZXMgd2lsbCBiZSBjcmVhdGVkIGFzIG5lZWRlZCBieSB0aGUgYnJvd3NlciBwcm9jZXNzCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlE
YXRhYmFzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgLy8gQ2hyb21pdW0g
ZG9lcyBub3QgdXNlIGEgc2VwYXJhdGUgZGlyZWN0b3J5IGZvciBlYWNoIGRhdGFiYXNlLAorICAg
IC8vIHNvIHRoZXJlJ3Mgbm90aGluZyB0byBkbyBoZXJlCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYg
ZmlsZU5hbWUpCit7CisgICAgLy8gcmV0dXJuIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGVycm9y
IGNvZGUgcmV0dXJuZWQgYnkKKyAgICAvLyBDaHJvbWl1bUJyaWRnZTo6ZGVsZXRlRGF0YWJhc2Uo
KSBpcyAwCisgICAgcmV0dXJuICghQ2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlRGVsZXRlRmlsZShm
aWxlTmFtZSkpOworfQorCitsb25nIGxvbmcgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VG
aWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQoreworICAgIHJldHVybiBDaHJvbWl1bUJy
aWRnZTo6ZGF0YWJhc2VHZXRGaWxlU2l6ZShmaWxlTmFtZSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUK
</data>
<flag name="review"
          id="16697"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32338</attachid>
            <date>2009-07-06 18:02:34 -0700</date>
            <delta_ts>2009-07-08 14:59:25 -0700</delta_ts>
            <desc>win patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>12852</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTU2MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMDctMDYgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgdGhlIFdpbiBTUUxpdGUgVkZTIGltcGxlbWVudGF0aW9uIGZvciBDaHJvbWl1bS4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NDAK
KworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vc3FsL2Nocm9taXVtOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
Y2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtLmNwcDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5jcHA6IEFk
ZGVkLgorCiAyMDA5LTA3LTA2ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0Nocm9taXVtQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCShyZXZpc2lvbiA0NTU2MCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiAr
NDMsNyBAQCB0eXBlZGVmIE5QUF90KiBOUFA7CiAKICNpZiBQTEFURk9STShXSU5fT1MpCiB0eXBl
ZGVmIHN0cnVjdCBIRk9OVF9fKiBIRk9OVDsKK3R5cGVkZWYgdm9pZCogSEFORExFOwogI2VuZGlm
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE3Nyw2ICsxNzgsMjcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAvLyBXaWRnZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICBzdGF0aWMgdm9pZCB3aWRn
ZXRTZXRDdXJzb3IoV2lkZ2V0KiwgY29uc3QgQ3Vyc29yJik7CiAgICAgICAgIHN0YXRpYyB2b2lk
IHdpZGdldFNldEZvY3VzKFdpZGdldCopOworCisgICAgICAgIC8vIEhUTUw1IERCIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
ICAgICAgLy8gT3BlbnMgYSBkYXRhYmFzZSBmaWxlCisgICAgICAgIC8vICdkZXNpcmVkRmxhZ3Mn
IGlzIGEgY29sbGVjdGlvbiBvZiBPUidkIFNRTGl0ZSBjb25zdGFudHMgdGhhdAorICAgICAgICAv
LyBkZXRlcm1pbmUgaG93IHRoZSBmaWxlIHNob3VsZCBiZSBvcGVuZWQKKyNpZiBQTEFURk9STShX
SU5fT1MpCisgICAgICAgIHN0YXRpYyBIQU5ETEUgZGF0YWJhc2VPcGVuRmlsZShjb25zdCBTdHJp
bmcmIGZpbGVOYW1lLCBpbnQgZGVzaXJlZEZsYWdzKTsKKyNlbHNlCisgICAgICAgIHN0YXRpYyBp
bnQgZGF0YWJhc2VPcGVuRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgZGVzaXJlZEZs
YWdzKTsKKyNlbmRpZgorCisgICAgICAgIC8vIERlbGV0ZXMgYSBkYXRhYmFzZSBmaWxlCisgICAg
ICAgIC8vIFJldHVybnMgJ3RydWUnIGlmIHRoZSBmaWxlIHdhcyBkZWxldGVkOyAnZmFsc2UnIG90
aGVyd2lzZQorICAgICAgICBzdGF0aWMgYm9vbCBkYXRhYmFzZURlbGV0ZUZpbGUoY29uc3QgU3Ry
aW5nJiBmaWxlTmFtZSk7CisKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgZmlsZSBhdHRyaWJ1dGVz
IG9mIHRoZSBnaXZlbiBkYXRhYmFzZSBmaWxlCisgICAgICAgIHN0YXRpYyBsb25nIGRhdGFiYXNl
R2V0RmlsZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisKKyAgICAgICAgLy8g
UmV0dXJucyBzaXplIG9mIHRoZSBnaXZlbiBmaWxlCisgICAgICAgIHN0YXRpYyBsb25nIGxvbmcg
ZGF0YWJhc2VHZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1
bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJy
aWRnZS5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5o
IgorI2luY2x1ZGUgPHNxbGl0ZTMuaD4KKworI2lmbmRlZiBTUUxJVEVfT1BFTl9GVUxMTVVURVgK
KyNkZWZpbmUgU1FMSVRFX09QRU5fRlVMTE1VVEVYIDB4MDAwMTAwMDAKKyNlbmRpZgorCisvLyBT
UUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpIGlzIGltcGxlbWVudGVkIGluIHRo
ZQorLy8gcGxhdGZvcm0tc3BlY2lmaWMgZmlsZXMgU1FMaXRlRmlsZVN5c3RlbUNocm9taXVte1dp
bnxQb3NpeH0uY3BwCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NRTGl0ZUZpbGVTeXN0ZW06OlNR
TGl0ZUZpbGVTeXN0ZW0oKQoreworfQorCitpbnQgU1FMaXRlRmlsZVN5c3RlbTo6b3BlbkRhdGFi
YXNlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIHNxbGl0ZTMqKiBkYXRhYmFzZSkKK3sKKyAgICAv
LyBvcGVuIGRhdGFiYXNlcyB1c2luZyBDaHJvbWl1bSdzIFZGUworICAgIHJldHVybiBzcWxpdGUz
X29wZW5fdjIoZmlsZU5hbWUudXRmOCgpLmRhdGEoKSwgZGF0YWJhc2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTUUxJVEVfT1BFTl9SRUFEV1JJVEUgfCBTUUxJVEVfT1BFTl9DUkVBVEUg
fCBTUUxJVEVfT1BFTl9GVUxMTVVURVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hy
b21pdW1fdmZzIik7Cit9CisKK1N0cmluZyBTUUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZv
ck5ld0RhdGFiYXNlKAorICBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGRiTmFtZSwgY29u
c3QgU3RyaW5nICZvcmlnaW5JZGVudGlmaWVyLCBTUUxpdGVEYXRhYmFzZSopCit7CisgICAgLy8g
Q2hyb21pdW0gbmFtZXMgREIgZmlsZXMgYmFzZWQgb24gb3JpZ2luIGFuZCBEQiBuYW1lIG9ubHkK
KyAgICByZXR1cm4gb3JpZ2luSWRlbnRpZmllciArICJfIiArIGRiTmFtZSArICIuZGIiOworfQor
CitTdHJpbmcgU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChj
b25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCit7CisgICAgaWYgKHBh
dGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmlsZU5hbWU7CisgICAgZWxzZQorICAgICAg
ICByZXR1cm4gcGF0aCArICJcXCIgKyBmaWxlTmFtZTsKK30KKworYm9vbCBTUUxpdGVGaWxlU3lz
dGVtOjplbnN1cmVEYXRhYmFzZURpcmVjdG9yeUV4aXN0cyhjb25zdCBTdHJpbmcmKQoreworICAg
IC8vIGlmIHRoZSBkaXJlY3Rvcnkgd2hlcmUgQ2hyb21pdW0gc3RvcmVzIHRoZSBkYXRhYmFzZXMg
ZG9lcyBub3QgZXhpc3QsCisgICAgLy8gaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQg
YnkgdGhlIGJyb3dzZXIgcHJvY2VzczsKKyAgICAvLyBzbyBhcyBmYXIgYXMgdGhlIFdlYktpdCBj
b2RlIGlzIGNvbmNlcm5lZCwgdGhpcyBkaXJlY3RvcnkgYWx3YXlzIGV4aXN0cworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRmlsZUV4
aXN0cyhjb25zdCBTdHJpbmcmLCBib29sKQoreworICAgIC8vIGFsbCBkYXRhYmFzZSBkaXJlY3Rv
cmllcyB3aWxsIGJlIGNyZWF0ZWQgYXMgbmVlZGVkIGJ5IHRoZSBicm93c2VyIHByb2Nlc3MKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURh
dGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpCit7CisgICAgLy8gQ2hyb21pdW0gZG9lcyBu
b3QgdXNlIGEgc2VwYXJhdGUgZGlyZWN0b3J5IGZvciBlYWNoIGRhdGFiYXNlLAorICAgIC8vIHNv
IHRoZXJlJ3Mgbm90aGluZyB0byBkbyBoZXJlCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpCit7CisgICAgLy8gcmV0dXJuIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGVycm9yIGNvZGUg
cmV0dXJuZWQgYnkKKyAgICAvLyBDaHJvbWl1bUJyaWRnZTo6ZGVsZXRlRGF0YWJhc2UoKSBpcyAw
CisgICAgcmV0dXJuICghQ2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlRGVsZXRlRmlsZShmaWxlTmFt
ZSkpOworfQorCitsb25nIGxvbmcgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6
ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQoreworICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6
ZGF0YWJhc2VHZXRGaWxlU2l6ZShmaWxlTmFtZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1D
aHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21p
dW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisj
aW5jbHVkZSA8c3FsaXRlMy5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworLy8gRGVmaW5lZCBp
biBDaHJvbWl1bSdzIGNvZGViYXNlIGluIHRoaXJkX3BhcnR5L3NxbGl0ZS9zcmMvb3Nfd2luLmMK
K2V4dGVybiAiQyIgeworaW50IGNocm9taXVtX3NxbGl0ZTNfaW5pdGlhbGl6ZV93aW5fc3FsaXRl
M19maWxlKHNxbGl0ZTNfZmlsZSogZmlsZSwgSEFORExFIGhhbmRsZSk7Cit9CisKKy8vIENocm9t
aXVtJ3MgV2luZG93cyBpbXBsZW1lbnRhdGlvbiBvZiBTUUxpdGUgVkZTCituYW1lc3BhY2Ugewor
CisvLyBPcGVucyBhIGZpbGUuCisvLworLy8gdmZzIC0gcG9pbnRlciB0byB0aGUgc3FsaXRlM192
ZnMgb2JqZWN0LgorLy8gZmlsZU5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKy8vIGlkIC0g
dGhlIHN0cnVjdHVyZSB0aGF0IHdpbGwgbWFuaXB1bGF0ZSB0aGUgbmV3bHkgb3BlbmVkIGZpbGUu
CisvLyBkZXNpcmVkRmxhZ3MgLSB0aGUgZGVzaXJlZCBvcGVuIG1vZGUgZmxhZ3MuCisvLyB1c2Vk
RmxhZ3MgLSB0aGUgYWN0dWFsIG9wZW4gbW9kZSBmbGFncyB0aGF0IHdlcmUgdXNlZC4KK2ludCBj
aHJvbWl1bU9wZW4oc3FsaXRlM192ZnMqIHZmcywgY29uc3QgY2hhciogZmlsZU5hbWUsCisgICAg
ICAgICAgICAgICAgIHNxbGl0ZTNfZmlsZSogaWQsIGludCBkZXNpcmVkRmxhZ3MsIGludCogdXNl
ZEZsYWdzKQoreworICAgIEhBTkRMRSBoID0gV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRhdGFi
YXNlT3BlbkZpbGUoZmlsZU5hbWUsIGRlc2lyZWRGbGFncyk7CisgICAgaWYgKGggPT0gSU5WQUxJ
RF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgaWYgKGRlc2lyZWRGbGFncyAmIFNRTElURV9PUEVO
X1JFQURXUklURSkgeworICAgICAgICAgICAgaW50IG5ld0ZsYWdzID0gKGRlc2lyZWRGbGFncyB8
IFNRTElURV9PUEVOX1JFQURPTkxZKSAmIH5TUUxJVEVfT1BFTl9SRUFEV1JJVEU7CisgICAgICAg
ICAgICByZXR1cm4gY2hyb21pdW1PcGVuKDAsIGZpbGVOYW1lLCBpZCwgbmV3RmxhZ3MsIHVzZWRG
bGFncyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIFNRTElURV9DQU5UT1BF
TjsKKyAgICB9CisgICAgaWYgKHVzZWRGbGFncykgeworICAgICAgICBpZiAoZGVzaXJlZEZsYWdz
ICYgU1FMSVRFX09QRU5fUkVBRFdSSVRFKQorICAgICAgICAgICAgKnVzZWRGbGFncyA9IFNRTElU
RV9PUEVOX1JFQURXUklURTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKnVzZWRGbGFncyA9
IFNRTElURV9PUEVOX1JFQURPTkxZOworICAgIH0KKworICAgIGNocm9taXVtX3NxbGl0ZTNfaW5p
dGlhbGl6ZV93aW5fc3FsaXRlM19maWxlKGlkLCBoKTsKKyAgICByZXR1cm4gU1FMSVRFX09LOwor
fQorCisvLyBEZWxldGVzIHRoZSBnaXZlbiBmaWxlLgorLy8KKy8vIHZmcyAtIHBvaW50ZXIgdG8g
dGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KKy8vIGZpbGVOYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGZp
bGUuCisvLyBzeW5jRGlyIC0gZGV0ZXJtaW5lcyBpZiB0aGUgZGlyZWN0b3J5IHRvIHdoaWNoIHRo
aXMgZmlsZSBiZWxvbmdzCisvLyAgICAgICAgICAgc2hvdWxkIGJlIHN5bmNoZWQgYWZ0ZXIgdGhl
IGZpbGUgaXMgZGVsZXRlZC4KK2ludCBjaHJvbWl1bURlbGV0ZShzcWxpdGUzX3ZmcyogdmZzLCBj
b25zdCBjaGFyKiBmaWxlTmFtZSwgaW50IHN5bmNEaXIpCit7CisgICAgYm9vbCBkZWxldGVkID0g
V2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlRGVsZXRlRmlsZShmaWxlTmFtZSk7Cisg
ICAgRFdPUkQgcmMgPSBXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0
cmlidXRlcyhmaWxlTmFtZSk7CisgICAgcmV0dXJuICgocmMgPT0gSU5WQUxJRF9GSUxFX0FUVFJJ
QlVURVMpICYmIGRlbGV0ZWQgPworICAgICAgICAgICAgU1FMSVRFX09LIDogU1FMSVRFX0lPRVJS
X0RFTEVURSk7Cit9CisKKy8vIENoZWNrIHRoZSBleGlzdGFuY2UgYW5kIHN0YXR1cyBvZiB0aGUg
Z2l2ZW4gZmlsZS4KKy8vCisvLyB2ZnMgLSBwb2ludGVyIHRvIHRoZSBzcWxpdGUzX3ZmcyBvYmpl
Y3QuCisvLyBmaWxlTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorLy8gZmxhZyAtIHRoZSB0
eXBlIG9mIHRlc3QgdG8gbWFrZSBvbiB0aGlzIGZpbGUuCisvLyByZXMgLSB0aGUgcmVzdWx0Lgor
aW50IGNocm9taXVtQWNjZXNzKHNxbGl0ZTNfdmZzKiB2ZnMsIGNvbnN0IGNoYXIqIGZpbGVOYW1l
LCBpbnQgZmxhZywgaW50KiByZXMpCit7CisgICAgRFdPUkQgYXR0ciA9IFdlYkNvcmU6OkNocm9t
aXVtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGZpbGVOYW1lKTsKKyAgICBzd2l0
Y2ggKGZsYWcpIHsKKyAgICBjYXNlIFNRTElURV9BQ0NFU1NfUkVBRDoKKyAgICBjYXNlIFNRTElU
RV9BQ0NFU1NfRVhJU1RTOgorICAgICAgICAqcmVzID0gKGF0dHIgIT0gSU5WQUxJRF9GSUxFX0FU
VFJJQlVURVMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNRTElURV9BQ0NFU1NfUkVBRFdS
SVRFOgorICAgICAgICAqcmVzID0gKChhdHRyICYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpID09
IDApOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gU1FMSVRF
X0VSUk9SOworICAgIH0KKworICAgIHJldHVybiBTUUxJVEVfT0s7Cit9CisKKy8vIFR1cm5zIGEg
cmVsYXRpdmUgcGF0aG5hbWUgaW50byBhIGZ1bGwgcGF0aG5hbWUuCisvLworLy8gdmZzIC0gcG9p
bnRlciB0byB0aGUgc3FsaXRlM192ZnMgb2JqZWN0LgorLy8gcmVsYXRpdmVQYXRoIC0gdGhlIHJl
bGF0aXZlIHBhdGguCisvLyBidWZTaXplIC0gdGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIg
aW4gYnl0ZXMuCisvLyBhYnNvbHV0ZVBhdGggLSB0aGUgb3V0cHV0IGJ1ZmZlciB3aGVyZSB0aGUg
YWJzb2x1dGUgcGF0aCB3aWxsIGJlIHN0b3JlZC4KK2ludCBjaHJvbWl1bUZ1bGxQYXRobmFtZShz
cWxpdGUzX3ZmcyogdmZzLCBjb25zdCBjaGFyKiByZWxhdGl2ZVBhdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGJ1ZlNpemUsIGNoYXIqIGFic29sdXRlUGF0aCkKK3sKKyAgICAvLyBU
aGUgcmVuZGVyZXIgcHJvY2VzcyBkb2Vzbid0IG5lZWQgdG8ga25vdyB0aGUgYWJzb2x1dGUgcGF0
aCBvZiB0aGUgZmlsZQorICAgIHNxbGl0ZTNfc25wcmludGYodmZzLT5teFBhdGhuYW1lLCBhYnNv
bHV0ZVBhdGgsICIlcyIsIHJlbGF0aXZlUGF0aCk7CisgICAgcmV0dXJuIFNRTElURV9PSzsKK30K
KworI2lmbmRlZiBTUUxJVEVfT01JVF9MT0FEX0VYVEVOU0lPTgorLy8gUmV0dXJucyBOVUxMLCB0
aHVzIGRpc2FsbG93aW5nIGxvYWRpbmcgbGlicmFyaWVzIGluIHRoZSByZW5kZXJlciBwcm9jZXNz
LgorLy8KKy8vIHZmcyAtIHBvaW50ZXIgdG8gdGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KKy8vIGZp
bGVOYW1lIC0gdGhlIG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IGZpbGUuCit2b2lkKiBjaHJv
bWl1bURsT3BlbihzcWxpdGUzX3ZmcyogdmZzLCBjb25zdCBjaGFyKiBmaWxlTmFtZSkKK3sKKyAg
ICByZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGNocm9taXVtRGxPcGVuIDAKKyNlbmRpZiAv
LyBTUUxJVEVfT01JVF9MT0FEX0VYVEVOU0lPTgorCit9IC8vIG5hbWVzcGFjZQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3ZvaWQgU1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMo
KQoreworICAgIHNxbGl0ZTNfdmZzKiB3aW4zMl92ZnMgPSBzcWxpdGUzX3Zmc19maW5kKCJ3aW4z
MiIpOworICAgIHN0YXRpYyBzcWxpdGUzX3ZmcyBjaHJvbWl1bV92ZnMgPSB7CisgICAgICAgIDEs
CisgICAgICAgIHdpbjMyX3Zmcy0+c3pPc0ZpbGUsCisgICAgICAgIHdpbjMyX3Zmcy0+bXhQYXRo
bmFtZSwKKyAgICAgICAgMCwKKyAgICAgICAgImNocm9taXVtX3ZmcyIsCisgICAgICAgIDAsCisg
ICAgICAgIGNocm9taXVtT3BlbiwKKyAgICAgICAgY2hyb21pdW1EZWxldGUsCisgICAgICAgIGNo
cm9taXVtQWNjZXNzLAorICAgICAgICBjaHJvbWl1bUZ1bGxQYXRobmFtZSwKKyAgICAgICAgY2hy
b21pdW1EbE9wZW4sCisgICAgICAgIHdpbjMyX3Zmcy0+eERsRXJyb3IsCisgICAgICAgIHdpbjMy
X3Zmcy0+eERsU3ltLAorICAgICAgICB3aW4zMl92ZnMtPnhEbENsb3NlLAorICAgICAgICB3aW4z
Ml92ZnMtPnhSYW5kb21uZXNzLAorICAgICAgICB3aW4zMl92ZnMtPnhTbGVlcCwKKyAgICAgICAg
d2luMzJfdmZzLT54Q3VycmVudFRpbWUsCisgICAgICAgIHdpbjMyX3Zmcy0+eEdldExhc3RFcnJv
cgorICAgIH07CisgICAgc3FsaXRlM192ZnNfcmVnaXN0ZXIoJmNocm9taXVtX3ZmcywgMSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32476</attachid>
            <date>2009-07-08 14:59:25 -0700</date>
            <delta_ts>2009-07-08 16:00:13 -0700</delta_ts>
            <desc>win patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>12783</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTY0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMDctMDggIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgdGhlIFdpbiBTUUxpdGUgVkZTIGltcGxlbWVudGF0aW9uIGZvciBDaHJvbWl1bS4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NDAK
KworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vc3FsL2Nocm9taXVtOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
Y2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtLmNwcDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5jcHA6IEFk
ZGVkLgorCiAyMDA5LTA3LTA4ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaAkocmV2aXNpb24gNDU2NDEpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNpZm5kZWYgQ2hyb21pdW1CcmlkZ2VfaAogI2RlZmluZSBDaHJvbWl1
bUJyaWRnZV9oCiAKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiTGlua0hhc2gu
aCIKICNpbmNsdWRlICJQYXNzUmVmUHRyLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZFByaXZhdGUu
aCIKQEAgLTE3Nyw2ICsxNzgsMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBX
aWRnZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogICAgICAgICBzdGF0aWMgdm9pZCB3aWRnZXRTZXRDdXJzb3IoV2lkZ2V0Kiwg
Y29uc3QgQ3Vyc29yJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdpZGdldFNldEZvY3VzKFdpZGdl
dCopOworCisgICAgICAgIC8vIEhUTUw1IERCIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgLy8gT3BlbnMgYSBkYXRh
YmFzZSBmaWxlCisgICAgICAgIC8vICdkZXNpcmVkRmxhZ3MnIGlzIGEgY29sbGVjdGlvbiBvZiBP
UidkIFNRTGl0ZSBjb25zdGFudHMgdGhhdAorICAgICAgICAvLyBkZXRlcm1pbmUgaG93IHRoZSBm
aWxlIHNob3VsZCBiZSBvcGVuZWQKKyAgICAgICAgc3RhdGljIFBsYXRmb3JtRmlsZUhhbmRsZSBk
YXRhYmFzZU9wZW5GaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBkZXNpcmVkRmxhZ3Mp
OworCisgICAgICAgIC8vIERlbGV0ZXMgYSBkYXRhYmFzZSBmaWxlCisgICAgICAgIC8vIFJldHVy
bnMgJ3RydWUnIGlmIHRoZSBmaWxlIHdhcyBkZWxldGVkOyAnZmFsc2UnIG90aGVyd2lzZQorICAg
ICAgICBzdGF0aWMgYm9vbCBkYXRhYmFzZURlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSk7CisKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgZmlsZSBhdHRyaWJ1dGVzIG9mIHRoZSBnaXZl
biBkYXRhYmFzZSBmaWxlCisgICAgICAgIHN0YXRpYyBsb25nIGRhdGFiYXNlR2V0RmlsZUF0dHJp
YnV0ZXMoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisKKyAgICAgICAgLy8gUmV0dXJucyBzaXpl
IG9mIHRoZSBnaXZlbiBmaWxlCisgICAgICAgIHN0YXRpYyBsb25nIGxvbmcgZGF0YWJhc2VHZXRG
aWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxl
U3lzdGVtQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL2No
cm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTUUxpdGVGaWxlU3lzdGVtLmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUg
PHNxbGl0ZTMuaD4KKworI2lmbmRlZiBTUUxJVEVfT1BFTl9GVUxMTVVURVgKKyNkZWZpbmUgU1FM
SVRFX09QRU5fRlVMTE1VVEVYIDB4MDAwMTAwMDAKKyNlbmRpZgorCisvLyBTUUxpdGVGaWxlU3lz
dGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpIGlzIGltcGxlbWVudGVkIGluIHRoZQorLy8gcGxhdGZv
cm0tc3BlY2lmaWMgZmlsZXMgU1FMaXRlRmlsZVN5c3RlbUNocm9taXVte1dpbnxQb3NpeH0uY3Bw
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NRTGl0ZUZpbGVTeXN0ZW06OlNRTGl0ZUZpbGVTeXN0
ZW0oKQoreworfQorCitpbnQgU1FMaXRlRmlsZVN5c3RlbTo6b3BlbkRhdGFiYXNlKGNvbnN0IFN0
cmluZyYgZmlsZU5hbWUsIHNxbGl0ZTMqKiBkYXRhYmFzZSkKK3sKKyAgICAvLyBvcGVuIGRhdGFi
YXNlcyB1c2luZyBDaHJvbWl1bSdzIFZGUworICAgIHJldHVybiBzcWxpdGUzX29wZW5fdjIoZmls
ZU5hbWUudXRmOCgpLmRhdGEoKSwgZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTUUxJVEVfT1BFTl9SRUFEV1JJVEUgfCBTUUxJVEVfT1BFTl9DUkVBVEUgfCBTUUxJVEVfT1BF
Tl9GVUxMTVVURVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hyb21pdW1fdmZzIik7
Cit9CisKK1N0cmluZyBTUUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNl
KAorICBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGRiTmFtZSwgY29uc3QgU3RyaW5nICZv
cmlnaW5JZGVudGlmaWVyLCBTUUxpdGVEYXRhYmFzZSopCit7CisgICAgLy8gQ2hyb21pdW0gbmFt
ZXMgREIgZmlsZXMgYmFzZWQgb24gb3JpZ2luIGFuZCBEQiBuYW1lIG9ubHkKKyAgICByZXR1cm4g
b3JpZ2luSWRlbnRpZmllciArICJfIiArIGRiTmFtZSArICIuZGIiOworfQorCitTdHJpbmcgU1FM
aXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChjb25zdCBTdHJpbmcm
IHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCit7CisgICAgaWYgKHBhdGguaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmlsZU5hbWU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gcGF0
aCArICJcXCIgKyBmaWxlTmFtZTsKK30KKworYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjplbnN1cmVE
YXRhYmFzZURpcmVjdG9yeUV4aXN0cyhjb25zdCBTdHJpbmcmKQoreworICAgIC8vIGlmIHRoZSBk
aXJlY3Rvcnkgd2hlcmUgQ2hyb21pdW0gc3RvcmVzIHRoZSBkYXRhYmFzZXMgZG9lcyBub3QgZXhp
c3QsCisgICAgLy8gaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgdGhlIGJyb3dz
ZXIgcHJvY2VzczsKKyAgICAvLyBzbyBhcyBmYXIgYXMgdGhlIFdlYktpdCBjb2RlIGlzIGNvbmNl
cm5lZCwgdGhpcyBkaXJlY3RvcnkgYWx3YXlzIGV4aXN0cworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyhjb25zdCBT
dHJpbmcmLCBib29sKQoreworICAgIC8vIGFsbCBkYXRhYmFzZSBkaXJlY3RvcmllcyB3aWxsIGJl
IGNyZWF0ZWQgYXMgbmVlZGVkIGJ5IHRoZSBicm93c2VyIHByb2Nlc3MKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYpCit7CisgICAgLy8gQ2hyb21pdW0gZG9lcyBub3QgdXNlIGEgc2Vw
YXJhdGUgZGlyZWN0b3J5IGZvciBlYWNoIGRhdGFiYXNlLAorICAgIC8vIHNvIHRoZXJlJ3Mgbm90
aGluZyB0byBkbyBoZXJlCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1FMaXRlRmlsZVN5
c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCit7CisgICAg
Ly8gcmV0dXJuIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkK
KyAgICAvLyBDaHJvbWl1bUJyaWRnZTo6ZGVsZXRlRGF0YWJhc2UoKSBpcyAwCisgICAgcmV0dXJu
ICghQ2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlRGVsZXRlRmlsZShmaWxlTmFtZSkpOworfQorCits
b25nIGxvbmcgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJp
bmcmIGZpbGVOYW1lKQoreworICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VHZXRG
aWxlU2l6ZShmaWxlTmFtZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmls
ZVN5c3RlbUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
c3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTGl0ZUZp
bGVTeXN0ZW0uaCIKKworI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSA8c3Fs
aXRlMy5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworLy8gRGVmaW5lZCBpbiBDaHJvbWl1bSdz
IGNvZGViYXNlIGluIHRoaXJkX3BhcnR5L3NxbGl0ZS9zcmMvb3Nfd2luLmMKK2V4dGVybiAiQyIg
eworaW50IGNocm9taXVtX3NxbGl0ZTNfaW5pdGlhbGl6ZV93aW5fc3FsaXRlM19maWxlKHNxbGl0
ZTNfZmlsZSogZmlsZSwgSEFORExFIGhhbmRsZSk7Cit9CisKKy8vIENocm9taXVtJ3MgV2luZG93
cyBpbXBsZW1lbnRhdGlvbiBvZiBTUUxpdGUgVkZTCituYW1lc3BhY2UgeworCisvLyBPcGVucyBh
IGZpbGUuCisvLworLy8gdmZzIC0gcG9pbnRlciB0byB0aGUgc3FsaXRlM192ZnMgb2JqZWN0Lgor
Ly8gZmlsZU5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKy8vIGlkIC0gdGhlIHN0cnVjdHVy
ZSB0aGF0IHdpbGwgbWFuaXB1bGF0ZSB0aGUgbmV3bHkgb3BlbmVkIGZpbGUuCisvLyBkZXNpcmVk
RmxhZ3MgLSB0aGUgZGVzaXJlZCBvcGVuIG1vZGUgZmxhZ3MuCisvLyB1c2VkRmxhZ3MgLSB0aGUg
YWN0dWFsIG9wZW4gbW9kZSBmbGFncyB0aGF0IHdlcmUgdXNlZC4KK2ludCBjaHJvbWl1bU9wZW4o
c3FsaXRlM192ZnMqIHZmcywgY29uc3QgY2hhciogZmlsZU5hbWUsCisgICAgICAgICAgICAgICAg
IHNxbGl0ZTNfZmlsZSogaWQsIGludCBkZXNpcmVkRmxhZ3MsIGludCogdXNlZEZsYWdzKQorewor
ICAgIEhBTkRMRSBoID0gV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlT3BlbkZpbGUo
ZmlsZU5hbWUsIGRlc2lyZWRGbGFncyk7CisgICAgaWYgKGggPT0gSU5WQUxJRF9IQU5ETEVfVkFM
VUUpIHsKKyAgICAgICAgaWYgKGRlc2lyZWRGbGFncyAmIFNRTElURV9PUEVOX1JFQURXUklURSkg
eworICAgICAgICAgICAgaW50IG5ld0ZsYWdzID0gKGRlc2lyZWRGbGFncyB8IFNRTElURV9PUEVO
X1JFQURPTkxZKSAmIH5TUUxJVEVfT1BFTl9SRUFEV1JJVEU7CisgICAgICAgICAgICByZXR1cm4g
Y2hyb21pdW1PcGVuKDAsIGZpbGVOYW1lLCBpZCwgbmV3RmxhZ3MsIHVzZWRGbGFncyk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIFNRTElURV9DQU5UT1BFTjsKKyAgICB9Cisg
ICAgaWYgKHVzZWRGbGFncykgeworICAgICAgICBpZiAoZGVzaXJlZEZsYWdzICYgU1FMSVRFX09Q
RU5fUkVBRFdSSVRFKQorICAgICAgICAgICAgKnVzZWRGbGFncyA9IFNRTElURV9PUEVOX1JFQURX
UklURTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKnVzZWRGbGFncyA9IFNRTElURV9PUEVO
X1JFQURPTkxZOworICAgIH0KKworICAgIGNocm9taXVtX3NxbGl0ZTNfaW5pdGlhbGl6ZV93aW5f
c3FsaXRlM19maWxlKGlkLCBoKTsKKyAgICByZXR1cm4gU1FMSVRFX09LOworfQorCisvLyBEZWxl
dGVzIHRoZSBnaXZlbiBmaWxlLgorLy8KKy8vIHZmcyAtIHBvaW50ZXIgdG8gdGhlIHNxbGl0ZTNf
dmZzIG9iamVjdC4KKy8vIGZpbGVOYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisvLyBzeW5j
RGlyIC0gZGV0ZXJtaW5lcyBpZiB0aGUgZGlyZWN0b3J5IHRvIHdoaWNoIHRoaXMgZmlsZSBiZWxv
bmdzCisvLyAgICAgICAgICAgc2hvdWxkIGJlIHN5bmNoZWQgYWZ0ZXIgdGhlIGZpbGUgaXMgZGVs
ZXRlZC4KK2ludCBjaHJvbWl1bURlbGV0ZShzcWxpdGUzX3ZmcyogdmZzLCBjb25zdCBjaGFyKiBm
aWxlTmFtZSwgaW50IHN5bmNEaXIpCit7CisgICAgYm9vbCBkZWxldGVkID0gV2ViQ29yZTo6Q2hy
b21pdW1CcmlkZ2U6OmRhdGFiYXNlRGVsZXRlRmlsZShmaWxlTmFtZSk7CisgICAgRFdPUkQgcmMg
PSBXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhmaWxl
TmFtZSk7CisgICAgcmV0dXJuICgocmMgPT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpICYmIGRl
bGV0ZWQgPworICAgICAgICAgICAgU1FMSVRFX09LIDogU1FMSVRFX0lPRVJSX0RFTEVURSk7Cit9
CisKKy8vIENoZWNrIHRoZSBleGlzdGFuY2UgYW5kIHN0YXR1cyBvZiB0aGUgZ2l2ZW4gZmlsZS4K
Ky8vCisvLyB2ZnMgLSBwb2ludGVyIHRvIHRoZSBzcWxpdGUzX3ZmcyBvYmplY3QuCisvLyBmaWxl
TmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorLy8gZmxhZyAtIHRoZSB0eXBlIG9mIHRlc3Qg
dG8gbWFrZSBvbiB0aGlzIGZpbGUuCisvLyByZXMgLSB0aGUgcmVzdWx0LgoraW50IGNocm9taXVt
QWNjZXNzKHNxbGl0ZTNfdmZzKiB2ZnMsIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBpbnQgZmxhZywg
aW50KiByZXMpCit7CisgICAgRFdPUkQgYXR0ciA9IFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjpk
YXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGZpbGVOYW1lKTsKKyAgICBzd2l0Y2ggKGZsYWcpIHsK
KyAgICBjYXNlIFNRTElURV9BQ0NFU1NfUkVBRDoKKyAgICBjYXNlIFNRTElURV9BQ0NFU1NfRVhJ
U1RTOgorICAgICAgICAqcmVzID0gKGF0dHIgIT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFNRTElURV9BQ0NFU1NfUkVBRFdSSVRFOgorICAgICAg
ICAqcmVzID0gKChhdHRyICYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpID09IDApOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gU1FMSVRFX0VSUk9SOworICAg
IH0KKworICAgIHJldHVybiBTUUxJVEVfT0s7Cit9CisKKy8vIFR1cm5zIGEgcmVsYXRpdmUgcGF0
aG5hbWUgaW50byBhIGZ1bGwgcGF0aG5hbWUuCisvLworLy8gdmZzIC0gcG9pbnRlciB0byB0aGUg
c3FsaXRlM192ZnMgb2JqZWN0LgorLy8gcmVsYXRpdmVQYXRoIC0gdGhlIHJlbGF0aXZlIHBhdGgu
CisvLyBidWZTaXplIC0gdGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIgaW4gYnl0ZXMuCisv
LyBhYnNvbHV0ZVBhdGggLSB0aGUgb3V0cHV0IGJ1ZmZlciB3aGVyZSB0aGUgYWJzb2x1dGUgcGF0
aCB3aWxsIGJlIHN0b3JlZC4KK2ludCBjaHJvbWl1bUZ1bGxQYXRobmFtZShzcWxpdGUzX3Zmcyog
dmZzLCBjb25zdCBjaGFyKiByZWxhdGl2ZVBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGJ1ZlNpemUsIGNoYXIqIGFic29sdXRlUGF0aCkKK3sKKyAgICAvLyBUaGUgcmVuZGVyZXIg
cHJvY2VzcyBkb2Vzbid0IG5lZWQgdG8ga25vdyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZmls
ZQorICAgIHNxbGl0ZTNfc25wcmludGYodmZzLT5teFBhdGhuYW1lLCBhYnNvbHV0ZVBhdGgsICIl
cyIsIHJlbGF0aXZlUGF0aCk7CisgICAgcmV0dXJuIFNRTElURV9PSzsKK30KKworI2lmbmRlZiBT
UUxJVEVfT01JVF9MT0FEX0VYVEVOU0lPTgorLy8gUmV0dXJucyBOVUxMLCB0aHVzIGRpc2FsbG93
aW5nIGxvYWRpbmcgbGlicmFyaWVzIGluIHRoZSByZW5kZXJlciBwcm9jZXNzLgorLy8KKy8vIHZm
cyAtIHBvaW50ZXIgdG8gdGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KKy8vIGZpbGVOYW1lIC0gdGhl
IG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IGZpbGUuCit2b2lkKiBjaHJvbWl1bURsT3Blbihz
cWxpdGUzX3ZmcyogdmZzLCBjb25zdCBjaGFyKiBmaWxlTmFtZSkKK3sKKyAgICByZXR1cm4gMDsK
K30KKyNlbHNlCisjZGVmaW5lIGNocm9taXVtRGxPcGVuIDAKKyNlbmRpZiAvLyBTUUxJVEVfT01J
VF9MT0FEX0VYVEVOU0lPTgorCit9IC8vIG5hbWVzcGFjZQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3ZvaWQgU1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKQoreworICAgIHNx
bGl0ZTNfdmZzKiB3aW4zMl92ZnMgPSBzcWxpdGUzX3Zmc19maW5kKCJ3aW4zMiIpOworICAgIHN0
YXRpYyBzcWxpdGUzX3ZmcyBjaHJvbWl1bV92ZnMgPSB7CisgICAgICAgIDEsCisgICAgICAgIHdp
bjMyX3Zmcy0+c3pPc0ZpbGUsCisgICAgICAgIHdpbjMyX3Zmcy0+bXhQYXRobmFtZSwKKyAgICAg
ICAgMCwKKyAgICAgICAgImNocm9taXVtX3ZmcyIsCisgICAgICAgIDAsCisgICAgICAgIGNocm9t
aXVtT3BlbiwKKyAgICAgICAgY2hyb21pdW1EZWxldGUsCisgICAgICAgIGNocm9taXVtQWNjZXNz
LAorICAgICAgICBjaHJvbWl1bUZ1bGxQYXRobmFtZSwKKyAgICAgICAgY2hyb21pdW1EbE9wZW4s
CisgICAgICAgIHdpbjMyX3Zmcy0+eERsRXJyb3IsCisgICAgICAgIHdpbjMyX3Zmcy0+eERsU3lt
LAorICAgICAgICB3aW4zMl92ZnMtPnhEbENsb3NlLAorICAgICAgICB3aW4zMl92ZnMtPnhSYW5k
b21uZXNzLAorICAgICAgICB3aW4zMl92ZnMtPnhTbGVlcCwKKyAgICAgICAgd2luMzJfdmZzLT54
Q3VycmVudFRpbWUsCisgICAgICAgIHdpbjMyX3Zmcy0+eEdldExhc3RFcnJvcgorICAgIH07Cisg
ICAgc3FsaXRlM192ZnNfcmVnaXN0ZXIoJmNocm9taXVtX3ZmcywgMSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="16906"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32482</attachid>
            <date>2009-07-08 16:00:13 -0700</date>
            <delta_ts>2009-07-09 18:30:34 -0700</delta_ts>
            <desc>win patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>12785</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTY0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMDctMDggIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgdGhlIFdpbiBTUUxpdGUgVkZTIGltcGxlbWVudGF0aW9uIGZvciBDaHJvbWl1bS4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NDAK
KworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vc3FsL2Nocm9taXVtOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
Y2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtLmNwcDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5jcHA6IEFk
ZGVkLgorCiAyMDA5LTA3LTA4ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaAkocmV2aXNpb24gNDU2NDEpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNpZm5kZWYgQ2hyb21pdW1CcmlkZ2VfaAogI2RlZmluZSBDaHJvbWl1
bUJyaWRnZV9oCiAKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiTGlua0hhc2gu
aCIKICNpbmNsdWRlICJQYXNzUmVmUHRyLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZFByaXZhdGUu
aCIKQEAgLTE3Nyw2ICsxNzgsMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBX
aWRnZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogICAgICAgICBzdGF0aWMgdm9pZCB3aWRnZXRTZXRDdXJzb3IoV2lkZ2V0Kiwg
Y29uc3QgQ3Vyc29yJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdpZGdldFNldEZvY3VzKFdpZGdl
dCopOworCisgICAgICAgIC8vIEhUTUw1IERCIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgLy8gT3BlbnMgYSBkYXRh
YmFzZSBmaWxlCisgICAgICAgIC8vICdkZXNpcmVkRmxhZ3MnIGlzIGEgY29sbGVjdGlvbiBvZiBP
UidkIFNRTGl0ZSBjb25zdGFudHMgdGhhdAorICAgICAgICAvLyBkZXRlcm1pbmUgaG93IHRoZSBm
aWxlIHNob3VsZCBiZSBvcGVuZWQKKyAgICAgICAgc3RhdGljIFBsYXRmb3JtRmlsZUhhbmRsZSBk
YXRhYmFzZU9wZW5GaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBkZXNpcmVkRmxhZ3Mp
OworCisgICAgICAgIC8vIERlbGV0ZXMgYSBkYXRhYmFzZSBmaWxlCisgICAgICAgIC8vIFJldHVy
bnMgJ3RydWUnIGlmIHRoZSBmaWxlIHdhcyBkZWxldGVkOyAnZmFsc2UnIG90aGVyd2lzZQorICAg
ICAgICBzdGF0aWMgYm9vbCBkYXRhYmFzZURlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSk7CisKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgZmlsZSBhdHRyaWJ1dGVzIG9mIHRoZSBnaXZl
biBkYXRhYmFzZSBmaWxlCisgICAgICAgIHN0YXRpYyBsb25nIGRhdGFiYXNlR2V0RmlsZUF0dHJp
YnV0ZXMoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisKKyAgICAgICAgLy8gUmV0dXJucyBzaXpl
IG9mIHRoZSBnaXZlbiBmaWxlCisgICAgICAgIHN0YXRpYyBsb25nIGxvbmcgZGF0YWJhc2VHZXRG
aWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxl
U3lzdGVtQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL2No
cm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTUUxpdGVGaWxlU3lzdGVtLmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiU1FM
aXRlRGF0YWJhc2UuaCIKKyNpbmNsdWRlIDxzcWxpdGUzLmg+CisKKyNpZm5kZWYgU1FMSVRFX09Q
RU5fRlVMTE1VVEVYCisjZGVmaW5lIFNRTElURV9PUEVOX0ZVTExNVVRFWCAweDAwMDEwMDAwCisj
ZW5kaWYKKworLy8gU1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKSBpcyBpbXBs
ZW1lbnRlZCBpbiB0aGUKKy8vIHBsYXRmb3JtLXNwZWNpZmljIGZpbGVzIFNRTGl0ZUZpbGVTeXN0
ZW1DaHJvbWl1bXtXaW58UG9zaXh9LmNwcAorbmFtZXNwYWNlIFdlYkNvcmUgeworCitTUUxpdGVG
aWxlU3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKCkKK3sKK30KKworaW50IFNRTGl0ZUZpbGVTeXN0
ZW06Om9wZW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBzcWxpdGUzKiogZGF0YWJh
c2UpCit7CisgICAgLy8gb3BlbiBkYXRhYmFzZXMgdXNpbmcgQ2hyb21pdW0ncyBWRlMKKyAgICBy
ZXR1cm4gc3FsaXRlM19vcGVuX3YyKGZpbGVOYW1lLnV0ZjgoKS5kYXRhKCksIGRhdGFiYXNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU1FMSVRFX09QRU5fUkVBRFdSSVRFIHwgU1FMSVRF
X09QRU5fQ1JFQVRFIHwgU1FMSVRFX09QRU5fRlVMTE1VVEVYLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImNocm9taXVtX3ZmcyIpOworfQorCitTdHJpbmcgU1FMaXRlRmlsZVN5c3RlbTo6
Z2V0RmlsZU5hbWVGb3JOZXdEYXRhYmFzZSgKKyAgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBkYk5hbWUsIGNvbnN0IFN0cmluZyAmb3JpZ2luSWRlbnRpZmllciwgU1FMaXRlRGF0YWJhc2Uq
KQoreworICAgIC8vIENocm9taXVtIG5hbWVzIERCIGZpbGVzIGJhc2VkIG9uIG9yaWdpbiBhbmQg
REIgbmFtZSBvbmx5CisgICAgcmV0dXJuIG9yaWdpbklkZW50aWZpZXIgKyAiXyIgKyBkYk5hbWUg
KyAiLmRiIjsKK30KKworU3RyaW5nIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmls
ZU5hbWVUb1BhdGgoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQor
eworICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZpbGVOYW1lOworICAg
IGVsc2UKKyAgICAgICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoLCBmaWxl
TmFtZSk7Cit9CisKK2Jvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3Rv
cnlFeGlzdHMoY29uc3QgU3RyaW5nJikKK3sKKyAgICAvLyBpZiB0aGUgZGlyZWN0b3J5IHdoZXJl
IENocm9taXVtIHN0b3JlcyB0aGUgZGF0YWJhc2VzIGRvZXMgbm90IGV4aXN0LAorICAgIC8vIGl0
IHdpbGwgYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIGJ5IHRoZSBicm93c2VyIHByb2Nlc3M7Cisg
ICAgLy8gc28gYXMgZmFyIGFzIHRoZSBXZWJLaXQgY29kZSBpcyBjb25jZXJuZWQsIHRoaXMgZGly
ZWN0b3J5IGFsd2F5cyBleGlzdHMKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTUUxpdGVG
aWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiwgYm9vbCkK
K3sKKyAgICAvLyBhbGwgZGF0YWJhc2UgZGlyZWN0b3JpZXMgd2lsbCBiZSBjcmVhdGVkIGFzIG5l
ZWRlZCBieSB0aGUgYnJvd3NlciBwcm9jZXNzCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShjb25zdCBTdHJp
bmcmKQoreworICAgIC8vIENocm9taXVtIGRvZXMgbm90IHVzZSBhIHNlcGFyYXRlIGRpcmVjdG9y
eSBmb3IgZWFjaCBkYXRhYmFzZSwKKyAgICAvLyBzbyB0aGVyZSdzIG5vdGhpbmcgdG8gZG8gaGVy
ZQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURh
dGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQoreworICAgIC8vIHJldHVybiB0cnVl
IGlmIGFuZCBvbmx5IGlmIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5CisgICAgLy8gQ2hyb21p
dW1CcmlkZ2U6OmRlbGV0ZURhdGFiYXNlKCkgaXMgMAorICAgIHJldHVybiAoIUNocm9taXVtQnJp
ZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUoZmlsZU5hbWUpKTsKK30KKworbG9uZyBsb25nIFNRTGl0
ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkK
K3sKKyAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZVNpemUoZmlsZU5h
bWUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1
bVdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9T
UUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCisK
KyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgPHNxbGl0ZTMuaD4KKyNpbmNs
dWRlIDx3aW5kb3dzLmg+CisKKy8vIERlZmluZWQgaW4gQ2hyb21pdW0ncyBjb2RlYmFzZSBpbiB0
aGlyZF9wYXJ0eS9zcWxpdGUvc3JjL29zX3dpbi5jCitleHRlcm4gIkMiIHsKK2ludCBjaHJvbWl1
bV9zcWxpdGUzX2luaXRpYWxpemVfd2luX3NxbGl0ZTNfZmlsZShzcWxpdGUzX2ZpbGUqIGZpbGUs
IEhBTkRMRSBoYW5kbGUpOworfQorCisvLyBDaHJvbWl1bSdzIFdpbmRvd3MgaW1wbGVtZW50YXRp
b24gb2YgU1FMaXRlIFZGUworbmFtZXNwYWNlIHsKKworLy8gT3BlbnMgYSBmaWxlLgorLy8KKy8v
IHZmcyAtIHBvaW50ZXIgdG8gdGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KKy8vIGZpbGVOYW1lIC0g
dGhlIG5hbWUgb2YgdGhlIGZpbGUuCisvLyBpZCAtIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3aWxsIG1h
bmlwdWxhdGUgdGhlIG5ld2x5IG9wZW5lZCBmaWxlLgorLy8gZGVzaXJlZEZsYWdzIC0gdGhlIGRl
c2lyZWQgb3BlbiBtb2RlIGZsYWdzLgorLy8gdXNlZEZsYWdzIC0gdGhlIGFjdHVhbCBvcGVuIG1v
ZGUgZmxhZ3MgdGhhdCB3ZXJlIHVzZWQuCitpbnQgY2hyb21pdW1PcGVuKHNxbGl0ZTNfdmZzKiwg
Y29uc3QgY2hhciogZmlsZU5hbWUsCisgICAgICAgICAgICAgICAgIHNxbGl0ZTNfZmlsZSogaWQs
IGludCBkZXNpcmVkRmxhZ3MsIGludCogdXNlZEZsYWdzKQoreworICAgIEhBTkRMRSBoID0gV2Vi
Q29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlT3BlbkZpbGUoZmlsZU5hbWUsIGRlc2lyZWRG
bGFncyk7CisgICAgaWYgKGggPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgaWYg
KGRlc2lyZWRGbGFncyAmIFNRTElURV9PUEVOX1JFQURXUklURSkgeworICAgICAgICAgICAgaW50
IG5ld0ZsYWdzID0gKGRlc2lyZWRGbGFncyB8IFNRTElURV9PUEVOX1JFQURPTkxZKSAmIH5TUUxJ
VEVfT1BFTl9SRUFEV1JJVEU7CisgICAgICAgICAgICByZXR1cm4gY2hyb21pdW1PcGVuKDAsIGZp
bGVOYW1lLCBpZCwgbmV3RmxhZ3MsIHVzZWRGbGFncyk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgcmV0dXJuIFNRTElURV9DQU5UT1BFTjsKKyAgICB9CisgICAgaWYgKHVzZWRGbGFncykg
eworICAgICAgICBpZiAoZGVzaXJlZEZsYWdzICYgU1FMSVRFX09QRU5fUkVBRFdSSVRFKQorICAg
ICAgICAgICAgKnVzZWRGbGFncyA9IFNRTElURV9PUEVOX1JFQURXUklURTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgKnVzZWRGbGFncyA9IFNRTElURV9PUEVOX1JFQURPTkxZOworICAgIH0K
KworICAgIGNocm9taXVtX3NxbGl0ZTNfaW5pdGlhbGl6ZV93aW5fc3FsaXRlM19maWxlKGlkLCBo
KTsKKyAgICByZXR1cm4gU1FMSVRFX09LOworfQorCisvLyBEZWxldGVzIHRoZSBnaXZlbiBmaWxl
LgorLy8KKy8vIHZmcyAtIHBvaW50ZXIgdG8gdGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KKy8vIGZp
bGVOYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisvLyBzeW5jRGlyIC0gZGV0ZXJtaW5lcyBp
ZiB0aGUgZGlyZWN0b3J5IHRvIHdoaWNoIHRoaXMgZmlsZSBiZWxvbmdzCisvLyAgICAgICAgICAg
c2hvdWxkIGJlIHN5bmNoZWQgYWZ0ZXIgdGhlIGZpbGUgaXMgZGVsZXRlZC4KK2ludCBjaHJvbWl1
bURlbGV0ZShzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBpbnQpCit7CisgICAg
Ym9vbCBkZWxldGVkID0gV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlRGVsZXRlRmls
ZShmaWxlTmFtZSk7CisgICAgRFdPUkQgcmMgPSBXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6ZGF0
YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhmaWxlTmFtZSk7CisgICAgcmV0dXJuICgocmMgPT0gSU5W
QUxJRF9GSUxFX0FUVFJJQlVURVMpICYmIGRlbGV0ZWQgPworICAgICAgICAgICAgU1FMSVRFX09L
IDogU1FMSVRFX0lPRVJSX0RFTEVURSk7Cit9CisKKy8vIENoZWNrIHRoZSBleGlzdGFuY2UgYW5k
IHN0YXR1cyBvZiB0aGUgZ2l2ZW4gZmlsZS4KKy8vCisvLyB2ZnMgLSBwb2ludGVyIHRvIHRoZSBz
cWxpdGUzX3ZmcyBvYmplY3QuCisvLyBmaWxlTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgor
Ly8gZmxhZyAtIHRoZSB0eXBlIG9mIHRlc3QgdG8gbWFrZSBvbiB0aGlzIGZpbGUuCisvLyByZXMg
LSB0aGUgcmVzdWx0LgoraW50IGNocm9taXVtQWNjZXNzKHNxbGl0ZTNfdmZzKiwgY29uc3QgY2hh
ciogZmlsZU5hbWUsIGludCBmbGFnLCBpbnQqIHJlcykKK3sKKyAgICBEV09SRCBhdHRyID0gV2Vi
Q29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMoZmlsZU5hbWUp
OworICAgIHN3aXRjaCAoZmxhZykgeworICAgIGNhc2UgU1FMSVRFX0FDQ0VTU19SRUFEOgorICAg
IGNhc2UgU1FMSVRFX0FDQ0VTU19FWElTVFM6CisgICAgICAgICpyZXMgPSAoYXR0ciAhPSBJTlZB
TElEX0ZJTEVfQVRUUklCVVRFUyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1FMSVRFX0FD
Q0VTU19SRUFEV1JJVEU6CisgICAgICAgICpyZXMgPSAoKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9S
RUFET05MWSkgPT0gMCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBTUUxJVEVfRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIFNRTElURV9PSzsKK30KKwor
Ly8gVHVybnMgYSByZWxhdGl2ZSBwYXRobmFtZSBpbnRvIGEgZnVsbCBwYXRobmFtZS4KKy8vCisv
LyB2ZnMgLSBwb2ludGVyIHRvIHRoZSBzcWxpdGUzX3ZmcyBvYmplY3QuCisvLyByZWxhdGl2ZVBh
dGggLSB0aGUgcmVsYXRpdmUgcGF0aC4KKy8vIGJ1ZlNpemUgLSB0aGUgc2l6ZSBvZiB0aGUgb3V0
cHV0IGJ1ZmZlciBpbiBieXRlcy4KKy8vIGFic29sdXRlUGF0aCAtIHRoZSBvdXRwdXQgYnVmZmVy
IHdoZXJlIHRoZSBhYnNvbHV0ZSBwYXRoIHdpbGwgYmUgc3RvcmVkLgoraW50IGNocm9taXVtRnVs
bFBhdGhuYW1lKHNxbGl0ZTNfdmZzKiB2ZnMsIGNvbnN0IGNoYXIqIHJlbGF0aXZlUGF0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGNoYXIqIGFic29sdXRlUGF0aCkKK3sKKyAgICAv
LyBUaGUgcmVuZGVyZXIgcHJvY2VzcyBkb2Vzbid0IG5lZWQgdG8ga25vdyB0aGUgYWJzb2x1dGUg
cGF0aCBvZiB0aGUgZmlsZQorICAgIHNxbGl0ZTNfc25wcmludGYodmZzLT5teFBhdGhuYW1lLCBh
YnNvbHV0ZVBhdGgsICIlcyIsIHJlbGF0aXZlUGF0aCk7CisgICAgcmV0dXJuIFNRTElURV9PSzsK
K30KKworI2lmbmRlZiBTUUxJVEVfT01JVF9MT0FEX0VYVEVOU0lPTgorLy8gUmV0dXJucyBOVUxM
LCB0aHVzIGRpc2FsbG93aW5nIGxvYWRpbmcgbGlicmFyaWVzIGluIHRoZSByZW5kZXJlciBwcm9j
ZXNzLgorLy8KKy8vIHZmcyAtIHBvaW50ZXIgdG8gdGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KKy8v
IGZpbGVOYW1lIC0gdGhlIG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IGZpbGUuCit2b2lkKiBj
aHJvbWl1bURsT3BlbihzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYXIqKQoreworICAgIHJldHVybiAw
OworfQorI2Vsc2UKKyNkZWZpbmUgY2hyb21pdW1EbE9wZW4gMAorI2VuZGlmIC8vIFNRTElURV9P
TUlUX0xPQURfRVhURU5TSU9OCisKK30gLy8gbmFtZXNwYWNlCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordm9pZCBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpCit7CisgICAg
c3FsaXRlM192ZnMqIHdpbjMyX3ZmcyA9IHNxbGl0ZTNfdmZzX2ZpbmQoIndpbjMyIik7CisgICAg
c3RhdGljIHNxbGl0ZTNfdmZzIGNocm9taXVtX3ZmcyA9IHsKKyAgICAgICAgMSwKKyAgICAgICAg
d2luMzJfdmZzLT5zek9zRmlsZSwKKyAgICAgICAgd2luMzJfdmZzLT5teFBhdGhuYW1lLAorICAg
ICAgICAwLAorICAgICAgICAiY2hyb21pdW1fdmZzIiwKKyAgICAgICAgMCwKKyAgICAgICAgY2hy
b21pdW1PcGVuLAorICAgICAgICBjaHJvbWl1bURlbGV0ZSwKKyAgICAgICAgY2hyb21pdW1BY2Nl
c3MsCisgICAgICAgIGNocm9taXVtRnVsbFBhdGhuYW1lLAorICAgICAgICBjaHJvbWl1bURsT3Bl
biwKKyAgICAgICAgd2luMzJfdmZzLT54RGxFcnJvciwKKyAgICAgICAgd2luMzJfdmZzLT54RGxT
eW0sCisgICAgICAgIHdpbjMyX3Zmcy0+eERsQ2xvc2UsCisgICAgICAgIHdpbjMyX3Zmcy0+eFJh
bmRvbW5lc3MsCisgICAgICAgIHdpbjMyX3Zmcy0+eFNsZWVwLAorICAgICAgICB3aW4zMl92ZnMt
PnhDdXJyZW50VGltZSwKKyAgICAgICAgd2luMzJfdmZzLT54R2V0TGFzdEVycm9yCisgICAgfTsK
KyAgICBzcWxpdGUzX3Zmc19yZWdpc3RlcigmY2hyb21pdW1fdmZzLCAxKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="16909"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32546</attachid>
            <date>2009-07-09 18:30:34 -0700</date>
            <delta_ts>2009-07-10 15:57:53 -0700</delta_ts>
            <desc>win patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>12867</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTY0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMDctMDggIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgdGhlIFdpbiBTUUxpdGUgVkZTIGltcGxlbWVudGF0aW9uIGZvciBDaHJvbWl1bS4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NDAK
KworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vc3FsL2Nocm9taXVtOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
Y2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtLmNwcDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5jcHA6IEFk
ZGVkLgorCiAyMDA5LTA3LTA4ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaAkocmV2aXNpb24gNDU2NDEpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNpZm5kZWYgQ2hyb21pdW1CcmlkZ2VfaAogI2RlZmluZSBDaHJvbWl1
bUJyaWRnZV9oCiAKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiTGlua0hhc2gu
aCIKICNpbmNsdWRlICJQYXNzUmVmUHRyLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZFByaXZhdGUu
aCIKQEAgLTE3Nyw2ICsxNzgsMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBX
aWRnZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogICAgICAgICBzdGF0aWMgdm9pZCB3aWRnZXRTZXRDdXJzb3IoV2lkZ2V0Kiwg
Y29uc3QgQ3Vyc29yJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdpZGdldFNldEZvY3VzKFdpZGdl
dCopOworCisgICAgICAgIC8vIEhUTUw1IERCIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgLy8gT3BlbnMgYSBkYXRh
YmFzZSBmaWxlCisgICAgICAgIC8vICdkZXNpcmVkRmxhZ3MnIGlzIGEgY29sbGVjdGlvbiBvZiBP
UidkIFNRTGl0ZSBjb25zdGFudHMgdGhhdAorICAgICAgICAvLyBkZXRlcm1pbmUgaG93IHRoZSBm
aWxlIHNob3VsZCBiZSBvcGVuZWQKKyAgICAgICAgc3RhdGljIFBsYXRmb3JtRmlsZUhhbmRsZSBk
YXRhYmFzZU9wZW5GaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBkZXNpcmVkRmxhZ3Mp
OworCisgICAgICAgIC8vIERlbGV0ZXMgYSBkYXRhYmFzZSBmaWxlCisgICAgICAgIC8vIFJldHVy
bnMgJ3RydWUnIGlmIHRoZSBmaWxlIHdhcyBkZWxldGVkOyAnZmFsc2UnIG90aGVyd2lzZQorICAg
ICAgICBzdGF0aWMgYm9vbCBkYXRhYmFzZURlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSk7CisKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgZmlsZSBhdHRyaWJ1dGVzIG9mIHRoZSBnaXZl
biBkYXRhYmFzZSBmaWxlCisgICAgICAgIHN0YXRpYyBsb25nIGRhdGFiYXNlR2V0RmlsZUF0dHJp
YnV0ZXMoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisKKyAgICAgICAgLy8gUmV0dXJucyBzaXpl
IG9mIHRoZSBnaXZlbiBmaWxlCisgICAgICAgIHN0YXRpYyBsb25nIGxvbmcgZGF0YWJhc2VHZXRG
aWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxl
U3lzdGVtQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL2No
cm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTUUxpdGVGaWxlU3lzdGVtLmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUg
PHNxbGl0ZTMuaD4KKworI2lmbmRlZiBTUUxJVEVfT1BFTl9GVUxMTVVURVgKKyNkZWZpbmUgU1FM
SVRFX09QRU5fRlVMTE1VVEVYIDB4MDAwMTAwMDAKKyNlbmRpZgorCisvLyBTUUxpdGVGaWxlU3lz
dGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpIGlzIGltcGxlbWVudGVkIGluIHRoZQorLy8gcGxhdGZv
cm0tc3BlY2lmaWMgZmlsZXMgU1FMaXRlRmlsZVN5c3RlbUNocm9taXVte1dpbnxQb3NpeH0uY3Bw
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NRTGl0ZUZpbGVTeXN0ZW06OlNRTGl0ZUZpbGVTeXN0
ZW0oKQoreworfQorCitpbnQgU1FMaXRlRmlsZVN5c3RlbTo6b3BlbkRhdGFiYXNlKGNvbnN0IFN0
cmluZyYgZmlsZU5hbWUsIHNxbGl0ZTMqKiBkYXRhYmFzZSkKK3sKKyAgICAvLyBvcGVuIGRhdGFi
YXNlcyB1c2luZyBDaHJvbWl1bSdzIFZGUworICAgIHJldHVybiBzcWxpdGUzX29wZW5fdjIoZmls
ZU5hbWUudXRmOCgpLmRhdGEoKSwgZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTUUxJVEVfT1BFTl9SRUFEV1JJVEUgfCBTUUxJVEVfT1BFTl9DUkVBVEUgfCBTUUxJVEVfT1BF
Tl9GVUxMTVVURVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hyb21pdW1fdmZzIik7
Cit9CisKK1N0cmluZyBTUUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNl
KAorICBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGRiTmFtZSwgY29uc3QgU3RyaW5nICZv
cmlnaW5JZGVudGlmaWVyLCBTUUxpdGVEYXRhYmFzZSopCit7CisgICAgLy8gQ2hyb21pdW0gbmFt
ZXMgREIgZmlsZXMgYmFzZWQgb24gb3JpZ2luIGFuZCBEQiBuYW1lIG9ubHkKKyAgICByZXR1cm4g
b3JpZ2luSWRlbnRpZmllciArICJfIiArIGRiTmFtZSArICIuZGIiOworfQorCitTdHJpbmcgU1FM
aXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQoreworICAgIC8vIENocm9taXVtIHNhdmVzIGFsbCBE
QiBmaWxlcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgKGtub3duIGJ5CisgICAgLy8gdGhlIGJyb3dz
ZXIgcHJvY2VzcyBvbmx5KTsgYXMgZmFyIGFzIHRoZSByZW5kZXJlciBwcm9jZXNzZXMKKyAgICAv
LyBhcmUgY29uY2VybmVkLCBhbGwgREIgZmlsZXMgYXJlIHNhdmVkIGluIHRoZSAiY3VycmVudCIg
ZGlyZWN0b3J5CisgICAgcmV0dXJuIGZpbGVOYW1lOworfQorCitib29sIFNRTGl0ZUZpbGVTeXN0
ZW06OmVuc3VyZURhdGFiYXNlRGlyZWN0b3J5RXhpc3RzKGNvbnN0IFN0cmluZyYpCit7CisgICAg
Ly8gaWYgdGhlIGRpcmVjdG9yeSB3aGVyZSBDaHJvbWl1bSBzdG9yZXMgdGhlIGRhdGFiYXNlcyBk
b2VzIG5vdCBleGlzdCwKKyAgICAvLyBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBi
eSB0aGUgYnJvd3NlciBwcm9jZXNzOworICAgIC8vIHNvIGFzIGZhciBhcyB0aGUgV2ViS2l0IGNv
ZGUgaXMgY29uY2VybmVkLCB0aGlzIGRpcmVjdG9yeSBhbHdheXMgZXhpc3RzCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhp
c3RzKGNvbnN0IFN0cmluZyYsIGJvb2wpCit7CisgICAgLy8gYWxsIGRhdGFiYXNlIGRpcmVjdG9y
aWVzIHdpbGwgYmUgY3JlYXRlZCBhcyBuZWVkZWQgYnkgdGhlIGJyb3dzZXIgcHJvY2VzcworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0
YWJhc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJikKK3sKKyAgICAvLyBDaHJvbWl1bSBkb2VzIG5v
dCB1c2UgYSBzZXBhcmF0ZSBkaXJlY3RvcnkgZm9yIGVhY2ggZGF0YWJhc2UsCisgICAgLy8gc28g
dGhlcmUncyBub3RoaW5nIHRvIGRvIGhlcmUKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBT
UUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSkKK3sKKyAgICAvLyByZXR1cm4gdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZXJyb3IgY29kZSBy
ZXR1cm5lZCBieQorICAgIC8vIENocm9taXVtQnJpZGdlOjpkZWxldGVEYXRhYmFzZSgpIGlzIDAK
KyAgICByZXR1cm4gKCFDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGZpbGVOYW1l
KSk7Cit9CisKK2xvbmcgbG9uZyBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXpl
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCit7CisgICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpk
YXRhYmFzZUdldEZpbGVTaXplKGZpbGVOYW1lKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNo
cm9taXVtV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1
bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtV2luLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgorCisjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNp
bmNsdWRlIDxzcWxpdGUzLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorCisvLyBEZWZpbmVkIGlu
IENocm9taXVtJ3MgY29kZWJhc2UgaW4gdGhpcmRfcGFydHkvc3FsaXRlL3NyYy9vc193aW4uYwor
ZXh0ZXJuICJDIiB7CitpbnQgY2hyb21pdW1fc3FsaXRlM19pbml0aWFsaXplX3dpbl9zcWxpdGUz
X2ZpbGUoc3FsaXRlM19maWxlKiBmaWxlLCBIQU5ETEUgaGFuZGxlKTsKK30KKworLy8gQ2hyb21p
dW0ncyBXaW5kb3dzIGltcGxlbWVudGF0aW9uIG9mIFNRTGl0ZSBWRlMKK25hbWVzcGFjZSB7CisK
Ky8vIE9wZW5zIGEgZmlsZS4KKy8vCisvLyB2ZnMgLSBwb2ludGVyIHRvIHRoZSBzcWxpdGUzX3Zm
cyBvYmplY3QuCisvLyBmaWxlTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorLy8gaWQgLSB0
aGUgc3RydWN0dXJlIHRoYXQgd2lsbCBtYW5pcHVsYXRlIHRoZSBuZXdseSBvcGVuZWQgZmlsZS4K
Ky8vIGRlc2lyZWRGbGFncyAtIHRoZSBkZXNpcmVkIG9wZW4gbW9kZSBmbGFncy4KKy8vIHVzZWRG
bGFncyAtIHRoZSBhY3R1YWwgb3BlbiBtb2RlIGZsYWdzIHRoYXQgd2VyZSB1c2VkLgoraW50IGNo
cm9taXVtT3BlbihzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYXIqIGZpbGVOYW1lLAorICAgICAgICAg
ICAgICAgICBzcWxpdGUzX2ZpbGUqIGlkLCBpbnQgZGVzaXJlZEZsYWdzLCBpbnQqIHVzZWRGbGFn
cykKK3sKKyAgICBIQU5ETEUgaCA9IFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjpkYXRhYmFzZU9w
ZW5GaWxlKGZpbGVOYW1lLCBkZXNpcmVkRmxhZ3MpOworICAgIGlmIChoID09IElOVkFMSURfSEFO
RExFX1ZBTFVFKSB7CisgICAgICAgIGlmIChkZXNpcmVkRmxhZ3MgJiBTUUxJVEVfT1BFTl9SRUFE
V1JJVEUpIHsKKyAgICAgICAgICAgIGludCBuZXdGbGFncyA9IChkZXNpcmVkRmxhZ3MgfCBTUUxJ
VEVfT1BFTl9SRUFET05MWSkgJiB+U1FMSVRFX09QRU5fUkVBRFdSSVRFOworICAgICAgICAgICAg
cmV0dXJuIGNocm9taXVtT3BlbigwLCBmaWxlTmFtZSwgaWQsIG5ld0ZsYWdzLCB1c2VkRmxhZ3Mp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBTUUxJVEVfQ0FOVE9QRU47Cisg
ICAgfQorICAgIGlmICh1c2VkRmxhZ3MpIHsKKyAgICAgICAgaWYgKGRlc2lyZWRGbGFncyAmIFNR
TElURV9PUEVOX1JFQURXUklURSkKKyAgICAgICAgICAgICp1c2VkRmxhZ3MgPSBTUUxJVEVfT1BF
Tl9SRUFEV1JJVEU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICp1c2VkRmxhZ3MgPSBTUUxJ
VEVfT1BFTl9SRUFET05MWTsKKyAgICB9CisKKyAgICBjaHJvbWl1bV9zcWxpdGUzX2luaXRpYWxp
emVfd2luX3NxbGl0ZTNfZmlsZShpZCwgaCk7CisgICAgcmV0dXJuIFNRTElURV9PSzsKK30KKwor
Ly8gRGVsZXRlcyB0aGUgZ2l2ZW4gZmlsZS4KKy8vCisvLyB2ZnMgLSBwb2ludGVyIHRvIHRoZSBz
cWxpdGUzX3ZmcyBvYmplY3QuCisvLyBmaWxlTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgor
Ly8gc3luY0RpciAtIGRldGVybWluZXMgaWYgdGhlIGRpcmVjdG9yeSB0byB3aGljaCB0aGlzIGZp
bGUgYmVsb25ncworLy8gICAgICAgICAgIHNob3VsZCBiZSBzeW5jaGVkIGFmdGVyIHRoZSBmaWxl
IGlzIGRlbGV0ZWQuCitpbnQgY2hyb21pdW1EZWxldGUoc3FsaXRlM192ZnMqLCBjb25zdCBjaGFy
KiBmaWxlTmFtZSwgaW50KQoreworICAgIGJvb2wgZGVsZXRlZCA9IFdlYkNvcmU6OkNocm9taXVt
QnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUoZmlsZU5hbWUpOworICAgIERXT1JEIHJjID0gV2Vi
Q29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMoZmlsZU5hbWUp
OworICAgIHJldHVybiAoKHJjID09IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKSAmJiBkZWxldGVk
ID8KKyAgICAgICAgICAgIFNRTElURV9PSyA6IFNRTElURV9JT0VSUl9ERUxFVEUpOworfQorCisv
LyBDaGVjayB0aGUgZXhpc3RhbmNlIGFuZCBzdGF0dXMgb2YgdGhlIGdpdmVuIGZpbGUuCisvLwor
Ly8gdmZzIC0gcG9pbnRlciB0byB0aGUgc3FsaXRlM192ZnMgb2JqZWN0LgorLy8gZmlsZU5hbWUg
LSB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKy8vIGZsYWcgLSB0aGUgdHlwZSBvZiB0ZXN0IHRvIG1h
a2Ugb24gdGhpcyBmaWxlLgorLy8gcmVzIC0gdGhlIHJlc3VsdC4KK2ludCBjaHJvbWl1bUFjY2Vz
cyhzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBpbnQgZmxhZywgaW50KiByZXMp
Cit7CisgICAgRFdPUkQgYXR0ciA9IFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjpkYXRhYmFzZUdl
dEZpbGVBdHRyaWJ1dGVzKGZpbGVOYW1lKTsKKyAgICBzd2l0Y2ggKGZsYWcpIHsKKyAgICBjYXNl
IFNRTElURV9BQ0NFU1NfUkVBRDoKKyAgICBjYXNlIFNRTElURV9BQ0NFU1NfRVhJU1RTOgorICAg
ICAgICAqcmVzID0gKGF0dHIgIT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFNRTElURV9BQ0NFU1NfUkVBRFdSSVRFOgorICAgICAgICAqcmVzID0g
KChhdHRyICYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpID09IDApOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gU1FMSVRFX0VSUk9SOworICAgIH0KKworICAg
IHJldHVybiBTUUxJVEVfT0s7Cit9CisKKy8vIFR1cm5zIGEgcmVsYXRpdmUgcGF0aG5hbWUgaW50
byBhIGZ1bGwgcGF0aG5hbWUuCisvLworLy8gdmZzIC0gcG9pbnRlciB0byB0aGUgc3FsaXRlM192
ZnMgb2JqZWN0LgorLy8gcmVsYXRpdmVQYXRoIC0gdGhlIHJlbGF0aXZlIHBhdGguCisvLyBidWZT
aXplIC0gdGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIgaW4gYnl0ZXMuCisvLyBhYnNvbHV0
ZVBhdGggLSB0aGUgb3V0cHV0IGJ1ZmZlciB3aGVyZSB0aGUgYWJzb2x1dGUgcGF0aCB3aWxsIGJl
IHN0b3JlZC4KK2ludCBjaHJvbWl1bUZ1bGxQYXRobmFtZShzcWxpdGUzX3ZmcyogdmZzLCBjb25z
dCBjaGFyKiByZWxhdGl2ZVBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBjaGFy
KiBhYnNvbHV0ZVBhdGgpCit7CisgICAgLy8gVGhlIHJlbmRlcmVyIHByb2Nlc3MgZG9lc24ndCBu
ZWVkIHRvIGtub3cgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGZpbGUKKyAgICBzcWxpdGUzX3Nu
cHJpbnRmKHZmcy0+bXhQYXRobmFtZSwgYWJzb2x1dGVQYXRoLCAiJXMiLCByZWxhdGl2ZVBhdGgp
OworICAgIHJldHVybiBTUUxJVEVfT0s7Cit9CisKKyNpZm5kZWYgU1FMSVRFX09NSVRfTE9BRF9F
WFRFTlNJT04KKy8vIFJldHVybnMgTlVMTCwgdGh1cyBkaXNhbGxvd2luZyBsb2FkaW5nIGxpYnJh
cmllcyBpbiB0aGUgcmVuZGVyZXIgcHJvY2Vzcy4KKy8vCisvLyB2ZnMgLSBwb2ludGVyIHRvIHRo
ZSBzcWxpdGUzX3ZmcyBvYmplY3QuCisvLyBmaWxlTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBzaGFy
ZWQgbGlicmFyeSBmaWxlLgordm9pZCogY2hyb21pdW1EbE9wZW4oc3FsaXRlM192ZnMqLCBjb25z
dCBjaGFyKikKK3sKKyAgICByZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGNocm9taXVtRGxP
cGVuIDAKKyNlbmRpZiAvLyBTUUxJVEVfT01JVF9MT0FEX0VYVEVOU0lPTgorCit9IC8vIG5hbWVz
cGFjZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgU1FMaXRlRmlsZVN5c3RlbTo6cmVn
aXN0ZXJTUUxpdGVWRlMoKQoreworICAgIHNxbGl0ZTNfdmZzKiB3aW4zMl92ZnMgPSBzcWxpdGUz
X3Zmc19maW5kKCJ3aW4zMiIpOworICAgIHN0YXRpYyBzcWxpdGUzX3ZmcyBjaHJvbWl1bV92ZnMg
PSB7CisgICAgICAgIDEsCisgICAgICAgIHdpbjMyX3Zmcy0+c3pPc0ZpbGUsCisgICAgICAgIHdp
bjMyX3Zmcy0+bXhQYXRobmFtZSwKKyAgICAgICAgMCwKKyAgICAgICAgImNocm9taXVtX3ZmcyIs
CisgICAgICAgIDAsCisgICAgICAgIGNocm9taXVtT3BlbiwKKyAgICAgICAgY2hyb21pdW1EZWxl
dGUsCisgICAgICAgIGNocm9taXVtQWNjZXNzLAorICAgICAgICBjaHJvbWl1bUZ1bGxQYXRobmFt
ZSwKKyAgICAgICAgY2hyb21pdW1EbE9wZW4sCisgICAgICAgIHdpbjMyX3Zmcy0+eERsRXJyb3Is
CisgICAgICAgIHdpbjMyX3Zmcy0+eERsU3ltLAorICAgICAgICB3aW4zMl92ZnMtPnhEbENsb3Nl
LAorICAgICAgICB3aW4zMl92ZnMtPnhSYW5kb21uZXNzLAorICAgICAgICB3aW4zMl92ZnMtPnhT
bGVlcCwKKyAgICAgICAgd2luMzJfdmZzLT54Q3VycmVudFRpbWUsCisgICAgICAgIHdpbjMyX3Zm
cy0+eEdldExhc3RFcnJvcgorICAgIH07CisgICAgc3FsaXRlM192ZnNfcmVnaXN0ZXIoJmNocm9t
aXVtX3ZmcywgMSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32588</attachid>
            <date>2009-07-10 15:57:53 -0700</date>
            <delta_ts>2009-07-17 13:38:40 -0700</delta_ts>
            <desc>win patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>13786</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTczMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMDctMDggIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgdGhlIFdpbiBTUUxpdGUgVkZTIGltcGxlbWVudGF0aW9uIGZvciBDaHJvbWl1bS4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NDAK
KworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vc3FsL2Nocm9taXVtOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
Y2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtLmNwcDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5jcHA6IEFk
ZGVkLgorCiAyMDA5LTA3LTEwICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAog
ICAgICAgICBUcnkgdG8gdW5icmVhayBub24tTWFjIGJ1aWxkLgpJbmRleDogV2ViQ29yZS9XZWJD
b3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDQ1
NzMxKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTIyODcsMTEg
KzIyODcsMTIgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaCcsCi0gICAgICAgICAgICAncGxh
dGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9z
cWwvU1FMaXRlU3RhdGVtZW50LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vc3FsL1NRTGl0
ZVN0YXRlbWVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rp
b24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJv
bWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxl
U3lzdGVtQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9zeW1iaWFuL0Zs
b2F0UG9pbnRTeW1iaWFuLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vc3ltYmlhbi9GbG9h
dFJlY3RTeW1iaWFuLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vc3ltYmlhbi9JbnRQb2lu
dFN5bWJpYW4uY3BwJywKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1C
cmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVt
QnJpZGdlLmgJKHJldmlzaW9uIDQ1NzMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
aHJvbWl1bUJyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVm
IENocm9taXVtQnJpZGdlX2gKICNkZWZpbmUgQ2hyb21pdW1CcmlkZ2VfaAogCisjaW5jbHVkZSAi
RmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkxpbmtIYXNoLmgiCiAjaW5jbHVkZSAiUGFzc1JlZlB0
ci5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmRQcml2YXRlLmgiCkBAIC0xNzcsNiArMTc4LDI1IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gV2lkZ2V0IC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgc3Rh
dGljIHZvaWQgd2lkZ2V0U2V0Q3Vyc29yKFdpZGdldCosIGNvbnN0IEN1cnNvciYpOwogICAgICAg
ICBzdGF0aWMgdm9pZCB3aWRnZXRTZXRGb2N1cyhXaWRnZXQqKTsKKworICAgICAgICAvLyBIVE1M
NSBEQiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgICAgICAvLyBPcGVucyBhIGRhdGFi
YXNlIGZpbGUKKyAgICAgICAgLy8gJ2Rlc2lyZWRGbGFncycgaXMgYSBjb2xsZWN0aW9uIG9mIE9S
J2QgU1FMaXRlIGNvbnN0YW50cyB0aGF0CisgICAgICAgIC8vIGRldGVybWluZSBob3cgdGhlIGZp
bGUgc2hvdWxkIGJlIG9wZW5lZAorICAgICAgICBzdGF0aWMgUGxhdGZvcm1GaWxlSGFuZGxlIGRh
dGFiYXNlT3BlbkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgaW50IGRlc2lyZWRGbGFncyk7
CisKKyAgICAgICAgLy8gRGVsZXRlcyBhIGRhdGFiYXNlIGZpbGUKKyAgICAgICAgLy8gUmV0dXJu
cyAndHJ1ZScgaWYgdGhlIGZpbGUgd2FzIGRlbGV0ZWQ7ICdmYWxzZScgb3RoZXJ3aXNlCisgICAg
ICAgIHN0YXRpYyBib29sIGRhdGFiYXNlRGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1l
KTsKKworICAgICAgICAvLyBSZXR1cm5zIHRoZSBmaWxlIGF0dHJpYnV0ZXMgb2YgdGhlIGdpdmVu
IGRhdGFiYXNlIGZpbGUKKyAgICAgICAgc3RhdGljIGxvbmcgZGF0YWJhc2VHZXRGaWxlQXR0cmli
dXRlcyhjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKKworICAgICAgICAvLyBSZXR1cm5zIHNpemUg
b2YgdGhlIGdpdmVuIGZpbGUKKyAgICAgICAgc3RhdGljIGxvbmcgbG9uZyBkYXRhYmFzZUdldEZp
bGVTaXplKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOworI2VuZGlmCiAgICAgfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FM
aXRlRmlsZVN5c3RlbUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVt
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgorCisjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2Uu
aCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKKyNp
bmNsdWRlIDxzcWxpdGUzLmg+CisKKyNpZm5kZWYgU1FMSVRFX09QRU5fRlVMTE1VVEVYCisjZGVm
aW5lIFNRTElURV9PUEVOX0ZVTExNVVRFWCAweDAwMDEwMDAwCisjZW5kaWYKKworLy8gU1FMaXRl
RmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKSBpcyBpbXBsZW1lbnRlZCBpbiB0aGUKKy8v
IHBsYXRmb3JtLXNwZWNpZmljIGZpbGVzIFNRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bXtXaW58UG9z
aXh9LmNwcAorbmFtZXNwYWNlIFdlYkNvcmUgeworCitTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVG
aWxlU3lzdGVtKCkKK3sKK30KKworaW50IFNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFzZShj
b25zdCBTdHJpbmcmIGZpbGVOYW1lLCBzcWxpdGUzKiogZGF0YWJhc2UpCit7CisgICAgLy8gb3Bl
biBkYXRhYmFzZXMgdXNpbmcgQ2hyb21pdW0ncyBWRlMKKyAgICByZXR1cm4gc3FsaXRlM19vcGVu
X3YyKGZpbGVOYW1lLnV0ZjgoKS5kYXRhKCksIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU1FMSVRFX09QRU5fUkVBRFdSSVRFIHwgU1FMSVRFX09QRU5fQ1JFQVRFIHwgU1FM
SVRFX09QRU5fRlVMTE1VVEVYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImNocm9taXVt
X3ZmcyIpOworfQorCitTdHJpbmcgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RmlsZU5hbWVGb3JOZXdE
YXRhYmFzZSgKKyAgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBkYk5hbWUsIGNvbnN0IFN0
cmluZyAmb3JpZ2luSWRlbnRpZmllciwgU1FMaXRlRGF0YWJhc2UqKQoreworICAgIC8vIENocm9t
aXVtIG5hbWVzIERCIGZpbGVzIGJhc2VkIG9uIG9yaWdpbiBhbmQgREIgbmFtZSBvbmx5CisgICAg
cmV0dXJuIG9yaWdpbklkZW50aWZpZXIgKyAiXyIgKyBkYk5hbWUgKyAiLmRiIjsKK30KKworU3Ry
aW5nIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgoY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKK3sKKyAgICAvLyBDaHJvbWl1bSBzYXZl
cyBhbGwgREIgZmlsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IChrbm93biBieQorICAgIC8vIHRo
ZSBicm93c2VyIHByb2Nlc3Mgb25seSk7IGFzIGZhciBhcyB0aGUgcmVuZGVyZXIgcHJvY2Vzc2Vz
CisgICAgLy8gYXJlIGNvbmNlcm5lZCwgYWxsIERCIGZpbGVzIGFyZSBzYXZlZCBpbiB0aGUgImN1
cnJlbnQiIGRpcmVjdG9yeQorICAgIHJldHVybiBmaWxlTmFtZTsKK30KKworYm9vbCBTUUxpdGVG
aWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZURpcmVjdG9yeUV4aXN0cyhjb25zdCBTdHJpbmcmKQor
eworICAgIC8vIGlmIHRoZSBkaXJlY3Rvcnkgd2hlcmUgQ2hyb21pdW0gc3RvcmVzIHRoZSBkYXRh
YmFzZXMgZG9lcyBub3QgZXhpc3QsCisgICAgLy8gaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNy
ZWF0ZWQgYnkgdGhlIGJyb3dzZXIgcHJvY2VzczsKKyAgICAvLyBzbyBhcyBmYXIgYXMgdGhlIFdl
YktpdCBjb2RlIGlzIGNvbmNlcm5lZCwgdGhpcyBkaXJlY3RvcnkgYWx3YXlzIGV4aXN0cworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNl
RmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmLCBib29sKQoreworICAgIC8vIGFsbCBkYXRhYmFzZSBk
aXJlY3RvcmllcyB3aWxsIGJlIGNyZWF0ZWQgYXMgbmVlZGVkIGJ5IHRoZSBicm93c2VyIHByb2Nl
c3MKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVF
bXB0eURhdGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpCit7CisgICAgLy8gQ2hyb21pdW0g
ZG9lcyBub3QgdXNlIGEgc2VwYXJhdGUgZGlyZWN0b3J5IGZvciBlYWNoIGRhdGFiYXNlLAorICAg
IC8vIHNvIHRoZXJlJ3Mgbm90aGluZyB0byBkbyBoZXJlCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYg
ZmlsZU5hbWUpCit7CisgICAgLy8gcmV0dXJuIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGVycm9y
IGNvZGUgcmV0dXJuZWQgYnkKKyAgICAvLyBDaHJvbWl1bUJyaWRnZTo6ZGVsZXRlRGF0YWJhc2Uo
KSBpcyAwCisgICAgcmV0dXJuICghQ2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlRGVsZXRlRmlsZShm
aWxlTmFtZSkpOworfQorCitsb25nIGxvbmcgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VG
aWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQoreworICAgIHJldHVybiBDaHJvbWl1bUJy
aWRnZTo6ZGF0YWJhc2VHZXRGaWxlU2l6ZShmaWxlTmFtZSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVT
eXN0ZW1DaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
Y2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdp
bi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUgIkNocm9taXVtQnJpZGdl
LmgiCisjaW5jbHVkZSA8c3FsaXRlMy5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworLy8gRGVm
aW5lZCBpbiBDaHJvbWl1bSdzIGNvZGViYXNlIGluIHRoaXJkX3BhcnR5L3NxbGl0ZS9zcmMvb3Nf
d2luLmMKK2V4dGVybiAiQyIgeworaW50IGNocm9taXVtX3NxbGl0ZTNfaW5pdGlhbGl6ZV93aW5f
c3FsaXRlM19maWxlKHNxbGl0ZTNfZmlsZSogZmlsZSwgSEFORExFIGhhbmRsZSk7Cit9CisKKy8v
IENocm9taXVtJ3MgV2luZG93cyBpbXBsZW1lbnRhdGlvbiBvZiBTUUxpdGUgVkZTCituYW1lc3Bh
Y2UgeworCisvLyBPcGVucyBhIGZpbGUuCisvLworLy8gdmZzIC0gcG9pbnRlciB0byB0aGUgc3Fs
aXRlM192ZnMgb2JqZWN0LgorLy8gZmlsZU5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKy8v
IGlkIC0gdGhlIHN0cnVjdHVyZSB0aGF0IHdpbGwgbWFuaXB1bGF0ZSB0aGUgbmV3bHkgb3BlbmVk
IGZpbGUuCisvLyBkZXNpcmVkRmxhZ3MgLSB0aGUgZGVzaXJlZCBvcGVuIG1vZGUgZmxhZ3MuCisv
LyB1c2VkRmxhZ3MgLSB0aGUgYWN0dWFsIG9wZW4gbW9kZSBmbGFncyB0aGF0IHdlcmUgdXNlZC4K
K2ludCBjaHJvbWl1bU9wZW4oc3FsaXRlM192ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwKKyAg
ICAgICAgICAgICAgICAgc3FsaXRlM19maWxlKiBpZCwgaW50IGRlc2lyZWRGbGFncywgaW50KiB1
c2VkRmxhZ3MpCit7CisgICAgSEFORExFIGggPSBXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6ZGF0
YWJhc2VPcGVuRmlsZShmaWxlTmFtZSwgZGVzaXJlZEZsYWdzKTsKKyAgICBpZiAoaCA9PSBJTlZB
TElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICBpZiAoZGVzaXJlZEZsYWdzICYgU1FMSVRFX09Q
RU5fUkVBRFdSSVRFKSB7CisgICAgICAgICAgICBpbnQgbmV3RmxhZ3MgPSAoZGVzaXJlZEZsYWdz
IHwgU1FMSVRFX09QRU5fUkVBRE9OTFkpICYgflNRTElURV9PUEVOX1JFQURXUklURTsKKyAgICAg
ICAgICAgIHJldHVybiBjaHJvbWl1bU9wZW4oMCwgZmlsZU5hbWUsIGlkLCBuZXdGbGFncywgdXNl
ZEZsYWdzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4gU1FMSVRFX0NBTlRP
UEVOOworICAgIH0KKyAgICBpZiAodXNlZEZsYWdzKSB7CisgICAgICAgIGlmIChkZXNpcmVkRmxh
Z3MgJiBTUUxJVEVfT1BFTl9SRUFEV1JJVEUpCisgICAgICAgICAgICAqdXNlZEZsYWdzID0gU1FM
SVRFX09QRU5fUkVBRFdSSVRFOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqdXNlZEZsYWdz
ID0gU1FMSVRFX09QRU5fUkVBRE9OTFk7CisgICAgfQorCisgICAgY2hyb21pdW1fc3FsaXRlM19p
bml0aWFsaXplX3dpbl9zcWxpdGUzX2ZpbGUoaWQsIGgpOworICAgIHJldHVybiBTUUxJVEVfT0s7
Cit9CisKKy8vIERlbGV0ZXMgdGhlIGdpdmVuIGZpbGUuCisvLworLy8gdmZzIC0gcG9pbnRlciB0
byB0aGUgc3FsaXRlM192ZnMgb2JqZWN0LgorLy8gZmlsZU5hbWUgLSB0aGUgbmFtZSBvZiB0aGUg
ZmlsZS4KKy8vIHN5bmNEaXIgLSBkZXRlcm1pbmVzIGlmIHRoZSBkaXJlY3RvcnkgdG8gd2hpY2gg
dGhpcyBmaWxlIGJlbG9uZ3MKKy8vICAgICAgICAgICBzaG91bGQgYmUgc3luY2hlZCBhZnRlciB0
aGUgZmlsZSBpcyBkZWxldGVkLgoraW50IGNocm9taXVtRGVsZXRlKHNxbGl0ZTNfdmZzKiwgY29u
c3QgY2hhciogZmlsZU5hbWUsIGludCkKK3sKKyAgICBib29sIGRlbGV0ZWQgPSBXZWJDb3JlOjpD
aHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGZpbGVOYW1lKTsKKyAgICBEV09SRCBy
YyA9IFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGZp
bGVOYW1lKTsKKyAgICByZXR1cm4gKChyYyA9PSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykgJiYg
ZGVsZXRlZCA/CisgICAgICAgICAgICBTUUxJVEVfT0sgOiBTUUxJVEVfSU9FUlJfREVMRVRFKTsK
K30KKworLy8gQ2hlY2sgdGhlIGV4aXN0YW5jZSBhbmQgc3RhdHVzIG9mIHRoZSBnaXZlbiBmaWxl
LgorLy8KKy8vIHZmcyAtIHBvaW50ZXIgdG8gdGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KKy8vIGZp
bGVOYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisvLyBmbGFnIC0gdGhlIHR5cGUgb2YgdGVz
dCB0byBtYWtlIG9uIHRoaXMgZmlsZS4KKy8vIHJlcyAtIHRoZSByZXN1bHQuCitpbnQgY2hyb21p
dW1BY2Nlc3Moc3FsaXRlM192ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50IGZsYWcsIGlu
dCogcmVzKQoreworICAgIERXT1JEIGF0dHIgPSBXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6ZGF0
YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhmaWxlTmFtZSk7CisgICAgc3dpdGNoIChmbGFnKSB7Cisg
ICAgY2FzZSBTUUxJVEVfQUNDRVNTX1JFQUQ6CisgICAgY2FzZSBTUUxJVEVfQUNDRVNTX0VYSVNU
UzoKKyAgICAgICAgKnJlcyA9IChhdHRyICE9IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBTUUxJVEVfQUNDRVNTX1JFQURXUklURToKKyAgICAgICAg
KnJlcyA9ICgoYXR0ciAmIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZKSA9PSAwKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFNRTElURV9FUlJPUjsKKyAgICB9
CisKKyAgICByZXR1cm4gU1FMSVRFX09LOworfQorCisvLyBUdXJucyBhIHJlbGF0aXZlIHBhdGhu
YW1lIGludG8gYSBmdWxsIHBhdGhuYW1lLgorLy8KKy8vIHZmcyAtIHBvaW50ZXIgdG8gdGhlIHNx
bGl0ZTNfdmZzIG9iamVjdC4KKy8vIHJlbGF0aXZlUGF0aCAtIHRoZSByZWxhdGl2ZSBwYXRoLgor
Ly8gYnVmU2l6ZSAtIHRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyIGluIGJ5dGVzLgorLy8g
YWJzb2x1dGVQYXRoIC0gdGhlIG91dHB1dCBidWZmZXIgd2hlcmUgdGhlIGFic29sdXRlIHBhdGgg
d2lsbCBiZSBzdG9yZWQuCitpbnQgY2hyb21pdW1GdWxsUGF0aG5hbWUoc3FsaXRlM192ZnMqIHZm
cywgY29uc3QgY2hhciogcmVsYXRpdmVQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCwgY2hhciogYWJzb2x1dGVQYXRoKQoreworICAgIC8vIFRoZSByZW5kZXJlciBwcm9jZXNzIGRv
ZXNuJ3QgbmVlZCB0byBrbm93IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlCisgICAgc3Fs
aXRlM19zbnByaW50Zih2ZnMtPm14UGF0aG5hbWUsIGFic29sdXRlUGF0aCwgIiVzIiwgcmVsYXRp
dmVQYXRoKTsKKyAgICByZXR1cm4gU1FMSVRFX09LOworfQorCisjaWZuZGVmIFNRTElURV9PTUlU
X0xPQURfRVhURU5TSU9OCisvLyBSZXR1cm5zIE5VTEwsIHRodXMgZGlzYWxsb3dpbmcgbG9hZGlu
ZyBsaWJyYXJpZXMgaW4gdGhlIHJlbmRlcmVyIHByb2Nlc3MuCisvLworLy8gdmZzIC0gcG9pbnRl
ciB0byB0aGUgc3FsaXRlM192ZnMgb2JqZWN0LgorLy8gZmlsZU5hbWUgLSB0aGUgbmFtZSBvZiB0
aGUgc2hhcmVkIGxpYnJhcnkgZmlsZS4KK3ZvaWQqIGNocm9taXVtRGxPcGVuKHNxbGl0ZTNfdmZz
KiwgY29uc3QgY2hhciopCit7CisgICAgcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBjaHJv
bWl1bURsT3BlbiAwCisjZW5kaWYgLy8gU1FMSVRFX09NSVRfTE9BRF9FWFRFTlNJT04KKworfSAv
LyBuYW1lc3BhY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFNRTGl0ZUZpbGVTeXN0
ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKCkKK3sKKyAgICBzcWxpdGUzX3Zmcyogd2luMzJfdmZzID0g
c3FsaXRlM192ZnNfZmluZCgid2luMzIiKTsKKyAgICBzdGF0aWMgc3FsaXRlM192ZnMgY2hyb21p
dW1fdmZzID0geworICAgICAgICAxLAorICAgICAgICB3aW4zMl92ZnMtPnN6T3NGaWxlLAorICAg
ICAgICB3aW4zMl92ZnMtPm14UGF0aG5hbWUsCisgICAgICAgIDAsCisgICAgICAgICJjaHJvbWl1
bV92ZnMiLAorICAgICAgICAwLAorICAgICAgICBjaHJvbWl1bU9wZW4sCisgICAgICAgIGNocm9t
aXVtRGVsZXRlLAorICAgICAgICBjaHJvbWl1bUFjY2VzcywKKyAgICAgICAgY2hyb21pdW1GdWxs
UGF0aG5hbWUsCisgICAgICAgIGNocm9taXVtRGxPcGVuLAorICAgICAgICB3aW4zMl92ZnMtPnhE
bEVycm9yLAorICAgICAgICB3aW4zMl92ZnMtPnhEbFN5bSwKKyAgICAgICAgd2luMzJfdmZzLT54
RGxDbG9zZSwKKyAgICAgICAgd2luMzJfdmZzLT54UmFuZG9tbmVzcywKKyAgICAgICAgd2luMzJf
dmZzLT54U2xlZXAsCisgICAgICAgIHdpbjMyX3Zmcy0+eEN1cnJlbnRUaW1lLAorICAgICAgICB3
aW4zMl92ZnMtPnhHZXRMYXN0RXJyb3IKKyAgICB9OworICAgIHNxbGl0ZTNfdmZzX3JlZ2lzdGVy
KCZjaHJvbWl1bV92ZnMsIDEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="17005"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32967</attachid>
            <date>2009-07-17 13:38:40 -0700</date>
            <delta_ts>2009-07-17 15:24:32 -0700</delta_ts>
            <desc>win patch + mac/linux stubs</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>18347</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjA1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDktMDctMTcgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgdGhlIFdpbiBTUUxpdGUgVkZTIGltcGxlbWVudGF0aW9uIGZvciBDaHJvbWl1bSwg
YW5kIHN0dWJzCisgICAgICAgIGZvciB0aGUgTWFjIGFuZCBMaW51eCBWRlNzLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk0MAorCisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJp
ZGdlLmg6CisgICAgICAgICogcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1D
aHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxp
dGVGaWxlU3lzdGVtQ2hyb21pdW1NYWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9z
cWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtUE9TSVguY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtV2lu
LmNwcDogQWRkZWQuCisKIDIwMDktMDctMTcgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biA0NjA0NSkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yMzE1
LDExICsyMzE1LDE0IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgnLAotICAgICAgICAgICAg
J3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3NxbC9T
UUxpdGVTdGF0ZW1lbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vc3FsL1NRTGl0ZVRyYW5z
YWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vc3FsL1NRTGl0ZVRyYW5zYWN0aW9u
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVt
Q2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRl
RmlsZVN5c3RlbUNocm9taXVtTWFjLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vc3FsL2No
cm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVBPU0lYLmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL3N5bWJpYW4vRmxvYXRQb2ludFN5bWJpYW4uY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9zeW1iaWFuL0Zsb2F0UmVjdFN5bWJpYW4uY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9zeW1iaWFuL0ludFBvaW50U3ltYmlhbi5jcHAnLApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaAkocmV2aXNpb24gNDYwNDUp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZm5kZWYgQ2hyb21pdW1CcmlkZ2VfaAogI2RlZmlu
ZSBDaHJvbWl1bUJyaWRnZV9oCiAKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAi
TGlua0hhc2guaCIKICNpbmNsdWRlICJQYXNzUmVmUHRyLmgiCiAjaW5jbHVkZSAiUGFzdGVib2Fy
ZFByaXZhdGUuaCIKQEAgLTE3Nyw2ICsxNzgsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAvLyBXaWRnZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICBzdGF0aWMgdm9pZCB3aWRnZXRTZXRDdXJzb3Io
V2lkZ2V0KiwgY29uc3QgQ3Vyc29yJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdpZGdldFNldEZv
Y3VzKFdpZGdldCopOworCisgICAgICAgIC8vIEhUTUw1IERCIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNpZiBFTkFCTEUoREFU
QUJBU0UpCisgICAgICAgIC8vIE9wZW5zIGEgZGF0YWJhc2UgZmlsZQorICAgICAgICAvLyAnZGVz
aXJlZEZsYWdzJyBpcyBhIGNvbGxlY3Rpb24gb2YgT1InZCBTUUxpdGUgY29uc3RhbnRzIHRoYXQK
KyAgICAgICAgLy8gZGV0ZXJtaW5lIGhvdyB0aGUgZmlsZSBzaG91bGQgYmUgb3BlbmVkCisgICAg
ICAgIHN0YXRpYyBQbGF0Zm9ybUZpbGVIYW5kbGUgZGF0YWJhc2VPcGVuRmlsZShjb25zdCBTdHJp
bmcmIGZpbGVOYW1lLCBpbnQgZGVzaXJlZEZsYWdzKTsKKworICAgICAgICAvLyBEZWxldGVzIGEg
ZGF0YWJhc2UgZmlsZQorICAgICAgICAvLyBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZmlsZSB3YXMg
ZGVsZXRlZDsgJ2ZhbHNlJyBvdGhlcndpc2UKKyAgICAgICAgc3RhdGljIGJvb2wgZGF0YWJhc2VE
ZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOworCisgICAgICAgIC8vIFJldHVybnMg
dGhlIGZpbGUgYXR0cmlidXRlcyBvZiB0aGUgZ2l2ZW4gZGF0YWJhc2UgZmlsZQorICAgICAgICBz
dGF0aWMgbG9uZyBkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpOworCisgICAgICAgIC8vIFJldHVybnMgc2l6ZSBvZiB0aGUgZ2l2ZW4gZmlsZQorICAgICAg
ICBzdGF0aWMgbG9uZyBsb25nIGRhdGFiYXNlR2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSk7CisjZW5kaWYKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVT
eXN0ZW1DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9j
aHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVt
LmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIK
KyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgPHNxbGl0ZTMuaD4KKworI2lm
bmRlZiBTUUxJVEVfT1BFTl9GVUxMTVVURVgKKyNkZWZpbmUgU1FMSVRFX09QRU5fRlVMTE1VVEVY
IDB4MDAwMTAwMDAKKyNlbmRpZgorCisvLyBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0
ZVZGUygpIGlzIGltcGxlbWVudGVkIGluIHRoZQorLy8gcGxhdGZvcm0tc3BlY2lmaWMgZmlsZXMg
U1FMaXRlRmlsZVN5c3RlbUNocm9taXVte1dpbnxQb3NpeH0uY3BwCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1NRTGl0ZUZpbGVTeXN0ZW06OlNRTGl0ZUZpbGVTeXN0ZW0oKQoreworfQorCitpbnQg
U1FMaXRlRmlsZVN5c3RlbTo6b3BlbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIHNx
bGl0ZTMqKiBkYXRhYmFzZSkKK3sKKyAgICAvLyBvcGVuIGRhdGFiYXNlcyB1c2luZyBDaHJvbWl1
bSdzIFZGUworICAgIHJldHVybiBzcWxpdGUzX29wZW5fdjIoZmlsZU5hbWUudXRmOCgpLmRhdGEo
KSwgZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUUxJVEVfT1BFTl9SRUFE
V1JJVEUgfCBTUUxJVEVfT1BFTl9DUkVBVEUgfCBTUUxJVEVfT1BFTl9GVUxMTVVURVgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiY2hyb21pdW1fdmZzIik7Cit9CisKK1N0cmluZyBTUUxp
dGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNlKAorICBjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGRiTmFtZSwgY29uc3QgU3RyaW5nICZvcmlnaW5JZGVudGlmaWVyLCBT
UUxpdGVEYXRhYmFzZSopCit7CisgICAgLy8gQ2hyb21pdW0gbmFtZXMgREIgZmlsZXMgYmFzZWQg
b24gb3JpZ2luIGFuZCBEQiBuYW1lIG9ubHkKKyAgICByZXR1cm4gb3JpZ2luSWRlbnRpZmllciAr
ICJfIiArIGRiTmFtZSArICIuZGIiOworfQorCitTdHJpbmcgU1FMaXRlRmlsZVN5c3RlbTo6YXBw
ZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZp
bGVOYW1lKQoreworICAgIC8vIENocm9taXVtIHNhdmVzIGFsbCBEQiBmaWxlcyBpbiB0aGUgc2Ft
ZSBkaXJlY3RvcnkgKGtub3duIGJ5CisgICAgLy8gdGhlIGJyb3dzZXIgcHJvY2VzcyBvbmx5KTsg
YXMgZmFyIGFzIHRoZSByZW5kZXJlciBwcm9jZXNzZXMKKyAgICAvLyBhcmUgY29uY2VybmVkLCBh
bGwgREIgZmlsZXMgYXJlIHNhdmVkIGluIHRoZSAiY3VycmVudCIgZGlyZWN0b3J5CisgICAgcmV0
dXJuIGZpbGVOYW1lOworfQorCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNl
RGlyZWN0b3J5RXhpc3RzKGNvbnN0IFN0cmluZyYpCit7CisgICAgLy8gaWYgdGhlIGRpcmVjdG9y
eSB3aGVyZSBDaHJvbWl1bSBzdG9yZXMgdGhlIGRhdGFiYXNlcyBkb2VzIG5vdCBleGlzdCwKKyAg
ICAvLyBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSB0aGUgYnJvd3NlciBwcm9j
ZXNzOworICAgIC8vIHNvIGFzIGZhciBhcyB0aGUgV2ViS2l0IGNvZGUgaXMgY29uY2VybmVkLCB0
aGlzIGRpcmVjdG9yeSBhbHdheXMgZXhpc3RzCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
U1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYs
IGJvb2wpCit7CisgICAgLy8gYWxsIGRhdGFiYXNlIGRpcmVjdG9yaWVzIHdpbGwgYmUgY3JlYXRl
ZCBhcyBuZWVkZWQgYnkgdGhlIGJyb3dzZXIgcHJvY2VzcworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkoY29u
c3QgU3RyaW5nJikKK3sKKyAgICAvLyBDaHJvbWl1bSBkb2VzIG5vdCB1c2UgYSBzZXBhcmF0ZSBk
aXJlY3RvcnkgZm9yIGVhY2ggZGF0YWJhc2UsCisgICAgLy8gc28gdGhlcmUncyBub3RoaW5nIHRv
IGRvIGhlcmUKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpk
ZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKK3sKKyAgICAvLyByZXR1
cm4gdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZXJyb3IgY29kZSByZXR1cm5lZCBieQorICAgIC8v
IENocm9taXVtQnJpZGdlOjpkZWxldGVEYXRhYmFzZSgpIGlzIDAKKyAgICByZXR1cm4gKCFDaHJv
bWl1bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGZpbGVOYW1lKSk7Cit9CisKK2xvbmcgbG9u
ZyBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmls
ZU5hbWUpCit7CisgICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVTaXpl
KGZpbGVOYW1lKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtTWFjLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVt
Q2hyb21pdW1NYWMuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hy
b21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtTWFjLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVt
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTUUxpdGVGaWxlU3lzdGVtOjpyZWdp
c3RlclNRTGl0ZVZGUygpCit7CisgICAgLy8gc3R1YiBmb3IgcmVnaXN0ZXJpbmcgQ2hyb21pdW0n
cyBTUUxpdGUgVkZTIGZvciBNYWMKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtUE9T
SVguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0
ZUZpbGVTeXN0ZW1DaHJvbWl1bVBPU0lYLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVBPU0lYLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
UUxpdGVGaWxlU3lzdGVtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTUUxpdGVG
aWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpCit7CisgICAgLy8gc3R1YiBmb3IgcmVnaXN0
ZXJpbmcgQ2hyb21pdW0ncyBTUUxpdGUgVkZTIGZvciBMaW51eAorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxl
U3lzdGVtQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3Fs
L2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1X
aW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRn
ZS5oIgorI2luY2x1ZGUgPHNxbGl0ZTMuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKy8vIERl
ZmluZWQgaW4gQ2hyb21pdW0ncyBjb2RlYmFzZSBpbiB0aGlyZF9wYXJ0eS9zcWxpdGUvc3JjL29z
X3dpbi5jCitleHRlcm4gIkMiIHsKK2ludCBjaHJvbWl1bV9zcWxpdGUzX2luaXRpYWxpemVfd2lu
X3NxbGl0ZTNfZmlsZShzcWxpdGUzX2ZpbGUqIGZpbGUsIEhBTkRMRSBoYW5kbGUpOworfQorCisv
LyBDaHJvbWl1bSdzIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gb2YgU1FMaXRlIFZGUworbmFtZXNw
YWNlIHsKKworLy8gT3BlbnMgYSBmaWxlLgorLy8KKy8vIHZmcyAtIHBvaW50ZXIgdG8gdGhlIHNx
bGl0ZTNfdmZzIG9iamVjdC4KKy8vIGZpbGVOYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisv
LyBpZCAtIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3aWxsIG1hbmlwdWxhdGUgdGhlIG5ld2x5IG9wZW5l
ZCBmaWxlLgorLy8gZGVzaXJlZEZsYWdzIC0gdGhlIGRlc2lyZWQgb3BlbiBtb2RlIGZsYWdzLgor
Ly8gdXNlZEZsYWdzIC0gdGhlIGFjdHVhbCBvcGVuIG1vZGUgZmxhZ3MgdGhhdCB3ZXJlIHVzZWQu
CitpbnQgY2hyb21pdW1PcGVuKHNxbGl0ZTNfdmZzKiwgY29uc3QgY2hhciogZmlsZU5hbWUsCisg
ICAgICAgICAgICAgICAgIHNxbGl0ZTNfZmlsZSogaWQsIGludCBkZXNpcmVkRmxhZ3MsIGludCog
dXNlZEZsYWdzKQoreworICAgIEhBTkRMRSBoID0gV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRh
dGFiYXNlT3BlbkZpbGUoZmlsZU5hbWUsIGRlc2lyZWRGbGFncyk7CisgICAgaWYgKGggPT0gSU5W
QUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgaWYgKGRlc2lyZWRGbGFncyAmIFNRTElURV9P
UEVOX1JFQURXUklURSkgeworICAgICAgICAgICAgaW50IG5ld0ZsYWdzID0gKGRlc2lyZWRGbGFn
cyB8IFNRTElURV9PUEVOX1JFQURPTkxZKSAmIH5TUUxJVEVfT1BFTl9SRUFEV1JJVEU7CisgICAg
ICAgICAgICByZXR1cm4gY2hyb21pdW1PcGVuKDAsIGZpbGVOYW1lLCBpZCwgbmV3RmxhZ3MsIHVz
ZWRGbGFncyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIFNRTElURV9DQU5U
T1BFTjsKKyAgICB9CisgICAgaWYgKHVzZWRGbGFncykgeworICAgICAgICBpZiAoZGVzaXJlZEZs
YWdzICYgU1FMSVRFX09QRU5fUkVBRFdSSVRFKQorICAgICAgICAgICAgKnVzZWRGbGFncyA9IFNR
TElURV9PUEVOX1JFQURXUklURTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKnVzZWRGbGFn
cyA9IFNRTElURV9PUEVOX1JFQURPTkxZOworICAgIH0KKworICAgIGNocm9taXVtX3NxbGl0ZTNf
aW5pdGlhbGl6ZV93aW5fc3FsaXRlM19maWxlKGlkLCBoKTsKKyAgICByZXR1cm4gU1FMSVRFX09L
OworfQorCisvLyBEZWxldGVzIHRoZSBnaXZlbiBmaWxlLgorLy8KKy8vIHZmcyAtIHBvaW50ZXIg
dG8gdGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KKy8vIGZpbGVOYW1lIC0gdGhlIG5hbWUgb2YgdGhl
IGZpbGUuCisvLyBzeW5jRGlyIC0gZGV0ZXJtaW5lcyBpZiB0aGUgZGlyZWN0b3J5IHRvIHdoaWNo
IHRoaXMgZmlsZSBiZWxvbmdzCisvLyAgICAgICAgICAgc2hvdWxkIGJlIHN5bmNoZWQgYWZ0ZXIg
dGhlIGZpbGUgaXMgZGVsZXRlZC4KK2ludCBjaHJvbWl1bURlbGV0ZShzcWxpdGUzX3ZmcyosIGNv
bnN0IGNoYXIqIGZpbGVOYW1lLCBpbnQpCit7CisgICAgYm9vbCBkZWxldGVkID0gV2ViQ29yZTo6
Q2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlRGVsZXRlRmlsZShmaWxlTmFtZSk7CisgICAgRFdPUkQg
cmMgPSBXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhm
aWxlTmFtZSk7CisgICAgcmV0dXJuICgocmMgPT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpICYm
IGRlbGV0ZWQgPworICAgICAgICAgICAgU1FMSVRFX09LIDogU1FMSVRFX0lPRVJSX0RFTEVURSk7
Cit9CisKKy8vIENoZWNrIHRoZSBleGlzdGFuY2UgYW5kIHN0YXR1cyBvZiB0aGUgZ2l2ZW4gZmls
ZS4KKy8vCisvLyB2ZnMgLSBwb2ludGVyIHRvIHRoZSBzcWxpdGUzX3ZmcyBvYmplY3QuCisvLyBm
aWxlTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorLy8gZmxhZyAtIHRoZSB0eXBlIG9mIHRl
c3QgdG8gbWFrZSBvbiB0aGlzIGZpbGUuCisvLyByZXMgLSB0aGUgcmVzdWx0LgoraW50IGNocm9t
aXVtQWNjZXNzKHNxbGl0ZTNfdmZzKiwgY29uc3QgY2hhciogZmlsZU5hbWUsIGludCBmbGFnLCBp
bnQqIHJlcykKK3sKKyAgICBEV09SRCBhdHRyID0gV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRh
dGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMoZmlsZU5hbWUpOworICAgIHN3aXRjaCAoZmxhZykgewor
ICAgIGNhc2UgU1FMSVRFX0FDQ0VTU19SRUFEOgorICAgIGNhc2UgU1FMSVRFX0FDQ0VTU19FWElT
VFM6CisgICAgICAgICpyZXMgPSAoYXR0ciAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU1FMSVRFX0FDQ0VTU19SRUFEV1JJVEU6CisgICAgICAg
ICpyZXMgPSAoKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkgPT0gMCk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBTUUxJVEVfRVJST1I7CisgICAg
fQorCisgICAgcmV0dXJuIFNRTElURV9PSzsKK30KKworLy8gVHVybnMgYSByZWxhdGl2ZSBwYXRo
bmFtZSBpbnRvIGEgZnVsbCBwYXRobmFtZS4KKy8vCisvLyB2ZnMgLSBwb2ludGVyIHRvIHRoZSBz
cWxpdGUzX3ZmcyBvYmplY3QuCisvLyByZWxhdGl2ZVBhdGggLSB0aGUgcmVsYXRpdmUgcGF0aC4K
Ky8vIGJ1ZlNpemUgLSB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlciBpbiBieXRlcy4KKy8v
IGFic29sdXRlUGF0aCAtIHRoZSBvdXRwdXQgYnVmZmVyIHdoZXJlIHRoZSBhYnNvbHV0ZSBwYXRo
IHdpbGwgYmUgc3RvcmVkLgoraW50IGNocm9taXVtRnVsbFBhdGhuYW1lKHNxbGl0ZTNfdmZzKiB2
ZnMsIGNvbnN0IGNoYXIqIHJlbGF0aXZlUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQsIGNoYXIqIGFic29sdXRlUGF0aCkKK3sKKyAgICAvLyBUaGUgcmVuZGVyZXIgcHJvY2VzcyBk
b2Vzbid0IG5lZWQgdG8ga25vdyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZmlsZQorICAgIHNx
bGl0ZTNfc25wcmludGYodmZzLT5teFBhdGhuYW1lLCBhYnNvbHV0ZVBhdGgsICIlcyIsIHJlbGF0
aXZlUGF0aCk7CisgICAgcmV0dXJuIFNRTElURV9PSzsKK30KKworI2lmbmRlZiBTUUxJVEVfT01J
VF9MT0FEX0VYVEVOU0lPTgorLy8gUmV0dXJucyBOVUxMLCB0aHVzIGRpc2FsbG93aW5nIGxvYWRp
bmcgbGlicmFyaWVzIGluIHRoZSByZW5kZXJlciBwcm9jZXNzLgorLy8KKy8vIHZmcyAtIHBvaW50
ZXIgdG8gdGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KKy8vIGZpbGVOYW1lIC0gdGhlIG5hbWUgb2Yg
dGhlIHNoYXJlZCBsaWJyYXJ5IGZpbGUuCit2b2lkKiBjaHJvbWl1bURsT3BlbihzcWxpdGUzX3Zm
cyosIGNvbnN0IGNoYXIqKQoreworICAgIHJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgY2hy
b21pdW1EbE9wZW4gMAorI2VuZGlmIC8vIFNRTElURV9PTUlUX0xPQURfRVhURU5TSU9OCisKK30g
Ly8gbmFtZXNwYWNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTUUxpdGVGaWxlU3lz
dGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpCit7CisgICAgc3FsaXRlM192ZnMqIHdpbjMyX3ZmcyA9
IHNxbGl0ZTNfdmZzX2ZpbmQoIndpbjMyIik7CisgICAgc3RhdGljIHNxbGl0ZTNfdmZzIGNocm9t
aXVtX3ZmcyA9IHsKKyAgICAgICAgMSwKKyAgICAgICAgd2luMzJfdmZzLT5zek9zRmlsZSwKKyAg
ICAgICAgd2luMzJfdmZzLT5teFBhdGhuYW1lLAorICAgICAgICAwLAorICAgICAgICAiY2hyb21p
dW1fdmZzIiwKKyAgICAgICAgMCwKKyAgICAgICAgY2hyb21pdW1PcGVuLAorICAgICAgICBjaHJv
bWl1bURlbGV0ZSwKKyAgICAgICAgY2hyb21pdW1BY2Nlc3MsCisgICAgICAgIGNocm9taXVtRnVs
bFBhdGhuYW1lLAorICAgICAgICBjaHJvbWl1bURsT3BlbiwKKyAgICAgICAgd2luMzJfdmZzLT54
RGxFcnJvciwKKyAgICAgICAgd2luMzJfdmZzLT54RGxTeW0sCisgICAgICAgIHdpbjMyX3Zmcy0+
eERsQ2xvc2UsCisgICAgICAgIHdpbjMyX3Zmcy0+eFJhbmRvbW5lc3MsCisgICAgICAgIHdpbjMy
X3Zmcy0+eFNsZWVwLAorICAgICAgICB3aW4zMl92ZnMtPnhDdXJyZW50VGltZSwKKyAgICAgICAg
d2luMzJfdmZzLT54R2V0TGFzdEVycm9yCisgICAgfTsKKyAgICBzcWxpdGUzX3Zmc19yZWdpc3Rl
cigmY2hyb21pdW1fdmZzLCAxKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="17309"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32980</attachid>
            <date>2009-07-17 15:24:32 -0700</date>
            <delta_ts>2009-07-17 15:42:19 -0700</delta_ts>
            <desc>win VFS + mac/linux stubs</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>18347</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjA1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDktMDctMTcgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgdGhlIFdpbiBTUUxpdGUgVkZTIGltcGxlbWVudGF0aW9uIGZvciBDaHJvbWl1bSwg
YW5kIHN0dWJzCisgICAgICAgIGZvciB0aGUgTWFjIGFuZCBMaW51eCBWRlNzLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk0MAorCisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJp
ZGdlLmg6CisgICAgICAgICogcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1D
aHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxp
dGVGaWxlU3lzdGVtQ2hyb21pdW1MaW51eC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1NYWMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtV2lu
LmNwcDogQWRkZWQuCisKIDIwMDktMDctMTcgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biA0NjA0NSkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yMzE1
LDExICsyMzE1LDE0IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgnLAotICAgICAgICAgICAg
J3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3NxbC9T
UUxpdGVTdGF0ZW1lbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vc3FsL1NRTGl0ZVRyYW5z
YWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vc3FsL1NRTGl0ZVRyYW5zYWN0aW9u
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVt
Q2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRl
RmlsZVN5c3RlbUNocm9taXVtTGludXguY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9zcWwv
Y2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtTWFjLmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL3N5bWJpYW4vRmxvYXRQb2ludFN5bWJpYW4uY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9zeW1iaWFuL0Zsb2F0UmVjdFN5bWJpYW4uY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9zeW1iaWFuL0ludFBvaW50U3ltYmlhbi5jcHAnLApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaAkocmV2aXNpb24gNDYwNDUp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZm5kZWYgQ2hyb21pdW1CcmlkZ2VfaAogI2RlZmlu
ZSBDaHJvbWl1bUJyaWRnZV9oCiAKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAi
TGlua0hhc2guaCIKICNpbmNsdWRlICJQYXNzUmVmUHRyLmgiCiAjaW5jbHVkZSAiUGFzdGVib2Fy
ZFByaXZhdGUuaCIKQEAgLTE3Nyw2ICsxNzgsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAvLyBXaWRnZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICBzdGF0aWMgdm9pZCB3aWRnZXRTZXRDdXJzb3Io
V2lkZ2V0KiwgY29uc3QgQ3Vyc29yJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdpZGdldFNldEZv
Y3VzKFdpZGdldCopOworCisgICAgICAgIC8vIEhUTUw1IERCIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNpZiBFTkFCTEUoREFU
QUJBU0UpCisgICAgICAgIC8vIE9wZW5zIGEgZGF0YWJhc2UgZmlsZQorICAgICAgICAvLyAnZGVz
aXJlZEZsYWdzJyBpcyBhIGNvbGxlY3Rpb24gb2YgT1InZCBTUUxpdGUgY29uc3RhbnRzIHRoYXQK
KyAgICAgICAgLy8gZGV0ZXJtaW5lIGhvdyB0aGUgZmlsZSBzaG91bGQgYmUgb3BlbmVkCisgICAg
ICAgIHN0YXRpYyBQbGF0Zm9ybUZpbGVIYW5kbGUgZGF0YWJhc2VPcGVuRmlsZShjb25zdCBTdHJp
bmcmIGZpbGVOYW1lLCBpbnQgZGVzaXJlZEZsYWdzKTsKKworICAgICAgICAvLyBEZWxldGVzIGEg
ZGF0YWJhc2UgZmlsZQorICAgICAgICAvLyBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZmlsZSB3YXMg
ZGVsZXRlZDsgJ2ZhbHNlJyBvdGhlcndpc2UKKyAgICAgICAgc3RhdGljIGJvb2wgZGF0YWJhc2VE
ZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOworCisgICAgICAgIC8vIFJldHVybnMg
dGhlIGZpbGUgYXR0cmlidXRlcyBvZiB0aGUgZ2l2ZW4gZGF0YWJhc2UgZmlsZQorICAgICAgICBz
dGF0aWMgbG9uZyBkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpOworCisgICAgICAgIC8vIFJldHVybnMgc2l6ZSBvZiB0aGUgZ2l2ZW4gZmlsZQorICAgICAg
ICBzdGF0aWMgbG9uZyBsb25nIGRhdGFiYXNlR2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSk7CisjZW5kaWYKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVT
eXN0ZW1DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9j
aHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVt
LmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIK
KyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgPHNxbGl0ZTMuaD4KKworI2lm
bmRlZiBTUUxJVEVfT1BFTl9GVUxMTVVURVgKKyNkZWZpbmUgU1FMSVRFX09QRU5fRlVMTE1VVEVY
IDB4MDAwMTAwMDAKKyNlbmRpZgorCisvLyBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0
ZVZGUygpIGlzIGltcGxlbWVudGVkIGluIHRoZQorLy8gcGxhdGZvcm0tc3BlY2lmaWMgZmlsZXMg
U1FMaXRlRmlsZVN5c3RlbUNocm9taXVte1dpbnxQb3NpeH0uY3BwCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1NRTGl0ZUZpbGVTeXN0ZW06OlNRTGl0ZUZpbGVTeXN0ZW0oKQoreworfQorCitpbnQg
U1FMaXRlRmlsZVN5c3RlbTo6b3BlbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIHNx
bGl0ZTMqKiBkYXRhYmFzZSkKK3sKKyAgICAvLyBvcGVuIGRhdGFiYXNlcyB1c2luZyBDaHJvbWl1
bSdzIFZGUworICAgIHJldHVybiBzcWxpdGUzX29wZW5fdjIoZmlsZU5hbWUudXRmOCgpLmRhdGEo
KSwgZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUUxJVEVfT1BFTl9SRUFE
V1JJVEUgfCBTUUxJVEVfT1BFTl9DUkVBVEUgfCBTUUxJVEVfT1BFTl9GVUxMTVVURVgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiY2hyb21pdW1fdmZzIik7Cit9CisKK1N0cmluZyBTUUxp
dGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNlKAorICBjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGRiTmFtZSwgY29uc3QgU3RyaW5nICZvcmlnaW5JZGVudGlmaWVyLCBT
UUxpdGVEYXRhYmFzZSopCit7CisgICAgLy8gQ2hyb21pdW0gbmFtZXMgREIgZmlsZXMgYmFzZWQg
b24gb3JpZ2luIGFuZCBEQiBuYW1lIG9ubHkKKyAgICByZXR1cm4gb3JpZ2luSWRlbnRpZmllciAr
ICJfIiArIGRiTmFtZSArICIuZGIiOworfQorCitTdHJpbmcgU1FMaXRlRmlsZVN5c3RlbTo6YXBw
ZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZp
bGVOYW1lKQoreworICAgIC8vIENocm9taXVtIHNhdmVzIGFsbCBEQiBmaWxlcyBpbiB0aGUgc2Ft
ZSBkaXJlY3RvcnkgKGtub3duIGJ5CisgICAgLy8gdGhlIGJyb3dzZXIgcHJvY2VzcyBvbmx5KTsg
YXMgZmFyIGFzIHRoZSByZW5kZXJlciBwcm9jZXNzZXMKKyAgICAvLyBhcmUgY29uY2VybmVkLCBh
bGwgREIgZmlsZXMgYXJlIHNhdmVkIGluIHRoZSAiY3VycmVudCIgZGlyZWN0b3J5CisgICAgcmV0
dXJuIGZpbGVOYW1lOworfQorCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNl
RGlyZWN0b3J5RXhpc3RzKGNvbnN0IFN0cmluZyYpCit7CisgICAgLy8gaWYgdGhlIGRpcmVjdG9y
eSB3aGVyZSBDaHJvbWl1bSBzdG9yZXMgdGhlIGRhdGFiYXNlcyBkb2VzIG5vdCBleGlzdCwKKyAg
ICAvLyBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSB0aGUgYnJvd3NlciBwcm9j
ZXNzOworICAgIC8vIHNvIGFzIGZhciBhcyB0aGUgV2ViS2l0IGNvZGUgaXMgY29uY2VybmVkLCB0
aGlzIGRpcmVjdG9yeSBhbHdheXMgZXhpc3RzCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
U1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYs
IGJvb2wpCit7CisgICAgLy8gYWxsIGRhdGFiYXNlIGRpcmVjdG9yaWVzIHdpbGwgYmUgY3JlYXRl
ZCBhcyBuZWVkZWQgYnkgdGhlIGJyb3dzZXIgcHJvY2VzcworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkoY29u
c3QgU3RyaW5nJikKK3sKKyAgICAvLyBDaHJvbWl1bSBkb2VzIG5vdCB1c2UgYSBzZXBhcmF0ZSBk
aXJlY3RvcnkgZm9yIGVhY2ggZGF0YWJhc2UsCisgICAgLy8gc28gdGhlcmUncyBub3RoaW5nIHRv
IGRvIGhlcmUKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpk
ZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKK3sKKyAgICAvLyByZXR1
cm4gdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZXJyb3IgY29kZSByZXR1cm5lZCBieQorICAgIC8v
IENocm9taXVtQnJpZGdlOjpkZWxldGVEYXRhYmFzZSgpIGlzIDAKKyAgICByZXR1cm4gKCFDaHJv
bWl1bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGZpbGVOYW1lKSk7Cit9CisKK2xvbmcgbG9u
ZyBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmls
ZU5hbWUpCit7CisgICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVTaXpl
KGZpbGVOYW1lKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtTGludXguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0
ZW1DaHJvbWl1bUxpbnV4LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vc3Fs
L2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bUxpbnV4LmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxl
U3lzdGVtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTUUxpdGVGaWxlU3lzdGVt
OjpyZWdpc3RlclNRTGl0ZVZGUygpCit7CisgICAgLy8gc3R1YiBmb3IgcmVnaXN0ZXJpbmcgQ2hy
b21pdW0ncyBTUUxpdGUgVkZTIGZvciBMaW51eAorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hy
b21pdW1NYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVt
L1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bU1hYy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1NYWMuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNRTGl0ZUZpbGVTeXN0ZW0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFNRTGl0
ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKCkKK3sKKyAgICAvLyBzdHViIGZvciByZWdp
c3RlcmluZyBDaHJvbWl1bSdzIFNRTGl0ZSBWRlMgZm9yIE1hYworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxl
U3lzdGVtQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3Fs
L2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1X
aW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRn
ZS5oIgorI2luY2x1ZGUgPHNxbGl0ZTMuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKy8vIERl
ZmluZWQgaW4gQ2hyb21pdW0ncyBjb2RlYmFzZSBpbiB0aGlyZF9wYXJ0eS9zcWxpdGUvc3JjL29z
X3dpbi5jCitleHRlcm4gIkMiIHsKK2ludCBjaHJvbWl1bV9zcWxpdGUzX2luaXRpYWxpemVfd2lu
X3NxbGl0ZTNfZmlsZShzcWxpdGUzX2ZpbGUqIGZpbGUsIEhBTkRMRSBoYW5kbGUpOworfQorCisv
LyBDaHJvbWl1bSdzIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gb2YgU1FMaXRlIFZGUworbmFtZXNw
YWNlIHsKKworLy8gT3BlbnMgYSBmaWxlLgorLy8KKy8vIHZmcyAtIHBvaW50ZXIgdG8gdGhlIHNx
bGl0ZTNfdmZzIG9iamVjdC4KKy8vIGZpbGVOYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisv
LyBpZCAtIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3aWxsIG1hbmlwdWxhdGUgdGhlIG5ld2x5IG9wZW5l
ZCBmaWxlLgorLy8gZGVzaXJlZEZsYWdzIC0gdGhlIGRlc2lyZWQgb3BlbiBtb2RlIGZsYWdzLgor
Ly8gdXNlZEZsYWdzIC0gdGhlIGFjdHVhbCBvcGVuIG1vZGUgZmxhZ3MgdGhhdCB3ZXJlIHVzZWQu
CitpbnQgY2hyb21pdW1PcGVuKHNxbGl0ZTNfdmZzKiwgY29uc3QgY2hhciogZmlsZU5hbWUsCisg
ICAgICAgICAgICAgICAgIHNxbGl0ZTNfZmlsZSogaWQsIGludCBkZXNpcmVkRmxhZ3MsIGludCog
dXNlZEZsYWdzKQoreworICAgIEhBTkRMRSBoID0gV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRh
dGFiYXNlT3BlbkZpbGUoZmlsZU5hbWUsIGRlc2lyZWRGbGFncyk7CisgICAgaWYgKGggPT0gSU5W
QUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgaWYgKGRlc2lyZWRGbGFncyAmIFNRTElURV9P
UEVOX1JFQURXUklURSkgeworICAgICAgICAgICAgaW50IG5ld0ZsYWdzID0gKGRlc2lyZWRGbGFn
cyB8IFNRTElURV9PUEVOX1JFQURPTkxZKSAmIH5TUUxJVEVfT1BFTl9SRUFEV1JJVEU7CisgICAg
ICAgICAgICByZXR1cm4gY2hyb21pdW1PcGVuKDAsIGZpbGVOYW1lLCBpZCwgbmV3RmxhZ3MsIHVz
ZWRGbGFncyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIFNRTElURV9DQU5U
T1BFTjsKKyAgICB9CisgICAgaWYgKHVzZWRGbGFncykgeworICAgICAgICBpZiAoZGVzaXJlZEZs
YWdzICYgU1FMSVRFX09QRU5fUkVBRFdSSVRFKQorICAgICAgICAgICAgKnVzZWRGbGFncyA9IFNR
TElURV9PUEVOX1JFQURXUklURTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKnVzZWRGbGFn
cyA9IFNRTElURV9PUEVOX1JFQURPTkxZOworICAgIH0KKworICAgIGNocm9taXVtX3NxbGl0ZTNf
aW5pdGlhbGl6ZV93aW5fc3FsaXRlM19maWxlKGlkLCBoKTsKKyAgICByZXR1cm4gU1FMSVRFX09L
OworfQorCisvLyBEZWxldGVzIHRoZSBnaXZlbiBmaWxlLgorLy8KKy8vIHZmcyAtIHBvaW50ZXIg
dG8gdGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KKy8vIGZpbGVOYW1lIC0gdGhlIG5hbWUgb2YgdGhl
IGZpbGUuCisvLyBzeW5jRGlyIC0gZGV0ZXJtaW5lcyBpZiB0aGUgZGlyZWN0b3J5IHRvIHdoaWNo
IHRoaXMgZmlsZSBiZWxvbmdzCisvLyAgICAgICAgICAgc2hvdWxkIGJlIHN5bmNoZWQgYWZ0ZXIg
dGhlIGZpbGUgaXMgZGVsZXRlZC4KK2ludCBjaHJvbWl1bURlbGV0ZShzcWxpdGUzX3ZmcyosIGNv
bnN0IGNoYXIqIGZpbGVOYW1lLCBpbnQpCit7CisgICAgYm9vbCBkZWxldGVkID0gV2ViQ29yZTo6
Q2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlRGVsZXRlRmlsZShmaWxlTmFtZSk7CisgICAgRFdPUkQg
cmMgPSBXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhm
aWxlTmFtZSk7CisgICAgcmV0dXJuICgocmMgPT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpICYm
IGRlbGV0ZWQgPworICAgICAgICAgICAgU1FMSVRFX09LIDogU1FMSVRFX0lPRVJSX0RFTEVURSk7
Cit9CisKKy8vIENoZWNrIHRoZSBleGlzdGFuY2UgYW5kIHN0YXR1cyBvZiB0aGUgZ2l2ZW4gZmls
ZS4KKy8vCisvLyB2ZnMgLSBwb2ludGVyIHRvIHRoZSBzcWxpdGUzX3ZmcyBvYmplY3QuCisvLyBm
aWxlTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorLy8gZmxhZyAtIHRoZSB0eXBlIG9mIHRl
c3QgdG8gbWFrZSBvbiB0aGlzIGZpbGUuCisvLyByZXMgLSB0aGUgcmVzdWx0LgoraW50IGNocm9t
aXVtQWNjZXNzKHNxbGl0ZTNfdmZzKiwgY29uc3QgY2hhciogZmlsZU5hbWUsIGludCBmbGFnLCBp
bnQqIHJlcykKK3sKKyAgICBEV09SRCBhdHRyID0gV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRh
dGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMoZmlsZU5hbWUpOworICAgIHN3aXRjaCAoZmxhZykgewor
ICAgIGNhc2UgU1FMSVRFX0FDQ0VTU19SRUFEOgorICAgIGNhc2UgU1FMSVRFX0FDQ0VTU19FWElT
VFM6CisgICAgICAgICpyZXMgPSAoYXR0ciAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU1FMSVRFX0FDQ0VTU19SRUFEV1JJVEU6CisgICAgICAg
ICpyZXMgPSAoKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkgPT0gMCk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBTUUxJVEVfRVJST1I7CisgICAg
fQorCisgICAgcmV0dXJuIFNRTElURV9PSzsKK30KKworLy8gVHVybnMgYSByZWxhdGl2ZSBwYXRo
bmFtZSBpbnRvIGEgZnVsbCBwYXRobmFtZS4KKy8vCisvLyB2ZnMgLSBwb2ludGVyIHRvIHRoZSBz
cWxpdGUzX3ZmcyBvYmplY3QuCisvLyByZWxhdGl2ZVBhdGggLSB0aGUgcmVsYXRpdmUgcGF0aC4K
Ky8vIGJ1ZlNpemUgLSB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlciBpbiBieXRlcy4KKy8v
IGFic29sdXRlUGF0aCAtIHRoZSBvdXRwdXQgYnVmZmVyIHdoZXJlIHRoZSBhYnNvbHV0ZSBwYXRo
IHdpbGwgYmUgc3RvcmVkLgoraW50IGNocm9taXVtRnVsbFBhdGhuYW1lKHNxbGl0ZTNfdmZzKiB2
ZnMsIGNvbnN0IGNoYXIqIHJlbGF0aXZlUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQsIGNoYXIqIGFic29sdXRlUGF0aCkKK3sKKyAgICAvLyBUaGUgcmVuZGVyZXIgcHJvY2VzcyBk
b2Vzbid0IG5lZWQgdG8ga25vdyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZmlsZQorICAgIHNx
bGl0ZTNfc25wcmludGYodmZzLT5teFBhdGhuYW1lLCBhYnNvbHV0ZVBhdGgsICIlcyIsIHJlbGF0
aXZlUGF0aCk7CisgICAgcmV0dXJuIFNRTElURV9PSzsKK30KKworI2lmbmRlZiBTUUxJVEVfT01J
VF9MT0FEX0VYVEVOU0lPTgorLy8gUmV0dXJucyBOVUxMLCB0aHVzIGRpc2FsbG93aW5nIGxvYWRp
bmcgbGlicmFyaWVzIGluIHRoZSByZW5kZXJlciBwcm9jZXNzLgorLy8KKy8vIHZmcyAtIHBvaW50
ZXIgdG8gdGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KKy8vIGZpbGVOYW1lIC0gdGhlIG5hbWUgb2Yg
dGhlIHNoYXJlZCBsaWJyYXJ5IGZpbGUuCit2b2lkKiBjaHJvbWl1bURsT3BlbihzcWxpdGUzX3Zm
cyosIGNvbnN0IGNoYXIqKQoreworICAgIHJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgY2hy
b21pdW1EbE9wZW4gMAorI2VuZGlmIC8vIFNRTElURV9PTUlUX0xPQURfRVhURU5TSU9OCisKK30g
Ly8gbmFtZXNwYWNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTUUxpdGVGaWxlU3lz
dGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpCit7CisgICAgc3FsaXRlM192ZnMqIHdpbjMyX3ZmcyA9
IHNxbGl0ZTNfdmZzX2ZpbmQoIndpbjMyIik7CisgICAgc3RhdGljIHNxbGl0ZTNfdmZzIGNocm9t
aXVtX3ZmcyA9IHsKKyAgICAgICAgMSwKKyAgICAgICAgd2luMzJfdmZzLT5zek9zRmlsZSwKKyAg
ICAgICAgd2luMzJfdmZzLT5teFBhdGhuYW1lLAorICAgICAgICAwLAorICAgICAgICAiY2hyb21p
dW1fdmZzIiwKKyAgICAgICAgMCwKKyAgICAgICAgY2hyb21pdW1PcGVuLAorICAgICAgICBjaHJv
bWl1bURlbGV0ZSwKKyAgICAgICAgY2hyb21pdW1BY2Nlc3MsCisgICAgICAgIGNocm9taXVtRnVs
bFBhdGhuYW1lLAorICAgICAgICBjaHJvbWl1bURsT3BlbiwKKyAgICAgICAgd2luMzJfdmZzLT54
RGxFcnJvciwKKyAgICAgICAgd2luMzJfdmZzLT54RGxTeW0sCisgICAgICAgIHdpbjMyX3Zmcy0+
eERsQ2xvc2UsCisgICAgICAgIHdpbjMyX3Zmcy0+eFJhbmRvbW5lc3MsCisgICAgICAgIHdpbjMy
X3Zmcy0+eFNsZWVwLAorICAgICAgICB3aW4zMl92ZnMtPnhDdXJyZW50VGltZSwKKyAgICAgICAg
d2luMzJfdmZzLT54R2V0TGFzdEVycm9yCisgICAgfTsKKyAgICBzcWxpdGUzX3Zmc19yZWdpc3Rl
cigmY2hyb21pdW1fdmZzLCAxKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32983</attachid>
            <date>2009-07-17 15:42:19 -0700</date>
            <delta_ts>2009-07-17 15:43:43 -0700</delta_ts>
            <desc>same patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>18445</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjA1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDktMDctMTcgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgdGhlIFdpbiBTUUxpdGUgVkZTIGltcGxlbWVudGF0aW9uIGZvciBDaHJvbWl1bSwg
YW5kIHN0dWJzCisgICAgICAgIGZvciB0aGUgTWFjIGFuZCBMaW51eCBWRlNzLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk0MAorCisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJp
ZGdlLmg6CisgICAgICAgICogcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1D
aHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxp
dGVGaWxlU3lzdGVtQ2hyb21pdW1MaW51eC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1NYWMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtV2lu
LmNwcDogQWRkZWQuCisKIDIwMDktMDctMTcgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biA0NjA0NSkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yMzE0
LDEyICsyMzE0LDE2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vc3FsL1NRTGl0ZUF1dGhvcml6
ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9zcWwv
U1FMaXRlRmlsZVN5c3RlbS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9zcWwvU1FMaXRlU3Rh
dGVtZW50LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21p
dW1MaW51eC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVG
aWxlU3lzdGVtQ2hyb21pdW1NYWMuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9zcWwvY2hy
b21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtV2luLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vc3ltYmlhbi9GbG9hdFBvaW50U3ltYmlhbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL3N5bWJpYW4vRmxvYXRSZWN0U3ltYmlhbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L3N5bWJpYW4vSW50UG9pbnRTeW1iaWFuLmNwcCcsCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0Nocm9taXVtQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCShyZXZpc2lvbiA0NjA0NSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogI2lmbmRlZiBDaHJvbWl1bUJyaWRnZV9oCiAjZGVmaW5lIENocm9taXVtQnJpZGdl
X2gKIAorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJMaW5rSGFzaC5oIgogI2lu
Y2x1ZGUgIlBhc3NSZWZQdHIuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkUHJpdmF0ZS5oIgpAQCAt
MTc3LDYgKzE3OCwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFdpZGdldCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAgICAgICAgIHN0YXRpYyB2b2lkIHdpZGdldFNldEN1cnNvcihXaWRnZXQqLCBjb25zdCBD
dXJzb3ImKTsKICAgICAgICAgc3RhdGljIHZvaWQgd2lkZ2V0U2V0Rm9jdXMoV2lkZ2V0Kik7CisK
KyAgICAgICAgLy8gSFRNTDUgREIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICAgICAg
Ly8gT3BlbnMgYSBkYXRhYmFzZSBmaWxlCisgICAgICAgIC8vICdkZXNpcmVkRmxhZ3MnIGlzIGEg
Y29sbGVjdGlvbiBvZiBPUidkIFNRTGl0ZSBjb25zdGFudHMgdGhhdAorICAgICAgICAvLyBkZXRl
cm1pbmUgaG93IHRoZSBmaWxlIHNob3VsZCBiZSBvcGVuZWQKKyAgICAgICAgc3RhdGljIFBsYXRm
b3JtRmlsZUhhbmRsZSBkYXRhYmFzZU9wZW5GaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGlu
dCBkZXNpcmVkRmxhZ3MpOworCisgICAgICAgIC8vIERlbGV0ZXMgYSBkYXRhYmFzZSBmaWxlCisg
ICAgICAgIC8vIFJldHVybnMgJ3RydWUnIGlmIHRoZSBmaWxlIHdhcyBkZWxldGVkOyAnZmFsc2Un
IG90aGVyd2lzZQorICAgICAgICBzdGF0aWMgYm9vbCBkYXRhYmFzZURlbGV0ZUZpbGUoY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSk7CisKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgZmlsZSBhdHRyaWJ1
dGVzIG9mIHRoZSBnaXZlbiBkYXRhYmFzZSBmaWxlCisgICAgICAgIHN0YXRpYyBsb25nIGRhdGFi
YXNlR2V0RmlsZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisKKyAgICAgICAg
Ly8gUmV0dXJucyBzaXplIG9mIHRoZSBnaXZlbiBmaWxlCisgICAgICAgIHN0YXRpYyBsb25nIGxv
bmcgZGF0YWJhc2VHZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKKyNlbmRpZgog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
c3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZp
bGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUg
IkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIlNRTGl0
ZURhdGFiYXNlLmgiCisjaW5jbHVkZSA8c3FsaXRlMy5oPgorCisjaWZuZGVmIFNRTElURV9PUEVO
X0ZVTExNVVRFWAorI2RlZmluZSBTUUxJVEVfT1BFTl9GVUxMTVVURVggMHgwMDAxMDAwMAorI2Vu
ZGlmCisKKy8vIFNRTGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKCkgaXMgaW1wbGVt
ZW50ZWQgaW4gdGhlCisvLyBwbGF0Zm9ybS1zcGVjaWZpYyBmaWxlcyBTUUxpdGVGaWxlU3lzdGVt
Q2hyb21pdW17V2lufFBvc2l4fS5jcHAKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU1FMaXRlRmls
ZVN5c3RlbTo6U1FMaXRlRmlsZVN5c3RlbSgpCit7Cit9CisKK2ludCBTUUxpdGVGaWxlU3lzdGVt
OjpvcGVuRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgc3FsaXRlMyoqIGRhdGFiYXNl
KQoreworICAgIC8vIG9wZW4gZGF0YWJhc2VzIHVzaW5nIENocm9taXVtJ3MgVkZTCisgICAgcmV0
dXJuIHNxbGl0ZTNfb3Blbl92MihmaWxlTmFtZS51dGY4KCkuZGF0YSgpLCBkYXRhYmFzZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNRTElURV9PUEVOX1JFQURXUklURSB8IFNRTElURV9P
UEVOX0NSRUFURSB8IFNRTElURV9PUEVOX0ZVTExNVVRFWCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJjaHJvbWl1bV92ZnMiKTsKK30KKworU3RyaW5nIFNRTGl0ZUZpbGVTeXN0ZW06Omdl
dEZpbGVOYW1lRm9yTmV3RGF0YWJhc2UoCisgIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYg
ZGJOYW1lLCBjb25zdCBTdHJpbmcgJm9yaWdpbklkZW50aWZpZXIsIFNRTGl0ZURhdGFiYXNlKikK
K3sKKyAgICAvLyBDaHJvbWl1bSBuYW1lcyBEQiBmaWxlcyBiYXNlZCBvbiBvcmlnaW4gYW5kIERC
IG5hbWUgb25seQorICAgIHJldHVybiBvcmlnaW5JZGVudGlmaWVyICsgIl8iICsgZGJOYW1lICsg
Ii5kYiI7Cit9CisKK1N0cmluZyBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVO
YW1lVG9QYXRoKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCit7CisgICAg
Ly8gQ2hyb21pdW0gc2F2ZXMgYWxsIERCIGZpbGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSAoa25v
d24gYnkKKyAgICAvLyB0aGUgYnJvd3NlciBwcm9jZXNzIG9ubHkpOyBhcyBmYXIgYXMgdGhlIHJl
bmRlcmVyIHByb2Nlc3NlcworICAgIC8vIGFyZSBjb25jZXJuZWQsIGFsbCBEQiBmaWxlcyBhcmUg
c2F2ZWQgaW4gdGhlICJjdXJyZW50IiBkaXJlY3RvcnkKKyAgICByZXR1cm4gZmlsZU5hbWU7Cit9
CisKK2Jvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMo
Y29uc3QgU3RyaW5nJikKK3sKKyAgICAvLyBpZiB0aGUgZGlyZWN0b3J5IHdoZXJlIENocm9taXVt
IHN0b3JlcyB0aGUgZGF0YWJhc2VzIGRvZXMgbm90IGV4aXN0LAorICAgIC8vIGl0IHdpbGwgYmUg
YXV0b21hdGljYWxseSBjcmVhdGVkIGJ5IHRoZSBicm93c2VyIHByb2Nlc3M7CisgICAgLy8gc28g
YXMgZmFyIGFzIHRoZSBXZWJLaXQgY29kZSBpcyBjb25jZXJuZWQsIHRoaXMgZGlyZWN0b3J5IGFs
d2F5cyBleGlzdHMKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTUUxpdGVGaWxlU3lzdGVt
OjplbnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiwgYm9vbCkKK3sKKyAgICAv
LyBhbGwgZGF0YWJhc2UgZGlyZWN0b3JpZXMgd2lsbCBiZSBjcmVhdGVkIGFzIG5lZWRlZCBieSB0
aGUgYnJvd3NlciBwcm9jZXNzCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1FMaXRlRmls
ZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmKQorewor
ICAgIC8vIENocm9taXVtIGRvZXMgbm90IHVzZSBhIHNlcGFyYXRlIGRpcmVjdG9yeSBmb3IgZWFj
aCBkYXRhYmFzZSwKKyAgICAvLyBzbyB0aGVyZSdzIG5vdGhpbmcgdG8gZG8gaGVyZQorICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmls
ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQoreworICAgIC8vIHJldHVybiB0cnVlIGlmIGFuZCBv
bmx5IGlmIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5CisgICAgLy8gQ2hyb21pdW1CcmlkZ2U6
OmRlbGV0ZURhdGFiYXNlKCkgaXMgMAorICAgIHJldHVybiAoIUNocm9taXVtQnJpZGdlOjpkYXRh
YmFzZURlbGV0ZUZpbGUoZmlsZU5hbWUpKTsKK30KKworbG9uZyBsb25nIFNRTGl0ZUZpbGVTeXN0
ZW06OmdldERhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKK3sKKyAgICBy
ZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZVNpemUoZmlsZU5hbWUpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJv
bWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1MaW51eC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtTGludXgu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRl
RmlsZVN5c3RlbUNocm9taXVtTGludXguY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFNRTGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRl
VkZTKCkKK3sKKyAgICAvLyBzdHViIGZvciByZWdpc3RlcmluZyBDaHJvbWl1bSdzIFNRTGl0ZSBW
RlMgZm9yIExpbnV4Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bU1hYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3Rl
bUNocm9taXVtTWFjLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vc3FsL2No
cm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bU1hYy5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3Rl
bS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgU1FMaXRlRmlsZVN5c3RlbTo6cmVn
aXN0ZXJTUUxpdGVWRlMoKQoreworICAgIC8vIHN0dWIgZm9yIHJlZ2lzdGVyaW5nIENocm9taXVt
J3MgU1FMaXRlIFZGUyBmb3IgTWFjCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRl
RmlsZVN5c3RlbUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
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
ZUZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSA8
c3FsaXRlMy5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworLy8gRGVmaW5lZCBpbiBDaHJvbWl1
bSdzIGNvZGViYXNlIGluIHRoaXJkX3BhcnR5L3NxbGl0ZS9zcmMvb3Nfd2luLmMKK2V4dGVybiAi
QyIgeworaW50IGNocm9taXVtX3NxbGl0ZTNfaW5pdGlhbGl6ZV93aW5fc3FsaXRlM19maWxlKHNx
bGl0ZTNfZmlsZSogZmlsZSwgSEFORExFIGhhbmRsZSk7Cit9CisKKy8vIENocm9taXVtJ3MgV2lu
ZG93cyBpbXBsZW1lbnRhdGlvbiBvZiBTUUxpdGUgVkZTCituYW1lc3BhY2UgeworCisvLyBPcGVu
cyBhIGZpbGUuCisvLworLy8gdmZzIC0gcG9pbnRlciB0byB0aGUgc3FsaXRlM192ZnMgb2JqZWN0
LgorLy8gZmlsZU5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKy8vIGlkIC0gdGhlIHN0cnVj
dHVyZSB0aGF0IHdpbGwgbWFuaXB1bGF0ZSB0aGUgbmV3bHkgb3BlbmVkIGZpbGUuCisvLyBkZXNp
cmVkRmxhZ3MgLSB0aGUgZGVzaXJlZCBvcGVuIG1vZGUgZmxhZ3MuCisvLyB1c2VkRmxhZ3MgLSB0
aGUgYWN0dWFsIG9wZW4gbW9kZSBmbGFncyB0aGF0IHdlcmUgdXNlZC4KK2ludCBjaHJvbWl1bU9w
ZW4oc3FsaXRlM192ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwKKyAgICAgICAgICAgICAgICAg
c3FsaXRlM19maWxlKiBpZCwgaW50IGRlc2lyZWRGbGFncywgaW50KiB1c2VkRmxhZ3MpCit7Cisg
ICAgSEFORExFIGggPSBXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VPcGVuRmlsZShm
aWxlTmFtZSwgZGVzaXJlZEZsYWdzKTsKKyAgICBpZiAoaCA9PSBJTlZBTElEX0hBTkRMRV9WQUxV
RSkgeworICAgICAgICBpZiAoZGVzaXJlZEZsYWdzICYgU1FMSVRFX09QRU5fUkVBRFdSSVRFKSB7
CisgICAgICAgICAgICBpbnQgbmV3RmxhZ3MgPSAoZGVzaXJlZEZsYWdzIHwgU1FMSVRFX09QRU5f
UkVBRE9OTFkpICYgflNRTElURV9PUEVOX1JFQURXUklURTsKKyAgICAgICAgICAgIHJldHVybiBj
aHJvbWl1bU9wZW4oMCwgZmlsZU5hbWUsIGlkLCBuZXdGbGFncywgdXNlZEZsYWdzKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4gU1FMSVRFX0NBTlRPUEVOOworICAgIH0KKyAg
ICBpZiAodXNlZEZsYWdzKSB7CisgICAgICAgIGlmIChkZXNpcmVkRmxhZ3MgJiBTUUxJVEVfT1BF
Tl9SRUFEV1JJVEUpCisgICAgICAgICAgICAqdXNlZEZsYWdzID0gU1FMSVRFX09QRU5fUkVBRFdS
SVRFOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqdXNlZEZsYWdzID0gU1FMSVRFX09QRU5f
UkVBRE9OTFk7CisgICAgfQorCisgICAgY2hyb21pdW1fc3FsaXRlM19pbml0aWFsaXplX3dpbl9z
cWxpdGUzX2ZpbGUoaWQsIGgpOworICAgIHJldHVybiBTUUxJVEVfT0s7Cit9CisKKy8vIERlbGV0
ZXMgdGhlIGdpdmVuIGZpbGUuCisvLworLy8gdmZzIC0gcG9pbnRlciB0byB0aGUgc3FsaXRlM192
ZnMgb2JqZWN0LgorLy8gZmlsZU5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKy8vIHN5bmNE
aXIgLSBkZXRlcm1pbmVzIGlmIHRoZSBkaXJlY3RvcnkgdG8gd2hpY2ggdGhpcyBmaWxlIGJlbG9u
Z3MKKy8vICAgICAgICAgICBzaG91bGQgYmUgc3luY2hlZCBhZnRlciB0aGUgZmlsZSBpcyBkZWxl
dGVkLgoraW50IGNocm9taXVtRGVsZXRlKHNxbGl0ZTNfdmZzKiwgY29uc3QgY2hhciogZmlsZU5h
bWUsIGludCkKK3sKKyAgICBib29sIGRlbGV0ZWQgPSBXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6
ZGF0YWJhc2VEZWxldGVGaWxlKGZpbGVOYW1lKTsKKyAgICBEV09SRCByYyA9IFdlYkNvcmU6OkNo
cm9taXVtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGZpbGVOYW1lKTsKKyAgICBy
ZXR1cm4gKChyYyA9PSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykgJiYgZGVsZXRlZCA/CisgICAg
ICAgICAgICBTUUxJVEVfT0sgOiBTUUxJVEVfSU9FUlJfREVMRVRFKTsKK30KKworLy8gQ2hlY2sg
dGhlIGV4aXN0YW5jZSBhbmQgc3RhdHVzIG9mIHRoZSBnaXZlbiBmaWxlLgorLy8KKy8vIHZmcyAt
IHBvaW50ZXIgdG8gdGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KKy8vIGZpbGVOYW1lIC0gdGhlIG5h
bWUgb2YgdGhlIGZpbGUuCisvLyBmbGFnIC0gdGhlIHR5cGUgb2YgdGVzdCB0byBtYWtlIG9uIHRo
aXMgZmlsZS4KKy8vIHJlcyAtIHRoZSByZXN1bHQuCitpbnQgY2hyb21pdW1BY2Nlc3Moc3FsaXRl
M192ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50IGZsYWcsIGludCogcmVzKQoreworICAg
IERXT1JEIGF0dHIgPSBXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0
cmlidXRlcyhmaWxlTmFtZSk7CisgICAgc3dpdGNoIChmbGFnKSB7CisgICAgY2FzZSBTUUxJVEVf
QUNDRVNTX1JFQUQ6CisgICAgY2FzZSBTUUxJVEVfQUNDRVNTX0VYSVNUUzoKKyAgICAgICAgKnJl
cyA9IChhdHRyICE9IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTUUxJVEVfQUNDRVNTX1JFQURXUklURToKKyAgICAgICAgKnJlcyA9ICgoYXR0ciAm
IEZJTEVfQVRUUklCVVRFX1JFQURPTkxZKSA9PSAwKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIFNRTElURV9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4g
U1FMSVRFX09LOworfQorCisvLyBUdXJucyBhIHJlbGF0aXZlIHBhdGhuYW1lIGludG8gYSBmdWxs
IHBhdGhuYW1lLgorLy8KKy8vIHZmcyAtIHBvaW50ZXIgdG8gdGhlIHNxbGl0ZTNfdmZzIG9iamVj
dC4KKy8vIHJlbGF0aXZlUGF0aCAtIHRoZSByZWxhdGl2ZSBwYXRoLgorLy8gYnVmU2l6ZSAtIHRo
ZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyIGluIGJ5dGVzLgorLy8gYWJzb2x1dGVQYXRoIC0g
dGhlIG91dHB1dCBidWZmZXIgd2hlcmUgdGhlIGFic29sdXRlIHBhdGggd2lsbCBiZSBzdG9yZWQu
CitpbnQgY2hyb21pdW1GdWxsUGF0aG5hbWUoc3FsaXRlM192ZnMqIHZmcywgY29uc3QgY2hhciog
cmVsYXRpdmVQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgY2hhciogYWJzb2x1
dGVQYXRoKQoreworICAgIC8vIFRoZSByZW5kZXJlciBwcm9jZXNzIGRvZXNuJ3QgbmVlZCB0byBr
bm93IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlCisgICAgc3FsaXRlM19zbnByaW50Zih2
ZnMtPm14UGF0aG5hbWUsIGFic29sdXRlUGF0aCwgIiVzIiwgcmVsYXRpdmVQYXRoKTsKKyAgICBy
ZXR1cm4gU1FMSVRFX09LOworfQorCisjaWZuZGVmIFNRTElURV9PTUlUX0xPQURfRVhURU5TSU9O
CisvLyBSZXR1cm5zIE5VTEwsIHRodXMgZGlzYWxsb3dpbmcgbG9hZGluZyBsaWJyYXJpZXMgaW4g
dGhlIHJlbmRlcmVyIHByb2Nlc3MuCisvLworLy8gdmZzIC0gcG9pbnRlciB0byB0aGUgc3FsaXRl
M192ZnMgb2JqZWN0LgorLy8gZmlsZU5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgc2hhcmVkIGxpYnJh
cnkgZmlsZS4KK3ZvaWQqIGNocm9taXVtRGxPcGVuKHNxbGl0ZTNfdmZzKiwgY29uc3QgY2hhciop
Cit7CisgICAgcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBjaHJvbWl1bURsT3BlbiAwCisj
ZW5kaWYgLy8gU1FMSVRFX09NSVRfTE9BRF9FWFRFTlNJT04KKworfSAvLyBuYW1lc3BhY2UKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFNRTGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FM
aXRlVkZTKCkKK3sKKyAgICBzcWxpdGUzX3Zmcyogd2luMzJfdmZzID0gc3FsaXRlM192ZnNfZmlu
ZCgid2luMzIiKTsKKyAgICBzdGF0aWMgc3FsaXRlM192ZnMgY2hyb21pdW1fdmZzID0geworICAg
ICAgICAxLAorICAgICAgICB3aW4zMl92ZnMtPnN6T3NGaWxlLAorICAgICAgICB3aW4zMl92ZnMt
Pm14UGF0aG5hbWUsCisgICAgICAgIDAsCisgICAgICAgICJjaHJvbWl1bV92ZnMiLAorICAgICAg
ICAwLAorICAgICAgICBjaHJvbWl1bU9wZW4sCisgICAgICAgIGNocm9taXVtRGVsZXRlLAorICAg
ICAgICBjaHJvbWl1bUFjY2VzcywKKyAgICAgICAgY2hyb21pdW1GdWxsUGF0aG5hbWUsCisgICAg
ICAgIGNocm9taXVtRGxPcGVuLAorICAgICAgICB3aW4zMl92ZnMtPnhEbEVycm9yLAorICAgICAg
ICB3aW4zMl92ZnMtPnhEbFN5bSwKKyAgICAgICAgd2luMzJfdmZzLT54RGxDbG9zZSwKKyAgICAg
ICAgd2luMzJfdmZzLT54UmFuZG9tbmVzcywKKyAgICAgICAgd2luMzJfdmZzLT54U2xlZXAsCisg
ICAgICAgIHdpbjMyX3Zmcy0+eEN1cnJlbnRUaW1lLAorICAgICAgICB3aW4zMl92ZnMtPnhHZXRM
YXN0RXJyb3IKKyAgICB9OworICAgIHNxbGl0ZTNfdmZzX3JlZ2lzdGVyKCZjaHJvbWl1bV92ZnMs
IDEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="17325"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>