<?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>51474</bug_id>
          
          <creation_ts>2010-12-22 09:25:15 -0800</creation_ts>
          <short_desc>[Qt][WK2] Incomplete clean up on termination</short_desc>
          <delta_ts>2011-01-04 06:02:07 -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>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Balazs Kelemen">kbalazs</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>kenneth</cc>
    
    <cc>kimmo.t.kinnunen</cc>
    
    <cc>kling</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>325518</commentid>
    <comment_count>0</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-12-22 09:25:15 -0800</bug_when>
    <thetext>The cleanup logic is broken again. There are two main issue:
 - we are killing the web process so it does not have a chance to clean up
 - the CrashHandler do not do it&apos;s job
The first one can be fixed easily by sending a SIGTERM instead of a SIGKILL, the second one is more complicated.
Since we force the termination of the web process with a signal we cannot rely on QCoreApplication::aboutToQuit.
Actually we could stop the event loop explicitly in answer to the signal but after a lot of debugging I feel
that QCoreApplication::aboutToQuit is not very reliable so I decided to call the cleanup method explicitly instead of
through the signal-slot mechanism. Besides this we should try to handle a crash only once to avoid endless recursion
if we are crashing during cleanup. In summary I would do the following changes:
 - Sending SIGTERM instead of SIGKILL from the UI process to force termination of the web process.
 - Calling the cleanup method explicitly from the signal handler _and_ from WebProcess::platformShutdown (we can reach that before getting
   the signal)
 - fix the cleanup of the MappedMemoryPool. Currently this is only deleted if we get a signal. If the web process shutting down before
   getting signal this is not deleted.

I feel that doing this in one patch is more reasonable than separating the issues into parts.
All of this is belonging to cleanup on termination.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325579</commentid>
    <comment_count>1</comment_count>
      <attachid>77237</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-12-22 10:58:49 -0800</bug_when>
    <thetext>Created attachment 77237
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325588</commentid>
    <comment_count>2</comment_count>
      <attachid>77241</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-12-22 11:14:26 -0800</bug_when>
    <thetext>Created attachment 77241
Patch - with the new files

Seems like webkit-patch cannot handle git mv.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325594</commentid>
    <comment_count>3</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-12-22 11:20:33 -0800</bug_when>
    <thetext>Attachment 77237 did not build on qt:
Build output: http://queues.webkit.org/results/7248106</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325595</commentid>
    <comment_count>4</comment_count>
      <attachid>77241</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-12-22 11:21:00 -0800</bug_when>
    <thetext>Comment on attachment 77241
Patch - with the new files

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

&gt; WebKit2/Shared/qt/CleanupHandler.h:27
&gt; +#ifndef CrashHandler_h
&gt; +#define CrashHandler_h

Please rename them to CleanupHandler_h before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325597</commentid>
    <comment_count>5</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-12-22 11:23:03 -0800</bug_when>
    <thetext>Kling, could you also take a look at this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325603</commentid>
    <comment_count>6</comment_count>
      <attachid>77241</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-12-22 11:33:45 -0800</bug_when>
    <thetext>Comment on attachment 77241
Patch - with the new files

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

I think Kimmo should look at this before it is being committed. Also I do not like that you do renaming and all these changes in the same patch... it is very hard to see what was actually changed. The rename could easily be another patch. R- for this reason.

&gt; WebKit2/Platform/qt/SharedMemoryQt.cpp:139
&gt; +    // Do not leave behind the shared memory segment!

Comments should not end with ! They should just be informative.

&gt; WebKit2/Platform/qt/SharedMemoryQt.cpp:147
&gt; +    CleanupHandler::instance()-&gt;willDelete(m_impl);

I do not like the name willDelete... I dont understand what it actually does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325823</commentid>
    <comment_count>7</comment_count>
      <attachid>77287</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-12-22 17:59:03 -0800</bug_when>
    <thetext>Created attachment 77287
renaming patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325904</commentid>
    <comment_count>8</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2010-12-22 23:15:11 -0800</bug_when>
    <thetext>As for fixing the existing bugs caused by implementing the crashhandler in the first place, i think this patch is good in general.

Rest is feedback on the crash handler, sorry about this..

However, I think the whole approach here is maybe not that wise. 

IMO the best fix would be to remove the whole crashhandler and have following contract for all the IPC and SHM files:
1. Web process creates them and sends the filename to UI process
2. UI process opens the file and deletes it
3. Web process would delete the file in its object destructors in case ui process didn&apos;t delete it. 

Point 3. would be mainly to maintain consistency. In practice it wouldn&apos;t be exercised at all, because the case ui process wouldn&apos;t open the file most likely mean that ui process crashed, and that should mean that web process would be killed with SIGKILL (or, it would, if it wouldn&apos;t have been modified to be killed with SIGINT instead..).

In practice this would leave stale files only when UI process crashes before deleting the file. This can be made very rare occasion, b/c first code that UI process runs is webkit code when handling the msg. Of course, it&apos;s a tradeoff, but I&apos;d take it any day compared to non-terminating web processes (see below).


As for the concrete shortcomings of current code (crashhandler):

1) Doesn&apos;t survive SIGKILL. The web process will receive sigkill signals.

2) Runs c++ destructors from address space of the crashed program. It could as well be the same destructors that caused the crash in the first place.

3) Deletes files in crash handler. The file names exist in the memory space of crashed process. In other words, those filenames can contain whatever valuable filename, like my $HOME/.emacs, due to some stack/heap smashing bug. When coding properly, I don&apos;t actually think there&apos;s much that you are allowed to do in signal handlers. For one, I wouldn&apos;t call any Qt functions.- 

4) One of the main features of WebKit is that it is fast to kill the process. Now you are again introducing code that will swap in random pages of memory during exit. 

5) Relies on the bug introduced in http://trac.webkit.org/changeset/72077. This means that there&apos;s no guarantees that Web Process will be properly killed when UI process dies.. To ensure this, we would need again to write some daemon monitoring stale, locked up web processes.


Here&apos;s the subset of POSIX that you might be able to run from signal handlers: https://www.securecoding.cert.org/confluence/display/seccode/SIG30-C.+Call+only+asynchronous-safe+functions+within+signal+handlers . 

However, I don&apos;t understand what you can do with the funcs if you cannot rely on the integrity of the memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325906</commentid>
    <comment_count>9</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2010-12-22 23:21:44 -0800</bug_when>
    <thetext>Oops, a typo there:
So using SIGKILL was my original intention in r72077.

And point 5 should read
5) Relies on the bug introduced in http://trac.webkit.org/changeset/72088. ...

In other words, I think crash cleanup should be done otherwise, and sending SIGINT instead of SIGKILL is a bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326556</commentid>
    <comment_count>10</comment_count>
      <attachid>77287</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-12-24 02:51:15 -0800</bug_when>
    <thetext>Comment on attachment 77287
renaming patch

r- due to Kimmo&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328521</commentid>
    <comment_count>11</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-03 04:42:55 -0800</bug_when>
    <thetext>(In reply to comment #8)

Sorry for the long delay, I was on my vacation.

&gt; As for fixing the existing bugs caused by implementing the crashhandler in the first place, i think this patch is good in general.
&gt; 
&gt; Rest is feedback on the crash handler, sorry about this..
&gt; 
&gt; However, I think the whole approach here is maybe not that wise. 
&gt; 
&gt; IMO the best fix would be to remove the whole crashhandler and have following contract for all the IPC and SHM files:
&gt; 1. Web process creates them and sends the filename to UI process
&gt; 2. UI process opens the file and deletes it
&gt; 3. Web process would delete the file in its object destructors in case ui process didn&apos;t delete it. 

But we should assure that those destructors will be executed. By terminating the web process with SIGKILL that&apos;s not the case.
Furthermore, SHM segments must be released on both side unless the system won&apos;t free it up (that is the case on Unix).
 
&gt; 3) Deletes files in crash handler. The file names exist in the memory space of crashed process. In other words, those filenames can contain whatever valuable filename, like my $HOME/.emacs, due to some stack/heap smashing bug. When coding properly, I don&apos;t actually think there&apos;s much that you are allowed to do in signal handlers. For one, I wouldn&apos;t call any Qt functions.- 

Of course crash handling is nasty. The main purpose of doing that was to save the bots from being full of stale files and shm segments in
the case when trunk is in a crashing state for a while. This is not that important however since a production release should be stable enough
to not suffering from this. However, at least on normal termination those staling stuff should be cleaned.

&gt; 
&gt; 4) One of the main features of WebKit is that it is fast to kill the process. Now you are again introducing code that will swap in random pages of memory during exit.

That&apos;s true but how could we do any cleaning without that? I know this is a policy but I do not think that it is a main feature :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328523</commentid>
    <comment_count>12</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-03 04:47:26 -0800</bug_when>
    <thetext>&gt; In other words, I think crash cleanup should be done otherwise, and sending SIGINT instead of SIGKILL is a bug.

In the next patch I will remove the crash handling logic and restrict the patch
to handling cleanup at termination. About SIGKILL: I think about sending SIGTERM,
waiting for the process to finish and if it times out sending SIGKILL. This means
shutting down the UI process would need some more time :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328548</commentid>
    <comment_count>13</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-03 06:12:57 -0800</bug_when>
    <thetext>That&apos;s not just about the web process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328608</commentid>
    <comment_count>14</comment_count>
      <attachid>77816</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-03 10:15:48 -0800</bug_when>
    <thetext>Created attachment 77816
patch v4

Returned to QCoreApplication::aboutToQuit. It had became reliable after I stopped ignoring thread affinity.
No crash handling, just termination. The patch contains the renames and the functional changes in one, but git diff -M is hopefully
making it easier to review (it just shows the differing lines).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328685</commentid>
    <comment_count>15</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-01-03 11:40:43 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created an attachment (id=77816) [details]
&gt; patch v4
&gt; 
&gt; Returned to QCoreApplication::aboutToQuit. It had became reliable after I stopped ignoring thread affinity.
&gt; No crash handling, just termination. The patch contains the renames and the functional changes in one, but git diff -M is hopefully
&gt; making it easier to review (it just shows the differing lines).


If I understand correctly, you moved the file deletion to UI process? I don&apos;t think that solves any existing problem correctly?

If I do killall -9 MiniBrowser, won&apos;t that fail?

How about &apos;killall -9 MiniBrowser QtWebProcess&apos; ?

I don&apos;t think you can rely on crash handlers. You cannot rely on any explicit cleanup.  And you should not have to.

(In reply to comment #11)
&gt; (In reply to comment #8)
&gt; But we should assure that those destructors will be executed. By terminating the web process with SIGKILL that&apos;s not the case.
&gt; Furthermore, SHM segments must be released on both side unless the system won&apos;t free it up (that is the case on Unix).

Sounds like that SHM API is not very robust nor up to modern standards. Maybe there&apos;s something better that actually functions correctly?

&gt; Of course crash handling is nasty. The main purpose of doing that was to save the bots from being full of stale files and shm segments in
&gt; the case when trunk is in a crashing state for a while. This is not that important however since a production release should be stable enough
&gt; to not suffering from this. However, at least on normal termination those staling stuff should be cleaned.

This rationale is actually completely inverse of what is important.

On your buildbots, you can surely fix this by scripts:
&apos;sudo find /tmp -iname &apos;*QtWebKit*&apos; -delete&apos;

On &quot;production&quot; browser there can exist no possibility that stale files would prevent startup.

&gt; &gt; 4) One of the main features of WebKit is that it is fast to kill the process. Now you are again introducing code that will swap in random pages of memory during exit.
&gt; That&apos;s true but how could we do any cleaning without that? I know this is a policy but I do not think that it is a main feature :)

I already explained:
1. open file
2. communicate file to the other process
3. open file in other process
3. delete file in other process

There&apos;s variations of this scheme, most of them a bit more robust than above simple strategy. I think all of them are more robust than deleting the files explicitly in some exit condition.
 
While the patch4 might solve current bugs, i don&apos;t think it&apos;s any solution to the problem of never leaving files behind. Whether or not that should block review, that&apos;s not for me to decide.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328738</commentid>
    <comment_count>16</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-01-03 13:20:53 -0800</bug_when>
    <thetext>And let me clarify:
IHMO it is good to clean up the current implementation, if this is the only way to fix the buildbots.

However, IMO the underlying issue, should be fixed differently to this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328742</commentid>
    <comment_count>17</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-01-03 13:23:03 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; And let me clarify:
&gt; IHMO it is good to clean up the current implementation, if this is the only way to fix the buildbots.
&gt; 
&gt; However, IMO the underlying issue, should be fixed differently to this patch.

So you are for this patch as an intermediate step?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328748</commentid>
    <comment_count>18</comment_count>
      <attachid>77816</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-01-03 13:28:30 -0800</bug_when>
    <thetext>Comment on attachment 77816
patch v4

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

&gt; WebKit2/ChangeLog:10
&gt; +        Do not try to cleanup on crash because it is ont reliable.

not*

&gt; WebKit2/ChangeLog:14
&gt; +        do not own that. This is the case of a server connection.

s/that/it. s/of/with/

&gt; WebKit2/ChangeLog:16
&gt; +        Making MappedMemoryPool a QObject so the CleanupHandler can destruct it

Turn MappedMemoryPool into a ...

&gt; WebKit2/Platform/qt/MappedMemoryPool.cpp:45
&gt; +        // Do not leave mapping files on the disk!

s/!/.

&gt; WebKit2/Platform/qt/SharedMemoryQt.cpp:102
&gt; +    // Do not leave behind the shared memory segment.

move behind to the end. Do not leave the shared memory segment behind.

&gt; WebKit2/Platform/qt/SharedMemoryQt.cpp:139
&gt; +    // Do not leave behind the shared memory segment.

same here

&gt; WebKit2/Shared/qt/CleanupHandler.cpp:41
&gt; +    QCoreApplication* coreApplication = QCoreApplication::instance();

Maybe you can use qApp instead? just wondering...

&gt; WebKit2/Shared/qt/CleanupHandler.h:63
&gt; +    static void sigTermHandler(int);

Is this one still needed?

&gt; WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:90
&gt; +    // Do not leave behind the socket file.

move behind to the end.

&gt; WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:102
&gt; +        static bool registered = false;

isRegistered would be slightly more WebKitish</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328896</commentid>
    <comment_count>19</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-01-03 21:52:51 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; And let me clarify:
&gt; &gt; IHMO it is good to clean up the current implementation, if this is the only way to fix the buildbots.
&gt; &gt; 
&gt; &gt; However, IMO the underlying issue, should be fixed differently to this patch.
&gt; 
&gt; So you are for this patch as an intermediate step?

Sure, if it&apos;s too much work to fix the buildbots by other means.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328956</commentid>
    <comment_count>20</comment_count>
      <attachid>77878</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-04 04:52:09 -0800</bug_when>
    <thetext>Created attachment 77878
patch v5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328957</commentid>
    <comment_count>21</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-04 04:55:42 -0800</bug_when>
    <thetext>&gt; Maybe you can use qApp instead? just wondering...
&gt; 
&gt; &gt; WebKit2/Shared/qt/CleanupHandler.h:63
&gt; &gt; +    static void sigTermHandler(int);
&gt; 
&gt; Is this one still needed?

Yes, to be able to force termination of the web process on UNIX where
QProcess::terminate sends SIGTERM.

All the other suggestions has been done in the new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328958</commentid>
    <comment_count>22</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-04 05:02:41 -0800</bug_when>
    <thetext>Attachment 77878 did not build on qt:
Build output: http://queues.webkit.org/results/7297371</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328959</commentid>
    <comment_count>23</comment_count>
      <attachid>77879</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-04 05:08:18 -0800</bug_when>
    <thetext>Created attachment 77879
patch v5 build-fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328969</commentid>
    <comment_count>24</comment_count>
      <attachid>77879</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-04 06:01:58 -0800</bug_when>
    <thetext>Comment on attachment 77879
patch v5 build-fixed

Clearing flags on attachment: 77879

Committed r74967: &lt;http://trac.webkit.org/changeset/74967&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328970</commentid>
    <comment_count>25</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-04 06:02:07 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77237</attachid>
            <date>2010-12-22 10:58:49 -0800</date>
            <delta_ts>2010-12-22 11:14:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51474-20101222185847.patch</filename>
            <type>text/plain</type>
            <size>12583</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
M2I4ZTExOGEyZjg1MDAxYjU1YTJlZDVkNWM5NmJlYTlkZDE1Nzc3Ny4uZjk0NzcyNTE5YmE3OWM3
YmZhYWU5NThkNTk2ZTJkZTIyNWJmNmRjYiAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0xMi0yMiAgQmFs
YXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XVtXSzJdIFdlYlByb2Nlc3MgZG9lcyBub3Qg
Y2xlYW4gdXAgb24gdGVybWluYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTUxNDc0CisKKyAgICAgICAgRG8gbm90IGtpbGwgdGhlIHdlYiBwcm9j
ZXNzIHRvIGZvcmNlIGl0J3MgdGVybWluYXRpb24uCisgICAgICAgIEZpeCB0aGUgY2xlYW51cCBs
b2dpYyBvZiB0aGUgd2ViIHByb2Nlc3MgYW5kIG1ha2UgaXQgbW9yZSByZWxpYWJsZS4KKworICAg
ICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0LmNwcDoKKyAgICAgICAgKENv
cmVJUEM6OkNvbm5lY3Rpb246OnBsYXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChDb3JlSVBD
OjpDb25uZWN0aW9uOjpvcGVuKTogQWRkIHRoZSBzb2NrZXQgdG8gdGhlIENsZWFudXBIYW5kbGVy
IGJlY2F1c2UgaXQgbGVhdmVzCisgICAgICAgIGJlaGluZCB0aGUgc29ja2V0IGZpbGUgaWYgd2Ug
ZG8gbm90IGRlbGV0ZSBpdC4KKyAgICAgICAgKiBQbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29s
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2UpOiBBZGQg
dGhlIGluc3RhbmNlIHRvIHRoZSBDbGVhbnVwSGFuZGxlci4KKyAgICAgICAgKFdlYktpdDo6TWFw
cGVkTWVtb3J5UG9vbDo6fk1hcHBlZE1lbW9yeVBvb2wpOgorICAgICAgICAqIFBsYXRmb3JtL3F0
L01hcHBlZE1lbW9yeVBvb2wuaDoKKyAgICAgICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5UG9vbDo6
TWFwcGVkTWVtb3J5UG9vbCk6IFJlbW92ZWQgdGhlIGNsZWFyIG1ldGhvZC4gQ2xlYW4gdXAKKyAg
ICAgICAgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBvdGhlciBvYmplY3RzIHRoYXQgYXJlIGFkZGVk
IHRvIHRoZSBDbGVhbnVwSGFuZGxlciB0bworICAgICAgICBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0
IHdpbGwgYmUgZGVsZXRlZCBpZiB0aGUgd2ViIHByb2Nlc3Mgc2h1dHRpbmcgZG93biBiZWZvcmUK
KyAgICAgICAgZ2V0dGluZyB0aGUgU0lHVEVSTSBzaWduYWwuCisgICAgICAgICogUGxhdGZvcm0v
cXQvU2hhcmVkTWVtb3J5UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNy
ZWF0ZSk6IERvIG5vdCB0byByZWx5IG9uIFFDb3JlQXBwbGljYXRpb246OmFib3V0VG9RdWl0IGFu
eW1vcmUuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6flNoYXJlZE1lbW9yeSk6Cisg
ICAgICAgICogU2hhcmVkL3F0L0NsZWFudXBIYW5kbGVyLmNwcDogUmVuYW1lZCBmcm9tIFdlYktp
dDIvU2hhcmVkL3F0L0NyYXNoSGFuZGxlci5jcHAuCisgICAgICAgIFJlbmFtZWQgdGhlIGNsYXNz
IHNpbmNlIGl0IGhhbmRsZXMgbm9ybWFsIHRlcm1pbmF0aW9uIGFzIHdlbGwgYXMgY3Jhc2guCisg
ICAgICAgIChXZWJLaXQ6Omluc3RhbGxTaWduYWxIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6
Q2xlYW51cEhhbmRsZXI6OkNsZWFudXBIYW5kbGVyKTogT25seSByZWx5IG9uIFFDb3JlQXBwbGlj
YXRpb246OmFib3V0VG9RdWl0IG9uCisgICAgICAgIFdpbmRvd3Mgd2hlcmUgd2UgY2Fubm90IHNl
bmQgU0lHVEVSTS4KKyAgICAgICAgKFdlYktpdDo6Q2xlYW51cEhhbmRsZXI6OnNpZ25hbEhhbmRs
ZXIpOiBJbnN0YWxsIHRoZSBkZWZhdWx0IGhhbmRsZXJzIGFnYWluIHRvIGF2b2lkIGVuZGxlc3Mg
cmVjdXJzaW9uCisgICAgICAgIGlmIHdlIGFyZSBjcmFzaGluZyBhZnRlciB0aGlzLiBQb3N0cG9u
ZSB0ZXJtaW5hdGlvbiBpZiB3ZSB3YXMgaW4gZGVsZXRlT2JqZWN0cyBiZWZvcmUgd2hlbiBnb3Qg
dGhlIHNpZ25hbC4KKyAgICAgICAgKFdlYktpdDo6Q2xlYW51cEhhbmRsZXI6OmRlbGV0ZU9iamVj
dHMpOiBIYXJkZW4gYWdhaW5zdCByYWNlIGNvbmRpdGlvbiB3aXRoIHRoZSBzaWduYWwgaGFuZGxl
ciBieSBhdG9taWNhbGx5CisgICAgICAgIHNldCBtX2luRGVsZXRlT2JqZWN0cy4KKyAgICAgICAg
KiBTaGFyZWQvcXQvQ2xlYW51cEhhbmRsZXIuaDogUmVuYW1lZCBmcm9tIFdlYktpdDIvU2hhcmVk
L3F0L0NyYXNoSGFuZGxlci5oLgorICAgICAgICAoV2ViS2l0OjpDbGVhbnVwSGFuZGxlcjo6aW5z
dGFuY2UpOgorICAgICAgICAoV2ViS2l0OjpDbGVhbnVwSGFuZGxlcjo6bWFya0ZvckNsZWFudXAp
OiBSZW5hbWVkIGZyb20gbWFya0ZvckRlbGV0aW9uT25DcmFzaC4KKyAgICAgICAgKFdlYktpdDo6
Q2xlYW51cEhhbmRsZXI6OndpbGxEZWxldGUpOiBSZW5hbWVkIGZyb20gZGlkRGVsZXRlLiBDaGFu
Z2VkIHRoZSBjbGllbnRzCisgICAgICAgIHRvIHVzZSBpdCBiZWZvcmUgYWN0dWFsbHkgZGVsZXRp
bmcgdGhlIG9iamVjdCB0byBhdm9pZCBkb3VibGUgZGVzdHJ1Y3Rpb24gd2hlbiB3ZSBhcmUgY3Jh
c2hpbmcKKyAgICAgICAgd2hlbiBkZWxldGluZyB0aGUgb2JqZWN0LgorICAgICAgICAqIFVJUHJv
Y2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OmNsZWFudXBQcm9jZXNzZXMpOiBEbyBub3Qga2lsbCB0aGUgcHJvY2Vzc2VzIGJ1dCB0ZXJtaW5h
dGUgdGhlbS4KKyAgICAgICAgKFdlYktpdDo6UHJvY2Vzc0xhdW5jaGVySGVscGVyOjp+UHJvY2Vz
c0xhdW5jaGVySGVscGVyKTogRG8gbm90IHRvIHJlbHkgb24gUUNvcmVBcHBsaWNhdGlvbjo6YWJv
dXRUb1F1aXQgYW55bW9yZS4KKyAgICAgICAgKFdlYktpdDo6UHJvY2Vzc0xhdW5jaGVySGVscGVy
OjpQcm9jZXNzTGF1bmNoZXJIZWxwZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UHJvY2Vz
c0xhdW5jaGVyOjp0ZXJtaW5hdGVQcm9jZXNzKTogRG8gbm90IGtpbGwgdGhlIHByb2Nlc3MgYnV0
IHRlcm1pbmF0ZSBpdC4KKyAgICAgICAgKiBXZWJLaXQyLnBybzoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBs
YXRmb3JtU2h1dGRvd24pOiBDYWxsIENsZWFudXBIYW5kbGVyOjpkZWxldGVPYmplY3RzLgorCiAy
MDEwLTEyLTIwICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3BwIGIvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBD
L3F0L0Nvbm5lY3Rpb25RdC5jcHAKaW5kZXggZTNkOTY1Y2ZlMTRlNjQ5N2QxZjk2ZTAxOTAzYWRj
Y2E5NTMwYjRjNS4uMDQ5MDFmMzM3MGYxY2JkMmY5NjI5OGQ5M2RmYzJiZGRmYjE2N2FhZSAxMDA2
NDQKLS0tIGEvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25RdC5jcHAKKysr
IGIvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25RdC5jcHAKQEAgLTI3LDYg
KzI3LDcgQEAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAKICNpbmNsdWRlICJBcmd1bWVudEVu
Y29kZXIuaCIKKyNpbmNsdWRlICJDbGVhbnVwSGFuZGxlci5oIgogI2luY2x1ZGUgIlByb2Nlc3NM
YXVuY2hlci5oIgogI2luY2x1ZGUgIldvcmtJdGVtLmgiCiAjaW5jbHVkZSA8UUFwcGxpY2F0aW9u
PgpAQCAtNTAsNiArNTEsNyBAQCB2b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZShJ
ZGVudGlmaWVyIGlkZW50aWZpZXIpCiAKIHZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlk
YXRlKCkKIHsKKyAgICBXZWJLaXQ6OkNsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT53aWxsRGVs
ZXRlKG1fc29ja2V0KTsKICAgICBkZWxldGUgbV9zb2NrZXQ7CiAgICAgbV9zb2NrZXQgPSAwOwog
fQpAQCAtMTAwLDYgKzEwMiw5IEBAIGJvb2wgQ29ubmVjdGlvbjo6b3BlbigpCiAgICAgICAgIG1f
Y29ubmVjdGlvblF1ZXVlLmNvbm5lY3RTaWduYWwobV9zb2NrZXQsIFNJR05BTChyZWFkeVJlYWQo
KSksIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIp
KTsKICAgICAgICAgbV9jb25uZWN0aW9uUXVldWUuY29ubmVjdFNpZ25hbChtX3NvY2tldCwgU0lH
TkFMKGRpc2Nvbm5lY3RlZCgpKSwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6
Y29ubmVjdGlvbkRpZENsb3NlKSk7CiAgICAgICAgIG1faXNDb25uZWN0ZWQgPSBtX3NvY2tldC0+
d2FpdEZvckNvbm5lY3RlZCgpOworCisgICAgICAgIC8vIERvIG5vdCBsZWF2ZSB0aGUgc29ja2V0
IGZpbGUgb24gdGhlIGRpc2shCisgICAgICAgIFdlYktpdDo6Q2xlYW51cEhhbmRsZXI6Omluc3Rh
bmNlKCktPm1hcmtGb3JDbGVhbnVwKG1fc29ja2V0KTsKICAgICB9CiAgICAgcmV0dXJuIG1faXND
b25uZWN0ZWQ7CiB9CmRpZmYgLS1naXQgYS9XZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9y
eVBvb2wuY3BwIGIvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcAppbmRl
eCA2MjJmOTNhZmNhYjA1ODIxZDNhZjJmMTFhY2Q1NjE1NzE1ZTM2NDUxLi40MGRmMjdjODRjMTVm
NzVkOGE0ZWRlMmQ4MTFkOGRkNDVjNDcxM2MxIDEwMDY0NAotLS0gYS9XZWJLaXQyL1BsYXRmb3Jt
L3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCisrKyBiL1dlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVk
TWVtb3J5UG9vbC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIk1hcHBlZE1lbW9y
eVBvb2wuaCIKIAorI2luY2x1ZGUgIkNsZWFudXBIYW5kbGVyLmgiCiAjaW5jbHVkZSAiU3RkTGli
RXh0cmFzLmgiCiAjaW5jbHVkZSA8UURpcj4KICNpbmNsdWRlIDxRSU9EZXZpY2U+CkBAIC0zNCwx
MyArMzUsMjQgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLU1hcHBlZE1lbW9yeVBvb2w6On5N
YXBwZWRNZW1vcnlQb29sKCkKK01hcHBlZE1lbW9yeVBvb2wqIE1hcHBlZE1lbW9yeVBvb2w6OnRo
ZUluc3RhbmNlID0gMDsKKworTWFwcGVkTWVtb3J5UG9vbCogTWFwcGVkTWVtb3J5UG9vbDo6aW5z
dGFuY2UoKQogewotICAgIGNsZWFyKCk7CisgICAgaWYgKCF0aGVJbnN0YW5jZSkgeworICAgICAg
ICB0aGVJbnN0YW5jZSA9IG5ldyBNYXBwZWRNZW1vcnlQb29sOworCisgICAgICAgIC8vIERvIG5v
dCBsZWF2ZSBtYXBwaW5nIGZpbGVzIG9uIHRoZSBkaXNrIQorICAgICAgICBDbGVhbnVwSGFuZGxl
cjo6aW5zdGFuY2UoKS0+bWFya0ZvckNsZWFudXAodGhlSW5zdGFuY2UpOworICAgIH0KKworICAg
IHJldHVybiB0aGVJbnN0YW5jZTsKIH0KIAotdm9pZCBNYXBwZWRNZW1vcnlQb29sOjpjbGVhcigp
CitNYXBwZWRNZW1vcnlQb29sOjp+TWFwcGVkTWVtb3J5UG9vbCgpCiB7CisgICAgQ2xlYW51cEhh
bmRsZXI6Omluc3RhbmNlKCktPndpbGxEZWxldGUodGhlSW5zdGFuY2UpOworCiAgICAgZm9yICh1
bnNpZ25lZCBuID0gMDsgbiA8IG1fcG9vbC5zaXplKCk7ICsrbikgewogICAgICAgICBNYXBwZWRN
ZW1vcnkmIGN1cnJlbnQgPSBtX3Bvb2wuYXQobik7CiAgICAgICAgIGlmICghY3VycmVudC5maWxl
KQpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmggYi9X
ZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuaAppbmRleCA0YjM0MTNiMGUwYmNi
N2NlMGZlNzdmMzQ2N2VkMGFkZWI3YjVjZTliLi44ZDZhZjhjZWE0NTYyZmRiMTAyNWVkZjQ1MmYx
ZWQxYzZjNTcyM2VlIDEwMDY0NAotLS0gYS9XZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9y
eVBvb2wuaAorKysgYi9XZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuaApAQCAt
MjksNiArMjksNyBAQAogI2RlZmluZSBNYXBwZWRNZW1vcnlQb29sX2gKIAogI2luY2x1ZGUgPFFG
aWxlPgorI2luY2x1ZGUgPFFPYmplY3Q+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtODYsMjMgKzg3LDIwIEBAIHByaXZhdGU6CiAg
ICAgc2l6ZV90IGRhdGFTaXplOwogfTsKIAotY2xhc3MgTWFwcGVkTWVtb3J5UG9vbCB7CitjbGFz
cyBNYXBwZWRNZW1vcnlQb29sIDogUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgTWFwcGVkTWVtb3J5UG9vbCogaW5zdGFuY2UoKQotICAgIHsKLSAgICAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChNYXBwZWRNZW1vcnlQb29sLCBzaW5nbGV0b24sICgpKTsKLSAgICAg
ICAgcmV0dXJuICZzaW5nbGV0b247Ci0gICAgfQorICAgIHN0YXRpYyBNYXBwZWRNZW1vcnlQb29s
KiBpbnN0YW5jZSgpOwogCiAgICAgTWFwcGVkTWVtb3J5KiBtYXBNZW1vcnkoc2l6ZV90IHNpemUp
OwogICAgIE1hcHBlZE1lbW9yeSogbWFwRmlsZShRU3RyaW5nIGZpbGVOYW1lLCBzaXplX3Qgc2l6
ZSk7CiAKLSAgICB2b2lkIGNsZWFyKCk7Ci0KIHByaXZhdGU6Ci0gICAgTWFwcGVkTWVtb3J5UG9v
bCgpIHsgfTsKKyAgICBNYXBwZWRNZW1vcnlQb29sKCkgeyB9CiAgICAgfk1hcHBlZE1lbW9yeVBv
b2woKTsKIAorICAgIHN0YXRpYyBNYXBwZWRNZW1vcnlQb29sKiB0aGVJbnN0YW5jZTsKKwogICAg
IFZlY3RvcjxNYXBwZWRNZW1vcnk+IG1fcG9vbDsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYktpdDIv
UGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwIGIvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFy
ZWRNZW1vcnlRdC5jcHAKaW5kZXggZTUzNDFlY2UxYTgyNjBkODFjZTlmZDE1YzQxMDAzYTlhMTY3
ZDU2MC4uMmVkZGM2YmQxMmE4MDcxNzQzZTEwYTg0NjZlMWJjODEzMWMxZDI1NSAxMDA2NDQKLS0t
IGEvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAKKysrIGIvV2ViS2l0Mi9Q
bGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1
ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgogI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgotI2lu
Y2x1ZGUgIkNyYXNoSGFuZGxlci5oIgorI2luY2x1ZGUgIkNsZWFudXBIYW5kbGVyLmgiCiAjaW5j
bHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5j
bHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KQEAgLTk5LDEwICs5OSw4IEBAIFBhc3NSZWZQdHI8U2hh
cmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShzaXplX3Qgc2l6ZSkKICAgICBzaGFyZWRN
ZW1vcnktPm1fc2l6ZSA9IHNpemU7CiAgICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEgPSBpbXBsLT5k
YXRhKCk7CiAKLSAgICBpbXBsLT5jb25uZWN0KFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCks
IFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChkZWxldGVMYXRlcigpKSk7Ci0KLSAgICAvLyBS
ZWxlYXNlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgZXZlbiBvbiBjcmFzaCEKLSAgICBDcmFz
aEhhbmRsZXI6Omluc3RhbmNlKCktPm1hcmtGb3JEZWxldGlvbk9uQ3Jhc2goaW1wbCk7CisgICAg
Ly8gRG8gbm90IGxlYXZlIGJlaGluZCB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IQorICAgIENs
ZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT5tYXJrRm9yQ2xlYW51cChpbXBsKTsKIAogICAgIHJl
dHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOwogfQpAQCAtMTM4LDI0ICsxMzYsMTYgQEAgUGFz
c1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGNvbnN0IEhhbmRsZSYg
aGFuZGxlLCBQcm90ZWN0aW9uIHAKICAgICBzaGFyZWRNZW1vcnktPm1fc2l6ZSA9IGhhbmRsZS5t
X3NpemU7CiAgICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEgPSBpbXBsLT5kYXRhKCk7CiAKLSAgICBp
bXBsLT5jb25uZWN0KFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCksIFNJR05BTChhYm91dFRv
UXVpdCgpKSwgU0xPVChkZWxldGVMYXRlcigpKSk7Ci0KLSAgICAvLyBSZWxlYXNlIHRoZSBzaGFy
ZWQgbWVtb3J5IHNlZ21lbnQgZXZlbiBvbiBjcmFzaCEKLSAgICBDcmFzaEhhbmRsZXI6Omluc3Rh
bmNlKCktPm1hcmtGb3JEZWxldGlvbk9uQ3Jhc2goaW1wbCk7CisgICAgLy8gRG8gbm90IGxlYXZl
IGJlaGluZCB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IQorICAgIENsZWFudXBIYW5kbGVyOjpp
bnN0YW5jZSgpLT5tYXJrRm9yQ2xlYW51cChpbXBsKTsKIAogICAgIHJldHVybiBzaGFyZWRNZW1v
cnkucmVsZWFzZSgpOwogfQogCiBTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkoKQogewotICAg
IC8vIEF2b2lkIGRvdWJsZSBkZWxldGlvbiB3aGVuIGRlbGV0ZUxhdGVyIGhhcyBhbHJlYWR5IGJl
ZW4gY2FsbGVkIHRocm91Z2ggdGhlIHNpZ25hbC1zbG90IGNvbm5lY3Rpb24uCi0gICAgaWYgKFFD
b3JlQXBwbGljYXRpb246Omluc3RhbmNlKCktPmRpc2Nvbm5lY3QobV9pbXBsKSkgewotICAgICAg
ICAvLyBtX2ltcGwgbXVzdCBiZSBub24tbnVsbCBhbmQgaXQgbXVzdCBwb2ludCB0byBhIHZhbGlk
IFFTaGFyZWRNZW1vcnkgb2JqZWN0LgotICAgICAgICBBU1NFUlQocW9iamVjdF9jYXN0PFFTaGFy
ZWRNZW1vcnkqPihtX2ltcGwpKTsKLSAgICAgICAgZGVsZXRlIG1faW1wbDsKLSAgICB9Ci0KLSAg
ICBDcmFzaEhhbmRsZXI6Omluc3RhbmNlKCktPmRpZERlbGV0ZShtX2ltcGwpOworICAgIENsZWFu
dXBIYW5kbGVyOjppbnN0YW5jZSgpLT53aWxsRGVsZXRlKG1faW1wbCk7CisgICAgZGVsZXRlIG1f
aW1wbDsKIH0KIAogYm9vbCBTaGFyZWRNZW1vcnk6OmNyZWF0ZUhhbmRsZShIYW5kbGUmIGhhbmRs
ZSwgUHJvdGVjdGlvbiBwcm90ZWN0aW9uKQpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwIGIvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1
bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCmluZGV4IDY3NGQ3ZTE0OGQ0OGYyZTEzYmNl
YzAxYWJhMmFjNWQxN2NlNWVkZTguLmEwZjAyYjU5MDRlN2YxNmI1NWM0ZGFhMTIyZGM2N2NlZThk
MjQ3MmQgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NM
YXVuY2hlclF0LmNwcAorKysgYi9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNz
TGF1bmNoZXJRdC5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgi
CiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJSdW5Mb29wLmgiCi0jaW5j
bHVkZSAiQ3Jhc2hIYW5kbGVyLmgiCisjaW5jbHVkZSAiQ2xlYW51cEhhbmRsZXIuaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5n
Lmg+CiAjaW5jbHVkZSA8c3RyaW5nPgpAQCAtNzQsNyArNzQsNyBAQCBzdGF0aWMgdm9pZCBjbGVh
bnVwUHJvY2Vzc2VzKCkKIHsKICAgICBXVEY6Okhhc2hTZXQ8UVByb2Nlc3MqPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBwcm9jZXNzZXMoKS0+YmVnaW4oKTsKICAgICB3aGlsZSAoaXQgIT0gcHJvY2Vz
c2VzKCktPmVuZCgpKSB7Ci0gICAgICAgICgqaXQpLT5raWxsKCk7CisgICAgICAgICgqaXQpLT50
ZXJtaW5hdGUoKTsKICAgICAgICAgKytpdDsKICAgICB9CiB9CkBAIC0xNDAsOCArMTQwLDggQEAg
UUxvY2FsU29ja2V0KiBQcm9jZXNzTGF1bmNoZXJIZWxwZXI6OnRha2VQZW5kaW5nQ29ubmVjdGlv
bigpCiAKIFByb2Nlc3NMYXVuY2hlckhlbHBlcjo6flByb2Nlc3NMYXVuY2hlckhlbHBlcigpCiB7
CisgICAgQ2xlYW51cEhhbmRsZXI6Omluc3RhbmNlKCktPndpbGxEZWxldGUodGhpcyk7CiAgICAg
bV9zZXJ2ZXIuY2xvc2UoKTsKLSAgICBDcmFzaEhhbmRsZXI6Omluc3RhbmNlKCktPmRpZERlbGV0
ZSh0aGlzKTsKIH0KIAogUHJvY2Vzc0xhdW5jaGVySGVscGVyOjpQcm9jZXNzTGF1bmNoZXJIZWxw
ZXIoKQpAQCAtMTUyLDEwICsxNTIsOSBAQCBQcm9jZXNzTGF1bmNoZXJIZWxwZXI6OlByb2Nlc3NM
YXVuY2hlckhlbHBlcigpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAg
ICBjb25uZWN0KCZtX3NlcnZlciwgU0lHTkFMKG5ld0Nvbm5lY3Rpb24oKSksIHRoaXMsIFNMT1Qo
bmV3Q29ubmVjdGlvbigpKSk7Ci0gICAgY29ubmVjdChRQ29yZUFwcGxpY2F0aW9uOjppbnN0YW5j
ZSgpLCBTSUdOQUwoYWJvdXRUb1F1aXQoKSksIFNMT1QoZGVsZXRlTGF0ZXIoKSksIFF0OjpRdWV1
ZWRDb25uZWN0aW9uKTsKIAotICAgIC8vIERvIG5vdCBsZWF2ZSBzb2NrZXQgZmlsZXMgb24gdGhl
IGRpc2sgZXZlbiBvbiBjcmFzaCEKLSAgICBDcmFzaEhhbmRsZXI6Omluc3RhbmNlKCktPm1hcmtG
b3JEZWxldGlvbk9uQ3Jhc2godGhpcyk7CisgICAgLy8gRG8gbm90IGxlYXZlIGJlaGluZCB0aGUg
c29ja2V0IGZpbGUgb24gdGhlIGRpc2shCisgICAgQ2xlYW51cEhhbmRsZXI6Omluc3RhbmNlKCkt
Pm1hcmtGb3JDbGVhbnVwKHRoaXMpOwogfQogCiBQcm9jZXNzTGF1bmNoZXJIZWxwZXIqIFByb2Nl
c3NMYXVuY2hlckhlbHBlcjo6aW5zdGFuY2UoKQpAQCAtMTkyLDcgKzE5MSw3IEBAIHZvaWQgUHJv
Y2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVQcm9jZXNzKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
UU9iamVjdDo6Y29ubmVjdChtX3Byb2Nlc3NJZGVudGlmaWVyLCBTSUdOQUwoZmluaXNoZWQoaW50
KSksIG1fcHJvY2Vzc0lkZW50aWZpZXIsIFNMT1QoZGVsZXRlTGF0ZXIoKSksIFF0OjpRdWV1ZWRD
b25uZWN0aW9uKTsKLSAgICBtX3Byb2Nlc3NJZGVudGlmaWVyLT5raWxsKCk7CisgICAgbV9wcm9j
ZXNzSWRlbnRpZmllci0+dGVybWluYXRlKCk7CiB9CiAKIFFMb2NhbFNvY2tldCogUHJvY2Vzc0xh
dW5jaGVyOjp0YWtlUGVuZGluZ0Nvbm5lY3Rpb24oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9XZWJL
aXQyLnBybyBiL1dlYktpdDIvV2ViS2l0Mi5wcm8KaW5kZXggZTBiOGZiYTMxZDZmMTNlMjNkNTYz
NjUyZWE4NzA1ZjJkYTljMzA3Yi4uNzQ1NzMxMjYzMjA4NTZhYWI0NTVmYzZjYzUyODMzMmI1YmVk
YTExZiAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9XZWJLaXQyLnBybworKysgYi9XZWJLaXQyL1dlYktp
dDIucHJvCkBAIC0yNjksNyArMjY5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgU2hhcmVkL1dlYlVS
TFJlc3BvbnNlLmggXAogICAgIFNoYXJlZC9XZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaCBcCiAg
ICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCBcCi0gICAg
U2hhcmVkL3F0L0NyYXNoSGFuZGxlci5oIFwKKyAgICBTaGFyZWQvcXQvQ2xlYW51cEhhbmRsZXIu
aCBcCiAgICAgU2hhcmVkL3F0L1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmggXAogICAgIFNoYXJl
ZC9xdC9VcGRhdGVDaHVuay5oIFwKICAgICBTaGFyZWQvcXQvV2ViRXZlbnRGYWN0b3J5UXQuaCBc
CkBAIC00NzUsNyArNDc1LDcgQEAgU09VUkNFUyArPSBcCiAgICAgU2hhcmVkL1dlYlVSTFJlc3Bv
bnNlLmNwcCBcCiAgICAgU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwIFwKICAgICBTaGFyZWQvcXQv
QmFja2luZ1N0b3JlUXQuY3BwIFwKLSAgICBTaGFyZWQvcXQvQ3Jhc2hIYW5kbGVyLmNwcCBcCisg
ICAgU2hhcmVkL3F0L0NsZWFudXBIYW5kbGVyLmNwcCBcCiAgICAgU2hhcmVkL3F0L05hdGl2ZVdl
YktleWJvYXJkRXZlbnRRdC5jcHAgXAogICAgIFNoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHAgXAog
ICAgIFNoYXJlZC9xdC9XZWJDb3JlQXJndW1lbnRDb2RlcnNRdC5jcHAgXApkaWZmIC0tZ2l0IGEv
V2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHAgYi9XZWJLaXQyL1dlYlByb2Nl
c3MvcXQvV2ViUHJvY2Vzc1F0LmNwcAppbmRleCA1M2E1MWQzZTBjZWIxN2IxYmQwOTkyMTUzNzE3
ZTk3OTlkMWNmYTMxLi42YThkNzM5ZWFlYzlkZTU0YzUyYjgwNDYwMGUxMDg1YjU5OGUwZDhmIDEw
MDY0NAotLS0gYS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0LmNwcAorKysgYi9X
ZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0LmNwcApAQCAtMjUsNiArMjUsNyBAQAog
CiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogCisjaW5jbHVkZSAiQ2xlYW51cEhhbmRsZXIuaCIK
ICNpbmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NN
YW5hZ2VyPgpAQCAtNTgsNiArNTksOCBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtU2h1dGRv
d24oKQogewogICAgIGRlbGV0ZSBtX25ldHdvcmtBY2Nlc3NNYW5hZ2VyOwogICAgIG1fbmV0d29y
a0FjY2Vzc01hbmFnZXIgPSAwOworCisgICAgQ2xlYW51cEhhbmRsZXI6Omluc3RhbmNlKCktPmRl
bGV0ZU9iamVjdHMoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77241</attachid>
            <date>2010-12-22 11:14:26 -0800</date>
            <delta_ts>2010-12-22 17:58:58 -0800</delta_ts>
            <desc>Patch - with the new files</desc>
            <filename>0001-Qt-WK2-WebProcess-does-not-clean-up-on-termination.patch</filename>
            <type>text/plain</type>
            <size>26965</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">RnJvbSAxZTYyNDM4NjYyZWJhNmJlNzljZjBmNWQ4MjAwNzJjNWIxNGU4NDZiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBCYWxhenMgS2VsZW1lbiA8a2JhbGF6c0B3ZWJraXQub3JnPgpE
YXRlOiBXZWQsIDIyIERlYyAyMDEwIDE5OjEwOjI4ICswMDAwClN1YmplY3Q6IFtQQVRDSF0gW1F0
XVtXSzJdIFdlYlByb2Nlc3MgZG9lcyBub3QgY2xlYW4gdXAgb24gdGVybWluYXRpb24KIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTQ3NAoKUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCgpEbyBub3Qga2lsbCB0aGUgd2ViIHByb2Nlc3MgdG8gZm9yY2UgaXQncyB0
ZXJtaW5hdGlvbi4KRml4IHRoZSBjbGVhbnVwIGxvZ2ljIG9mIHRoZSB3ZWIgcHJvY2VzcyBhbmQg
bWFrZSBpdCBtb3JlIHJlbGlhYmxlLgoKKiBQbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25R
dC5jcHA6CihDb3JlSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9ybUludmFsaWRhdGUpOgooQ29yZUlQ
Qzo6Q29ubmVjdGlvbjo6b3Blbik6IEFkZCB0aGUgc29ja2V0IHRvIHRoZSBDbGVhbnVwSGFuZGxl
ciBiZWNhdXNlIGl0IGxlYXZlcwpiZWhpbmQgdGhlIHNvY2tldCBmaWxlIGlmIHdlIGRvIG5vdCBk
ZWxldGUgaXQuCiogUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHA6CihXZWJLaXQ6Ok1h
cHBlZE1lbW9yeVBvb2w6Omluc3RhbmNlKTogQWRkIHRoZSBpbnN0YW5jZSB0byB0aGUgQ2xlYW51
cEhhbmRsZXIuCihXZWJLaXQ6Ok1hcHBlZE1lbW9yeVBvb2w6On5NYXBwZWRNZW1vcnlQb29sKToK
KiBQbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmg6CihXZWJLaXQ6Ok1hcHBlZE1lbW9yeVBv
b2w6Ok1hcHBlZE1lbW9yeVBvb2wpOiBSZW1vdmVkIHRoZSBjbGVhciBtZXRob2QuIENsZWFuIHVw
CmluIHRoZSBzYW1lIHdheSBhcyB0aGUgb3RoZXIgb2JqZWN0cyB0aGF0IGFyZSBhZGRlZCB0byB0
aGUgQ2xlYW51cEhhbmRsZXIgdG8KZW5zdXJlIHRoYXQgdGhlIG9iamVjdCB3aWxsIGJlIGRlbGV0
ZWQgaWYgdGhlIHdlYiBwcm9jZXNzIHNodXR0aW5nIGRvd24gYmVmb3JlCmdldHRpbmcgdGhlIFNJ
R1RFUk0gc2lnbmFsLgoqIFBsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcDoKKFdlYktpdDo6
U2hhcmVkTWVtb3J5OjpjcmVhdGUpOiBEbyBub3QgdG8gcmVseSBvbiBRQ29yZUFwcGxpY2F0aW9u
OjphYm91dFRvUXVpdCBhbnltb3JlLgooV2ViS2l0OjpTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1v
cnkpOgoqIFNoYXJlZC9xdC9DbGVhbnVwSGFuZGxlci5jcHA6IFJlbmFtZWQgZnJvbSBXZWJLaXQy
L1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuY3BwLgpSZW5hbWVkIHRoZSBjbGFzcyBzaW5jZSBpdCBo
YW5kbGVzIG5vcm1hbCB0ZXJtaW5hdGlvbiBhcyB3ZWxsIGFzIGNyYXNoLgooV2ViS2l0OjppbnN0
YWxsU2lnbmFsSGFuZGxlcik6CihXZWJLaXQ6OkNsZWFudXBIYW5kbGVyOjpDbGVhbnVwSGFuZGxl
cik6IE9ubHkgcmVseSBvbiBRQ29yZUFwcGxpY2F0aW9uOjphYm91dFRvUXVpdCBvbgpXaW5kb3dz
IHdoZXJlIHdlIGNhbm5vdCBzZW5kIFNJR1RFUk0uCihXZWJLaXQ6OkNsZWFudXBIYW5kbGVyOjpz
aWduYWxIYW5kbGVyKTogSW5zdGFsbCB0aGUgZGVmYXVsdCBoYW5kbGVycyBhZ2FpbiB0byBhdm9p
ZCBlbmRsZXNzIHJlY3Vyc2lvbgppZiB3ZSBhcmUgY3Jhc2hpbmcgYWZ0ZXIgdGhpcy4gUG9zdHBv
bmUgdGVybWluYXRpb24gaWYgd2Ugd2FzIGluIGRlbGV0ZU9iamVjdHMgYmVmb3JlIHdoZW4gZ290
IHRoZSBzaWduYWwuCihXZWJLaXQ6OkNsZWFudXBIYW5kbGVyOjpkZWxldGVPYmplY3RzKTogSGFy
ZGVuIGFnYWluc3QgcmFjZSBjb25kaXRpb24gd2l0aCB0aGUgc2lnbmFsIGhhbmRsZXIgYnkgYXRv
bWljYWxseQpzZXQgbV9pbkRlbGV0ZU9iamVjdHMuCiogU2hhcmVkL3F0L0NsZWFudXBIYW5kbGVy
Lmg6IFJlbmFtZWQgZnJvbSBXZWJLaXQyL1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuaC4KKFdlYktp
dDo6Q2xlYW51cEhhbmRsZXI6Omluc3RhbmNlKToKKFdlYktpdDo6Q2xlYW51cEhhbmRsZXI6Om1h
cmtGb3JDbGVhbnVwKTogUmVuYW1lZCBmcm9tIG1hcmtGb3JEZWxldGlvbk9uQ3Jhc2guCihXZWJL
aXQ6OkNsZWFudXBIYW5kbGVyOjp3aWxsRGVsZXRlKTogUmVuYW1lZCBmcm9tIGRpZERlbGV0ZS4g
Q2hhbmdlZCB0aGUgY2xpZW50cwp0byB1c2UgaXQgYmVmb3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRo
ZSBvYmplY3QgdG8gYXZvaWQgZG91YmxlIGRlc3RydWN0aW9uIHdoZW4gd2UgYXJlIGNyYXNoaW5n
CndoZW4gZGVsZXRpbmcgdGhlIG9iamVjdC4KKiBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vz
c0xhdW5jaGVyUXQuY3BwOgooV2ViS2l0OjpjbGVhbnVwUHJvY2Vzc2VzKTogRG8gbm90IGtpbGwg
dGhlIHByb2Nlc3NlcyBidXQgdGVybWluYXRlIHRoZW0uCihXZWJLaXQ6OlByb2Nlc3NMYXVuY2hl
ckhlbHBlcjo6flByb2Nlc3NMYXVuY2hlckhlbHBlcik6IERvIG5vdCB0byByZWx5IG9uIFFDb3Jl
QXBwbGljYXRpb246OmFib3V0VG9RdWl0IGFueW1vcmUuCihXZWJLaXQ6OlByb2Nlc3NMYXVuY2hl
ckhlbHBlcjo6UHJvY2Vzc0xhdW5jaGVySGVscGVyKTogRGl0dG8uCihXZWJLaXQ6OlByb2Nlc3NM
YXVuY2hlcjo6dGVybWluYXRlUHJvY2Vzcyk6IERvIG5vdCBraWxsIHRoZSBwcm9jZXNzIGJ1dCB0
ZXJtaW5hdGUgaXQuCiogV2ViS2l0Mi5wcm86CiogV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzUXQu
Y3BwOgooV2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybVNodXRkb3duKTogQ2FsbCBDbGVhbnVw
SGFuZGxlcjo6ZGVsZXRlT2JqZWN0cy4KLS0tCiBXZWJLaXQyL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDkgKysrKysrKysrKysKIFdlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3BwICAgICAgIHwgICAgNSArCiBXZWJLaXQyL1Bs
YXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwICAgICAgICAgICB8ICAgMTggKysrLQogV2Vi
S2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmggICAgICAgICAgICAgfCAgIDE2ICsr
LS0KIFdlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwICAgICAgICAgICAgIHwg
ICAyNCArKy0tLS0KIFdlYktpdDIvU2hhcmVkL3F0L0NsZWFudXBIYW5kbGVyLmNwcCAgICAgICAg
ICAgICAgIHwgICA5MCArKysrKysrKysrKysrKysrKysrKwogV2ViS2l0Mi9TaGFyZWQvcXQvQ2xl
YW51cEhhbmRsZXIuaCAgICAgICAgICAgICAgICAgfCAgIDc1ICsrKysrKysrKysrKysrKysKIFdl
YktpdDIvU2hhcmVkL3F0L0NyYXNoSGFuZGxlci5jcHAgICAgICAgICAgICAgICAgIHwgICA2NCAt
LS0tLS0tLS0tLS0tLQogV2ViS2l0Mi9TaGFyZWQvcXQvQ3Jhc2hIYW5kbGVyLmggICAgICAgICAg
ICAgICAgICAgfCAgIDcyIC0tLS0tLS0tLS0tLS0tLS0KIC4uLi9VSVByb2Nlc3MvTGF1bmNoZXIv
cXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwICAgIHwgICAxMyArKy0tCiBXZWJLaXQyL1dlYktpdDIu
cHJvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKy0KIFdlYktpdDIvV2Vi
UHJvY2Vzcy9xdC9XZWJQcm9jZXNzUXQuY3BwICAgICAgICAgICAgIHwgICAgMyArCiAxMiBmaWxl
cyBjaGFuZ2VkLCAyNTkgaW5zZXJ0aW9ucygrKSwgMTc0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYktpdDIvU2hhcmVkL3F0L0NsZWFudXBIYW5kbGVyLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYktpdDIvU2hhcmVkL3F0L0NsZWFudXBIYW5kbGVyLmgKIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBXZWJLaXQyL1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuY3BwCiBkZWxldGUgbW9kZSAx
MDA2NDQgV2ViS2l0Mi9TaGFyZWQvcXQvQ3Jhc2hIYW5kbGVyLmgKCmRpZmYgLS1naXQgYS9XZWJL
aXQyL0NoYW5nZUxvZyBiL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDNiOGUxMTguLmY5NDc3MjUg
MTAwNjQ0Ci0tLSBhL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1dlYktpdDIvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNTIgQEAKKzIwMTAtMTItMjIgIEJhbGF6cyBLZWxlbWVuICA8a2JhbGF6c0B3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtRdF1bV0syXSBXZWJQcm9jZXNzIGRvZXMgbm90IGNsZWFuIHVwIG9uIHRlcm1pbmF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTQ3NAorCisg
ICAgICAgIERvIG5vdCBraWxsIHRoZSB3ZWIgcHJvY2VzcyB0byBmb3JjZSBpdCdzIHRlcm1pbmF0
aW9uLgorICAgICAgICBGaXggdGhlIGNsZWFudXAgbG9naWMgb2YgdGhlIHdlYiBwcm9jZXNzIGFu
ZCBtYWtlIGl0IG1vcmUgcmVsaWFibGUuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL3F0
L0Nvbm5lY3Rpb25RdC5jcHA6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9y
bUludmFsaWRhdGUpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6b3Blbik6IEFkZCB0
aGUgc29ja2V0IHRvIHRoZSBDbGVhbnVwSGFuZGxlciBiZWNhdXNlIGl0IGxlYXZlcworICAgICAg
ICBiZWhpbmQgdGhlIHNvY2tldCBmaWxlIGlmIHdlIGRvIG5vdCBkZWxldGUgaXQuCisgICAgICAg
ICogUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1h
cHBlZE1lbW9yeVBvb2w6Omluc3RhbmNlKTogQWRkIHRoZSBpbnN0YW5jZSB0byB0aGUgQ2xlYW51
cEhhbmRsZXIuCisgICAgICAgIChXZWJLaXQ6Ok1hcHBlZE1lbW9yeVBvb2w6On5NYXBwZWRNZW1v
cnlQb29sKToKKyAgICAgICAgKiBQbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmg6CisgICAg
ICAgIChXZWJLaXQ6Ok1hcHBlZE1lbW9yeVBvb2w6Ok1hcHBlZE1lbW9yeVBvb2wpOiBSZW1vdmVk
IHRoZSBjbGVhciBtZXRob2QuIENsZWFuIHVwCisgICAgICAgIGluIHRoZSBzYW1lIHdheSBhcyB0
aGUgb3RoZXIgb2JqZWN0cyB0aGF0IGFyZSBhZGRlZCB0byB0aGUgQ2xlYW51cEhhbmRsZXIgdG8K
KyAgICAgICAgZW5zdXJlIHRoYXQgdGhlIG9iamVjdCB3aWxsIGJlIGRlbGV0ZWQgaWYgdGhlIHdl
YiBwcm9jZXNzIHNodXR0aW5nIGRvd24gYmVmb3JlCisgICAgICAgIGdldHRpbmcgdGhlIFNJR1RF
Uk0gc2lnbmFsLgorICAgICAgICAqIFBsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUpOiBEbyBub3QgdG8gcmVseSBvbiBR
Q29yZUFwcGxpY2F0aW9uOjphYm91dFRvUXVpdCBhbnltb3JlLgorICAgICAgICAoV2ViS2l0OjpT
aGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkpOgorICAgICAgICAqIFNoYXJlZC9xdC9DbGVhbnVw
SGFuZGxlci5jcHA6IFJlbmFtZWQgZnJvbSBXZWJLaXQyL1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIu
Y3BwLgorICAgICAgICBSZW5hbWVkIHRoZSBjbGFzcyBzaW5jZSBpdCBoYW5kbGVzIG5vcm1hbCB0
ZXJtaW5hdGlvbiBhcyB3ZWxsIGFzIGNyYXNoLgorICAgICAgICAoV2ViS2l0OjppbnN0YWxsU2ln
bmFsSGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OkNsZWFudXBIYW5kbGVyOjpDbGVhbnVwSGFu
ZGxlcik6IE9ubHkgcmVseSBvbiBRQ29yZUFwcGxpY2F0aW9uOjphYm91dFRvUXVpdCBvbgorICAg
ICAgICBXaW5kb3dzIHdoZXJlIHdlIGNhbm5vdCBzZW5kIFNJR1RFUk0uCisgICAgICAgIChXZWJL
aXQ6OkNsZWFudXBIYW5kbGVyOjpzaWduYWxIYW5kbGVyKTogSW5zdGFsbCB0aGUgZGVmYXVsdCBo
YW5kbGVycyBhZ2FpbiB0byBhdm9pZCBlbmRsZXNzIHJlY3Vyc2lvbgorICAgICAgICBpZiB3ZSBh
cmUgY3Jhc2hpbmcgYWZ0ZXIgdGhpcy4gUG9zdHBvbmUgdGVybWluYXRpb24gaWYgd2Ugd2FzIGlu
IGRlbGV0ZU9iamVjdHMgYmVmb3JlIHdoZW4gZ290IHRoZSBzaWduYWwuCisgICAgICAgIChXZWJL
aXQ6OkNsZWFudXBIYW5kbGVyOjpkZWxldGVPYmplY3RzKTogSGFyZGVuIGFnYWluc3QgcmFjZSBj
b25kaXRpb24gd2l0aCB0aGUgc2lnbmFsIGhhbmRsZXIgYnkgYXRvbWljYWxseQorICAgICAgICBz
ZXQgbV9pbkRlbGV0ZU9iamVjdHMuCisgICAgICAgICogU2hhcmVkL3F0L0NsZWFudXBIYW5kbGVy
Lmg6IFJlbmFtZWQgZnJvbSBXZWJLaXQyL1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuaC4KKyAgICAg
ICAgKFdlYktpdDo6Q2xlYW51cEhhbmRsZXI6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYktpdDo6
Q2xlYW51cEhhbmRsZXI6Om1hcmtGb3JDbGVhbnVwKTogUmVuYW1lZCBmcm9tIG1hcmtGb3JEZWxl
dGlvbk9uQ3Jhc2guCisgICAgICAgIChXZWJLaXQ6OkNsZWFudXBIYW5kbGVyOjp3aWxsRGVsZXRl
KTogUmVuYW1lZCBmcm9tIGRpZERlbGV0ZS4gQ2hhbmdlZCB0aGUgY2xpZW50cworICAgICAgICB0
byB1c2UgaXQgYmVmb3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRoZSBvYmplY3QgdG8gYXZvaWQgZG91
YmxlIGRlc3RydWN0aW9uIHdoZW4gd2UgYXJlIGNyYXNoaW5nCisgICAgICAgIHdoZW4gZGVsZXRp
bmcgdGhlIG9iamVjdC4KKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xh
dW5jaGVyUXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpjbGVhbnVwUHJvY2Vzc2VzKTogRG8gbm90
IGtpbGwgdGhlIHByb2Nlc3NlcyBidXQgdGVybWluYXRlIHRoZW0uCisgICAgICAgIChXZWJLaXQ6
OlByb2Nlc3NMYXVuY2hlckhlbHBlcjo6flByb2Nlc3NMYXVuY2hlckhlbHBlcik6IERvIG5vdCB0
byByZWx5IG9uIFFDb3JlQXBwbGljYXRpb246OmFib3V0VG9RdWl0IGFueW1vcmUuCisgICAgICAg
IChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlckhlbHBlcjo6UHJvY2Vzc0xhdW5jaGVySGVscGVyKTog
RGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2Vz
cyk6IERvIG5vdCBraWxsIHRoZSBwcm9jZXNzIGJ1dCB0ZXJtaW5hdGUgaXQuCisgICAgICAgICog
V2ViS2l0Mi5wcm86CisgICAgICAgICogV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzUXQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybVNodXRkb3duKTogQ2FsbCBDbGVh
bnVwSGFuZGxlcjo6ZGVsZXRlT2JqZWN0cy4KKwogMjAxMC0xMi0yMCAgQmFsYXpzIEtlbGVtZW4g
IDxrYmFsYXpzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCmRpZmYgLS1naXQgYS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0
LmNwcCBiL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3BwCmluZGV4
IGUzZDk2NWMuLjA0OTAxZjMgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9x
dC9Db25uZWN0aW9uUXQuY3BwCisrKyBiL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25u
ZWN0aW9uUXQuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgog
CiAjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW5jbHVkZSAiQ2xlYW51cEhhbmRsZXIu
aCIKICNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKICNpbmNsdWRlICJXb3JrSXRlbS5oIgog
I2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KQEAgLTUwLDYgKzUxLDcgQEAgdm9pZCBDb25uZWN0aW9u
OjpwbGF0Zm9ybUluaXRpYWxpemUoSWRlbnRpZmllciBpZGVudGlmaWVyKQogCiB2b2lkIENvbm5l
Y3Rpb246OnBsYXRmb3JtSW52YWxpZGF0ZSgpCiB7CisgICAgV2ViS2l0OjpDbGVhbnVwSGFuZGxl
cjo6aW5zdGFuY2UoKS0+d2lsbERlbGV0ZShtX3NvY2tldCk7CiAgICAgZGVsZXRlIG1fc29ja2V0
OwogICAgIG1fc29ja2V0ID0gMDsKIH0KQEAgLTEwMCw2ICsxMDIsOSBAQCBib29sIENvbm5lY3Rp
b246Om9wZW4oKQogICAgICAgICBtX2Nvbm5lY3Rpb25RdWV1ZS5jb25uZWN0U2lnbmFsKG1fc29j
a2V0LCBTSUdOQUwocmVhZHlSZWFkKCkpLCBXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0
aW9uOjpyZWFkeVJlYWRIYW5kbGVyKSk7CiAgICAgICAgIG1fY29ubmVjdGlvblF1ZXVlLmNvbm5l
Y3RTaWduYWwobV9zb2NrZXQsIFNJR05BTChkaXNjb25uZWN0ZWQoKSksIFdvcmtJdGVtOjpjcmVh
dGUodGhpcywgJkNvbm5lY3Rpb246OmNvbm5lY3Rpb25EaWRDbG9zZSkpOwogICAgICAgICBtX2lz
Q29ubmVjdGVkID0gbV9zb2NrZXQtPndhaXRGb3JDb25uZWN0ZWQoKTsKKworICAgICAgICAvLyBE
byBub3QgbGVhdmUgdGhlIHNvY2tldCBmaWxlIG9uIHRoZSBkaXNrIQorICAgICAgICBXZWJLaXQ6
OkNsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT5tYXJrRm9yQ2xlYW51cChtX3NvY2tldCk7CiAg
ICAgfQogICAgIHJldHVybiBtX2lzQ29ubmVjdGVkOwogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9Q
bGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcCBiL1dlYktpdDIvUGxhdGZvcm0vcXQvTWFw
cGVkTWVtb3J5UG9vbC5jcHAKaW5kZXggNjIyZjkzYS4uNDBkZjI3YyAxMDA2NDQKLS0tIGEvV2Vi
S2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcAorKysgYi9XZWJLaXQyL1BsYXRm
b3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRl
ICJNYXBwZWRNZW1vcnlQb29sLmgiCiAKKyNpbmNsdWRlICJDbGVhbnVwSGFuZGxlci5oIgogI2lu
Y2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgogI2luY2x1ZGUgPFFEaXI+CiAjaW5jbHVkZSA8UUlPRGV2
aWNlPgpAQCAtMzQsMTMgKzM1LDI0IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1NYXBwZWRN
ZW1vcnlQb29sOjp+TWFwcGVkTWVtb3J5UG9vbCgpCitNYXBwZWRNZW1vcnlQb29sKiBNYXBwZWRN
ZW1vcnlQb29sOjp0aGVJbnN0YW5jZSA9IDA7CisKK01hcHBlZE1lbW9yeVBvb2wqIE1hcHBlZE1l
bW9yeVBvb2w6Omluc3RhbmNlKCkKIHsKLSAgICBjbGVhcigpOworICAgIGlmICghdGhlSW5zdGFu
Y2UpIHsKKyAgICAgICAgdGhlSW5zdGFuY2UgPSBuZXcgTWFwcGVkTWVtb3J5UG9vbDsKKworICAg
ICAgICAvLyBEbyBub3QgbGVhdmUgbWFwcGluZyBmaWxlcyBvbiB0aGUgZGlzayEKKyAgICAgICAg
Q2xlYW51cEhhbmRsZXI6Omluc3RhbmNlKCktPm1hcmtGb3JDbGVhbnVwKHRoZUluc3RhbmNlKTsK
KyAgICB9CisKKyAgICByZXR1cm4gdGhlSW5zdGFuY2U7CiB9CiAKLXZvaWQgTWFwcGVkTWVtb3J5
UG9vbDo6Y2xlYXIoKQorTWFwcGVkTWVtb3J5UG9vbDo6fk1hcHBlZE1lbW9yeVBvb2woKQogewor
ICAgIENsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT53aWxsRGVsZXRlKHRoZUluc3RhbmNlKTsK
KwogICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBtX3Bvb2wuc2l6ZSgpOyArK24pIHsKICAg
ICAgICAgTWFwcGVkTWVtb3J5JiBjdXJyZW50ID0gbV9wb29sLmF0KG4pOwogICAgICAgICBpZiAo
IWN1cnJlbnQuZmlsZSkKZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVt
b3J5UG9vbC5oIGIvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmgKaW5kZXgg
NGIzNDEzYi4uOGQ2YWY4YyAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRN
ZW1vcnlQb29sLmgKKysrIGIvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmgK
QEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgTWFwcGVkTWVtb3J5UG9vbF9oCiAKICNpbmNsdWRl
IDxRRmlsZT4KKyNpbmNsdWRlIDxRT2JqZWN0PgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTg2LDIzICs4NywyMCBAQCBwcml2YXRl
OgogICAgIHNpemVfdCBkYXRhU2l6ZTsKIH07CiAKLWNsYXNzIE1hcHBlZE1lbW9yeVBvb2wgewor
Y2xhc3MgTWFwcGVkTWVtb3J5UG9vbCA6IFFPYmplY3QgeworICAgIFFfT0JKRUNUCiBwdWJsaWM6
Ci0gICAgc3RhdGljIE1hcHBlZE1lbW9yeVBvb2wqIGluc3RhbmNlKCkKLSAgICB7Ci0gICAgICAg
IERFRklORV9TVEFUSUNfTE9DQUwoTWFwcGVkTWVtb3J5UG9vbCwgc2luZ2xldG9uLCAoKSk7Ci0g
ICAgICAgIHJldHVybiAmc2luZ2xldG9uOwotICAgIH0KKyAgICBzdGF0aWMgTWFwcGVkTWVtb3J5
UG9vbCogaW5zdGFuY2UoKTsKIAogICAgIE1hcHBlZE1lbW9yeSogbWFwTWVtb3J5KHNpemVfdCBz
aXplKTsKICAgICBNYXBwZWRNZW1vcnkqIG1hcEZpbGUoUVN0cmluZyBmaWxlTmFtZSwgc2l6ZV90
IHNpemUpOwogCi0gICAgdm9pZCBjbGVhcigpOwotCiBwcml2YXRlOgotICAgIE1hcHBlZE1lbW9y
eVBvb2woKSB7IH07CisgICAgTWFwcGVkTWVtb3J5UG9vbCgpIHsgfQogICAgIH5NYXBwZWRNZW1v
cnlQb29sKCk7CiAKKyAgICBzdGF0aWMgTWFwcGVkTWVtb3J5UG9vbCogdGhlSW5zdGFuY2U7CisK
ICAgICBWZWN0b3I8TWFwcGVkTWVtb3J5PiBtX3Bvb2w7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJL
aXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcCBiL1dlYktpdDIvUGxhdGZvcm0vcXQv
U2hhcmVkTWVtb3J5UXQuY3BwCmluZGV4IGU1MzQxZWMuLjJlZGRjNmIgMTAwNjQ0Ci0tLSBhL1dl
YktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCisrKyBiL1dlYktpdDIvUGxhdGZv
cm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJB
cmd1bWVudERlY29kZXIuaCIKICNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKLSNpbmNsdWRl
ICJDcmFzaEhhbmRsZXIuaCIKKyNpbmNsdWRlICJDbGVhbnVwSGFuZGxlci5oIgogI2luY2x1ZGUg
IldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUg
PFFDb3JlQXBwbGljYXRpb24+CkBAIC05OSwxMCArOTksOCBAQCBQYXNzUmVmUHRyPFNoYXJlZE1l
bW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZV90IHNpemUpCiAgICAgc2hhcmVkTWVtb3J5
LT5tX3NpemUgPSBzaXplOwogICAgIHNoYXJlZE1lbW9yeS0+bV9kYXRhID0gaW1wbC0+ZGF0YSgp
OwogCi0gICAgaW1wbC0+Y29ubmVjdChRQ29yZUFwcGxpY2F0aW9uOjppbnN0YW5jZSgpLCBTSUdO
QUwoYWJvdXRUb1F1aXQoKSksIFNMT1QoZGVsZXRlTGF0ZXIoKSkpOwotCi0gICAgLy8gUmVsZWFz
ZSB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IGV2ZW4gb24gY3Jhc2ghCi0gICAgQ3Jhc2hIYW5k
bGVyOjppbnN0YW5jZSgpLT5tYXJrRm9yRGVsZXRpb25PbkNyYXNoKGltcGwpOworICAgIC8vIERv
IG5vdCBsZWF2ZSBiZWhpbmQgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCEKKyAgICBDbGVhbnVw
SGFuZGxlcjo6aW5zdGFuY2UoKS0+bWFya0ZvckNsZWFudXAoaW1wbCk7CiAKICAgICByZXR1cm4g
c2hhcmVkTWVtb3J5LnJlbGVhc2UoKTsKIH0KQEAgLTEzOCwyNCArMTM2LDE2IEBAIFBhc3NSZWZQ
dHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShjb25zdCBIYW5kbGUmIGhhbmRs
ZSwgUHJvdGVjdGlvbiBwCiAgICAgc2hhcmVkTWVtb3J5LT5tX3NpemUgPSBoYW5kbGUubV9zaXpl
OwogICAgIHNoYXJlZE1lbW9yeS0+bV9kYXRhID0gaW1wbC0+ZGF0YSgpOwogCi0gICAgaW1wbC0+
Y29ubmVjdChRQ29yZUFwcGxpY2F0aW9uOjppbnN0YW5jZSgpLCBTSUdOQUwoYWJvdXRUb1F1aXQo
KSksIFNMT1QoZGVsZXRlTGF0ZXIoKSkpOwotCi0gICAgLy8gUmVsZWFzZSB0aGUgc2hhcmVkIG1l
bW9yeSBzZWdtZW50IGV2ZW4gb24gY3Jhc2ghCi0gICAgQ3Jhc2hIYW5kbGVyOjppbnN0YW5jZSgp
LT5tYXJrRm9yRGVsZXRpb25PbkNyYXNoKGltcGwpOworICAgIC8vIERvIG5vdCBsZWF2ZSBiZWhp
bmQgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCEKKyAgICBDbGVhbnVwSGFuZGxlcjo6aW5zdGFu
Y2UoKS0+bWFya0ZvckNsZWFudXAoaW1wbCk7CiAKICAgICByZXR1cm4gc2hhcmVkTWVtb3J5LnJl
bGVhc2UoKTsKIH0KIAogU2hhcmVkTWVtb3J5Ojp+U2hhcmVkTWVtb3J5KCkKIHsKLSAgICAvLyBB
dm9pZCBkb3VibGUgZGVsZXRpb24gd2hlbiBkZWxldGVMYXRlciBoYXMgYWxyZWFkeSBiZWVuIGNh
bGxlZCB0aHJvdWdoIHRoZSBzaWduYWwtc2xvdCBjb25uZWN0aW9uLgotICAgIGlmIChRQ29yZUFw
cGxpY2F0aW9uOjppbnN0YW5jZSgpLT5kaXNjb25uZWN0KG1faW1wbCkpIHsKLSAgICAgICAgLy8g
bV9pbXBsIG11c3QgYmUgbm9uLW51bGwgYW5kIGl0IG11c3QgcG9pbnQgdG8gYSB2YWxpZCBRU2hh
cmVkTWVtb3J5IG9iamVjdC4KLSAgICAgICAgQVNTRVJUKHFvYmplY3RfY2FzdDxRU2hhcmVkTWVt
b3J5Kj4obV9pbXBsKSk7Ci0gICAgICAgIGRlbGV0ZSBtX2ltcGw7Ci0gICAgfQotCi0gICAgQ3Jh
c2hIYW5kbGVyOjppbnN0YW5jZSgpLT5kaWREZWxldGUobV9pbXBsKTsKKyAgICBDbGVhbnVwSGFu
ZGxlcjo6aW5zdGFuY2UoKS0+d2lsbERlbGV0ZShtX2ltcGwpOworICAgIGRlbGV0ZSBtX2ltcGw7
CiB9CiAKIGJvb2wgU2hhcmVkTWVtb3J5OjpjcmVhdGVIYW5kbGUoSGFuZGxlJiBoYW5kbGUsIFBy
b3RlY3Rpb24gcHJvdGVjdGlvbikKZGlmZiAtLWdpdCBhL1dlYktpdDIvU2hhcmVkL3F0L0NsZWFu
dXBIYW5kbGVyLmNwcCBiL1dlYktpdDIvU2hhcmVkL3F0L0NsZWFudXBIYW5kbGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzJmYjFiCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0Mi9TaGFyZWQvcXQvQ2xlYW51cEhhbmRsZXIuY3BwCkBAIC0wLDAgKzEsOTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJDbGVhbnVwSGFuZGxlci5oIgorCisj
aW5jbHVkZSAiTWFwcGVkTWVtb3J5UG9vbC5oIgorI2luY2x1ZGUgPGNzaWduYWw+CisjaW5jbHVk
ZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPHd0Zi9B
bHdheXNJbmxpbmUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0NsZWFudXBIYW5kbGVyKiBD
bGVhbnVwSGFuZGxlcjo6dGhlSW5zdGFuY2UgPSAwOworCit2b2lkIGluc3RhbGxTaWduYWxIYW5k
bGVyKHZvaWQgKGhhbmRsZXIpKGludCkpCit7CisgICAgc2lnbmFsKFNJR0FCUlQsIGhhbmRsZXIp
OworICAgIHNpZ25hbChTSUdCVVMsIGhhbmRsZXIpOworICAgIHNpZ25hbChTSUdJTEwsIGhhbmRs
ZXIpOworICAgIHNpZ25hbChTSUdJTlQsIGhhbmRsZXIpOworICAgIHNpZ25hbChTSUdGUEUsIGhh
bmRsZXIpOworICAgIHNpZ25hbChTSUdRVUlULCBoYW5kbGVyKTsKKyAgICBzaWduYWwoU0lHU0VH
ViwgaGFuZGxlcik7CisgICAgc2lnbmFsKFNJR1RSQVAsIGhhbmRsZXIpOworICAgIHNpZ25hbChT
SUdURVJNLCBoYW5kbGVyKTsKK30KKworQ2xlYW51cEhhbmRsZXI6OkNsZWFudXBIYW5kbGVyKCkK
KyAgICA6IG1faW5EZWxldGVPYmplY3RzKDApCisgICAgLCBtX3Bvc3Rwb25lZFRlcm1pbmF0aW9u
KGZhbHNlKQoreworICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKCZDbGVhbnVwSGFuZGxlcjo6c2ln
bmFsSGFuZGxlcik7CisjaWYgT1MoV0lORE9XUykKKyAgICAvLyBXZSBjYW5ub3Qgc2VuZCBTSUdU
RVJNIG9uIFdpbmRvd3Mgc28gd2UgbmVlZCB0byByZWx5IG9uIHRoaXMuCisgICAgY29ubmVjdChR
Q29yZUFwcGxpY2F0aW9uOjppbnN0YW5jZSgpLCBTSUdOQUwoYWJvdXRUb1F1aXQoKSksIFNMT1Qo
ZGVsZXRlT2JqZWN0cygpKSk7CisjZW5kaWYKK30KKwordm9pZCBDbGVhbnVwSGFuZGxlcjo6c2ln
bmFsSGFuZGxlcihpbnQgc2lnbmFsSUQpCit7CisgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU0lH
X0RGTCk7IC8vIEF2b2lkIGVuZGxlc3MgcmVjdXJzaW9uIGlmIHdlIGFyZSBjcmFzaGluZyBhZnRl
ciB0aGlzLgorCisgICAgaWYgKENsZWFudXBIYW5kbGVyOjp0aGVJbnN0YW5jZS0+bV9pbkRlbGV0
ZU9iamVjdHMgPT0gMSkgeworICAgICAgICBBU1NFUlQoIXRoZUluc3RhbmNlLT5tX3Bvc3Rwb25l
ZFRlcm1pbmF0aW9uKTsKKyAgICAgICAgdGhlSW5zdGFuY2UtPm1fcG9zdHBvbmVkVGVybWluYXRp
b24gPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhlSW5zdGFuY2UtPmRl
bGV0ZU9iamVjdHMoKTsKKyAgICBleGl0KHNpZ25hbElEID09IFNJR1RFUk0gPyBFWElUX1NVQ0NF
U1MgOiBFWElUX0ZBSUxVUkUpOworfQorCit2b2lkIENsZWFudXBIYW5kbGVyOjpkZWxldGVPYmpl
Y3RzKCkKK3sKKyAgICBpZiAobV9vYmplY3RzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9pbkRlbGV0ZU9iamVjdHMucmVmKCk7CisgICAgcURlbGV0ZUFsbChtX29iamVjdHMp
OworICAgIG1fb2JqZWN0cy5jbGVhcigpOworICAgIGlmIChtX3Bvc3Rwb25lZFRlcm1pbmF0aW9u
KQorICAgICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CisgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIo
U0lHX0RGTCk7CisgICAgbV9pbkRlbGV0ZU9iamVjdHMuZGVyZWYoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQyL1NoYXJlZC9xdC9DbGVhbnVwSGFuZGxl
ci5oIGIvV2ViS2l0Mi9TaGFyZWQvcXQvQ2xlYW51cEhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4yZjBlYmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0Mi9T
aGFyZWQvcXQvQ2xlYW51cEhhbmRsZXIuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIENyYXNoSGFuZGxlcl9oCisjZGVmaW5lIENyYXNoSGFuZGxlcl9o
CisKKyNpbmNsdWRlIDxRTGlzdD4KKyNpbmNsdWRlIDxRT2JqZWN0PgorI2luY2x1ZGUgPFFBdG9t
aWNJbnQ+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBDbGVhbnVwSGFuZGxlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIENsZWFudXBIYW5kbGVyKiBpbnN0YW5jZSgpCisgICAgeworICAg
ICAgICBpZiAoIXRoZUluc3RhbmNlKQorICAgICAgICAgICAgdGhlSW5zdGFuY2UgPSBuZXcgQ2xl
YW51cEhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIHRoZUluc3RhbmNlOworICAgIH0KKworICAg
IHZvaWQgbWFya0ZvckNsZWFudXAoUU9iamVjdCogb2JqZWN0KQorICAgIHsKKyAgICAgICAgdGhl
SW5zdGFuY2UtPm1fb2JqZWN0cy5hcHBlbmQob2JqZWN0KTsKKyAgICB9CisKKyAgICB2b2lkIHdp
bGxEZWxldGUoUU9iamVjdCogb2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKG1faW5EZWxldGVP
YmplY3RzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGVJbnN0YW5jZS0+bV9vYmpl
Y3RzLnJlbW92ZU9uZShvYmplY3QpOworICAgIH0KKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lk
IGRlbGV0ZU9iamVjdHMoKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgV2ViUHJvY2Vz
czsKKyAgICBzdGF0aWMgdm9pZCBzaWduYWxIYW5kbGVyKGludCk7CisgICAgc3RhdGljIENsZWFu
dXBIYW5kbGVyKiB0aGVJbnN0YW5jZTsKKworICAgIENsZWFudXBIYW5kbGVyKCk7CisKKyAgICBR
TGlzdDxRT2JqZWN0Kj4gbV9vYmplY3RzOworICAgIFFBdG9taWNJbnQgbV9pbkRlbGV0ZU9iamVj
dHM7CisgICAgYm9vbCBtX3Bvc3Rwb25lZFRlcm1pbmF0aW9uOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBDcmFzaEhhbmRsZXJfaApkaWZmIC0tZ2l0IGEvV2ViS2l0
Mi9TaGFyZWQvcXQvQ3Jhc2hIYW5kbGVyLmNwcCBiL1dlYktpdDIvU2hhcmVkL3F0L0NyYXNoSGFu
ZGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYjdkM2QuLjAwMDAwMDAK
LS0tIGEvV2ViS2l0Mi9TaGFyZWQvcXQvQ3Jhc2hIYW5kbGVyLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBT
emVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJDcmFzaEhh
bmRsZXIuaCIKLQotI2luY2x1ZGUgIk1hcHBlZE1lbW9yeVBvb2wuaCIKLSNpbmNsdWRlIDxjc2ln
bmFsPgotI2luY2x1ZGUgPGNzdGRsaWI+Ci0jaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotQ3Jhc2hIYW5kbGVyKiBDcmFzaEhhbmRsZXI6OnRoZUlu
c3RhbmNlID0gMDsKLQotQ3Jhc2hIYW5kbGVyOjpDcmFzaEhhbmRsZXIoKQotICAgIDogbV9pbkRl
bGV0ZU9iamVjdHMoZmFsc2UpCi17Ci0gICAgc2lnbmFsKFNJR0FCUlQsICZDcmFzaEhhbmRsZXI6
OnNpZ25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdCVVMsICZDcmFzaEhhbmRsZXI6OnNpZ25h
bEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdJTEwsICZDcmFzaEhhbmRsZXI6OnNpZ25hbEhhbmRs
ZXIpOwotICAgIHNpZ25hbChTSUdJTlQsICZDcmFzaEhhbmRsZXI6OnNpZ25hbEhhbmRsZXIpOwot
ICAgIHNpZ25hbChTSUdGUEUsICZDcmFzaEhhbmRsZXI6OnNpZ25hbEhhbmRsZXIpOwotICAgIHNp
Z25hbChTSUdRVUlULCAmQ3Jhc2hIYW5kbGVyOjpzaWduYWxIYW5kbGVyKTsKLSAgICBzaWduYWwo
U0lHU0VHViwgJkNyYXNoSGFuZGxlcjo6c2lnbmFsSGFuZGxlcik7Ci0gICAgc2lnbmFsKFNJR1RS
QVAsICZDcmFzaEhhbmRsZXI6OnNpZ25hbEhhbmRsZXIpOwotfQotCi1OT19SRVRVUk4gdm9pZCBD
cmFzaEhhbmRsZXI6OnNpZ25hbEhhbmRsZXIoaW50KQotewotICAgIENyYXNoSGFuZGxlcjo6dGhl
SW5zdGFuY2UtPmRlbGV0ZU9iamVjdHMoKTsKLSAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0K
LXZvaWQgQ3Jhc2hIYW5kbGVyOjpkZWxldGVPYmplY3RzKCkKLXsKLSAgICBtX2luRGVsZXRlT2Jq
ZWN0cyA9IHRydWU7Ci0gICAgcURlbGV0ZUFsbChtX29iamVjdHMpOwotCi0gICAgTWFwcGVkTWVt
b3J5UG9vbDo6aW5zdGFuY2UoKS0+Y2xlYXIoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9XZWJLaXQyL1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuaCBiL1dlYktpdDIv
U2hhcmVkL3F0L0NyYXNoSGFuZGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
NzJmOTVjLi4wMDAwMDAwCi0tLSBhL1dlYktpdDIvU2hhcmVkL3F0L0NyYXNoSGFuZGxlci5oCisr
KyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBV
bml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBDcmFzaEhhbmRsZXJfaAotI2RlZmluZSBDcmFzaEhhbmRsZXJfaAotCi0jaW5jbHVkZSA8
UUxpc3Q+Ci0jaW5jbHVkZSA8UU9iamVjdD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNz
IENyYXNoSGFuZGxlciA6IHByaXZhdGUgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoK
LSAgICBzdGF0aWMgQ3Jhc2hIYW5kbGVyKiBpbnN0YW5jZSgpCi0gICAgewotICAgICAgICBpZiAo
IXRoZUluc3RhbmNlKQotICAgICAgICAgICAgdGhlSW5zdGFuY2UgPSBuZXcgQ3Jhc2hIYW5kbGVy
KCk7Ci0gICAgICAgIHJldHVybiB0aGVJbnN0YW5jZTsKLSAgICB9Ci0KLSAgICB2b2lkIG1hcmtG
b3JEZWxldGlvbk9uQ3Jhc2goUU9iamVjdCogb2JqZWN0KQotICAgIHsKLSAgICAgICAgdGhlSW5z
dGFuY2UtPm1fb2JqZWN0cy5hcHBlbmQob2JqZWN0KTsKLSAgICB9Ci0KLSAgICB2b2lkIGRpZERl
bGV0ZShRT2JqZWN0KiBvYmplY3QpCi0gICAgewotICAgICAgICBpZiAobV9pbkRlbGV0ZU9iamVj
dHMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoZUluc3RhbmNlLT5tX29iamVjdHMu
cmVtb3ZlT25lKG9iamVjdCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHNp
Z25hbEhhbmRsZXIoaW50KTsKLSAgICBzdGF0aWMgQ3Jhc2hIYW5kbGVyKiB0aGVJbnN0YW5jZTsK
LQotICAgIENyYXNoSGFuZGxlcigpOwotCi0gICAgdm9pZCBkZWxldGVPYmplY3RzKCk7Ci0KLSAg
ICBRTGlzdDxRT2JqZWN0Kj4gbV9vYmplY3RzOwotICAgIGJvb2wgbV9pbkRlbGV0ZU9iamVjdHM7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIENyYXNoSGFuZGxlcl9o
CmRpZmYgLS1naXQgYS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNo
ZXJRdC5jcHAgYi9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJR
dC5jcHAKaW5kZXggNjc0ZDdlMS4uYTBmMDJiNSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9VSVByb2Nl
c3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCisrKyBiL1dlYktpdDIvVUlQcm9j
ZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcApAQCAtMjksNyArMjksNyBAQAog
I2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgIlJ1bkxvb3AuaCIKLSNpbmNsdWRlICJDcmFzaEhhbmRsZXIuaCIKKyNpbmNsdWRlICJD
bGVhbnVwSGFuZGxlci5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDxydW50
aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNpbmNsdWRlIDxzdHJpbmc+CkBAIC03NCw3ICs3
NCw3IEBAIHN0YXRpYyB2b2lkIGNsZWFudXBQcm9jZXNzZXMoKQogewogICAgIFdURjo6SGFzaFNl
dDxRUHJvY2Vzcyo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHByb2Nlc3NlcygpLT5iZWdpbigpOwog
ICAgIHdoaWxlIChpdCAhPSBwcm9jZXNzZXMoKS0+ZW5kKCkpIHsKLSAgICAgICAgKCppdCktPmtp
bGwoKTsKKyAgICAgICAgKCppdCktPnRlcm1pbmF0ZSgpOwogICAgICAgICArK2l0OwogICAgIH0K
IH0KQEAgLTE0MCw4ICsxNDAsOCBAQCBRTG9jYWxTb2NrZXQqIFByb2Nlc3NMYXVuY2hlckhlbHBl
cjo6dGFrZVBlbmRpbmdDb25uZWN0aW9uKCkKIAogUHJvY2Vzc0xhdW5jaGVySGVscGVyOjp+UHJv
Y2Vzc0xhdW5jaGVySGVscGVyKCkKIHsKKyAgICBDbGVhbnVwSGFuZGxlcjo6aW5zdGFuY2UoKS0+
d2lsbERlbGV0ZSh0aGlzKTsKICAgICBtX3NlcnZlci5jbG9zZSgpOwotICAgIENyYXNoSGFuZGxl
cjo6aW5zdGFuY2UoKS0+ZGlkRGVsZXRlKHRoaXMpOwogfQogCiBQcm9jZXNzTGF1bmNoZXJIZWxw
ZXI6OlByb2Nlc3NMYXVuY2hlckhlbHBlcigpCkBAIC0xNTIsMTAgKzE1Miw5IEBAIFByb2Nlc3NM
YXVuY2hlckhlbHBlcjo6UHJvY2Vzc0xhdW5jaGVySGVscGVyKCkKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQogICAgIGNvbm5lY3QoJm1fc2VydmVyLCBTSUdOQUwobmV3Q29u
bmVjdGlvbigpKSwgdGhpcywgU0xPVChuZXdDb25uZWN0aW9uKCkpKTsKLSAgICBjb25uZWN0KFFD
b3JlQXBwbGljYXRpb246Omluc3RhbmNlKCksIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChk
ZWxldGVMYXRlcigpKSwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOwogCi0gICAgLy8gRG8gbm90IGxl
YXZlIHNvY2tldCBmaWxlcyBvbiB0aGUgZGlzayBldmVuIG9uIGNyYXNoIQotICAgIENyYXNoSGFu
ZGxlcjo6aW5zdGFuY2UoKS0+bWFya0ZvckRlbGV0aW9uT25DcmFzaCh0aGlzKTsKKyAgICAvLyBE
byBub3QgbGVhdmUgYmVoaW5kIHRoZSBzb2NrZXQgZmlsZSBvbiB0aGUgZGlzayEKKyAgICBDbGVh
bnVwSGFuZGxlcjo6aW5zdGFuY2UoKS0+bWFya0ZvckNsZWFudXAodGhpcyk7CiB9CiAKIFByb2Nl
c3NMYXVuY2hlckhlbHBlciogUHJvY2Vzc0xhdW5jaGVySGVscGVyOjppbnN0YW5jZSgpCkBAIC0x
OTIsNyArMTkxLDcgQEAgdm9pZCBQcm9jZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVByb2Nlc3MoKQog
ICAgICAgICByZXR1cm47CiAKICAgICBRT2JqZWN0Ojpjb25uZWN0KG1fcHJvY2Vzc0lkZW50aWZp
ZXIsIFNJR05BTChmaW5pc2hlZChpbnQpKSwgbV9wcm9jZXNzSWRlbnRpZmllciwgU0xPVChkZWxl
dGVMYXRlcigpKSwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOwotICAgIG1fcHJvY2Vzc0lkZW50aWZp
ZXItPmtpbGwoKTsKKyAgICBtX3Byb2Nlc3NJZGVudGlmaWVyLT50ZXJtaW5hdGUoKTsKIH0KIAog
UUxvY2FsU29ja2V0KiBQcm9jZXNzTGF1bmNoZXI6OnRha2VQZW5kaW5nQ29ubmVjdGlvbigpCmRp
ZmYgLS1naXQgYS9XZWJLaXQyL1dlYktpdDIucHJvIGIvV2ViS2l0Mi9XZWJLaXQyLnBybwppbmRl
eCBlMGI4ZmJhLi43NDU3MzEyIDEwMDY0NAotLS0gYS9XZWJLaXQyL1dlYktpdDIucHJvCisrKyBi
L1dlYktpdDIvV2ViS2l0Mi5wcm8KQEAgLTI2OSw3ICsyNjksNyBAQCBIRUFERVJTICs9IFwKICAg
ICBTaGFyZWQvV2ViVVJMUmVzcG9uc2UuaCBcCiAgICAgU2hhcmVkL1dlYlVzZXJDb250ZW50VVJM
UGF0dGVybi5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1v
ZHVsZS5oIFwKLSAgICBTaGFyZWQvcXQvQ3Jhc2hIYW5kbGVyLmggXAorICAgIFNoYXJlZC9xdC9D
bGVhbnVwSGFuZGxlci5oIFwKICAgICBTaGFyZWQvcXQvUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8u
aCBcCiAgICAgU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmggXAogICAgIFNoYXJlZC9xdC9XZWJFdmVu
dEZhY3RvcnlRdC5oIFwKQEAgLTQ3NSw3ICs0NzUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBTaGFy
ZWQvV2ViVVJMUmVzcG9uc2UuY3BwIFwKICAgICBTaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAgXAog
ICAgIFNoYXJlZC9xdC9CYWNraW5nU3RvcmVRdC5jcHAgXAotICAgIFNoYXJlZC9xdC9DcmFzaEhh
bmRsZXIuY3BwIFwKKyAgICBTaGFyZWQvcXQvQ2xlYW51cEhhbmRsZXIuY3BwIFwKICAgICBTaGFy
ZWQvcXQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudFF0LmNwcCBcCiAgICAgU2hhcmVkL3F0L1VwZGF0
ZUNodW5rLmNwcCBcCiAgICAgU2hhcmVkL3F0L1dlYkNvcmVBcmd1bWVudENvZGVyc1F0LmNwcCBc
CmRpZmYgLS1naXQgYS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0LmNwcCBiL1dl
YktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzUXQuY3BwCmluZGV4IDUzYTUxZDMuLjZhOGQ3
MzkgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzUXQuY3BwCisr
KyBiL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzUXQuY3BwCkBAIC0yNSw2ICsyNSw3
IEBACiAKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCiAKKyNpbmNsdWRlICJDbGVhbnVwSGFuZGxl
ci5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaD4KICNpbmNsdWRlIDxRTmV0d29ya0Fj
Y2Vzc01hbmFnZXI+CkBAIC01OCw2ICs1OSw4IEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1T
aHV0ZG93bigpCiB7CiAgICAgZGVsZXRlIG1fbmV0d29ya0FjY2Vzc01hbmFnZXI7CiAgICAgbV9u
ZXR3b3JrQWNjZXNzTWFuYWdlciA9IDA7CisKKyAgICBDbGVhbnVwSGFuZGxlcjo6aW5zdGFuY2Uo
KS0+ZGVsZXRlT2JqZWN0cygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKLS0gCjEuNy4z
LjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77287</attachid>
            <date>2010-12-22 17:59:03 -0800</date>
            <delta_ts>2011-01-03 10:15:48 -0800</delta_ts>
            <desc>renaming patch</desc>
            <filename>bug-51474-20101223015902.patch</filename>
            <type>text/plain</type>
            <size>18374</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDUyNikKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMTItMjIgIEJhbGF6cyBLZWxlbWVuICA8a2JhbGF6c0B3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtRdF1bV0syXSBXZWJQcm9jZXNzIGRvZXMgbm90IGNsZWFuIHVwIG9uIHRlcm1pbmF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTQ3NAorCisg
ICAgICAgIFJlbmFtZSBDcmFzaEhhbmRsZXIgdG8gQ2xlYW51cEhhbmRsZXIgaW4gcHJlcGFyYXRp
b24gb2YgdGhlIGZvbGxvdyB1cCBjaGFuZ2VzLgorICAgICAgICAqIFBsYXRmb3JtL3F0L1NoYXJl
ZE1lbW9yeVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkpOgorICAgICAgICAq
IFNoYXJlZC9xdC9DbGVhbnVwSGFuZGxlci5jcHA6IENvcGllZCBmcm9tIFdlYktpdDIvU2hhcmVk
L3F0L0NyYXNoSGFuZGxlci5jcHAuCisgICAgICAgIChXZWJLaXQ6OkNsZWFudXBIYW5kbGVyOjpD
bGVhbnVwSGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OkNsZWFudXBIYW5kbGVyOjpzaWduYWxI
YW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6Q2xlYW51cEhhbmRsZXI6OmRlbGV0ZU9iamVjdHMp
OgorICAgICAgICAqIFNoYXJlZC9xdC9DbGVhbnVwSGFuZGxlci5oOiBDb3BpZWQgZnJvbSBXZWJL
aXQyL1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuaC4KKyAgICAgICAgKFdlYktpdDo6Q2xlYW51cEhh
bmRsZXI6Omluc3RhbmNlKToKKyAgICAgICAgKiBTaGFyZWQvcXQvQ3Jhc2hIYW5kbGVyLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvcXQvQ3Jhc2hIYW5kbGVyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UHJvY2Vzc0xhdW5jaGVySGVscGVyOjp+UHJvY2Vzc0xhdW5jaGVySGVs
cGVyKToKKyAgICAgICAgKFdlYktpdDo6UHJvY2Vzc0xhdW5jaGVySGVscGVyOjpQcm9jZXNzTGF1
bmNoZXJIZWxwZXIpOgorICAgICAgICAqIFdlYktpdDIucHJvOgorCiAyMDEwLTEyLTIyICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcDogQWRkICNpZiB0byB0cnkgdG8gZml4IG5vbi1NYWMgYnVpbGRzLgpJbmRl
eDogV2ViS2l0Mi9XZWJLaXQyLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYktpdDIucHJv
CShyZXZpc2lvbiA3NDUxNikKKysrIFdlYktpdDIvV2ViS2l0Mi5wcm8JKHdvcmtpbmcgY29weSkK
QEAgLTI2OSw3ICsyNjksNyBAQCBIRUFERVJTICs9IFwKICAgICBTaGFyZWQvV2ViVVJMUmVzcG9u
c2UuaCBcCiAgICAgU2hhcmVkL1dlYlVzZXJDb250ZW50VVJMUGF0dGVybi5oIFwKICAgICBTaGFy
ZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5oIFwKLSAgICBTaGFyZWQv
cXQvQ3Jhc2hIYW5kbGVyLmggXAorICAgIFNoYXJlZC9xdC9DbGVhbnVwSGFuZGxlci5oIFwKICAg
ICBTaGFyZWQvcXQvUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uaCBcCiAgICAgU2hhcmVkL3F0L1Vw
ZGF0ZUNodW5rLmggXAogICAgIFNoYXJlZC9xdC9XZWJFdmVudEZhY3RvcnlRdC5oIFwKQEAgLTQ3
NSw3ICs0NzUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBTaGFyZWQvV2ViVVJMUmVzcG9uc2UuY3Bw
IFwKICAgICBTaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAgXAogICAgIFNoYXJlZC9xdC9CYWNraW5n
U3RvcmVRdC5jcHAgXAotICAgIFNoYXJlZC9xdC9DcmFzaEhhbmRsZXIuY3BwIFwKKyAgICBTaGFy
ZWQvcXQvQ2xlYW51cEhhbmRsZXIuY3BwIFwKICAgICBTaGFyZWQvcXQvTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudFF0LmNwcCBcCiAgICAgU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNwcCBcCiAgICAgU2hh
cmVkL3F0L1dlYkNvcmVBcmd1bWVudENvZGVyc1F0LmNwcCBcCkluZGV4OiBXZWJLaXQyL1BsYXRm
b3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3Jt
L3F0L1NoYXJlZE1lbW9yeVF0LmNwcAkocmV2aXNpb24gNzQ1MTYpCisrKyBXZWJLaXQyL1BsYXRm
b3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBA
QAogCiAjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCiAjaW5jbHVkZSAiQXJndW1lbnRFbmNv
ZGVyLmgiCi0jaW5jbHVkZSAiQ3Jhc2hIYW5kbGVyLmgiCisjaW5jbHVkZSAiQ2xlYW51cEhhbmRs
ZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDx1bmlz
dGQuaD4KICNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgpAQCAtMTAyLDcgKzEwMiw3IEBAIFBh
c3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6OmMKICAgICBpbXBsLT5jb25uZWN0
KFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCksIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xP
VChkZWxldGVMYXRlcigpKSk7CiAKICAgICAvLyBSZWxlYXNlIHRoZSBzaGFyZWQgbWVtb3J5IHNl
Z21lbnQgZXZlbiBvbiBjcmFzaCEKLSAgICBDcmFzaEhhbmRsZXI6Omluc3RhbmNlKCktPm1hcmtG
b3JEZWxldGlvbk9uQ3Jhc2goaW1wbCk7CisgICAgQ2xlYW51cEhhbmRsZXI6Omluc3RhbmNlKCkt
Pm1hcmtGb3JEZWxldGlvbk9uQ3Jhc2goaW1wbCk7CiAKICAgICByZXR1cm4gc2hhcmVkTWVtb3J5
LnJlbGVhc2UoKTsKIH0KQEAgLTE0MSw3ICsxNDEsNyBAQCBQYXNzUmVmUHRyPFNoYXJlZE1lbW9y
eT4gU2hhcmVkTWVtb3J5OjpjCiAgICAgaW1wbC0+Y29ubmVjdChRQ29yZUFwcGxpY2F0aW9uOjpp
bnN0YW5jZSgpLCBTSUdOQUwoYWJvdXRUb1F1aXQoKSksIFNMT1QoZGVsZXRlTGF0ZXIoKSkpOwog
CiAgICAgLy8gUmVsZWFzZSB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IGV2ZW4gb24gY3Jhc2gh
Ci0gICAgQ3Jhc2hIYW5kbGVyOjppbnN0YW5jZSgpLT5tYXJrRm9yRGVsZXRpb25PbkNyYXNoKGlt
cGwpOworICAgIENsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT5tYXJrRm9yRGVsZXRpb25PbkNy
YXNoKGltcGwpOwogCiAgICAgcmV0dXJuIHNoYXJlZE1lbW9yeS5yZWxlYXNlKCk7CiB9CkBAIC0x
NTUsNyArMTU1LDcgQEAgU2hhcmVkTWVtb3J5Ojp+U2hhcmVkTWVtb3J5KCkKICAgICAgICAgZGVs
ZXRlIG1faW1wbDsKICAgICB9CiAKLSAgICBDcmFzaEhhbmRsZXI6Omluc3RhbmNlKCktPmRpZERl
bGV0ZShtX2ltcGwpOworICAgIENsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT5kaWREZWxldGUo
bV9pbXBsKTsKIH0KIAogYm9vbCBTaGFyZWRNZW1vcnk6OmNyZWF0ZUhhbmRsZShIYW5kbGUmIGhh
bmRsZSwgUHJvdGVjdGlvbiBwcm90ZWN0aW9uKQpJbmRleDogV2ViS2l0Mi9TaGFyZWQvcXQvQ2xl
YW51cEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL3F0L0NsZWFudXBI
YW5kbGVyLmNwcAkocmV2aXNpb24gNzQ1MTYpCShmcm9tIFdlYktpdDIvU2hhcmVkL3F0L0NyYXNo
SGFuZGxlci5jcHA6NzQ1MTYpCisrKyBXZWJLaXQyL1NoYXJlZC9xdC9DbGVhbnVwSGFuZGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgIkNyYXNoSGFuZGxlci5oIgorCisjaW5jbHVkZSAiTWFwcGVkTWVtb3J5UG9v
bC5oIgorI2luY2x1ZGUgPGNzaWduYWw+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDx3
dGYvQWx3YXlzSW5saW5lLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitDcmFzaEhhbmRsZXIq
IENyYXNoSGFuZGxlcjo6dGhlSW5zdGFuY2UgPSAwOworCitDcmFzaEhhbmRsZXI6OkNyYXNoSGFu
ZGxlcigpCisgICAgOiBtX2luRGVsZXRlT2JqZWN0cyhmYWxzZSkKK3sKKyAgICBzaWduYWwoU0lH
QUJSVCwgJkNyYXNoSGFuZGxlcjo6c2lnbmFsSGFuZGxlcik7CisgICAgc2lnbmFsKFNJR0JVUywg
JkNyYXNoSGFuZGxlcjo6c2lnbmFsSGFuZGxlcik7CisgICAgc2lnbmFsKFNJR0lMTCwgJkNyYXNo
SGFuZGxlcjo6c2lnbmFsSGFuZGxlcik7CisgICAgc2lnbmFsKFNJR0lOVCwgJkNyYXNoSGFuZGxl
cjo6c2lnbmFsSGFuZGxlcik7CisgICAgc2lnbmFsKFNJR0ZQRSwgJkNyYXNoSGFuZGxlcjo6c2ln
bmFsSGFuZGxlcik7CisgICAgc2lnbmFsKFNJR1FVSVQsICZDcmFzaEhhbmRsZXI6OnNpZ25hbEhh
bmRsZXIpOworICAgIHNpZ25hbChTSUdTRUdWLCAmQ3Jhc2hIYW5kbGVyOjpzaWduYWxIYW5kbGVy
KTsKKyAgICBzaWduYWwoU0lHVFJBUCwgJkNyYXNoSGFuZGxlcjo6c2lnbmFsSGFuZGxlcik7Cit9
CisKK05PX1JFVFVSTiB2b2lkIENyYXNoSGFuZGxlcjo6c2lnbmFsSGFuZGxlcihpbnQpCit7Cisg
ICAgQ3Jhc2hIYW5kbGVyOjp0aGVJbnN0YW5jZS0+ZGVsZXRlT2JqZWN0cygpOworICAgIGV4aXQo
RVhJVF9GQUlMVVJFKTsKK30KKwordm9pZCBDcmFzaEhhbmRsZXI6OmRlbGV0ZU9iamVjdHMoKQor
eworICAgIG1faW5EZWxldGVPYmplY3RzID0gdHJ1ZTsKKyAgICBxRGVsZXRlQWxsKG1fb2JqZWN0
cyk7CisKKyAgICBNYXBwZWRNZW1vcnlQb29sOjppbnN0YW5jZSgpLT5jbGVhcigpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvU2hhcmVkL3F0L0NsZWFudXBIYW5k
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9xdC9DbGVhbnVwSGFuZGxlci5j
cHAJKHJldmlzaW9uIDc0NTE2KQorKysgV2ViS2l0Mi9TaGFyZWQvcXQvQ2xlYW51cEhhbmRsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgIkNyYXNoSGFuZGxlci5oIgorI2luY2x1
ZGUgIkNsZWFudXBIYW5kbGVyLmgiCiAKICNpbmNsdWRlICJNYXBwZWRNZW1vcnlQb29sLmgiCiAj
aW5jbHVkZSA8Y3NpZ25hbD4KQEAgLTMyLDI4ICszMiwyOCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotQ3Jhc2hIYW5kbGVyKiBDcmFzaEhhbmRsZXI6OnRoZUluc3RhbmNlID0gMDsKK0NsZWFu
dXBIYW5kbGVyKiBDbGVhbnVwSGFuZGxlcjo6dGhlSW5zdGFuY2UgPSAwOwogCi1DcmFzaEhhbmRs
ZXI6OkNyYXNoSGFuZGxlcigpCitDbGVhbnVwSGFuZGxlcjo6Q2xlYW51cEhhbmRsZXIoKQogICAg
IDogbV9pbkRlbGV0ZU9iamVjdHMoZmFsc2UpCiB7Ci0gICAgc2lnbmFsKFNJR0FCUlQsICZDcmFz
aEhhbmRsZXI6OnNpZ25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdCVVMsICZDcmFzaEhhbmRs
ZXI6OnNpZ25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdJTEwsICZDcmFzaEhhbmRsZXI6OnNp
Z25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdJTlQsICZDcmFzaEhhbmRsZXI6OnNpZ25hbEhh
bmRsZXIpOwotICAgIHNpZ25hbChTSUdGUEUsICZDcmFzaEhhbmRsZXI6OnNpZ25hbEhhbmRsZXIp
OwotICAgIHNpZ25hbChTSUdRVUlULCAmQ3Jhc2hIYW5kbGVyOjpzaWduYWxIYW5kbGVyKTsKLSAg
ICBzaWduYWwoU0lHU0VHViwgJkNyYXNoSGFuZGxlcjo6c2lnbmFsSGFuZGxlcik7Ci0gICAgc2ln
bmFsKFNJR1RSQVAsICZDcmFzaEhhbmRsZXI6OnNpZ25hbEhhbmRsZXIpOworICAgIHNpZ25hbChT
SUdBQlJULCAmQ2xlYW51cEhhbmRsZXI6OnNpZ25hbEhhbmRsZXIpOworICAgIHNpZ25hbChTSUdC
VVMsICZDbGVhbnVwSGFuZGxlcjo6c2lnbmFsSGFuZGxlcik7CisgICAgc2lnbmFsKFNJR0lMTCwg
JkNsZWFudXBIYW5kbGVyOjpzaWduYWxIYW5kbGVyKTsKKyAgICBzaWduYWwoU0lHSU5ULCAmQ2xl
YW51cEhhbmRsZXI6OnNpZ25hbEhhbmRsZXIpOworICAgIHNpZ25hbChTSUdGUEUsICZDbGVhbnVw
SGFuZGxlcjo6c2lnbmFsSGFuZGxlcik7CisgICAgc2lnbmFsKFNJR1FVSVQsICZDbGVhbnVwSGFu
ZGxlcjo6c2lnbmFsSGFuZGxlcik7CisgICAgc2lnbmFsKFNJR1NFR1YsICZDbGVhbnVwSGFuZGxl
cjo6c2lnbmFsSGFuZGxlcik7CisgICAgc2lnbmFsKFNJR1RSQVAsICZDbGVhbnVwSGFuZGxlcjo6
c2lnbmFsSGFuZGxlcik7CiB9CiAKLU5PX1JFVFVSTiB2b2lkIENyYXNoSGFuZGxlcjo6c2lnbmFs
SGFuZGxlcihpbnQpCitOT19SRVRVUk4gdm9pZCBDbGVhbnVwSGFuZGxlcjo6c2lnbmFsSGFuZGxl
cihpbnQpCiB7Ci0gICAgQ3Jhc2hIYW5kbGVyOjp0aGVJbnN0YW5jZS0+ZGVsZXRlT2JqZWN0cygp
OworICAgIENsZWFudXBIYW5kbGVyOjp0aGVJbnN0YW5jZS0+ZGVsZXRlT2JqZWN0cygpOwogICAg
IGV4aXQoRVhJVF9GQUlMVVJFKTsKIH0KIAotdm9pZCBDcmFzaEhhbmRsZXI6OmRlbGV0ZU9iamVj
dHMoKQordm9pZCBDbGVhbnVwSGFuZGxlcjo6ZGVsZXRlT2JqZWN0cygpCiB7CiAgICAgbV9pbkRl
bGV0ZU9iamVjdHMgPSB0cnVlOwogICAgIHFEZWxldGVBbGwobV9vYmplY3RzKTsKSW5kZXg6IFdl
YktpdDIvU2hhcmVkL3F0L0NsZWFudXBIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9T
aGFyZWQvcXQvQ2xlYW51cEhhbmRsZXIuaAkocmV2aXNpb24gNzQ1MTYpCShmcm9tIFdlYktpdDIv
U2hhcmVkL3F0L0NyYXNoSGFuZGxlci5oOjc0NTE2KQorKysgV2ViS2l0Mi9TaGFyZWQvcXQvQ2xl
YW51cEhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENyYXNoSGFuZGxlcl9oCisjZGVmaW5lIENyYXNoSGFuZGxl
cl9oCisKKyNpbmNsdWRlIDxRTGlzdD4KKyNpbmNsdWRlIDxRT2JqZWN0PgorI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgQ3Jhc2hIYW5kbGVyIDogcHJpdmF0ZSBRT2JqZWN0IHsKKyAgICBR
X09CSkVDVAorcHVibGljOgorICAgIHN0YXRpYyBDcmFzaEhhbmRsZXIqIGluc3RhbmNlKCkKKyAg
ICB7CisgICAgICAgIGlmICghdGhlSW5zdGFuY2UpCisgICAgICAgICAgICB0aGVJbnN0YW5jZSA9
IG5ldyBDcmFzaEhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIHRoZUluc3RhbmNlOworICAgIH0K
KworICAgIHZvaWQgbWFya0ZvckRlbGV0aW9uT25DcmFzaChRT2JqZWN0KiBvYmplY3QpCisgICAg
eworICAgICAgICB0aGVJbnN0YW5jZS0+bV9vYmplY3RzLmFwcGVuZChvYmplY3QpOworICAgIH0K
KworICAgIHZvaWQgZGlkRGVsZXRlKFFPYmplY3QqIG9iamVjdCkKKyAgICB7CisgICAgICAgIGlm
IChtX2luRGVsZXRlT2JqZWN0cykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhlSW5z
dGFuY2UtPm1fb2JqZWN0cy5yZW1vdmVPbmUob2JqZWN0KTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgc3RhdGljIHZvaWQgc2lnbmFsSGFuZGxlcihpbnQpOworICAgIHN0YXRpYyBDcmFzaEhhbmRs
ZXIqIHRoZUluc3RhbmNlOworCisgICAgQ3Jhc2hIYW5kbGVyKCk7CisKKyAgICB2b2lkIGRlbGV0
ZU9iamVjdHMoKTsKKworICAgIFFMaXN0PFFPYmplY3QqPiBtX29iamVjdHM7CisgICAgYm9vbCBt
X2luRGVsZXRlT2JqZWN0czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gQ3Jhc2hIYW5kbGVyX2gKSW5kZXg6IFdlYktpdDIvU2hhcmVkL3F0L0NsZWFudXBIYW5kbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvcXQvQ2xlYW51cEhhbmRsZXIuaAkocmV2
aXNpb24gNzQ1MTYpCisrKyBXZWJLaXQyL1NoYXJlZC9xdC9DbGVhbnVwSGFuZGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAotI2lmbmRlZiBDcmFzaEhhbmRsZXJfaAotI2RlZmluZSBDcmFzaEhhbmRs
ZXJfaAorI2lmbmRlZiBDbGVhbnVwSGFuZGxlcl9oCisjZGVmaW5lIENsZWFudXBIYW5kbGVyX2gK
IAogI2luY2x1ZGUgPFFMaXN0PgogI2luY2x1ZGUgPFFPYmplY3Q+CkBAIC0zMywxMyArMzMsMTMg
QEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIENyYXNoSGFuZGxlciA6IHByaXZhdGUg
UU9iamVjdCB7CitjbGFzcyBDbGVhbnVwSGFuZGxlciA6IHByaXZhdGUgUU9iamVjdCB7CiAgICAg
UV9PQkpFQ1QKIHB1YmxpYzoKLSAgICBzdGF0aWMgQ3Jhc2hIYW5kbGVyKiBpbnN0YW5jZSgpCisg
ICAgc3RhdGljIENsZWFudXBIYW5kbGVyKiBpbnN0YW5jZSgpCiAgICAgewogICAgICAgICBpZiAo
IXRoZUluc3RhbmNlKQotICAgICAgICAgICAgdGhlSW5zdGFuY2UgPSBuZXcgQ3Jhc2hIYW5kbGVy
KCk7CisgICAgICAgICAgICB0aGVJbnN0YW5jZSA9IG5ldyBDbGVhbnVwSGFuZGxlcigpOwogICAg
ICAgICByZXR1cm4gdGhlSW5zdGFuY2U7CiAgICAgfQogCkBAIC01Nyw5ICs1Nyw5IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBzaWduYWxIYW5kbGVyKGludCk7Ci0gICAg
c3RhdGljIENyYXNoSGFuZGxlciogdGhlSW5zdGFuY2U7CisgICAgc3RhdGljIENsZWFudXBIYW5k
bGVyKiB0aGVJbnN0YW5jZTsKIAotICAgIENyYXNoSGFuZGxlcigpOworICAgIENsZWFudXBIYW5k
bGVyKCk7CiAKICAgICB2b2lkIGRlbGV0ZU9iamVjdHMoKTsKIApAQCAtNjksNCArNjksNCBAQCBw
cml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmIC8vIENyYXNoSGFuZGxl
cl9oCisjZW5kaWYgLy8gQ2xlYW51cEhhbmRsZXJfaApJbmRleDogV2ViS2l0Mi9TaGFyZWQvcXQv
Q3Jhc2hIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9xdC9DcmFzaEhh
bmRsZXIuY3BwCShyZXZpc2lvbiA3NDUxNikKKysrIFdlYktpdDIvU2hhcmVkL3F0L0NyYXNoSGFu
ZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgIkNyYXNoSGFuZGxlci5oIgotCi0jaW5jbHVkZSAiTWFwcGVkTWVt
b3J5UG9vbC5oIgotI2luY2x1ZGUgPGNzaWduYWw+Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNs
dWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1DcmFzaEhh
bmRsZXIqIENyYXNoSGFuZGxlcjo6dGhlSW5zdGFuY2UgPSAwOwotCi1DcmFzaEhhbmRsZXI6OkNy
YXNoSGFuZGxlcigpCi0gICAgOiBtX2luRGVsZXRlT2JqZWN0cyhmYWxzZSkKLXsKLSAgICBzaWdu
YWwoU0lHQUJSVCwgJkNyYXNoSGFuZGxlcjo6c2lnbmFsSGFuZGxlcik7Ci0gICAgc2lnbmFsKFNJ
R0JVUywgJkNyYXNoSGFuZGxlcjo6c2lnbmFsSGFuZGxlcik7Ci0gICAgc2lnbmFsKFNJR0lMTCwg
JkNyYXNoSGFuZGxlcjo6c2lnbmFsSGFuZGxlcik7Ci0gICAgc2lnbmFsKFNJR0lOVCwgJkNyYXNo
SGFuZGxlcjo6c2lnbmFsSGFuZGxlcik7Ci0gICAgc2lnbmFsKFNJR0ZQRSwgJkNyYXNoSGFuZGxl
cjo6c2lnbmFsSGFuZGxlcik7Ci0gICAgc2lnbmFsKFNJR1FVSVQsICZDcmFzaEhhbmRsZXI6OnNp
Z25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdTRUdWLCAmQ3Jhc2hIYW5kbGVyOjpzaWduYWxI
YW5kbGVyKTsKLSAgICBzaWduYWwoU0lHVFJBUCwgJkNyYXNoSGFuZGxlcjo6c2lnbmFsSGFuZGxl
cik7Ci19Ci0KLU5PX1JFVFVSTiB2b2lkIENyYXNoSGFuZGxlcjo6c2lnbmFsSGFuZGxlcihpbnQp
Ci17Ci0gICAgQ3Jhc2hIYW5kbGVyOjp0aGVJbnN0YW5jZS0+ZGVsZXRlT2JqZWN0cygpOwotICAg
IGV4aXQoRVhJVF9GQUlMVVJFKTsKLX0KLQotdm9pZCBDcmFzaEhhbmRsZXI6OmRlbGV0ZU9iamVj
dHMoKQotewotICAgIG1faW5EZWxldGVPYmplY3RzID0gdHJ1ZTsKLSAgICBxRGVsZXRlQWxsKG1f
b2JqZWN0cyk7Ci0KLSAgICBNYXBwZWRNZW1vcnlQb29sOjppbnN0YW5jZSgpLT5jbGVhcigpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvU2hhcmVkL3F0L0NyYXNo
SGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL3F0L0NyYXNoSGFuZGxlci5o
CShyZXZpc2lvbiA3NDUxNikKKysrIFdlYktpdDIvU2hhcmVkL3F0L0NyYXNoSGFuZGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
VW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgQ3Jhc2hIYW5kbGVyX2gKLSNkZWZpbmUgQ3Jhc2hIYW5kbGVyX2gKLQotI2luY2x1ZGUg
PFFMaXN0PgotI2luY2x1ZGUgPFFPYmplY3Q+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFz
cyBDcmFzaEhhbmRsZXIgOiBwcml2YXRlIFFPYmplY3QgewotICAgIFFfT0JKRUNUCi1wdWJsaWM6
Ci0gICAgc3RhdGljIENyYXNoSGFuZGxlciogaW5zdGFuY2UoKQotICAgIHsKLSAgICAgICAgaWYg
KCF0aGVJbnN0YW5jZSkKLSAgICAgICAgICAgIHRoZUluc3RhbmNlID0gbmV3IENyYXNoSGFuZGxl
cigpOwotICAgICAgICByZXR1cm4gdGhlSW5zdGFuY2U7Ci0gICAgfQotCi0gICAgdm9pZCBtYXJr
Rm9yRGVsZXRpb25PbkNyYXNoKFFPYmplY3QqIG9iamVjdCkKLSAgICB7Ci0gICAgICAgIHRoZUlu
c3RhbmNlLT5tX29iamVjdHMuYXBwZW5kKG9iamVjdCk7Ci0gICAgfQotCi0gICAgdm9pZCBkaWRE
ZWxldGUoUU9iamVjdCogb2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKG1faW5EZWxldGVPYmpl
Y3RzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGVJbnN0YW5jZS0+bV9vYmplY3Rz
LnJlbW92ZU9uZShvYmplY3QpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBz
aWduYWxIYW5kbGVyKGludCk7Ci0gICAgc3RhdGljIENyYXNoSGFuZGxlciogdGhlSW5zdGFuY2U7
Ci0KLSAgICBDcmFzaEhhbmRsZXIoKTsKLQotICAgIHZvaWQgZGVsZXRlT2JqZWN0cygpOwotCi0g
ICAgUUxpc3Q8UU9iamVjdCo+IG1fb2JqZWN0czsKLSAgICBib29sIG1faW5EZWxldGVPYmplY3Rz
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBDcmFzaEhhbmRsZXJf
aApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NM
YXVuY2hlclF0LmNwcAkocmV2aXNpb24gNzQ1MTYpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVu
Y2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDcgQEAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKICNpbmNsdWRlICJSdW5Mb29wLmgiCi0jaW5jbHVkZSAiQ3Jhc2hIYW5kbGVyLmgiCisjaW5j
bHVkZSAiQ2xlYW51cEhhbmRsZXIuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8c3RyaW5nPgpAQCAt
MTQxLDcgKzE0MSw3IEBAIFFMb2NhbFNvY2tldCogUHJvY2Vzc0xhdW5jaGVySGVscGVyOjp0YWsK
IFByb2Nlc3NMYXVuY2hlckhlbHBlcjo6flByb2Nlc3NMYXVuY2hlckhlbHBlcigpCiB7CiAgICAg
bV9zZXJ2ZXIuY2xvc2UoKTsKLSAgICBDcmFzaEhhbmRsZXI6Omluc3RhbmNlKCktPmRpZERlbGV0
ZSh0aGlzKTsKKyAgICBDbGVhbnVwSGFuZGxlcjo6aW5zdGFuY2UoKS0+ZGlkRGVsZXRlKHRoaXMp
OwogfQogCiBQcm9jZXNzTGF1bmNoZXJIZWxwZXI6OlByb2Nlc3NMYXVuY2hlckhlbHBlcigpCkBA
IC0xNTUsNyArMTU1LDcgQEAgUHJvY2Vzc0xhdW5jaGVySGVscGVyOjpQcm9jZXNzTGF1bmNoZXJI
ZQogICAgIGNvbm5lY3QoUUNvcmVBcHBsaWNhdGlvbjo6aW5zdGFuY2UoKSwgU0lHTkFMKGFib3V0
VG9RdWl0KCkpLCBTTE9UKGRlbGV0ZUxhdGVyKCkpLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7CiAK
ICAgICAvLyBEbyBub3QgbGVhdmUgc29ja2V0IGZpbGVzIG9uIHRoZSBkaXNrIGV2ZW4gb24gY3Jh
c2ghCi0gICAgQ3Jhc2hIYW5kbGVyOjppbnN0YW5jZSgpLT5tYXJrRm9yRGVsZXRpb25PbkNyYXNo
KHRoaXMpOworICAgIENsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT5tYXJrRm9yRGVsZXRpb25P
bkNyYXNoKHRoaXMpOwogfQogCiBQcm9jZXNzTGF1bmNoZXJIZWxwZXIqIFByb2Nlc3NMYXVuY2hl
ckhlbHBlcjo6aW5zdGFuY2UoKQo=
</data>
<flag name="review"
          id="68363"
          type_id="1"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77816</attachid>
            <date>2011-01-03 10:15:48 -0800</date>
            <delta_ts>2011-01-04 04:52:09 -0800</delta_ts>
            <desc>patch v4</desc>
            <filename>ch_final.diff</filename>
            <type>text/plain</type>
            <size>16249</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
ZTQ0YjJiMi4uMWEwZTYxOSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMS0wMS0wMyAgQmFsYXpzIEtlbGVt
ZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW1F0XVtXSzJdIEluY29tcGxldGUgY2xlYW4gdXAgb24gdGVybWlu
YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUx
NDc0CisKKyAgICAgICAgRG8gbm90IGtpbGwgdGhlIHdlYiBwcm9jZXNzIHRvIGZvcmNlIGl0J3Mg
dGVybWluYXRpb24uCisgICAgICAgIEZpeCBvYmplY3QgZGVzdHJ1Y3Rpb24gYW5kIGNsZWFudXAg
bG9naWMgYW5kIG1ha2UgdGhlIGNsZWFudXAgbW9yZSByZWxpYWJsZS4KKyAgICAgICAgRG8gbm90
IHRyeSB0byBjbGVhbnVwIG9uIGNyYXNoIGJlY2F1c2UgaXQgaXMgb250IHJlbGlhYmxlLgorCisg
ICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3BwOgorICAgICAgICAo
Q29yZUlQQzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKTogRG8gbm90IGRlbGV0ZSB0
aGUgc29ja2V0IGlmIHdlCisgICAgICAgIGRvIG5vdCBvd24gdGhhdC4gVGhpcyBpcyB0aGUgY2Fz
ZSBvZiBhIHNlcnZlciBjb25uZWN0aW9uLgorICAgICAgICAqIFBsYXRmb3JtL3F0L01hcHBlZE1l
bW9yeVBvb2wuY3BwOgorICAgICAgICBNYWtpbmcgTWFwcGVkTWVtb3J5UG9vbCBhIFFPYmplY3Qg
c28gdGhlIENsZWFudXBIYW5kbGVyIGNhbiBkZXN0cnVjdCBpdAorICAgICAgICBpbiB0aGUgc2Ft
ZSB3YXkgYXMgdGhlIG90aGVyIG9iamVjdHMuCisgICAgICAgIChXZWJLaXQ6Ok1hcHBlZE1lbW9y
eVBvb2w6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5UG9vbDo6fk1h
cHBlZE1lbW9yeVBvb2wpOgorICAgICAgICAqIFBsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wu
aDoKKyAgICAgICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5UG9vbDo6TWFwcGVkTWVtb3J5UG9vbCk6
CisgICAgICAgICogUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZSk6IE5vIG5lZWQgdG8gY2FyZSBhYm91dCBRQ29yZUFw
cGxpY2F0aW9uOjphYm91dFRvUXVpdC4KKyAgICAgICAgSXQgaXMgaGFuZGxlZCBieSB0aGUgQ2xl
YW51cEhhbmRsZXIuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6flNoYXJlZE1lbW9y
eSk6IERpdHRvLgorICAgICAgICAqIFNoYXJlZC9xdC9DbGVhbnVwSGFuZGxlci5jcHA6IFJlbmFt
ZWQgZnJvbSBXZWJLaXQyL1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuY3BwLgorICAgICAgICBObyBs
b25nZXIgdHJ5IHRvIGhhbmRsZSBjcmFzaCBidXQganVzdCBub3JtYWwgdGVybWluYXRpb24uCisg
ICAgICAgIChXZWJLaXQ6OkNsZWFudXBIYW5kbGVyOjpDbGVhbnVwSGFuZGxlcik6IENvbm5lY3Qg
ZGVsZXRlT2JqZWN0cyB3aXRoIFFDb3JlQXBwbGljYXRpb246OmFib3V0VG9RdWl0LgorICAgICAg
ICBFbnN1cmUgYXBwcm9wcmlhdGUgdGhyZWFkIGFmZmluaXR5LgorICAgICAgICAoV2ViS2l0OjpD
bGVhbnVwSGFuZGxlcjo6c2lnVGVybUhhbmRsZXIpOiBTdG9wIHRoZSBtYWluIGV2ZW50IGxvb3Au
CisgICAgICAgIChXZWJLaXQ6OkNsZWFudXBIYW5kbGVyOjpkZWxldGVPYmplY3RzKTogVXNlIGRl
bGV0ZUxhdGVyIGluc3RlYWQgb2YgZGVsZXRlIHNpbmNlIGl0IGlzIG1vcmUgcmVsaWFibGUuCisg
ICAgICAgICogU2hhcmVkL3F0L0NsZWFudXBIYW5kbGVyLmg6IFJlbmFtZWQgZnJvbSBXZWJLaXQy
L1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuaC4KKyAgICAgICAgKFdlYktpdDo6Q2xlYW51cEhhbmRs
ZXI6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYktpdDo6Q2xlYW51cEhhbmRsZXI6Om1hcmtGb3JD
bGVhbnVwKToKKyAgICAgICAgKFdlYktpdDo6Q2xlYW51cEhhbmRsZXI6OnVubWFyayk6CisgICAg
ICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcDoKKyAgICAg
ICAgRG8gbm90IGtpbGwgdGhlIHdlYiBwcm9jZXNzIGltbWlkaWF0ZWx5IGJ1dCBnaXZlIGl0IGEg
Y2hhbmNlIHRvIGNsZWFudXAuCisgICAgICAgIFVzZSBRTG9jYWxTZXJ2ZXI6OnJlbW92ZVNlcnZl
ciBmb3IgYXNzdXJpbmcgdGhhdCB0aGUgc29ja2V0IGZpbGUgd2lsbCBiZSByZW1vdmVkLgorICAg
ICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXJIZWxwZXI6OnNlcnZlck5hbWUpOgorICAgICAg
ICAoV2ViS2l0OjpjbGVhbnVwQXRFeGl0KTogUmVuYW1lZCBmcm9tIGNsZWFudXBQcm9jZXNzZXMu
IE9ubHkga2lsbCB0aGUgd2ViIHByb2Nlc3Mgd2hlbiBpdCB0aW1lcworICAgICAgICBvdXQgdGVy
bWluYXRpbmcuIEZpeGVkIHRoZSBidWcgb2YgY2hhbmdpbmcgdGhlIGxpc3Qgd2hpbGUgaXRlcmF0
aW5nIGl0IG92ZXIgYnkgZGlzY29ubmVjdGluZworICAgICAgICBmcm9tIHRoZSBwcm9jZXNzU3Rh
dGVDaGFuZ2VkIHNsb3QuCisgICAgICAgIChXZWJLaXQ6OlF0V2ViUHJvY2Vzczo6UXRXZWJQcm9j
ZXNzKTogQWRkZWQgbWlzc2luZyBtZXRhIHR5cGUgcmVnaXN0cmF0aW9uIG9mIFFQcm9jZXNzOjpQ
cm9jZXNzU3RhdGUuCisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlckhlbHBlcjo6flBy
b2Nlc3NMYXVuY2hlckhlbHBlcik6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlckhl
bHBlcjo6UHJvY2Vzc0xhdW5jaGVySGVscGVyKTogTm8gbmVlZCB0byBhZGQgdGhlIHRoZSBpbnN0
YW5jZSB0byB0aGUKKyAgICAgICAgQ2xlYW51cEhhbmRsZXIgYmVjYXVzZSB3ZSB3aWxsIHJlbW92
ZSB0aGUgc29ja2V0IGZpbGUgaW4gY2xlYW51cEF0RXhpdC4KKyAgICAgICAgKFdlYktpdDo6UHJv
Y2Vzc0xhdW5jaGVySGVscGVyOjppbnN0YW5jZSk6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NM
YXVuY2hlcjo6dGVybWluYXRlUHJvY2Vzcyk6CisgICAgICAgICogV2ViS2l0Mi5wcm86CisKIDIw
MTAtMTItMjAgIEJhbGF6cyBLZWxlbWVuICA8a2JhbGF6c0B3ZWJraXQub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25RdC5jcHAgYi9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMv
cXQvQ29ubmVjdGlvblF0LmNwcAppbmRleCBlM2Q5NjVjLi5jMDczNmI4IDEwMDY0NAotLS0gYS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0LmNwcAorKysgYi9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0LmNwcApAQCAtNTAsNyArNTAsOSBAQCB2
b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyIGlkZW50aWZpZXIp
CiAKIHZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKIHsKLSAgICBkZWxldGUg
bV9zb2NrZXQ7CisgICAgbV9zb2NrZXQtPmRpc2Nvbm5lY3QoKTsKKyAgICBpZiAoIW1faXNTZXJ2
ZXIpCisgICAgICAgIG1fc29ja2V0LT5kZWxldGVMYXRlcigpOwogICAgIG1fc29ja2V0ID0gMDsK
IH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmNw
cCBiL1dlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHAKaW5kZXggNjIyZjkz
YS4uMTVhNTc2YSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQ
b29sLmNwcAorKysgYi9XZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCkBA
IC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJNYXBwZWRNZW1vcnlQb29sLmgiCiAKKyNpbmNs
dWRlICJDbGVhbnVwSGFuZGxlci5oIgogI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgogI2luY2x1
ZGUgPFFEaXI+CiAjaW5jbHVkZSA8UUlPRGV2aWNlPgpAQCAtMzQsMTMgKzM1LDI0IEBACiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1NYXBwZWRNZW1vcnlQb29sOjp+TWFwcGVkTWVtb3J5UG9vbCgp
CitNYXBwZWRNZW1vcnlQb29sKiBNYXBwZWRNZW1vcnlQb29sOjp0aGVJbnN0YW5jZSA9IDA7CisK
K01hcHBlZE1lbW9yeVBvb2wqIE1hcHBlZE1lbW9yeVBvb2w6Omluc3RhbmNlKCkKIHsKLSAgICBj
bGVhcigpOworICAgIGlmICghdGhlSW5zdGFuY2UpIHsKKyAgICAgICAgdGhlSW5zdGFuY2UgPSBu
ZXcgTWFwcGVkTWVtb3J5UG9vbDsKKworICAgICAgICAvLyBEbyBub3QgbGVhdmUgbWFwcGluZyBm
aWxlcyBvbiB0aGUgZGlzayEKKyAgICAgICAgQ2xlYW51cEhhbmRsZXI6Omluc3RhbmNlKCktPm1h
cmtGb3JDbGVhbnVwKHRoZUluc3RhbmNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gdGhlSW5zdGFu
Y2U7CiB9CiAKLXZvaWQgTWFwcGVkTWVtb3J5UG9vbDo6Y2xlYXIoKQorTWFwcGVkTWVtb3J5UG9v
bDo6fk1hcHBlZE1lbW9yeVBvb2woKQogeworICAgIENsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgp
LT51bm1hcmsodGhlSW5zdGFuY2UpOworCiAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IG1f
cG9vbC5zaXplKCk7ICsrbikgewogICAgICAgICBNYXBwZWRNZW1vcnkmIGN1cnJlbnQgPSBtX3Bv
b2wuYXQobik7CiAgICAgICAgIGlmICghY3VycmVudC5maWxlKQpkaWZmIC0tZ2l0IGEvV2ViS2l0
Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmggYi9XZWJLaXQyL1BsYXRmb3JtL3F0L01h
cHBlZE1lbW9yeVBvb2wuaAppbmRleCA0YjM0MTNiLi44ZDZhZjhjIDEwMDY0NAotLS0gYS9XZWJL
aXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuaAorKysgYi9XZWJLaXQyL1BsYXRmb3Jt
L3F0L01hcHBlZE1lbW9yeVBvb2wuaApAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBNYXBwZWRN
ZW1vcnlQb29sX2gKIAogI2luY2x1ZGUgPFFGaWxlPgorI2luY2x1ZGUgPFFPYmplY3Q+CiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAt
ODYsMjMgKzg3LDIwIEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IGRhdGFTaXplOwogfTsKIAotY2xh
c3MgTWFwcGVkTWVtb3J5UG9vbCB7CitjbGFzcyBNYXBwZWRNZW1vcnlQb29sIDogUU9iamVjdCB7
CisgICAgUV9PQkpFQ1QKIHB1YmxpYzoKLSAgICBzdGF0aWMgTWFwcGVkTWVtb3J5UG9vbCogaW5z
dGFuY2UoKQotICAgIHsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChNYXBwZWRNZW1vcnlQ
b29sLCBzaW5nbGV0b24sICgpKTsKLSAgICAgICAgcmV0dXJuICZzaW5nbGV0b247Ci0gICAgfQor
ICAgIHN0YXRpYyBNYXBwZWRNZW1vcnlQb29sKiBpbnN0YW5jZSgpOwogCiAgICAgTWFwcGVkTWVt
b3J5KiBtYXBNZW1vcnkoc2l6ZV90IHNpemUpOwogICAgIE1hcHBlZE1lbW9yeSogbWFwRmlsZShR
U3RyaW5nIGZpbGVOYW1lLCBzaXplX3Qgc2l6ZSk7CiAKLSAgICB2b2lkIGNsZWFyKCk7Ci0KIHBy
aXZhdGU6Ci0gICAgTWFwcGVkTWVtb3J5UG9vbCgpIHsgfTsKKyAgICBNYXBwZWRNZW1vcnlQb29s
KCkgeyB9CiAgICAgfk1hcHBlZE1lbW9yeVBvb2woKTsKIAorICAgIHN0YXRpYyBNYXBwZWRNZW1v
cnlQb29sKiB0aGVJbnN0YW5jZTsKKwogICAgIFZlY3RvcjxNYXBwZWRNZW1vcnk+IG1fcG9vbDsK
IH07CiAKZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3Bw
IGIvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAKaW5kZXggZTUzNDFlYy4u
NzZmZGU3YSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5j
cHAKKysrIGIvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAKQEAgLTI5LDcg
KzI5LDcgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgogI2luY2x1ZGUgIkFyZ3Vt
ZW50RW5jb2Rlci5oIgotI2luY2x1ZGUgIkNyYXNoSGFuZGxlci5oIgorI2luY2x1ZGUgIkNsZWFu
dXBIYW5kbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVk
ZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KQEAgLTk5LDEwICs5OSw4
IEBAIFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShzaXplX3Qg
c2l6ZSkKICAgICBzaGFyZWRNZW1vcnktPm1fc2l6ZSA9IHNpemU7CiAgICAgc2hhcmVkTWVtb3J5
LT5tX2RhdGEgPSBpbXBsLT5kYXRhKCk7CiAKLSAgICBpbXBsLT5jb25uZWN0KFFDb3JlQXBwbGlj
YXRpb246Omluc3RhbmNlKCksIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChkZWxldGVMYXRl
cigpKSk7Ci0KLSAgICAvLyBSZWxlYXNlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgZXZlbiBv
biBjcmFzaCEKLSAgICBDcmFzaEhhbmRsZXI6Omluc3RhbmNlKCktPm1hcmtGb3JEZWxldGlvbk9u
Q3Jhc2goaW1wbCk7CisgICAgLy8gRG8gbm90IGxlYXZlIGJlaGluZCB0aGUgc2hhcmVkIG1lbW9y
eSBzZWdtZW50LgorICAgIENsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT5tYXJrRm9yQ2xlYW51
cChpbXBsKTsKIAogICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOwogfQpAQCAtMTM4
LDI0ICsxMzYsMTYgQEAgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3Jl
YXRlKGNvbnN0IEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHAKICAgICBzaGFyZWRNZW1vcnkt
Pm1fc2l6ZSA9IGhhbmRsZS5tX3NpemU7CiAgICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEgPSBpbXBs
LT5kYXRhKCk7CiAKLSAgICBpbXBsLT5jb25uZWN0KFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNl
KCksIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChkZWxldGVMYXRlcigpKSk7Ci0KLSAgICAv
LyBSZWxlYXNlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgZXZlbiBvbiBjcmFzaCEKLSAgICBD
cmFzaEhhbmRsZXI6Omluc3RhbmNlKCktPm1hcmtGb3JEZWxldGlvbk9uQ3Jhc2goaW1wbCk7Cisg
ICAgLy8gRG8gbm90IGxlYXZlIGJlaGluZCB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LgorICAg
IENsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT5tYXJrRm9yQ2xlYW51cChpbXBsKTsKIAogICAg
IHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOwogfQogCiBTaGFyZWRNZW1vcnk6On5TaGFy
ZWRNZW1vcnkoKQogewotICAgIC8vIEF2b2lkIGRvdWJsZSBkZWxldGlvbiB3aGVuIGRlbGV0ZUxh
dGVyIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIHRocm91Z2ggdGhlIHNpZ25hbC1zbG90IGNvbm5l
Y3Rpb24uCi0gICAgaWYgKFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCktPmRpc2Nvbm5lY3Qo
bV9pbXBsKSkgewotICAgICAgICAvLyBtX2ltcGwgbXVzdCBiZSBub24tbnVsbCBhbmQgaXQgbXVz
dCBwb2ludCB0byBhIHZhbGlkIFFTaGFyZWRNZW1vcnkgb2JqZWN0LgotICAgICAgICBBU1NFUlQo
cW9iamVjdF9jYXN0PFFTaGFyZWRNZW1vcnkqPihtX2ltcGwpKTsKLSAgICAgICAgZGVsZXRlIG1f
aW1wbDsKLSAgICB9Ci0KLSAgICBDcmFzaEhhbmRsZXI6Omluc3RhbmNlKCktPmRpZERlbGV0ZSht
X2ltcGwpOworICAgIENsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT51bm1hcmsobV9pbXBsKTsK
KyAgICBkZWxldGUgbV9pbXBsOwogfQogCiBib29sIFNoYXJlZE1lbW9yeTo6Y3JlYXRlSGFuZGxl
KEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCmRpZmYgLS1naXQgYS9XZWJL
aXQyL1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuY3BwIGIvV2ViS2l0Mi9TaGFyZWQvcXQvQ2xlYW51
cEhhbmRsZXIuY3BwCnNpbWlsYXJpdHkgaW5kZXggNjclCnJlbmFtZSBmcm9tIFdlYktpdDIvU2hh
cmVkL3F0L0NyYXNoSGFuZGxlci5jcHAKcmVuYW1lIHRvIFdlYktpdDIvU2hhcmVkL3F0L0NsZWFu
dXBIYW5kbGVyLmNwcAppbmRleCA5ZWI3ZDNkLi40NTdhZjMyIDEwMDY0NAotLS0gYS9XZWJLaXQy
L1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuY3BwCisrKyBiL1dlYktpdDIvU2hhcmVkL3F0L0NsZWFu
dXBIYW5kbGVyLmNwcApAQCAtMjMsNDIgKzIzLDM3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgIkNyYXNoSGFuZGxlci5oIgorI2luY2x1ZGUg
IkNsZWFudXBIYW5kbGVyLmgiCiAKICNpbmNsdWRlICJNYXBwZWRNZW1vcnlQb29sLmgiCisjaW5j
bHVkZSAiUnVuTG9vcC5oIgogI2luY2x1ZGUgPGNzaWduYWw+CiAjaW5jbHVkZSA8Y3N0ZGxpYj4K
LSNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CisjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlv
bj4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLUNyYXNoSGFuZGxlciogQ3Jhc2hIYW5kbGVyOjp0
aGVJbnN0YW5jZSA9IDA7CitDbGVhbnVwSGFuZGxlciogQ2xlYW51cEhhbmRsZXI6OnRoZUluc3Rh
bmNlID0gMDsKIAotQ3Jhc2hIYW5kbGVyOjpDcmFzaEhhbmRsZXIoKQorQ2xlYW51cEhhbmRsZXI6
OkNsZWFudXBIYW5kbGVyKCkKICAgICA6IG1faW5EZWxldGVPYmplY3RzKGZhbHNlKQogewotICAg
IHNpZ25hbChTSUdBQlJULCAmQ3Jhc2hIYW5kbGVyOjpzaWduYWxIYW5kbGVyKTsKLSAgICBzaWdu
YWwoU0lHQlVTLCAmQ3Jhc2hIYW5kbGVyOjpzaWduYWxIYW5kbGVyKTsKLSAgICBzaWduYWwoU0lH
SUxMLCAmQ3Jhc2hIYW5kbGVyOjpzaWduYWxIYW5kbGVyKTsKLSAgICBzaWduYWwoU0lHSU5ULCAm
Q3Jhc2hIYW5kbGVyOjpzaWduYWxIYW5kbGVyKTsKLSAgICBzaWduYWwoU0lHRlBFLCAmQ3Jhc2hI
YW5kbGVyOjpzaWduYWxIYW5kbGVyKTsKLSAgICBzaWduYWwoU0lHUVVJVCwgJkNyYXNoSGFuZGxl
cjo6c2lnbmFsSGFuZGxlcik7Ci0gICAgc2lnbmFsKFNJR1NFR1YsICZDcmFzaEhhbmRsZXI6OnNp
Z25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdUUkFQLCAmQ3Jhc2hIYW5kbGVyOjpzaWduYWxI
YW5kbGVyKTsKKyAgICBRQ29yZUFwcGxpY2F0aW9uKiBjb3JlQXBwbGljYXRpb24gPSBRQ29yZUFw
cGxpY2F0aW9uOjppbnN0YW5jZSgpOworICAgIG1vdmVUb1RocmVhZChjb3JlQXBwbGljYXRpb24t
PnRocmVhZCgpKTsgLy8gRW5zdXJlIHRoYXQgd2UgYXJlIGFjdGluZyBvbiB0aGUgbWFpbiB0aHJl
YWQuCisgICAgY29ubmVjdChjb3JlQXBwbGljYXRpb24sIFNJR05BTChhYm91dFRvUXVpdCgpKSwg
U0xPVChkZWxldGVPYmplY3RzKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgc2lnbmFs
KFNJR1RFUk0sICZDbGVhbnVwSGFuZGxlcjo6c2lnVGVybUhhbmRsZXIpOwogfQogCi1OT19SRVRV
Uk4gdm9pZCBDcmFzaEhhbmRsZXI6OnNpZ25hbEhhbmRsZXIoaW50KQordm9pZCBDbGVhbnVwSGFu
ZGxlcjo6c2lnVGVybUhhbmRsZXIoaW50KQogewotICAgIENyYXNoSGFuZGxlcjo6dGhlSW5zdGFu
Y2UtPmRlbGV0ZU9iamVjdHMoKTsKLSAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgOjpSdW5M
b29wOjptYWluKCktPnN0b3AoKTsKIH0KIAotdm9pZCBDcmFzaEhhbmRsZXI6OmRlbGV0ZU9iamVj
dHMoKQordm9pZCBDbGVhbnVwSGFuZGxlcjo6ZGVsZXRlT2JqZWN0cygpCiB7CiAgICAgbV9pbkRl
bGV0ZU9iamVjdHMgPSB0cnVlOwotICAgIHFEZWxldGVBbGwobV9vYmplY3RzKTsKLQotICAgIE1h
cHBlZE1lbW9yeVBvb2w6Omluc3RhbmNlKCktPmNsZWFyKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fb2JqZWN0cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9vYmplY3RzW2ldLT5k
ZWxldGVMYXRlcigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dl
YktpdDIvU2hhcmVkL3F0L0NyYXNoSGFuZGxlci5oIGIvV2ViS2l0Mi9TaGFyZWQvcXQvQ2xlYW51
cEhhbmRsZXIuaApzaW1pbGFyaXR5IGluZGV4IDc4JQpyZW5hbWUgZnJvbSBXZWJLaXQyL1NoYXJl
ZC9xdC9DcmFzaEhhbmRsZXIuaApyZW5hbWUgdG8gV2ViS2l0Mi9TaGFyZWQvcXQvQ2xlYW51cEhh
bmRsZXIuaAppbmRleCA2NzJmOTVjLi5jYTk0YTVjIDEwMDY0NAotLS0gYS9XZWJLaXQyL1NoYXJl
ZC9xdC9DcmFzaEhhbmRsZXIuaAorKysgYi9XZWJLaXQyL1NoYXJlZC9xdC9DbGVhbnVwSGFuZGxl
ci5oCkBAIC0yMyw5ICsyMywxMCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKLSNpZm5kZWYgQ3Jhc2hIYW5kbGVyX2gKLSNkZWZpbmUgQ3Jhc2hIYW5kbGVyX2gK
KyNpZm5kZWYgQ2xlYW51cEhhbmRsZXJfaAorI2RlZmluZSBDbGVhbnVwSGFuZGxlcl9oCiAKKyNp
bmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFMaXN0PgogI2luY2x1ZGUgPFFP
YmplY3Q+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTMzLDM1ICszNCwzNiBAQAogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgQ3Jhc2hIYW5kbGVyIDogcHJpdmF0ZSBRT2JqZWN0
IHsKK2NsYXNzIENsZWFudXBIYW5kbGVyIDogcHJpdmF0ZSBRT2JqZWN0IHsKICAgICBRX09CSkVD
VAogcHVibGljOgotICAgIHN0YXRpYyBDcmFzaEhhbmRsZXIqIGluc3RhbmNlKCkKKyAgICBzdGF0
aWMgQ2xlYW51cEhhbmRsZXIqIGluc3RhbmNlKCkKICAgICB7CiAgICAgICAgIGlmICghdGhlSW5z
dGFuY2UpCi0gICAgICAgICAgICB0aGVJbnN0YW5jZSA9IG5ldyBDcmFzaEhhbmRsZXIoKTsKKyAg
ICAgICAgICAgIHRoZUluc3RhbmNlID0gbmV3IENsZWFudXBIYW5kbGVyKCk7CiAgICAgICAgIHJl
dHVybiB0aGVJbnN0YW5jZTsKICAgICB9CiAKLSAgICB2b2lkIG1hcmtGb3JEZWxldGlvbk9uQ3Jh
c2goUU9iamVjdCogb2JqZWN0KQorICAgIHZvaWQgbWFya0ZvckNsZWFudXAoUU9iamVjdCogb2Jq
ZWN0KQogICAgIHsKLSAgICAgICAgdGhlSW5zdGFuY2UtPm1fb2JqZWN0cy5hcHBlbmQob2JqZWN0
KTsKKyAgICAgICAgbV9vYmplY3RzLmFwcGVuZChvYmplY3QpOwogICAgIH0KIAotICAgIHZvaWQg
ZGlkRGVsZXRlKFFPYmplY3QqIG9iamVjdCkKKyAgICB2b2lkIHVubWFyayhRT2JqZWN0KiBvYmpl
Y3QpCiAgICAgewogICAgICAgICBpZiAobV9pbkRlbGV0ZU9iamVjdHMpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIHRoZUluc3RhbmNlLT5tX29iamVjdHMucmVtb3ZlT25lKG9iamVjdCk7
CisgICAgICAgIG1fb2JqZWN0cy5yZW1vdmVPbmUob2JqZWN0KTsKICAgICB9CiAKLXByaXZhdGU6
Ci0gICAgc3RhdGljIHZvaWQgc2lnbmFsSGFuZGxlcihpbnQpOwotICAgIHN0YXRpYyBDcmFzaEhh
bmRsZXIqIHRoZUluc3RhbmNlOworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIGRlbGV0ZU9iamVj
dHMoKTsKIAotICAgIENyYXNoSGFuZGxlcigpOworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBz
aWdUZXJtSGFuZGxlcihpbnQpOworICAgIHN0YXRpYyBDbGVhbnVwSGFuZGxlciogdGhlSW5zdGFu
Y2U7CiAKLSAgICB2b2lkIGRlbGV0ZU9iamVjdHMoKTsKKyAgICBDbGVhbnVwSGFuZGxlcigpOwog
CiAgICAgUUxpc3Q8UU9iamVjdCo+IG1fb2JqZWN0czsKICAgICBib29sIG1faW5EZWxldGVPYmpl
Y3RzOwpAQCAtNjksNCArNzEsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
IAotI2VuZGlmIC8vIENyYXNoSGFuZGxlcl9oCisjZW5kaWYgLy8gQ2xlYW51cEhhbmRsZXJfaApk
aWZmIC0tZ2l0IGEvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVy
UXQuY3BwIGIvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQu
Y3BwCmluZGV4IDY3NGQ3ZTEuLjE1NDA1MTYgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvVUlQcm9jZXNz
L0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcAorKysgYi9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAKQEAgLTI3LDkgKzI3LDkgQEAKICNp
bmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNp
bmNsdWRlICJDbGVhbnVwSGFuZGxlci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAj
aW5jbHVkZSAiUnVuTG9vcC5oIgotI2luY2x1ZGUgIkNyYXNoSGFuZGxlci5oIgogI2luY2x1ZGUg
IldlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4K
ICNpbmNsdWRlIDxzdHJpbmc+CkBAIC00Miw3ICs0Miw5IEBACiAjaW5jbHVkZSA8UURlYnVnPgog
I2luY2x1ZGUgPFFGaWxlPgogI2luY2x1ZGUgPFFMb2NhbFNlcnZlcj4KKyNpbmNsdWRlIDxRTWV0
YVR5cGU+CiAjaW5jbHVkZSA8UVByb2Nlc3M+CisjaW5jbHVkZSA8UVN0cmluZz4KIAogI2luY2x1
ZGUgPFF0Q29yZS9xZ2xvYmFsLmg+CiAKQEAgLTYwLDYgKzYyLDkgQEAgcHVibGljOgogICAgIHZv
aWQgbGF1bmNoKFdlYktpdDo6UHJvY2Vzc0xhdW5jaGVyKik7CiAgICAgUUxvY2FsU29ja2V0KiB0
YWtlUGVuZGluZ0Nvbm5lY3Rpb24oKTsKICAgICBzdGF0aWMgUHJvY2Vzc0xhdW5jaGVySGVscGVy
KiBpbnN0YW5jZSgpOworCisgICAgY29uc3QgUVN0cmluZyBzZXJ2ZXJOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZXJ2ZXIuc2VydmVyTmFtZSgpOyB9CisKIHByaXZhdGU6CiAgICAgUHJvY2Vzc0xh
dW5jaGVySGVscGVyKCk7CiAgICAgUUxvY2FsU2VydmVyIG1fc2VydmVyOwpAQCAtNzAsMTMgKzc1
LDIwIEBAIHByaXZhdGU6CiAKIFFfR0xPQkFMX1NUQVRJQyhXVEY6Okhhc2hTZXQ8UVByb2Nlc3Mq
PiwgcHJvY2Vzc2VzKTsKIAotc3RhdGljIHZvaWQgY2xlYW51cFByb2Nlc3NlcygpCitzdGF0aWMg
dm9pZCBjbGVhbnVwQXRFeGl0KCkKIHsKLSAgICBXVEY6Okhhc2hTZXQ8UVByb2Nlc3MqPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBwcm9jZXNzZXMoKS0+YmVnaW4oKTsKLSAgICB3aGlsZSAoaXQgIT0g
cHJvY2Vzc2VzKCktPmVuZCgpKSB7Ci0gICAgICAgICgqaXQpLT5raWxsKCk7Ci0gICAgICAgICsr
aXQ7CisgICAgLy8gVGVybWluYXRlIG91ciB3ZWIgcHJvY2VzcyhlcykuCisgICAgV1RGOjpIYXNo
U2V0PFFQcm9jZXNzKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb2Nlc3NlcygpLT5lbmQoKTsK
KyAgICBmb3IgKFdURjo6SGFzaFNldDxRUHJvY2Vzcyo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBy
b2Nlc3NlcygpLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUVByb2Nlc3Mq
IHByb2Nlc3MgPSAqaXQ7CisgICAgICAgIHByb2Nlc3MtPmRpc2Nvbm5lY3QocHJvY2Vzcyk7Cisg
ICAgICAgIHByb2Nlc3MtPnRlcm1pbmF0ZSgpOworICAgICAgICBpZiAoIXByb2Nlc3MtPndhaXRG
b3JGaW5pc2hlZCgyMDApKQorICAgICAgICAgICAgcHJvY2Vzcy0+a2lsbCgpOwogICAgIH0KKwor
ICAgIC8vIERvIG5vdCBsZWF2ZSBiZWhpbmQgdGhlIHNvY2tldCBmaWxlLgorICAgIFFMb2NhbFNl
cnZlcjo6cmVtb3ZlU2VydmVyKFByb2Nlc3NMYXVuY2hlckhlbHBlcjo6aW5zdGFuY2UoKS0+c2Vy
dmVyTmFtZSgpKTsKIH0KIAogY2xhc3MgUXRXZWJQcm9jZXNzIDogcHVibGljIFFQcm9jZXNzCkBA
IC04Nyw2ICs5OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIDogUVByb2Nlc3MocGFyZW50KQogICAg
IHsKICAgICAgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoc3RhdGVDaGFuZ2VkKFFQcm9jZXNzOjpQ
cm9jZXNzU3RhdGUpKSwgdGhpcywgU0xPVChwcm9jZXNzU3RhdGVDaGFuZ2VkKFFQcm9jZXNzOjpQ
cm9jZXNzU3RhdGUpKSk7CisgICAgICAgIHN0YXRpYyBib29sIHJlZ2lzdGVyZWQgPSBmYWxzZTsK
KyAgICAgICAgaWYgKCFyZWdpc3RlcmVkKSB7CisgICAgICAgICAgICBxUmVnaXN0ZXJNZXRhVHlw
ZTxRUHJvY2Vzczo6UHJvY2Vzc1N0YXRlPigiUVByb2Nlc3M6OlByb2Nlc3NTdGF0ZSIpOworICAg
ICAgICAgICAgcmVnaXN0ZXJlZCA9IHRydWU7CisgICAgICAgIH0KICAgICB9CiAKIHByaXZhdGUg
c2xvdHM6CkBAIC0xNDEsNyArMTU4LDYgQEAgUUxvY2FsU29ja2V0KiBQcm9jZXNzTGF1bmNoZXJI
ZWxwZXI6OnRha2VQZW5kaW5nQ29ubmVjdGlvbigpCiBQcm9jZXNzTGF1bmNoZXJIZWxwZXI6On5Q
cm9jZXNzTGF1bmNoZXJIZWxwZXIoKQogewogICAgIG1fc2VydmVyLmNsb3NlKCk7Ci0gICAgQ3Jh
c2hIYW5kbGVyOjppbnN0YW5jZSgpLT5kaWREZWxldGUodGhpcyk7CiB9CiAKIFByb2Nlc3NMYXVu
Y2hlckhlbHBlcjo6UHJvY2Vzc0xhdW5jaGVySGVscGVyKCkKQEAgLTE1MiwxMCArMTY4LDYgQEAg
UHJvY2Vzc0xhdW5jaGVySGVscGVyOjpQcm9jZXNzTGF1bmNoZXJIZWxwZXIoKQogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgY29ubmVjdCgmbV9zZXJ2ZXIsIFNJR05B
TChuZXdDb25uZWN0aW9uKCkpLCB0aGlzLCBTTE9UKG5ld0Nvbm5lY3Rpb24oKSkpOwotICAgIGNv
bm5lY3QoUUNvcmVBcHBsaWNhdGlvbjo6aW5zdGFuY2UoKSwgU0lHTkFMKGFib3V0VG9RdWl0KCkp
LCBTTE9UKGRlbGV0ZUxhdGVyKCkpLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7Ci0KLSAgICAvLyBE
byBub3QgbGVhdmUgc29ja2V0IGZpbGVzIG9uIHRoZSBkaXNrIGV2ZW4gb24gY3Jhc2ghCi0gICAg
Q3Jhc2hIYW5kbGVyOjppbnN0YW5jZSgpLT5tYXJrRm9yRGVsZXRpb25PbkNyYXNoKHRoaXMpOwog
fQogCiBQcm9jZXNzTGF1bmNoZXJIZWxwZXIqIFByb2Nlc3NMYXVuY2hlckhlbHBlcjo6aW5zdGFu
Y2UoKQpAQCAtMTY3LDcgKzE3OSw3IEBAIFByb2Nlc3NMYXVuY2hlckhlbHBlciogUHJvY2Vzc0xh
dW5jaGVySGVscGVyOjppbnN0YW5jZSgpCiAgICAgICAgIC8vIFRoZSBwdXJwb3NlIG9mIHRoZSBm
b2xsb3dpbmcgbGluZSBpcyB0byBlbnN1cmUgdGhhdCBvdXIgc3RhdGljIGlzIGluaXRpYWxpemVk
IGJlZm9yZSB0aGUgZXhpdCBoYW5kbGVyIGlzIGluc3RhbGxlZC4KICAgICAgICAgcHJvY2Vzc2Vz
KCktPmNsZWFyKCk7CiAKLSAgICAgICAgYXRleGl0KGNsZWFudXBQcm9jZXNzZXMpOworICAgICAg
ICBhdGV4aXQoY2xlYW51cEF0RXhpdCk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBA
IC0xOTIsNyArMjA0LDcgQEAgdm9pZCBQcm9jZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVByb2Nlc3Mo
KQogICAgICAgICByZXR1cm47CiAKICAgICBRT2JqZWN0Ojpjb25uZWN0KG1fcHJvY2Vzc0lkZW50
aWZpZXIsIFNJR05BTChmaW5pc2hlZChpbnQpKSwgbV9wcm9jZXNzSWRlbnRpZmllciwgU0xPVChk
ZWxldGVMYXRlcigpKSwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOwotICAgIG1fcHJvY2Vzc0lkZW50
aWZpZXItPmtpbGwoKTsKKyAgICBtX3Byb2Nlc3NJZGVudGlmaWVyLT50ZXJtaW5hdGUoKTsKIH0K
IAogUUxvY2FsU29ja2V0KiBQcm9jZXNzTGF1bmNoZXI6OnRha2VQZW5kaW5nQ29ubmVjdGlvbigp
CmRpZmYgLS1naXQgYS9XZWJLaXQyL1dlYktpdDIucHJvIGIvV2ViS2l0Mi9XZWJLaXQyLnBybwpp
bmRleCA2NDkzOGQ3Li4yNjFlY2U3IDEwMDY0NAotLS0gYS9XZWJLaXQyL1dlYktpdDIucHJvCisr
KyBiL1dlYktpdDIvV2ViS2l0Mi5wcm8KQEAgLTI3Nyw3ICsyNzcsNyBAQCBIRUFERVJTICs9IFwK
ICAgICBTaGFyZWQvV2ViVVJMUmVzcG9uc2UuaCBcCiAgICAgU2hhcmVkL1dlYlVzZXJDb250ZW50
VVJMUGF0dGVybi5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdp
bk1vZHVsZS5oIFwKLSAgICBTaGFyZWQvcXQvQ3Jhc2hIYW5kbGVyLmggXAorICAgIFNoYXJlZC9x
dC9DbGVhbnVwSGFuZGxlci5oIFwKICAgICBTaGFyZWQvcXQvUGxhdGZvcm1DZXJ0aWZpY2F0ZUlu
Zm8uaCBcCiAgICAgU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmggXAogICAgIFNoYXJlZC9xdC9XZWJF
dmVudEZhY3RvcnlRdC5oIFwKQEAgLTQ4Nyw3ICs0ODcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBT
aGFyZWQvV2ViVVJMUmVzcG9uc2UuY3BwIFwKICAgICBTaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAg
XAogICAgIFNoYXJlZC9xdC9CYWNraW5nU3RvcmVRdC5jcHAgXAotICAgIFNoYXJlZC9xdC9DcmFz
aEhhbmRsZXIuY3BwIFwKKyAgICBTaGFyZWQvcXQvQ2xlYW51cEhhbmRsZXIuY3BwIFwKICAgICBT
aGFyZWQvcXQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudFF0LmNwcCBcCiAgICAgU2hhcmVkL3F0L1Vw
ZGF0ZUNodW5rLmNwcCBcCiAgICAgU2hhcmVkL3F0L1dlYkNvcmVBcmd1bWVudENvZGVyc1F0LmNw
cCBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77878</attachid>
            <date>2011-01-04 04:52:09 -0800</date>
            <delta_ts>2011-01-04 05:08:18 -0800</delta_ts>
            <desc>patch v5</desc>
            <filename>ch_final.diff</filename>
            <type>text/plain</type>
            <size>16190</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
NjkwM2UwMC4uMDQxZGRmZSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMS0wMS0wMyAgQmFsYXpzIEtlbGVt
ZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW1F0XVtXSzJdIEluY29tcGxldGUgY2xlYW4gdXAgb24gdGVybWlu
YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUx
NDc0CisKKyAgICAgICAgRG8gbm90IGtpbGwgdGhlIHdlYiBwcm9jZXNzIHRvIGZvcmNlIGl0J3Mg
dGVybWluYXRpb24uCisgICAgICAgIEZpeCBvYmplY3QgZGVzdHJ1Y3Rpb24gYW5kIGNsZWFudXAg
bG9naWMgYW5kIG1ha2UgdGhlIGNsZWFudXAgbW9yZSByZWxpYWJsZS4KKyAgICAgICAgRG8gbm90
IHRyeSB0byBjbGVhbnVwIG9uIGNyYXNoIGJlY2F1c2UgaXQgaXMgbm90IHJlbGlhYmxlLgorCisg
ICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3BwOgorICAgICAgICAo
Q29yZUlQQzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKTogRG8gbm90IGRlbGV0ZSB0
aGUgc29ja2V0IGlmIHdlCisgICAgICAgIGRvIG5vdCBvd24gaXQuIFRoaXMgaXMgdGhlIGNhc2Ug
d2l0aCBhIHNlcnZlciBjb25uZWN0aW9uLgorICAgICAgICAqIFBsYXRmb3JtL3F0L01hcHBlZE1l
bW9yeVBvb2wuY3BwOgorICAgICAgICBUdXJuIE1hcHBlZE1lbW9yeVBvb2wgaW50byBhIFFPYmpl
Y3Qgc28gdGhlIENsZWFudXBIYW5kbGVyIGNhbiBkZXN0cnVjdCBpdAorICAgICAgICBpbiB0aGUg
c2FtZSB3YXkgYXMgdGhlIG90aGVyIG9iamVjdHMuCisgICAgICAgIChXZWJLaXQ6Ok1hcHBlZE1l
bW9yeVBvb2w6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5UG9vbDo6
fk1hcHBlZE1lbW9yeVBvb2wpOgorICAgICAgICAqIFBsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBv
b2wuaDoKKyAgICAgICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5UG9vbDo6TWFwcGVkTWVtb3J5UG9v
bCk6CisgICAgICAgICogUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwOgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZSk6IE5vIG5lZWQgdG8gY2FyZSBhYm91dCBRQ29y
ZUFwcGxpY2F0aW9uOjphYm91dFRvUXVpdC4KKyAgICAgICAgSXQgaXMgaGFuZGxlZCBieSB0aGUg
Q2xlYW51cEhhbmRsZXIuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6flNoYXJlZE1l
bW9yeSk6IERpdHRvLgorICAgICAgICAqIFNoYXJlZC9xdC9DbGVhbnVwSGFuZGxlci5jcHA6IFJl
bmFtZWQgZnJvbSBXZWJLaXQyL1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuY3BwLgorICAgICAgICBO
byBsb25nZXIgdHJ5IHRvIGhhbmRsZSBjcmFzaCBidXQganVzdCBub3JtYWwgdGVybWluYXRpb24u
CisgICAgICAgIChXZWJLaXQ6OkNsZWFudXBIYW5kbGVyOjpDbGVhbnVwSGFuZGxlcik6IENvbm5l
Y3QgZGVsZXRlT2JqZWN0cyB3aXRoIFFDb3JlQXBwbGljYXRpb246OmFib3V0VG9RdWl0LgorICAg
ICAgICBFbnN1cmUgYXBwcm9wcmlhdGUgdGhyZWFkIGFmZmluaXR5LgorICAgICAgICAoV2ViS2l0
OjpDbGVhbnVwSGFuZGxlcjo6c2lnVGVybUhhbmRsZXIpOiBTdG9wIHRoZSBtYWluIGV2ZW50IGxv
b3AuCisgICAgICAgIChXZWJLaXQ6OkNsZWFudXBIYW5kbGVyOjpkZWxldGVPYmplY3RzKTogVXNl
IGRlbGV0ZUxhdGVyIGluc3RlYWQgb2YgZGVsZXRlIHNpbmNlIGl0IGlzIG1vcmUgcmVsaWFibGUu
CisgICAgICAgICogU2hhcmVkL3F0L0NsZWFudXBIYW5kbGVyLmg6IFJlbmFtZWQgZnJvbSBXZWJL
aXQyL1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuaC4KKyAgICAgICAgKFdlYktpdDo6Q2xlYW51cEhh
bmRsZXI6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYktpdDo6Q2xlYW51cEhhbmRsZXI6Om1hcmtG
b3JDbGVhbnVwKToKKyAgICAgICAgKFdlYktpdDo6Q2xlYW51cEhhbmRsZXI6OnVubWFyayk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcDoKKyAg
ICAgICAgRG8gbm90IGtpbGwgdGhlIHdlYiBwcm9jZXNzIGltbWlkaWF0ZWx5IGJ1dCBnaXZlIGl0
IGEgY2hhbmNlIHRvIGNsZWFudXAuCisgICAgICAgIFVzZSBRTG9jYWxTZXJ2ZXI6OnJlbW92ZVNl
cnZlciBmb3IgYXNzdXJpbmcgdGhhdCB0aGUgc29ja2V0IGZpbGUgd2lsbCBiZSByZW1vdmVkLgor
ICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXJIZWxwZXI6OnNlcnZlck5hbWUpOgorICAg
ICAgICAoV2ViS2l0OjpjbGVhbnVwQXRFeGl0KTogUmVuYW1lZCBmcm9tIGNsZWFudXBQcm9jZXNz
ZXMuIE9ubHkga2lsbCB0aGUgd2ViIHByb2Nlc3Mgd2hlbiBpdCB0aW1lcworICAgICAgICBvdXQg
dGVybWluYXRpbmcuIEZpeGVkIHRoZSBidWcgb2YgY2hhbmdpbmcgdGhlIGxpc3Qgd2hpbGUgaXRl
cmF0aW5nIGl0IG92ZXIgYnkgZGlzY29ubmVjdGluZworICAgICAgICBmcm9tIHRoZSBwcm9jZXNz
U3RhdGVDaGFuZ2VkIHNsb3QuCisgICAgICAgIChXZWJLaXQ6OlF0V2ViUHJvY2Vzczo6UXRXZWJQ
cm9jZXNzKTogQWRkZWQgbWlzc2luZyBtZXRhIHR5cGUgcmVnaXN0cmF0aW9uIG9mIFFQcm9jZXNz
OjpQcm9jZXNzU3RhdGUuCisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlckhlbHBlcjo6
flByb2Nlc3NMYXVuY2hlckhlbHBlcik6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hl
ckhlbHBlcjo6UHJvY2Vzc0xhdW5jaGVySGVscGVyKTogTm8gbmVlZCB0byBhZGQgdGhlIHRoZSBp
bnN0YW5jZSB0byB0aGUKKyAgICAgICAgQ2xlYW51cEhhbmRsZXIgYmVjYXVzZSB3ZSB3aWxsIHJl
bW92ZSB0aGUgc29ja2V0IGZpbGUgaW4gY2xlYW51cEF0RXhpdC4KKyAgICAgICAgKFdlYktpdDo6
UHJvY2Vzc0xhdW5jaGVySGVscGVyOjppbnN0YW5jZSk6CisgICAgICAgIChXZWJLaXQ6OlByb2Nl
c3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2Vzcyk6CisgICAgICAgICogV2ViS2l0Mi5wcm86CisK
IDIwMTAtMTItMjAgIEJhbGF6cyBLZWxlbWVuICA8a2JhbGF6c0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25RdC5jcHAgYi9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvcXQvQ29ubmVjdGlvblF0LmNwcAppbmRleCBlM2Q5NjVjLi5jMDczNmI4IDEwMDY0NAotLS0g
YS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0LmNwcAorKysgYi9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0LmNwcApAQCAtNTAsNyArNTAsOSBA
QCB2b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyIGlkZW50aWZp
ZXIpCiAKIHZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKIHsKLSAgICBkZWxl
dGUgbV9zb2NrZXQ7CisgICAgbV9zb2NrZXQtPmRpc2Nvbm5lY3QoKTsKKyAgICBpZiAoIW1faXNT
ZXJ2ZXIpCisgICAgICAgIG1fc29ja2V0LT5kZWxldGVMYXRlcigpOwogICAgIG1fc29ja2V0ID0g
MDsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29s
LmNwcCBiL1dlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHAKaW5kZXggNjIy
ZjkzYS4uZDM2ZDgyYiAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1v
cnlQb29sLmNwcAorKysgYi9XZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuY3Bw
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJNYXBwZWRNZW1vcnlQb29sLmgiCiAKKyNp
bmNsdWRlICJDbGVhbnVwSGFuZGxlci5oIgogI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgogI2lu
Y2x1ZGUgPFFEaXI+CiAjaW5jbHVkZSA8UUlPRGV2aWNlPgpAQCAtMzQsMTMgKzM1LDI0IEBACiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1NYXBwZWRNZW1vcnlQb29sOjp+TWFwcGVkTWVtb3J5UG9v
bCgpCitNYXBwZWRNZW1vcnlQb29sKiBNYXBwZWRNZW1vcnlQb29sOjp0aGVJbnN0YW5jZSA9IDA7
CisKK01hcHBlZE1lbW9yeVBvb2wqIE1hcHBlZE1lbW9yeVBvb2w6Omluc3RhbmNlKCkKIHsKLSAg
ICBjbGVhcigpOworICAgIGlmICghdGhlSW5zdGFuY2UpIHsKKyAgICAgICAgdGhlSW5zdGFuY2Ug
PSBuZXcgTWFwcGVkTWVtb3J5UG9vbDsKKworICAgICAgICAvLyBEbyBub3QgbGVhdmUgbWFwcGlu
ZyBmaWxlcyBvbiB0aGUgZGlzay4KKyAgICAgICAgQ2xlYW51cEhhbmRsZXI6Omluc3RhbmNlKCkt
Pm1hcmtGb3JDbGVhbnVwKHRoZUluc3RhbmNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gdGhlSW5z
dGFuY2U7CiB9CiAKLXZvaWQgTWFwcGVkTWVtb3J5UG9vbDo6Y2xlYXIoKQorTWFwcGVkTWVtb3J5
UG9vbDo6fk1hcHBlZE1lbW9yeVBvb2woKQogeworICAgIENsZWFudXBIYW5kbGVyOjppbnN0YW5j
ZSgpLT51bm1hcmsodGhlSW5zdGFuY2UpOworCiAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8
IG1fcG9vbC5zaXplKCk7ICsrbikgewogICAgICAgICBNYXBwZWRNZW1vcnkmIGN1cnJlbnQgPSBt
X3Bvb2wuYXQobik7CiAgICAgICAgIGlmICghY3VycmVudC5maWxlKQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmggYi9XZWJLaXQyL1BsYXRmb3JtL3F0
L01hcHBlZE1lbW9yeVBvb2wuaAppbmRleCA0YjM0MTNiLi44ZDZhZjhjIDEwMDY0NAotLS0gYS9X
ZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuaAorKysgYi9XZWJLaXQyL1BsYXRm
b3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuaApAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBNYXBw
ZWRNZW1vcnlQb29sX2gKIAogI2luY2x1ZGUgPFFGaWxlPgorI2luY2x1ZGUgPFFPYmplY3Q+CiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApA
QCAtODYsMjMgKzg3LDIwIEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IGRhdGFTaXplOwogfTsKIAot
Y2xhc3MgTWFwcGVkTWVtb3J5UG9vbCB7CitjbGFzcyBNYXBwZWRNZW1vcnlQb29sIDogUU9iamVj
dCB7CisgICAgUV9PQkpFQ1QKIHB1YmxpYzoKLSAgICBzdGF0aWMgTWFwcGVkTWVtb3J5UG9vbCog
aW5zdGFuY2UoKQotICAgIHsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChNYXBwZWRNZW1v
cnlQb29sLCBzaW5nbGV0b24sICgpKTsKLSAgICAgICAgcmV0dXJuICZzaW5nbGV0b247Ci0gICAg
fQorICAgIHN0YXRpYyBNYXBwZWRNZW1vcnlQb29sKiBpbnN0YW5jZSgpOwogCiAgICAgTWFwcGVk
TWVtb3J5KiBtYXBNZW1vcnkoc2l6ZV90IHNpemUpOwogICAgIE1hcHBlZE1lbW9yeSogbWFwRmls
ZShRU3RyaW5nIGZpbGVOYW1lLCBzaXplX3Qgc2l6ZSk7CiAKLSAgICB2b2lkIGNsZWFyKCk7Ci0K
IHByaXZhdGU6Ci0gICAgTWFwcGVkTWVtb3J5UG9vbCgpIHsgfTsKKyAgICBNYXBwZWRNZW1vcnlQ
b29sKCkgeyB9CiAgICAgfk1hcHBlZE1lbW9yeVBvb2woKTsKIAorICAgIHN0YXRpYyBNYXBwZWRN
ZW1vcnlQb29sKiB0aGVJbnN0YW5jZTsKKwogICAgIFZlY3RvcjxNYXBwZWRNZW1vcnk+IG1fcG9v
bDsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQu
Y3BwIGIvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAKaW5kZXggZTUzNDFl
Yy4uMDhmNTY5NSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlR
dC5jcHAKKysrIGIvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAKQEAgLTI5
LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgogI2luY2x1ZGUgIkFy
Z3VtZW50RW5jb2Rlci5oIgotI2luY2x1ZGUgIkNyYXNoSGFuZGxlci5oIgorI2luY2x1ZGUgIkNs
ZWFudXBIYW5kbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5j
bHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KQEAgLTk5LDEwICs5
OSw4IEBAIFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShzaXpl
X3Qgc2l6ZSkKICAgICBzaGFyZWRNZW1vcnktPm1fc2l6ZSA9IHNpemU7CiAgICAgc2hhcmVkTWVt
b3J5LT5tX2RhdGEgPSBpbXBsLT5kYXRhKCk7CiAKLSAgICBpbXBsLT5jb25uZWN0KFFDb3JlQXBw
bGljYXRpb246Omluc3RhbmNlKCksIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChkZWxldGVM
YXRlcigpKSk7Ci0KLSAgICAvLyBSZWxlYXNlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgZXZl
biBvbiBjcmFzaCEKLSAgICBDcmFzaEhhbmRsZXI6Omluc3RhbmNlKCktPm1hcmtGb3JEZWxldGlv
bk9uQ3Jhc2goaW1wbCk7CisgICAgLy8gRG8gbm90IGxlYXZlIHRoZSBzaGFyZWQgbWVtb3J5IHNl
Z21lbnQgYmVoaW5kLgorICAgIENsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT5tYXJrRm9yQ2xl
YW51cChpbXBsKTsKIAogICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOwogfQpAQCAt
MTM4LDI0ICsxMzYsMTYgQEAgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6
Y3JlYXRlKGNvbnN0IEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHAKICAgICBzaGFyZWRNZW1v
cnktPm1fc2l6ZSA9IGhhbmRsZS5tX3NpemU7CiAgICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEgPSBp
bXBsLT5kYXRhKCk7CiAKLSAgICBpbXBsLT5jb25uZWN0KFFDb3JlQXBwbGljYXRpb246Omluc3Rh
bmNlKCksIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChkZWxldGVMYXRlcigpKSk7Ci0KLSAg
ICAvLyBSZWxlYXNlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgZXZlbiBvbiBjcmFzaCEKLSAg
ICBDcmFzaEhhbmRsZXI6Omluc3RhbmNlKCktPm1hcmtGb3JEZWxldGlvbk9uQ3Jhc2goaW1wbCk7
CisgICAgLy8gRG8gbm90IGxlYXZlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgYmVoaW5kLgor
ICAgIENsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT5tYXJrRm9yQ2xlYW51cChpbXBsKTsKIAog
ICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOwogfQogCiBTaGFyZWRNZW1vcnk6On5T
aGFyZWRNZW1vcnkoKQogewotICAgIC8vIEF2b2lkIGRvdWJsZSBkZWxldGlvbiB3aGVuIGRlbGV0
ZUxhdGVyIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIHRocm91Z2ggdGhlIHNpZ25hbC1zbG90IGNv
bm5lY3Rpb24uCi0gICAgaWYgKFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCktPmRpc2Nvbm5l
Y3QobV9pbXBsKSkgewotICAgICAgICAvLyBtX2ltcGwgbXVzdCBiZSBub24tbnVsbCBhbmQgaXQg
bXVzdCBwb2ludCB0byBhIHZhbGlkIFFTaGFyZWRNZW1vcnkgb2JqZWN0LgotICAgICAgICBBU1NF
UlQocW9iamVjdF9jYXN0PFFTaGFyZWRNZW1vcnkqPihtX2ltcGwpKTsKLSAgICAgICAgZGVsZXRl
IG1faW1wbDsKLSAgICB9Ci0KLSAgICBDcmFzaEhhbmRsZXI6Omluc3RhbmNlKCktPmRpZERlbGV0
ZShtX2ltcGwpOworICAgIENsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT51bm1hcmsobV9pbXBs
KTsKKyAgICBkZWxldGUgbV9pbXBsOwogfQogCiBib29sIFNoYXJlZE1lbW9yeTo6Y3JlYXRlSGFu
ZGxlKEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCmRpZmYgLS1naXQgYS9X
ZWJLaXQyL1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuY3BwIGIvV2ViS2l0Mi9TaGFyZWQvcXQvQ2xl
YW51cEhhbmRsZXIuY3BwCnNpbWlsYXJpdHkgaW5kZXggNjclCnJlbmFtZSBmcm9tIFdlYktpdDIv
U2hhcmVkL3F0L0NyYXNoSGFuZGxlci5jcHAKcmVuYW1lIHRvIFdlYktpdDIvU2hhcmVkL3F0L0Ns
ZWFudXBIYW5kbGVyLmNwcAppbmRleCA5ZWI3ZDNkLi5iODM0MjkwIDEwMDY0NAotLS0gYS9XZWJL
aXQyL1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuY3BwCisrKyBiL1dlYktpdDIvU2hhcmVkL3F0L0Ns
ZWFudXBIYW5kbGVyLmNwcApAQCAtMjMsNDIgKzIzLDM2IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgIkNyYXNoSGFuZGxlci5oIgorI2luY2x1
ZGUgIkNsZWFudXBIYW5kbGVyLmgiCiAKICNpbmNsdWRlICJNYXBwZWRNZW1vcnlQb29sLmgiCisj
aW5jbHVkZSAiUnVuTG9vcC5oIgogI2luY2x1ZGUgPGNzaWduYWw+CiAjaW5jbHVkZSA8Y3N0ZGxp
Yj4KLSNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CisjaW5jbHVkZSA8UUFwcGxpY2F0aW9u
PgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotQ3Jhc2hIYW5kbGVyKiBDcmFzaEhhbmRsZXI6OnRo
ZUluc3RhbmNlID0gMDsKK0NsZWFudXBIYW5kbGVyKiBDbGVhbnVwSGFuZGxlcjo6dGhlSW5zdGFu
Y2UgPSAwOwogCi1DcmFzaEhhbmRsZXI6OkNyYXNoSGFuZGxlcigpCitDbGVhbnVwSGFuZGxlcjo6
Q2xlYW51cEhhbmRsZXIoKQogICAgIDogbV9pbkRlbGV0ZU9iamVjdHMoZmFsc2UpCiB7Ci0gICAg
c2lnbmFsKFNJR0FCUlQsICZDcmFzaEhhbmRsZXI6OnNpZ25hbEhhbmRsZXIpOwotICAgIHNpZ25h
bChTSUdCVVMsICZDcmFzaEhhbmRsZXI6OnNpZ25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdJ
TEwsICZDcmFzaEhhbmRsZXI6OnNpZ25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdJTlQsICZD
cmFzaEhhbmRsZXI6OnNpZ25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdGUEUsICZDcmFzaEhh
bmRsZXI6OnNpZ25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdRVUlULCAmQ3Jhc2hIYW5kbGVy
OjpzaWduYWxIYW5kbGVyKTsKLSAgICBzaWduYWwoU0lHU0VHViwgJkNyYXNoSGFuZGxlcjo6c2ln
bmFsSGFuZGxlcik7Ci0gICAgc2lnbmFsKFNJR1RSQVAsICZDcmFzaEhhbmRsZXI6OnNpZ25hbEhh
bmRsZXIpOworICAgIG1vdmVUb1RocmVhZChxQXBwKCktPnRocmVhZCgpKTsgLy8gRW5zdXJlIHRo
YXQgd2UgYXJlIGFjdGluZyBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgY29ubmVjdChxQXBwKCks
IFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChkZWxldGVPYmplY3RzKCkpLCBRdDo6RGlyZWN0
Q29ubmVjdGlvbik7CisgICAgc2lnbmFsKFNJR1RFUk0sICZDbGVhbnVwSGFuZGxlcjo6c2lnVGVy
bUhhbmRsZXIpOwogfQogCi1OT19SRVRVUk4gdm9pZCBDcmFzaEhhbmRsZXI6OnNpZ25hbEhhbmRs
ZXIoaW50KQordm9pZCBDbGVhbnVwSGFuZGxlcjo6c2lnVGVybUhhbmRsZXIoaW50KQogewotICAg
IENyYXNoSGFuZGxlcjo6dGhlSW5zdGFuY2UtPmRlbGV0ZU9iamVjdHMoKTsKLSAgICBleGl0KEVY
SVRfRkFJTFVSRSk7CisgICAgOjpSdW5Mb29wOjptYWluKCktPnN0b3AoKTsKIH0KIAotdm9pZCBD
cmFzaEhhbmRsZXI6OmRlbGV0ZU9iamVjdHMoKQordm9pZCBDbGVhbnVwSGFuZGxlcjo6ZGVsZXRl
T2JqZWN0cygpCiB7CiAgICAgbV9pbkRlbGV0ZU9iamVjdHMgPSB0cnVlOwotICAgIHFEZWxldGVB
bGwobV9vYmplY3RzKTsKLQotICAgIE1hcHBlZE1lbW9yeVBvb2w6Omluc3RhbmNlKCktPmNsZWFy
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb2JqZWN0cy5zaXplKCk7ICsraSkK
KyAgICAgICAgbV9vYmplY3RzW2ldLT5kZWxldGVMYXRlcigpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdDIvU2hhcmVkL3F0L0NyYXNoSGFuZGxlci5oIGIv
V2ViS2l0Mi9TaGFyZWQvcXQvQ2xlYW51cEhhbmRsZXIuaApzaW1pbGFyaXR5IGluZGV4IDc4JQpy
ZW5hbWUgZnJvbSBXZWJLaXQyL1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuaApyZW5hbWUgdG8gV2Vi
S2l0Mi9TaGFyZWQvcXQvQ2xlYW51cEhhbmRsZXIuaAppbmRleCA2NzJmOTVjLi5jYTk0YTVjIDEw
MDY0NAotLS0gYS9XZWJLaXQyL1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuaAorKysgYi9XZWJLaXQy
L1NoYXJlZC9xdC9DbGVhbnVwSGFuZGxlci5oCkBAIC0yMyw5ICsyMywxMCBAQAogICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgQ3Jhc2hIYW5kbGVyX2gK
LSNkZWZpbmUgQ3Jhc2hIYW5kbGVyX2gKKyNpZm5kZWYgQ2xlYW51cEhhbmRsZXJfaAorI2RlZmlu
ZSBDbGVhbnVwSGFuZGxlcl9oCiAKKyNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgogI2luY2x1
ZGUgPFFMaXN0PgogI2luY2x1ZGUgPFFPYmplY3Q+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
QEAgLTMzLDM1ICszNCwzNiBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgQ3Jhc2hI
YW5kbGVyIDogcHJpdmF0ZSBRT2JqZWN0IHsKK2NsYXNzIENsZWFudXBIYW5kbGVyIDogcHJpdmF0
ZSBRT2JqZWN0IHsKICAgICBRX09CSkVDVAogcHVibGljOgotICAgIHN0YXRpYyBDcmFzaEhhbmRs
ZXIqIGluc3RhbmNlKCkKKyAgICBzdGF0aWMgQ2xlYW51cEhhbmRsZXIqIGluc3RhbmNlKCkKICAg
ICB7CiAgICAgICAgIGlmICghdGhlSW5zdGFuY2UpCi0gICAgICAgICAgICB0aGVJbnN0YW5jZSA9
IG5ldyBDcmFzaEhhbmRsZXIoKTsKKyAgICAgICAgICAgIHRoZUluc3RhbmNlID0gbmV3IENsZWFu
dXBIYW5kbGVyKCk7CiAgICAgICAgIHJldHVybiB0aGVJbnN0YW5jZTsKICAgICB9CiAKLSAgICB2
b2lkIG1hcmtGb3JEZWxldGlvbk9uQ3Jhc2goUU9iamVjdCogb2JqZWN0KQorICAgIHZvaWQgbWFy
a0ZvckNsZWFudXAoUU9iamVjdCogb2JqZWN0KQogICAgIHsKLSAgICAgICAgdGhlSW5zdGFuY2Ut
Pm1fb2JqZWN0cy5hcHBlbmQob2JqZWN0KTsKKyAgICAgICAgbV9vYmplY3RzLmFwcGVuZChvYmpl
Y3QpOwogICAgIH0KIAotICAgIHZvaWQgZGlkRGVsZXRlKFFPYmplY3QqIG9iamVjdCkKKyAgICB2
b2lkIHVubWFyayhRT2JqZWN0KiBvYmplY3QpCiAgICAgewogICAgICAgICBpZiAobV9pbkRlbGV0
ZU9iamVjdHMpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoZUluc3RhbmNlLT5tX29i
amVjdHMucmVtb3ZlT25lKG9iamVjdCk7CisgICAgICAgIG1fb2JqZWN0cy5yZW1vdmVPbmUob2Jq
ZWN0KTsKICAgICB9CiAKLXByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgc2lnbmFsSGFuZGxlcihp
bnQpOwotICAgIHN0YXRpYyBDcmFzaEhhbmRsZXIqIHRoZUluc3RhbmNlOworcHJpdmF0ZSBzbG90
czoKKyAgICB2b2lkIGRlbGV0ZU9iamVjdHMoKTsKIAotICAgIENyYXNoSGFuZGxlcigpOworcHJp
dmF0ZToKKyAgICBzdGF0aWMgdm9pZCBzaWdUZXJtSGFuZGxlcihpbnQpOworICAgIHN0YXRpYyBD
bGVhbnVwSGFuZGxlciogdGhlSW5zdGFuY2U7CiAKLSAgICB2b2lkIGRlbGV0ZU9iamVjdHMoKTsK
KyAgICBDbGVhbnVwSGFuZGxlcigpOwogCiAgICAgUUxpc3Q8UU9iamVjdCo+IG1fb2JqZWN0czsK
ICAgICBib29sIG1faW5EZWxldGVPYmplY3RzOwpAQCAtNjksNCArNzEsNCBAQCBwcml2YXRlOgog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmIC8vIENyYXNoSGFuZGxlcl9oCisjZW5k
aWYgLy8gQ2xlYW51cEhhbmRsZXJfaApkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1
bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwIGIvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNo
ZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCmluZGV4IDY3NGQ3ZTEuLjdkZmY4OTQgMTAwNjQ0
Ci0tLSBhL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNw
cAorKysgYi9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5j
cHAKQEAgLTI3LDkgKzI3LDkgQEAKICNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKIAogI2lu
Y2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJDbGVhbnVwSGFuZGxlci5oIgogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUnVuTG9vcC5oIgotI2luY2x1ZGUgIkNy
YXNoSGFuZGxlci5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDxydW50aW1l
L0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNpbmNsdWRlIDxzdHJpbmc+CkBAIC00Miw3ICs0Miw5
IEBACiAjaW5jbHVkZSA8UURlYnVnPgogI2luY2x1ZGUgPFFGaWxlPgogI2luY2x1ZGUgPFFMb2Nh
bFNlcnZlcj4KKyNpbmNsdWRlIDxRTWV0YVR5cGU+CiAjaW5jbHVkZSA8UVByb2Nlc3M+CisjaW5j
bHVkZSA8UVN0cmluZz4KIAogI2luY2x1ZGUgPFF0Q29yZS9xZ2xvYmFsLmg+CiAKQEAgLTYwLDYg
KzYyLDkgQEAgcHVibGljOgogICAgIHZvaWQgbGF1bmNoKFdlYktpdDo6UHJvY2Vzc0xhdW5jaGVy
Kik7CiAgICAgUUxvY2FsU29ja2V0KiB0YWtlUGVuZGluZ0Nvbm5lY3Rpb24oKTsKICAgICBzdGF0
aWMgUHJvY2Vzc0xhdW5jaGVySGVscGVyKiBpbnN0YW5jZSgpOworCisgICAgY29uc3QgUVN0cmlu
ZyBzZXJ2ZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9zZXJ2ZXIuc2VydmVyTmFtZSgpOyB9CisK
IHByaXZhdGU6CiAgICAgUHJvY2Vzc0xhdW5jaGVySGVscGVyKCk7CiAgICAgUUxvY2FsU2VydmVy
IG1fc2VydmVyOwpAQCAtNzAsMTMgKzc1LDIwIEBAIHByaXZhdGU6CiAKIFFfR0xPQkFMX1NUQVRJ
QyhXVEY6Okhhc2hTZXQ8UVByb2Nlc3MqPiwgcHJvY2Vzc2VzKTsKIAotc3RhdGljIHZvaWQgY2xl
YW51cFByb2Nlc3NlcygpCitzdGF0aWMgdm9pZCBjbGVhbnVwQXRFeGl0KCkKIHsKLSAgICBXVEY6
Okhhc2hTZXQ8UVByb2Nlc3MqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwcm9jZXNzZXMoKS0+YmVn
aW4oKTsKLSAgICB3aGlsZSAoaXQgIT0gcHJvY2Vzc2VzKCktPmVuZCgpKSB7Ci0gICAgICAgICgq
aXQpLT5raWxsKCk7Ci0gICAgICAgICsraXQ7CisgICAgLy8gVGVybWluYXRlIG91ciB3ZWIgcHJv
Y2VzcyhlcykuCisgICAgV1RGOjpIYXNoU2V0PFFQcm9jZXNzKj46OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IHByb2Nlc3NlcygpLT5lbmQoKTsKKyAgICBmb3IgKFdURjo6SGFzaFNldDxRUHJvY2Vzcyo+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHByb2Nlc3NlcygpLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgUVByb2Nlc3MqIHByb2Nlc3MgPSAqaXQ7CisgICAgICAgIHByb2Nlc3Mt
PmRpc2Nvbm5lY3QocHJvY2Vzcyk7CisgICAgICAgIHByb2Nlc3MtPnRlcm1pbmF0ZSgpOworICAg
ICAgICBpZiAoIXByb2Nlc3MtPndhaXRGb3JGaW5pc2hlZCgyMDApKQorICAgICAgICAgICAgcHJv
Y2Vzcy0+a2lsbCgpOwogICAgIH0KKworICAgIC8vIERvIG5vdCBsZWF2ZSB0aGUgc29ja2V0IGZp
bGUgYmVoaW5kLgorICAgIFFMb2NhbFNlcnZlcjo6cmVtb3ZlU2VydmVyKFByb2Nlc3NMYXVuY2hl
ckhlbHBlcjo6aW5zdGFuY2UoKS0+c2VydmVyTmFtZSgpKTsKIH0KIAogY2xhc3MgUXRXZWJQcm9j
ZXNzIDogcHVibGljIFFQcm9jZXNzCkBAIC04Niw2ICs5OCwxMiBAQCBwdWJsaWM6CiAgICAgUXRX
ZWJQcm9jZXNzKFFPYmplY3QqIHBhcmVudCA9IDApCiAgICAgICAgIDogUVByb2Nlc3MocGFyZW50
KQogICAgIHsKKyAgICAgICAgc3RhdGljIGJvb2wgaXNSZWdpc3RlcmVkID0gZmFsc2U7CisgICAg
ICAgIGlmICghaXNSZWdpc3RlcmVkKSB7CisgICAgICAgICAgICBxUmVnaXN0ZXJNZXRhVHlwZTxR
UHJvY2Vzczo6UHJvY2Vzc1N0YXRlPigiUVByb2Nlc3M6OlByb2Nlc3NTdGF0ZSIpOworICAgICAg
ICAgICAgaXNSZWdpc3RlcmVkID0gdHJ1ZTsKKyAgICAgICAgfQorCiAgICAgICAgIGNvbm5lY3Qo
dGhpcywgU0lHTkFMKHN0YXRlQ2hhbmdlZChRUHJvY2Vzczo6UHJvY2Vzc1N0YXRlKSksIHRoaXMs
IFNMT1QocHJvY2Vzc1N0YXRlQ2hhbmdlZChRUHJvY2Vzczo6UHJvY2Vzc1N0YXRlKSkpOwogICAg
IH0KIApAQCAtMTQxLDcgKzE1OSw2IEBAIFFMb2NhbFNvY2tldCogUHJvY2Vzc0xhdW5jaGVySGVs
cGVyOjp0YWtlUGVuZGluZ0Nvbm5lY3Rpb24oKQogUHJvY2Vzc0xhdW5jaGVySGVscGVyOjp+UHJv
Y2Vzc0xhdW5jaGVySGVscGVyKCkKIHsKICAgICBtX3NlcnZlci5jbG9zZSgpOwotICAgIENyYXNo
SGFuZGxlcjo6aW5zdGFuY2UoKS0+ZGlkRGVsZXRlKHRoaXMpOwogfQogCiBQcm9jZXNzTGF1bmNo
ZXJIZWxwZXI6OlByb2Nlc3NMYXVuY2hlckhlbHBlcigpCkBAIC0xNTIsMTAgKzE2OSw2IEBAIFBy
b2Nlc3NMYXVuY2hlckhlbHBlcjo6UHJvY2Vzc0xhdW5jaGVySGVscGVyKCkKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIGNvbm5lY3QoJm1fc2VydmVyLCBTSUdOQUwo
bmV3Q29ubmVjdGlvbigpKSwgdGhpcywgU0xPVChuZXdDb25uZWN0aW9uKCkpKTsKLSAgICBjb25u
ZWN0KFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCksIFNJR05BTChhYm91dFRvUXVpdCgpKSwg
U0xPVChkZWxldGVMYXRlcigpKSwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOwotCi0gICAgLy8gRG8g
bm90IGxlYXZlIHNvY2tldCBmaWxlcyBvbiB0aGUgZGlzayBldmVuIG9uIGNyYXNoIQotICAgIENy
YXNoSGFuZGxlcjo6aW5zdGFuY2UoKS0+bWFya0ZvckRlbGV0aW9uT25DcmFzaCh0aGlzKTsKIH0K
IAogUHJvY2Vzc0xhdW5jaGVySGVscGVyKiBQcm9jZXNzTGF1bmNoZXJIZWxwZXI6Omluc3RhbmNl
KCkKQEAgLTE2Nyw3ICsxODAsNyBAQCBQcm9jZXNzTGF1bmNoZXJIZWxwZXIqIFByb2Nlc3NMYXVu
Y2hlckhlbHBlcjo6aW5zdGFuY2UoKQogICAgICAgICAvLyBUaGUgcHVycG9zZSBvZiB0aGUgZm9s
bG93aW5nIGxpbmUgaXMgdG8gZW5zdXJlIHRoYXQgb3VyIHN0YXRpYyBpcyBpbml0aWFsaXplZCBi
ZWZvcmUgdGhlIGV4aXQgaGFuZGxlciBpcyBpbnN0YWxsZWQuCiAgICAgICAgIHByb2Nlc3Nlcygp
LT5jbGVhcigpOwogCi0gICAgICAgIGF0ZXhpdChjbGVhbnVwUHJvY2Vzc2VzKTsKKyAgICAgICAg
YXRleGl0KGNsZWFudXBBdEV4aXQpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAt
MTkyLDcgKzIwNSw3IEBAIHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVQcm9jZXNzKCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgUU9iamVjdDo6Y29ubmVjdChtX3Byb2Nlc3NJZGVudGlm
aWVyLCBTSUdOQUwoZmluaXNoZWQoaW50KSksIG1fcHJvY2Vzc0lkZW50aWZpZXIsIFNMT1QoZGVs
ZXRlTGF0ZXIoKSksIFF0OjpRdWV1ZWRDb25uZWN0aW9uKTsKLSAgICBtX3Byb2Nlc3NJZGVudGlm
aWVyLT5raWxsKCk7CisgICAgbV9wcm9jZXNzSWRlbnRpZmllci0+dGVybWluYXRlKCk7CiB9CiAK
IFFMb2NhbFNvY2tldCogUHJvY2Vzc0xhdW5jaGVyOjp0YWtlUGVuZGluZ0Nvbm5lY3Rpb24oKQpk
aWZmIC0tZ2l0IGEvV2ViS2l0Mi9XZWJLaXQyLnBybyBiL1dlYktpdDIvV2ViS2l0Mi5wcm8KaW5k
ZXggNjQ5MzhkNy4uMjYxZWNlNyAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9XZWJLaXQyLnBybworKysg
Yi9XZWJLaXQyL1dlYktpdDIucHJvCkBAIC0yNzcsNyArMjc3LDcgQEAgSEVBREVSUyArPSBcCiAg
ICAgU2hhcmVkL1dlYlVSTFJlc3BvbnNlLmggXAogICAgIFNoYXJlZC9XZWJVc2VyQ29udGVudFVS
TFBhdHRlcm4uaCBcCiAgICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5N
b2R1bGUuaCBcCi0gICAgU2hhcmVkL3F0L0NyYXNoSGFuZGxlci5oIFwKKyAgICBTaGFyZWQvcXQv
Q2xlYW51cEhhbmRsZXIuaCBcCiAgICAgU2hhcmVkL3F0L1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZv
LmggXAogICAgIFNoYXJlZC9xdC9VcGRhdGVDaHVuay5oIFwKICAgICBTaGFyZWQvcXQvV2ViRXZl
bnRGYWN0b3J5UXQuaCBcCkBAIC00ODcsNyArNDg3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgU2hh
cmVkL1dlYlVSTFJlc3BvbnNlLmNwcCBcCiAgICAgU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwIFwK
ICAgICBTaGFyZWQvcXQvQmFja2luZ1N0b3JlUXQuY3BwIFwKLSAgICBTaGFyZWQvcXQvQ3Jhc2hI
YW5kbGVyLmNwcCBcCisgICAgU2hhcmVkL3F0L0NsZWFudXBIYW5kbGVyLmNwcCBcCiAgICAgU2hh
cmVkL3F0L05hdGl2ZVdlYktleWJvYXJkRXZlbnRRdC5jcHAgXAogICAgIFNoYXJlZC9xdC9VcGRh
dGVDaHVuay5jcHAgXAogICAgIFNoYXJlZC9xdC9XZWJDb3JlQXJndW1lbnRDb2RlcnNRdC5jcHAg
XAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77879</attachid>
            <date>2011-01-04 05:08:18 -0800</date>
            <delta_ts>2011-01-04 06:01:57 -0800</delta_ts>
            <desc>patch v5 build-fixed</desc>
            <filename>ch_final.diff</filename>
            <type>text/plain</type>
            <size>16186</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
NjkwM2UwMC4uMDQxZGRmZSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMS0wMS0wMyAgQmFsYXpzIEtlbGVt
ZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW1F0XVtXSzJdIEluY29tcGxldGUgY2xlYW4gdXAgb24gdGVybWlu
YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUx
NDc0CisKKyAgICAgICAgRG8gbm90IGtpbGwgdGhlIHdlYiBwcm9jZXNzIHRvIGZvcmNlIGl0J3Mg
dGVybWluYXRpb24uCisgICAgICAgIEZpeCBvYmplY3QgZGVzdHJ1Y3Rpb24gYW5kIGNsZWFudXAg
bG9naWMgYW5kIG1ha2UgdGhlIGNsZWFudXAgbW9yZSByZWxpYWJsZS4KKyAgICAgICAgRG8gbm90
IHRyeSB0byBjbGVhbnVwIG9uIGNyYXNoIGJlY2F1c2UgaXQgaXMgbm90IHJlbGlhYmxlLgorCisg
ICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3BwOgorICAgICAgICAo
Q29yZUlQQzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKTogRG8gbm90IGRlbGV0ZSB0
aGUgc29ja2V0IGlmIHdlCisgICAgICAgIGRvIG5vdCBvd24gaXQuIFRoaXMgaXMgdGhlIGNhc2Ug
d2l0aCBhIHNlcnZlciBjb25uZWN0aW9uLgorICAgICAgICAqIFBsYXRmb3JtL3F0L01hcHBlZE1l
bW9yeVBvb2wuY3BwOgorICAgICAgICBUdXJuIE1hcHBlZE1lbW9yeVBvb2wgaW50byBhIFFPYmpl
Y3Qgc28gdGhlIENsZWFudXBIYW5kbGVyIGNhbiBkZXN0cnVjdCBpdAorICAgICAgICBpbiB0aGUg
c2FtZSB3YXkgYXMgdGhlIG90aGVyIG9iamVjdHMuCisgICAgICAgIChXZWJLaXQ6Ok1hcHBlZE1l
bW9yeVBvb2w6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5UG9vbDo6
fk1hcHBlZE1lbW9yeVBvb2wpOgorICAgICAgICAqIFBsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBv
b2wuaDoKKyAgICAgICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5UG9vbDo6TWFwcGVkTWVtb3J5UG9v
bCk6CisgICAgICAgICogUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwOgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZSk6IE5vIG5lZWQgdG8gY2FyZSBhYm91dCBRQ29y
ZUFwcGxpY2F0aW9uOjphYm91dFRvUXVpdC4KKyAgICAgICAgSXQgaXMgaGFuZGxlZCBieSB0aGUg
Q2xlYW51cEhhbmRsZXIuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6flNoYXJlZE1l
bW9yeSk6IERpdHRvLgorICAgICAgICAqIFNoYXJlZC9xdC9DbGVhbnVwSGFuZGxlci5jcHA6IFJl
bmFtZWQgZnJvbSBXZWJLaXQyL1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuY3BwLgorICAgICAgICBO
byBsb25nZXIgdHJ5IHRvIGhhbmRsZSBjcmFzaCBidXQganVzdCBub3JtYWwgdGVybWluYXRpb24u
CisgICAgICAgIChXZWJLaXQ6OkNsZWFudXBIYW5kbGVyOjpDbGVhbnVwSGFuZGxlcik6IENvbm5l
Y3QgZGVsZXRlT2JqZWN0cyB3aXRoIFFDb3JlQXBwbGljYXRpb246OmFib3V0VG9RdWl0LgorICAg
ICAgICBFbnN1cmUgYXBwcm9wcmlhdGUgdGhyZWFkIGFmZmluaXR5LgorICAgICAgICAoV2ViS2l0
OjpDbGVhbnVwSGFuZGxlcjo6c2lnVGVybUhhbmRsZXIpOiBTdG9wIHRoZSBtYWluIGV2ZW50IGxv
b3AuCisgICAgICAgIChXZWJLaXQ6OkNsZWFudXBIYW5kbGVyOjpkZWxldGVPYmplY3RzKTogVXNl
IGRlbGV0ZUxhdGVyIGluc3RlYWQgb2YgZGVsZXRlIHNpbmNlIGl0IGlzIG1vcmUgcmVsaWFibGUu
CisgICAgICAgICogU2hhcmVkL3F0L0NsZWFudXBIYW5kbGVyLmg6IFJlbmFtZWQgZnJvbSBXZWJL
aXQyL1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuaC4KKyAgICAgICAgKFdlYktpdDo6Q2xlYW51cEhh
bmRsZXI6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYktpdDo6Q2xlYW51cEhhbmRsZXI6Om1hcmtG
b3JDbGVhbnVwKToKKyAgICAgICAgKFdlYktpdDo6Q2xlYW51cEhhbmRsZXI6OnVubWFyayk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcDoKKyAg
ICAgICAgRG8gbm90IGtpbGwgdGhlIHdlYiBwcm9jZXNzIGltbWlkaWF0ZWx5IGJ1dCBnaXZlIGl0
IGEgY2hhbmNlIHRvIGNsZWFudXAuCisgICAgICAgIFVzZSBRTG9jYWxTZXJ2ZXI6OnJlbW92ZVNl
cnZlciBmb3IgYXNzdXJpbmcgdGhhdCB0aGUgc29ja2V0IGZpbGUgd2lsbCBiZSByZW1vdmVkLgor
ICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXJIZWxwZXI6OnNlcnZlck5hbWUpOgorICAg
ICAgICAoV2ViS2l0OjpjbGVhbnVwQXRFeGl0KTogUmVuYW1lZCBmcm9tIGNsZWFudXBQcm9jZXNz
ZXMuIE9ubHkga2lsbCB0aGUgd2ViIHByb2Nlc3Mgd2hlbiBpdCB0aW1lcworICAgICAgICBvdXQg
dGVybWluYXRpbmcuIEZpeGVkIHRoZSBidWcgb2YgY2hhbmdpbmcgdGhlIGxpc3Qgd2hpbGUgaXRl
cmF0aW5nIGl0IG92ZXIgYnkgZGlzY29ubmVjdGluZworICAgICAgICBmcm9tIHRoZSBwcm9jZXNz
U3RhdGVDaGFuZ2VkIHNsb3QuCisgICAgICAgIChXZWJLaXQ6OlF0V2ViUHJvY2Vzczo6UXRXZWJQ
cm9jZXNzKTogQWRkZWQgbWlzc2luZyBtZXRhIHR5cGUgcmVnaXN0cmF0aW9uIG9mIFFQcm9jZXNz
OjpQcm9jZXNzU3RhdGUuCisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlckhlbHBlcjo6
flByb2Nlc3NMYXVuY2hlckhlbHBlcik6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hl
ckhlbHBlcjo6UHJvY2Vzc0xhdW5jaGVySGVscGVyKTogTm8gbmVlZCB0byBhZGQgdGhlIHRoZSBp
bnN0YW5jZSB0byB0aGUKKyAgICAgICAgQ2xlYW51cEhhbmRsZXIgYmVjYXVzZSB3ZSB3aWxsIHJl
bW92ZSB0aGUgc29ja2V0IGZpbGUgaW4gY2xlYW51cEF0RXhpdC4KKyAgICAgICAgKFdlYktpdDo6
UHJvY2Vzc0xhdW5jaGVySGVscGVyOjppbnN0YW5jZSk6CisgICAgICAgIChXZWJLaXQ6OlByb2Nl
c3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2Vzcyk6CisgICAgICAgICogV2ViS2l0Mi5wcm86CisK
IDIwMTAtMTItMjAgIEJhbGF6cyBLZWxlbWVuICA8a2JhbGF6c0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25RdC5jcHAgYi9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvcXQvQ29ubmVjdGlvblF0LmNwcAppbmRleCBlM2Q5NjVjLi5jMDczNmI4IDEwMDY0NAotLS0g
YS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0LmNwcAorKysgYi9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0LmNwcApAQCAtNTAsNyArNTAsOSBA
QCB2b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyIGlkZW50aWZp
ZXIpCiAKIHZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKIHsKLSAgICBkZWxl
dGUgbV9zb2NrZXQ7CisgICAgbV9zb2NrZXQtPmRpc2Nvbm5lY3QoKTsKKyAgICBpZiAoIW1faXNT
ZXJ2ZXIpCisgICAgICAgIG1fc29ja2V0LT5kZWxldGVMYXRlcigpOwogICAgIG1fc29ja2V0ID0g
MDsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29s
LmNwcCBiL1dlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHAKaW5kZXggNjIy
ZjkzYS4uZDM2ZDgyYiAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1v
cnlQb29sLmNwcAorKysgYi9XZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuY3Bw
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJNYXBwZWRNZW1vcnlQb29sLmgiCiAKKyNp
bmNsdWRlICJDbGVhbnVwSGFuZGxlci5oIgogI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgogI2lu
Y2x1ZGUgPFFEaXI+CiAjaW5jbHVkZSA8UUlPRGV2aWNlPgpAQCAtMzQsMTMgKzM1LDI0IEBACiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1NYXBwZWRNZW1vcnlQb29sOjp+TWFwcGVkTWVtb3J5UG9v
bCgpCitNYXBwZWRNZW1vcnlQb29sKiBNYXBwZWRNZW1vcnlQb29sOjp0aGVJbnN0YW5jZSA9IDA7
CisKK01hcHBlZE1lbW9yeVBvb2wqIE1hcHBlZE1lbW9yeVBvb2w6Omluc3RhbmNlKCkKIHsKLSAg
ICBjbGVhcigpOworICAgIGlmICghdGhlSW5zdGFuY2UpIHsKKyAgICAgICAgdGhlSW5zdGFuY2Ug
PSBuZXcgTWFwcGVkTWVtb3J5UG9vbDsKKworICAgICAgICAvLyBEbyBub3QgbGVhdmUgbWFwcGlu
ZyBmaWxlcyBvbiB0aGUgZGlzay4KKyAgICAgICAgQ2xlYW51cEhhbmRsZXI6Omluc3RhbmNlKCkt
Pm1hcmtGb3JDbGVhbnVwKHRoZUluc3RhbmNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gdGhlSW5z
dGFuY2U7CiB9CiAKLXZvaWQgTWFwcGVkTWVtb3J5UG9vbDo6Y2xlYXIoKQorTWFwcGVkTWVtb3J5
UG9vbDo6fk1hcHBlZE1lbW9yeVBvb2woKQogeworICAgIENsZWFudXBIYW5kbGVyOjppbnN0YW5j
ZSgpLT51bm1hcmsodGhlSW5zdGFuY2UpOworCiAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8
IG1fcG9vbC5zaXplKCk7ICsrbikgewogICAgICAgICBNYXBwZWRNZW1vcnkmIGN1cnJlbnQgPSBt
X3Bvb2wuYXQobik7CiAgICAgICAgIGlmICghY3VycmVudC5maWxlKQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmggYi9XZWJLaXQyL1BsYXRmb3JtL3F0
L01hcHBlZE1lbW9yeVBvb2wuaAppbmRleCA0YjM0MTNiLi44ZDZhZjhjIDEwMDY0NAotLS0gYS9X
ZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuaAorKysgYi9XZWJLaXQyL1BsYXRm
b3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuaApAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBNYXBw
ZWRNZW1vcnlQb29sX2gKIAogI2luY2x1ZGUgPFFGaWxlPgorI2luY2x1ZGUgPFFPYmplY3Q+CiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApA
QCAtODYsMjMgKzg3LDIwIEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IGRhdGFTaXplOwogfTsKIAot
Y2xhc3MgTWFwcGVkTWVtb3J5UG9vbCB7CitjbGFzcyBNYXBwZWRNZW1vcnlQb29sIDogUU9iamVj
dCB7CisgICAgUV9PQkpFQ1QKIHB1YmxpYzoKLSAgICBzdGF0aWMgTWFwcGVkTWVtb3J5UG9vbCog
aW5zdGFuY2UoKQotICAgIHsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChNYXBwZWRNZW1v
cnlQb29sLCBzaW5nbGV0b24sICgpKTsKLSAgICAgICAgcmV0dXJuICZzaW5nbGV0b247Ci0gICAg
fQorICAgIHN0YXRpYyBNYXBwZWRNZW1vcnlQb29sKiBpbnN0YW5jZSgpOwogCiAgICAgTWFwcGVk
TWVtb3J5KiBtYXBNZW1vcnkoc2l6ZV90IHNpemUpOwogICAgIE1hcHBlZE1lbW9yeSogbWFwRmls
ZShRU3RyaW5nIGZpbGVOYW1lLCBzaXplX3Qgc2l6ZSk7CiAKLSAgICB2b2lkIGNsZWFyKCk7Ci0K
IHByaXZhdGU6Ci0gICAgTWFwcGVkTWVtb3J5UG9vbCgpIHsgfTsKKyAgICBNYXBwZWRNZW1vcnlQ
b29sKCkgeyB9CiAgICAgfk1hcHBlZE1lbW9yeVBvb2woKTsKIAorICAgIHN0YXRpYyBNYXBwZWRN
ZW1vcnlQb29sKiB0aGVJbnN0YW5jZTsKKwogICAgIFZlY3RvcjxNYXBwZWRNZW1vcnk+IG1fcG9v
bDsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQu
Y3BwIGIvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAKaW5kZXggZTUzNDFl
Yy4uMDhmNTY5NSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlR
dC5jcHAKKysrIGIvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAKQEAgLTI5
LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgogI2luY2x1ZGUgIkFy
Z3VtZW50RW5jb2Rlci5oIgotI2luY2x1ZGUgIkNyYXNoSGFuZGxlci5oIgorI2luY2x1ZGUgIkNs
ZWFudXBIYW5kbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5j
bHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KQEAgLTk5LDEwICs5
OSw4IEBAIFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShzaXpl
X3Qgc2l6ZSkKICAgICBzaGFyZWRNZW1vcnktPm1fc2l6ZSA9IHNpemU7CiAgICAgc2hhcmVkTWVt
b3J5LT5tX2RhdGEgPSBpbXBsLT5kYXRhKCk7CiAKLSAgICBpbXBsLT5jb25uZWN0KFFDb3JlQXBw
bGljYXRpb246Omluc3RhbmNlKCksIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChkZWxldGVM
YXRlcigpKSk7Ci0KLSAgICAvLyBSZWxlYXNlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgZXZl
biBvbiBjcmFzaCEKLSAgICBDcmFzaEhhbmRsZXI6Omluc3RhbmNlKCktPm1hcmtGb3JEZWxldGlv
bk9uQ3Jhc2goaW1wbCk7CisgICAgLy8gRG8gbm90IGxlYXZlIHRoZSBzaGFyZWQgbWVtb3J5IHNl
Z21lbnQgYmVoaW5kLgorICAgIENsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT5tYXJrRm9yQ2xl
YW51cChpbXBsKTsKIAogICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOwogfQpAQCAt
MTM4LDI0ICsxMzYsMTYgQEAgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6
Y3JlYXRlKGNvbnN0IEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHAKICAgICBzaGFyZWRNZW1v
cnktPm1fc2l6ZSA9IGhhbmRsZS5tX3NpemU7CiAgICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEgPSBp
bXBsLT5kYXRhKCk7CiAKLSAgICBpbXBsLT5jb25uZWN0KFFDb3JlQXBwbGljYXRpb246Omluc3Rh
bmNlKCksIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChkZWxldGVMYXRlcigpKSk7Ci0KLSAg
ICAvLyBSZWxlYXNlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgZXZlbiBvbiBjcmFzaCEKLSAg
ICBDcmFzaEhhbmRsZXI6Omluc3RhbmNlKCktPm1hcmtGb3JEZWxldGlvbk9uQ3Jhc2goaW1wbCk7
CisgICAgLy8gRG8gbm90IGxlYXZlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgYmVoaW5kLgor
ICAgIENsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT5tYXJrRm9yQ2xlYW51cChpbXBsKTsKIAog
ICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOwogfQogCiBTaGFyZWRNZW1vcnk6On5T
aGFyZWRNZW1vcnkoKQogewotICAgIC8vIEF2b2lkIGRvdWJsZSBkZWxldGlvbiB3aGVuIGRlbGV0
ZUxhdGVyIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIHRocm91Z2ggdGhlIHNpZ25hbC1zbG90IGNv
bm5lY3Rpb24uCi0gICAgaWYgKFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCktPmRpc2Nvbm5l
Y3QobV9pbXBsKSkgewotICAgICAgICAvLyBtX2ltcGwgbXVzdCBiZSBub24tbnVsbCBhbmQgaXQg
bXVzdCBwb2ludCB0byBhIHZhbGlkIFFTaGFyZWRNZW1vcnkgb2JqZWN0LgotICAgICAgICBBU1NF
UlQocW9iamVjdF9jYXN0PFFTaGFyZWRNZW1vcnkqPihtX2ltcGwpKTsKLSAgICAgICAgZGVsZXRl
IG1faW1wbDsKLSAgICB9Ci0KLSAgICBDcmFzaEhhbmRsZXI6Omluc3RhbmNlKCktPmRpZERlbGV0
ZShtX2ltcGwpOworICAgIENsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT51bm1hcmsobV9pbXBs
KTsKKyAgICBkZWxldGUgbV9pbXBsOwogfQogCiBib29sIFNoYXJlZE1lbW9yeTo6Y3JlYXRlSGFu
ZGxlKEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCmRpZmYgLS1naXQgYS9X
ZWJLaXQyL1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuY3BwIGIvV2ViS2l0Mi9TaGFyZWQvcXQvQ2xl
YW51cEhhbmRsZXIuY3BwCnNpbWlsYXJpdHkgaW5kZXggNjclCnJlbmFtZSBmcm9tIFdlYktpdDIv
U2hhcmVkL3F0L0NyYXNoSGFuZGxlci5jcHAKcmVuYW1lIHRvIFdlYktpdDIvU2hhcmVkL3F0L0Ns
ZWFudXBIYW5kbGVyLmNwcAppbmRleCA5ZWI3ZDNkLi5jMDMzY2JhIDEwMDY0NAotLS0gYS9XZWJL
aXQyL1NoYXJlZC9xdC9DcmFzaEhhbmRsZXIuY3BwCisrKyBiL1dlYktpdDIvU2hhcmVkL3F0L0Ns
ZWFudXBIYW5kbGVyLmNwcApAQCAtMjMsNDIgKzIzLDM2IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgIkNyYXNoSGFuZGxlci5oIgorI2luY2x1
ZGUgIkNsZWFudXBIYW5kbGVyLmgiCiAKICNpbmNsdWRlICJNYXBwZWRNZW1vcnlQb29sLmgiCisj
aW5jbHVkZSAiUnVuTG9vcC5oIgogI2luY2x1ZGUgPGNzaWduYWw+CiAjaW5jbHVkZSA8Y3N0ZGxp
Yj4KLSNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CisjaW5jbHVkZSA8UUFwcGxpY2F0aW9u
PgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotQ3Jhc2hIYW5kbGVyKiBDcmFzaEhhbmRsZXI6OnRo
ZUluc3RhbmNlID0gMDsKK0NsZWFudXBIYW5kbGVyKiBDbGVhbnVwSGFuZGxlcjo6dGhlSW5zdGFu
Y2UgPSAwOwogCi1DcmFzaEhhbmRsZXI6OkNyYXNoSGFuZGxlcigpCitDbGVhbnVwSGFuZGxlcjo6
Q2xlYW51cEhhbmRsZXIoKQogICAgIDogbV9pbkRlbGV0ZU9iamVjdHMoZmFsc2UpCiB7Ci0gICAg
c2lnbmFsKFNJR0FCUlQsICZDcmFzaEhhbmRsZXI6OnNpZ25hbEhhbmRsZXIpOwotICAgIHNpZ25h
bChTSUdCVVMsICZDcmFzaEhhbmRsZXI6OnNpZ25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdJ
TEwsICZDcmFzaEhhbmRsZXI6OnNpZ25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdJTlQsICZD
cmFzaEhhbmRsZXI6OnNpZ25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdGUEUsICZDcmFzaEhh
bmRsZXI6OnNpZ25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdRVUlULCAmQ3Jhc2hIYW5kbGVy
OjpzaWduYWxIYW5kbGVyKTsKLSAgICBzaWduYWwoU0lHU0VHViwgJkNyYXNoSGFuZGxlcjo6c2ln
bmFsSGFuZGxlcik7Ci0gICAgc2lnbmFsKFNJR1RSQVAsICZDcmFzaEhhbmRsZXI6OnNpZ25hbEhh
bmRsZXIpOworICAgIG1vdmVUb1RocmVhZChxQXBwLT50aHJlYWQoKSk7IC8vIEVuc3VyZSB0aGF0
IHdlIGFyZSBhY3Rpbmcgb24gdGhlIG1haW4gdGhyZWFkLgorICAgIGNvbm5lY3QocUFwcCwgU0lH
TkFMKGFib3V0VG9RdWl0KCkpLCBTTE9UKGRlbGV0ZU9iamVjdHMoKSksIFF0OjpEaXJlY3RDb25u
ZWN0aW9uKTsKKyAgICBzaWduYWwoU0lHVEVSTSwgJkNsZWFudXBIYW5kbGVyOjpzaWdUZXJtSGFu
ZGxlcik7CiB9CiAKLU5PX1JFVFVSTiB2b2lkIENyYXNoSGFuZGxlcjo6c2lnbmFsSGFuZGxlcihp
bnQpCit2b2lkIENsZWFudXBIYW5kbGVyOjpzaWdUZXJtSGFuZGxlcihpbnQpCiB7Ci0gICAgQ3Jh
c2hIYW5kbGVyOjp0aGVJbnN0YW5jZS0+ZGVsZXRlT2JqZWN0cygpOwotICAgIGV4aXQoRVhJVF9G
QUlMVVJFKTsKKyAgICA6OlJ1bkxvb3A6Om1haW4oKS0+c3RvcCgpOwogfQogCi12b2lkIENyYXNo
SGFuZGxlcjo6ZGVsZXRlT2JqZWN0cygpCit2b2lkIENsZWFudXBIYW5kbGVyOjpkZWxldGVPYmpl
Y3RzKCkKIHsKICAgICBtX2luRGVsZXRlT2JqZWN0cyA9IHRydWU7Ci0gICAgcURlbGV0ZUFsbCht
X29iamVjdHMpOwotCi0gICAgTWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2UoKS0+Y2xlYXIoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vYmplY3RzLnNpemUoKTsgKytpKQorICAg
ICAgICBtX29iamVjdHNbaV0tPmRlbGV0ZUxhdGVyKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9TaGFyZWQvcXQvQ3Jhc2hIYW5kbGVyLmggYi9XZWJL
aXQyL1NoYXJlZC9xdC9DbGVhbnVwSGFuZGxlci5oCnNpbWlsYXJpdHkgaW5kZXggNzglCnJlbmFt
ZSBmcm9tIFdlYktpdDIvU2hhcmVkL3F0L0NyYXNoSGFuZGxlci5oCnJlbmFtZSB0byBXZWJLaXQy
L1NoYXJlZC9xdC9DbGVhbnVwSGFuZGxlci5oCmluZGV4IDY3MmY5NWMuLmNhOTRhNWMgMTAwNjQ0
Ci0tLSBhL1dlYktpdDIvU2hhcmVkL3F0L0NyYXNoSGFuZGxlci5oCisrKyBiL1dlYktpdDIvU2hh
cmVkL3F0L0NsZWFudXBIYW5kbGVyLmgKQEAgLTIzLDkgKzIzLDEwIEBACiAgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBDcmFzaEhhbmRsZXJfaAotI2Rl
ZmluZSBDcmFzaEhhbmRsZXJfaAorI2lmbmRlZiBDbGVhbnVwSGFuZGxlcl9oCisjZGVmaW5lIENs
ZWFudXBIYW5kbGVyX2gKIAorI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8
UUxpc3Q+CiAjaW5jbHVkZSA8UU9iamVjdD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAt
MzMsMzUgKzM0LDM2IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBDcmFzaEhhbmRs
ZXIgOiBwcml2YXRlIFFPYmplY3QgeworY2xhc3MgQ2xlYW51cEhhbmRsZXIgOiBwcml2YXRlIFFP
YmplY3QgewogICAgIFFfT0JKRUNUCiBwdWJsaWM6Ci0gICAgc3RhdGljIENyYXNoSGFuZGxlciog
aW5zdGFuY2UoKQorICAgIHN0YXRpYyBDbGVhbnVwSGFuZGxlciogaW5zdGFuY2UoKQogICAgIHsK
ICAgICAgICAgaWYgKCF0aGVJbnN0YW5jZSkKLSAgICAgICAgICAgIHRoZUluc3RhbmNlID0gbmV3
IENyYXNoSGFuZGxlcigpOworICAgICAgICAgICAgdGhlSW5zdGFuY2UgPSBuZXcgQ2xlYW51cEhh
bmRsZXIoKTsKICAgICAgICAgcmV0dXJuIHRoZUluc3RhbmNlOwogICAgIH0KIAotICAgIHZvaWQg
bWFya0ZvckRlbGV0aW9uT25DcmFzaChRT2JqZWN0KiBvYmplY3QpCisgICAgdm9pZCBtYXJrRm9y
Q2xlYW51cChRT2JqZWN0KiBvYmplY3QpCiAgICAgewotICAgICAgICB0aGVJbnN0YW5jZS0+bV9v
YmplY3RzLmFwcGVuZChvYmplY3QpOworICAgICAgICBtX29iamVjdHMuYXBwZW5kKG9iamVjdCk7
CiAgICAgfQogCi0gICAgdm9pZCBkaWREZWxldGUoUU9iamVjdCogb2JqZWN0KQorICAgIHZvaWQg
dW5tYXJrKFFPYmplY3QqIG9iamVjdCkKICAgICB7CiAgICAgICAgIGlmIChtX2luRGVsZXRlT2Jq
ZWN0cykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhlSW5zdGFuY2UtPm1fb2JqZWN0
cy5yZW1vdmVPbmUob2JqZWN0KTsKKyAgICAgICAgbV9vYmplY3RzLnJlbW92ZU9uZShvYmplY3Qp
OwogICAgIH0KIAotcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBzaWduYWxIYW5kbGVyKGludCk7
Ci0gICAgc3RhdGljIENyYXNoSGFuZGxlciogdGhlSW5zdGFuY2U7Citwcml2YXRlIHNsb3RzOgor
ICAgIHZvaWQgZGVsZXRlT2JqZWN0cygpOwogCi0gICAgQ3Jhc2hIYW5kbGVyKCk7Citwcml2YXRl
OgorICAgIHN0YXRpYyB2b2lkIHNpZ1Rlcm1IYW5kbGVyKGludCk7CisgICAgc3RhdGljIENsZWFu
dXBIYW5kbGVyKiB0aGVJbnN0YW5jZTsKIAotICAgIHZvaWQgZGVsZXRlT2JqZWN0cygpOworICAg
IENsZWFudXBIYW5kbGVyKCk7CiAKICAgICBRTGlzdDxRT2JqZWN0Kj4gbV9vYmplY3RzOwogICAg
IGJvb2wgbV9pbkRlbGV0ZU9iamVjdHM7CkBAIC02OSw0ICs3MSw0IEBAIHByaXZhdGU6CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLy8gQ3Jhc2hIYW5kbGVyX2gKKyNlbmRpZiAv
LyBDbGVhbnVwSGFuZGxlcl9oCmRpZmYgLS1naXQgYS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hl
ci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAgYi9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9x
dC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAKaW5kZXggNjc0ZDdlMS4uN2RmZjg5NCAxMDA2NDQKLS0t
IGEvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCisr
KyBiL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcApA
QCAtMjcsOSArMjcsOSBAQAogI2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hlci5oIgogCiAjaW5jbHVk
ZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIkNsZWFudXBIYW5kbGVyLmgiCiAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJSdW5Mb29wLmgiCi0jaW5jbHVkZSAiQ3Jhc2hI
YW5kbGVyLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSW5p
dGlhbGl6ZVRocmVhZGluZy5oPgogI2luY2x1ZGUgPHN0cmluZz4KQEAgLTQyLDcgKzQyLDkgQEAK
ICNpbmNsdWRlIDxRRGVidWc+CiAjaW5jbHVkZSA8UUZpbGU+CiAjaW5jbHVkZSA8UUxvY2FsU2Vy
dmVyPgorI2luY2x1ZGUgPFFNZXRhVHlwZT4KICNpbmNsdWRlIDxRUHJvY2Vzcz4KKyNpbmNsdWRl
IDxRU3RyaW5nPgogCiAjaW5jbHVkZSA8UXRDb3JlL3FnbG9iYWwuaD4KIApAQCAtNjAsNiArNjIs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBsYXVuY2goV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXIqKTsK
ICAgICBRTG9jYWxTb2NrZXQqIHRha2VQZW5kaW5nQ29ubmVjdGlvbigpOwogICAgIHN0YXRpYyBQ
cm9jZXNzTGF1bmNoZXJIZWxwZXIqIGluc3RhbmNlKCk7CisKKyAgICBjb25zdCBRU3RyaW5nIHNl
cnZlck5hbWUoKSBjb25zdCB7IHJldHVybiBtX3NlcnZlci5zZXJ2ZXJOYW1lKCk7IH0KKwogcHJp
dmF0ZToKICAgICBQcm9jZXNzTGF1bmNoZXJIZWxwZXIoKTsKICAgICBRTG9jYWxTZXJ2ZXIgbV9z
ZXJ2ZXI7CkBAIC03MCwxMyArNzUsMjAgQEAgcHJpdmF0ZToKIAogUV9HTE9CQUxfU1RBVElDKFdU
Rjo6SGFzaFNldDxRUHJvY2Vzcyo+LCBwcm9jZXNzZXMpOwogCi1zdGF0aWMgdm9pZCBjbGVhbnVw
UHJvY2Vzc2VzKCkKK3N0YXRpYyB2b2lkIGNsZWFudXBBdEV4aXQoKQogewotICAgIFdURjo6SGFz
aFNldDxRUHJvY2Vzcyo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHByb2Nlc3NlcygpLT5iZWdpbigp
OwotICAgIHdoaWxlIChpdCAhPSBwcm9jZXNzZXMoKS0+ZW5kKCkpIHsKLSAgICAgICAgKCppdCkt
PmtpbGwoKTsKLSAgICAgICAgKytpdDsKKyAgICAvLyBUZXJtaW5hdGUgb3VyIHdlYiBwcm9jZXNz
KGVzKS4KKyAgICBXVEY6Okhhc2hTZXQ8UVByb2Nlc3MqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
cHJvY2Vzc2VzKCktPmVuZCgpOworICAgIGZvciAoV1RGOjpIYXNoU2V0PFFQcm9jZXNzKj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gcHJvY2Vzc2VzKCktPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICBRUHJvY2VzcyogcHJvY2VzcyA9ICppdDsKKyAgICAgICAgcHJvY2Vzcy0+ZGlz
Y29ubmVjdChwcm9jZXNzKTsKKyAgICAgICAgcHJvY2Vzcy0+dGVybWluYXRlKCk7CisgICAgICAg
IGlmICghcHJvY2Vzcy0+d2FpdEZvckZpbmlzaGVkKDIwMCkpCisgICAgICAgICAgICBwcm9jZXNz
LT5raWxsKCk7CiAgICAgfQorCisgICAgLy8gRG8gbm90IGxlYXZlIHRoZSBzb2NrZXQgZmlsZSBi
ZWhpbmQuCisgICAgUUxvY2FsU2VydmVyOjpyZW1vdmVTZXJ2ZXIoUHJvY2Vzc0xhdW5jaGVySGVs
cGVyOjppbnN0YW5jZSgpLT5zZXJ2ZXJOYW1lKCkpOwogfQogCiBjbGFzcyBRdFdlYlByb2Nlc3Mg
OiBwdWJsaWMgUVByb2Nlc3MKQEAgLTg2LDYgKzk4LDEyIEBAIHB1YmxpYzoKICAgICBRdFdlYlBy
b2Nlc3MoUU9iamVjdCogcGFyZW50ID0gMCkKICAgICAgICAgOiBRUHJvY2VzcyhwYXJlbnQpCiAg
ICAgeworICAgICAgICBzdGF0aWMgYm9vbCBpc1JlZ2lzdGVyZWQgPSBmYWxzZTsKKyAgICAgICAg
aWYgKCFpc1JlZ2lzdGVyZWQpIHsKKyAgICAgICAgICAgIHFSZWdpc3Rlck1ldGFUeXBlPFFQcm9j
ZXNzOjpQcm9jZXNzU3RhdGU+KCJRUHJvY2Vzczo6UHJvY2Vzc1N0YXRlIik7CisgICAgICAgICAg
ICBpc1JlZ2lzdGVyZWQgPSB0cnVlOworICAgICAgICB9CisKICAgICAgICAgY29ubmVjdCh0aGlz
LCBTSUdOQUwoc3RhdGVDaGFuZ2VkKFFQcm9jZXNzOjpQcm9jZXNzU3RhdGUpKSwgdGhpcywgU0xP
VChwcm9jZXNzU3RhdGVDaGFuZ2VkKFFQcm9jZXNzOjpQcm9jZXNzU3RhdGUpKSk7CiAgICAgfQog
CkBAIC0xNDEsNyArMTU5LDYgQEAgUUxvY2FsU29ja2V0KiBQcm9jZXNzTGF1bmNoZXJIZWxwZXI6
OnRha2VQZW5kaW5nQ29ubmVjdGlvbigpCiBQcm9jZXNzTGF1bmNoZXJIZWxwZXI6On5Qcm9jZXNz
TGF1bmNoZXJIZWxwZXIoKQogewogICAgIG1fc2VydmVyLmNsb3NlKCk7Ci0gICAgQ3Jhc2hIYW5k
bGVyOjppbnN0YW5jZSgpLT5kaWREZWxldGUodGhpcyk7CiB9CiAKIFByb2Nlc3NMYXVuY2hlckhl
bHBlcjo6UHJvY2Vzc0xhdW5jaGVySGVscGVyKCkKQEAgLTE1MiwxMCArMTY5LDYgQEAgUHJvY2Vz
c0xhdW5jaGVySGVscGVyOjpQcm9jZXNzTGF1bmNoZXJIZWxwZXIoKQogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgY29ubmVjdCgmbV9zZXJ2ZXIsIFNJR05BTChuZXdD
b25uZWN0aW9uKCkpLCB0aGlzLCBTTE9UKG5ld0Nvbm5lY3Rpb24oKSkpOwotICAgIGNvbm5lY3Qo
UUNvcmVBcHBsaWNhdGlvbjo6aW5zdGFuY2UoKSwgU0lHTkFMKGFib3V0VG9RdWl0KCkpLCBTTE9U
KGRlbGV0ZUxhdGVyKCkpLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7Ci0KLSAgICAvLyBEbyBub3Qg
bGVhdmUgc29ja2V0IGZpbGVzIG9uIHRoZSBkaXNrIGV2ZW4gb24gY3Jhc2ghCi0gICAgQ3Jhc2hI
YW5kbGVyOjppbnN0YW5jZSgpLT5tYXJrRm9yRGVsZXRpb25PbkNyYXNoKHRoaXMpOwogfQogCiBQ
cm9jZXNzTGF1bmNoZXJIZWxwZXIqIFByb2Nlc3NMYXVuY2hlckhlbHBlcjo6aW5zdGFuY2UoKQpA
QCAtMTY3LDcgKzE4MCw3IEBAIFByb2Nlc3NMYXVuY2hlckhlbHBlciogUHJvY2Vzc0xhdW5jaGVy
SGVscGVyOjppbnN0YW5jZSgpCiAgICAgICAgIC8vIFRoZSBwdXJwb3NlIG9mIHRoZSBmb2xsb3dp
bmcgbGluZSBpcyB0byBlbnN1cmUgdGhhdCBvdXIgc3RhdGljIGlzIGluaXRpYWxpemVkIGJlZm9y
ZSB0aGUgZXhpdCBoYW5kbGVyIGlzIGluc3RhbGxlZC4KICAgICAgICAgcHJvY2Vzc2VzKCktPmNs
ZWFyKCk7CiAKLSAgICAgICAgYXRleGl0KGNsZWFudXBQcm9jZXNzZXMpOworICAgICAgICBhdGV4
aXQoY2xlYW51cEF0RXhpdCk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xOTIs
NyArMjA1LDcgQEAgdm9pZCBQcm9jZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVByb2Nlc3MoKQogICAg
ICAgICByZXR1cm47CiAKICAgICBRT2JqZWN0Ojpjb25uZWN0KG1fcHJvY2Vzc0lkZW50aWZpZXIs
IFNJR05BTChmaW5pc2hlZChpbnQpKSwgbV9wcm9jZXNzSWRlbnRpZmllciwgU0xPVChkZWxldGVM
YXRlcigpKSwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOwotICAgIG1fcHJvY2Vzc0lkZW50aWZpZXIt
PmtpbGwoKTsKKyAgICBtX3Byb2Nlc3NJZGVudGlmaWVyLT50ZXJtaW5hdGUoKTsKIH0KIAogUUxv
Y2FsU29ja2V0KiBQcm9jZXNzTGF1bmNoZXI6OnRha2VQZW5kaW5nQ29ubmVjdGlvbigpCmRpZmYg
LS1naXQgYS9XZWJLaXQyL1dlYktpdDIucHJvIGIvV2ViS2l0Mi9XZWJLaXQyLnBybwppbmRleCA2
NDkzOGQ3Li4yNjFlY2U3IDEwMDY0NAotLS0gYS9XZWJLaXQyL1dlYktpdDIucHJvCisrKyBiL1dl
YktpdDIvV2ViS2l0Mi5wcm8KQEAgLTI3Nyw3ICsyNzcsNyBAQCBIRUFERVJTICs9IFwKICAgICBT
aGFyZWQvV2ViVVJMUmVzcG9uc2UuaCBcCiAgICAgU2hhcmVkL1dlYlVzZXJDb250ZW50VVJMUGF0
dGVybi5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVs
ZS5oIFwKLSAgICBTaGFyZWQvcXQvQ3Jhc2hIYW5kbGVyLmggXAorICAgIFNoYXJlZC9xdC9DbGVh
bnVwSGFuZGxlci5oIFwKICAgICBTaGFyZWQvcXQvUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uaCBc
CiAgICAgU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmggXAogICAgIFNoYXJlZC9xdC9XZWJFdmVudEZh
Y3RvcnlRdC5oIFwKQEAgLTQ4Nyw3ICs0ODcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBTaGFyZWQv
V2ViVVJMUmVzcG9uc2UuY3BwIFwKICAgICBTaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAgXAogICAg
IFNoYXJlZC9xdC9CYWNraW5nU3RvcmVRdC5jcHAgXAotICAgIFNoYXJlZC9xdC9DcmFzaEhhbmRs
ZXIuY3BwIFwKKyAgICBTaGFyZWQvcXQvQ2xlYW51cEhhbmRsZXIuY3BwIFwKICAgICBTaGFyZWQv
cXQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudFF0LmNwcCBcCiAgICAgU2hhcmVkL3F0L1VwZGF0ZUNo
dW5rLmNwcCBcCiAgICAgU2hhcmVkL3F0L1dlYkNvcmVBcmd1bWVudENvZGVyc1F0LmNwcCBcCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>