<?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>48511</bug_id>
          
          <creation_ts>2010-10-28 04:50:52 -0700</creation_ts>
          <short_desc>[GTK] Implement Process/Thread Launcher classes and WebProcessGtkMain for WebKit2</short_desc>
          <delta_ts>2011-01-20 05:47:25 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>52805</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Amruth Raj">amruthraj</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>kbalazs</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ravi.kasibhatla</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>300996</commentid>
    <comment_count>0</comment_count>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2010-10-28 04:50:52 -0700</bug_when>
    <thetext>Implement Process/Thread Launcher classes and WebProcessGtkMain for WebKit2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301716</commentid>
    <comment_count>1</comment_count>
      <attachid>72325</attachid>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2010-10-29 06:24:35 -0700</bug_when>
    <thetext>Created attachment 72325
Implements Process/Thread Launcher classes and WebProcessGtkMain</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301745</commentid>
    <comment_count>2</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2010-10-29 07:15:43 -0700</bug_when>
    <thetext>Adding myself to the CC list for this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303424</commentid>
    <comment_count>3</comment_count>
      <attachid>72686</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2010-11-02 09:46:13 -0700</bug_when>
    <thetext>Created attachment 72686
ProcessLauncher and ThreadLauncher implementation for WebKit2 GTK port

Contains ProcessLauncher and ThreadLauncher implementation for WebKit2 GTK port.
Also contains the WebKitProcessMain class implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327946</commentid>
    <comment_count>4</comment_count>
      <attachid>72686</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-12-30 09:35:03 -0800</bug_when>
    <thetext>Comment on attachment 72686
ProcessLauncher and ThreadLauncher implementation for WebKit2 GTK port

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

Looks good! Some comments below.

&gt; WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:55
&gt; +    String commandLine(WEBKIT_WEB_PROCESS_PATH);

I don&apos;t understand why you are using a String here. Why not just use WEBKIT_WEB_PROCESS_PATH below?

&gt; WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:68
&gt; +        ASSERT_NOT_REACHED();
&gt; +    }

I think it&apos;s better to try to handle the error here somehow, even if it&apos;s just printing a message.

&gt; WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:81
&gt; +    notImplemented();

Is this not implemented or simply an empty implementation?

&gt; WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp:43
&gt; +    // FIXME: Implement.

This looks like a good place for notImplemented() :) I think this file is also missing stubs for platformShutdown and platformClearResourceCaches.

&gt; WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp:54
&gt; +    g_type_init();

Do you also need to call g_thread_init() here? Only after 2.24 does g_type_init() call g_thread_init().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328297</commentid>
    <comment_count>5</comment_count>
      <attachid>77753</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-01 12:42:01 -0800</bug_when>
    <thetext>Created attachment 77753
ProcessLauncher and ThreadLauncher implementation for WebKit2 GTK port

ProcessLauncher class implementation for WebKit2 GTK port. Also has stubbed implements port specific virtual functions of WebProcess.h, ThreadLauncher class.
The main() function implementation and WebProcessMain() implementation for WebKitWebProcess binary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328299</commentid>
    <comment_count>6</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-01 12:45:22 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 72686 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72686&amp;action=review
&gt; 
&gt; Looks good! Some comments below.
&gt; 
&gt; &gt; WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:55
&gt; &gt; +    String commandLine(WEBKIT_WEB_PROCESS_PATH);
&gt; 
&gt; I don&apos;t understand why you are using a String here. Why not just use WEBKIT_WEB_PROCESS_PATH below?
Used String object just to be in WebKit usage pattern (for datatypes). Anyways I have modified code to actually pick the WebKitWebProcess binary from same folder in which current binary resides.

&gt; 
&gt; &gt; WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:68
&gt; &gt; +        ASSERT_NOT_REACHED();
&gt; &gt; +    }
&gt; 
&gt; I think it&apos;s better to try to handle the error here somehow, even if it&apos;s just printing a message.
I am not sure what error handling can be done here, so just added a print statement (as you suggested).
&gt; 
&gt; &gt; WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:81
&gt; &gt; +    notImplemented();
&gt; 
&gt; Is this not implemented or simply an empty implementation?
Its an empty implementation right now. Corrected it.
&gt; 
&gt; &gt; WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp:43
&gt; &gt; +    // FIXME: Implement.
&gt; 
&gt; This looks like a good place for notImplemented() :) I think this file is also missing stubs for platformShutdown and platformClearResourceCaches.
&gt; 
Done.
&gt; &gt; WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp:54
&gt; &gt; +    g_type_init();
&gt; 
&gt; Do you also need to call g_thread_init() here? Only after 2.24 does g_type_init() call g_thread_init().
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329023</commentid>
    <comment_count>7</comment_count>
      <attachid>77753</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-04 09:37:00 -0800</bug_when>
    <thetext>Comment on attachment 77753
ProcessLauncher and ThreadLauncher implementation for WebKit2 GTK port

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

&gt; WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:60
&gt; +    char currentExePath[128] = {0};
&gt; +    ssize_t numOfCharsRead = readlink(&quot;/proc/self/exe&quot;, currentExePath, 127);
&gt; +    if (numOfCharsRead == -1)
&gt; +        applicationPath = &quot;/usr/local/bin/&quot;
&gt; +    else
&gt; +        applicationPath = currentExePath;

One major issue here is that this will only work on systems with procfs. I&apos;m not sure that&apos;s even true of OS X.  If possible we need to have some platform independent way to get the binary path. Maybe it should just be some #ifdefs. I&apos;m not sure what the best solution is here. It&apos;s unfortunate that this never made it into GLib.

Another issue is that I believe this code makes the assumption that the path is in the latin1 character set. That obviously won&apos;t work when the filesystem uses UTF-8. I think should should use GLib functions which can convert paths into UTF-8 strings.

&gt; WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:61
&gt; +    applicationPath = applicationPath.substring(0, applicationPath.reverseFind(&quot;/&quot;)+1) + WEBKIT_WEB_PROCESS_NAME;

I think instead of searching through the string, it&apos;s better to use GLib functions for munging paths, such as g_path_get_dirname. Of course, the path will need to be a raw string, since it expects it to be in the native format.

&gt; WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:74
&gt; +        // FIXME:: What else can we do in this case?

One extra : here. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330764</commentid>
    <comment_count>8</comment_count>
      <attachid>78237</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-07 07:23:40 -0800</bug_when>
    <thetext>Created attachment 78237
ProcessLauncher and ThreadLauncher implementation for WebKit2 GTK port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330787</commentid>
    <comment_count>9</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-07 08:51:49 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 77753 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77753&amp;action=review
&gt; 
&gt; &gt; WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:60
&gt; &gt; +    char currentExePath[128] = {0};
&gt; &gt; +    ssize_t numOfCharsRead = readlink(&quot;/proc/self/exe&quot;, currentExePath, 127);
&gt; &gt; +    if (numOfCharsRead == -1)
&gt; &gt; +        applicationPath = &quot;/usr/local/bin/&quot;
&gt; &gt; +    else
&gt; &gt; +        applicationPath = currentExePath;
&gt; 
&gt; One major issue here is that this will only work on systems with procfs. I&apos;m not sure that&apos;s even true of OS X.  If possible we need to have some platform independent way to get the binary path. Maybe it should just be some #ifdefs. I&apos;m not sure what the best solution is here. It&apos;s unfortunate that this never made it into GLib.
Made changes as we discussed. Added a new API in FileSystemGtk.cpp and implemented for UNIX/LINUX ports. Other ports yet to be implemented.
&gt; 
&gt; Another issue is that I believe this code makes the assumption that the path is in the latin1 character set. That obviously won&apos;t work when the filesystem uses UTF-8. I think should should use GLib functions which can convert paths into UTF-8 strings.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:61
&gt; &gt; +    applicationPath = applicationPath.substring(0, applicationPath.reverseFind(&quot;/&quot;)+1) + WEBKIT_WEB_PROCESS_NAME;
&gt; 
&gt; I think instead of searching through the string, it&apos;s better to use GLib functions for munging paths, such as g_path_get_dirname. Of course, the path will need to be a raw string, since it expects it to be in the native format.
&gt; 
Done.
&gt; &gt; WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:74
&gt; &gt; +        // FIXME:: What else can we do in this case?
&gt; 
&gt; One extra : here. :)
Done. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330848</commentid>
    <comment_count>10</comment_count>
      <attachid>78237</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-07 10:26:45 -0800</bug_when>
    <thetext>Comment on attachment 78237
ProcessLauncher and ThreadLauncher implementation for WebKit2 GTK port

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

Look good, but we need to be a bit careful about path encoding.

&gt; WebCore/platform/gtk/FileSystemGtk.cpp:190
&gt; +#if OS(UNIX)
&gt; +#if OS(LINUX)

I think it makes more sense to use #if OS(LINUX) for the first block and then do #elif OS(UNIX) for the second block.

&gt; WebCore/platform/gtk/FileSystemGtk.cpp:192
&gt; +    char pathFromProc[128] = {0};

This should probably be sized PATH_MAX, but 128 is definitely too small. :)

&gt; WebCore/platform/gtk/FileSystemGtk.cpp:196
&gt; +    return directoryName(String::fromUTF8(pathFromProc));

You really want to use filenameToString here, since Linux paths aren&apos;t necessarily UTF-8, but since you&apos;re just going just use it with GLib later, I recommend just returning a CString from this function.

&gt; WebCore/platform/gtk/FileSystemGtk.cpp:207
&gt; +    return directoryName(String::fromUTF8(currentExePath.get()));
&gt; +#else
&gt; +    return String();
&gt; +#endif

Same comment here. Just return a CString. See below at the callsite for why.

&gt; WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp:45
&gt; +    if (getenv(&quot;WEBKIT2_DEBUG_MODE&quot;))
&gt; +        sleep(30);

I would prefer to use the same environment variable as Qt, WEBKIT2_PAUSE_WEB_PROCESS_ON_LAUNCH and to also surround this with an #ifndef NDEBUG.

&gt; WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:43
&gt; +#define WEBKIT_WEB_PROCESS_NAME &quot;WebKitWebProcess&quot; 

This should either be:
1. a const char* gWebKitWebProcessName = &quot;WebKitWebProcess&quot;;
2. Passed in by the build system.
3. Used as a constant below.

&gt; WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:51
&gt; +    if (socketpair(AF_UNIX, SOCK_STREAM, 0, sockets) &lt; 0) 
&gt; +        return;

Better print an error and ASSERT_NOT_REACHED here too.

&gt; WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:57
&gt; +        String binaryPath = applicationDirectoryPath() + String(&quot;/&quot;) + String(WEBKIT_WEB_PROCESS_NAME);

You should use g_build_filename here, as and just work with raw char arrays.

&gt; WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:58
&gt; +        execl(binaryPath.utf8().data(), WEBKIT_WEB_PROCESS_NAME, socket.utf8().data(), (char*)0);

If you end up sticking with execl, please just use NULL here instead of casting 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331201</commentid>
    <comment_count>11</comment_count>
      <attachid>78312</attachid>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2011-01-08 09:17:25 -0800</bug_when>
    <thetext>Created attachment 78312
Addressed review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331202</commentid>
    <comment_count>12</comment_count>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2011-01-08 09:19:54 -0800</bug_when>
    <thetext>Incorporated all the comments from https://bugs.webkit.org/show_bug.cgi?id=48511#c10</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331203</commentid>
    <comment_count>13</comment_count>
      <attachid>78312</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-08 09:40:13 -0800</bug_when>
    <thetext>Comment on attachment 78312
Addressed review comments

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

Thanks for the quick update! There&apos;s one more significant issue here that I can see before landing.

&gt; WebCore/platform/gtk/FileSystemGtk.cpp:196
&gt; +    String filename = filenameToString(pathFromProc);
&gt; +    return directoryName(filename).utf8();

Here you should just return pathFromProc. Sorry that I wasn&apos;t clear about that. Converting a CString to a String directly assumes that it&apos;s in the latin1 encoding. And then using the UTF-8 encoding might break the subsequent call to execl if the target filesystem is not UTF-8 encoded.

&gt; WebCore/platform/gtk/FileSystemGtk.cpp:204
&gt; +    String filename = filenameToString(currentExePath.get());
&gt; +    return directoryName(fileName).utf8();

Please just return currentExePath here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331236</commentid>
    <comment_count>14</comment_count>
      <attachid>78323</attachid>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2011-01-08 11:34:39 -0800</bug_when>
    <thetext>Created attachment 78323
Removed the unnecessary encoding</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331237</commentid>
    <comment_count>15</comment_count>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2011-01-08 11:36:04 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 78312 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78312&amp;action=review
&gt; 
&gt; Thanks for the quick update! There&apos;s one more significant issue here that I can see before landing.
&gt; 
&gt; &gt; WebCore/platform/gtk/FileSystemGtk.cpp:196
&gt; &gt; +    String filename = filenameToString(pathFromProc);
&gt; &gt; +    return directoryName(filename).utf8();
&gt; 
&gt; Here you should just return pathFromProc. Sorry that I wasn&apos;t clear about that. Converting a CString to a String directly assumes that it&apos;s in the latin1 encoding. And then using the UTF-8 encoding might break the subsequent call to execl if the target filesystem is not UTF-8 encoded.
&gt; 
&gt; &gt; WebCore/platform/gtk/FileSystemGtk.cpp:204
&gt; &gt; +    String filename = filenameToString(currentExePath.get());
&gt; &gt; +    return directoryName(fileName).utf8();
&gt; 
&gt; Please just return currentExePath here.

Addressed the comments above. Not doing any encoding now and just returning pathFromProc/currentExePath</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331239</commentid>
    <comment_count>16</comment_count>
      <attachid>78323</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-08 11:39:48 -0800</bug_when>
    <thetext>Comment on attachment 78323
Removed the unnecessary encoding

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

Thanks!

&gt; WebCore/platform/gtk/FileSystemGtk.cpp:196
&gt; +    return CString(dirname.get());

The CString call isn&apos;t strictly necessary here. I&apos;ll fix this before landing.

&gt; WebCore/platform/gtk/FileSystemGtk.cpp:204
&gt; +    return CString(dirname.get());

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331243</commentid>
    <comment_count>17</comment_count>
      <attachid>78325</attachid>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2011-01-08 12:08:46 -0800</bug_when>
    <thetext>Created attachment 78325
Removed the explicit constructor call</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331245</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-08 12:10:42 -0800</bug_when>
    <thetext>Attachment 78325 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/platform/FileSystem.h&apos;, u&apos;Source/WebCore/platform/gtk/FileSystemGtk.cpp&apos;, u&apos;WebKit2/ChangeLog&apos;, u&apos;WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp&apos;, u&apos;WebKit2/UIProcess/Launcher/gtk/ThreadLauncherGtk.cpp&apos;, u&apos;WebKit2/WebProcess/gtk/WebProcessGtk.cpp&apos;, u&apos;WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp&apos;, u&apos;WebKit2/WebProcess/gtk/WebProcessMainGtk.h&apos;, u&apos;WebKit2/gtk/MainGtk.cpp&apos;]&quot; exit_code: 1
WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:62:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331247</commentid>
    <comment_count>19</comment_count>
      <attachid>78325</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-08 12:20:20 -0800</bug_when>
    <thetext>Comment on attachment 78325
Removed the explicit constructor call

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331354</commentid>
    <comment_count>20</comment_count>
      <attachid>78325</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-08 19:13:32 -0800</bug_when>
    <thetext>Comment on attachment 78325
Removed the explicit constructor call

Rejecting attachment 78325 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-4&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--ignore-builders&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 78325]&quot; exit_code: 1
Last 500 characters of output:
ommit-queue/Tools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 64, in _run
    step(tool, options).run(state)
  File &quot;/mnt/git/webkit-commit-queue/Tools/Scripts/webkitpy/tool/steps/validatereviewer.py&quot;, line 57, in run
    if self._has_valid_reviewer(changelog_entry):
  File &quot;/mnt/git/webkit-commit-queue/Tools/Scripts/webkitpy/tool/steps/validatereviewer.py&quot;, line 42, in _has_valid_reviewer
    if changelog_entry.reviewer():
AttributeError: &apos;NoneType&apos; object has no attribute &apos;reviewer&apos;

Full output: http://queues.webkit.org/results/7475011</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331384</commentid>
    <comment_count>21</comment_count>
      <attachid>78342</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-08 23:08:48 -0800</bug_when>
    <thetext>Created attachment 78342
Patch on latest trunk for commit

Reviewed patch on latest svn trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331385</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-08 23:11:29 -0800</bug_when>
    <thetext>Attachment 78342 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/platform/FileSystem.h&apos;, u&apos;Source/WebCore/platform/gtk/FileSystemGtk.cpp&apos;, u&apos;WebKit2/ChangeLog&apos;, u&apos;WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp&apos;, u&apos;WebKit2/UIProcess/Launcher/gtk/ThreadLauncherGtk.cpp&apos;, u&apos;WebKit2/WebProcess/gtk/WebProcessGtk.cpp&apos;, u&apos;WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp&apos;, u&apos;WebKit2/WebProcess/gtk/WebProcessMainGtk.h&apos;, u&apos;WebKit2/gtk/MainGtk.cpp&apos;]&quot; exit_code: 1
WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:62:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331396</commentid>
    <comment_count>23</comment_count>
      <attachid>78342</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-09 00:57:53 -0800</bug_when>
    <thetext>Comment on attachment 78342
Patch on latest trunk for commit

Clearing flags on attachment: 78342

Committed r75347: &lt;http://trac.webkit.org/changeset/75347&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331397</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-09 00:58:01 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331401</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-09 01:38:50 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 78342:

http/tests/xmlhttprequest/failed-auth.html bug 51835 (author: ap@webkit.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72325</attachid>
            <date>2010-10-29 06:24:35 -0700</date>
            <delta_ts>2010-11-02 09:48:24 -0700</delta_ts>
            <desc>Implements Process/Thread Launcher classes and WebProcessGtkMain</desc>
            <filename>ProcessLauncher.diff</filename>
            <type>text/plain</type>
            <size>15866</size>
            <attacher name="Amruth Raj">amruthraj</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
ZWE5ZmY5OS4uYjJhZTI3MCAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMC0xMC0yOSAgQW1ydXRoIFJhaiAg
PGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBSYXZpIEthc2liaGF0bGEgIDxyYXZpLmthc2li
aGF0bGFAbW90b3JvbGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIENoYW5nZXMgdG8gYWRkIFByb2Nlc3MgTGF1bmNoZXIgYW5kIFRocmVhZCBM
YXVuY2hlciB0byB0aGUgV2ViS2l0MiBHVEsgcG9ydC4KKyAgICAgICAgQ2hhbmdlcyB0byBjcmVh
dGUgdGhlIFdlYktpdFdlYlByb2Nlc3MgYmluYXJ5IHRvIGxhdW5jaCBXZWIgcHJvY2VzcyBmcm9t
IFVJIHByb2Nlc3MuCisgICAgICAgIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDg1MTEpCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQ2hhbmdlcyB0byBjcmVh
dGUgYSBXZWJLaXRXZWJQcm9jZXNzIGJpbmFyeSB3aGljaCBpbnZva2VzIFdlYiBQcm9jZXNzIGZy
b20gVUkgcHJvY2Vzcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NM
YXVuY2hlckd0ay5jcHA6IEFkZGVkLiBHVEsgKFVOSVhfWDExIHNwZWNpZmljKSBpbXBsZW1lbnRh
dGlvbiBmb3IgbGF1bmNoaW5nIFdlYiBQcm9jZXNzIGZyb20gVUkgUHJvY2VzcyBpbiBhc3luYyBt
YW5uZXIuCisgICAgICAgIENyZWF0ZXMgYSBzb2NrZXQtcGFpciBhbmQgc2VuZHMgYW4gZmQgdG8g
ZWFjaCBwcm9jZXNzLgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFBy
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVByb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OnBsYXRmb3JtSW52YWxpZGF0
ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9UaHJlYWRMYXVuY2hlckd0ay5j
cHA6IEFkZGVkLiBTdHViYmVkIGltcGxlbWVudGF0aW9uIGZvciBHVEsgcG9ydC4gWWV0IHRvIGlt
cGxlbWVudC4KKyAgICAgICAgKFdlYktpdDo6VGhyZWFkTGF1bmNoZXI6OmNyZWF0ZVdlYlRocmVh
ZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuY3BwOiBBZGRl
ZC4gVGhlIFdlYlByb2Nlc3NNYWluIGNhbGwgd2hpY2ggaW5pdGlhdGVzIHRoZSBXZWIgUHJvY2Vz
cyBmb3IgR1RLIHBvcnQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtU2V0
Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NNYWluR3RrKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5oOiBBZGRlZC4gVGhlIFdlYlBy
b2Nlc3NNYWluIGRlY2xhcmF0aW9ucyBmb3IgV2ViIFByb2Nlc3MgZm9yIEdUSyBwb3J0LgorICAg
ICAgICAqIGd0ay9NYWluR3RrLmNwcDogQWRkZWQuIFRoZSBtYWluIGZ1bmN0aW9uIGltcGxlbWVu
dGF0aW9uIGZvciBiaW5hcnkgV2ViS2l0V2ViUHJvY2Vzcy4KKyAgICAgICAgKG1haW4pOgorCiAy
MDEwLTEwLTI4ICBBbXJ1dGggUmFqICA8YW1ydXRocmFqQG1vdG9yb2xhLmNvbT4gYW5kIFJhdmkg
S2FzaWJoYXRsYSAgPHJhdmkua2FzaWJoYXRsYUBtb3Rvcm9sYS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJLaXQyL0dOVW1ha2VmaWxl
LmFtIGIvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCA3NjBmOWJlLi5hYTBmMWMyIDEwMDY0
NAotLS0gYS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYktpdDIvR05VbWFrZWZpbGUu
YW0KQEAgLTQ5LDcgKzQ5LDExIEBAIHdlYmtpdDJndGtfc291cmNlcyArPSBcCiAJV2ViS2l0Mi9T
aGFyZWQvZ3RrL1VwZGF0ZUNodW5rLmggXAogCVdlYktpdDIvU2hhcmVkL2d0ay9XZWJDb3JlQXJn
dW1lbnRDb2RlcnNHdGsuY3BwIFwKIAlXZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5
LmggXAorCVdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsu
Y3BwIFwKKwlXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvVGhyZWFkTGF1bmNoZXJHdGsu
Y3BwIFwKIAlXZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvU3RvcmVHdGsu
Y3BwIFwKKwlXZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmNwcCBcCisJ
V2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5oIFwKIAlXZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvZ3RrL0luamVjdGVkQnVuZGxlR3RrLmNwcCBcCiAJV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvZ3RrL05ldHNjYXBlUGx1Z2luR3RrLmNw
cCBcCiAJV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0LmgKQEAgLTQwMSw5ICs0MDUsMTIgQEAgQlVJTFRfU09VUkNFUyArPSBcCiAJ
JCh3ZWJraXQyX2J1aWx0X25vc291cmNlcykKIAogd2Via2l0Mmd0a19jcHBmbGFncyArPSBcCisJ
LUkkKHNyY2RpcikvV2ViS2l0Mi9ndGsgXAogCS1JJChzcmNkaXIpL1dlYktpdDIvUGxhdGZvcm0v
Z3RrIFwKIAktSSQoc3JjZGlyKS9XZWJLaXQyL1NoYXJlZC9ndGsgXAorCS1JJChzcmNkaXIpL1dl
YktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ayBcCiAJLUkkKHNyY2RpcikvV2ViS2l0Mi9VSVBy
b2Nlc3MvUGx1Z2lucy9ndGsgXAorCS1JJChzcmNkaXIpL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsg
XAogCS1JJChzcmNkaXIpL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ndGsgXAog
CS1JJChzcmNkaXIpL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL2d0ayBcCiAJ
LUkkKHNyY2RpcikvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0awpAQCAtNDgx
LDMgKzQ4OCw0MCBAQCBEZXJpdmVkU291cmNlcy9XZWJLaXQyLyVNZXNzYWdlUmVjZWl2ZXIuY3Bw
OiAlLm1lc3NhZ2VzLmluICQobWVzc2FnZV9nZW5fc2NyaXB0cwogCiBEZXJpdmVkU291cmNlcy9X
ZWJLaXQyLyVNZXNzYWdlcy5oOiAlLm1lc3NhZ2VzLmluICQobWVzc2FnZV9nZW5fc2NyaXB0cykK
IAkkKEFNX1ZfR0VOKSQoUFlUSE9OKSAkKHNyY2RpcikvV2ViS2l0Mi9TY3JpcHRzL2dlbmVyYXRl
LW1lc3NhZ2VzLWhlYWRlci5weSAkPCA+ICRACisKKyMgV2ViS2l0V2ViUHJvY2VzcworYmluX1BS
T0dSQU1TICs9IFwKKwlQcm9ncmFtcy9XZWJLaXRXZWJQcm9jZXNzCisKK1Byb2dyYW1zX1dlYktp
dFdlYlByb2Nlc3NfQ1BQRkxBR1MgPSBcCisJLUkkKHNyY2RpcikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0MiBcCisJLUkkKHNyY2RpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9pbmNsdWRlIFwKKwkt
SSQoc3JjZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL2luY2x1ZGUvV2ViQ29yZSBcCisJLUkk
KHNyY2RpcikvV2ViS2l0MiBcCisJLUkkKHNyY2RpcikvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mg
XAorCS1JJChzcmNkaXIpL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsgXAorCS1JJCh0b3BfYnVpbGRk
aXIpL1dlYktpdDIgXAorCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCisJJChqYXZhc2NyaXB0Y29yZV9j
cHBmbGFncykKKworUHJvZ3JhbXNfV2ViS2l0V2ViUHJvY2Vzc19DRkxBR1MgPSBcCisJJChnbG9i
YWxfY2ZsYWdzKSBcCisJJChHVEtfQ0ZMQUdTKSBcCisJJChMSUJTT1VQX0NGTEFHUykKKworUHJv
Z3JhbXNfV2ViS2l0V2ViUHJvY2Vzc19TT1VSQ0VTID0gXAorCVdlYktpdDIvZ3RrL01haW5HdGsu
Y3BwCisKK1Byb2dyYW1zX1dlYktpdFdlYlByb2Nlc3NfTERBREQgPSBcCisJbGliSmF2YVNjcmlw
dENvcmUubGEgXAorCWxpYkBMSUJXRUJLSVRHVEtfTkFNRUAtQFdFQktJVEdUS19BUElfTUFKT1Jf
VkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAorCSQoR1RLX0xJQlMp
IFwKKwkkKEdMSUJfTElCUykgXAorCSQoTElCU09VUF9MSUJTKQorCitQcm9ncmFtc19XZWJLaXRX
ZWJQcm9jZXNzX0xERkxBR1MgPSBcCisJLW5vLWZhc3QtaW5zdGFsbCBcCisJLW5vLWluc3RhbGwK
KworQ0xFQU5GSUxFUyArPSBcCisJJCh0b3BfYnVpbGRkaXIpL1Byb2dyYW1zL1dlYktpdFdlYlBy
b2Nlc3MKZGlmZiAtLWdpdCBhL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNz
TGF1bmNoZXJHdGsuY3BwIGIvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NM
YXVuY2hlckd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I1MTZk
NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9j
ZXNzTGF1bmNoZXJHdGsuY3BwCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJp
Z2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTU9UT1JPTEEg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgTU9UT1JPTEEgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiUHJvY2Vzc0xhdW5jaGVyLmgiCisKKyNpbmNs
dWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
ICJSdW5Mb29wLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorCisjaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybVN0cmluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNkZWZpbmUgV0VCS0lUX1dF
Ql9QUk9DRVNTX05BTUUgIldlYktpdFdlYlByb2Nlc3MiIAorI2RlZmluZSBXRUJLSVRfV0VCX1BS
T0NFU1NfUEFUSCAiL3Vzci9sb2NhbC9iaW4vV2ViS2l0V2ViUHJvY2VzcyIgCisKK3ZvaWQgUHJv
Y2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKCkKK3sKKyAgICBwaWRfdCBwaWQgPSAwOworCisg
ICAgaW50IHNvY2tldHNbMl07CisgICAgaWYgKHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19TVFJF
QU0sIDAsIHNvY2tldHMpIDwgMCkgCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBjb21t
YW5kTGluZShXRUJLSVRfV0VCX1BST0NFU1NfUEFUSCk7CisgICAgcGlkID0gZm9yaygpOworICAg
IGlmICghcGlkKSB7IC8vIGNoaWxkIHByb2Nlc3MKKyAgICAgICAgY2xvc2Uoc29ja2V0c1sxXSk7
CisgICAgICAgIFN0cmluZyBzb2NrZXQgPSBTdHJpbmc6OmZvcm1hdCgiJWQiLCBzb2NrZXRzWzBd
KTsKKyAgICAgICAgZXhlY2woY29tbWFuZExpbmUudXRmOCgpLmRhdGEoKSwgV0VCS0lUX1dFQl9Q
Uk9DRVNTX05BTUUsIHNvY2tldC51dGY4KCkuZGF0YSgpLCAoY2hhciopMCk7CisgICAgfSBlbHNl
IGlmIChwaWQgPiAwKSB7IC8vIHBhcmVudCBwcm9jZXNzCisgICAgICAgIGNsb3NlKHNvY2tldHNb
MF0pOworICAgICAgICBtX3Byb2Nlc3NJZGVudGlmaWVyID0gcGlkOworICAgICAgICAvLyBXZSd2
ZSBmaW5pc2hlZCBsYXVuY2hpbmcgdGhlIHByb2Nlc3MsIG1lc3NhZ2UgYmFjayB0byB0aGUgbWFp
biBydW4gbG9vcC4KKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLT5zY2hlZHVsZVdvcmsoV29ya0l0
ZW06OmNyZWF0ZSh0aGlzLCAmUHJvY2Vzc0xhdW5jaGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdQcm9j
ZXNzLCBwaWQsIHNvY2tldHNbMV0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUHJvY2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVQ
cm9jZXNzKCkKK3sgICAKKyAgICBpZiAoIW1fcHJvY2Vzc0lkZW50aWZpZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIGtpbGwobV9wcm9jZXNzSWRlbnRpZmllciwgU0lHS0lMTCk7Cit9CisKK3Zv
aWQgUHJvY2Vzc0xhdW5jaGVyOjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1RocmVhZExhdW5jaGVyR3RrLmNwcCBiL1dlYktpdDIv
VUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9UaHJlYWRMYXVuY2hlckd0ay5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE2OGRiYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9UaHJlYWRMYXVuY2hlckd0ay5jcHAKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxp
dHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJUaHJl
YWRMYXVuY2hlci5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitDb3JlSVBDOjpDb25uZWN0
aW9uOjpJZGVudGlmaWVyIFRocmVhZExhdW5jaGVyOjpjcmVhdGVXZWJUaHJlYWQoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIC0xOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5H
dGsuY3BwIGIvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY3MDliZQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuY3BwCkBAIC0wLDAg
KzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmls
aXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2Vi
UHJvY2Vzc01haW5HdGsuaCIKKworI2luY2x1ZGUgIldLQmFzZS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvUmVzb3VyY2VIYW5kbGUuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1J1bkxvb3AuaD4KKyNpbmNs
dWRlIDxXZWJLaXQyL1dlYlByb2Nlc3MuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lk
IFdlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwp
Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKworV0tfRVhQT1JUIGludCBXZWJQcm9j
ZXNzTWFpbkd0ayhpbnQgYXJnYywgY2hhciogYXJndltdKQoreworICAgIEFTU0VSVChhcmdjID09
IDIpOworCisgICAgaWYgKGdldGVudigiV0VCS0lUMl9ERUJVR19NT0RFIikpCisgICAgICAgIHNs
ZWVwKDMwKTsKKworICAgIGd0a19pbml0KCZhcmdjLCAmYXJndik7CisgICAgZ190eXBlX2luaXQo
KTsKKworICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgIFdURjo6aW5pdGlhbGl6
ZU1haW5UaHJlYWQoKTsKKyAgICAKKyAgICBSdW5Mb29wOjppbml0aWFsaXplTWFpblJ1bkxvb3Ao
KTsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6ZGVmYXVsdFNlc3Npb24oKTsKKyAgIAor
ICAgIGludCBzb2NrZXQgPSBhdG9pKGFyZ3ZbMV0pOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LmluaXRpYWxpemUoc29ja2V0LCBSdW5Mb29wOjptYWluKCkpOworICAgIFJ1bkxvb3A6OnJ1bigp
OworCisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5oIGIvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjgyOGFmODMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQyL1dlYlByb2Nl
c3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9u
cyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUHJvY2Vzc01haW5HdGtfaAorI2RlZmlu
ZSBXZWJQcm9jZXNzTWFpbkd0a19oCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKK1dL
X0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5HdGsoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSk7Cit9
IC8vIGV4dGVybiAiQyIKKyNlbmRpZiAvLyBfX2NwbHVzcGx1cworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIFdlYlByb2Nlc3NNYWluX2gKZGlmZiAtLWdpdCBhL1dlYktpdDIv
Z3RrL01haW5HdGsuY3BwIGIvV2ViS2l0Mi9ndGsvTWFpbkd0ay5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMTZmODk5MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdDIv
Z3RrL01haW5HdGsuY3BwCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0
IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiV2ViUHJvY2Vzc01haW5HdGsuaCIKKworaW50IG1haW4oaW50
IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIHJldHVybiBXZWJLaXQ6OldlYlByb2Nlc3NNYWlu
R3RrKGFyZ2MsIGFyZ3YpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72686</attachid>
            <date>2010-11-02 09:46:13 -0700</date>
            <delta_ts>2011-01-01 12:42:01 -0800</delta_ts>
            <desc>ProcessLauncher and ThreadLauncher implementation for WebKit2 GTK port</desc>
            <filename>ProcessLauncher ThreadLauncher WebProcessMainGtk Implementation.patch</filename>
            <type>text/plain</type>
            <size>13530</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvZ3RrL01haW5HdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvZ3Rr
L01haW5HdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9ndGsvTWFpbkd0ay5jcHAJKHJl
dmlzaW9uIDUxNzE5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAo
YykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgIldlYlByb2Nlc3NNYWluR3RrLmgiCisKK2ludCBtYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKK3sKKyAgICByZXR1cm4gV2ViS2l0OjpXZWJQcm9jZXNzTWFpbkd0
ayhhcmdjLCBhcmd2KTsKK30KSW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MTcwNSkKKysrIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTcxOSkKQEAgLTEsMyArMSwzMDMgQEAKKzIwMTAtMTAtMjkgIEFtcnV0aCBS
YWogIDxhbXJ1dGhyYWpAbW90b3JvbGEuY29tPiBhbmQgUmF2aSBLYXNpYmhhdGxhICA8cmF2aS5r
YXNpYmhhdGxhQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDaGFuZ2VzIHRvIGFkZCBQcm9jZXNzIExhdW5jaGVyIGFuZCBUaHJl
YWQgTGF1bmNoZXIgdG8gdGhlIFdlYktpdDIgR1RLIHBvcnQuCisgICAgICAgIENoYW5nZXMgdG8g
Y3JlYXRlIHRoZSBXZWJLaXRXZWJQcm9jZXNzIGJpbmFyeSB0byBsYXVuY2ggV2ViIHByb2Nlc3Mg
ZnJvbSBVSSBwcm9jZXNzLgorICAgICAgICAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ4NTExKQorCisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL2d0azogQWRk
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsu
Y3BwOiBBZGRlZC4gR1RLIChVTklYX1gxMSBzcGVjaWZpYykgaW1wbGVtZW50YXRpb24gZm9yIGxh
dW5jaGluZyBXZWIgUHJvY2VzcyBmcm9tIFVJIFByb2Nlc3MgaW4gYXN5bmMgbWFubmVyLgorICAg
ICAgICBDcmVhdGVzIGEgc29ja2V0LXBhaXIgYW5kIHNlbmRzIGFuIGZkIHRvIGVhY2ggcHJvY2Vz
cy4KKyAgICAgICAgKFdlYktpdDo6UHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKToKKyAg
ICAgICAgKFdlYktpdDo6UHJvY2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVQcm9jZXNzKToKKyAgICAg
ICAgKFdlYktpdDo6UHJvY2Vzc0xhdW5jaGVyOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9ndGsvVGhyZWFkTGF1bmNoZXJHdGsuY3BwOiBBZGRlZC4g
U3R1YmJlZCBpbXBsZW1lbnRhdGlvbiBmb3IgR1RLIHBvcnQuIFlldCB0byBpbXBsZW1lbnQuCisg
ICAgICAgIChXZWJLaXQ6OlRocmVhZExhdW5jaGVyOjpjcmVhdGVXZWJUaHJlYWQpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvZ3RrOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2d0ay9XZWJQ
cm9jZXNzTWFpbkd0ay5jcHA6IEFkZGVkLiBUaGUgV2ViUHJvY2Vzc01haW4gY2FsbCB3aGljaCBp
bml0aWF0ZXMgdGhlIFdlYiBQcm9jZXNzIGZvciBHVEsgcG9ydC4KKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc01haW5HdGspOgorICAgICAgICAqIFdlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWlu
R3RrLmg6IEFkZGVkLiBUaGUgV2ViUHJvY2Vzc01haW4gZGVjbGFyYXRpb25zIGZvciBXZWIgUHJv
Y2VzcyBmb3IgR1RLIHBvcnQuCisgICAgICAgICogZ3RrOiBBZGRlZC4KKyAgICAgICAgKiBndGsv
TWFpbkd0ay5jcHA6IEFkZGVkLiBUaGUgbWFpbiBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiBmb3Ig
YmluYXJ5IFdlYktpdFdlYlByb2Nlc3MuCisgICAgICAgIChtYWluKToKKwogMjAxMC0xMC0yNyAg
S2ltbW8gS2lubnVuZW4gIDxraW1tby50Lmtpbm51bmVuQG5va2lhLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNo
ZXIvZ3RrL1RocmVhZExhdW5jaGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJv
Y2Vzcy9MYXVuY2hlci9ndGsvVGhyZWFkTGF1bmNoZXJHdGsuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1RocmVhZExhdW5jaGVyR3RrLmNwcAkocmV2
aXNpb24gNTE3MTkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj
KSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiVGhyZWFkTGF1bmNoZXIuaCIKKworI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBUaHJlYWRMYXVuY2hlcjo6Y3Jl
YXRlV2ViVGhyZWFkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAtMTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVu
Y2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJ
UHJvY2Vzcy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3Bw
CShyZXZpc2lvbiA1MTcxOSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmln
aHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBNT1RPUk9MQSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBNT1RPUk9MQSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKKworI2luY2x1
ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
IlJ1bkxvb3AuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L1BsYXRmb3JtU3RyaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworI2RlZmluZSBXRUJLSVRfV0VC
X1BST0NFU1NfTkFNRSAiV2ViS2l0V2ViUHJvY2VzcyIgCisjZGVmaW5lIFdFQktJVF9XRUJfUFJP
Q0VTU19QQVRIICIvdXNyL2xvY2FsL2Jpbi9XZWJLaXRXZWJQcm9jZXNzIiAKKwordm9pZCBQcm9j
ZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQoreworICAgIHBpZF90IHBpZCA9IDA7CisKKyAg
ICBpbnQgc29ja2V0c1syXTsKKyAgICBpZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVB
TSwgMCwgc29ja2V0cykgPCAwKSAKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIGNvbW1h
bmRMaW5lKFdFQktJVF9XRUJfUFJPQ0VTU19QQVRIKTsKKyAgICBwaWQgPSBmb3JrKCk7CisgICAg
aWYgKCFwaWQpIHsgLy8gY2hpbGQgcHJvY2VzcworICAgICAgICBjbG9zZShzb2NrZXRzWzFdKTsK
KyAgICAgICAgU3RyaW5nIHNvY2tldCA9IFN0cmluZzo6Zm9ybWF0KCIlZCIsIHNvY2tldHNbMF0p
OworICAgICAgICBleGVjbChjb21tYW5kTGluZS51dGY4KCkuZGF0YSgpLCBXRUJLSVRfV0VCX1BS
T0NFU1NfTkFNRSwgc29ja2V0LnV0ZjgoKS5kYXRhKCksIChjaGFyKikwKTsKKyAgICB9IGVsc2Ug
aWYgKHBpZCA+IDApIHsgLy8gcGFyZW50IHByb2Nlc3MKKyAgICAgICAgY2xvc2Uoc29ja2V0c1sw
XSk7CisgICAgICAgIG1fcHJvY2Vzc0lkZW50aWZpZXIgPSBwaWQ7CisgICAgICAgIC8vIFdlJ3Zl
IGZpbmlzaGVkIGxhdW5jaGluZyB0aGUgcHJvY2VzcywgbWVzc2FnZSBiYWNrIHRvIHRoZSBtYWlu
IHJ1biBsb29wLgorICAgICAgICBSdW5Mb29wOjptYWluKCktPnNjaGVkdWxlV29yayhXb3JrSXRl
bTo6Y3JlYXRlKHRoaXMsICZQcm9jZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nl
c3MsIHBpZCwgc29ja2V0c1sxXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBQcm9jZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVBy
b2Nlc3MoKQoreyAgIAorICAgIGlmICghbV9wcm9jZXNzSWRlbnRpZmllcikKKyAgICAgICAgcmV0
dXJuOworCisgICAga2lsbChtX3Byb2Nlc3NJZGVudGlmaWVyLCBTSUdLSUxMKTsKK30KKwordm9p
ZCBQcm9jZXNzTGF1bmNoZXI6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1dlYlBy
b2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dl
YlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktp
dDIvV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuY3BwCShyZXZpc2lvbiA1MTcxOSkK
QEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3Jv
bGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJXZWJQcm9jZXNzTWFpbkd0ay5oIgorCisjaW5jbHVkZSAiV0tCYXNlLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvUnVuTG9vcC5o
PgorI2luY2x1ZGUgPFdlYktpdDIvV2ViUHJvY2Vzcy5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx1bmlz
dGQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3ZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwgY2Fj
aGVNb2RlbCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCitXS19FWFBPUlQgaW50
IFdlYlByb2Nlc3NNYWluR3RrKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCit7CisgICAgQVNTRVJU
KGFyZ2MgPT0gMik7CisKKyAgICBpZiAoZ2V0ZW52KCJXRUJLSVQyX0RFQlVHX01PREUiKSkKKyAg
ICAgICAgc2xlZXAoMzApOworCisgICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsKKyAgICBnX3R5
cGVfaW5pdCgpOworCisgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAgV1RGOjpp
bml0aWFsaXplTWFpblRocmVhZCgpOworICAgIAorICAgIFJ1bkxvb3A6OmluaXRpYWxpemVNYWlu
UnVuTG9vcCgpOworICAgIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkZWZhdWx0U2Vzc2lvbigp
OworICAgCisgICAgaW50IHNvY2tldCA9IGF0b2koYXJndlsxXSk7CisgICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkuaW5pdGlhbGl6ZShzb2NrZXQsIFJ1bkxvb3A6Om1haW4oKSk7CisgICAgUnVuTG9v
cDo6cnVuKCk7CisKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5oCShyZXZpc2lv
biAwKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5oCShyZXZp
c2lvbiA1MTcxOSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp
IDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2ViUHJvY2Vzc01haW5HdGtfaAorI2RlZmluZSBXZWJQcm9jZXNzTWFp
bkd0a19oCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKK1dLX0VYUE9SVCBpbnQgV2Vi
UHJvY2Vzc01haW5HdGsoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSk7Cit9IC8vIGV4dGVybiAiQyIK
KyNlbmRpZiAvLyBfX2NwbHVzcGx1cworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFdlYlByb2Nlc3NNYWluX2gK
</data>
<flag name="review"
          id="62974"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77753</attachid>
            <date>2011-01-01 12:42:01 -0800</date>
            <delta_ts>2011-01-07 07:23:40 -0800</delta_ts>
            <desc>ProcessLauncher and ThreadLauncher implementation for WebKit2 GTK port</desc>
            <filename>48511_rework_jan1.patch</filename>
            <type>text/plain</type>
            <size>16904</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDg0NykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTEtMDEtMDEgIEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90b3Jv
bGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgIDxyYXZpLmthc2liaGF0bGFA
bW90b3JvbGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIENoYW5nZXMgdG8gYWRkIFByb2Nlc3MgTGF1bmNoZXIgYW5kIFRocmVhZCBMYXVuY2hl
ciBpbXBsZW1lbnRhdGlvbiB0byB0aGUgV2ViS2l0MiBHVEsgcG9ydC4KKyAgICAgICAgVGhlIG1h
aW4oKSBpbXBsZW1lbnRhdGlvbiBmb3IgV2ViS2l0V2ViUHJvY2VzcyBiaW5hcnkgdG8gbGF1bmNo
IFdlYiBwcm9jZXNzIGZyb20gVUkgcHJvY2Vzcy4KKyAgICAgICAgKGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxMSkKKworICAgICAgICAqIFVJUHJvY2Vzcy9MYXVu
Y2hlci9ndGs6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9ndGsvUHJvY2Vz
c0xhdW5jaGVyR3RrLmNwcDogQWRkZWQuIEdUSyAoVU5JWF9YMTEgc3BlY2lmaWMpIGltcGxlbWVu
dGF0aW9uIAorICAgICAgICBmb3IgbGF1bmNoaW5nIFdlYiBQcm9jZXNzIGZyb20gVUkgUHJvY2Vz
cyBpbiBhc3luYyBtYW5uZXIuCisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6bGF1
bmNoUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6dGVybWluYXRl
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1RocmVhZExhdW5jaGVy
R3RrLmNwcDogQWRkZWQuIFN0dWJiZWQgaW1wbGVtZW50YXRpb24gZm9yIEdUSyBwb3J0LiBZZXQg
dG8gaW1wbGVtZW50LgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRMYXVuY2hlcjo6Y3JlYXRlV2Vi
VGhyZWFkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2d0azogQWRkZWQuCisgICAgICAgICogV2Vi
UHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc0d0ay5jcHA6IEFkZGVkLiBUaGUgc3R1YmJlZCBpbXBsZW1l
bnRhdGlvbnMgb2YgdmlydHVhbCBmdW5jdGlvbnMgb2YgV2ViUHJvY2Vzcy5oIGZvciBHVEsgcG9y
dC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1DbGVhclJlc291cmNlQ2FjaGVz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJv
Y2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtU2h1dGRvd24pOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmNwcDogQWRkZWQuIFRo
ZSBXZWJQcm9jZXNzTWFpbiBjYWxsIHdoaWNoIGluaXRpYXRlcyB0aGUgV2ViIFByb2Nlc3MgZm9y
IEdUSyBwb3J0LgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpbkd0ayk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuaDogQWRkZWQuIFRoZSBXZWJQcm9j
ZXNzTWFpbiBkZWNsYXJhdGlvbiBmb3IgV2ViIFByb2Nlc3MgZm9yIEdUSyBwb3J0LgorICAgICAg
ICAqIGd0ay9NYWluR3RrLmNwcDogQWRkZWQuIFRoZSBtYWluIGZ1bmN0aW9uIGltcGxlbWVudGF0
aW9uIGZvciBiaW5hcnkgV2ViS2l0V2ViUHJvY2Vzcy4KKyAgICAgICAgKG1haW4pOgorCiAyMDEw
LTEyLTE1ICBBbXJ1dGggUmFqICA8YW1ydXRocmFqQG1vdG9yb2xhLmNvbT4gYW5kIFJhdmkgS2Fz
aWJoYXRsYSAgPHJhdmkua2FzaWJoYXRsYUBtb3Rvcm9sYS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTWFydGluIFJvYmluc29uLgpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIv
Z3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nl
c3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIw
MTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBNT1RPUk9MQSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9M
QSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKKworI2luY2x1ZGUgIkNvbm5l
Y3Rpb24uaCIKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJj
ZUhhbmRsZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8cnVudGltZS9Jbml0aWFs
aXplVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCisjZGVmaW5lIFdFQktJVF9XRUJfUFJPQ0VTU19OQU1FICJXZWJLaXRXZWJQcm9j
ZXNzIgorCit2b2lkIFByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2VzcygpCit7CisgICAgcGlk
X3QgcGlkID0gMDsKKworICAgIGludCBzb2NrZXRzWzJdOworICAgIGlmIChzb2NrZXRwYWlyKEFG
X1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBzb2NrZXRzKSA8IDApIAorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBHZXQgdGhlIGFicyBwYXRoIG9mIHRoZSBiaW5hcnkgZnJvbSB3aGVyZSB0aGUgV2Vi
UHJvY2VzcyBiaW5hcnkgdG8gYmUgZXhlY3V0ZWQuCisgICAgU3RyaW5nIGFwcGxpY2F0aW9uUGF0
aDsKKyAgICBjaGFyIGN1cnJlbnRFeGVQYXRoWzEyOF0gPSB7MH07CisgICAgc3NpemVfdCBudW1P
ZkNoYXJzUmVhZCA9IHJlYWRsaW5rKCIvcHJvYy9zZWxmL2V4ZSIsIGN1cnJlbnRFeGVQYXRoLCAx
MjcpOworICAgIGlmIChudW1PZkNoYXJzUmVhZCA9PSAtMSkKKyAgICAgICAgYXBwbGljYXRpb25Q
YXRoID0gIi91c3IvbG9jYWwvYmluLyIKKyAgICBlbHNlCisgICAgICAgIGFwcGxpY2F0aW9uUGF0
aCA9IGN1cnJlbnRFeGVQYXRoOworICAgIGFwcGxpY2F0aW9uUGF0aCA9IGFwcGxpY2F0aW9uUGF0
aC5zdWJzdHJpbmcoMCwgYXBwbGljYXRpb25QYXRoLnJldmVyc2VGaW5kKCIvIikrMSkgKyBXRUJL
SVRfV0VCX1BST0NFU1NfTkFNRTsKKworICAgIHBpZCA9IGZvcmsoKTsKKyAgICBpZiAoIXBpZCkg
eyAvLyBjaGlsZCBwcm9jZXNzCisgICAgICAgIGNsb3NlKHNvY2tldHNbMV0pOworICAgICAgICBT
dHJpbmcgc29ja2V0ID0gU3RyaW5nOjpmb3JtYXQoIiVkIiwgc29ja2V0c1swXSk7CisgICAgICAg
IGV4ZWNsKGFwcGxpY2F0aW9uUGF0aC51dGY4KCkuZGF0YSgpLCBXRUJLSVRfV0VCX1BST0NFU1Nf
TkFNRSwgc29ja2V0LnV0ZjgoKS5kYXRhKCksIChjaGFyKikwKTsKKyAgICB9IGVsc2UgaWYgKHBp
ZCA+IDApIHsgLy8gcGFyZW50IHByb2Nlc3MKKyAgICAgICAgY2xvc2Uoc29ja2V0c1swXSk7Cisg
ICAgICAgIG1fcHJvY2Vzc0lkZW50aWZpZXIgPSBwaWQ7CisgICAgICAgIC8vIFdlJ3ZlIGZpbmlz
aGVkIGxhdW5jaGluZyB0aGUgcHJvY2VzcywgbWVzc2FnZSBiYWNrIHRvIHRoZSBtYWluIHJ1biBs
b29wLgorICAgICAgICBSdW5Mb29wOjptYWluKCktPnNjaGVkdWxlV29yayhXb3JrSXRlbTo6Y3Jl
YXRlKHRoaXMsICZQcm9jZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3MsIHBp
ZCwgc29ja2V0c1sxXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOjogV2hhdCBl
bHNlIGNhbiB3ZSBkbyBpbiB0aGlzIGNhc2U/CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5h
YmxlIHRvIGZvcmsgYSBuZXcgV2ViUHJvY2VzcyB3aXRoIGVycm5vOiAlZC5cbiIsIGVycm5vKTsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIFByb2Nlc3NM
YXVuY2hlcjo6dGVybWluYXRlUHJvY2VzcygpCit7ICAgCisgICAgaWYgKCFtX3Byb2Nlc3NJZGVu
dGlmaWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBraWxsKG1fcHJvY2Vzc0lkZW50aWZpZXIs
IFNJR0tJTEwpOworfQorCit2b2lkIFByb2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZhbGlkYXRl
KCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vz
cy9MYXVuY2hlci9ndGsvVGhyZWFkTGF1bmNoZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9UaHJlYWRMYXVuY2hlckd0ay5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvVGhyZWFkTGF1bmNoZXJHdGsu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdo
dCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgIlRocmVhZExhdW5jaGVyLmgiCisKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworQ29yZUlQQzo6Q29ubmVjdGlv
bjo6SWRlbnRpZmllciBUaHJlYWRMYXVuY2hlcjo6Y3JlYXRlV2ViVGhyZWFkKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAtMTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NHdGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc0d0ay5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NHdGsuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAx
MSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1PVE9ST0xBIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIE1PVE9ST0xB
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKwordm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCkK
K3sKKyAgIG5vdEltcGxlbWVudGVkKCk7IAorfQorCit2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3Jt
Q2xlYXJSZXNvdXJjZUNhY2hlcygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rl
ciogYXJndW1lbnRzKQoreworICAgIC8vIERpc2FibGUgcnVudGltZSBlbmFibGVkIGZlYXR1cmVz
IHRoYXQgaGF2ZSBubyBXZWJLaXQyIGltcGxlbWVudGF0aW9uIHlldC4KKyNpZiBFTkFCTEUoREVW
SUNFX09SSUVOVEFUSU9OKQorICAgIFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNl
dERldmljZU1vdGlvbkVuYWJsZWQoZmFsc2UpOworICAgIFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNldERldmljZU9yaWVudGF0aW9uRW5hYmxlZChmYWxzZSk7CisjZW5kaWYKKyNp
ZiBFTkFCTEUoU1BFRUNIX0lOUFVUKQorICAgIFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNldFNwZWVjaElucHV0RW5hYmxlZChmYWxzZSk7CisjZW5kaWYKK30KKwordm9pZCBXZWJQ
cm9jZXNzOjpwbGF0Zm9ybVNodXRkb3duKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdo
dCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgIldlYlByb2Nlc3NNYWluR3RrLmgiCisKKyNpbmNsdWRlICJX
S0Jhc2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjaW5jbHVkZSA8
V2ViS2l0Mi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1dLX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5HdGsoaW50
IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKK3sKKyAgICBBU1NFUlQoYXJnYyA9PSAyKTsKKworICAgIGlm
IChnZXRlbnYoIldFQktJVDJfREVCVUdfTU9ERSIpKQorICAgICAgICBzbGVlcCgzMCk7CisKKyNp
ZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyNCwgMCkKKyAgICBndGtfaW5pdCgmYXJnYywgJmFyZ3Yp
OworICAgIGdfdHlwZV9pbml0KCk7CisgICAgZ190aHJlYWRfaW5pdCgpOworI2Vsc2UKKyAgICBn
dGtfaW5pdCgmYXJnYywgJmFyZ3YpOworI2VuZGlmCisKKyAgICBKU0M6OmluaXRpYWxpemVUaHJl
YWRpbmcoKTsKKyAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CisgICAgCisgICAgUnVu
TG9vcDo6aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU6OmRlZmF1bHRTZXNzaW9uKCk7CisKKyAgICAvLyBHZXQgdGhlIHNvY2tldC1pZCByZWNlaXZl
ZCBmcm9tIHNvY2tldHBhaXIoKSBpbiBVSVByb2Nlc3MgdGhyb3VnaCBjb21tYW5kbGluZSBwYXJh
bWV0ZXJzLgorICAgIGludCBzb2NrZXQgPSBhdG9pKGFyZ3ZbMV0pOworICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLmluaXRpYWxpemUoc29ja2V0LCBSdW5Mb29wOjptYWluKCkpOworICAgIFJ1bkxv
b3A6OnJ1bigpOworCisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJ
bmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuaAkocmV2aXNp
b24gMCkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIw
MTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgV2ViUHJvY2Vzc01haW5HdGtfaAorI2RlZmluZSBXZWJQcm9jZXNzTWFpbkd0
a19oCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKK1dLX0VYUE9SVCBpbnQgV2ViUHJv
Y2Vzc01haW5HdGsoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSk7Cit9IC8vIGV4dGVybiAiQyIKKyNl
bmRpZiAvLyBfX2NwbHVzcGx1cworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IFdlYlByb2Nlc3NNYWluX2gKSW5kZXg6IFdlYktpdDIvZ3RrL01haW5HdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvZ3RrL01haW5HdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9n
dGsvTWFpbkd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlv
bnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2ViUHJvY2Vzc01haW5HdGsuaCIKKwor
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIHJldHVybiBXZWJLaXQ6Oldl
YlByb2Nlc3NNYWluR3RrKGFyZ2MsIGFyZ3YpOworfQo=
</data>
<flag name="review"
          id="68933"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78237</attachid>
            <date>2011-01-07 07:23:40 -0800</date>
            <delta_ts>2011-01-08 09:15:20 -0800</delta_ts>
            <desc>ProcessLauncher and ThreadLauncher implementation for WebKit2 GTK port</desc>
            <filename>48511.patch.complete</filename>
            <type>text/plain</type>
            <size>18442</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTI0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTEtMDEtMDcgQW1ydXRoIFJhaiAgPGFtcnV0aHJhakBtb3Rvcm9s
YS5jb20+IGFuZCBSYXZpIFBoYW5lZW5kcmEgS2FzaWJoYXRsYSAgPHJhdmkua2FzaWJoYXRsYUBt
b3Rvcm9sYS5jb20+IAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIENoYW5nZXMgdG8gYWRkIFByb2Nlc3MgTGF1bmNoZXIgYW5kIFRocmVhZCBMYXVuY2hl
ciBpbXBsZW1lbnRhdGlvbiB0byB0aGUgV2ViS2l0MiBHVEsgcG9ydC4KKyAgICAgICAgKGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxMSkKKworICAgICAgICAqIHBs
YXRmb3JtL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0
ay5jcHA6IEltcGxlbWVudCBmdW5jdGlvbiB0byBnZXQgYSBiaW5hcnkncyBwYXRoCisgICAgICAg
IChXZWJDb3JlOjphcHBsaWNhdGlvbkRpcmVjdG9yeVBhdGgpOgorCiAyMDExLTAxLTA3ICBDYXJs
b3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4gYW5kIE1hcnRpbiBSb2JpbnNv
biAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBMb3Bl
ei4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCShyZXZpc2lvbiA3
NTA1NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEhvbGdl
ciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBM
dGQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xODMsNiArMTg0
LDI5IEBACiAgICAgcmV0dXJuIGZpbGVOYW1lOwogfQogCitTdHJpbmcgYXBwbGljYXRpb25EaXJl
Y3RvcnlQYXRoKCkKK3sKKyNpZiBPUyhVTklYKQorI2lmIE9TKExJTlVYKQorICAgIC8vIEhhbmRs
ZSB0aGUgL3Byb2MgZmlsZXN5c3RlbSBjYXNlLgorICAgIGNoYXIgcGF0aEZyb21Qcm9jWzEyOF0g
PSB7MH07CisgICAgaWYgKHJlYWRsaW5rKCIvcHJvYy9zZWxmL2V4ZSIsIHBhdGhGcm9tUHJvYywg
c2l6ZW9mKHBhdGhGcm9tUHJvYykgLSAxKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworCisgICAgcmV0dXJuIGRpcmVjdG9yeU5hbWUoU3RyaW5nOjpmcm9tVVRGOChwYXRoRnJvbVBy
b2MpKTsKKyNlbmRpZgorCisgICAgLy8gSWYgdGhlIGFib3ZlIGZhaWxzLCBjaGVjayB0aGUgUEFU
SCBlbnYgdmFyaWFibGUuCisgICAgR093blB0cjxjaGFyPiBjdXJyZW50RXhlUGF0aChnX2ZpbmRf
cHJvZ3JhbV9pbl9wYXRoKGdfZ2V0X3ByZ25hbWUoKSkpOworICAgIGlmICghY3VycmVudEV4ZVBh
dGguZ2V0KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiBkaXJlY3Rv
cnlOYW1lKFN0cmluZzo6ZnJvbVVURjgoY3VycmVudEV4ZVBhdGguZ2V0KCkpKTsKKyNlbHNlCisg
ICAgcmV0dXJuIFN0cmluZygpOworI2VuZGlmCit9CisKIFN0cmluZyBkaXJlY3RvcnlOYW1lKGNv
bnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICAvKiBObyBudWxsIGNoZWNraW5nIG5lZWRlZCAqLwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgJKHJldmlzaW9uIDc1MDU0KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9GaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw2ICsxOTUsNyBAQAogI2lm
IFBMQVRGT1JNKEdUSykKIFN0cmluZyBmaWxlbmFtZVRvU3RyaW5nKGNvbnN0IGNoYXIqKTsKIFN0
cmluZyBmaWxlbmFtZUZvckRpc3BsYXkoY29uc3QgU3RyaW5nJik7CitTdHJpbmcgYXBwbGljYXRp
b25EaXJlY3RvcnlQYXRoKCk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQpJbmRl
eDogV2ViS2l0Mi9ndGsvTWFpbkd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9ndGsvTWFp
bkd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL2d0ay9NYWluR3RrLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAg
TW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJXZWJQcm9jZXNzTWFpbkd0ay5oIgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCit7CisgICAgcmV0dXJuIFdlYktpdDo6V2ViUHJvY2Vzc01haW5HdGsoYXJnYywg
YXJndik7Cit9CkluZGV4OiBXZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L0NoYW5nZUxvZwkocmV2aXNpb24gNzUyNDIpCisrKyBXZWJLaXQyL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDExLTAxLTA3IEFtcnV0aCBSYWogIDxhbXJ1dGhy
YWpAbW90b3JvbGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgIDxyYXZpLmth
c2liaGF0bGFAbW90b3JvbGEuY29tPiAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDaGFuZ2VzIHRvIGFkZCBQcm9jZXNzIExhdW5jaGVyIGFuZCBUaHJl
YWQgTGF1bmNoZXIgaW1wbGVtZW50YXRpb24gdG8gdGhlIFdlYktpdDIgR1RLIHBvcnQuCisgICAg
ICAgIFRoZSBtYWluKCkgaW1wbGVtZW50YXRpb24gZm9yIFdlYktpdFdlYlByb2Nlc3MgYmluYXJ5
IHRvIGxhdW5jaCBXZWIgcHJvY2VzcyBmcm9tIFVJIHByb2Nlc3MuCisgICAgICAgIChodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MTEpCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTGF1bmNoZXIvZ3RrOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIv
Z3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5jcHA6IEFkZGVkLiBHVEsgKFVOSVhfWDExIHNwZWNpZmlj
KSBpbXBsZW1lbnRhdGlvbiAKKyAgICAgICAgZm9yIGxhdW5jaGluZyBXZWIgUHJvY2VzcyBmcm9t
IFVJIFByb2Nlc3MgaW4gYXN5bmMgbWFubmVyLgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1
bmNoZXI6OmxhdW5jaFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6
OnRlcm1pbmF0ZVByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OnBs
YXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9UaHJl
YWRMYXVuY2hlckd0ay5jcHA6IEFkZGVkLiBTdHViYmVkIGltcGxlbWVudGF0aW9uIGZvciBHVEsg
cG9ydC4gWWV0IHRvIGltcGxlbWVudC4KKyAgICAgICAgKFdlYktpdDo6VGhyZWFkTGF1bmNoZXI6
OmNyZWF0ZVdlYlRocmVhZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9ndGs6IEFkZGVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NHdGsuY3BwOiBBZGRlZC4gVGhlIHN0dWJi
ZWQgaW1wbGVtZW50YXRpb25zIG9mIHZpcnR1YWwgZnVuY3Rpb25zIG9mIFdlYlByb2Nlc3MuaCBm
b3IgR1RLIHBvcnQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2Fj
aGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtQ2xlYXJSZXNv
dXJjZUNhY2hlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlh
bGl6ZVdlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybVNo
dXRkb3duKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5jcHA6
IEFkZGVkLiBUaGUgV2ViUHJvY2Vzc01haW4gY2FsbCB3aGljaCBpbml0aWF0ZXMgdGhlIFdlYiBQ
cm9jZXNzIGZvciBHVEsgcG9ydC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc01haW5HdGsp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmg6IEFkZGVkLiBU
aGUgV2ViUHJvY2Vzc01haW4gZGVjbGFyYXRpb24gZm9yIFdlYiBQcm9jZXNzIGZvciBHVEsgcG9y
dC4KKyAgICAgICAgKiBndGsvTWFpbkd0ay5jcHA6IEFkZGVkLiBUaGUgbWFpbiBmdW5jdGlvbiBp
bXBsZW1lbnRhdGlvbiBmb3IgYmluYXJ5IFdlYktpdFdlYlByb2Nlc3MuCisgICAgICAgIChtYWlu
KToKKwogMjAxMS0wMS0wNiAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgQWx3YXlzIHNob3cgdGhlIGFycm93IGN1cnNvciB3aGVuIHRoZSB3ZWIgcHJvY2VzcyBoYXMg
Y3Jhc2hlZApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzR3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NHdGsuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzR3RrLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp
IDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBNT1RPUk9MQSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBNT1RP
Uk9MQSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1v
ZGVsKENhY2hlTW9kZWwpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsgCit9CisKK3ZvaWQgV2Vi
UHJvY2Vzczo6cGxhdGZvcm1DbGVhclJlc291cmNlQ2FjaGVzKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nl
c3MoY29uc3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYsIENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJQcm9jZXNz
OjpwbGF0Zm9ybVNodXRkb3duKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBXZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg
MjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgIldlYlByb2Nlc3NNYWluR3RrLmgiCisKKyNpbmNsdWRlICJXS0Jhc2Uu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjaW5jbHVkZSA8V2ViS2l0
Mi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XZWJQcm9jZXNzLmg+CisjaW5jbHVkZSA8
Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgorI2lu
Y2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK1dLX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5HdGsoaW50IGFyZ2MsIGNo
YXIqIGFyZ3ZbXSkKK3sKKyAgICBBU1NFUlQoYXJnYyA9PSAyKTsKKworICAgIGlmIChnZXRlbnYo
IldFQktJVDJfREVCVUdfTU9ERSIpKQorICAgICAgICBzbGVlcCgzMCk7CisKKyAgICBndGtfaW5p
dCgmYXJnYywgJmFyZ3YpOworICAgIGdfdHlwZV9pbml0KCk7CisKKyAgICBKU0M6OmluaXRpYWxp
emVUaHJlYWRpbmcoKTsKKyAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CisgICAgCisg
ICAgUnVuTG9vcDo6aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7CisgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGU6OmRlZmF1bHRTZXNzaW9uKCk7CisgICAKKyAgICBpbnQgc29ja2V0ID0gYXRvaShh
cmd2WzFdKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKHNvY2tldCwgUnVu
TG9vcDo6bWFpbigpKTsKKyAgICBSdW5Mb29wOjpydW4oKTsKKworICAgIHJldHVybiAwOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2Vi
UHJvY2Vzc01haW5HdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dl
YlByb2Nlc3NNYWluR3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvZ3Rr
L1dlYlByb2Nlc3NNYWluR3RrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlByb2Nlc3NNYWluR3RrX2gK
KyNkZWZpbmUgV2ViUHJvY2Vzc01haW5HdGtfaAorCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2Uu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJD
IiB7CitXS19FWFBPUlQgaW50IFdlYlByb2Nlc3NNYWluR3RrKGludCBhcmdjLCBjaGFyKiBhcmd2
W10pOworfSAvLyBleHRlcm4gIkMiCisjZW5kaWYgLy8gX19jcGx1c3BsdXMKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJQcm9jZXNzTWFpbl9oCkluZGV4OiBXZWJLaXQy
L1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvVGhyZWFkTGF1bmNoZXJHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9UaHJlYWRMYXVuY2hlckd0ay5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvVGhyZWFkTGF1
bmNoZXJHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25z
IENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlRocmVhZExhdW5jaGVyLmgiCisKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworQ29yZUlQQzo6
Q29ubmVjdGlvbjo6SWRlbnRpZmllciBUaHJlYWRMYXVuY2hlcjo6Y3JlYXRlV2ViVGhyZWFkKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAtMTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvUHJvY2Vz
c0xhdW5jaGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hl
ci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvVUlQ
cm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9s
YSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1PVE9ST0xBIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIE1PVE9ST0xBIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hlci5oIgorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgor
I2luY2x1ZGUgIlJ1bkxvb3AuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisjZGVmaW5lIFdFQktJVF9X
RUJfUFJPQ0VTU19OQU1FICJXZWJLaXRXZWJQcm9jZXNzIiAKKwordm9pZCBQcm9jZXNzTGF1bmNo
ZXI6OmxhdW5jaFByb2Nlc3MoKQoreworICAgIHBpZF90IHBpZCA9IDA7CisKKyAgICBpbnQgc29j
a2V0c1syXTsKKyAgICBpZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgc29j
a2V0cykgPCAwKSAKKyAgICAgICAgcmV0dXJuOworCisgICAgcGlkID0gZm9yaygpOworICAgIGlm
ICghcGlkKSB7IC8vIGNoaWxkIHByb2Nlc3MKKyAgICAgICAgY2xvc2Uoc29ja2V0c1sxXSk7Cisg
ICAgICAgIFN0cmluZyBzb2NrZXQgPSBTdHJpbmc6OmZvcm1hdCgiJWQiLCBzb2NrZXRzWzBdKTsK
KyAgICAgICAgU3RyaW5nIGJpbmFyeVBhdGggPSBhcHBsaWNhdGlvbkRpcmVjdG9yeVBhdGgoKSAr
IFN0cmluZygiLyIpICsgU3RyaW5nKFdFQktJVF9XRUJfUFJPQ0VTU19OQU1FKTsKKyAgICAgICAg
ZXhlY2woYmluYXJ5UGF0aC51dGY4KCkuZGF0YSgpLCBXRUJLSVRfV0VCX1BST0NFU1NfTkFNRSwg
c29ja2V0LnV0ZjgoKS5kYXRhKCksIChjaGFyKikwKTsKKyAgICB9IGVsc2UgaWYgKHBpZCA+IDAp
IHsgLy8gcGFyZW50IHByb2Nlc3MKKyAgICAgICAgY2xvc2Uoc29ja2V0c1swXSk7CisgICAgICAg
IG1fcHJvY2Vzc0lkZW50aWZpZXIgPSBwaWQ7CisgICAgICAgIC8vIFdlJ3ZlIGZpbmlzaGVkIGxh
dW5jaGluZyB0aGUgcHJvY2VzcywgbWVzc2FnZSBiYWNrIHRvIHRoZSBtYWluIHJ1biBsb29wLgor
ICAgICAgICBSdW5Mb29wOjptYWluKCktPnNjaGVkdWxlV29yayhXb3JrSXRlbTo6Y3JlYXRlKHRo
aXMsICZQcm9jZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3MsIHBpZCwgc29j
a2V0c1sxXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxl
IHRvIGZvcmsgYSBuZXcgV2ViUHJvY2VzcyB3aXRoIGVycm5vOiAlZC5cbiIsIGVycm5vKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIFByb2Nlc3NMYXVu
Y2hlcjo6dGVybWluYXRlUHJvY2VzcygpCit7ICAgCisgICAgaWYgKCFtX3Byb2Nlc3NJZGVudGlm
aWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBraWxsKG1fcHJvY2Vzc0lkZW50aWZpZXIsIFNJ
R0tJTEwpOworfQorCit2b2lkIFByb2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkK
K3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="69520"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78312</attachid>
            <date>2011-01-08 09:17:25 -0800</date>
            <delta_ts>2011-01-08 11:34:39 -0800</delta_ts>
            <desc>Addressed review comments</desc>
            <filename>48511.patch.review</filename>
            <type>text/plain</type>
            <size>18728</size>
            <attacher name="Amruth Raj">amruthraj</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
ICAgKHJldmlzaW9uIDc1MjQyKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cgICAod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE1IEBACisyMDExLTAxLTA3IEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90
b3JvbGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgIDxyYXZpLmthc2liaGF0
bGFAbW90b3JvbGEuY29tPiAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDaGFuZ2VzIHRvIGFkZCBQcm9jZXNzIExhdW5jaGVyIGFuZCBUaHJlYWQgTGF1
bmNoZXIgaW1wbGVtZW50YXRpb24gdG8gdGhlIFdlYktpdDIgR1RLIHBvcnQuCisgICAgICAgICho
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MTEpCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9GaWxlU3lzdGVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0
ZW1HdGsuY3BwOiBJbXBsZW1lbnQgZnVuY3Rpb24gdG8gZ2V0IGEgYmluYXJ5J3MgcGF0aAorICAg
ICAgICAoV2ViQ29yZTo6YXBwbGljYXRpb25EaXJlY3RvcnlQYXRoKToKKwogMjAxMS0wMS0wNyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+IGFuZCBNYXJ0aW4gUm9i
aW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBM
b3Blei4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCShyZXZpc2lv
biA3NTA1NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
LCBMdGQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xODMsNiAr
MTg0LDI5IEBACiAgICAgcmV0dXJuIGZpbGVOYW1lOwogfQogCitDU3RyaW5nIGFwcGxpY2F0aW9u
RGlyZWN0b3J5UGF0aCgpCit7CisjaWYgT1MoTElOVVgpCisgICAgLy8gSGFuZGxlIHRoZSAvcHJv
YyBmaWxlc3lzdGVtIGNhc2UuCisgICAgY2hhciBwYXRoRnJvbVByb2NbUEFUSF9NQVhdID0gezB9
OworICAgIGlmIChyZWFkbGluaygiL3Byb2Mvc2VsZi9leGUiLCBwYXRoRnJvbVByb2MsIHNpemVv
ZihwYXRoRnJvbVByb2MpIC0gMSkgPT0gLTEpCisgICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisK
KyAgICBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlbmFtZVRvU3RyaW5nKHBhdGhGcm9tUHJvYyk7Cisg
ICAgcmV0dXJuIGRpcmVjdG9yeU5hbWUoZmlsZW5hbWUpLnV0ZjgoKTsKKyNlbGlmIE9TKFVOSVgp
CisgICAgLy8gSWYgdGhlIGFib3ZlIGZhaWxzLCBjaGVjayB0aGUgUEFUSCBlbnYgdmFyaWFibGUu
CisgICAgR093blB0cjxjaGFyPiBjdXJyZW50RXhlUGF0aChnX2ZpbmRfcHJvZ3JhbV9pbl9wYXRo
KGdfZ2V0X3ByZ25hbWUoKSkpOworICAgIGlmICghY3VycmVudEV4ZVBhdGguZ2V0KCkpCisgICAg
ICAgIHJldHVybiBDU3RyaW5nKCk7CisKKyAgICBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlbmFtZVRv
U3RyaW5nKGN1cnJlbnRFeGVQYXRoLmdldCgpKTsKKyAgICByZXR1cm4gZGlyZWN0b3J5TmFtZShm
aWxlTmFtZSkudXRmOCgpOworI2Vsc2UKKyAgICByZXR1cm4gQ1N0cmluZygpOworI2VuZGlmCit9
CisKIFN0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICAvKiBO
byBudWxsIGNoZWNraW5nIG5lZWRlZCAqLwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lz
dGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgJKHJldmlz
aW9uIDc1MDU0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5NSw2ICsxOTUsNyBAQAogI2lmIFBMQVRGT1JNKEdUSykKIFN0cmluZyBmaWxlbmFt
ZVRvU3RyaW5nKGNvbnN0IGNoYXIqKTsKIFN0cmluZyBmaWxlbmFtZUZvckRpc3BsYXkoY29uc3Qg
U3RyaW5nJik7CitDU3RyaW5nIGFwcGxpY2F0aW9uRGlyZWN0b3J5UGF0aCgpOwogI2VuZGlmCiAK
ICNpZiBQTEFURk9STShDSFJPTUlVTSkKSW5kZXg6IFdlYktpdDIvZ3RrL01haW5HdGsuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdDIvZ3RrL01haW5HdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
S2l0Mi9ndGsvTWFpbkd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2ViUHJvY2Vzc01haW5HdGsu
aCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIHJldHVybiBXZWJL
aXQ6OldlYlByb2Nlc3NNYWluR3RrKGFyZ2MsIGFyZ3YpOworfQpJbmRleDogV2ViS2l0Mi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VMb2cgICAocmV2aXNpb24gNzUyNDIp
CisrKyBXZWJLaXQyL0NoYW5nZUxvZyAgICh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTEtMDEtMDcgQW1ydXRoIFJhaiAgPGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBSYXZp
IFBoYW5lZW5kcmEgS2FzaWJoYXRsYSAgPHJhdmkua2FzaWJoYXRsYUBtb3Rvcm9sYS5jb20+IAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZXMg
dG8gYWRkIFByb2Nlc3MgTGF1bmNoZXIgYW5kIFRocmVhZCBMYXVuY2hlciBpbXBsZW1lbnRhdGlv
biB0byB0aGUgV2ViS2l0MiBHVEsgcG9ydC4KKyAgICAgICAgVGhlIG1haW4oKSBpbXBsZW1lbnRh
dGlvbiBmb3IgV2ViS2l0V2ViUHJvY2VzcyBiaW5hcnkgdG8gbGF1bmNoIFdlYiBwcm9jZXNzIGZy
b20gVUkgcHJvY2Vzcy4KKyAgICAgICAgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00ODUxMSkKKworICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9ndGs6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNw
cDogQWRkZWQuIEdUSyAoVU5JWF9YMTEgc3BlY2lmaWMpIGltcGxlbWVudGF0aW9uIAorICAgICAg
ICBmb3IgbGF1bmNoaW5nIFdlYiBQcm9jZXNzIGZyb20gVUkgUHJvY2VzcyBpbiBhc3luYyBtYW5u
ZXIuCisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2Vzcyk6Cisg
ICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1RocmVhZExhdW5jaGVyR3RrLmNwcDogQWRkZWQu
IFN0dWJiZWQgaW1wbGVtZW50YXRpb24gZm9yIEdUSyBwb3J0LiBZZXQgdG8gaW1wbGVtZW50Lgor
ICAgICAgICAoV2ViS2l0OjpUaHJlYWRMYXVuY2hlcjo6Y3JlYXRlV2ViVGhyZWFkKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL2d0azogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9ndGsvV2Vi
UHJvY2Vzc0d0ay5jcHA6IEFkZGVkLiBUaGUgc3R1YmJlZCBpbXBsZW1lbnRhdGlvbnMgb2Ygdmly
dHVhbCBmdW5jdGlvbnMgb2YgV2ViUHJvY2Vzcy5oIGZvciBHVEsgcG9ydC4KKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1DbGVhclJlc291cmNlQ2FjaGVzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtU2h1dGRvd24pOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmNwcDogQWRkZWQuIFRoZSBXZWJQcm9jZXNzTWFp
biBjYWxsIHdoaWNoIGluaXRpYXRlcyB0aGUgV2ViIFByb2Nlc3MgZm9yIEdUSyBwb3J0LgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpbkd0ayk6CisgICAgICAgICogV2ViUHJvY2Vzcy9n
dGsvV2ViUHJvY2Vzc01haW5HdGsuaDogQWRkZWQuIFRoZSBXZWJQcm9jZXNzTWFpbiBkZWNsYXJh
dGlvbiBmb3IgV2ViIFByb2Nlc3MgZm9yIEdUSyBwb3J0LgorICAgICAgICAqIGd0ay9NYWluR3Rr
LmNwcDogQWRkZWQuIFRoZSBtYWluIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIGZvciBiaW5hcnkg
V2ViS2l0V2ViUHJvY2Vzcy4KKyAgICAgICAgKG1haW4pOgorCiAyMDExLTAxLTA2ICBBZGFtIFJv
YmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KCiAgICAgICAgIEFsd2F5cyBzaG93IHRoZSBhcnJvdyBj
dXJzb3Igd2hlbiB0aGUgd2ViIHByb2Nlc3MgaGFzIGNyYXNoZWQKSW5kZXg6IFdlYktpdDIvV2Vi
UHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc0d0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQ
cm9jZXNzL2d0ay9XZWJQcm9jZXNzR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvV2Vi
UHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc0d0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgTU9UT1JPTEEgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgTU9UT1JPTEEgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2Vi
UHJvY2Vzcy5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXZWJQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lk
IFdlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7IAorfQorCit2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtQ2xlYXJSZXNv
dXJjZUNhY2hlcygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJQcm9j
ZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMmLCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1TaHV0ZG93bigpCit7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9X
ZWJQcm9jZXNzTWFpbkd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL2d0
ay9XZWJQcm9jZXNzTWFpbkd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1dlYlByb2Nl
c3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJXZWJQcm9jZXNz
TWFpbkd0ay5oIgorCisjaW5jbHVkZSAiV0tCYXNlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZUhhbmRsZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvUnVuTG9vcC5oPgorI2luY2x1ZGUgPFdl
YktpdDIvV2ViUHJvY2Vzcy5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXS19FWFBPUlQgaW50
IFdlYlByb2Nlc3NNYWluR3RrKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCit7CisgICAgQVNTRVJU
KGFyZ2MgPT0gMik7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgaWYgKGdfZ2V0ZW52KCJXRUJLSVQy
X1BBVVNFX1dFQl9QUk9DRVNTX09OX0xBVU5DSCIpKQorICAgICAgICBzbGVlcCgzMCk7CisjZW5k
aWYKKworICAgIGd0a19pbml0KCZhcmdjLCAmYXJndik7CisgICAgZ190eXBlX2luaXQoKTsKKwor
ICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgIFdURjo6aW5pdGlhbGl6ZU1haW5U
aHJlYWQoKTsKKyAgICAKKyAgICBSdW5Mb29wOjppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKKyAg
ICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6ZGVmYXVsdFNlc3Npb24oKTsKKyAgIAorICAgIGlu
dCBzb2NrZXQgPSBhdG9pKGFyZ3ZbMV0pOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRp
YWxpemUoc29ja2V0LCBSdW5Mb29wOjptYWluKCkpOworICAgIFJ1bkxvb3A6OnJ1bigpOworCisg
ICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9X
ZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
V2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYktp
dDIvV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9i
aWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2Vi
UHJvY2Vzc01haW5HdGtfaAorI2RlZmluZSBXZWJQcm9jZXNzTWFpbkd0a19oCisKKyNpbmNsdWRl
IDxXZWJLaXQyL1dLQmFzZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworI2lmZGVmIF9fY3Bs
dXNwbHVzCitleHRlcm4gIkMiIHsKK1dLX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5HdGsoaW50
IGFyZ2MsIGNoYXIqIGFyZ3ZbXSk7Cit9IC8vIGV4dGVybiAiQyIKKyNlbmRpZiAvLyBfX2NwbHVz
cGx1cworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlByb2Nlc3NNYWlu
X2gKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9UaHJlYWRMYXVuY2hlckd0
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1RocmVh
ZExhdW5jaGVyR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0xhdW5j
aGVyL2d0ay9UaHJlYWRMYXVuY2hlckd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiVGhyZWFkTGF1
bmNoZXIuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIFRocmVhZExhdW5jaGVyOjpj
cmVhdGVXZWJUaHJlYWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIC0x
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0xh
dW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
VUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0
IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTU9UT1JPTEEgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
TU9UT1JPTEEgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiUHJvY2Vzc0xhdW5jaGVyLmgiCisKKyNpbmNsdWRl
ICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUnVuTG9vcC5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KKyNpbmNs
dWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjb25zdCBjaGFyKiBnV2ViS2l0V2Vi
UHJvY2Vzc05hbWUgPSAiV2ViS2l0V2ViUHJvY2VzcyI7CisKK3ZvaWQgUHJvY2Vzc0xhdW5jaGVy
OjpsYXVuY2hQcm9jZXNzKCkKK3sKKyAgICBwaWRfdCBwaWQgPSAwOworCisgICAgaW50IHNvY2tl
dHNbMl07CisgICAgaWYgKHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19TVFJFQU0sIDAsIHNvY2tl
dHMpIDwgMCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNyZWF0aW9uIG9mIHNvY2tldCBm
YWlsZWQgd2l0aCBlcnJubyAlZC5cbiIsIGVycm5vKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwaWQgPSBmb3JrKCk7CisgICAg
aWYgKCFwaWQpIHsgLy8gY2hpbGQgcHJvY2VzcworICAgICAgICBjbG9zZShzb2NrZXRzWzFdKTsK
KyAgICAgICAgU3RyaW5nIHNvY2tldCA9IFN0cmluZzo6Zm9ybWF0KCIlZCIsIHNvY2tldHNbMF0p
OworICAgICAgICBHT3duUHRyPGdjaGFyPiBiaW5hcnlQYXRoKGdfYnVpbGRfZmlsZW5hbWUoYXBw
bGljYXRpb25EaXJlY3RvcnlQYXRoKCkuZGF0YSgpLCBnV2ViS2l0V2ViUHJvY2Vzc05hbWUsIE5V
TEwpKTsKKyAgICAgICAgZXhlY2woYmluYXJ5UGF0aC5nZXQoKSwgZ1dlYktpdFdlYlByb2Nlc3NO
YW1lLCBzb2NrZXQudXRmOCgpLmRhdGEoKSwgTlVMTCk7CisgICAgfSBlbHNlIGlmIChwaWQgPiAw
KSB7IC8vIHBhcmVudCBwcm9jZXNzCisgICAgICAgIGNsb3NlKHNvY2tldHNbMF0pOworICAgICAg
ICBtX3Byb2Nlc3NJZGVudGlmaWVyID0gcGlkOworICAgICAgICAvLyBXZSd2ZSBmaW5pc2hlZCBs
YXVuY2hpbmcgdGhlIHByb2Nlc3MsIG1lc3NhZ2UgYmFjayB0byB0aGUgbWFpbiBydW4gbG9vcC4K
KyAgICAgICAgUnVuTG9vcDo6bWFpbigpLT5zY2hlZHVsZVdvcmsoV29ya0l0ZW06OmNyZWF0ZSh0
aGlzLCAmUHJvY2Vzc0xhdW5jaGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdQcm9jZXNzLCBwaWQsIHNv
Y2tldHNbMV0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJs
ZSB0byBmb3JrIGEgbmV3IFdlYlByb2Nlc3Mgd2l0aCBlcnJubzogJWQuXG4iLCBlcnJubyk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBQcm9jZXNzTGF1
bmNoZXI6OnRlcm1pbmF0ZVByb2Nlc3MoKQoreyAgIAorICAgIGlmICghbV9wcm9jZXNzSWRlbnRp
ZmllcikKKyAgICAgICAgcmV0dXJuOworCisgICAga2lsbChtX3Byb2Nlc3NJZGVudGlmaWVyLCBT
SUdLSUxMKTsKK30KKwordm9pZCBQcm9jZXNzTGF1bmNoZXI6OnBsYXRmb3JtSW52YWxpZGF0ZSgp
Cit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="69612"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78323</attachid>
            <date>2011-01-08 11:34:39 -0800</date>
            <delta_ts>2011-01-08 12:19:49 -0800</delta_ts>
            <desc>Removed the unnecessary encoding</desc>
            <filename>48511.patch.review</filename>
            <type>text/plain</type>
            <size>18728</size>
            <attacher name="Amruth Raj">amruthraj</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
ICAgKHJldmlzaW9uIDc1MjQyKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cgICAod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE1IEBACisyMDExLTAxLTA3IEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90
b3JvbGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgIDxyYXZpLmthc2liaGF0
bGFAbW90b3JvbGEuY29tPiAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDaGFuZ2VzIHRvIGFkZCBQcm9jZXNzIExhdW5jaGVyIGFuZCBUaHJlYWQgTGF1
bmNoZXIgaW1wbGVtZW50YXRpb24gdG8gdGhlIFdlYktpdDIgR1RLIHBvcnQuCisgICAgICAgICho
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MTEpCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9GaWxlU3lzdGVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0
ZW1HdGsuY3BwOiBJbXBsZW1lbnQgZnVuY3Rpb24gdG8gZ2V0IGEgYmluYXJ5J3MgcGF0aAorICAg
ICAgICAoV2ViQ29yZTo6YXBwbGljYXRpb25EaXJlY3RvcnlQYXRoKToKKwogMjAxMS0wMS0wNyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+IGFuZCBNYXJ0aW4gUm9i
aW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBM
b3Blei4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwICAocmV2aXNp
b24gNzUwNTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcCAgKHdv
cmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKICAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJv
cmEsIEx0ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHks
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE4Myw2
ICsxODQsMjkgQEAKICAgICByZXR1cm4gZmlsZU5hbWU7CiB9CiAKK0NTdHJpbmcgYXBwbGljYXRp
b25EaXJlY3RvcnlQYXRoKCkKK3sKKyNpZiBPUyhMSU5VWCkKKyAgICAvLyBIYW5kbGUgdGhlIC9w
cm9jIGZpbGVzeXN0ZW0gY2FzZS4KKyAgICBjaGFyIHBhdGhGcm9tUHJvY1tQQVRIX01BWF0gPSB7
MH07CisgICAgaWYgKHJlYWRsaW5rKCIvcHJvYy9zZWxmL2V4ZSIsIHBhdGhGcm9tUHJvYywgc2l6
ZW9mKHBhdGhGcm9tUHJvYykgLSAxKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsK
KworICAgIEdPd25QdHI8Y2hhcj4gZGlybmFtZShnX3BhdGhfZ2V0X2Rpcm5hbWUocGF0aEZyb21Q
cm9jKSk7CisgICAgcmV0dXJuIENTdHJpbmcoZGlybmFtZS5nZXQoKSk7CisjZWxpZiBPUyhVTklY
KQorICAgIC8vIElmIHRoZSBhYm92ZSBmYWlscywgY2hlY2sgdGhlIFBBVEggZW52IHZhcmlhYmxl
LgorICAgIEdPd25QdHI8Y2hhcj4gY3VycmVudEV4ZVBhdGgoZ19maW5kX3Byb2dyYW1faW5fcGF0
aChnX2dldF9wcmduYW1lKCkpKTsKKyAgICBpZiAoIWN1cnJlbnRFeGVQYXRoLmdldCgpKQorICAg
ICAgICByZXR1cm4gQ1N0cmluZygpOworCisgICAgR093blB0cjxjaGFyPiBkaXJuYW1lKGdfcGF0
aF9nZXRfZGlybmFtZShjdXJyZW50RXhlUGF0aC5nZXQoKSkpOworICAgIHJldHVybiBDU3RyaW5n
KGRpcm5hbWUuZ2V0KCkpOworI2Vsc2UKKyAgICByZXR1cm4gQ1N0cmluZygpOworI2VuZGlmCit9
CisKIFN0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICAvKiBO
byBudWxsIGNoZWNraW5nIG5lZWRlZCAqLwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lz
dGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgJKHJldmlz
aW9uIDc1MDU0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5NSw2ICsxOTUsNyBAQAogI2lmIFBMQVRGT1JNKEdUSykKIFN0cmluZyBmaWxlbmFt
ZVRvU3RyaW5nKGNvbnN0IGNoYXIqKTsKIFN0cmluZyBmaWxlbmFtZUZvckRpc3BsYXkoY29uc3Qg
U3RyaW5nJik7CitDU3RyaW5nIGFwcGxpY2F0aW9uRGlyZWN0b3J5UGF0aCgpOwogI2VuZGlmCiAK
ICNpZiBQTEFURk9STShDSFJPTUlVTSkKSW5kZXg6IFdlYktpdDIvZ3RrL01haW5HdGsuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdDIvZ3RrL01haW5HdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
S2l0Mi9ndGsvTWFpbkd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2ViUHJvY2Vzc01haW5HdGsu
aCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIHJldHVybiBXZWJL
aXQ6OldlYlByb2Nlc3NNYWluR3RrKGFyZ2MsIGFyZ3YpOworfQpJbmRleDogV2ViS2l0Mi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VMb2cgICAocmV2aXNpb24gNzUyNDIp
CisrKyBXZWJLaXQyL0NoYW5nZUxvZyAgICh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTEtMDEtMDcgQW1ydXRoIFJhaiAgPGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBSYXZp
IFBoYW5lZW5kcmEgS2FzaWJoYXRsYSAgPHJhdmkua2FzaWJoYXRsYUBtb3Rvcm9sYS5jb20+IAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZXMg
dG8gYWRkIFByb2Nlc3MgTGF1bmNoZXIgYW5kIFRocmVhZCBMYXVuY2hlciBpbXBsZW1lbnRhdGlv
biB0byB0aGUgV2ViS2l0MiBHVEsgcG9ydC4KKyAgICAgICAgVGhlIG1haW4oKSBpbXBsZW1lbnRh
dGlvbiBmb3IgV2ViS2l0V2ViUHJvY2VzcyBiaW5hcnkgdG8gbGF1bmNoIFdlYiBwcm9jZXNzIGZy
b20gVUkgcHJvY2Vzcy4KKyAgICAgICAgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00ODUxMSkKKworICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9ndGs6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNw
cDogQWRkZWQuIEdUSyAoVU5JWF9YMTEgc3BlY2lmaWMpIGltcGxlbWVudGF0aW9uIAorICAgICAg
ICBmb3IgbGF1bmNoaW5nIFdlYiBQcm9jZXNzIGZyb20gVUkgUHJvY2VzcyBpbiBhc3luYyBtYW5u
ZXIuCisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2Vzcyk6Cisg
ICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1RocmVhZExhdW5jaGVyR3RrLmNwcDogQWRkZWQu
IFN0dWJiZWQgaW1wbGVtZW50YXRpb24gZm9yIEdUSyBwb3J0LiBZZXQgdG8gaW1wbGVtZW50Lgor
ICAgICAgICAoV2ViS2l0OjpUaHJlYWRMYXVuY2hlcjo6Y3JlYXRlV2ViVGhyZWFkKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL2d0azogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9ndGsvV2Vi
UHJvY2Vzc0d0ay5jcHA6IEFkZGVkLiBUaGUgc3R1YmJlZCBpbXBsZW1lbnRhdGlvbnMgb2Ygdmly
dHVhbCBmdW5jdGlvbnMgb2YgV2ViUHJvY2Vzcy5oIGZvciBHVEsgcG9ydC4KKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1DbGVhclJlc291cmNlQ2FjaGVzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtU2h1dGRvd24pOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmNwcDogQWRkZWQuIFRoZSBXZWJQcm9jZXNzTWFp
biBjYWxsIHdoaWNoIGluaXRpYXRlcyB0aGUgV2ViIFByb2Nlc3MgZm9yIEdUSyBwb3J0LgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpbkd0ayk6CisgICAgICAgICogV2ViUHJvY2Vzcy9n
dGsvV2ViUHJvY2Vzc01haW5HdGsuaDogQWRkZWQuIFRoZSBXZWJQcm9jZXNzTWFpbiBkZWNsYXJh
dGlvbiBmb3IgV2ViIFByb2Nlc3MgZm9yIEdUSyBwb3J0LgorICAgICAgICAqIGd0ay9NYWluR3Rr
LmNwcDogQWRkZWQuIFRoZSBtYWluIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIGZvciBiaW5hcnkg
V2ViS2l0V2ViUHJvY2Vzcy4KKyAgICAgICAgKG1haW4pOgorCiAyMDExLTAxLTA2ICBBZGFtIFJv
YmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KCiAgICAgICAgIEFsd2F5cyBzaG93IHRoZSBhcnJvdyBj
dXJzb3Igd2hlbiB0aGUgd2ViIHByb2Nlc3MgaGFzIGNyYXNoZWQKSW5kZXg6IFdlYktpdDIvV2Vi
UHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc0d0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQ
cm9jZXNzL2d0ay9XZWJQcm9jZXNzR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvV2Vi
UHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc0d0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgTU9UT1JPTEEgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgTU9UT1JPTEEgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2Vi
UHJvY2Vzcy5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXZWJQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lk
IFdlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7IAorfQorCit2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtQ2xlYXJSZXNv
dXJjZUNhY2hlcygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJQcm9j
ZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMmLCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1TaHV0ZG93bigpCit7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9X
ZWJQcm9jZXNzTWFpbkd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL2d0
ay9XZWJQcm9jZXNzTWFpbkd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1dlYlByb2Nl
c3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJXZWJQcm9jZXNz
TWFpbkd0ay5oIgorCisjaW5jbHVkZSAiV0tCYXNlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZUhhbmRsZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvUnVuTG9vcC5oPgorI2luY2x1ZGUgPFdl
YktpdDIvV2ViUHJvY2Vzcy5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXS19FWFBPUlQgaW50
IFdlYlByb2Nlc3NNYWluR3RrKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCit7CisgICAgQVNTRVJU
KGFyZ2MgPT0gMik7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgaWYgKGdfZ2V0ZW52KCJXRUJLSVQy
X1BBVVNFX1dFQl9QUk9DRVNTX09OX0xBVU5DSCIpKQorICAgICAgICBzbGVlcCgzMCk7CisjZW5k
aWYKKworICAgIGd0a19pbml0KCZhcmdjLCAmYXJndik7CisgICAgZ190eXBlX2luaXQoKTsKKwor
ICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgIFdURjo6aW5pdGlhbGl6ZU1haW5U
aHJlYWQoKTsKKyAgICAKKyAgICBSdW5Mb29wOjppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKKyAg
ICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6ZGVmYXVsdFNlc3Npb24oKTsKKyAgIAorICAgIGlu
dCBzb2NrZXQgPSBhdG9pKGFyZ3ZbMV0pOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRp
YWxpemUoc29ja2V0LCBSdW5Mb29wOjptYWluKCkpOworICAgIFJ1bkxvb3A6OnJ1bigpOworCisg
ICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9X
ZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
V2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYktp
dDIvV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9i
aWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2Vi
UHJvY2Vzc01haW5HdGtfaAorI2RlZmluZSBXZWJQcm9jZXNzTWFpbkd0a19oCisKKyNpbmNsdWRl
IDxXZWJLaXQyL1dLQmFzZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworI2lmZGVmIF9fY3Bs
dXNwbHVzCitleHRlcm4gIkMiIHsKK1dLX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5HdGsoaW50
IGFyZ2MsIGNoYXIqIGFyZ3ZbXSk7Cit9IC8vIGV4dGVybiAiQyIKKyNlbmRpZiAvLyBfX2NwbHVz
cGx1cworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlByb2Nlc3NNYWlu
X2gKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9UaHJlYWRMYXVuY2hlckd0
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1RocmVh
ZExhdW5jaGVyR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0xhdW5j
aGVyL2d0ay9UaHJlYWRMYXVuY2hlckd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiVGhyZWFkTGF1
bmNoZXIuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIFRocmVhZExhdW5jaGVyOjpj
cmVhdGVXZWJUaHJlYWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIC0x
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0xh
dW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
VUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0
IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTU9UT1JPTEEgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
TU9UT1JPTEEgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiUHJvY2Vzc0xhdW5jaGVyLmgiCisKKyNpbmNsdWRl
ICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUnVuTG9vcC5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KKyNpbmNs
dWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjb25zdCBjaGFyKiBnV2ViS2l0V2Vi
UHJvY2Vzc05hbWUgPSAiV2ViS2l0V2ViUHJvY2VzcyI7CisKK3ZvaWQgUHJvY2Vzc0xhdW5jaGVy
OjpsYXVuY2hQcm9jZXNzKCkKK3sKKyAgICBwaWRfdCBwaWQgPSAwOworCisgICAgaW50IHNvY2tl
dHNbMl07CisgICAgaWYgKHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19TVFJFQU0sIDAsIHNvY2tl
dHMpIDwgMCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNyZWF0aW9uIG9mIHNvY2tldCBm
YWlsZWQgd2l0aCBlcnJubyAlZC5cbiIsIGVycm5vKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwaWQgPSBmb3JrKCk7CisgICAg
aWYgKCFwaWQpIHsgLy8gY2hpbGQgcHJvY2VzcworICAgICAgICBjbG9zZShzb2NrZXRzWzFdKTsK
KyAgICAgICAgU3RyaW5nIHNvY2tldCA9IFN0cmluZzo6Zm9ybWF0KCIlZCIsIHNvY2tldHNbMF0p
OworICAgICAgICBHT3duUHRyPGdjaGFyPiBiaW5hcnlQYXRoKGdfYnVpbGRfZmlsZW5hbWUoYXBw
bGljYXRpb25EaXJlY3RvcnlQYXRoKCkuZGF0YSgpLCBnV2ViS2l0V2ViUHJvY2Vzc05hbWUsIE5V
TEwpKTsKKyAgICAgICAgZXhlY2woYmluYXJ5UGF0aC5nZXQoKSwgZ1dlYktpdFdlYlByb2Nlc3NO
YW1lLCBzb2NrZXQudXRmOCgpLmRhdGEoKSwgTlVMTCk7CisgICAgfSBlbHNlIGlmIChwaWQgPiAw
KSB7IC8vIHBhcmVudCBwcm9jZXNzCisgICAgICAgIGNsb3NlKHNvY2tldHNbMF0pOworICAgICAg
ICBtX3Byb2Nlc3NJZGVudGlmaWVyID0gcGlkOworICAgICAgICAvLyBXZSd2ZSBmaW5pc2hlZCBs
YXVuY2hpbmcgdGhlIHByb2Nlc3MsIG1lc3NhZ2UgYmFjayB0byB0aGUgbWFpbiBydW4gbG9vcC4K
KyAgICAgICAgUnVuTG9vcDo6bWFpbigpLT5zY2hlZHVsZVdvcmsoV29ya0l0ZW06OmNyZWF0ZSh0
aGlzLCAmUHJvY2Vzc0xhdW5jaGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdQcm9jZXNzLCBwaWQsIHNv
Y2tldHNbMV0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJs
ZSB0byBmb3JrIGEgbmV3IFdlYlByb2Nlc3Mgd2l0aCBlcnJubzogJWQuXG4iLCBlcnJubyk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBQcm9jZXNzTGF1
bmNoZXI6OnRlcm1pbmF0ZVByb2Nlc3MoKQoreyAgIAorICAgIGlmICghbV9wcm9jZXNzSWRlbnRp
ZmllcikKKyAgICAgICAgcmV0dXJuOworCisgICAga2lsbChtX3Byb2Nlc3NJZGVudGlmaWVyLCBT
SUdLSUxMKTsKK30KKwordm9pZCBQcm9jZXNzTGF1bmNoZXI6OnBsYXRmb3JtSW52YWxpZGF0ZSgp
Cit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78325</attachid>
            <date>2011-01-08 12:08:46 -0800</date>
            <delta_ts>2011-01-08 23:14:07 -0800</delta_ts>
            <desc>Removed the explicit constructor call</desc>
            <filename>48511.patch.review</filename>
            <type>text/plain</type>
            <size>18711</size>
            <attacher name="Amruth Raj">amruthraj</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
ICAgKHJldmlzaW9uIDc1MjQyKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cgICAod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTAxLTA3IEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90
b3JvbGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgIDxyYXZpLmthc2liaGF0
bGFAbW90b3JvbGEuY29tPiAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDaGFuZ2VzIHRvIGFkZCBQcm9jZXNzIExhdW5jaGVyIGFuZCBUaHJlYWQgTGF1
bmNoZXIgaW1wbGVtZW50YXRpb24gdG8gdGhlIFdlYktpdDIgR1RLIHBvcnQuCisgICAgICAgICho
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MTEpCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9GaWxlU3lzdGVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0
ZW1HdGsuY3BwOiBJbXBsZW1lbnQgZnVuY3Rpb24gdG8gZ2V0IGEgYmluYXJ5J3MgcGF0aAorICAg
ICAgICAoV2ViQ29yZTo6YXBwbGljYXRpb25EaXJlY3RvcnlQYXRoKToKKwogMjAxMS0wMS0wNyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+IGFuZCBNYXJ0aW4gUm9i
aW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4g
TG9wZXouCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcCAgKHJldmlz
aW9uIDc1MDU0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAgICh3
b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFi
b3JhLCBMdGQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xODMs
NiArMTg0LDI5IEBACiAgICAgcmV0dXJuIGZpbGVOYW1lOwogfQogCitDU3RyaW5nIGFwcGxpY2F0
aW9uRGlyZWN0b3J5UGF0aCgpCit7CisjaWYgT1MoTElOVVgpCisgICAgLy8gSGFuZGxlIHRoZSAv
cHJvYyBmaWxlc3lzdGVtIGNhc2UuCisgICAgY2hhciBwYXRoRnJvbVByb2NbUEFUSF9NQVhdID0g
ezB9OworICAgIGlmIChyZWFkbGluaygiL3Byb2Mvc2VsZi9leGUiLCBwYXRoRnJvbVByb2MsIHNp
emVvZihwYXRoRnJvbVByb2MpIC0gMSkgPT0gLTEpCisgICAgICAgIHJldHVybiBDU3RyaW5nKCk7
CisKKyAgICBHT3duUHRyPGNoYXI+IGRpcm5hbWUoZ19wYXRoX2dldF9kaXJuYW1lKHBhdGhGcm9t
UHJvYykpOworICAgIHJldHVybiBkaXJuYW1lLmdldCgpOworI2VsaWYgT1MoVU5JWCkKKyAgICAv
LyBJZiB0aGUgYWJvdmUgZmFpbHMsIGNoZWNrIHRoZSBQQVRIIGVudiB2YXJpYWJsZS4KKyAgICBH
T3duUHRyPGNoYXI+IGN1cnJlbnRFeGVQYXRoKGdfZmluZF9wcm9ncmFtX2luX3BhdGgoZ19nZXRf
cHJnbmFtZSgpKSk7CisgICAgaWYgKCFjdXJyZW50RXhlUGF0aC5nZXQoKSkKKyAgICAgICAgcmV0
dXJuIENTdHJpbmcoKTsKKworICAgIEdPd25QdHI8Y2hhcj4gZGlybmFtZShnX3BhdGhfZ2V0X2Rp
cm5hbWUoY3VycmVudEV4ZVBhdGguZ2V0KCkpKTsKKyAgICByZXR1cm4gZGlybmFtZS5nZXQoKTsK
KyNlbHNlCisgICAgcmV0dXJuIENTdHJpbmcoKTsKKyNlbmRpZgorfQorCiBTdHJpbmcgZGlyZWN0
b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgLyogTm8gbnVsbCBjaGVja2luZyBu
ZWVkZWQgKi8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCShyZXZpc2lvbiA3NTA1NCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsNiArMTk1
LDcgQEAKICNpZiBQTEFURk9STShHVEspCiBTdHJpbmcgZmlsZW5hbWVUb1N0cmluZyhjb25zdCBj
aGFyKik7CiBTdHJpbmcgZmlsZW5hbWVGb3JEaXNwbGF5KGNvbnN0IFN0cmluZyYpOworQ1N0cmlu
ZyBhcHBsaWNhdGlvbkRpcmVjdG9yeVBhdGgoKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCkluZGV4OiBXZWJLaXQyL2d0ay9NYWluR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL2d0ay9NYWluR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvZ3RrL01haW5HdGsu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdo
dCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgIldlYlByb2Nlc3NNYWluR3RrLmgiCisKK2ludCBtYWluKGlu
dCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICByZXR1cm4gV2ViS2l0OjpXZWJQcm9jZXNzTWFp
bkd0ayhhcmdjLCBhcmd2KTsKK30KSW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvQ2hhbmdlTG9nICAgKHJldmlzaW9uIDc1MjQyKQorKysgV2ViS2l0Mi9DaGFu
Z2VMb2cgICAod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDExLTAxLTA3IEFtcnV0
aCBSYWogIDxhbXJ1dGhyYWpAbW90b3JvbGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2li
aGF0bGEgIDxyYXZpLmthc2liaGF0bGFAbW90b3JvbGEuY29tPiAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2VzIHRvIGFkZCBQcm9jZXNzIExh
dW5jaGVyIGFuZCBUaHJlYWQgTGF1bmNoZXIgaW1wbGVtZW50YXRpb24gdG8gdGhlIFdlYktpdDIg
R1RLIHBvcnQuCisgICAgICAgIFRoZSBtYWluKCkgaW1wbGVtZW50YXRpb24gZm9yIFdlYktpdFdl
YlByb2Nlc3MgYmluYXJ5IHRvIGxhdW5jaCBXZWIgcHJvY2VzcyBmcm9tIFVJIHByb2Nlc3MuCisg
ICAgICAgIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MTEpCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvZ3RrOiBBZGRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5jcHA6IEFkZGVkLiBHVEsgKFVO
SVhfWDExIHNwZWNpZmljKSBpbXBsZW1lbnRhdGlvbiAKKyAgICAgICAgZm9yIGxhdW5jaGluZyBX
ZWIgUHJvY2VzcyBmcm9tIFVJIFByb2Nlc3MgaW4gYXN5bmMgbWFubmVyLgorICAgICAgICAoV2Vi
S2l0OjpQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpQ
cm9jZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpQcm9j
ZXNzTGF1bmNoZXI6OnBsYXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0xh
dW5jaGVyL2d0ay9UaHJlYWRMYXVuY2hlckd0ay5jcHA6IEFkZGVkLiBTdHViYmVkIGltcGxlbWVu
dGF0aW9uIGZvciBHVEsgcG9ydC4gWWV0IHRvIGltcGxlbWVudC4KKyAgICAgICAgKFdlYktpdDo6
VGhyZWFkTGF1bmNoZXI6OmNyZWF0ZVdlYlRocmVhZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9n
dGs6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NHdGsuY3BwOiBB
ZGRlZC4gVGhlIHN0dWJiZWQgaW1wbGVtZW50YXRpb25zIG9mIHZpcnR1YWwgZnVuY3Rpb25zIG9m
IFdlYlByb2Nlc3MuaCBmb3IgR1RLIHBvcnQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6
OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBs
YXRmb3JtQ2xlYXJSZXNvdXJjZUNhY2hlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzOjpwbGF0Zm9ybVNodXRkb3duKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2d0ay9XZWJQcm9j
ZXNzTWFpbkd0ay5jcHA6IEFkZGVkLiBUaGUgV2ViUHJvY2Vzc01haW4gY2FsbCB3aGljaCBpbml0
aWF0ZXMgdGhlIFdlYiBQcm9jZXNzIGZvciBHVEsgcG9ydC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc01haW5HdGspOgorICAgICAgICAqIFdlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWlu
R3RrLmg6IEFkZGVkLiBUaGUgV2ViUHJvY2Vzc01haW4gZGVjbGFyYXRpb24gZm9yIFdlYiBQcm9j
ZXNzIGZvciBHVEsgcG9ydC4KKyAgICAgICAgKiBndGsvTWFpbkd0ay5jcHA6IEFkZGVkLiBUaGUg
bWFpbiBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiBmb3IgYmluYXJ5IFdlYktpdFdlYlByb2Nlc3Mu
CisgICAgICAgIChtYWluKToKKwogMjAxMS0wMS0wNiAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBs
ZS5jb20+CgogICAgICAgICBBbHdheXMgc2hvdyB0aGUgYXJyb3cgY3Vyc29yIHdoZW4gdGhlIHdl
YiBwcm9jZXNzIGhhcyBjcmFzaGVkCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlBy
b2Nlc3NHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViUHJv
Y2Vzc0d0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlBy
b2Nlc3NHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25z
IENvcHlyaWdodCAoYykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1P
VE9ST0xBIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIE1PVE9ST0xBIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKworI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJQcm9jZXNzOjpwbGF0
Zm9ybVNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOyAK
K30KKwordm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUNsZWFyUmVzb3VyY2VDYWNoZXMoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplV2ViUHJvY2Vzcyhjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiwgQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtU2h1dGRvd24oKQoreworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5H
dGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNz
TWFpbkd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMg
Q29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2ViUHJvY2Vzc01haW5HdGsuaCIKKworI2lu
Y2x1ZGUgIldLQmFzZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KKyNp
bmNsdWRlIDxXZWJLaXQyL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dlYlByb2Nlc3Mu
aD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8cnVudGltZS9Jbml0aWFsaXplVGhy
ZWFkaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV0tfRVhQT1JUIGludCBXZWJQcm9jZXNzTWFpbkd0
ayhpbnQgYXJnYywgY2hhciogYXJndltdKQoreworICAgIEFTU0VSVChhcmdjID09IDIpOworCisj
aWZuZGVmIE5ERUJVRworICAgIGlmIChnX2dldGVudigiV0VCS0lUMl9QQVVTRV9XRUJfUFJPQ0VT
U19PTl9MQVVOQ0giKSkKKyAgICAgICAgc2xlZXAoMzApOworI2VuZGlmCisKKyAgICBndGtfaW5p
dCgmYXJnYywgJmFyZ3YpOworICAgIGdfdHlwZV9pbml0KCk7CisKKyAgICBKU0M6OmluaXRpYWxp
emVUaHJlYWRpbmcoKTsKKyAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CisgICAgCisg
ICAgUnVuTG9vcDo6aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7CisgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGU6OmRlZmF1bHRTZXNzaW9uKCk7CisgICAKKyAgICBpbnQgc29ja2V0ID0gYXRvaShh
cmd2WzFdKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKHNvY2tldCwgUnVu
TG9vcDo6bWFpbigpKTsKKyAgICBSdW5Mb29wOjpydW4oKTsKKworICAgIHJldHVybiAwOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2Vi
UHJvY2Vzc01haW5HdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dl
YlByb2Nlc3NNYWluR3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvZ3Rr
L1dlYlByb2Nlc3NNYWluR3RrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlByb2Nlc3NNYWluR3RrX2gK
KyNkZWZpbmUgV2ViUHJvY2Vzc01haW5HdGtfaAorCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2Uu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJD
IiB7CitXS19FWFBPUlQgaW50IFdlYlByb2Nlc3NNYWluR3RrKGludCBhcmdjLCBjaGFyKiBhcmd2
W10pOworfSAvLyBleHRlcm4gIkMiCisjZW5kaWYgLy8gX19jcGx1c3BsdXMKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJQcm9jZXNzTWFpbl9oCkluZGV4OiBXZWJLaXQy
L1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvVGhyZWFkTGF1bmNoZXJHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9UaHJlYWRMYXVuY2hlckd0ay5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvVGhyZWFkTGF1
bmNoZXJHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25z
IENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlRocmVhZExhdW5jaGVyLmgiCisKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworQ29yZUlQQzo6
Q29ubmVjdGlvbjo6SWRlbnRpZmllciBUaHJlYWRMYXVuY2hlcjo6Y3JlYXRlV2ViVGhyZWFkKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAtMTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvUHJvY2Vz
c0xhdW5jaGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hl
ci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvVUlQ
cm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9s
YSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1PVE9ST0xBIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIE1PVE9ST0xBIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hlci5oIgorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgor
I2luY2x1ZGUgIlJ1bkxvb3AuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HT3duUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY29uc3QgY2hhciogZ1dlYktpdFdlYlByb2Nlc3NOYW1lID0gIldl
YktpdFdlYlByb2Nlc3MiOworCit2b2lkIFByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2Vzcygp
Cit7CisgICAgcGlkX3QgcGlkID0gMDsKKworICAgIGludCBzb2NrZXRzWzJdOworICAgIGlmIChz
b2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBzb2NrZXRzKSA8IDApIHsKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJDcmVhdGlvbiBvZiBzb2NrZXQgZmFpbGVkIHdpdGggZXJybm8g
JWQuXG4iLCBlcnJubyk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgcGlkID0gZm9yaygpOworICAgIGlmICghcGlkKSB7IC8vIGNo
aWxkIHByb2Nlc3MKKyAgICAgICAgY2xvc2Uoc29ja2V0c1sxXSk7CisgICAgICAgIFN0cmluZyBz
b2NrZXQgPSBTdHJpbmc6OmZvcm1hdCgiJWQiLCBzb2NrZXRzWzBdKTsKKyAgICAgICAgR093blB0
cjxnY2hhcj4gYmluYXJ5UGF0aChnX2J1aWxkX2ZpbGVuYW1lKGFwcGxpY2F0aW9uRGlyZWN0b3J5
UGF0aCgpLmRhdGEoKSwgZ1dlYktpdFdlYlByb2Nlc3NOYW1lLCBOVUxMKSk7CisgICAgICAgIGV4
ZWNsKGJpbmFyeVBhdGguZ2V0KCksIGdXZWJLaXRXZWJQcm9jZXNzTmFtZSwgc29ja2V0LnV0Zjgo
KS5kYXRhKCksIE5VTEwpOworICAgIH0gZWxzZSBpZiAocGlkID4gMCkgeyAvLyBwYXJlbnQgcHJv
Y2VzcworICAgICAgICBjbG9zZShzb2NrZXRzWzBdKTsKKyAgICAgICAgbV9wcm9jZXNzSWRlbnRp
ZmllciA9IHBpZDsKKyAgICAgICAgLy8gV2UndmUgZmluaXNoZWQgbGF1bmNoaW5nIHRoZSBwcm9j
ZXNzLCBtZXNzYWdlIGJhY2sgdG8gdGhlIG1haW4gcnVuIGxvb3AuCisgICAgICAgIFJ1bkxvb3A6
Om1haW4oKS0+c2NoZWR1bGVXb3JrKFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJlByb2Nlc3NMYXVu
Y2hlcjo6ZGlkRmluaXNoTGF1bmNoaW5nUHJvY2VzcywgcGlkLCBzb2NrZXRzWzFdKSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gZm9yayBhIG5ldyBX
ZWJQcm9jZXNzIHdpdGggZXJybm86ICVkLlxuIiwgZXJybm8pOworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUHJvY2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVQ
cm9jZXNzKCkKK3sgICAKKyAgICBpZiAoIW1fcHJvY2Vzc0lkZW50aWZpZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIGtpbGwobV9wcm9jZXNzSWRlbnRpZmllciwgU0lHS0lMTCk7Cit9CisKK3Zv
aWQgUHJvY2Vzc0xhdW5jaGVyOjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78342</attachid>
            <date>2011-01-08 23:08:48 -0800</date>
            <delta_ts>2011-01-09 00:57:52 -0800</delta_ts>
            <desc>Patch on latest trunk for commit</desc>
            <filename>48511_commit_queue_Jan9.patch</filename>
            <type>text/plain</type>
            <size>18828</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDEtMDggIEFtcnV0aCBS
YWogIDxhbXJ1dGhyYWpAbW90b3JvbGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0
bGEgIDxyYXZpLmthc2liaGF0bGFAbW90b3JvbGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZXMgdG8gYWRkIFByb2Nlc3MgTGF1bmNo
ZXIgYW5kIFRocmVhZCBMYXVuY2hlciBpbXBsZW1lbnRhdGlvbiB0byB0aGUgV2ViS2l0MiBHVEsg
cG9ydC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4
NTExCisKKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxlU3lzdGVtLmg6IAorICAgICAgICAqIHBsYXRm
b3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcDogSW1wbGVtZW50IGZ1bmN0aW9uIHRvIGdldCBhIGJp
bmFyeSdzIHBhdGgKKyAgICAgICAgKFdlYkNvcmU6OmFwcGxpY2F0aW9uRGlyZWN0b3J5UGF0aCk6
CisKIDIwMTEtMDEtMDggQW1ydXRoIFJhaiAgPGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBS
YXZpIFBoYW5lZW5kcmEgS2FzaWJoYXRsYSAgPHJhdmkua2FzaWJoYXRsYUBtb3Rvcm9sYS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw2ICsxOTUsNyBA
QCBib29sIHNhZmVDcmVhdGVGaWxlKGNvbnN0IFN0cmluZyYsIENGRGF0CiAjaWYgUExBVEZPUk0o
R1RLKQogU3RyaW5nIGZpbGVuYW1lVG9TdHJpbmcoY29uc3QgY2hhciopOwogU3RyaW5nIGZpbGVu
YW1lRm9yRGlzcGxheShjb25zdCBTdHJpbmcmKTsKK0NTdHJpbmcgYXBwbGljYXRpb25EaXJlY3Rv
cnlQYXRoKCk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcAkocmV2aXNpb24gNzUz
NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKICAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJv
cmEsIEx0ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHks
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE4Myw2
ICsxODQsMjkgQEAgU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdAogICAg
IHJldHVybiBmaWxlTmFtZTsKIH0KIAorQ1N0cmluZyBhcHBsaWNhdGlvbkRpcmVjdG9yeVBhdGgo
KQoreworI2lmIE9TKExJTlVYKQorICAgIC8vIEhhbmRsZSB0aGUgL3Byb2MgZmlsZXN5c3RlbSBj
YXNlLgorICAgIGNoYXIgcGF0aEZyb21Qcm9jW1BBVEhfTUFYXSA9IHswfTsKKyAgICBpZiAocmVh
ZGxpbmsoIi9wcm9jL3NlbGYvZXhlIiwgcGF0aEZyb21Qcm9jLCBzaXplb2YocGF0aEZyb21Qcm9j
KSAtIDEpID09IC0xKQorICAgICAgICByZXR1cm4gQ1N0cmluZygpOworCisgICAgR093blB0cjxj
aGFyPiBkaXJuYW1lKGdfcGF0aF9nZXRfZGlybmFtZShwYXRoRnJvbVByb2MpKTsKKyAgICByZXR1
cm4gZGlybmFtZS5nZXQoKTsKKyNlbGlmIE9TKFVOSVgpCisgICAgLy8gSWYgdGhlIGFib3ZlIGZh
aWxzLCBjaGVjayB0aGUgUEFUSCBlbnYgdmFyaWFibGUuCisgICAgR093blB0cjxjaGFyPiBjdXJy
ZW50RXhlUGF0aChnX2ZpbmRfcHJvZ3JhbV9pbl9wYXRoKGdfZ2V0X3ByZ25hbWUoKSkpOworICAg
IGlmICghY3VycmVudEV4ZVBhdGguZ2V0KCkpCisgICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisK
KyAgICBHT3duUHRyPGNoYXI+IGRpcm5hbWUoZ19wYXRoX2dldF9kaXJuYW1lKGN1cnJlbnRFeGVQ
YXRoLmdldCgpKSk7CisgICAgcmV0dXJuIGRpcm5hbWUuZ2V0KCk7CisjZWxzZQorICAgIHJldHVy
biBDU3RyaW5nKCk7CisjZW5kaWYKK30KKwogU3RyaW5nIGRpcmVjdG9yeU5hbWUoY29uc3QgU3Ry
aW5nJiBwYXRoKQogewogICAgIC8qIE5vIG51bGwgY2hlY2tpbmcgbmVlZGVkICovCkluZGV4OiBX
ZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNp
b24gNzUzNDUpCisrKyBXZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDMwIEBACisyMDExLTAxLTA4ICBBbXJ1dGggUmFqICA8YW1ydXRocmFqQG1vdG9yb2xhLmNvbT4g
YW5kIFJhdmkgUGhhbmVlbmRyYSBLYXNpYmhhdGxhICA8cmF2aS5rYXNpYmhhdGxhQG1vdG9yb2xh
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
aGFuZ2VzIHRvIGFkZCBQcm9jZXNzIExhdW5jaGVyIGFuZCBUaHJlYWQgTGF1bmNoZXIgaW1wbGVt
ZW50YXRpb24gdG8gdGhlIFdlYktpdDIgR1RLIHBvcnQuCisgICAgICAgIFRoZSBtYWluKCkgaW1w
bGVtZW50YXRpb24gZm9yIFdlYktpdFdlYlByb2Nlc3MgYmluYXJ5IHRvIGxhdW5jaCBXZWIgcHJv
Y2VzcyBmcm9tIFVJIHByb2Nlc3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00ODUxMQorCisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL2d0azog
QWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJH
dGsuY3BwOiBBZGRlZC4gR1RLIChVTklYX1gxMSBzcGVjaWZpYykgaW1wbGVtZW50YXRpb24KKyAg
ICAgICAgKFdlYktpdDo6UHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6UHJvY2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6UHJvY2Vzc0xhdW5jaGVyOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9MYXVuY2hlci9ndGsvVGhyZWFkTGF1bmNoZXJHdGsuY3BwOiBBZGRlZC4gU3R1YmJl
ZCBpbXBsZW1lbnRhdGlvbiBmb3IgR1RLIHBvcnQuIFlldCB0byBpbXBsZW1lbnQuCisgICAgICAg
IChXZWJLaXQ6OlRocmVhZExhdW5jaGVyOjpjcmVhdGVXZWJUaHJlYWQpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvZ3RrOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNz
R3RrLmNwcDogQWRkZWQuIFRoZSBzdHViYmVkIGltcGxlbWVudGF0aW9ucyBvZiB2aXJ0dWFsIGZ1
bmN0aW9ucyBvZiBXZWJQcm9jZXNzLmggZm9yIEdUSyBwb3J0LgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjpwbGF0Zm9ybUNsZWFyUmVzb3VyY2VDYWNoZXMpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1TaHV0ZG93bik6CisgICAgICAgICogV2ViUHJvY2Vzcy9n
dGsvV2ViUHJvY2Vzc01haW5HdGsuY3BwOiBBZGRlZC4gVGhlIFdlYlByb2Nlc3NNYWluIGNhbGwg
d2hpY2ggaW5pdGlhdGVzIHRoZSBXZWIgUHJvY2VzcyBmb3IgR1RLIHBvcnQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NNYWluR3RrKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2d0ay9XZWJQ
cm9jZXNzTWFpbkd0ay5oOiBBZGRlZC4gVGhlIFdlYlByb2Nlc3NNYWluIGRlY2xhcmF0aW9uIGZv
ciBXZWIgUHJvY2VzcyBmb3IgR1RLIHBvcnQuCisgICAgICAgICogZ3RrL01haW5HdGsuY3BwOiBB
ZGRlZC4gVGhlIG1haW4gZnVuY3Rpb24gaW1wbGVtZW50YXRpb24gZm9yIGJpbmFyeSBXZWJLaXRX
ZWJQcm9jZXNzLgorICAgICAgICAobWFpbik6CisKIDIwMTEtMDEtMDcgQW1ydXRoIFJhaiAgPGFt
cnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBSYXZpIFBoYW5lZW5kcmEgS2FzaWJoYXRsYSAgPHJh
dmkua2FzaWJoYXRsYUBtb3Rvcm9sYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGlu
IFJvYmluc29uLgpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NM
YXVuY2hlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIv
Z3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1VJUHJv
Y2Vzcy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEg
TW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBNT1RPUk9MQSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9MQSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNp
bmNsdWRlICJSdW5Mb29wLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j
bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NvbnN0IGNoYXIqIGdXZWJLaXRXZWJQcm9jZXNzTmFtZSA9ICJXZWJL
aXRXZWJQcm9jZXNzIjsKKwordm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQor
eworICAgIHBpZF90IHBpZCA9IDA7CisKKyAgICBpbnQgc29ja2V0c1syXTsKKyAgICBpZiAoc29j
a2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgc29ja2V0cykgPCAwKSB7CisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiQ3JlYXRpb24gb2Ygc29ja2V0IGZhaWxlZCB3aXRoIGVycm5vICVk
LlxuIiwgZXJybm8pOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHBpZCA9IGZvcmsoKTsKKyAgICBpZiAoIXBpZCkgeyAvLyBjaGls
ZCBwcm9jZXNzCisgICAgICAgIGNsb3NlKHNvY2tldHNbMV0pOworICAgICAgICBTdHJpbmcgc29j
a2V0ID0gU3RyaW5nOjpmb3JtYXQoIiVkIiwgc29ja2V0c1swXSk7CisgICAgICAgIEdPd25QdHI8
Z2NoYXI+IGJpbmFyeVBhdGgoZ19idWlsZF9maWxlbmFtZShhcHBsaWNhdGlvbkRpcmVjdG9yeVBh
dGgoKS5kYXRhKCksIGdXZWJLaXRXZWJQcm9jZXNzTmFtZSwgTlVMTCkpOworICAgICAgICBleGVj
bChiaW5hcnlQYXRoLmdldCgpLCBnV2ViS2l0V2ViUHJvY2Vzc05hbWUsIHNvY2tldC51dGY4KCku
ZGF0YSgpLCBOVUxMKTsKKyAgICB9IGVsc2UgaWYgKHBpZCA+IDApIHsgLy8gcGFyZW50IHByb2Nl
c3MKKyAgICAgICAgY2xvc2Uoc29ja2V0c1swXSk7CisgICAgICAgIG1fcHJvY2Vzc0lkZW50aWZp
ZXIgPSBwaWQ7CisgICAgICAgIC8vIFdlJ3ZlIGZpbmlzaGVkIGxhdW5jaGluZyB0aGUgcHJvY2Vz
cywgbWVzc2FnZSBiYWNrIHRvIHRoZSBtYWluIHJ1biBsb29wLgorICAgICAgICBSdW5Mb29wOjpt
YWluKCktPnNjaGVkdWxlV29yayhXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZQcm9jZXNzTGF1bmNo
ZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3MsIHBpZCwgc29ja2V0c1sxXSkpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGZvcmsgYSBuZXcgV2Vi
UHJvY2VzcyB3aXRoIGVycm5vOiAlZC5cbiIsIGVycm5vKTsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIFByb2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJv
Y2VzcygpCit7ICAgCisgICAgaWYgKCFtX3Byb2Nlc3NJZGVudGlmaWVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBraWxsKG1fcHJvY2Vzc0lkZW50aWZpZXIsIFNJR0tJTEwpOworfQorCit2b2lk
IFByb2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvVGhyZWFk
TGF1bmNoZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVy
L2d0ay9UaHJlYWRMYXVuY2hlckd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1VJUHJv
Y2Vzcy9MYXVuY2hlci9ndGsvVGhyZWFkTGF1bmNoZXJHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBN
b2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
IlRocmVhZExhdW5jaGVyLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBUaHJlYWRM
YXVuY2hlcjo6Y3JlYXRlV2ViVGhyZWFkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiAtMTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1dl
YlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2Vi
UHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc0d0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1dl
YlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIE1PVE9ST0xBIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIE1PVE9ST0xBIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIldl
YlByb2Nlc3MuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV2Vi
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9p
ZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOyAKK30KKwordm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUNsZWFyUmVz
b3VyY2VDYWNoZXMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViUHJv
Y2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyhjb25zdCBXZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJiwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtU2h1dGRvd24oKQorewor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9ndGsv
V2ViUHJvY2Vzc01haW5HdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9n
dGsvV2ViUHJvY2Vzc01haW5HdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9XZWJQcm9j
ZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2ViUHJvY2Vz
c01haW5HdGsuaCIKKworI2luY2x1ZGUgIldLQmFzZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVz
b3VyY2VIYW5kbGUuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDxX
ZWJLaXQyL1dlYlByb2Nlc3MuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8cnVu
dGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV0tfRVhQT1JUIGlu
dCBXZWJQcm9jZXNzTWFpbkd0ayhpbnQgYXJnYywgY2hhciogYXJndltdKQoreworICAgIEFTU0VS
VChhcmdjID09IDIpOworCisjaWZuZGVmIE5ERUJVRworICAgIGlmIChnX2dldGVudigiV0VCS0lU
Ml9QQVVTRV9XRUJfUFJPQ0VTU19PTl9MQVVOQ0giKSkKKyAgICAgICAgc2xlZXAoMzApOworI2Vu
ZGlmCisKKyAgICBndGtfaW5pdCgmYXJnYywgJmFyZ3YpOworICAgIGdfdHlwZV9pbml0KCk7CisK
KyAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyAgICBXVEY6OmluaXRpYWxpemVNYWlu
VGhyZWFkKCk7CisgICAgCisgICAgUnVuTG9vcDo6aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7Cisg
ICAgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRlZmF1bHRTZXNzaW9uKCk7CisgICAKKyAgICBp
bnQgc29ja2V0ID0gYXRvaShhcmd2WzFdKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0
aWFsaXplKHNvY2tldCwgUnVuTG9vcDo6bWFpbigpKTsKKyAgICBSdW5Mb29wOjpydW4oKTsKKwor
ICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIv
V2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJL
aXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1v
YmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YlByb2Nlc3NNYWluR3RrX2gKKyNkZWZpbmUgV2ViUHJvY2Vzc01haW5HdGtfaAorCisjaW5jbHVk
ZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNpZmRlZiBfX2Nw
bHVzcGx1cworZXh0ZXJuICJDIiB7CitXS19FWFBPUlQgaW50IFdlYlByb2Nlc3NNYWluR3RrKGlu
dCBhcmdjLCBjaGFyKiBhcmd2W10pOworfSAvLyBleHRlcm4gIkMiCisjZW5kaWYgLy8gX19jcGx1
c3BsdXMKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJQcm9jZXNzTWFp
bl9oCkluZGV4OiBXZWJLaXQyL2d0ay9NYWluR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L2d0ay9NYWluR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvZ3RrL01haW5HdGsuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAo
YykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgIldlYlByb2Nlc3NNYWluR3RrLmgiCisKK2ludCBtYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKK3sKKyAgICByZXR1cm4gV2ViS2l0OjpXZWJQcm9jZXNzTWFpbkd0
ayhhcmdjLCBhcmd2KTsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>