<?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>51984</bug_id>
          
          <creation_ts>2011-01-05 22:58:35 -0800</creation_ts>
          <short_desc>[WK2][Qt] Multiple problems with MemoryMappedPool</short_desc>
          <delta_ts>2011-01-25 10:03:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kimmo.t.kinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kimmo.t.kinnunen</assigned_to>
          <cc>aroben</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>hausmann</cc>
    
    <cc>kbalazs</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>ossy</cc>
    
    <cc>s.mathur</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>330045</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-01-05 22:58:35 -0800</bug_when>
    <thetext>There&apos;s multiple problems with MemoryMappedPool currently

1) Cleanup depends on UI process crash handlers
P1)  Unreliable, makes quitting ui process slow

2) Race condition in sharing the buffers with variable isFree
P2) The implementation is not sound for concurrency

3) Pool grows forever
P3) At somepoint address space runs out

4) Implementation does not check syscall failures
P4) Causes segfaults due to failed mmap etc

--

Here&apos;s how I&apos;d see these fixed

1) Pass file descriptors to open but deleted files via IPC.

Use this protocol to create the mmapped files:
-- process 0
1) fd = open temp file
2) resize(fd)
3) mmap(fd)
4) delete(fd)
5) send fd via local domain socket or fifo
-- process 1
1) handle ipc messaeg
2) fd = decode fd
3) mmap(fd)
4) use fd.

This needs the ConnectionQt.cpp to be modified to use unix socket api or FIFO api to pass all the data. The Qt abstraction of QLocalServer and QLocalSocket cannot express sending FDs. However, I don&apos;t see this as a bad thing -- it should just remove unnecessary stuff.


2) Race condition in sharing the buffers with variable isFree

To have concurrently valid implementation, the access to the page variables should be controlled with cross-process semaphore. The isFree implements just a corner-case optimization for avoiding to call mmap and most likely this is not optimization at all. Thus usage should be removed.

After sending a memory area to other process, contract should be that the memory region cannot be used at all.

One scheme to achieve what isFree is doing, see below:

have two variables:

QList&lt;MappedMemory*&gt; m_usableRegions

QList&lt;MappedMemory*&gt; m_sentRegions

usableRegions gets appended when a process receives a memory region, uses it and then marks it disposed. These are the pages that can be sent back to the other process.

sentRegions is the list that optimizes mmap: it stores list of regions that have been mapped to this process memory at some point.


3) Pool grows forever

Process should just prune m_sentRegions to NUM_SLOTS

If mmap is a performance problem, the semaphore needs to be used


4) Implementation does not check syscall failures

The implementation should check status of file opens, mmap operations etc.


I would see much of the code move to use posix apis due to requirement of passing fds.

To pre-empt some comments about using posix apis:

For linux, symbian and macos x, this should just work. This is what qt is doing behind the scenes anyway.

For windows, the memory and ipc should most likely use Windows implementation and we should contribute bug fixes there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331625</commentid>
    <comment_count>1</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-10 07:45:00 -0800</bug_when>
    <thetext>&gt; 1) Pass file descriptors to open but deleted files via IPC.
&gt; 
&gt; Use this protocol to create the mmapped files:
&gt; -- process 0
&gt; 1) fd = open temp file
&gt; 2) resize(fd)
&gt; 3) mmap(fd)
&gt; 4) delete(fd)
&gt; 5) send fd via local domain socket or fifo
&gt; -- process 1
&gt; 1) handle ipc messaeg
&gt; 2) fd = decode fd
&gt; 3) mmap(fd)
&gt; 4) use fd.

This is pretty similar than what we do right now. The only benefit with the procedure you mentioned that we can delete the file at the sender side.
This is an argument to use OS level file handling and send the file descriptor.

&gt; This needs the ConnectionQt.cpp to be modified to use unix socket api or FIFO api to pass all the data. The Qt abstraction of QLocalServer and QLocalSocket cannot express sending FDs. However, I don&apos;t see this as a bad thing -- it should just remove unnecessary stuff.

Sending the descriptor is just sending an integer. This is obviously possible with the current connection infrastructure.

 
&gt; 2) Race condition in sharing the buffers with variable isFree
&gt; 
&gt; To have concurrently valid implementation, the access to the page variables should be controlled with cross-process semaphore. The isFree implements just a corner-case optimization for avoiding to call mmap and most likely this is not optimization at all. Thus usage should be removed.
&gt; 
&gt; After sending a memory area to other process, contract should be that the memory region cannot be used at all.
&gt; 
&gt; One scheme to achieve what isFree is doing, see below:
&gt; 
&gt; have two variables:
&gt; 
&gt; QList&lt;MappedMemory*&gt; m_usableRegions
&gt; 
&gt; QList&lt;MappedMemory*&gt; m_sentRegions
&gt; 
&gt; usableRegions gets appended when a process receives a memory region, uses it and then marks it disposed. These are the pages that can be sent back to the other process.
&gt; 
&gt; sentRegions is the list that optimizes mmap: it stores list of regions that have been mapped to this process memory at some point.

The memory chunk is used by both process. The role of the isFree member is that it is seen in both process at the same time.
Having a list in both processes is not enough here. About the race condition: could you give an example when smg wrong happen?
As I see the invariant here is only one of the processes is allowed to write it at a time. The only race condition is when the UI process set it
to free and the same time the web process reading ifFree but that is a safe situation in all possible outcome.

 
&gt; 4) Implementation does not check syscall failures
&gt; 
&gt; The implementation should check status of file opens, mmap operations etc.

Yes, maybe it should. I do not see any rational error handling however, but at least we should do a CRASH() to avoid indeterministic behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331632</commentid>
    <comment_count>2</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-01-10 08:09:29 -0800</bug_when>
    <thetext>(In reply to comment #1)

&gt; &gt; This needs the ConnectionQt.cpp to be modified to use unix socket api or FIFO api to pass all the data. The Qt abstraction of QLocalServer and QLocalSocket cannot express sending FDs. However, I don&apos;t see this as a bad thing -- it should just remove unnecessary stuff.
&gt; 
&gt; Sending the descriptor is just sending an integer. This is obviously possible with the current connection infrastructure.

I&apos;m no expert, but I don&apos;t think it is.

You need to send the message by using specific API.
In other words: the file descriptor table is not shared after fork. It&apos;s only copied during fork. AFAIK.

&quot;File Descriptor Passing&quot; in this url:
http://www.wsinnovations.com/softeng/articles/uds.html


&gt; The memory chunk is used by both process. The role of the isFree member is that it is seen in both process at the same time.
&gt; Having a list in both processes is not enough here. About the race condition: could you give an example when smg wrong happen?

0) Web process has passed 1 update chunk to ui process. Ui process has processed that update chunk and marked the underlying MappedMemory free. Both processes have this MappedMemory in the m_pool.
 
1) Both processes run MappedMemoryPool::mapMemory(size_t size)

2) Both processes run MappedMemoryPool::isFree() at the same time for the same pool entry. Both process get result &apos;true&apos;.

3) Both processes run MappedMemoryPool::markUsed() at the same time

I don&apos;t see any &quot;atomic compare and increment&quot; operator used. I don&apos;t know if they even work cross-process.

&gt; As I see the invariant here is only one of the processes is allowed to write it at a time. The only race condition is when the UI process set it
&gt; to free and the same time the web process reading ifFree but that is a safe situation in all possible outcome.
&gt; 
&gt; 
&gt; &gt; 4) Implementation does not check syscall failures
&gt; &gt; 
&gt; &gt; The implementation should check status of file opens, mmap operations etc.
&gt; 
&gt; Yes, maybe it should. I do not see any rational error handling however, but at least we should do a CRASH() to avoid indeterministic behavior.

No. It should fail the memory allocation. This should fail the update chunk allocation. This should result in empty result in paint. Beats crashing, is easy and somewhat well-defined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331652</commentid>
    <comment_count>3</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-10 09:08:10 -0800</bug_when>
    <thetext>&gt; You need to send the message by using specific API.
&gt; In other words: the file descriptor table is not shared after fork. It&apos;s only copied during fork. AFAIK.
&gt; 
&gt; &quot;File Descriptor Passing&quot; in this url:
&gt; http://www.wsinnovations.com/softeng/articles/uds.html
&gt; 

You are right.
 
&gt; 0) Web process has passed 1 update chunk to ui process. Ui process has processed that update chunk and marked the underlying MappedMemory free. Both processes have this MappedMemory in the m_pool.
 
&gt; 1) Both processes run MappedMemoryPool::mapMemory(size_t size)

The UI process never calls that.
 
&gt; 2) Both processes run MappedMemoryPool::isFree() at the same time for the same pool entry. Both process get result &apos;true&apos;.
&gt; 
&gt; 3) Both processes run MappedMemoryPool::markUsed() at the same time

Ditto.

&gt; No. It should fail the memory allocation. This should fail the update chunk allocation. This should result in empty result in paint. Beats crashing, is easy and somewhat well-defined.

Yep, sounds better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335803</commentid>
    <comment_count>4</comment_count>
      <attachid>79274</attachid>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-01-18 06:22:46 -0800</bug_when>
    <thetext>Created attachment 79274
First try removing Cleanup Handler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335818</commentid>
    <comment_count>5</comment_count>
      <attachid>79274</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-01-18 07:30:31 -0800</bug_when>
    <thetext>Comment on attachment 79274
First try removing Cleanup Handler

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

Lets go over this at your computer :-) First some style comments.

&gt; Source/WebKit2/ChangeLog:9
&gt; +        To avoid the need change following:

I dont understand the above sentence. &quot;For this we need the following?&quot;

&gt; Source/WebKit2/ChangeLog:14
&gt; +             passing them via filesystem.

*the* file system

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp:47
&gt; +static const size_t attachmentMaxNum = 255;

I would use Count or Number. Maybe attachmentMaxAmount is even better.

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp:145
&gt; +
&gt; +

remove one of the newlines

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp:152
&gt; +    struct cmsghdr *controlMessage = CMSG_FIRSTHDR(&amp;message);

* alignment

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp:156
&gt; +
&gt; +

remove one newline

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp:295
&gt; +
&gt; +

double newline

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp:303
&gt; +        struct cmsghdr *cmsg = CMSG_FIRSTHDR(&amp;message);

* alignment

&gt; common.pri:11
&gt; +!isEmpty($$(SBOX_DPKG_INST_ARCH)):exists(/usr/bin/ld.gold) {
&gt;      message(Using gold linker)
&gt; +    QMAKE_CFLAGS+=-fuse-ld=gold
&gt; +    QMAKE_CXXFLAGS+=-fuse-ld=gold
&gt;      QMAKE_LFLAGS+=-fuse-ld=gold

This doesnt seem related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336446</commentid>
    <comment_count>6</comment_count>
      <attachid>79274</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-19 05:51:41 -0800</bug_when>
    <thetext>Comment on attachment 79274
First try removing Cleanup Handler

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

Generally this patch moves to the direction to implement our API
on each platform with the platform&apos;s system level insfrastructure.
This is differ from how QtWebKit has been developed so far.
I am not saying I&apos;m against this but such a philosophic change should be
debated with the wider community before moving into that direction.
It&apos;s seems obvious to me that the problems with the CleanupHandler is
not enough as an argument to this change. If you have other arguments,
like you think we can achieve better quality by using system level stuff,
please make this discussion more public.

&gt;&gt; Source/WebKit2/ChangeLog:9
&gt;&gt; +        Deleting files in signal handlers is not a good idea,
&gt;&gt; +        because process memory might not be valid after a crash.
&gt;&gt; +        To avoid the need change following:
&gt; 
&gt; I dont understand the above sentence. &quot;For this we need the following?&quot;

The crash handling has been removed, now the CleanupHandler is just about termination.
Actually the signal handler just stops the event loop. The actual removal of the files
(and releasing of the shared mem segments) is happening later when the aboutToQuit signal
is emitted.

&gt; Source/WebKit2/ChangeLog:25
&gt; +          - Remove MemoryMappedPool and rely on libc/kernel caching
&gt; +            of mmapped areas.

We can remove MamoryMappedPool if it seems like not a valuable optimization but we
can do it without the rest of this patch. This should be factored out from the patch
and maybe the rest should be sliced further.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336494</commentid>
    <comment_count>7</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-01-19 06:49:53 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 79274 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=79274&amp;action=review
&gt; 
&gt; Generally this patch moves to the direction to implement our API
&gt; on each platform with the platform&apos;s system level insfrastructure.
&gt; This is differ from how QtWebKit has been developed so far.

Nah. The ConnectionQt.cpp was just written in one way, there&apos;s no philosophic agenda afaik.

&gt; I am not saying I&apos;m against this but such a philosophic change should be
&gt; debated with the wider community before moving into that direction.

Why? This patch fixes legimite (big) problems, which is is the purpose of this patch.

The philosophic agenda was not discussed with any other patch either, it is not written anywhere. Are you sure there&apos;s such a philosophic agenda? To my knowledge, the philosophic agenda is to have the best possible implementation, regardless of if it uses Qt or not.

&gt; It&apos;s seems obvious to me that the problems with the CleanupHandler is
&gt; not enough as an argument to this change. If you have other arguments,

Yes, it really is. CleanupHandler is fundamentally wrong design and thus there&apos;s no way to really back it &quot;philosophically&quot;. May I remind you: signal handlers in general, and actions in signal handlers are _very_ platform specific, even if you use a class that begins with Q letter.
 
In practice: It creates huge problems just because it causes legitimate crash dumps of ui process to be invalid, because the CleanupHandler will cause the ui to crash second time and hide the original crash dump. 

In practice in other areas: the other parts of the implementation are not that good either.


 

&gt; like you think we can achieve better quality by using system level stuff,
&gt; please make this discussion more public.

I&apos;ve written many points of rationale already in this bug, and nobody has made a real argument against them.

Also further:
The implementation proposed here implements the API more like the way it&apos;s designed originally in WebKit2 on mac: the message passing is unbuffered, passing small messages fast, etc. So the implementation proposed here is more aligned with the mac implemetation. This should mean that it&apos;s better for qt webkit port, because it gets all the same improvements that get done architecturally to the other main ports. On the other hand, may also be better for the rest of the webkit community, because there&apos;s less of a chance that Qt-specific hacks are needed and maybe we can even contribute to the general architecture at some point.
 

&gt; We can remove MamoryMappedPool if it seems like not a valuable optimization but we
&gt; can do it without the rest of this patch. This should be factored out from the patch
&gt; and maybe the rest should be sliced further.

The memorymappedpool doesn&apos;t add much, thus you cannot really require it. On the other hand, when you use it in this context, it creates the problems pointed above in this bug. It simply is not needed in its current form, as you can see from the patch: it can be just removed and everything works.

Why are we debating philosophical problems here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336500</commentid>
    <comment_count>8</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-19 07:01:32 -0800</bug_when>
    <thetext>&gt; In practice: It creates huge problems just because it causes legitimate crash dumps of ui process to be invalid, because the CleanupHandler will cause the ui to crash second time and hide the original crash dump. 

No, it doesn&apos;t do that. Like I said, crash handling has been removed in
http://trac.webkit.org/changeset/74967.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336753</commentid>
    <comment_count>9</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-01-19 13:41:58 -0800</bug_when>
    <thetext>Profiling this patch, I think it has problems. At least on encrypted /tmp, a continuous animation exercises kcryptd with this patch, where as trunk without this patch does not. This indicates that there&apos;s a lot of redundant disk activity with the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336767</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-01-19 13:57:30 -0800</bug_when>
    <thetext>The main argument I see in favor of this approach is that IMHO it&apos;s the right way of establishing the shared memory.

1) Shared memory allocated via shmget is subject to system wide limitations (/proc/sys/kernel/shmall on Linux). Space in /tmp is in my experience less of an issue, and certainly a more portable approach to managing the memory needs (instead of a Linux specific one)

2) Memory allocated with shmget is prone to leaking this system limited pool of memory when the processes crash. The extension of allowing to shmat() to a segment that&apos;s already deleted is a Linux extension (I think it&apos;s also available on Solaris). It&apos;s not really portable though. The approach of creating the file in /tmp, mmap&apos;ing it, unlinking from the filesystem and passing the fds is a portable solution that is robust.

3) The approach of passing file descriptors should work nicely with sandboxing. Shared file names require the same filesystem namespace for the web and ui process, which is certainly not desirable.

So yes, this means using system APIs instead of Qt APIs, and it also means the code will have to be written a few times, but how bad is it really? We need a posixy implementation, one for Win32 (maybe use ConnectionWin.cpp?) and one for Symbian (*sigh*).

But it will allow us to have the fastest, most efficient and robust implementation on each platform. (unless tmp is encrypted hehe)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337196</commentid>
    <comment_count>11</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-20 02:15:38 -0800</bug_when>
    <thetext>Thank you for pointing these out, now the picture is getting clearer to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337371</commentid>
    <comment_count>12</comment_count>
      <attachid>79606</attachid>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-01-20 08:53:10 -0800</bug_when>
    <thetext>Created attachment 79606
Second try. Fixes the regression and implements connectionDidClose 

The performance regression was due to leaking fd handles that were passed to the other process. This caused them to be synced to the disk and thus performance regression.

This also implements Connection::connectionDidClose. This is needed when web process crashes. The detection is implemented by observing the web process termination. To test this, bug 52796 is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337376</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-20 08:56:10 -0800</bug_when>
    <thetext>Attachment 79606 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1

Source/WebKit2/Platform/qt/SharedMemoryQt.cpp:55:  Semicolon defining empty statement for this loop. Use { } instead.  [whitespace/semicolon] [5]
Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp:99:  More than one command on the same line in while  [whitespace/parens] [4]
Total errors found: 2 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337379</commentid>
    <comment_count>14</comment_count>
      <attachid>79608</attachid>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-01-20 08:59:50 -0800</bug_when>
    <thetext>Created attachment 79608
And 3rd patch, remove unneeded qthread include from ConnectionQt.cpp and invalid assert in Attachment::dispose

sorry for the spam.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337402</commentid>
    <comment_count>15</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-20 09:44:06 -0800</bug_when>
    <thetext>Attachment 79608 did not build on win:
Build output: http://queues.webkit.org/results/7539242</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337414</commentid>
    <comment_count>16</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-01-20 10:11:19 -0800</bug_when>
    <thetext>Adam, any idea what is going on on windows?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337423</commentid>
    <comment_count>17</comment_count>
      <attachid>79608</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-01-20 10:24:09 -0800</bug_when>
    <thetext>Comment on attachment 79608
And 3rd patch, remove unneeded qthread include from ConnectionQt.cpp and invalid assert in Attachment::dispose

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

Pretty nice patch, r=me

&gt; Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.cpp:53
&gt; +    for (Deque&lt;Attachment&gt;::iterator i = m_attachments.begin(); i != end; ++i)

We normally call non-int iterators for &apos;it&apos;

&gt; Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.cpp:54
&gt; +            i-&gt;dispose();

Something went wrong with indent here

&gt; Source/WebKit2/Platform/CoreIPC/Attachment.cpp:33
&gt; +#if PLATFORM(QT)
&gt; +#include &lt;unistd.h&gt;
&gt; +#include &lt;errno.h&gt;
&gt; +#endif

I think this could be made into a Linux (or POSIX) implementation in the future, so we might want to change the ifdefs then

&gt; Source/WebKit2/Platform/CoreIPC/Attachment.cpp:92
&gt; +        while (close(m_fileDescriptor) == -1 &amp;&amp; (errno == EINTR)) {}

space needed between { and }, coding style rule

&gt; Source/WebKit2/Platform/CoreIPC/Connection.h:103
&gt;  #elif PLATFORM(QT)
&gt; -    typedef const QString Identifier;
&gt; +    typedef int Identifier;
&gt;  #elif PLATFORM(GTK)
&gt;      typedef int Identifier;
&gt;  #endif

Seems that these could be combined

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp:98
&gt; +        while (close(m_socketDescriptor) == -1 &amp;&amp; errno == EINTR) {}

Space needed between { and }

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp:313
&gt; +
&gt; +

Remove one of those newlines

&gt; Source/WebKit2/Platform/qt/SharedMemoryQt.cpp:55
&gt; +        while (close(m_fileDescriptor) == -1 &amp;&amp; errno == EINTR) {}

space between { and }

&gt; Source/WebKit2/Platform/qt/SharedMemoryQt.cpp:115
&gt; +            while (close(fileDescriptor) == -1 &amp;&amp; errno == EINTR) {}

space between { and }, I think this is used to much that we should make a macro for it. That would also make the code more clear

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:114
&gt; +    // Don&apos;t expose web socket to possible future web processes

*the* web socket</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337442</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-20 10:50:33 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Adam, any idea what is going on on windows?

You put the declaration of dispose() inside PLATFORM(QT), but the definition is unguarded. Here&apos;s the error:

4&gt;..\Platform\CoreIPC\Attachment.cpp(89) : error C2039: &apos;dispose&apos; : is not a member of &apos;CoreIPC::Attachment&apos;
4&gt;        c:\cygwin\home\buildbot\webkit\source\webkit2\platform\coreipc\Attachment.h(34) : see declaration of &apos;CoreIPC::Attachment&apos;

Maybe an AttachmentQt.cpp file would be more appropriate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337472</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-20 11:42:02 -0800</bug_when>
    <thetext>Attachment 79608 did not build on mac:
Build output: http://queues.webkit.org/results/7599247</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338872</commentid>
    <comment_count>20</comment_count>
      <attachid>79899</attachid>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-01-24 00:09:42 -0800</bug_when>
    <thetext>Created attachment 79899
4th version, fixing compiles and comments (uses AttachmentQt.cpp)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338891</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-24 01:11:54 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 79899:

http/tests/xmlhttprequest/cross-origin-authorization.html bug 52398 (author: ap@webkit.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338892</commentid>
    <comment_count>22</comment_count>
      <attachid>79899</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-24 01:12:30 -0800</bug_when>
    <thetext>Comment on attachment 79899
4th version, fixing compiles and comments (uses AttachmentQt.cpp)

Rejecting attachment 79899 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=eseidel-cq-sl&apos;, &apos;la...&quot; exit_code: 1

Last 500 characters of output:
er     -&gt; origin/master
Partial-rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 76488 = ca4146104c9f9db9b04d4b446a63be89f4c0924f
r76489 = 42a6ccb2175a21e731f8d40fb792de897ee02ac0
r76490 = 53884fbd3b595d4b1b7df35cbd91d0e3a6cc21ec
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.

Full output: http://queues.webkit.org/results/7580312</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338914</commentid>
    <comment_count>23</comment_count>
      <attachid>79899</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-24 02:24:53 -0800</bug_when>
    <thetext>Comment on attachment 79899
4th version, fixing compiles and comments (uses AttachmentQt.cpp)

Let&apos;s try the EWS&apos;s.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338922</commentid>
    <comment_count>24</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-24 03:12:31 -0800</bug_when>
    <thetext>D&apos;oh, mid air collision. By the way, here are my suggestions (copied from the preview):

Just some impressions. I do not have the knowledge to review the posix stuff but generally
the patch looks like a pretty good and correct work to me.

&gt; Source/WebKit2/ChangeLog:9
&gt; +        Deleting files in signal handler of UI process is not a good idea,
&gt; +        because the memory where filenames are stored might not be valid
&gt; +        after a crash.

The expected performance and stability improvements should be also mentioned as well as
the change in porting policy - i.e. that a given platform should implement it&apos;s own IPC mechanisms).

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp:106
&gt; +    if (m_socketDescriptor != -1)
&gt; +        while (close(m_socketDescriptor) == -1 &amp;&amp; errno == EINTR) { }
&gt; +
&gt; +    if (!m_isConnected)
&gt; +        return;
&gt; +
&gt; +    delete m_socketNotifier;
&gt; +    m_socketNotifier = 0;
&gt; +    m_socketDescriptor = -1;
&gt; +    m_isConnected = false;

This seems to be somewhat overcomplicated, should return early if m_socketDescriptor is -1 (and maybe do not touch m_isConnected at all).

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp:259
&gt; +    // Schedule a call to readyReadHandler. Data may have arrived before installation of the signal
&gt; +    // handler.

Nit: the comment should not be breaked

&gt; Source/WebKit2/Platform/qt/WorkQueueQt.cpp:88
&gt; +    notifier-&gt;setEnabled(true);

Why call this again?

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:98
&gt; +    // Don&apos;t expose the ui socket to the web process

Nit: missing dot

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:165
&gt; +        qDebug() &lt;&lt; &quot;Error: wrong number of arguments.&quot;;
&gt; +        return 1;

qFatal?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338937</commentid>
    <comment_count>25</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-01-24 04:04:13 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; D&apos;oh, mid air collision. By the way, here are my suggestions (copied from the preview):
&gt; 
&gt; Just some impressions. I do not have the knowledge to review the posix stuff but generally
&gt; the patch looks like a pretty good and correct work to me.
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:9
&gt; &gt; +        Deleting files in signal handler of UI process is not a good idea,
&gt; &gt; +        because the memory where filenames are stored might not be valid
&gt; &gt; +        after a crash.
&gt; 
&gt; The expected performance and stability improvements should be also mentioned as well as

Is that not enough rationale? Major stability and reliability fix (avoid deleting possibly arbitrary files, and actually guarantee cleanup).

This patch fixes the cleanup handler. If you read from the points, you can walk back the implementation and see that it&apos;s also pretty minimal -- eg. it&apos;s almost smallest patch that implements the cleanup correctly. It would be harder to reproduce the slightly buggy behavior of current trunk.

&gt; the change in porting policy - i.e. that a given platform should implement it&apos;s own IPC mechanisms).

Is it necessary? I don&apos;t think there&apos;s a change in porting policy. Neither I think it&apos;s very unclear to anyone how to implement IPC for Qt. Use whatever works best. If there&apos;s Qt-only way to do this better, I don&apos;t see why not using it should be mandated by some policy.

&gt; &gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp:106
&gt; &gt; +    if (m_socketDescriptor != -1)
&gt; &gt; +        while (close(m_socketDescriptor) == -1 &amp;&amp; errno == EINTR) { }
&gt; &gt; +
&gt; &gt; +    if (!m_isConnected)
&gt; &gt; +        return;
&gt; &gt; +
&gt; &gt; +    delete m_socketNotifier;
&gt; &gt; +    m_socketNotifier = 0;
&gt; &gt; +    m_socketDescriptor = -1;
&gt; &gt; +    m_isConnected = false;
&gt; 
&gt; This seems to be somewhat overcomplicated, should return early if m_socketDescriptor is -1 (and maybe do not touch m_isConnected at all).

This structure is to match other ports. The desire to match other ports is due be able to conform ASSERTS in the general Connection.cpp and other parts of the code.

&gt; &gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp:259
&gt; &gt; +    // Schedule a call to readyReadHandler. Data may have arrived before installation of the signal
&gt; &gt; +    // handler.
&gt; 
&gt; Nit: the comment should not be breaked

Comments need to switch lines at some point. That&apos;s set to 100 columns. AFAIK there isn&apos;t webkit coding style policy about this. Is this a big deal?

 
&gt; &gt; Source/WebKit2/Platform/qt/WorkQueueQt.cpp:88
&gt; &gt; +    notifier-&gt;setEnabled(true);
&gt; 
&gt; Why call this again?

Can you elaborate on the &quot;again&quot;? The first setEnabled(false) call disables the notifier, so that no call is made from other thread with half-constructed state. This call then enables the notifier.
 
&gt; &gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:98
&gt; &gt; +    // Don&apos;t expose the ui socket to the web process
&gt; 
&gt; Nit: missing dot

Good point. (pun intended :) )

&gt; &gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:165
&gt; &gt; +        qDebug() &lt;&lt; &quot;Error: wrong number of arguments.&quot;;
&gt; &gt; +        return 1;
&gt; 
&gt; qFatal?

Why? What does it improve? Here we can control the exit code, and thus it can be checked if somebody wants to check it in the future.

So, do you need to discuss these nits before this patch lands?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338938</commentid>
    <comment_count>26</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-01-24 04:07:21 -0800</bug_when>
    <thetext>I think it is fine for landing, please go ahead</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338940</commentid>
    <comment_count>27</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-24 04:15:42 -0800</bug_when>
    <thetext> &gt; &gt; &gt; Source/WebKit2/Platform/qt/WorkQueueQt.cpp:88
&gt; &gt; &gt; +    notifier-&gt;setEnabled(true);
&gt; &gt; 
&gt; &gt; Why call this again?
&gt; 
&gt; Can you elaborate on the &quot;again&quot;? The first setEnabled(false) call disables the notifier, so that no call is made from other thread with half-constructed state. This call then enables the notifier.

My bad.

&gt; 
&gt; So, do you need to discuss these nits before this patch lands?

No, my suggestions are generally subjective or affecting only style so the patch can land as it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338954</commentid>
    <comment_count>28</comment_count>
      <attachid>79899</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-24 04:58:40 -0800</bug_when>
    <thetext>Comment on attachment 79899
4th version, fixing compiles and comments (uses AttachmentQt.cpp)

Clearing flags on attachment: 79899

Committed r76507: &lt;http://trac.webkit.org/changeset/76507&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338955</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-24 04:58:48 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339711</commentid>
    <comment_count>30</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-25 10:03:34 -0800</bug_when>
    <thetext>*** Bug 46252 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79274</attachid>
            <date>2011-01-18 06:22:46 -0800</date>
            <delta_ts>2011-01-20 08:53:10 -0800</delta_ts>
            <desc>First try removing Cleanup Handler</desc>
            <filename>cleanuphandler-removal-01.patch</filename>
            <type>text/plain</type>
            <size>53740</size>
            <attacher name="Kimmo Kinnunen">kimmo.t.kinnunen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBmMzgyZTJlLi45OTZjZWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTYg
QEAKKzIwMTEtMDEtMTggIEtpbW1vIEtpbm51bmVuICA8a2ltbW8udC5raW5udW5lbkBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0
XSBSZW1vdmUgQ2xlYW51cEhhbmRsZXIgYnkgcGFzc2luZyBmaWxlIGRlc2NyaXB0b3JzLgorCisg
ICAgICAgIERlbGV0aW5nIGZpbGVzIGluIHNpZ25hbCBoYW5kbGVycyBpcyBub3QgYSBnb29kIGlk
ZWEsCisgICAgICAgIGJlY2F1c2UgcHJvY2VzcyBtZW1vcnkgbWlnaHQgbm90IGJlIHZhbGlkIGFm
dGVyIGEgY3Jhc2guCisgICAgICAgIFRvIGF2b2lkIHRoZSBuZWVkIGNoYW5nZSBmb2xsb3dpbmc6
CisgICAgICAgICAgMSkgQXZvaWQgcGFzc2luZyBmaWxlbmFtZXMgYmV0d2VlbiBwcm9jZXNzZXMs
IHBhc3MgZmRzCisgICAgICAgICAgMikgV2hlbiBtbWFwJ2luZyBmaWxlcywgZGVsZXRlIHRoZW0g
aW1tZWRpYXRlbHkgYWZ0ZXIKKyAgICAgICAgICAgICBvcGVuaW5nIGFuZCBtbWFwJ2luZyB0aGVt
LgorICAgICAgICAgIDMpIFBhc3Mgc29ja2V0cyB3aXRoIGZkcyBkdXJpbmcgZm9yaytleGVjIGlu
c3RlYWQgb2YKKyAgICAgICAgICAgICBwYXNzaW5nIHRoZW0gdmlhIGZpbGVzeXN0ZW0uCisgICAg
ICAgICAgNCkgVXNlIG1tYXAnZWQgZmlsZXMgZm9yIGltcGxlbWVudGF0aW9uIG9mIFNoYXJlZE1l
bW9yeS4KKyAgICAgICAgICAgICBRU2hhcmVkTWVtb3J5IGRvZXMgbm90IHN1cHBvcnQgY2xlYW51
cCBjb3JyZWN0bHkuCisKKyAgICAgICAgQ29uc3F1ZW5jZXM6CisgICAgICAgICAgLSBNb3ZlIE1h
cHBlZE1lbW9yeSB0byBTaGFyZWRNZW1vcnksIG1ha2UgVXBkYXRlQ2h1bmsgdXNlIHRoaXMuCisg
ICAgICAgICAgLSBJbXBsZW1lbnQgQ29yZUlQQzo6QXR0YWNobWVudCB1c2luZyBtbWFwZWQgZmls
ZXMuCisgICAgICAgICAgLSBTZW5kIG1lc3NhZ2VzIHVzaW5nIGRhdGFncmFtIHNvY2tldCBsaWtl
IG9uIE1hYy4KKyAgICAgICAgICAtIFNlbmQgYmlnIG1lc3NhZ2VzIG91dC1vZi1saW5lIGFuZCB0
aHVzIGF2b2lkIGluY3JlYXNpbmcKKyAgICAgICAgICAgIHRoZSByZWNlaXZlIGJ1ZmZlci4KKyAg
ICAgICAgICAtIFJlbW92ZSBNZW1vcnlNYXBwZWRQb29sIGFuZCByZWx5IG9uIGxpYmMva2VybmVs
IGNhY2hpbmcKKyAgICAgICAgICAgIG9mIG1tYXBwZWQgYXJlYXMuCisgICAgICAgICAgLSBVbm1h
cCBtZW1vcnkgYXJlYXMgYWZ0ZXIgdXNlLgorICAgICAgICAgIC0gV2hlbiBVSSBwcm9jZXNzIGNy
YXNoZXMsIGtpbGwgdGhlIHdlYiBwcm9jZXNzIHVzaW5nIFNJR0tJTEwuCisgICAgICAgICAgICBU
aGlzIGlzIHBvc3NpYmxlIGFnYWluIGJlY2F1c2UgY2xlYW51cCBoYW5kbGVyIG5vdCBuZWVkZWQu
CisKKyAgICAgICAgW1dLMl1bUXRdIE11bHRpcGxlIHByb2JsZW1zIHdpdGggTWVtb3J5TWFwcGVk
UG9vbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE5
ODQKKworICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVudC5jcHA6CisgICAgICAg
IChDb3JlSVBDOjpBdHRhY2htZW50OjpBdHRhY2htZW50KToKKyAgICAgICAgKiBQbGF0Zm9ybS9D
b3JlSVBDL0F0dGFjaG1lbnQuaDoKKyAgICAgICAgKENvcmVJUEM6OkF0dGFjaG1lbnQ6OnNpemUp
OgorICAgICAgICAoQ29yZUlQQzo6QXR0YWNobWVudDo6cmVsZWFzZUZpbGVEZXNjcmlwdG9yKToK
KyAgICAgICAgKENvcmVJUEM6OkF0dGFjaG1lbnQ6OmZpbGVEZXNjcmlwdG9yKToKKyAgICAgICAg
KiBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3Jl
SVBDL3F0L0Nvbm5lY3Rpb25RdC5jcHA6CisgICAgICAgIChDb3JlSVBDOjpNZXNzYWdlSW5mbzo6
TWVzc2FnZUluZm8pOgorICAgICAgICAoQ29yZUlQQzo6TWVzc2FnZUluZm86OnNldE1lc3NhZ2VC
b2R5T09MKToKKyAgICAgICAgKENvcmVJUEM6Ok1lc3NhZ2VJbmZvOjppc01lc3NhZ2VCb2R5T09M
KToKKyAgICAgICAgKENvcmVJUEM6Ok1lc3NhZ2VJbmZvOjpib2R5U2l6ZSk6CisgICAgICAgIChD
b3JlSVBDOjpNZXNzYWdlSW5mbzo6bWVzc2FnZUlEKToKKyAgICAgICAgKENvcmVJUEM6Ok1lc3Nh
Z2VJbmZvOjphdHRhY2htZW50Q291bnQpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6
cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnBsYXRm
b3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChDb3JlSVBDOjpTb2NrZXROb3RpZmllckRpc2FibGVH
dWFyZDo6U29ja2V0Tm90aWZpZXJEaXNhYmxlR3VhcmQpOgorICAgICAgICAoQ29yZUlQQzo6U29j
a2V0Tm90aWZpZXJEaXNhYmxlR3VhcmQ6On5Tb2NrZXROb3RpZmllckRpc2FibGVHdWFyZCk6Cisg
ICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVyKToKKyAgICAgICAg
KENvcmVJUEM6OkNvbm5lY3Rpb246Om9wZW4pOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlv
bjo6cGxhdGZvcm1DYW5TZW5kT3V0Z29pbmdNZXNzYWdlcyk6CisgICAgICAgIChDb3JlSVBDOjpD
b25uZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9TaGFy
ZWRNZW1vcnkuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9Xb3JrUXVldWUuaDoKKyAgICAgICAgKiBQ
bGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbGF0
Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmg6IFJlbW92ZWQuCisgICAgICAgICogUGxhdGZvcm0v
cXQvU2hhcmVkTWVtb3J5UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6Okhh
bmRsZTo6SGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6On5I
YW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6aXNOdWxsKToK
KyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZSk6CisgICAgICAg
IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0
OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6cmVsZWFzZVRvQXR0YWNobWVudCk6CisgICAgICAgIChX
ZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjphZG9wdEZyb21BdHRhY2htZW50KToKKyAgICAg
ICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjphY2Nl
c3NNb2RlTU1hcCk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6flNoYXJlZE1lbW9y
eSk6CisgICAgICAgIChXZWJLaXQ6OmFjY2Vzc01vZGVGaWxlKToKKyAgICAgICAgKFdlYktpdDo6
U2hhcmVkTWVtb3J5OjpjcmVhdGVIYW5kbGUpOgorICAgICAgICAqIFBsYXRmb3JtL3F0L1dvcmtR
dWV1ZVF0LmNwcDoKKyAgICAgICAgKFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRs
ZXIpOgorICAgICAgICAqIFNoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlVwZGF0ZUNodW5rOjpVcGRhdGVDaHVuayk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNo
dW5rOjp+VXBkYXRlQ2h1bmspOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVDaHVuazo6ZW5jb2Rl
KToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQ2h1bms6OmRlY29kZSk6CisgICAgICAgIChXZWJL
aXQ6OlVwZGF0ZUNodW5rOjpjcmVhdGVJbWFnZSk6CisgICAgICAgICogU2hhcmVkL3F0L1VwZGF0
ZUNodW5rLmg6CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlF0V2ViUHJvY2Vzczo6UXRXZWJQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6UXRXZWJQcm9jZXNzOjpzZXR1cENoaWxkUHJvY2Vzcyk6CisgICAgICAgIChXZWJL
aXQ6OlByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlBy
b2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
TGF1bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OndlYlRo
cmVhZEJvZHkpOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRMYXVuY2hlcjo6Y3JlYXRlV2ViVGhy
ZWFkKToKKyAgICAgICAgKiBXZWJLaXQyLnBybzoKKyAgICAgICAgKiBXZWJQcm9jZXNzL3F0L1dl
YlByb2Nlc3NNYWluUXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpblF0KToK
KwogMjAxMS0wMS0xNyAgSm9uIEhvbmV5Y3V0dCAgPGpob25leWN1dHRAYXBwbGUuY29tPgogCiAg
ICAgICAgIFdpbmRvd3MgYnVpbGQgZml4LiBVbnJldmlld2VkLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9BdHRhY2htZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVudC5jcHAKaW5kZXggYzhkMzVmNC4uNzNmODhmMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9BdHRhY2htZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1lbnQuY3BwCkBA
IC01OCw2ICs1OCwxOCBAQCB2b2lkIEF0dGFjaG1lbnQ6OnJlbGVhc2UoKQogfQogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShRVCkKK0F0dGFjaG1lbnQ6OkF0dGFjaG1lbnQoaW50IGZpbGVEZXNjcmlw
dG9yLCBzaXplX3Qgc2l6ZSkKKyAgICA6IG1fdHlwZShNYXBwZWRNZW1vcnkpCisgICAgLCBtX2Zp
bGVEZXNjcmlwdG9yKGZpbGVEZXNjcmlwdG9yKQorICAgICwgbV9zaXplKHNpemUpCit7CisgICAg
QVNTRVJUKG1fZmlsZURlc2NyaXB0b3IpOworICAgIEFTU0VSVChtX3NpemUpOworfQorCisjZW5k
aWYKKwogdm9pZCBBdHRhY2htZW50OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBj
b25zdAogewogICAgIGVuY29kZXItPmFkZEF0dGFjaG1lbnQoKnRoaXMpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9BdHRhY2htZW50LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1lbnQuaAppbmRleCA1NWEwOWM5Li5kODg5ZDc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1lbnQuaApAQCAt
NDEsMTEgKzQxLDE2IEBAIHB1YmxpYzoKICAgICAgICAgTWFjaFBvcnRUeXBlLAogICAgICAgICBN
YWNoT09MTWVtb3J5VHlwZQogI2VuZGlmCisjaWYgUExBVEZPUk0oUVQpCisgICAgICAgIE1hcHBl
ZE1lbW9yeQorI2VuZGlmCiAgICAgfTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBBdHRhY2ht
ZW50KG1hY2hfcG9ydF9uYW1lX3QgcG9ydCwgbWFjaF9tc2dfdHlwZV9uYW1lX3QgZGlzcG9zaXRp
b24pOwogICAgIEF0dGFjaG1lbnQodm9pZCogYWRkcmVzcywgbWFjaF9tc2dfc2l6ZV90IHNpemUs
IG1hY2hfbXNnX2NvcHlfb3B0aW9uc190IGNvcHlPcHRpb25zLCBib29sIGRlYWxsb2NhdGUpOwor
I2VsaWYgUExBVEZPUk0oUVQpCisgICAgQXR0YWNobWVudChpbnQgZmlsZURlc2NyaXB0b3IsIHNp
emVfdCk7CiAjZW5kaWYKIAogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQpAQCAtNjIsMTEgKzY3LDE2IEBAIHB1YmxpYzoKICAgICBtYWNoX21zZ19zaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgQVNTRVJUKG1fdHlwZSA9PSBNYWNoT09MTWVtb3J5VHlwZSk7IHJldHVybiBtX29v
bE1lbW9yeS5zaXplOyB9CiAgICAgbWFjaF9tc2dfY29weV9vcHRpb25zX3QgY29weU9wdGlvbnMo
KSBjb25zdCB7IEFTU0VSVChtX3R5cGUgPT0gTWFjaE9PTE1lbW9yeVR5cGUpOyByZXR1cm4gbV9v
b2xNZW1vcnkuY29weU9wdGlvbnM7IH0KICAgICBib29sIGRlYWxsb2NhdGUoKSBjb25zdCB7IEFT
U0VSVChtX3R5cGUgPT0gTWFjaE9PTE1lbW9yeVR5cGUpOyByZXR1cm4gbV9vb2xNZW1vcnkuZGVh
bGxvY2F0ZTsgfQorI2VsaWYgUExBVEZPUk0oUVQpCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KKworICAgIGludCByZWxlYXNlRmlsZURlc2NyaXB0b3IoKSB7IGlu
dCB0ZW1wID0gbV9maWxlRGVzY3JpcHRvcjsgbV9maWxlRGVzY3JpcHRvciA9IC0xOyByZXR1cm4g
dGVtcDsgfQorICAgIGludCBmaWxlRGVzY3JpcHRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZURl
c2NyaXB0b3I7IH0KICNlbmRpZgogCiAgICAgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKikg
Y29uc3Q7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIEF0dGFjaG1l
bnQmKTsKLSAgICAKKwogcHJpdmF0ZToKICAgICBUeXBlIG1fdHlwZTsKIApAQCAtODMsNiArOTMs
OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYm9vbCBkZWFsbG9jYXRlOwogICAgICAgICB9IG1f
b29sTWVtb3J5OwogICAgIH07CisjZWxpZiBQTEFURk9STShRVCkKKyAgICBpbnQgbV9maWxlRGVz
Y3JpcHRvcjsKKyAgICBzaXplX3QgbV9zaXplOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCmluZGV4IGI3ZTViMGYuLmRiZjBmYTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCkBAIC00
NCw5ICs0NCw3IEBACiAjZWxpZiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSA8c3RyaW5nPgogI2Vs
aWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSA8UVN0cmluZz4KLWNsYXNzIFFMb2NhbFNlcnZlcjsK
LWNsYXNzIFFMb2NhbFNvY2tldDsKK2NsYXNzIFFTb2NrZXROb3RpZmllcjsKICNlbmRpZgogCiBj
bGFzcyBSdW5Mb29wOwpAQCAtOTgsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBIQU5E
TEUgSWRlbnRpZmllcjsKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVTZXJ2ZXJBbmRDbGllbnRJZGVu
dGlmaWVycyhJZGVudGlmaWVyJiBzZXJ2ZXJJZGVudGlmaWVyLCBJZGVudGlmaWVyJiBjbGllbnRJ
ZGVudGlmaWVyKTsKICNlbGlmIFBMQVRGT1JNKFFUKQotICAgIHR5cGVkZWYgY29uc3QgUVN0cmlu
ZyBJZGVudGlmaWVyOworICAgIHR5cGVkZWYgaW50IElkZW50aWZpZXI7CiAjZWxpZiBQTEFURk9S
TShHVEspCiAgICAgdHlwZWRlZiBpbnQgSWRlbnRpZmllcjsKICNlbmRpZgpAQCAtMjg2LDggKzI4
NCw4IEBAIHByaXZhdGU6CiAKICAgICBWZWN0b3I8dWludDhfdD4gbV9yZWFkQnVmZmVyOwogICAg
IHNpemVfdCBtX2N1cnJlbnRNZXNzYWdlU2l6ZTsKLSAgICBRTG9jYWxTb2NrZXQqIG1fc29ja2V0
OwotICAgIFFTdHJpbmcgbV9zZXJ2ZXJOYW1lOworICAgIFFTb2NrZXROb3RpZmllciogbV9zb2Nr
ZXROb3RpZmllcjsKKyAgICBpbnQgbV9zb2NrZXREZXNjcmlwdG9yOwogI2VsaWYgUExBVEZPUk0o
R1RLKQogICAgIHZvaWQgcmVhZEV2ZW50SGFuZGxlcigpOwogICAgIHZvaWQgcHJvY2Vzc0NvbXBs
ZXRlZE1lc3NhZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvcXQvQ29ubmVjdGlvblF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMv
cXQvQ29ubmVjdGlvblF0LmNwcAppbmRleCBjMDczNmI4Li41YjExM2Q0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25RdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3BwCkBAIC0y
OSwxMTMgKzI5LDMwOCBAQAogI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgogI2luY2x1ZGUg
IlByb2Nlc3NMYXVuY2hlci5oIgogI2luY2x1ZGUgIldvcmtJdGVtLmgiCisjaW5jbHVkZSAiU2hh
cmVkTWVtb3J5LmgiCiAjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFMb2NhbFNl
cnZlcj4KLSNpbmNsdWRlIDxRTG9jYWxTb2NrZXQ+CisjaW5jbHVkZSA8UVNvY2tldE5vdGlmaWVy
PgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRl
IDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8UVRocmVhZD4KKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3Bh
Y2UgQ29yZUlQQyB7CiAKLS8vIFRoaXMgaXMgd2hhdCBvdGhlciBwb3J0cyB1c2UuLi4KIHN0YXRp
YyBjb25zdCBzaXplX3QgbWVzc2FnZU1heFNpemUgPSA0MDk2Oworc3RhdGljIGNvbnN0IHNpemVf
dCBhdHRhY2htZW50TWF4TnVtID0gMjU1OworCitlbnVtIHsKKyAgICBNZXNzYWdlQm9keUlzT09M
ID0gMSA8PCAzMQorfTsKKworY2xhc3MgTWVzc2FnZUluZm8geworcHVibGljOgorICAgIE1lc3Nh
Z2VJbmZvKCkge30KKworICAgIE1lc3NhZ2VJbmZvKE1lc3NhZ2VJRCBtZXNzYWdlSUQsIHNpemVf
dCBib2R5U2l6ZSwgc2l6ZV90IGluaXRpYWxBdHRhY2htZW50Q291bnQpCisgICAgICAgIDogbV9t
ZXNzYWdlSUQobWVzc2FnZUlELnRvSW50KCkpCisgICAgICAgICwgbV9ib2R5U2l6ZShib2R5U2l6
ZSkKKyAgICAgICAgLCBtX2F0dGFjaG1lbnRDb3VudChpbml0aWFsQXR0YWNobWVudENvdW50KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCEobV9tZXNzYWdlSUQgJiBNZXNzYWdlQm9keUlzT09MKSk7
CisgICAgfQorCisgICAgdm9pZCBzZXRNZXNzYWdlQm9keU9PTCgpCisgICAgeworICAgICAgICBB
U1NFUlQoIWlzTWVzc2FnZUJvZHlPT0woKSk7CisKKyAgICAgICAgbV9tZXNzYWdlSUQgfD0gTWVz
c2FnZUJvZHlJc09PTDsKKyAgICAgICAgbV9hdHRhY2htZW50Q291bnQrKzsKKyAgICB9CisKKyAg
ICBib29sIGlzTWVzc2FnZUJvZHlPT0woKSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2VJRCAmIE1l
c3NhZ2VCb2R5SXNPT0w7IH0KKworICAgIHNpemVfdCBib2R5U2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYm9keVNpemU7IH0KKworICAgIE1lc3NhZ2VJRCBtZXNzYWdlSUQoKSBjb25zdCB7IHJldHVy
biBNZXNzYWdlSUQ6OmZyb21JbnQobV9tZXNzYWdlSUQgJiB+TWVzc2FnZUJvZHlJc09PTCk7IH0K
KworICAgIHNpemVfdCBhdHRhY2htZW50Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2F0dGFjaG1l
bnRDb3VudDsgfQorCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1fbWVzc2FnZUlEOworICAgIHNp
emVfdCBtX2JvZHlTaXplOworICAgIHNpemVfdCBtX2F0dGFjaG1lbnRDb3VudDsKK307CiAKIHZv
aWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1Jbml0aWFsaXplKElkZW50aWZpZXIgaWRlbnRpZmllcikK
IHsKLSAgICBtX3NlcnZlck5hbWUgPSBpZGVudGlmaWVyOwotICAgIG1fc29ja2V0ID0gMDsKKyAg
ICBtX3NvY2tldERlc2NyaXB0b3IgPSBpZGVudGlmaWVyOworICAgIG1fc29ja2V0Tm90aWZpZXIg
PSAwOwogICAgIG1fcmVhZEJ1ZmZlci5yZXNpemUobWVzc2FnZU1heFNpemUpOwogICAgIG1fY3Vy
cmVudE1lc3NhZ2VTaXplID0gMDsKIH0KIAogdm9pZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUludmFs
aWRhdGUoKQogewotICAgIG1fc29ja2V0LT5kaXNjb25uZWN0KCk7Ci0gICAgaWYgKCFtX2lzU2Vy
dmVyKQotICAgICAgICBtX3NvY2tldC0+ZGVsZXRlTGF0ZXIoKTsKLSAgICBtX3NvY2tldCA9IDA7
CisgICAgaWYgKG1fc29ja2V0RGVzY3JpcHRvciAhPSAtMSkKKyAgICAgICAgY2xvc2UobV9zb2Nr
ZXREZXNjcmlwdG9yKTsKKworICAgIGlmICghbV9pc0Nvbm5lY3RlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZGVsZXRlIG1fc29ja2V0Tm90aWZpZXI7CisgICAgbV9zb2NrZXROb3RpZmllciA9
IDA7CisgICAgbV9zb2NrZXREZXNjcmlwdG9yID0gLTE7CisgICAgbV9pc0Nvbm5lY3RlZCA9IGZh
bHNlOwogfQogCitjbGFzcyBTb2NrZXROb3RpZmllckRpc2FibGVHdWFyZCB7CitwdWJsaWM6Cisg
ICAgU29ja2V0Tm90aWZpZXJEaXNhYmxlR3VhcmQoUVNvY2tldE5vdGlmaWVyKiBzb2NrZXROb3Rp
ZmllcikKKyAgICAgICAgOiBtX3NvY2tldE5vdGlmaWVyKHNvY2tldE5vdGlmaWVyKQorICAgIHsK
KyAgICAgICAgbV9zb2NrZXROb3RpZmllci0+c2V0RW5hYmxlZChmYWxzZSk7CisgICAgfQorICAg
IH5Tb2NrZXROb3RpZmllckRpc2FibGVHdWFyZCgpCisgICAgeworICAgICAgICBtX3NvY2tldE5v
dGlmaWVyLT5zZXRFbmFibGVkKHRydWUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBRU29ja2V0
Tm90aWZpZXIqIGNvbnN0IG1fc29ja2V0Tm90aWZpZXI7Cit9OworCiB2b2lkIENvbm5lY3Rpb246
OnJlYWR5UmVhZEhhbmRsZXIoKQogewotICAgIHdoaWxlIChtX3NvY2tldC0+Ynl0ZXNBdmFpbGFi
bGUoKSkgewotICAgICAgICBpZiAoIW1fY3VycmVudE1lc3NhZ2VTaXplKSB7Ci0gICAgICAgICAg
ICBzaXplX3QgbnVtYmVyT2ZCeXRlc1JlYWQgPSBtX3NvY2tldC0+cmVhZChyZWludGVycHJldF9j
YXN0PGNoYXIqPihtX3JlYWRCdWZmZXIuZGF0YSgpKSwgc2l6ZW9mKHNpemVfdCkpOwotICAgICAg
ICAgICAgQVNTRVJUX1VOVVNFRChudW1iZXJPZkJ5dGVzUmVhZCwgbnVtYmVyT2ZCeXRlc1JlYWQp
OwotICAgICAgICAgICAgbV9jdXJyZW50TWVzc2FnZVNpemUgPSAqcmVpbnRlcnByZXRfY2FzdDxz
aXplX3QqPihtX3JlYWRCdWZmZXIuZGF0YSgpKTsKLSAgICAgICAgfQorICAgIFNvY2tldE5vdGlm
aWVyRGlzYWJsZUd1YXJkIHNvY2tldE5vdGlmaWVyRGlzYWJsZWQobV9zb2NrZXROb3RpZmllcik7
CisKKyAgICBjaGFyIGF0dGFjaG1lbnREZXNjcmlwdG9yQnVmZmVyW0NNU0dfU1BBQ0Uoc2l6ZW9m
KGludCkgKiAoYXR0YWNobWVudE1heE51bSkpXTsKKyAgICBzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2U7
CisgICAgbWVtc2V0KCZtZXNzYWdlLCAwLCBzaXplb2YobWVzc2FnZSkpOworCisgICAgc3RydWN0
IGlvdmVjIGlvdlsxXTsKKyAgICBtZW1zZXQoJmlvdiwgMCwgc2l6ZW9mKGlvdikpOworCisgICAg
bWVzc2FnZS5tc2dfY29udHJvbCA9IGF0dGFjaG1lbnREZXNjcmlwdG9yQnVmZmVyOworICAgIG1l
c3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBDTVNHX1NQQUNFKHNpemVvZihpbnQpICogKGF0dGFjaG1l
bnRNYXhOdW0pKTsKKworICAgIGlvdlswXS5pb3ZfYmFzZSA9IG1fcmVhZEJ1ZmZlci5kYXRhKCk7
CisgICAgaW92WzBdLmlvdl9sZW4gPSBtX3JlYWRCdWZmZXIuc2l6ZSgpOwogCi0gICAgICAgIGlm
IChtX3NvY2tldC0+Ynl0ZXNBdmFpbGFibGUoKSA8IG1fY3VycmVudE1lc3NhZ2VTaXplKQorICAg
IG1lc3NhZ2UubXNnX2lvdiA9IGlvdjsKKyAgICBtZXNzYWdlLm1zZ19pb3ZsZW4gPSAxOworCisK
KyAgICBpbnQgbWVzc2FnZUxlbmd0aCA9IDA7CisgICAgd2hpbGUgKChtZXNzYWdlTGVuZ3RoID0g
cmVjdm1zZyhtX3NvY2tldERlc2NyaXB0b3IsICZtZXNzYWdlLCBNU0dfQ01TR19DTE9FWEVDKSkg
PT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKQogICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHN0cnVjdCBjbXNnaGRyICpjb250cm9sTWVzc2FnZSA9IENNU0dfRklS
U1RIRFIoJm1lc3NhZ2UpOworCisgICAgTWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisKKworICAg
IHVuc2lnbmVkIGNoYXIqIG1lc3NhZ2VEYXRhID0gbV9yZWFkQnVmZmVyLmRhdGEoKTsKKworICAg
IG1lbWNweSgmbWVzc2FnZUluZm8sIG1lc3NhZ2VEYXRhLCBzaXplb2YobWVzc2FnZUluZm8pKTsK
KyAgICBBU1NFUlQobWVzc2FnZUxlbmd0aCA9PSBzaXplb2YobWVzc2FnZUluZm8pICsgbWVzc2Fn
ZUluZm8uYXR0YWNobWVudENvdW50KCkgKiBzaXplb2Yoc2l6ZV90KSArIChtZXNzYWdlSW5mby5p
c01lc3NhZ2VCb2R5T09MKCkgPyAwIDogbWVzc2FnZUluZm8uYm9keVNpemUoKSkpOworCisgICAg
bWVzc2FnZURhdGEgKz0gc2l6ZW9mKG1lc3NhZ2VJbmZvKTsKKworICAgIFJlZlB0cjxXZWJLaXQ6
OlNoYXJlZE1lbW9yeT4gb29sTWVzc2FnZUJvZHk7CisKKyAgICBEZXF1ZTxBdHRhY2htZW50PiBh
dHRhY2htZW50czsKKyAgICBpZiAobWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50KCkpIHsKKyAg
ICAgICAgaWYgKGNvbnRyb2xNZXNzYWdlICYmIGNvbnRyb2xNZXNzYWdlLT5jbXNnX2xldmVsID09
IFNPTF9TT0NLRVQgJiYgY29udHJvbE1lc3NhZ2UtPmNtc2dfdHlwZSA9PSBTQ01fUklHSFRTKSB7
CisgICAgICAgICAgICBzaXplX3QgYXR0YWNobWVudFNpemVzW21lc3NhZ2VJbmZvLmF0dGFjaG1l
bnRDb3VudCgpXTsKKyAgICAgICAgICAgIG1lbWNweShhdHRhY2htZW50U2l6ZXMsIG1lc3NhZ2VE
YXRhLCBzaXplb2YoYXR0YWNobWVudFNpemVzKSk7CisKKyAgICAgICAgICAgIG1lc3NhZ2VEYXRh
ICs9IHNpemVvZihhdHRhY2htZW50U2l6ZXMpOworCisgICAgICAgICAgICBpbnQgZmlsZURlc2Ny
aXB0b3JzW21lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpXTsKKyAgICAgICAgICAgIG1lbWNw
eShmaWxlRGVzY3JpcHRvcnMsIENNU0dfREFUQShjb250cm9sTWVzc2FnZSksIHNpemVvZihmaWxl
RGVzY3JpcHRvcnMpKTsKIAotICAgICAgICBpZiAobV9yZWFkQnVmZmVyLnNpemUoKSA8IG1fY3Vy
cmVudE1lc3NhZ2VTaXplKQotICAgICAgICAgICAgbV9yZWFkQnVmZmVyLmdyb3cobV9jdXJyZW50
TWVzc2FnZVNpemUpOworICAgICAgICAgICAgaW50IGF0dGFjaG1lbnRDb3VudCA9IG1lc3NhZ2VJ
bmZvLmF0dGFjaG1lbnRDb3VudCgpOwogCi0gICAgICAgIHNpemVfdCBudW1iZXJPZkJ5dGVzUmVh
ZCA9IG1fc29ja2V0LT5yZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fcmVhZEJ1ZmZlci5k
YXRhKCkpLCBtX2N1cnJlbnRNZXNzYWdlU2l6ZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQobnVt
YmVyT2ZCeXRlc1JlYWQsIG51bWJlck9mQnl0ZXNSZWFkKTsKKyAgICAgICAgICAgIGlmIChtZXNz
YWdlSW5mby5pc01lc3NhZ2VCb2R5T09MKCkpCisgICAgICAgICAgICAgICAgYXR0YWNobWVudENv
dW50LS07CiAKLSAgICAgICAgLy8gVGhlIG1lc3NhZ2VJRCBpcyBlbmNvZGVkIGF0IHRoZSBlbmQg
b2YgdGhlIGJ1ZmZlci4KLSAgICAgICAgc2l6ZV90IHJlYWxCdWZmZXJTaXplID0gbV9jdXJyZW50
TWVzc2FnZVNpemUgLSBzaXplb2YodWludDMyX3QpOwotICAgICAgICB1aW50MzJfdCBtZXNzYWdl
SUQgPSAqcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KG1fcmVhZEJ1ZmZlci5kYXRhKCkgKyBy
ZWFsQnVmZmVyU2l6ZSk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dGFjaG1l
bnRDb3VudDsgKytpKQorICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLmFwcGVuZChBdHRhY2ht
ZW50KGZpbGVEZXNjcmlwdG9yc1tpXSwgYXR0YWNobWVudFNpemVzW2ldKSk7CiAKLSAgICAgICAg
cHJvY2Vzc0luY29taW5nTWVzc2FnZShNZXNzYWdlSUQ6OmZyb21JbnQobWVzc2FnZUlEKSwgYWRv
cHRQdHIobmV3IEFyZ3VtZW50RGVjb2RlcihtX3JlYWRCdWZmZXIuZGF0YSgpLCByZWFsQnVmZmVy
U2l6ZSkpKTsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlSW5mby5pc01lc3NhZ2VCb2R5T09MKCkp
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobWVzc2FnZUluZm8uYm9keVNpemUoKSk7CiAKLSAg
ICAgICAgbV9jdXJyZW50TWVzc2FnZVNpemUgPSAwOworICAgICAgICAgICAgICAgIFdlYktpdDo6
U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOworICAgICAgICAgICAgICAgIGhhbmRsZS5hZG9w
dEZyb21BdHRhY2htZW50KGZpbGVEZXNjcmlwdG9yc1thdHRhY2htZW50Q291bnRdLCBhdHRhY2ht
ZW50U2l6ZXNbYXR0YWNobWVudENvdW50XSk7CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5p
c051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIG9vbE1lc3NhZ2VCb2R5ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5k
bGUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CisgICAgICAgICAgICAgICAgaWYg
KCFvb2xNZXNzYWdlQm9keSkgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udHJvbE1lc3NhZ2UgPSBDTVNHX05YVEhEUigm
bWVzc2FnZSwgY29udHJvbE1lc3NhZ2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAg
ICB9CisKKyAgICBBU1NFUlQoYXR0YWNobWVudHMuc2l6ZSgpID09IG1lc3NhZ2VJbmZvLmlzTWVz
c2FnZUJvZHlPT0woKSA/IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpIC0gMSA6IG1lc3Nh
Z2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpKTsKKworICAgIHVuc2lnbmVkIGNoYXIqIG1lc3NhZ2VC
b2R5ID0gbWVzc2FnZURhdGE7CisKKyAgICBpZiAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9P
TCgpKQorICAgICAgICBtZXNzYWdlQm9keSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG9vbE1lc3NhZ2VCb2R5LT5kYXRhKCkpOworCisgICAgQXJndW1lbnREZWNvZGVyKiBhcmd1
bWVudERlY29kZXI7CisgICAgaWYgKGF0dGFjaG1lbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgYXJn
dW1lbnREZWNvZGVyID0gbmV3IEFyZ3VtZW50RGVjb2RlcihtZXNzYWdlQm9keSwgbWVzc2FnZUlu
Zm8uYm9keVNpemUoKSk7CisgICAgZWxzZQorICAgICAgICBhcmd1bWVudERlY29kZXIgPSBuZXcg
QXJndW1lbnREZWNvZGVyKG1lc3NhZ2VCb2R5LCBtZXNzYWdlSW5mby5ib2R5U2l6ZSgpLCBhdHRh
Y2htZW50cyk7CisKKyAgICBwcm9jZXNzSW5jb21pbmdNZXNzYWdlKG1lc3NhZ2VJbmZvLm1lc3Nh
Z2VJRCgpLCBhZG9wdFB0cihhcmd1bWVudERlY29kZXIpKTsKKworICAgIEFTU0VSVCghY29udHJv
bE1lc3NhZ2UpOwogfQogCiBib29sIENvbm5lY3Rpb246Om9wZW4oKQogewotICAgIEFTU0VSVCgh
bV9zb2NrZXQpOwotCi0gICAgaWYgKG1faXNTZXJ2ZXIpIHsKLSAgICAgICAgbV9zb2NrZXQgPSBX
ZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6dGFrZVBlbmRpbmdDb25uZWN0aW9uKCk7Ci0gICAgICAg
IG1faXNDb25uZWN0ZWQgPSBtX3NvY2tldDsKLSAgICAgICAgaWYgKG1faXNDb25uZWN0ZWQpIHsK
LSAgICAgICAgICAgIG1fY29ubmVjdGlvblF1ZXVlLm1vdmVTb2NrZXRUb1dvcmtUaHJlYWQobV9z
b2NrZXQpOwotICAgICAgICAgICAgbV9jb25uZWN0aW9uUXVldWUuY29ubmVjdFNpZ25hbChtX3Nv
Y2tldCwgU0lHTkFMKHJlYWR5UmVhZCgpKSwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVj
dGlvbjo6cmVhZHlSZWFkSGFuZGxlcikpOworICAgIEFTU0VSVCghbV9zb2NrZXROb3RpZmllcik7
CisgICAgaW50IGZsYWdzID0gZmNudGwobV9zb2NrZXREZXNjcmlwdG9yLCBGX0dFVEZMLCAwKTsK
KyAgICB3aGlsZSAoZmNudGwobV9zb2NrZXREZXNjcmlwdG9yLCBGX1NFVEZMLCBmbGFncyB8IE9f
Tk9OQkxPQ0spID09IC0xKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgeworICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBtX3NvY2tldCA9IG5ldyBRTG9jYWxTb2Nr
ZXQoKTsKLSAgICAgICAgbV9zb2NrZXQtPmNvbm5lY3RUb1NlcnZlcihtX3NlcnZlck5hbWUpOwot
ICAgICAgICBtX2Nvbm5lY3Rpb25RdWV1ZS5tb3ZlU29ja2V0VG9Xb3JrVGhyZWFkKG1fc29ja2V0
KTsKLSAgICAgICAgbV9jb25uZWN0aW9uUXVldWUuY29ubmVjdFNpZ25hbChtX3NvY2tldCwgU0lH
TkFMKHJlYWR5UmVhZCgpKSwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6cmVh
ZHlSZWFkSGFuZGxlcikpOwotICAgICAgICBtX2Nvbm5lY3Rpb25RdWV1ZS5jb25uZWN0U2lnbmFs
KG1fc29ja2V0LCBTSUdOQUwoZGlzY29ubmVjdGVkKCkpLCBXb3JrSXRlbTo6Y3JlYXRlKHRoaXMs
ICZDb25uZWN0aW9uOjpjb25uZWN0aW9uRGlkQ2xvc2UpKTsKLSAgICAgICAgbV9pc0Nvbm5lY3Rl
ZCA9IG1fc29ja2V0LT53YWl0Rm9yQ29ubmVjdGVkKCk7CiAgICAgfQotICAgIHJldHVybiBtX2lz
Q29ubmVjdGVkOworCisgICAgbV9pc0Nvbm5lY3RlZCA9IHRydWU7CisgICAgbV9zb2NrZXROb3Rp
ZmllciA9IG1fY29ubmVjdGlvblF1ZXVlLnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKG1fc29j
a2V0RGVzY3JpcHRvciwgUVNvY2tldE5vdGlmaWVyOjpSZWFkLCBXb3JrSXRlbTo6Y3JlYXRlKHRo
aXMsICZDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVyKSk7CisKKyAgICAvLyBTY2hlZHVsZSBh
IGNhbGwgdG8gcmVhZHlSZWFkSGFuZGxlci4gRGF0YSBtYXkgaGF2ZSBhcnJpdmVkIGJlZm9yZSBp
bnN0YWxsYXRpb24gb2YgdGhlIHNpZ25hbAorICAgIC8vIGhhbmRsZXIuCisgICAgbV9jb25uZWN0
aW9uUXVldWUuc2NoZWR1bGVXb3JrKFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246
OnJlYWR5UmVhZEhhbmRsZXIpKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIENvbm5l
Y3Rpb246OnBsYXRmb3JtQ2FuU2VuZE91dGdvaW5nTWVzc2FnZXMoKSBjb25zdAogewotICAgIHJl
dHVybiBtX3NvY2tldDsKKyAgICByZXR1cm4gbV9zb2NrZXROb3RpZmllcjsKIH0KIAogYm9vbCBD
b25uZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlKE1lc3NhZ2VJRCBtZXNzYWdlSUQsIFBhc3NP
d25QdHI8QXJndW1lbnRFbmNvZGVyPiBhcmd1bWVudHMpCiB7Ci0gICAgQVNTRVJUKG1fc29ja2V0
KTsKKyAgICBBU1NFUlQobV9zb2NrZXROb3RpZmllcik7CisgICAgQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKE1lc3NhZ2VJbmZvKSArIGF0dGFjaG1lbnRNYXhOdW0gKiBzaXplb2Yoc2l6ZV90KSA8PSBt
ZXNzYWdlTWF4U2l6ZSwgQXR0YWNobWVudHNGaXRUb01lc3NhZ2VJbmxpbmUpOwogCi0gICAgLy8g
V2UgcHV0IHRoZSBtZXNzYWdlIElEIGxhc3QuCi0gICAgYXJndW1lbnRzLT5lbmNvZGVVSW50MzIo
bWVzc2FnZUlELnRvSW50KCkpOworICAgIFZlY3RvcjxBdHRhY2htZW50PiBhdHRhY2htZW50cyA9
IGFyZ3VtZW50cy0+cmVsZWFzZUF0dGFjaG1lbnRzKCk7CiAKLSAgICBzaXplX3QgYnVmZmVyU2l6
ZSA9IGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpOwotCi0gICAgLy8gV3JpdGUgbWVzc2FnZSBzaXpl
IGZpcnN0Ci0gICAgLy8gRklYTUU6IFNob3VsZCAganVzdCBkbyBhIHNpbmdsZSB3cml0ZS4KLSAg
ICBxaW50NjQgYnl0ZXNXcml0dGVuRm9yU2l6ZSA9IG1fc29ja2V0LT53cml0ZShyZWludGVycHJl
dF9jYXN0PGNoYXIqPigmYnVmZmVyU2l6ZSksIHNpemVvZihidWZmZXJTaXplKSk7Ci0gICAgaWYg
KGJ5dGVzV3JpdHRlbkZvclNpemUgIT0gc2l6ZW9mKGJ1ZmZlclNpemUpKSB7Ci0gICAgICAgIGNv
bm5lY3Rpb25EaWRDbG9zZSgpOworICAgIGlmIChhdHRhY2htZW50cy5zaXplKCkgPiAoYXR0YWNo
bWVudE1heE51bSAtIDEpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcWludDY0IGJ5dGVzV3JpdHRlbkZvckJ1ZmZl
ciA9IG1fc29ja2V0LT53cml0ZShyZWludGVycHJldF9jYXN0PGNoYXIqPihhcmd1bWVudHMtPmJ1
ZmZlcigpKSwgYXJndW1lbnRzLT5idWZmZXJTaXplKCkpOwotICAgIGlmIChieXRlc1dyaXR0ZW5G
b3JCdWZmZXIgIT0gYXJndW1lbnRzLT5idWZmZXJTaXplKCkpIHsKLSAgICAgICAgY29ubmVjdGlv
bkRpZENsb3NlKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBNZXNzYWdlSW5mbyBtZXNz
YWdlSW5mbyhtZXNzYWdlSUQsIGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpLCBhdHRhY2htZW50cy5z
aXplKCkpOworICAgIHNpemVfdCBtZXNzYWdlU2l6ZVdpdGhCb2R5SW5saW5lID0gc2l6ZW9mKG1l
c3NhZ2VJbmZvKSArIChhdHRhY2htZW50cy5zaXplKCkgKiBzaXplb2Yoc2l6ZV90KSkgKyBhcmd1
bWVudHMtPmJ1ZmZlclNpemUoKTsKKyAgICBpZiAobWVzc2FnZVNpemVXaXRoQm9keUlubGluZSA+
IG1lc3NhZ2VNYXhTaXplICYmIGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpKSB7CisgICAgICAgIFJl
ZlB0cjxXZWJLaXQ6OlNoYXJlZE1lbW9yeT4gb29sTWVzc2FnZUJvZHkgPSBXZWJLaXQ6OlNoYXJl
ZE1lbW9yeTo6Y3JlYXRlKGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpKTsKKyAgICAgICAgaWYgKCFv
b2xNZXNzYWdlQm9keSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBXZWJL
aXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKKyAgICAgICAgaWYgKCFvb2xNZXNzYWdl
Qm9keS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OlJlYWRPbmx5
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtZXNzYWdlSW5mby5zZXRN
ZXNzYWdlQm9keU9PTCgpOworCisgICAgICAgIG1lbWNweShvb2xNZXNzYWdlQm9keS0+ZGF0YSgp
LCBhcmd1bWVudHMtPmJ1ZmZlcigpLCBhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSk7CisKKyAgICAg
ICAgYXR0YWNobWVudHMuYXBwZW5kKGhhbmRsZS5yZWxlYXNlVG9BdHRhY2htZW50KCkpOworICAg
IH0KKworICAgIHN0cnVjdCBtc2doZHIgbWVzc2FnZTsKKyAgICBtZW1zZXQoJm1lc3NhZ2UsIDAs
IHNpemVvZihtZXNzYWdlKSk7CisKKyAgICBzdHJ1Y3QgaW92ZWMgaW92WzNdOworICAgIG1lbXNl
dCgmaW92LCAwLCBzaXplb2YoaW92KSk7CisKKyAgICBtZXNzYWdlLm1zZ19pb3YgPSBpb3Y7Cisg
ICAgaW50IGlvdkxlbmd0aCA9IDE7CisKKyAgICBpb3ZbMF0uaW92X2Jhc2UgPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPigmbWVzc2FnZUluZm8pOworICAgIGlvdlswXS5pb3ZfbGVuID0gc2l6ZW9m
KG1lc3NhZ2VJbmZvKTsKKworCisgICAgY2hhciBhdHRhY2htZW50RkRCdWZmZXJbQ01TR19TUEFD
RShzaXplb2YoaW50KSAqIChhdHRhY2htZW50cy5zaXplKCkpKV07CisgICAgc2l6ZV90IGF0dGFj
aG1lbnRTaXplc1thdHRhY2htZW50cy5zaXplKCldOworCisgICAgaWYgKCFhdHRhY2htZW50cy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgbWVzc2FnZS5tc2dfY29udHJvbCA9IGF0dGFjaG1lbnRGREJ1
ZmZlcjsKKyAgICAgICAgbWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihhdHRhY2htZW50
RkRCdWZmZXIpOworCisgICAgICAgIHN0cnVjdCBjbXNnaGRyICpjbXNnID0gQ01TR19GSVJTVEhE
UigmbWVzc2FnZSk7CisgICAgICAgIGNtc2ctPmNtc2dfbGV2ZWwgPSBTT0xfU09DS0VUOworICAg
ICAgICBjbXNnLT5jbXNnX3R5cGUgPSBTQ01fUklHSFRTOworICAgICAgICBjbXNnLT5jbXNnX2xl
biA9IENNU0dfTEVOKHNpemVvZihpbnQpICogYXR0YWNobWVudHMuc2l6ZSgpKTsKKworICAgICAg
ICBpbnQqIGZkcHRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQqPihDTVNHX0RBVEEoY21zZykpOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dGFjaG1lbnRzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBhdHRhY2htZW50U2l6ZXNbaV0gPSBhdHRhY2htZW50c1tpXS5zaXplKCk7Cisg
ICAgICAgICAgICBmZHB0cltpXSA9IGF0dGFjaG1lbnRzW2ldLmZpbGVEZXNjcmlwdG9yKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gY21zZy0+Y21zZ19s
ZW47CisKKyAgICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2Jhc2UgPSBhdHRhY2htZW50U2l6ZXM7
CisgICAgICAgIGlvdltpb3ZMZW5ndGhdLmlvdl9sZW4gPSBzaXplb2YoYXR0YWNobWVudFNpemVz
KTsKKyAgICAgICAgKytpb3ZMZW5ndGg7CisgICAgfQorCisgICAgaWYgKCFtZXNzYWdlSW5mby5p
c01lc3NhZ2VCb2R5T09MKCkgJiYgYXJndW1lbnRzLT5idWZmZXJTaXplKCkpIHsKKyAgICAgICAg
aW92W2lvdkxlbmd0aF0uaW92X2Jhc2UgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihhcmd1bWVu
dHMtPmJ1ZmZlcigpKTsKKyAgICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2xlbiA9IGFyZ3VtZW50
cy0+YnVmZmVyU2l6ZSgpOworICAgICAgICArK2lvdkxlbmd0aDsKICAgICB9CiAKLSAgICBtX3Nv
Y2tldC0+Zmx1c2goKTsKKyAgICBtZXNzYWdlLm1zZ19pb3ZsZW4gPSBpb3ZMZW5ndGg7CiAKKyAg
ICBpbnQgYnl0ZXNTZW50ID0gMDsKKyAgICB3aGlsZSAoKGJ5dGVzU2VudCA9IHNlbmRtc2cobV9z
b2NrZXREZXNjcmlwdG9yLCAmbWVzc2FnZSwgMCkpID09IC0xKSB7CisgICAgICAgIGlmIChlcnJu
byAhPSBFSU5UUikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1l
bW9yeS5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKaW5kZXggMDVk
YzBkZC4uYmI2MTY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVk
TWVtb3J5LmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKQEAg
LTMxLDEwICszMSw3IEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogI2lmIFBMQVRG
T1JNKFFUKQotI2luY2x1ZGUgPFF0R2xvYmFsPgotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBR
U2hhcmVkTWVtb3J5OwotUVRfRU5EX05BTUVTUEFDRQorI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNlbmRpZgogCkBAIC02Miw2ICs1OSwx
MCBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rl
ciopIGNvbnN0OwogICAgICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnRE
ZWNvZGVyKiwgSGFuZGxlJik7CiAKKyNpZiBQTEFURk9STShRVCkKKyAgICAgICAgQ29yZUlQQzo6
QXR0YWNobWVudCByZWxlYXNlVG9BdHRhY2htZW50KCkgY29uc3Q7CisgICAgICAgIHZvaWQgYWRv
cHRGcm9tQXR0YWNobWVudChpbnQgZmlsZURlc2NyaXB0b3IsIHNpemVfdCk7CisjZW5kaWYKICAg
ICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgU2hhcmVkTWVtb3J5OwogI2lmIFBMQVRG
T1JNKE1BQykKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGljOgogI2VsaWYgUExBVEZPUk0oV0lOKQog
ICAgICAgICBtdXRhYmxlIEhBTkRMRSBtX2hhbmRsZTsKICNlbGlmIFBMQVRGT1JNKFFUKQotICAg
ICAgICBtdXRhYmxlIFN0cmluZyBtX2tleTsKKyAgICAgICAgbXV0YWJsZSBpbnQgbV9maWxlRGVz
Y3JpcHRvcjsKICNlbmRpZgogICAgICAgICBzaXplX3QgbV9zaXplOwogICAgIH07CkBAIC05Niw3
ICs5Nyw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIEhBTkRMRSBtX2hhbmRs
ZTsKICNlbGlmIFBMQVRGT1JNKFFUKQotICAgIFFTaGFyZWRNZW1vcnkqIG1faW1wbDsKKyAgICBp
bnQgbV9maWxlRGVzY3JpcHRvcjsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3Jr
UXVldWUuaAppbmRleCA3OGZhOGI3Li5jMmU4OGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3Jr
UXVldWUuaApAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lm
IFBMQVRGT1JNKFFUKQotY2xhc3MgUUxvY2FsU29ja2V0OworI2luY2x1ZGUgPFFTb2NrZXROb3Rp
Zmllcj4KIGNsYXNzIFFPYmplY3Q7CiBjbGFzcyBRVGhyZWFkOwogI2VsaWYgUExBVEZPUk0oR1RL
KQpAQCAtNzksMTAgKzc5LDggQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJIYW5kbGUoSEFO
RExFLCBQYXNzT3duUHRyPFdvcmtJdGVtPik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyQW5kQ2xvc2VI
YW5kbGUoSEFORExFKTsKICNlbGlmIFBMQVRGT1JNKFFUKQotICAgIHZvaWQgY29ubmVjdFNpZ25h
bChRT2JqZWN0KiwgY29uc3QgY2hhciogc2lnbmFsLCBQYXNzT3duUHRyPFdvcmtJdGVtPik7Ci0g
ICAgdm9pZCBkaXNjb25uZWN0U2lnbmFsKFFPYmplY3QqLCBjb25zdCBjaGFyKiBzaWduYWwpOwor
ICAgIFFTb2NrZXROb3RpZmllciogcmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50LCBRU29j
a2V0Tm90aWZpZXI6OlR5cGUsIFBhc3NPd25QdHI8V29ya0l0ZW0+KTsKIAotICAgIHZvaWQgbW92
ZVNvY2tldFRvV29ya1RocmVhZChRTG9jYWxTb2NrZXQqKTsKICNlbGlmIFBMQVRGT1JNKEdUSykK
ICAgICB2b2lkIHJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCwgaW50LCBQYXNzT3duUHRy
PFdvcmtJdGVtPik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29s
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzZkODJiLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgIk1hcHBlZE1lbW9yeVBvb2wuaCIKLQotI2luY2x1ZGUgIkNsZWFudXBIYW5kbGVyLmgi
Ci0jaW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCi0jaW5jbHVkZSA8UURpcj4KLSNpbmNsdWRlIDxR
SU9EZXZpY2U+Ci0jaW5jbHVkZSA8UVRlbXBvcmFyeUZpbGU+Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1NYXBwZWRNZW1vcnlQb29sKiBNYXBwZWRNZW1vcnlQb29sOjp0aGVJbnN0YW5jZSA9IDA7
Ci0KLU1hcHBlZE1lbW9yeVBvb2wqIE1hcHBlZE1lbW9yeVBvb2w6Omluc3RhbmNlKCkKLXsKLSAg
ICBpZiAoIXRoZUluc3RhbmNlKSB7Ci0gICAgICAgIHRoZUluc3RhbmNlID0gbmV3IE1hcHBlZE1l
bW9yeVBvb2w7Ci0KLSAgICAgICAgLy8gRG8gbm90IGxlYXZlIG1hcHBpbmcgZmlsZXMgb24gdGhl
IGRpc2suCi0gICAgICAgIENsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT5tYXJrRm9yQ2xlYW51
cCh0aGVJbnN0YW5jZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoZUluc3RhbmNlOwotfQotCi1N
YXBwZWRNZW1vcnlQb29sOjp+TWFwcGVkTWVtb3J5UG9vbCgpCi17Ci0gICAgQ2xlYW51cEhhbmRs
ZXI6Omluc3RhbmNlKCktPnVubWFyayh0aGVJbnN0YW5jZSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IG4gPSAwOyBuIDwgbV9wb29sLnNpemUoKTsgKytuKSB7Ci0gICAgICAgIE1hcHBlZE1lbW9yeSYg
Y3VycmVudCA9IG1fcG9vbC5hdChuKTsKLSAgICAgICAgaWYgKCFjdXJyZW50LmZpbGUpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY3VycmVudC5maWxlLT5yZW1vdmUoKTsKLSAgICAg
ICAgZGVsZXRlIGN1cnJlbnQuZmlsZTsKLSAgICB9Ci0gICAgbV9wb29sLmNsZWFyKCk7Ci19Ci0K
LU1hcHBlZE1lbW9yeSogTWFwcGVkTWVtb3J5UG9vbDo6bWFwTWVtb3J5KHNpemVfdCBzaXplKQot
ewotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBtX3Bvb2wuc2l6ZSgpOyArK24pIHsKLSAg
ICAgICAgTWFwcGVkTWVtb3J5JiBjdXJyZW50ID0gbV9wb29sLmF0KG4pOwotICAgICAgICBpZiAo
Y3VycmVudC5kYXRhU2l6ZSA+PSBzaXplICYmIGN1cnJlbnQuaXNGcmVlKCkpIHsKLSAgICAgICAg
ICAgIGN1cnJlbnQubWFya1VzZWQoKTsKLSAgICAgICAgICAgIHJldHVybiAmY3VycmVudDsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIE1hcHBlZE1lbW9yeSBuZXdNYXA7Ci0gICAgbmV3TWFwLmRh
dGFTaXplID0gc2l6ZTsKLSAgICBuZXdNYXAuZmlsZSA9IG5ldyBRVGVtcG9yYXJ5RmlsZShRRGly
Ojp0ZW1wUGF0aCgpICsgIi9XZWJLaXQyVXBkYXRlQ2h1bmsiKTsKLSAgICBuZXdNYXAuZmlsZS0+
b3BlbihRSU9EZXZpY2U6OlJlYWRXcml0ZSk7Ci0gICAgbmV3TWFwLmZpbGVOYW1lID0gbmV3TWFw
LmZpbGUtPmZpbGVOYW1lKCk7Ci0gICAgbmV3TWFwLmZpbGUtPnJlc2l6ZShuZXdNYXAubWFwU2l6
ZSgpKTsKLSAgICBuZXdNYXAubWFwcGVkQnl0ZXMgPSBuZXdNYXAuZmlsZS0+bWFwKDAsIG5ld01h
cC5tYXBTaXplKCkpOwotICAgIG5ld01hcC5maWxlLT5jbG9zZSgpOwotICAgIG5ld01hcC5tYXJr
VXNlZCgpOwotICAgIG1fcG9vbC5hcHBlbmQobmV3TWFwKTsKLSAgICByZXR1cm4gJm1fcG9vbC5s
YXN0KCk7Ci19Ci0KLU1hcHBlZE1lbW9yeSogTWFwcGVkTWVtb3J5UG9vbDo6bWFwRmlsZShRU3Ry
aW5nIGZpbGVOYW1lLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBu
IDwgbV9wb29sLnNpemUoKTsgKytuKSB7Ci0gICAgICAgIE1hcHBlZE1lbW9yeSYgY3VycmVudCA9
IG1fcG9vbC5hdChuKTsKLSAgICAgICAgaWYgKGN1cnJlbnQuZmlsZU5hbWUgPT0gZmlsZU5hbWUp
IHsKLSAgICAgICAgICAgIEFTU0VSVCghY3VycmVudC5pc0ZyZWUoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gJmN1cnJlbnQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBNYXBwZWRNZW1vcnkgbmV3
TWFwOwotICAgIG5ld01hcC5maWxlID0gbmV3IFFGaWxlKGZpbGVOYW1lKTsKLSAgICBuZXdNYXAu
ZmlsZU5hbWUgPSBmaWxlTmFtZTsKLSAgICBuZXdNYXAuZGF0YVNpemUgPSBzaXplOwotICAgIEFT
U0VSVChuZXdNYXAuZmlsZS0+ZXhpc3RzKCkpOwotICAgIEFTU0VSVChuZXdNYXAuZmlsZS0+c2l6
ZSgpID49IG5ld01hcC5tYXBTaXplKCkpOwotICAgIG5ld01hcC5maWxlLT5vcGVuKFFJT0Rldmlj
ZTo6UmVhZFdyaXRlKTsKLSAgICBuZXdNYXAubWFwcGVkQnl0ZXMgPSBuZXdNYXAuZmlsZS0+bWFw
KDAsIG5ld01hcC5tYXBTaXplKCkpOwotICAgIEFTU0VSVChuZXdNYXAubWFwcGVkQnl0ZXMpOwot
ICAgIEFTU0VSVCghbmV3TWFwLmlzRnJlZSgpKTsKLSAgICBuZXdNYXAuZmlsZS0+Y2xvc2UoKTsK
LSAgICBtX3Bvb2wuYXBwZW5kKG5ld01hcCk7Ci0gICAgcmV0dXJuICZtX3Bvb2wubGFzdCgpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0
L01hcHBlZE1lbW9yeVBvb2wuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ2YWY4
Yy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQ
b29sLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBNYXBwZWRNZW1vcnlQb29sX2gKLSNkZWZpbmUgTWFwcGVkTWVtb3J5UG9vbF9oCi0KLSNpbmNs
dWRlIDxRRmlsZT4KLSNpbmNsdWRlIDxRT2JqZWN0PgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBNYXBwZWRNZW1vcnlQb29sOwotCi1zdHJ1Y3QgTWFwcGVkTWVtb3J5IHsKLQotICAgIFFT
dHJpbmcgbWFwcGVkRmlsZU5hbWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGZpbGUp
OwotICAgICAgICBBU1NFUlQobWFwcGVkQnl0ZXMpOwotICAgICAgICByZXR1cm4gZmlsZU5hbWU7
Ci0gICAgfQotCi0gICAgdm9pZCBtYXJrRnJlZSgpCi0gICAgewotICAgICAgICBBU1NFUlQobWFw
cGVkQnl0ZXMpOwotICAgICAgICBkYXRhUHRyLT5pc0ZyZWUgPSB0cnVlOwotICAgIH0KLQotICAg
IHVjaGFyKiBkYXRhKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtYXBwZWRCeXRlcyk7
Ci0gICAgICAgIHJldHVybiBkYXRhUHRyLT5ieXRlczsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
ZnJpZW5kIGNsYXNzIE1hcHBlZE1lbW9yeVBvb2w7Ci0KLSAgICBNYXBwZWRNZW1vcnkoKQotICAg
ICAgICA6IGZpbGUoMCkKLSAgICAgICAgLCBtYXBwZWRCeXRlcygwKQotICAgICAgICAsIGRhdGFT
aXplKDApCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgbWFya1VzZWQoKSB7IGRhdGFQdHItPmlz
RnJlZSA9IGZhbHNlOyB9Ci0KLSAgICBzaXplX3QgbWFwU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGRh
dGFTaXplICsgc2l6ZW9mKERhdGEpOyB9Ci0gICAgYm9vbCBpc0ZyZWUoKSBjb25zdCB7IHJldHVy
biBkYXRhUHRyLT5pc0ZyZWU7IH0KLQotICAgIHN0cnVjdCBEYXRhIHsKLSAgICAgICAgdWludDMy
X3QgaXNGcmVlOyAvLyBrZWVwIGJ5dGVzIGFsaWduZWQKLSAgICAgICAgdWNoYXIgYnl0ZXNbXTsK
LSAgICB9OwotCi0gICAgUUZpbGUqIGZpbGU7Ci0gICAgUVN0cmluZyBmaWxlTmFtZTsKLSAgICB1
bmlvbiB7Ci0gICAgICAgIHVjaGFyKiBtYXBwZWRCeXRlczsKLSAgICAgICAgRGF0YSogZGF0YVB0
cjsKLSAgICB9OwotICAgIHNpemVfdCBkYXRhU2l6ZTsKLX07Ci0KLWNsYXNzIE1hcHBlZE1lbW9y
eVBvb2wgOiBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAotcHVibGljOgotICAgIHN0YXRpYyBNYXBw
ZWRNZW1vcnlQb29sKiBpbnN0YW5jZSgpOwotCi0gICAgTWFwcGVkTWVtb3J5KiBtYXBNZW1vcnko
c2l6ZV90IHNpemUpOwotICAgIE1hcHBlZE1lbW9yeSogbWFwRmlsZShRU3RyaW5nIGZpbGVOYW1l
LCBzaXplX3Qgc2l6ZSk7Ci0KLXByaXZhdGU6Ci0gICAgTWFwcGVkTWVtb3J5UG9vbCgpIHsgfQot
ICAgIH5NYXBwZWRNZW1vcnlQb29sKCk7Ci0KLSAgICBzdGF0aWMgTWFwcGVkTWVtb3J5UG9vbCog
dGhlSW5zdGFuY2U7Ci0KLSAgICBWZWN0b3I8TWFwcGVkTWVtb3J5PiBtX3Bvb2w7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIE1hcHBlZE1lbW9yeVBvb2xfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCmluZGV4IGY1ZmVj
ZmMuLjczMDg1NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJl
ZE1lbW9yeVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1v
cnlRdC5jcHAKQEAgLTI5LDEzOSArMjksMTgyIEBACiAKICNpbmNsdWRlICJBcmd1bWVudERlY29k
ZXIuaCIKICNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKLSNpbmNsdWRlICJDbGVhbnVwSGFu
ZGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFFE
aXI+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0
ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNp
bmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxRQ29y
ZUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFMYXRpbjFTdHJpbmc+Ci0jaW5jbHVkZSA8UVNoYXJl
ZE1lbW9yeT4KLSNpbmNsdWRlIDxRU3RyaW5nPgotI2luY2x1ZGUgPFFVdWlkPgogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6SGFuZGxlKCkKLSAgICA6IG1f
a2V5KCkKKyAgICA6IG1fZmlsZURlc2NyaXB0b3IoLTEpCiAgICAgLCBtX3NpemUoMCkKIHsKIH0K
IAogU2hhcmVkTWVtb3J5OjpIYW5kbGU6On5IYW5kbGUoKQogeworICAgIGlmICghaXNOdWxsKCkp
CisgICAgICAgIGNsb3NlKG1fZmlsZURlc2NyaXB0b3IpOwogfQogCiBib29sIFNoYXJlZE1lbW9y
eTo6SGFuZGxlOjppc051bGwoKSBjb25zdAogewotICAgIHJldHVybiBtX2tleS5pc051bGwoKTsK
KyAgICByZXR1cm4gbV9maWxlRGVzY3JpcHRvciA9PSAtMTsKIH0KIAogdm9pZCBTaGFyZWRNZW1v
cnk6OkhhbmRsZTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29u
c3QKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGVVSW50NjQobV9zaXplKTsKLSAgICBlbmNvZGVyLT5l
bmNvZGUobV9rZXkpOwotICAgIG1fa2V5ID0gU3RyaW5nKCk7CisgICAgQVNTRVJUKCFpc051bGwo
KSk7CisKKyAgICBlbmNvZGVyLT5lbmNvZGUocmVsZWFzZVRvQXR0YWNobWVudCgpKTsKIH0KIAog
Ym9vbCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rl
ciogZGVjb2RlciwgSGFuZGxlJiBoYW5kbGUpCiB7CiAgICAgQVNTRVJUX0FSRyhoYW5kbGUsICFo
YW5kbGUubV9zaXplKTsKLSAgICBBU1NFUlRfQVJHKGhhbmRsZSwgaGFuZGxlLm1fa2V5LmlzTnVs
bCgpKTsKKyAgICBBU1NFUlRfQVJHKGhhbmRsZSwgaGFuZGxlLmlzTnVsbCgpKTsKIAotICAgIHVp
bnQ2NF90IHNpemU7Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50NjQoc2l6ZSkpCisgICAg
Q29yZUlQQzo6QXR0YWNobWVudCBhdHRhY2htZW50OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2Rl
KGF0dGFjaG1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJpbmcga2V5Owot
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGtleSkpCi0gICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGhhbmRsZS5hZG9wdEZyb21BdHRhY2htZW50KGF0dGFjaG1lbnQucmVsZWFzZUZpbGVEZXNjcmlw
dG9yKCksIGF0dGFjaG1lbnQuc2l6ZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIGhh
bmRsZS5tX3NpemUgPSBzaXplOwotICAgIGhhbmRsZS5tX2tleSA9IGtleTsKK0NvcmVJUEM6OkF0
dGFjaG1lbnQgU2hhcmVkTWVtb3J5OjpIYW5kbGU6OnJlbGVhc2VUb0F0dGFjaG1lbnQoKSBjb25z
dAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgaW50
IHRlbXAgPSBtX2ZpbGVEZXNjcmlwdG9yOworICAgIG1fZmlsZURlc2NyaXB0b3IgPSAtMTsKKyAg
ICByZXR1cm4gQ29yZUlQQzo6QXR0YWNobWVudCh0ZW1wLCBtX3NpemUpOwogfQogCi1zdGF0aWMg
UVN0cmluZyBjcmVhdGVVbmlxdWVLZXkoKQordm9pZCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6YWRv
cHRGcm9tQXR0YWNobWVudChpbnQgZmlsZURlc2NyaXB0b3IsIHNpemVfdCBzaXplKQogewotICAg
IHJldHVybiBRTGF0aW4xU3RyaW5nKCJRV0tTaGFyZWRNZW1vcnlLZXkiKSArIFFVdWlkOjpjcmVh
dGVVdWlkKCkudG9TdHJpbmcoKTsKKyAgICBBU1NFUlQoIW1fc2l6ZSk7CisgICAgQVNTRVJUKGlz
TnVsbCgpKTsKKworICAgIG1fZmlsZURlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKKyAgICBt
X3NpemUgPSBzaXplOwogfQogCiBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5
OjpjcmVhdGUoc2l6ZV90IHNpemUpCiB7Ci0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVk
TWVtb3J5KGFkb3B0UmVmKG5ldyBTaGFyZWRNZW1vcnkpKTsKLSAgICBRU2hhcmVkTWVtb3J5KiBp
bXBsID0gbmV3IFFTaGFyZWRNZW1vcnkoY3JlYXRlVW5pcXVlS2V5KCkpOwotICAgIGJvb2wgY3Jl
YXRlZCA9IGltcGwtPmNyZWF0ZShzaXplKTsKLSAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNy
ZWF0ZWQpOworICAgIFFTdHJpbmcgdGVtcE5hbWUgPSBRRGlyOjp0ZW1wKCkuZmlsZVBhdGgoInF3
a3NobS5YWFhYWFgiKTsKKyAgICBRQnl0ZUFycmF5IHRlbXBOYW1lQ1NUUiA9IHRlbXBOYW1lLnRv
TG9jYWw4Qml0KCk7CisgICAgY2hhciogdGVtcE5hbWVDID0gdGVtcE5hbWVDU1RSLmRhdGEoKTsK
KworICAgIGludCBmaWxlRGVzY3JpcHRvcjsKKyAgICB3aGlsZSAoKGZpbGVEZXNjcmlwdG9yID0g
bWtvc3RlbXAodGVtcE5hbWVDLCBPX0NSRUFUIHwgT19DTE9FWEVDIHwgT19SRFdSKSkgPT0gLTEp
IHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQogCi0gICAgc2hhcmVkTWVtb3J5LT5tX2ltcGwgPSBpbXBsOwotICAgIHNoYXJlZE1lbW9y
eS0+bV9zaXplID0gc2l6ZTsKLSAgICBzaGFyZWRNZW1vcnktPm1fZGF0YSA9IGltcGwtPmRhdGEo
KTsKKyAgICB3aGlsZSAoZnRydW5jYXRlKGZpbGVEZXNjcmlwdG9yLCBzaXplKSA9PSAtMSkgewor
ICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsKKyAgICAgICAgICAgIGNsb3NlKGZpbGVEZXNj
cmlwdG9yKTsKKyAgICAgICAgICAgIHVubGluayh0ZW1wTmFtZUMpOworICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkKiBkYXRhID0gbW1hcCgwLCBzaXpl
LCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmaWxlRGVzY3JpcHRvciwgMCk7
CisgICAgaWYgKGRhdGEgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICBjbG9zZShmaWxlRGVzY3Jp
cHRvcik7CisgICAgICAgIHVubGluayh0ZW1wTmFtZUMpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CiAKLSAgICAvLyBEbyBub3QgbGVhdmUgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBiZWhp
bmQuCi0gICAgQ2xlYW51cEhhbmRsZXI6Omluc3RhbmNlKCktPm1hcmtGb3JDbGVhbnVwKGltcGwp
OworICAgIHVubGluayh0ZW1wTmFtZUMpOwogCi0gICAgcmV0dXJuIHNoYXJlZE1lbW9yeS5yZWxl
YXNlKCk7CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gaW5zdGFuY2UgPSBhZG9wdFJlZihuZXcg
U2hhcmVkTWVtb3J5KCkpOworICAgIGluc3RhbmNlLT5tX2RhdGEgPSBkYXRhOworICAgIGluc3Rh
bmNlLT5tX2ZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7CisgICAgaW5zdGFuY2UtPm1f
c2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIGluc3RhbmNlLnJlbGVhc2UoKTsKIH0KIAotc3RhdGlj
IGlubGluZSBRU2hhcmVkTWVtb3J5OjpBY2Nlc3NNb2RlIGFjY2Vzc01vZGUoU2hhcmVkTWVtb3J5
OjpQcm90ZWN0aW9uIHByb3RlY3Rpb24pCitzdGF0aWMgaW5saW5lIGludCBhY2Nlc3NNb2RlTU1h
cChTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb24gcHJvdGVjdGlvbikKIHsKICAgICBzd2l0Y2ggKHBy
b3RlY3Rpb24pIHsKICAgICBjYXNlIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHk6Ci0gICAgICAgIHJl
dHVybiBRU2hhcmVkTWVtb3J5OjpSZWFkT25seTsKKyAgICAgICAgcmV0dXJuIFBST1RfUkVBRDsK
ICAgICBjYXNlIFNoYXJlZE1lbW9yeTo6UmVhZFdyaXRlOgotICAgICAgICByZXR1cm4gUVNoYXJl
ZE1lbW9yeTo6UmVhZFdyaXRlOworICAgICAgICByZXR1cm4gUFJPVF9SRUFEIHwgUFJPVF9XUklU
RTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gUVNoYXJl
ZE1lbW9yeTo6UmVhZFdyaXRlOworICAgIHJldHVybiBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFOwog
fQogCiBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoY29uc3Qg
SGFuZGxlJiBoYW5kbGUsIFByb3RlY3Rpb24gcHJvdGVjdGlvbikKIHsKLSAgICBpZiAoaGFuZGxl
LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQoIWhhbmRsZS5pc051bGwo
KSk7CiAKLSAgICBRU2hhcmVkTWVtb3J5KiBpbXBsID0gbmV3IFFTaGFyZWRNZW1vcnkoUVN0cmlu
ZyhoYW5kbGUubV9rZXkpKTsKLSAgICBib29sIGF0dGFjaGVkID0gaW1wbC0+YXR0YWNoKGFjY2Vz
c01vZGUocHJvdGVjdGlvbikpOwotICAgIGlmICghYXR0YWNoZWQpIHsKLSAgICAgICAgZGVsZXRl
IGltcGw7CisgICAgdm9pZCogZGF0YSA9IG1tYXAoMCwgaGFuZGxlLm1fc2l6ZSwgYWNjZXNzTW9k
ZU1NYXAocHJvdGVjdGlvbiksIE1BUF9TSEFSRUQsIGhhbmRsZS5tX2ZpbGVEZXNjcmlwdG9yLCAw
KTsKKyAgICBpZiAoZGF0YSA9PSBNQVBfRkFJTEVEKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0KLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkoYWRvcHRSZWYobmV3IFNo
YXJlZE1lbW9yeSkpOwotICAgIHNoYXJlZE1lbW9yeS0+bV9pbXBsID0gaW1wbDsKLSAgICBBU1NF
UlQoaGFuZGxlLm1fc2l6ZSA9PSBpbXBsLT5zaXplKCkpOwotICAgIHNoYXJlZE1lbW9yeS0+bV9z
aXplID0gaGFuZGxlLm1fc2l6ZTsKLSAgICBzaGFyZWRNZW1vcnktPm1fZGF0YSA9IGltcGwtPmRh
dGEoKTsKIAotICAgIC8vIERvIG5vdCBsZWF2ZSB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IGJl
aGluZC4KLSAgICBDbGVhbnVwSGFuZGxlcjo6aW5zdGFuY2UoKS0+bWFya0ZvckNsZWFudXAoaW1w
bCk7Ci0KLSAgICByZXR1cm4gc2hhcmVkTWVtb3J5LnJlbGVhc2UoKTsKKyAgICBSZWZQdHI8U2hh
cmVkTWVtb3J5PiBpbnN0YW5jZSA9IGFkb3B0UmVmKG5ldyBTaGFyZWRNZW1vcnkoKSk7CisgICAg
aW5zdGFuY2UtPm1fZGF0YSA9IGRhdGE7CisgICAgaW5zdGFuY2UtPm1fZmlsZURlc2NyaXB0b3Ig
PSBoYW5kbGUubV9maWxlRGVzY3JpcHRvcjsKKyAgICBpbnN0YW5jZS0+bV9zaXplID0gaGFuZGxl
Lm1fc2l6ZTsKKyAgICBoYW5kbGUubV9maWxlRGVzY3JpcHRvciA9IC0xOworICAgIHJldHVybiBp
bnN0YW5jZTsKIH0KIAogU2hhcmVkTWVtb3J5Ojp+U2hhcmVkTWVtb3J5KCkKIHsKLSAgICBpZiAo
Q2xlYW51cEhhbmRsZXI6Omluc3RhbmNlKCktPmhhc1N0YXJ0ZWREZWxldGluZygpKQotICAgICAg
ICByZXR1cm47CisgICAgbXVubWFwKG1fZGF0YSwgbV9zaXplKTsKKyAgICBjbG9zZShtX2ZpbGVE
ZXNjcmlwdG9yKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYWNjZXNzTW9kZUZpbGUoU2hhcmVk
TWVtb3J5OjpQcm90ZWN0aW9uIHByb3RlY3Rpb24pCit7CisgICAgc3dpdGNoIChwcm90ZWN0aW9u
KSB7CisgICAgY2FzZSBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5OgorICAgICAgICByZXR1cm4gT19S
RE9OTFk7CisgICAgY2FzZSBTaGFyZWRNZW1vcnk6OlJlYWRXcml0ZToKKyAgICAgICAgcmV0dXJu
IE9fUkRXUjsKKyAgICB9CiAKLSAgICBDbGVhbnVwSGFuZGxlcjo6aW5zdGFuY2UoKS0+dW5tYXJr
KG1faW1wbCk7Ci0gICAgZGVsZXRlIG1faW1wbDsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gT19SRFdSOwogfQogCiBib29sIFNoYXJlZE1lbW9yeTo6Y3JlYXRlSGFuZGxl
KEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCiB7Ci0gICAgQVNTRVJUX0FS
RyhoYW5kbGUsIGhhbmRsZS5tX2tleS5pc051bGwoKSk7CiAgICAgQVNTRVJUX0FSRyhoYW5kbGUs
ICFoYW5kbGUubV9zaXplKTsKKyAgICBBU1NFUlRfQVJHKGhhbmRsZSwgaGFuZGxlLmlzTnVsbCgp
KTsKKworICAgIGludCBkdXBsaWNhdGVkSGFuZGxlOworICAgIHdoaWxlICgoZHVwbGljYXRlZEhh
bmRsZSA9IGR1cChtX2ZpbGVEZXNjcmlwdG9yKSkgPT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5v
ICE9IEVJTlRSKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIFFTdHJpbmcga2V5ID0g
bV9pbXBsLT5rZXkoKTsKLSAgICBpZiAoa2V5LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaGFuZGxlLm1fa2V5ID0gU3RyaW5nKGtleSk7Ci0gICAgaGFuZGxlLm1fc2l6ZSA9
IG1fc2l6ZTsKKyAgICB3aGlsZSAoKGZjbnRsKGR1cGxpY2F0ZWRIYW5kbGUsIEZfU0VURkQsICBP
X0NMT0VYRUMgfCBhY2Nlc3NNb2RlRmlsZShwcm90ZWN0aW9uKSkgPT0gLTEpKSB7CisgICAgICAg
IGlmIChlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICBjbG9zZShkdXBsaWNhdGVkSGFuZGxlKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KIAorICAgIGhhbmRsZS5tX2ZpbGVEZXNjcmlwdG9y
ID0gZHVwbGljYXRlZEhhbmRsZTsKKyAgICBoYW5kbGUubV9zaXplID0gbV9zaXplOwogICAgIHJl
dHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9X
b3JrUXVldWVRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5j
cHAKaW5kZXggMjcxOTg0Zi4uM2Q5YzQ2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vcXQvV29ya1F1ZXVlUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0
L1dvcmtRdWV1ZVF0LmNwcApAQCAtNzUsMzIgKzc1LDE3IEBAIHB1YmxpYzoKICAgICBXb3JrSXRl
bSogbV93b3JrSXRlbTsKIH07CiAKLXZvaWQgV29ya1F1ZXVlOjpjb25uZWN0U2lnbmFsKFFPYmpl
Y3QqIG8sIGNvbnN0IGNoYXIqIHNpZ25hbCwgUGFzc093blB0cjxXb3JrSXRlbT4gd29ya0l0ZW0p
Ci17Ci0gICAgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpX
b3JrSXRlbVF0KHRoaXMsIG8sIHNpZ25hbCwgd29ya0l0ZW0ubGVha1B0cigpKTsKLSAgICBpdGVt
UXQtPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOwotICAgIG1fc2lnbmFsTGlzdGVuZXJzLmFk
ZChvLCBpdGVtUXQpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzY29ubmVjdFNpZ25hbChRT2Jq
ZWN0KiBvLCBjb25zdCBjaGFyKiBuYW1lKQotewotICAgIEhhc2hNYXA8UU9iamVjdCosIFdvcmtJ
dGVtUXQqPjo6aXRlcmF0b3IgaXQgPSBtX3NpZ25hbExpc3RlbmVycy5maW5kKG8pOwotICAgIGZv
ciAoOyBpdCAhPSBtX3NpZ25hbExpc3RlbmVycy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAo
c3RyY21wKGl0LT5zZWNvbmQtPm1fc2lnbmFsLCBuYW1lKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKLSAgICAgICAgbV9zaWduYWxMaXN0ZW5lcnMu
cmVtb3ZlKGl0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBXb3JrUXVldWU6
Om1vdmVTb2NrZXRUb1dvcmtUaHJlYWQoUUxvY2FsU29ja2V0KiBzb2NrZXQpCitRU29ja2V0Tm90
aWZpZXIqIFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IHNvY2tldERl
c2NyaXB0b3IsIFFTb2NrZXROb3RpZmllcjo6VHlwZSB0eXBlLCBQYXNzT3duUHRyPFdvcmtJdGVt
PiB3b3JrSXRlbSkKIHsKICAgICBBU1NFUlQobV93b3JrVGhyZWFkKTsKLSAgICBBU1NFUlQoc29j
a2V0KTsKIAotICAgIHNvY2tldC0+c2V0UGFyZW50KDApOwotICAgIHNvY2tldC0+bW92ZVRvVGhy
ZWFkKG1fd29ya1RocmVhZCk7CisgICAgUVNvY2tldE5vdGlmaWVyKiBub3RpZmllciA9IG5ldyBR
U29ja2V0Tm90aWZpZXIoc29ja2V0RGVzY3JpcHRvciwgdHlwZSwgMCk7CisgICAgbm90aWZpZXIt
PnNldEVuYWJsZWQoZmFsc2UpOworICAgIG5vdGlmaWVyLT5tb3ZlVG9UaHJlYWQobV93b3JrVGhy
ZWFkKTsKKyAgICBXb3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6
OldvcmtJdGVtUXQodGhpcywgbm90aWZpZXIsIFNJR05BTChhY3RpdmF0ZWQoaW50KSksIHdvcmtJ
dGVtLmxlYWtQdHIoKSk7CisgICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsK
KyAgICBub3RpZmllci0+c2V0RW5hYmxlZCh0cnVlKTsKKyAgICByZXR1cm4gbm90aWZpZXI7CiB9
CiAKIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciopCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvVXBkYXRlQ2h1bmsuY3BwIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNwcAppbmRleCA0ZDhlNjJkLi4yZjliZTQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvVXBkYXRlQ2h1bmsuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHAKQEAgLTI5LDcgKzI5
LDYgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgogI2luY2x1ZGUgIkFyZ3VtZW50
RW5jb2Rlci5oIgotI2luY2x1ZGUgIk1hcHBlZE1lbW9yeVBvb2wuaCIKICNpbmNsdWRlICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxRSU9EZXZpY2U+CiAjaW5jbHVkZSA8UUlt
YWdlPgpAQCAtNDMsMjggKzQyLDM1IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogVXBkYXRlQ2h1bms6OlVwZGF0ZUNodW5rKCkKLSAgICA6IG1fbWFwcGVkTWVt
b3J5KDApCiB7CiB9CiAKIFVwZGF0ZUNodW5rOjpVcGRhdGVDaHVuayhjb25zdCBJbnRSZWN0JiBy
ZWN0KQogICAgIDogbV9yZWN0KHJlY3QpCi0gICAgLCBtX21hcHBlZE1lbW9yeShNYXBwZWRNZW1v
cnlQb29sOjppbnN0YW5jZSgpLT5tYXBNZW1vcnkoc2l6ZSgpKSkKKyAgICAsIG1fc2hhcmVkTWVt
b3J5KFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNpemUoKSkpCiB7CiB9CiAKIFVwZGF0ZUNodW5rOjp+
VXBkYXRlQ2h1bmsoKQogewotICAgIGlmIChtX21hcHBlZE1lbW9yeSkKLSAgICAgICAgbV9tYXBw
ZWRNZW1vcnktPm1hcmtGcmVlKCk7CiB9CiAKIHZvaWQgVXBkYXRlQ2h1bms6OmVuY29kZShDb3Jl
SVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2Rlci0+ZW5j
b2RlKG1fcmVjdCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKFN0cmluZyhtX21hcHBlZE1lbW9yeS0+
bWFwcGVkRmlsZU5hbWUoKSkpOworICAgIGlmICghbV9zaGFyZWRNZW1vcnkpIHsKKyAgICAgICAg
ZW5jb2Rlci0+ZW5jb2RlKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNo
YXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKKyAgICBpZiAobV9zaGFyZWRNZW1vcnktPmNyZWF0
ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpKSB7CisgICAgICAgIGVuY29k
ZXItPmVuY29kZSh0cnVlKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGhhbmRsZSk7CisgICAg
fSBlbHNlCisgICAgICAgIGVuY29kZXItPmVuY29kZShmYWxzZSk7CiAKLSAgICBtX21hcHBlZE1l
bW9yeSA9IDA7CisgICAgbV9zaGFyZWRNZW1vcnkgPSAwOwogfQogCiBib29sIFVwZGF0ZUNodW5r
OjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBVcGRhdGVDaHVuayYg
Y2h1bmspCkBAIC03NCwxNiArODAsMjMgQEAgYm9vbCBVcGRhdGVDaHVuazo6ZGVjb2RlKENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgVXBkYXRlQ2h1bmsmIGNodW5rKQogICAgIElu
dFJlY3QgcmVjdDsKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShyZWN0KSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOworCiAgICAgY2h1bmsubV9yZWN0ID0gcmVjdDsKIAotICAgIGlmIChjaHVuay5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOyAvLyBTdWNjZXNzZnVsbHkgZGVjb2RlZCBl
bXB0eSBjaHVuay4KKyAgICBib29sIGhhc1NoYXJlZE1lbW9yeTsKKyAgICBpZiAoIWRlY29kZXIt
PmRlY29kZShoYXNTaGFyZWRNZW1vcnkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBT
dHJpbmcgZmlsZU5hbWU7Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZmlsZU5hbWUpKQorICAg
IGlmICghaGFzU2hhcmVkTWVtb3J5KSB7CisgICAgICAgIGNodW5rLm1fc2hhcmVkTWVtb3J5ID0g
MDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgU2hhcmVkTWVtb3J5OjpIYW5k
bGUgaGFuZGxlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhbmRsZSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGNodW5rLm1fbWFwcGVkTWVtb3J5ID0gTWFwcGVkTWVtb3J5UG9v
bDo6aW5zdGFuY2UoKS0+bWFwRmlsZShmaWxlTmFtZSwgY2h1bmsuc2l6ZSgpKTsKKyAgICBjaHVu
ay5tX3NoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGhhbmRsZSwgU2hhcmVkTWVt
b3J5OjpSZWFkT25seSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEwMSw3ICsxMTQsMTAg
QEAgc2l6ZV90IFVwZGF0ZUNodW5rOjpzaXplKCkgY29uc3QKIAogUUltYWdlIFVwZGF0ZUNodW5r
OjpjcmVhdGVJbWFnZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1fbWFwcGVkTWVtb3J5KTsKKyAg
ICBBU1NFUlQobV9zaGFyZWRNZW1vcnkpOworICAgIGlmICghbV9zaGFyZWRNZW1vcnkpCisgICAg
ICAgIHJldHVybiBRSW1hZ2UoKTsKKwogICAgIFFJbWFnZTo6Rm9ybWF0IGZvcm1hdDsKICAgICBp
bnQgYnBwOwogICAgIGlmIChRUGl4bWFwOjpkZWZhdWx0RGVwdGgoKSA9PSAxNikgewpAQCAtMTEy
LDcgKzEyOCw3IEBAIFFJbWFnZSBVcGRhdGVDaHVuazo6Y3JlYXRlSW1hZ2UoKSBjb25zdAogICAg
ICAgICBicHAgPSA0OwogICAgIH0KIAotICAgIHJldHVybiBRSW1hZ2UobV9tYXBwZWRNZW1vcnkt
PmRhdGEoKSwgbV9yZWN0LndpZHRoKCksIG1fcmVjdC5oZWlnaHQoKSwgKG1fcmVjdC53aWR0aCgp
ICogYnBwICsgMykgJiB+MHgzLCBmb3JtYXQpOworICAgIHJldHVybiBRSW1hZ2UocmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4obV9zaGFyZWRNZW1vcnktPmRhdGEoKSksIG1fcmVjdC53
aWR0aCgpLCBtX3JlY3QuaGVpZ2h0KCksIChtX3JlY3Qud2lkdGgoKSAqIGJwcCArIDMpICYgfjB4
MywgZm9ybWF0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvcXQvVXBkYXRlQ2h1bmsuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9xdC9VcGRhdGVDaHVuay5oCmluZGV4IGY1MDZiYTcuLjY2NDA1NmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9VcGRhdGVDaHVuay5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9xdC9VcGRhdGVDaHVuay5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlIDxR
SW1hZ2U+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSAiU2hhcmVkTWVt
b3J5LmgiCiAKIG5hbWVzcGFjZSBDb3JlSVBDIHsKIGNsYXNzIEFyZ3VtZW50RW5jb2RlcjsKQEAg
LTM3LDggKzM4LDYgQEAgY2xhc3MgQXJndW1lbnREZWNvZGVyOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotY2xhc3MgTWFwcGVkTWVtb3J5OwotCiBjbGFzcyBVcGRhdGVDaHVuayB7CiBwdWJsaWM6
CiAgICAgVXBkYXRlQ2h1bmsoKTsKQEAgLTU4LDcgKzU3LDcgQEAgcHJpdmF0ZToKIAogICAgIFdl
YkNvcmU6OkludFJlY3QgbV9yZWN0OwogCi0gICAgbXV0YWJsZSBNYXBwZWRNZW1vcnkqIG1fbWFw
cGVkTWVtb3J5OworICAgIG11dGFibGUgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9zaGFyZWRNZW1v
cnk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaAppbmRleCAzMWVmZDRkLi43OWQx
MjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vz
c0xhdW5jaGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nl
c3NMYXVuY2hlci5oCkBAIC03MiwxMSArNzIsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9v
bCBnZXRQcm9jZXNzVHlwZUZyb21TdHJpbmcoY29uc3QgY2hhciosIFByb2Nlc3NUeXBlJik7CiAK
LSNpZiBQTEFURk9STShRVCkKLSAgICBmcmllbmQgY2xhc3MgUHJvY2Vzc0xhdW5jaGVySGVscGVy
OwotICAgIHN0YXRpYyBRTG9jYWxTb2NrZXQqIHRha2VQZW5kaW5nQ29ubmVjdGlvbigpOwotI2Vu
ZGlmCi0KIHByaXZhdGU6CiAgICAgUHJvY2Vzc0xhdW5jaGVyKENsaWVudCosIGNvbnN0IExhdW5j
aE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcAppbmRleCA3ZGZm
ODk0Li41YjAxMjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNo
ZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAKQEAgLTI3LDE3ICsyNyw5IEBACiAj
aW5jbHVkZSAiUHJvY2Vzc0xhdW5jaGVyLmgiCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0j
aW5jbHVkZSAiQ2xlYW51cEhhbmRsZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
I2luY2x1ZGUgIlJ1bkxvb3AuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8
cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KICNp
bmNsdWRlIDxRQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UURlYnVnPgogI2luY2x1ZGUgPFFGaWxl
PgpAQCAtNDUsNTIgKzM3LDI3IEBACiAjaW5jbHVkZSA8UU1ldGFUeXBlPgogI2luY2x1ZGUgPFFQ
cm9jZXNzPgogI2luY2x1ZGUgPFFTdHJpbmc+Ci0KICNpbmNsdWRlIDxRdENvcmUvcWdsb2JhbC5o
PgotCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHJ1
bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgorI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRl
IDxzeXMvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5jbHVkZSA8dW5p
c3RkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKyNpZiBkZWZpbmVkIFFfT1NfVU5JWAorI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgor
I2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgUHJvY2Vzc0xhdW5jaGVySGVscGVyIDogcHVi
bGljIFFPYmplY3QgewotICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgflByb2Nlc3NMYXVuY2hl
ckhlbHBlcigpOwotICAgIHZvaWQgbGF1bmNoKFdlYktpdDo6UHJvY2Vzc0xhdW5jaGVyKik7Ci0g
ICAgUUxvY2FsU29ja2V0KiB0YWtlUGVuZGluZ0Nvbm5lY3Rpb24oKTsKLSAgICBzdGF0aWMgUHJv
Y2Vzc0xhdW5jaGVySGVscGVyKiBpbnN0YW5jZSgpOwotCi0gICAgY29uc3QgUVN0cmluZyBzZXJ2
ZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9zZXJ2ZXIuc2VydmVyTmFtZSgpOyB9Ci0KLXByaXZh
dGU6Ci0gICAgUHJvY2Vzc0xhdW5jaGVySGVscGVyKCk7Ci0gICAgUUxvY2FsU2VydmVyIG1fc2Vy
dmVyOwotICAgIFFMaXN0PFdvcmtJdGVtKj4gbV9pdGVtczsKLQotICAgIFFfU0xPVCB2b2lkIG5l
d0Nvbm5lY3Rpb24oKTsKLX07Ci0KLVFfR0xPQkFMX1NUQVRJQyhXVEY6Okhhc2hTZXQ8UVByb2Nl
c3MqPiwgcHJvY2Vzc2VzKTsKLQotc3RhdGljIHZvaWQgY2xlYW51cEF0RXhpdCgpCi17Ci0gICAg
Ly8gVGVybWluYXRlIG91ciB3ZWIgcHJvY2VzcyhlcykuCi0gICAgV1RGOjpIYXNoU2V0PFFQcm9j
ZXNzKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb2Nlc3NlcygpLT5lbmQoKTsKLSAgICBmb3Ig
KFdURjo6SGFzaFNldDxRUHJvY2Vzcyo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHByb2Nlc3Nlcygp
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUVByb2Nlc3MqIHByb2Nlc3Mg
PSAqaXQ7Ci0gICAgICAgIHByb2Nlc3MtPmRpc2Nvbm5lY3QocHJvY2Vzcyk7Ci0gICAgICAgIHBy
b2Nlc3MtPnRlcm1pbmF0ZSgpOwotICAgICAgICBpZiAoIXByb2Nlc3MtPndhaXRGb3JGaW5pc2hl
ZCgyMDApKQotICAgICAgICAgICAgcHJvY2Vzcy0+a2lsbCgpOwotICAgIH0KLQotICAgIC8vIERv
IG5vdCBsZWF2ZSB0aGUgc29ja2V0IGZpbGUgYmVoaW5kLgotICAgIFFMb2NhbFNlcnZlcjo6cmVt
b3ZlU2VydmVyKFByb2Nlc3NMYXVuY2hlckhlbHBlcjo6aW5zdGFuY2UoKS0+c2VydmVyTmFtZSgp
KTsKLX0KLQogY2xhc3MgUXRXZWJQcm9jZXNzIDogcHVibGljIFFQcm9jZXNzCiB7CiAgICAgUV9P
QkpFQ1QKQEAgLTk4LDMyICs2NSwyMCBAQCBwdWJsaWM6CiAgICAgUXRXZWJQcm9jZXNzKFFPYmpl
Y3QqIHBhcmVudCA9IDApCiAgICAgICAgIDogUVByb2Nlc3MocGFyZW50KQogICAgIHsKLSAgICAg
ICAgc3RhdGljIGJvb2wgaXNSZWdpc3RlcmVkID0gZmFsc2U7Ci0gICAgICAgIGlmICghaXNSZWdp
c3RlcmVkKSB7Ci0gICAgICAgICAgICBxUmVnaXN0ZXJNZXRhVHlwZTxRUHJvY2Vzczo6UHJvY2Vz
c1N0YXRlPigiUVByb2Nlc3M6OlByb2Nlc3NTdGF0ZSIpOwotICAgICAgICAgICAgaXNSZWdpc3Rl
cmVkID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKHN0
YXRlQ2hhbmdlZChRUHJvY2Vzczo6UHJvY2Vzc1N0YXRlKSksIHRoaXMsIFNMT1QocHJvY2Vzc1N0
YXRlQ2hhbmdlZChRUHJvY2Vzczo6UHJvY2Vzc1N0YXRlKSkpOwogICAgIH0KIAotcHJpdmF0ZSBz
bG90czoKLSAgICB2b2lkIHByb2Nlc3NTdGF0ZUNoYW5nZWQoUVByb2Nlc3M6OlByb2Nlc3NTdGF0
ZSBzdGF0ZSk7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHNldHVwQ2hpbGRQcm9jZXNz
KCk7CiB9OwogCi12b2lkIFF0V2ViUHJvY2Vzczo6cHJvY2Vzc1N0YXRlQ2hhbmdlZChRUHJvY2Vz
czo6UHJvY2Vzc1N0YXRlIHN0YXRlKQordm9pZCBRdFdlYlByb2Nlc3M6OnNldHVwQ2hpbGRQcm9j
ZXNzKCkKIHsKLSAgICBRUHJvY2VzcyogcHJvY2VzcyA9IHFvYmplY3RfY2FzdDxRUHJvY2Vzcyo+
KHNlbmRlcigpKTsKLSAgICBpZiAoIXByb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChzdGF0ZSA9PSBRUHJvY2Vzczo6UnVubmluZykKLSAgICAgICAgcHJvY2Vzc2VzKCktPmFkZChw
cm9jZXNzKTsKLSAgICBlbHNlIGlmIChzdGF0ZSA9PSBRUHJvY2Vzczo6Tm90UnVubmluZykKLSAg
ICAgICAgcHJvY2Vzc2VzKCktPnJlbW92ZShwcm9jZXNzKTsKKyNpZiBkZWZpbmVkIFFfT1NfVU5J
WAorICAgIHByY3RsKFBSX1NFVF9QREVBVEhTSUcsIFNJR0tJTEwpOworI2VuZGlmCiB9CiAKLXZv
aWQgUHJvY2Vzc0xhdW5jaGVySGVscGVyOjpsYXVuY2goV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXIq
IGxhdW5jaGVyKQordm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQogewogICAg
IFFTdHJpbmcgYXBwbGljYXRpb25QYXRoID0gIiUxICUyIjsKIApAQCAtMTMzLDEyICs4OCwzOCBA
QCB2b2lkIFByb2Nlc3NMYXVuY2hlckhlbHBlcjo6bGF1bmNoKFdlYktpdDo6UHJvY2Vzc0xhdW5j
aGVyKiBsYXVuY2hlcikKICAgICAgICAgYXBwbGljYXRpb25QYXRoID0gYXBwbGljYXRpb25QYXRo
LmFyZygiUXRXZWJQcm9jZXNzIik7CiAgICAgfQogCi0gICAgUVN0cmluZyBwcm9ncmFtKGFwcGxp
Y2F0aW9uUGF0aC5hcmcobV9zZXJ2ZXIuc2VydmVyTmFtZSgpKSk7CisgICAgaW50IHNvY2tldHNb
Ml07CisgICAgaWYgKHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19ER1JBTSwgMCwgc29ja2V0cykg
PT0gLTEpIHsKKyAgICAgICAgcURlYnVnKCkgPDwgIkNyZWF0aW9uIG9mIHNvY2tldCBmYWlsZWQg
d2l0aCBlcnJubzoiIDw8IGVycm5vOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERvbid0IGV4cG9zZSB1aSBzb2NrZXQgdG8g
d2ViIHByb2Nlc3MKKyAgICB3aGlsZSAoZmNudGwoc29ja2V0c1sxXSwgRl9TRVRGRCwgRkRfQ0xP
RVhFQyA9PSAtMSkpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGNsb3NlKHNvY2tldHNbMF0pOwor
ICAgICAgICAgICAgY2xvc2Uoc29ja2V0c1sxXSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBRU3RyaW5nIHByb2dyYW0oYXBwbGljYXRpb25QYXRoLmFyZyhz
b2NrZXRzWzBdKSk7CiAKICAgICBRUHJvY2Vzcyogd2ViUHJvY2VzcyA9IG5ldyBRdFdlYlByb2Nl
c3MoKTsKICAgICB3ZWJQcm9jZXNzLT5zZXRQcm9jZXNzQ2hhbm5lbE1vZGUoUVByb2Nlc3M6OkZv
cndhcmRlZENoYW5uZWxzKTsKICAgICB3ZWJQcm9jZXNzLT5zdGFydChwcm9ncmFtKTsKIAorICAg
IC8vIERvbid0IGV4cG9zZSB3ZWIgc29ja2V0IHRvIHBvc3NpYmxlIGZ1dHVyZSB3ZWIgcHJvY2Vz
c2VzCisgICAgd2hpbGUgKGZjbnRsKHNvY2tldHNbMF0sIEZfU0VURkQsIEZEX0NMT0VYRUMpID09
IC0xKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBkZWxldGUgd2ViUHJvY2VzczsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICghd2ViUHJvY2Vzcy0+d2Fp
dEZvclN0YXJ0ZWQoKSkgewogICAgICAgICBxRGVidWcoKSA8PCAiRmFpbGVkIHRvIHN0YXJ0IiA8
PCBwcm9ncmFtOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE0OCw1NSArMTI5
LDcgQEAgdm9pZCBQcm9jZXNzTGF1bmNoZXJIZWxwZXI6OmxhdW5jaChXZWJLaXQ6OlByb2Nlc3NM
YXVuY2hlciogbGF1bmNoZXIpCiAKICAgICBzZXRwcmlvcml0eShQUklPX1BST0NFU1MsIHdlYlBy
b2Nlc3MtPnBpZCgpLCAxMCk7CiAKLSAgICBtX2l0ZW1zLmFwcGVuZChXb3JrSXRlbTo6Y3JlYXRl
KGxhdW5jaGVyLCAmV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1By
b2Nlc3MsIHdlYlByb2Nlc3MsIG1fc2VydmVyLnNlcnZlck5hbWUoKSkubGVha1B0cigpKTsKLX0K
LQotUUxvY2FsU29ja2V0KiBQcm9jZXNzTGF1bmNoZXJIZWxwZXI6OnRha2VQZW5kaW5nQ29ubmVj
dGlvbigpCi17Ci0gICAgcmV0dXJuIG1fc2VydmVyLm5leHRQZW5kaW5nQ29ubmVjdGlvbigpOwot
fQotCi1Qcm9jZXNzTGF1bmNoZXJIZWxwZXI6On5Qcm9jZXNzTGF1bmNoZXJIZWxwZXIoKQotewot
ICAgIG1fc2VydmVyLmNsb3NlKCk7Ci19Ci0KLVByb2Nlc3NMYXVuY2hlckhlbHBlcjo6UHJvY2Vz
c0xhdW5jaGVySGVscGVyKCkKLXsKLSAgICBzcmFuZG9tKHRpbWUoMCkpOwotICAgIGlmICghbV9z
ZXJ2ZXIubGlzdGVuKCJRdFdlYktpdCIgKyBRU3RyaW5nOjpudW1iZXIocmFuZG9tKCkpKSkgewot
ICAgICAgICBxRGVidWcoKSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBzZXJ2ZXIgc29ja2V0LiI7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICBjb25uZWN0KCZtX3NlcnZl
ciwgU0lHTkFMKG5ld0Nvbm5lY3Rpb24oKSksIHRoaXMsIFNMT1QobmV3Q29ubmVjdGlvbigpKSk7
Ci19Ci0KLVByb2Nlc3NMYXVuY2hlckhlbHBlciogUHJvY2Vzc0xhdW5jaGVySGVscGVyOjppbnN0
YW5jZSgpCi17Ci0gICAgc3RhdGljIFByb2Nlc3NMYXVuY2hlckhlbHBlciogcmVzdWx0ID0gMDsK
LSAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICByZXN1bHQgPSBuZXcgUHJvY2Vzc0xhdW5jaGVy
SGVscGVyKCk7Ci0KLSAgICAgICAgLy8gVGhlIHB1cnBvc2Ugb2YgdGhlIGZvbGxvd2luZyBsaW5l
IGlzIHRvIGVuc3VyZSB0aGF0IG91ciBzdGF0aWMgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBl
eGl0IGhhbmRsZXIgaXMgaW5zdGFsbGVkLgotICAgICAgICBwcm9jZXNzZXMoKS0+Y2xlYXIoKTsK
LQotICAgICAgICBhdGV4aXQoY2xlYW51cEF0RXhpdCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXZvaWQgUHJvY2Vzc0xhdW5jaGVySGVscGVyOjpuZXdDb25uZWN0aW9uKCkKLXsK
LSAgICBBU1NFUlQoIW1faXRlbXMuaXNFbXB0eSgpKTsKLQotICAgIG1faXRlbXNbMF0tPmV4ZWN1
dGUoKTsKLSAgICBkZWxldGUgbV9pdGVtc1swXTsKLSAgICBtX2l0ZW1zLnBvcF9mcm9udCgpOwot
fQotCi12b2lkIFByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2VzcygpCi17Ci0gICAgUHJvY2Vz
c0xhdW5jaGVySGVscGVyOjppbnN0YW5jZSgpLT5sYXVuY2godGhpcyk7CisgICAgUnVuTG9vcDo6
bWFpbigpLT5zY2hlZHVsZVdvcmsoV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmV2ViS2l0OjpQcm9j
ZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3MsIHdlYlByb2Nlc3MsIHNvY2tl
dHNbMV0pKTsKIH0KIAogdm9pZCBQcm9jZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVByb2Nlc3MoKQpA
QCAtMjA4LDE0ICsxNDEsOSBAQCB2b2lkIFByb2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2Vz
cygpCiAgICAgbV9wcm9jZXNzSWRlbnRpZmllci0+dGVybWluYXRlKCk7CiB9CiAKLVFMb2NhbFNv
Y2tldCogUHJvY2Vzc0xhdW5jaGVyOjp0YWtlUGVuZGluZ0Nvbm5lY3Rpb24oKQotewotICAgIHJl
dHVybiBQcm9jZXNzTGF1bmNoZXJIZWxwZXI6Omluc3RhbmNlKCktPnRha2VQZW5kaW5nQ29ubmVj
dGlvbigpOwotfQotCiB2b2lkIFByb2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExh
dW5jaGVyUXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVh
ZExhdW5jaGVyUXQuY3BwCmluZGV4IDQ3MWE0MjQuLjM0NDU4MGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9UaHJlYWRMYXVuY2hlclF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJRdC5j
cHAKQEAgLTU0LDcgKzU0LDcgQEAgc3RhdGljIHZvaWQqIHdlYlRocmVhZEJvZHkodm9pZCogLyog
Y29udGV4dCAqLykKIAogICAgIC8vIEZJWE1FOiBXZSBkbyBub3Qgc3VwcG9ydCB0aHJlYWRlZCBt
b2RlIGZvciBub3cuCiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKCJmb28i
LCBSdW5Mb29wOjpjdXJyZW50KCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxp
emUoLTEsIFJ1bkxvb3A6OmN1cnJlbnQoKSk7CiAgICAgUnVuTG9vcDo6cnVuKCk7CiAKICAgICBy
ZXR1cm4gMDsKQEAgLTcwLDggKzcwLDcgQEAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmll
ciBUaHJlYWRMYXVuY2hlcjo6Y3JlYXRlV2ViVGhyZWFkKCkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogCi0gICAgUVN0cmluZyBzZXJ2ZXJJZGVudGlmaWVyID0gUVN0cmluZzo6bnVtYmVyKGNv
bm5lY3Rpb25JZGVudGlmaWVyKTsKLSAgICByZXR1cm4gc2VydmVySWRlbnRpZmllcjsKKyAgICBy
ZXR1cm4gY29ubmVjdGlvbklkZW50aWZpZXI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnBybwppbmRleCBmNGUwMDdiLi5mY2EyZjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnBybworKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwpAQCAtMjMz
LDcgKzIzMyw2IEBAIEhFQURFUlMgKz0gXAogICAgIFBsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIFwK
ICAgICBQbGF0Zm9ybS9Xb3JrSXRlbS5oIFwKICAgICBQbGF0Zm9ybS9Xb3JrUXVldWUuaCBcCi0g
ICAgUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5oIFwKICAgICBTaGFyZWQvQVBJL2MvV0tC
YXNlLmggXAogICAgIFNoYXJlZC9BUEkvYy9XS0NlcnRpZmljYXRlSW5mby5oIFwKICAgICBTaGFy
ZWQvQVBJL2MvV0tDb250ZXh0TWVudUl0ZW0uaCBcCkBAIC0yOTQsNyArMjkzLDYgQEAgSEVBREVS
UyArPSBcCiAgICAgU2hhcmVkL1dlYlVSTFJlc3BvbnNlLmggXAogICAgIFNoYXJlZC9XZWJVc2Vy
Q29udGVudFVSTFBhdHRlcm4uaCBcCiAgICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2Nh
cGVQbHVnaW5Nb2R1bGUuaCBcCi0gICAgU2hhcmVkL3F0L0NsZWFudXBIYW5kbGVyLmggXAogICAg
IFNoYXJlZC9xdC9QbGF0Zm9ybUNlcnRpZmljYXRlSW5mby5oIFwKICAgICBTaGFyZWQvcXQvVXBk
YXRlQ2h1bmsuaCBcCiAgICAgU2hhcmVkL3F0L1dlYkV2ZW50RmFjdG9yeVF0LmggXApAQCAtNDY1
LDcgKzQ2Myw2IEBAIFNPVVJDRVMgKz0gXAogICAgIFBsYXRmb3JtL01vZHVsZS5jcHAgXAogICAg
IFBsYXRmb3JtL1J1bkxvb3AuY3BwIFwKICAgICBQbGF0Zm9ybS9Xb3JrUXVldWUuY3BwIFwKLSAg
ICBQbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvTW9k
dWxlUXQuY3BwIFwKICAgICBQbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwIFwKICAgICBQbGF0Zm9y
bS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAgXApAQCAtNTE4LDcgKzUxNSw2IEBAIFNPVVJDRVMgKz0g
XAogICAgIFNoYXJlZC9XZWJVUkxSZXNwb25zZS5jcHAgXAogICAgIFNoYXJlZC9XZWJXaGVlbEV2
ZW50LmNwcCBcCiAgICAgU2hhcmVkL3F0L1NoYXJlYWJsZUJpdG1hcFF0LmNwcCBcCi0gICAgU2hh
cmVkL3F0L0NsZWFudXBIYW5kbGVyLmNwcCBcCiAgICAgU2hhcmVkL3F0L05hdGl2ZVdlYktleWJv
YXJkRXZlbnRRdC5jcHAgXAogICAgIFNoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHAgXAogICAgIFNo
YXJlZC9xdC9XZWJDb3JlQXJndW1lbnRDb2RlcnNRdC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKaW5kZXggYmQ0ZTM3MC4uM2Ux
MjJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNz
TWFpblF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NN
YWluUXQuY3BwCkBAIC0xNjAsNyArMTYwLDE4IEBAIFFXRUJLSVRfRVhQT1JUIGludCBXZWJQcm9j
ZXNzTWFpblF0KGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBSdW5Mb29wOjppbml0aWFsaXpl
TWFpblJ1bkxvb3AoKTsKIAogICAgIC8vIENyZWF0ZSB0aGUgY29ubmVjdGlvbi4KLSAgICBRU3Ry
aW5nIGlkZW50aWZpZXIoYXBwLT5hcmd1bWVudHMoKS5zaXplKCkgPiAxID8gYXBwLT5hcmd1bWVu
dHMoKS5hdCgxKSA6ICIiKTsKKyAgICBpZiAoYXBwLT5hcmd1bWVudHMoKS5zaXplKCkgPD0gMSkg
eworICAgICAgICBxRGVidWcoKSA8PCAiRXJyb3I6IHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMu
IjsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgYm9vbCB3YXNOdW1iZXIgPSBmYWxz
ZTsKKyAgICBpbnQgaWRlbnRpZmllciA9IGFwcC0+YXJndW1lbnRzKCkuYXQoMSkudG9JbnQoJndh
c051bWJlciwgMTApOworICAgIGlmICghd2FzTnVtYmVyKSB7CisgICAgICAgIHFEZWJ1ZygpIDw8
ICJFcnJvcjogY29ubmVjdGlvbiBpZGVudGlmaWVyIHdyb25nLiI7CisgICAgICAgIHJldHVybiAx
OworICAgIH0KKwogICAgIFdlYktpdDo6V2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5pdGlhbGl6ZShp
ZGVudGlmaWVyLCBSdW5Mb29wOjptYWluKCkpOwogCiAgICAgUnVuTG9vcDo6cnVuKCk7CmRpZmYg
LS1naXQgYS9jb21tb24ucHJpIGIvY29tbW9uLnByaQppbmRleCBlNjk3M2Y0Li5jOTg0M2JiIDEw
MDY0NAotLS0gYS9jb21tb24ucHJpCisrKyBiL2NvbW1vbi5wcmkKQEAgLTQsOCArNCwxMCBAQCBj
b250YWlucyhKQVZBU0NSSVBUQ09SRV9KSVQseWVzKTogREVGSU5FUys9RU5BQkxFX0pJVD0xCiBj
b250YWlucyhKQVZBU0NSSVBUQ09SRV9KSVQsbm8pOiBERUZJTkVTKz1FTkFCTEVfSklUPTAKIAog
bGludXgtZysrIHsKLWlzRW1wdHkoJCQoU0JPWF9EUEtHX0lOU1RfQVJDSCkpOmV4aXN0cygvdXNy
L2Jpbi9sZC5nb2xkKSB7CishaXNFbXB0eSgkJChTQk9YX0RQS0dfSU5TVF9BUkNIKSk6ZXhpc3Rz
KC91c3IvYmluL2xkLmdvbGQpIHsKICAgICBtZXNzYWdlKFVzaW5nIGdvbGQgbGlua2VyKQorICAg
IFFNQUtFX0NGTEFHUys9LWZ1c2UtbGQ9Z29sZAorICAgIFFNQUtFX0NYWEZMQUdTKz0tZnVzZS1s
ZD1nb2xkCiAgICAgUU1BS0VfTEZMQUdTKz0tZnVzZS1sZD1nb2xkCiB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79606</attachid>
            <date>2011-01-20 08:53:10 -0800</date>
            <delta_ts>2011-01-20 08:59:50 -0800</delta_ts>
            <desc>Second try. Fixes the regression and implements connectionDidClose </desc>
            <filename>cleanuphandler-removal-02.patch</filename>
            <type>text/plain</type>
            <size>59226</size>
            <attacher name="Kimmo Kinnunen">kimmo.t.kinnunen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBkYzZkYzViLi5lYzRlMTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAw
IEBACisyMDExLTAxLTE4ICBLaW1tbyBLaW5udW5lbiAgPGtpbW1vLnQua2lubnVuZW5Abm9raWEu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtR
dF0gUmVtb3ZlIENsZWFudXBIYW5kbGVyIGJ5IHBhc3NpbmcgZmlsZSBkZXNjcmlwdG9ycy4KKwor
ICAgICAgICBEZWxldGluZyBmaWxlcyBpbiBzaWduYWwgaGFuZGxlciBvZiBVSSBwcm9jZXNzIGlz
IG5vdCBhIGdvb2QgaWRlYSwKKyAgICAgICAgYmVjYXVzZSB0aGUgbWVtb3J5IHdoZXJlIGZpbGVu
YW1lcyBhcmUgc3RvcmVkIG1pZ2h0IG5vdCBiZSB2YWxpZAorICAgICAgICBhZnRlciBhIGNyYXNo
LgorCisgICAgICAgIFRvIGF2b2lkIHRoZSBuZWVkIG9mIHVzaW5nIHNpZ25hbCBoYW5kbGVycyBm
b3IgY2xlYW51cCwKKyAgICAgICAgY2hhbmdlIGZvbGxvd2luZzoKKyAgICAgICAgICAxKSBBdm9p
ZCBwYXNzaW5nIGZpbGVuYW1lcyBiZXR3ZWVuIHByb2Nlc3NlcywgcGFzcyBmZHMKKyAgICAgICAg
ICAyKSBXaGVuIG1tYXAnaW5nIGZpbGVzLCBkZWxldGUgdGhlbSBpbW1lZGlhdGVseSBhZnRlcgor
ICAgICAgICAgICAgIG9wZW5pbmcgYW5kIG1tYXAnaW5nIHRoZW0uCisgICAgICAgICAgMykgUGFz
cyBzb2NrZXRzIHdpdGggZmRzIGR1cmluZyBmb3JrK2V4ZWMgaW5zdGVhZCBvZgorICAgICAgICAg
ICAgIHBhc3NpbmcgdGhlbSB2aWEgdGhlIGZpbGVzeXN0ZW0uCisgICAgICAgICAgNCkgVXNlIG1t
YXAnZWQgZmlsZXMgZm9yIGltcGxlbWVudGF0aW9uIG9mIFNoYXJlZE1lbW9yeS4KKyAgICAgICAg
ICAgICBRU2hhcmVkTWVtb3J5IGRvZXMgbm90IHN1cHBvcnQgY2xlYW51cCBjb3JyZWN0bHkuCisK
KyAgICAgICAgQ29uc3F1ZW5jZXM6CisgICAgICAgICAgLSBNb3ZlIE1hcHBlZE1lbW9yeSB0byBT
aGFyZWRNZW1vcnksIG1ha2UgVXBkYXRlQ2h1bmsgdXNlIHRoaXMuCisgICAgICAgICAgLSBJbXBs
ZW1lbnQgQ29yZUlQQzo6QXR0YWNobWVudCB1c2luZyBtbWFwZWQgZmlsZXMuCisgICAgICAgICAg
LSBTZW5kIG1lc3NhZ2VzIHVzaW5nIGRhdGFncmFtIHNvY2tldC4gVGhpcyBzb2x1dGlvbiB3b3Jr
cworICAgICAgICAgICAgc2ltaWxpYXJseSB0byBNYWNoIHBvcnRzIG9uIE1hYy4KKyAgICAgICAg
ICAtIFNlbmQgYmlnIG1lc3NhZ2VzIG91dC1vZi1saW5lIGFuZCB0aHVzIGF2b2lkIGluY3JlYXNp
bmcKKyAgICAgICAgICAgIHRoZSByZWNlaXZlIGJ1ZmZlci4KKyAgICAgICAgICAtIFJlbW92ZSBN
ZW1vcnlNYXBwZWRQb29sIGFuZCByZWx5IG9uIGxpYmMva2VybmVsIGNhY2hpbmcKKyAgICAgICAg
ICAgIG9mIG1tYXBwZWQgYXJlYXMuCisgICAgICAgICAgLSBVbm1hcCBtZW1vcnkgYXJlYXMgYWZ0
ZXIgdXNlLgorICAgICAgICAgIC0gV2hlbiBVSSBwcm9jZXNzIGNyYXNoZXMsIGtpbGwgdGhlIHdl
YiBwcm9jZXNzIHVzaW5nIFNJR0tJTEwuCisgICAgICAgICAgICBUaGlzIGlzIHBvc3NpYmxlIGFn
YWluIGJlY2F1c2UgY2xlYW51cCBoYW5kbGVyIGlzIG5vdCBuZWVkZWQuCisKKyAgICAgICAgW1dL
Ml1bUXRdIE11bHRpcGxlIHByb2JsZW1zIHdpdGggTWVtb3J5TWFwcGVkUG9vbAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE5ODQKKworICAgICAgICAq
IFBsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVudC5jcHA6CisgICAgICAgIChDb3JlSVBDOjpBdHRh
Y2htZW50OjpBdHRhY2htZW50KToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1l
bnQuaDoKKyAgICAgICAgKENvcmVJUEM6OkF0dGFjaG1lbnQ6OnNpemUpOgorICAgICAgICAoQ29y
ZUlQQzo6QXR0YWNobWVudDo6cmVsZWFzZUZpbGVEZXNjcmlwdG9yKToKKyAgICAgICAgKENvcmVJ
UEM6OkF0dGFjaG1lbnQ6OmZpbGVEZXNjcmlwdG9yKToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3Jl
SVBDL0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rp
b25RdC5jcHA6CisgICAgICAgIChDb3JlSVBDOjpNZXNzYWdlSW5mbzo6TWVzc2FnZUluZm8pOgor
ICAgICAgICAoQ29yZUlQQzo6TWVzc2FnZUluZm86OnNldE1lc3NhZ2VCb2R5T09MKToKKyAgICAg
ICAgKENvcmVJUEM6Ok1lc3NhZ2VJbmZvOjppc01lc3NhZ2VCb2R5T09MKToKKyAgICAgICAgKENv
cmVJUEM6Ok1lc3NhZ2VJbmZvOjpib2R5U2l6ZSk6CisgICAgICAgIChDb3JlSVBDOjpNZXNzYWdl
SW5mbzo6bWVzc2FnZUlEKToKKyAgICAgICAgKENvcmVJUEM6Ok1lc3NhZ2VJbmZvOjphdHRhY2ht
ZW50Q291bnQpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1Jbml0aWFs
aXplKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnBsYXRmb3JtSW52YWxpZGF0ZSk6
CisgICAgICAgIChDb3JlSVBDOjpTb2NrZXROb3RpZmllckRpc2FibGVHdWFyZDo6U29ja2V0Tm90
aWZpZXJEaXNhYmxlR3VhcmQpOgorICAgICAgICAoQ29yZUlQQzo6U29ja2V0Tm90aWZpZXJEaXNh
YmxlR3VhcmQ6On5Tb2NrZXROb3RpZmllckRpc2FibGVHdWFyZCk6CisgICAgICAgIChDb3JlSVBD
OjpDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVyKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5l
Y3Rpb246Om9wZW4pOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1DYW5T
ZW5kT3V0Z29pbmdNZXNzYWdlcyk6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpzZW5k
T3V0Z29pbmdNZXNzYWdlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaDoKKyAg
ICAgICAgKiBQbGF0Zm9ybS9Xb3JrUXVldWUuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9xdC9NYXBw
ZWRNZW1vcnlQb29sLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbGF0Zm9ybS9xdC9NYXBwZWRN
ZW1vcnlQb29sLmg6IFJlbW92ZWQuCisgICAgICAgICogUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5
UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6SGFuZGxlKToK
KyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6On5IYW5kbGUpOgorICAgICAg
ICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6aXNOdWxsKToKKyAgICAgICAgKFdlYktp
dDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJl
ZE1lbW9yeTo6SGFuZGxlOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6
OkhhbmRsZTo6cmVsZWFzZVRvQXR0YWNobWVudCk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1l
bW9yeTo6SGFuZGxlOjphZG9wdEZyb21BdHRhY2htZW50KToKKyAgICAgICAgKFdlYktpdDo6U2hh
cmVkTWVtb3J5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjphY2Nlc3NNb2RlTU1hcCk6Cisg
ICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6flNoYXJlZE1lbW9yeSk6CisgICAgICAgIChX
ZWJLaXQ6OmFjY2Vzc01vZGVGaWxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5Ojpj
cmVhdGVIYW5kbGUpOgorICAgICAgICAqIFBsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcDoKKyAg
ICAgICAgKFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAq
IFNoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5r
OjpVcGRhdGVDaHVuayk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5rOjp+VXBkYXRlQ2h1
bmspOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVDaHVuazo6ZW5jb2RlKToKKyAgICAgICAgKFdl
YktpdDo6VXBkYXRlQ2h1bms6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5r
OjpjcmVhdGVJbWFnZSk6CisgICAgICAgICogU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlF0V2ViUHJvY2Vzczo6UXRXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6UXRXZWJQ
cm9jZXNzOjpzZXR1cENoaWxkUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVu
Y2hlcjo6bGF1bmNoUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6
cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhy
ZWFkTGF1bmNoZXJRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OndlYlRocmVhZEJvZHkpOgorICAg
ICAgICAoV2ViS2l0OjpUaHJlYWRMYXVuY2hlcjo6Y3JlYXRlV2ViVGhyZWFkKToKKyAgICAgICAg
KiBXZWJLaXQyLnBybzoKKyAgICAgICAgKiBXZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpblF0KToKKwogMjAxMS0wMS0xOSAg
U2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhl
IFdlYktpdDIgYnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3Jl
SVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBD
L0FyZ3VtZW50RGVjb2Rlci5jcHAKaW5kZXggMzM2ZjcyZi4uOTM4YWFlZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudERlY29kZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcApAQCAt
NDYsNyArNDYsMTMgQEAgQXJndW1lbnREZWNvZGVyOjp+QXJndW1lbnREZWNvZGVyKCkKIHsKICAg
ICBBU1NFUlQobV9idWZmZXIpOwogICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKKyNpZiAhUExBVEZP
Uk0oUVQpCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzcG9zZSBvZiB0aGUgbWFjaCBwb3J0
cyBpbiBjYXNlcyBvZiBmYWlsdXJlLgorI2Vsc2UKKyAgICBEZXF1ZTxBdHRhY2htZW50Pjo6aXRl
cmF0b3IgZW5kID0gbV9hdHRhY2htZW50cy5lbmQoKTsKKyAgICBmb3IgKERlcXVlPEF0dGFjaG1l
bnQ+OjppdGVyYXRvciBpID0gbV9hdHRhY2htZW50cy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQor
ICAgICAgICAgICAgaS0+ZGlzcG9zZSgpOworI2VuZGlmCiB9CiAKIHZvaWQgQXJndW1lbnREZWNv
ZGVyOjppbml0aWFsaXplKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5j
b2Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rl
ci5jcHAKaW5kZXggMTM0MGMwYS4uODVhN2NhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudEVuY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcApAQCAtNDksNyArNDksMTIgQEAg
QXJndW1lbnRFbmNvZGVyOjp+QXJndW1lbnRFbmNvZGVyKCkKIHsKICAgICBpZiAobV9idWZmZXIp
CiAgICAgICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKKyNpZiAhUExBVEZPUk0oUVQpCiAgICAgLy8g
RklYTUU6IFdlIG5lZWQgdG8gZGlzcG9zZSBvZiB0aGUgYXR0YWNobWVudHMgaW4gY2FzZXMgb2Yg
ZmFpbHVyZS4KKyNlbHNlCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2F0dGFjaG1lbnRzLnNp
emUoKTsgKytpKQorICAgICAgICBtX2F0dGFjaG1lbnRzW2ldLmRpc3Bvc2UoKTsKKyNlbmRpZgog
fQogCiBzdGF0aWMgaW5saW5lIHNpemVfdCByb3VuZFVwVG9BbGlnbm1lbnQoc2l6ZV90IHZhbHVl
LCB1bnNpZ25lZCBhbGlnbm1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL0F0dGFjaG1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy9BdHRhY2htZW50LmNwcAppbmRleCBjOGQzNWY0Li45NGEwNWVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVudC5jcHAKQEAgLTI3LDYgKzI3LDEwIEBA
CiAKICNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKICNpbmNsdWRlICJBcmd1bWVudEVuY29k
ZXIuaCIKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxl
cnJuby5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBDb3JlSVBDIHsKIApAQCAtNTYsNiArNjAsMTgg
QEAgdm9pZCBBdHRhY2htZW50OjpyZWxlYXNlKCkKIHsKICAgICBtX3R5cGUgPSBVbmluaXRpYWxp
emVkOwogfQorCisjZWxpZiBQTEFURk9STShRVCkKKworQXR0YWNobWVudDo6QXR0YWNobWVudChp
bnQgZmlsZURlc2NyaXB0b3IsIHNpemVfdCBzaXplKQorICAgIDogbV90eXBlKE1hcHBlZE1lbW9y
eSkKKyAgICAsIG1fZmlsZURlc2NyaXB0b3IoZmlsZURlc2NyaXB0b3IpCisgICAgLCBtX3NpemUo
c2l6ZSkKK3sKKyAgICBBU1NFUlQobV9maWxlRGVzY3JpcHRvcik7CisgICAgQVNTRVJUKG1fc2l6
ZSk7Cit9CisKICNlbmRpZgogCiB2b2lkIEF0dGFjaG1lbnQ6OmVuY29kZShBcmd1bWVudEVuY29k
ZXIqIGVuY29kZXIpIGNvbnN0CkBAIC03MCw0ICs4NiwxMSBAQCBib29sIEF0dGFjaG1lbnQ6OmRl
Y29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEF0dGFjaG1lbnQmIGF0dGFjaG1lbnQpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgQXR0YWNobWVudDo6ZGlzcG9zZSgpCit7CisgICAg
QVNTRVJUKG1fZmlsZURlc2NyaXB0b3IgIT0gLTEpOworICAgIGlmIChtX2ZpbGVEZXNjcmlwdG9y
ICE9IC0xKQorICAgICAgICB3aGlsZSAoY2xvc2UobV9maWxlRGVzY3JpcHRvcikgPT0gLTEgJiYg
KGVycm5vID09IEVJTlRSKSkge30KK30KKwogfSAvLyBuYW1lc3BhY2UgQ29yZUlQQwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9BdHRhY2htZW50LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1lbnQuaAppbmRleCA1NWEwOWM5Li4x
OTk4NjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0F0dGFj
aG1lbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1lbnQu
aApAQCAtNDAsMTIgKzQwLDE2IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAg
IE1hY2hQb3J0VHlwZSwKICAgICAgICAgTWFjaE9PTE1lbW9yeVR5cGUKKyNlbGlmIFBMQVRGT1JN
KFFUKQorICAgICAgICBNYXBwZWRNZW1vcnkKICNlbmRpZgogICAgIH07CiAKICNpZiBQTEFURk9S
TShNQUMpCiAgICAgQXR0YWNobWVudChtYWNoX3BvcnRfbmFtZV90IHBvcnQsIG1hY2hfbXNnX3R5
cGVfbmFtZV90IGRpc3Bvc2l0aW9uKTsKICAgICBBdHRhY2htZW50KHZvaWQqIGFkZHJlc3MsIG1h
Y2hfbXNnX3NpemVfdCBzaXplLCBtYWNoX21zZ19jb3B5X29wdGlvbnNfdCBjb3B5T3B0aW9ucywg
Ym9vbCBkZWFsbG9jYXRlKTsKKyNlbGlmIFBMQVRGT1JNKFFUKQorICAgIEF0dGFjaG1lbnQoaW50
IGZpbGVEZXNjcmlwdG9yLCBzaXplX3QpOwogI2VuZGlmCiAKICAgICBUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KQEAgLTYyLDExICs2NiwxOCBAQCBwdWJsaWM6CiAgICAgbWFj
aF9tc2dfc2l6ZV90IHNpemUoKSBjb25zdCB7IEFTU0VSVChtX3R5cGUgPT0gTWFjaE9PTE1lbW9y
eVR5cGUpOyByZXR1cm4gbV9vb2xNZW1vcnkuc2l6ZTsgfQogICAgIG1hY2hfbXNnX2NvcHlfb3B0
aW9uc190IGNvcHlPcHRpb25zKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IE1hY2hPT0xNZW1v
cnlUeXBlKTsgcmV0dXJuIG1fb29sTWVtb3J5LmNvcHlPcHRpb25zOyB9CiAgICAgYm9vbCBkZWFs
bG9jYXRlKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IE1hY2hPT0xNZW1vcnlUeXBlKTsgcmV0
dXJuIG1fb29sTWVtb3J5LmRlYWxsb2NhdGU7IH0KKyNlbGlmIFBMQVRGT1JNKFFUKQorICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICBpbnQgcmVsZWFzZUZp
bGVEZXNjcmlwdG9yKCkgeyBpbnQgdGVtcCA9IG1fZmlsZURlc2NyaXB0b3I7IG1fZmlsZURlc2Ny
aXB0b3IgPSAtMTsgcmV0dXJuIHRlbXA7IH0KKyAgICBpbnQgZmlsZURlc2NyaXB0b3IoKSBjb25z
dCB7IHJldHVybiBtX2ZpbGVEZXNjcmlwdG9yOyB9CisKKyAgICB2b2lkIGRpc3Bvc2UoKTsKICNl
bmRpZgogCiAgICAgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKikgY29uc3Q7CiAgICAgc3Rh
dGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIEF0dGFjaG1lbnQmKTsKLSAgICAKKwog
cHJpdmF0ZToKICAgICBUeXBlIG1fdHlwZTsKIApAQCAtODMsNiArOTQsOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgYm9vbCBkZWFsbG9jYXRlOwogICAgICAgICB9IG1fb29sTWVtb3J5OwogICAg
IH07CisjZWxpZiBQTEFURk9STShRVCkKKyAgICBpbnQgbV9maWxlRGVzY3JpcHRvcjsKKyAgICBz
aXplX3QgbV9zaXplOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvQ29ubmVjdGlvbi5oCmluZGV4IGM0ZWM0NzguLjJhYTA3ZjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCkBAIC00NCw5ICs0NCw4IEBACiAj
ZWxpZiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSA8c3RyaW5nPgogI2VsaWYgUExBVEZPUk0oUVQp
Ci0jaW5jbHVkZSA8UVN0cmluZz4KLWNsYXNzIFFMb2NhbFNlcnZlcjsKLWNsYXNzIFFMb2NhbFNv
Y2tldDsKK2NsYXNzIFFTb2NrZXROb3RpZmllcjsKKyNpbmNsdWRlICJQbGF0Zm9ybVByb2Nlc3NJ
ZGVudGlmaWVyLmgiCiAjZW5kaWYKIAogY2xhc3MgUnVuTG9vcDsKQEAgLTc4LDcgKzc3LDcgQEAg
cHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoQ29ubmVjdGlv
biosIE1lc3NhZ2VJRCwgQXJndW1lbnREZWNvZGVyKikgPSAwOwogICAgICAgICB2aXJ0dWFsIFN5
bmNSZXBseU1vZGUgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKENvbm5lY3Rpb24qLCBNZXNzYWdlSUQs
IEFyZ3VtZW50RGVjb2RlciosIEFyZ3VtZW50RW5jb2RlciopIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IHJldHVybiBBdXRvbWF0aWNSZXBseTsgfQogICAgIH07Ci0gICAgCisKICAgICBjbGFzcyBD
bGllbnQgOiBwdWJsaWMgTWVzc2FnZVJlY2VpdmVyIHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAg
IHZpcnR1YWwgfkNsaWVudCgpIHsgfQpAQCAtOTgsNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBIQU5ETEUgSWRlbnRpZmllcjsKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVTZXJ2ZXJBbmRD
bGllbnRJZGVudGlmaWVycyhJZGVudGlmaWVyJiBzZXJ2ZXJJZGVudGlmaWVyLCBJZGVudGlmaWVy
JiBjbGllbnRJZGVudGlmaWVyKTsKICNlbGlmIFBMQVRGT1JNKFFUKQotICAgIHR5cGVkZWYgY29u
c3QgUVN0cmluZyBJZGVudGlmaWVyOworICAgIHR5cGVkZWYgaW50IElkZW50aWZpZXI7CiAjZWxp
ZiBQTEFURk9STShHVEspCiAgICAgdHlwZWRlZiBpbnQgSWRlbnRpZmllcjsKICNlbmRpZgpAQCAt
MTA5LDYgKzEwOCw4IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHNl
dFNob3VsZENsb3NlQ29ubmVjdGlvbk9uTWFjaEV4Y2VwdGlvbnMoKTsKKyNlbGlmIFBMQVRGT1JN
KFFUKQorICAgIHZvaWQgc2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9jZXNzVGVybWluYXRp
b24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyKTsKICNlbmRpZgogCiAgICAgYm9v
bCBvcGVuKCk7CkBAIC0yODQsOCArMjg1LDggQEAgcHJpdmF0ZToKIAogICAgIFZlY3Rvcjx1aW50
OF90PiBtX3JlYWRCdWZmZXI7CiAgICAgc2l6ZV90IG1fY3VycmVudE1lc3NhZ2VTaXplOwotICAg
IFFMb2NhbFNvY2tldCogbV9zb2NrZXQ7Ci0gICAgUVN0cmluZyBtX3NlcnZlck5hbWU7CisgICAg
UVNvY2tldE5vdGlmaWVyKiBtX3NvY2tldE5vdGlmaWVyOworICAgIGludCBtX3NvY2tldERlc2Ny
aXB0b3I7CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgdm9pZCByZWFkRXZlbnRIYW5kbGVyKCk7
CiAgICAgdm9pZCBwcm9jZXNzQ29tcGxldGVkTWVzc2FnZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3BwIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3BwCmluZGV4IGMwNzM2Yjgu
LmYwNTdkMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQv
Q29ubmVjdGlvblF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0
L0Nvbm5lY3Rpb25RdC5jcHAKQEAgLTI5LDExNCArMjksMzMzIEBACiAjaW5jbHVkZSAiQXJndW1l
bnRFbmNvZGVyLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc0xhdW5jaGVyLmgiCiAjaW5jbHVkZSAiV29y
a0l0ZW0uaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNz
UHJveHkuaCIKICNpbmNsdWRlIDxRQXBwbGljYXRpb24+Ci0jaW5jbHVkZSA8UUxvY2FsU2VydmVy
PgotI2luY2x1ZGUgPFFMb2NhbFNvY2tldD4KKyNpbmNsdWRlIDxRU29ja2V0Tm90aWZpZXI+Cisj
aW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVy
cm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxRVGhyZWFkPgorI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBD
b3JlSVBDIHsKIAotLy8gVGhpcyBpcyB3aGF0IG90aGVyIHBvcnRzIHVzZS4uLgogc3RhdGljIGNv
bnN0IHNpemVfdCBtZXNzYWdlTWF4U2l6ZSA9IDQwOTY7CitzdGF0aWMgY29uc3Qgc2l6ZV90IGF0
dGFjaG1lbnRNYXhBbW91bnQgPSAyNTU7CisKK2VudW0geworICAgIE1lc3NhZ2VCb2R5SXNPT0wg
PSAxIDw8IDMxCit9OworCitjbGFzcyBNZXNzYWdlSW5mbyB7CitwdWJsaWM6CisgICAgTWVzc2Fn
ZUluZm8oKSB7fQorCisgICAgTWVzc2FnZUluZm8oTWVzc2FnZUlEIG1lc3NhZ2VJRCwgc2l6ZV90
IGJvZHlTaXplLCBzaXplX3QgaW5pdGlhbEF0dGFjaG1lbnRDb3VudCkKKyAgICAgICAgOiBtX21l
c3NhZ2VJRChtZXNzYWdlSUQudG9JbnQoKSkKKyAgICAgICAgLCBtX2JvZHlTaXplKGJvZHlTaXpl
KQorICAgICAgICAsIG1fYXR0YWNobWVudENvdW50KGluaXRpYWxBdHRhY2htZW50Q291bnQpCisg
ICAgeworICAgICAgICBBU1NFUlQoIShtX21lc3NhZ2VJRCAmIE1lc3NhZ2VCb2R5SXNPT0wpKTsK
KyAgICB9CisKKyAgICB2b2lkIHNldE1lc3NhZ2VCb2R5T09MKCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCghaXNNZXNzYWdlQm9keU9PTCgpKTsKKworICAgICAgICBtX21lc3NhZ2VJRCB8PSBNZXNz
YWdlQm9keUlzT09MOworICAgICAgICBtX2F0dGFjaG1lbnRDb3VudCsrOworICAgIH0KKworICAg
IGJvb2wgaXNNZXNzYWdlQm9keU9PTCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZUlEICYgTWVz
c2FnZUJvZHlJc09PTDsgfQorCisgICAgc2l6ZV90IGJvZHlTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9ib2R5U2l6ZTsgfQorCisgICAgTWVzc2FnZUlEIG1lc3NhZ2VJRCgpIGNvbnN0IHsgcmV0dXJu
IE1lc3NhZ2VJRDo6ZnJvbUludChtX21lc3NhZ2VJRCAmIH5NZXNzYWdlQm9keUlzT09MKTsgfQor
CisgICAgc2l6ZV90IGF0dGFjaG1lbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0YWNobWVu
dENvdW50OyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV9tZXNzYWdlSUQ7CisgICAgc2l6
ZV90IG1fYm9keVNpemU7CisgICAgc2l6ZV90IG1fYXR0YWNobWVudENvdW50OworfTsKIAogdm9p
ZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUluaXRpYWxpemUoSWRlbnRpZmllciBpZGVudGlmaWVyKQog
ewotICAgIG1fc2VydmVyTmFtZSA9IGlkZW50aWZpZXI7Ci0gICAgbV9zb2NrZXQgPSAwOworICAg
IG1fc29ja2V0RGVzY3JpcHRvciA9IGlkZW50aWZpZXI7CisgICAgbV9zb2NrZXROb3RpZmllciA9
IDA7CiAgICAgbV9yZWFkQnVmZmVyLnJlc2l6ZShtZXNzYWdlTWF4U2l6ZSk7CiAgICAgbV9jdXJy
ZW50TWVzc2FnZVNpemUgPSAwOwogfQogCiB2b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW52YWxp
ZGF0ZSgpCiB7Ci0gICAgbV9zb2NrZXQtPmRpc2Nvbm5lY3QoKTsKLSAgICBpZiAoIW1faXNTZXJ2
ZXIpCi0gICAgICAgIG1fc29ja2V0LT5kZWxldGVMYXRlcigpOwotICAgIG1fc29ja2V0ID0gMDsK
KyAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IC0xKQorICAgICAgICB3aGlsZSAoY2xvc2Uo
bV9zb2NrZXREZXNjcmlwdG9yKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikge307CisKKyAgICBp
ZiAoIW1faXNDb25uZWN0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGRlbGV0ZSBtX3NvY2tl
dE5vdGlmaWVyOworICAgIG1fc29ja2V0Tm90aWZpZXIgPSAwOworICAgIG1fc29ja2V0RGVzY3Jp
cHRvciA9IC0xOworICAgIG1faXNDb25uZWN0ZWQgPSBmYWxzZTsKIH0KIAorY2xhc3MgU29ja2V0
Tm90aWZpZXJSZXNvdXJjZUd1YXJkIHsKK3B1YmxpYzoKKyAgICBTb2NrZXROb3RpZmllclJlc291
cmNlR3VhcmQoUVNvY2tldE5vdGlmaWVyKiBzb2NrZXROb3RpZmllcikKKyAgICAgICAgOiBtX3Nv
Y2tldE5vdGlmaWVyKHNvY2tldE5vdGlmaWVyKQorICAgIHsKKyAgICAgICAgbV9zb2NrZXROb3Rp
Zmllci0+c2V0RW5hYmxlZChmYWxzZSk7CisgICAgfQorCisgICAgflNvY2tldE5vdGlmaWVyUmVz
b3VyY2VHdWFyZCgpCisgICAgeworICAgICAgICBtX3NvY2tldE5vdGlmaWVyLT5zZXRFbmFibGVk
KHRydWUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBRU29ja2V0Tm90aWZpZXIqIGNvbnN0IG1f
c29ja2V0Tm90aWZpZXI7Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBpdGVyYXRvcj4K
K2NsYXNzIEF0dGFjaG1lbnRSZXNvdXJjZUd1YXJkIHsKK3B1YmxpYzoKKyAgICBBdHRhY2htZW50
UmVzb3VyY2VHdWFyZChUJiBhdHRhY2htZW50cykKKyAgICAgICAgOiBtX2F0dGFjaG1lbnRzKGF0
dGFjaG1lbnRzKQorICAgIHsKKyAgICB9CisgICAgfkF0dGFjaG1lbnRSZXNvdXJjZUd1YXJkKCkK
KyAgICB7CisgICAgICAgIGl0ZXJhdG9yIGVuZCA9IG1fYXR0YWNobWVudHMuZW5kKCk7CisgICAg
ICAgIGZvciAoaXRlcmF0b3IgaSA9IG1fYXR0YWNobWVudHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsr
aSkKKyAgICAgICAgICAgIGktPmRpc3Bvc2UoKTsKKyAgICB9Citwcml2YXRlOgorICAgIFQmIG1f
YXR0YWNobWVudHM7Cit9OworCiB2b2lkIENvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIoKQog
ewotICAgIHdoaWxlIChtX3NvY2tldC0+Ynl0ZXNBdmFpbGFibGUoKSkgewotICAgICAgICBpZiAo
IW1fY3VycmVudE1lc3NhZ2VTaXplKSB7Ci0gICAgICAgICAgICBzaXplX3QgbnVtYmVyT2ZCeXRl
c1JlYWQgPSBtX3NvY2tldC0+cmVhZChyZWludGVycHJldF9jYXN0PGNoYXIqPihtX3JlYWRCdWZm
ZXIuZGF0YSgpKSwgc2l6ZW9mKHNpemVfdCkpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChu
dW1iZXJPZkJ5dGVzUmVhZCwgbnVtYmVyT2ZCeXRlc1JlYWQpOwotICAgICAgICAgICAgbV9jdXJy
ZW50TWVzc2FnZVNpemUgPSAqcmVpbnRlcnByZXRfY2FzdDxzaXplX3QqPihtX3JlYWRCdWZmZXIu
ZGF0YSgpKTsKLSAgICAgICAgfQorICAgIERlcXVlPEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnRzOwor
ICAgIFNvY2tldE5vdGlmaWVyUmVzb3VyY2VHdWFyZCBzb2NrZXROb3RpZmllckVuYWJsZXIobV9z
b2NrZXROb3RpZmllcik7CisgICAgQXR0YWNobWVudFJlc291cmNlR3VhcmQ8RGVxdWU8QXR0YWNo
bWVudD4sIERlcXVlPEF0dGFjaG1lbnQ+OjppdGVyYXRvcj4gYXR0YWNoZW1lbnREaXNwb3Nlcihh
dHRhY2htZW50cyk7CisKKyAgICBjaGFyIGF0dGFjaG1lbnREZXNjcmlwdG9yQnVmZmVyW0NNU0df
U1BBQ0Uoc2l6ZW9mKGludCkgKiAoYXR0YWNobWVudE1heEFtb3VudCkpXTsKKyAgICBzdHJ1Y3Qg
bXNnaGRyIG1lc3NhZ2U7CisgICAgbWVtc2V0KCZtZXNzYWdlLCAwLCBzaXplb2YobWVzc2FnZSkp
OworCisgICAgc3RydWN0IGlvdmVjIGlvdlsxXTsKKyAgICBtZW1zZXQoJmlvdiwgMCwgc2l6ZW9m
KGlvdikpOwogCi0gICAgICAgIGlmIChtX3NvY2tldC0+Ynl0ZXNBdmFpbGFibGUoKSA8IG1fY3Vy
cmVudE1lc3NhZ2VTaXplKQorICAgIG1lc3NhZ2UubXNnX2NvbnRyb2wgPSBhdHRhY2htZW50RGVz
Y3JpcHRvckJ1ZmZlcjsKKyAgICBtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gQ01TR19TUEFDRShz
aXplb2YoaW50KSAqIChhdHRhY2htZW50TWF4QW1vdW50KSk7CisKKyAgICBpb3ZbMF0uaW92X2Jh
c2UgPSBtX3JlYWRCdWZmZXIuZGF0YSgpOworICAgIGlvdlswXS5pb3ZfbGVuID0gbV9yZWFkQnVm
ZmVyLnNpemUoKTsKKworICAgIG1lc3NhZ2UubXNnX2lvdiA9IGlvdjsKKyAgICBtZXNzYWdlLm1z
Z19pb3ZsZW4gPSAxOworCisKKyAgICBpbnQgbWVzc2FnZUxlbmd0aCA9IDA7CisgICAgd2hpbGUg
KChtZXNzYWdlTGVuZ3RoID0gcmVjdm1zZyhtX3NvY2tldERlc2NyaXB0b3IsICZtZXNzYWdlLCBN
U0dfQ01TR19DTE9FWEVDKSkgPT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKQog
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0cnVjdCBjbXNnaGRyKiBjb250cm9s
TWVzc2FnZSA9IENNU0dfRklSU1RIRFIoJm1lc3NhZ2UpOworCisgICAgTWVzc2FnZUluZm8gbWVz
c2FnZUluZm87CisgICAgdW5zaWduZWQgY2hhciogbWVzc2FnZURhdGEgPSBtX3JlYWRCdWZmZXIu
ZGF0YSgpOworCisgICAgbWVtY3B5KCZtZXNzYWdlSW5mbywgbWVzc2FnZURhdGEsIHNpemVvZiht
ZXNzYWdlSW5mbykpOworICAgIEFTU0VSVChtZXNzYWdlTGVuZ3RoID09IHNpemVvZihtZXNzYWdl
SW5mbykgKyBtZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKSAqIHNpemVvZihzaXplX3QpICsg
KG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSA/IDAgOiBtZXNzYWdlSW5mby5ib2R5U2l6
ZSgpKSk7CisKKyAgICBtZXNzYWdlRGF0YSArPSBzaXplb2YobWVzc2FnZUluZm8pOworCisgICAg
UmVmUHRyPFdlYktpdDo6U2hhcmVkTWVtb3J5PiBvb2xNZXNzYWdlQm9keTsKKworICAgIGlmICht
ZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKSkgeworICAgICAgICBpZiAoY29udHJvbE1lc3Nh
Z2UgJiYgY29udHJvbE1lc3NhZ2UtPmNtc2dfbGV2ZWwgPT0gU09MX1NPQ0tFVCAmJiBjb250cm9s
TWVzc2FnZS0+Y21zZ190eXBlID09IFNDTV9SSUdIVFMpIHsKKyAgICAgICAgICAgIHNpemVfdCBh
dHRhY2htZW50U2l6ZXNbbWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50KCldOworICAgICAgICAg
ICAgbWVtY3B5KGF0dGFjaG1lbnRTaXplcywgbWVzc2FnZURhdGEsIHNpemVvZihhdHRhY2htZW50
U2l6ZXMpKTsKKworICAgICAgICAgICAgbWVzc2FnZURhdGEgKz0gc2l6ZW9mKGF0dGFjaG1lbnRT
aXplcyk7CisKKyAgICAgICAgICAgIGludCBmaWxlRGVzY3JpcHRvcnNbbWVzc2FnZUluZm8uYXR0
YWNobWVudENvdW50KCldOworICAgICAgICAgICAgbWVtY3B5KGZpbGVEZXNjcmlwdG9ycywgQ01T
R19EQVRBKGNvbnRyb2xNZXNzYWdlKSwgc2l6ZW9mKGZpbGVEZXNjcmlwdG9ycykpOworCisgICAg
ICAgICAgICBpbnQgYXR0YWNobWVudENvdW50ID0gbWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50
KCk7CiAKLSAgICAgICAgaWYgKG1fcmVhZEJ1ZmZlci5zaXplKCkgPCBtX2N1cnJlbnRNZXNzYWdl
U2l6ZSkKLSAgICAgICAgICAgIG1fcmVhZEJ1ZmZlci5ncm93KG1fY3VycmVudE1lc3NhZ2VTaXpl
KTsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlSW5mby5pc01lc3NhZ2VCb2R5T09MKCkpCisgICAg
ICAgICAgICAgICAgYXR0YWNobWVudENvdW50LS07CiAKLSAgICAgICAgc2l6ZV90IG51bWJlck9m
Qnl0ZXNSZWFkID0gbV9zb2NrZXQtPnJlYWQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9yZWFk
QnVmZmVyLmRhdGEoKSksIG1fY3VycmVudE1lc3NhZ2VTaXplKTsKLSAgICAgICAgQVNTRVJUX1VO
VVNFRChudW1iZXJPZkJ5dGVzUmVhZCwgbnVtYmVyT2ZCeXRlc1JlYWQpOworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBhdHRhY2htZW50Q291bnQ7ICsraSkKKyAgICAgICAgICAgICAg
ICBhdHRhY2htZW50cy5hcHBlbmQoQXR0YWNobWVudChmaWxlRGVzY3JpcHRvcnNbaV0sIGF0dGFj
aG1lbnRTaXplc1tpXSkpOwogCi0gICAgICAgIC8vIFRoZSBtZXNzYWdlSUQgaXMgZW5jb2RlZCBh
dCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCi0gICAgICAgIHNpemVfdCByZWFsQnVmZmVyU2l6ZSA9
IG1fY3VycmVudE1lc3NhZ2VTaXplIC0gc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgdWludDMy
X3QgbWVzc2FnZUlEID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihtX3JlYWRCdWZmZXIu
ZGF0YSgpICsgcmVhbEJ1ZmZlclNpemUpOworICAgICAgICAgICAgaWYgKG1lc3NhZ2VJbmZvLmlz
TWVzc2FnZUJvZHlPT0woKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChtZXNzYWdlSW5mby5i
b2R5U2l6ZSgpKTsKIAotICAgICAgICBwcm9jZXNzSW5jb21pbmdNZXNzYWdlKE1lc3NhZ2VJRDo6
ZnJvbUludChtZXNzYWdlSUQpLCBhZG9wdFB0cihuZXcgQXJndW1lbnREZWNvZGVyKG1fcmVhZEJ1
ZmZlci5kYXRhKCksIHJlYWxCdWZmZXJTaXplKSkpOworICAgICAgICAgICAgICAgIFdlYktpdDo6
U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOworICAgICAgICAgICAgICAgIGhhbmRsZS5hZG9w
dEZyb21BdHRhY2htZW50KGZpbGVEZXNjcmlwdG9yc1thdHRhY2htZW50Q291bnRdLCBhdHRhY2ht
ZW50U2l6ZXNbYXR0YWNobWVudENvdW50XSk7CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5p
c051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBt
X2N1cnJlbnRNZXNzYWdlU2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgb29sTWVzc2FnZUJvZHkg
PSBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlKGhhbmRsZSwgV2ViS2l0OjpTaGFyZWRNZW1v
cnk6OlJlYWRPbmx5KTsKKyAgICAgICAgICAgICAgICBpZiAoIW9vbE1lc3NhZ2VCb2R5KSB7Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBjb250cm9sTWVzc2FnZSA9IENNU0dfTlhUSERSKCZtZXNzYWdlLCBjb250cm9sTWVzc2Fn
ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KKworICAgIEFTU0VSVChhdHRh
Y2htZW50cy5zaXplKCkgPT0gbWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpID8gbWVzc2Fn
ZUluZm8uYXR0YWNobWVudENvdW50KCkgLSAxIDogbWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50
KCkpOworCisgICAgdW5zaWduZWQgY2hhciogbWVzc2FnZUJvZHkgPSBtZXNzYWdlRGF0YTsKKwor
ICAgIGlmIChtZXNzYWdlSW5mby5pc01lc3NhZ2VCb2R5T09MKCkpCisgICAgICAgIG1lc3NhZ2VC
b2R5ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob29sTWVzc2FnZUJvZHktPmRh
dGEoKSk7CisKKyAgICBBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50RGVjb2RlcjsKKyAgICBpZiAo
YXR0YWNobWVudHMuaXNFbXB0eSgpKQorICAgICAgICBhcmd1bWVudERlY29kZXIgPSBuZXcgQXJn
dW1lbnREZWNvZGVyKG1lc3NhZ2VCb2R5LCBtZXNzYWdlSW5mby5ib2R5U2l6ZSgpKTsKKyAgICBl
bHNlCisgICAgICAgIGFyZ3VtZW50RGVjb2RlciA9IG5ldyBBcmd1bWVudERlY29kZXIobWVzc2Fn
ZUJvZHksIG1lc3NhZ2VJbmZvLmJvZHlTaXplKCksIGF0dGFjaG1lbnRzKTsKKworICAgIHByb2Nl
c3NJbmNvbWluZ01lc3NhZ2UobWVzc2FnZUluZm8ubWVzc2FnZUlEKCksIGFkb3B0UHRyKGFyZ3Vt
ZW50RGVjb2RlcikpOworCisgICAgQVNTRVJUKCFjb250cm9sTWVzc2FnZSk7CiB9CiAKIGJvb2wg
Q29ubmVjdGlvbjo6b3BlbigpCiB7Ci0gICAgQVNTRVJUKCFtX3NvY2tldCk7Ci0KLSAgICBpZiAo
bV9pc1NlcnZlcikgewotICAgICAgICBtX3NvY2tldCA9IFdlYktpdDo6UHJvY2Vzc0xhdW5jaGVy
Ojp0YWtlUGVuZGluZ0Nvbm5lY3Rpb24oKTsKLSAgICAgICAgbV9pc0Nvbm5lY3RlZCA9IG1fc29j
a2V0OwotICAgICAgICBpZiAobV9pc0Nvbm5lY3RlZCkgewotICAgICAgICAgICAgbV9jb25uZWN0
aW9uUXVldWUubW92ZVNvY2tldFRvV29ya1RocmVhZChtX3NvY2tldCk7Ci0gICAgICAgICAgICBt
X2Nvbm5lY3Rpb25RdWV1ZS5jb25uZWN0U2lnbmFsKG1fc29ja2V0LCBTSUdOQUwocmVhZHlSZWFk
KCkpLCBXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVy
KSk7CisgICAgQVNTRVJUKCFtX3NvY2tldE5vdGlmaWVyKTsKKyAgICBpbnQgZmxhZ3MgPSBmY250
bChtX3NvY2tldERlc2NyaXB0b3IsIEZfR0VURkwsIDApOworICAgIHdoaWxlIChmY250bChtX3Nv
Y2tldERlc2NyaXB0b3IsIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSykgPT0gLTEpIHsKKyAg
ICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICAgIG1fc29ja2V0ID0gbmV3IFFMb2NhbFNvY2tldCgpOwotICAgICAgICBtX3NvY2tl
dC0+Y29ubmVjdFRvU2VydmVyKG1fc2VydmVyTmFtZSk7Ci0gICAgICAgIG1fY29ubmVjdGlvblF1
ZXVlLm1vdmVTb2NrZXRUb1dvcmtUaHJlYWQobV9zb2NrZXQpOwotICAgICAgICBtX2Nvbm5lY3Rp
b25RdWV1ZS5jb25uZWN0U2lnbmFsKG1fc29ja2V0LCBTSUdOQUwocmVhZHlSZWFkKCkpLCBXb3Jr
SXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVyKSk7Ci0gICAg
ICAgIG1fY29ubmVjdGlvblF1ZXVlLmNvbm5lY3RTaWduYWwobV9zb2NrZXQsIFNJR05BTChkaXNj
b25uZWN0ZWQoKSksIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OmNvbm5lY3Rp
b25EaWRDbG9zZSkpOwotICAgICAgICBtX2lzQ29ubmVjdGVkID0gbV9zb2NrZXQtPndhaXRGb3JD
b25uZWN0ZWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIG1faXNDb25uZWN0ZWQ7CisKKyAgICBtX2lz
Q29ubmVjdGVkID0gdHJ1ZTsKKyAgICBtX3NvY2tldE5vdGlmaWVyID0gbV9jb25uZWN0aW9uUXVl
dWUucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIobV9zb2NrZXREZXNjcmlwdG9yLCBRU29ja2V0
Tm90aWZpZXI6OlJlYWQsIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWR5
UmVhZEhhbmRsZXIpKTsKKworICAgIC8vIFNjaGVkdWxlIGEgY2FsbCB0byByZWFkeVJlYWRIYW5k
bGVyLiBEYXRhIG1heSBoYXZlIGFycml2ZWQgYmVmb3JlIGluc3RhbGxhdGlvbiBvZiB0aGUgc2ln
bmFsCisgICAgLy8gaGFuZGxlci4KKyAgICBtX2Nvbm5lY3Rpb25RdWV1ZS5zY2hlZHVsZVdvcmso
V29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6cmVhZHlSZWFkSGFuZGxlcikpOwor
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgQ29ubmVjdGlvbjo6cGxhdGZvcm1DYW5TZW5k
T3V0Z29pbmdNZXNzYWdlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc29ja2V0OworICAgIHJl
dHVybiBtX3NvY2tldE5vdGlmaWVyOwogfQogCiBib29sIENvbm5lY3Rpb246OnNlbmRPdXRnb2lu
Z01lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgUGFzc093blB0cjxBcmd1bWVudEVuY29kZXI+
IGFyZ3VtZW50cykKIHsKLSAgICBBU1NFUlQobV9zb2NrZXQpOworICAgIEFTU0VSVChtX3NvY2tl
dE5vdGlmaWVyKTsKKyAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoTWVzc2FnZUluZm8pICsgYXR0
YWNobWVudE1heEFtb3VudCAqIHNpemVvZihzaXplX3QpIDw9IG1lc3NhZ2VNYXhTaXplLCBBdHRh
Y2htZW50c0ZpdFRvTWVzc2FnZUlubGluZSk7CiAKLSAgICAvLyBXZSBwdXQgdGhlIG1lc3NhZ2Ug
SUQgbGFzdC4KLSAgICBhcmd1bWVudHMtPmVuY29kZVVJbnQzMihtZXNzYWdlSUQudG9JbnQoKSk7
CisgICAgVmVjdG9yPEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnRzID0gYXJndW1lbnRzLT5yZWxlYXNl
QXR0YWNobWVudHMoKTsKKyAgICBBdHRhY2htZW50UmVzb3VyY2VHdWFyZDxWZWN0b3I8QXR0YWNo
bWVudD4sIFZlY3RvcjxBdHRhY2htZW50Pjo6aXRlcmF0b3I+IGF0dGFjaGVtZW50RGlzcG9zZXIo
YXR0YWNobWVudHMpOwogCi0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBhcmd1bWVudHMtPmJ1ZmZl
clNpemUoKTsKLQotICAgIC8vIFdyaXRlIG1lc3NhZ2Ugc2l6ZSBmaXJzdAotICAgIC8vIEZJWE1F
OiBTaG91bGQgIGp1c3QgZG8gYSBzaW5nbGUgd3JpdGUuCi0gICAgcWludDY0IGJ5dGVzV3JpdHRl
bkZvclNpemUgPSBtX3NvY2tldC0+d3JpdGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmJ1ZmZl
clNpemUpLCBzaXplb2YoYnVmZmVyU2l6ZSkpOwotICAgIGlmIChieXRlc1dyaXR0ZW5Gb3JTaXpl
ICE9IHNpemVvZihidWZmZXJTaXplKSkgewotICAgICAgICBjb25uZWN0aW9uRGlkQ2xvc2UoKTsK
KyAgICBpZiAoYXR0YWNobWVudHMuc2l6ZSgpID4gKGF0dGFjaG1lbnRNYXhBbW91bnQgLSAxKSkg
eworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIHFpbnQ2NCBieXRlc1dyaXR0ZW5Gb3JCdWZmZXIgPSBtX3NvY2tldC0+d3Jp
dGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYXJndW1lbnRzLT5idWZmZXIoKSksIGFyZ3VtZW50
cy0+YnVmZmVyU2l6ZSgpKTsKLSAgICBpZiAoYnl0ZXNXcml0dGVuRm9yQnVmZmVyICE9IGFyZ3Vt
ZW50cy0+YnVmZmVyU2l6ZSgpKSB7Ci0gICAgICAgIGNvbm5lY3Rpb25EaWRDbG9zZSgpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgTWVzc2FnZUluZm8gbWVzc2FnZUluZm8obWVzc2FnZUlE
LCBhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSwgYXR0YWNobWVudHMuc2l6ZSgpKTsKKyAgICBzaXpl
X3QgbWVzc2FnZVNpemVXaXRoQm9keUlubGluZSA9IHNpemVvZihtZXNzYWdlSW5mbykgKyAoYXR0
YWNobWVudHMuc2l6ZSgpICogc2l6ZW9mKHNpemVfdCkpICsgYXJndW1lbnRzLT5idWZmZXJTaXpl
KCk7CisgICAgaWYgKG1lc3NhZ2VTaXplV2l0aEJvZHlJbmxpbmUgPiBtZXNzYWdlTWF4U2l6ZSAm
JiBhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSkgeworICAgICAgICBSZWZQdHI8V2ViS2l0OjpTaGFy
ZWRNZW1vcnk+IG9vbE1lc3NhZ2VCb2R5ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZShh
cmd1bWVudHMtPmJ1ZmZlclNpemUoKSk7CisgICAgICAgIGlmICghb29sTWVzc2FnZUJvZHkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgV2ViS2l0OjpTaGFyZWRNZW1vcnk6
OkhhbmRsZSBoYW5kbGU7CisgICAgICAgIGlmICghb29sTWVzc2FnZUJvZHktPmNyZWF0ZUhhbmRs
ZShoYW5kbGUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpSZWFkT25seSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbWVzc2FnZUluZm8uc2V0TWVzc2FnZUJvZHlPT0woKTsK
KworICAgICAgICBtZW1jcHkob29sTWVzc2FnZUJvZHktPmRhdGEoKSwgYXJndW1lbnRzLT5idWZm
ZXIoKSwgYXJndW1lbnRzLT5idWZmZXJTaXplKCkpOworCisgICAgICAgIGF0dGFjaG1lbnRzLmFw
cGVuZChoYW5kbGUucmVsZWFzZVRvQXR0YWNobWVudCgpKTsKICAgICB9CiAKLSAgICBtX3NvY2tl
dC0+Zmx1c2goKTsKKyAgICBzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2U7CisgICAgbWVtc2V0KCZtZXNz
YWdlLCAwLCBzaXplb2YobWVzc2FnZSkpOwogCisgICAgc3RydWN0IGlvdmVjIGlvdlszXTsKKyAg
ICBtZW1zZXQoJmlvdiwgMCwgc2l6ZW9mKGlvdikpOworCisgICAgbWVzc2FnZS5tc2dfaW92ID0g
aW92OworICAgIGludCBpb3ZMZW5ndGggPSAxOworCisgICAgaW92WzBdLmlvdl9iYXNlID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oJm1lc3NhZ2VJbmZvKTsKKyAgICBpb3ZbMF0uaW92X2xlbiA9
IHNpemVvZihtZXNzYWdlSW5mbyk7CisKKworICAgIGNoYXIgYXR0YWNobWVudEZEQnVmZmVyW0NN
U0dfU1BBQ0Uoc2l6ZW9mKGludCkgKiAoYXR0YWNobWVudHMuc2l6ZSgpKSldOworICAgIHNpemVf
dCBhdHRhY2htZW50U2l6ZXNbYXR0YWNobWVudHMuc2l6ZSgpXTsKKworICAgIGlmICghYXR0YWNo
bWVudHMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1lc3NhZ2UubXNnX2NvbnRyb2wgPSBhdHRhY2ht
ZW50RkRCdWZmZXI7CisgICAgICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoYXR0
YWNobWVudEZEQnVmZmVyKTsKKworICAgICAgICBzdHJ1Y3QgY21zZ2hkciogY21zZyA9IENNU0df
RklSU1RIRFIoJm1lc3NhZ2UpOworICAgICAgICBjbXNnLT5jbXNnX2xldmVsID0gU09MX1NPQ0tF
VDsKKyAgICAgICAgY21zZy0+Y21zZ190eXBlID0gU0NNX1JJR0hUUzsKKyAgICAgICAgY21zZy0+
Y21zZ19sZW4gPSBDTVNHX0xFTihzaXplb2YoaW50KSAqIGF0dGFjaG1lbnRzLnNpemUoKSk7CisK
KyAgICAgICAgaW50KiBmZHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oQ01TR19EQVRBKGNt
c2cpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRhY2htZW50cy5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgYXR0YWNobWVudFNpemVzW2ldID0gYXR0YWNobWVudHNbaV0uc2l6
ZSgpOworICAgICAgICAgICAgZmRwdHJbaV0gPSBhdHRhY2htZW50c1tpXS5maWxlRGVzY3JpcHRv
cigpOworICAgICAgICB9CisKKyAgICAgICAgbWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IGNtc2ct
PmNtc2dfbGVuOworCisgICAgICAgIGlvdltpb3ZMZW5ndGhdLmlvdl9iYXNlID0gYXR0YWNobWVu
dFNpemVzOworICAgICAgICBpb3ZbaW92TGVuZ3RoXS5pb3ZfbGVuID0gc2l6ZW9mKGF0dGFjaG1l
bnRTaXplcyk7CisgICAgICAgICsraW92TGVuZ3RoOworICAgIH0KKworICAgIGlmICghbWVzc2Fn
ZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpICYmIGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpKSB7Cisg
ICAgICAgIGlvdltpb3ZMZW5ndGhdLmlvdl9iYXNlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
YXJndW1lbnRzLT5idWZmZXIoKSk7CisgICAgICAgIGlvdltpb3ZMZW5ndGhdLmlvdl9sZW4gPSBh
cmd1bWVudHMtPmJ1ZmZlclNpemUoKTsKKyAgICAgICAgKytpb3ZMZW5ndGg7CisgICAgfQorCisg
ICAgbWVzc2FnZS5tc2dfaW92bGVuID0gaW92TGVuZ3RoOworCisgICAgaW50IGJ5dGVzU2VudCA9
IDA7CisgICAgd2hpbGUgKChieXRlc1NlbnQgPSBzZW5kbXNnKG1fc29ja2V0RGVzY3JpcHRvciwg
Jm1lc3NhZ2UsIDApKSA9PSAtMSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lk
IENvbm5lY3Rpb246OnNldFNob3VsZENsb3NlQ29ubmVjdGlvbk9uUHJvY2Vzc1Rlcm1pbmF0aW9u
KFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzKQoreworICAgIG1fY29u
bmVjdGlvblF1ZXVlLnNjaGVkdWxlV29ya09uVGVybWluYXRpb24ocHJvY2VzcywgV29ya0l0ZW06
OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6Y29ubmVjdGlvbkRpZENsb3NlKSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIENvcmVJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L1NoYXJlZE1lbW9yeS5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgK
aW5kZXggMDVkYzBkZC4uYmI2MTY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vU2hhcmVkTWVtb3J5LmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVt
b3J5LmgKQEAgLTMxLDEwICszMSw3IEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAog
I2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPFF0R2xvYmFsPgotUVRfQkVHSU5fTkFNRVNQQUNF
Ci1jbGFzcyBRU2hhcmVkTWVtb3J5OwotUVRfRU5EX05BTUVTUEFDRQorI2luY2x1ZGUgIkF0dGFj
aG1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNlbmRpZgogCkBAIC02
Miw2ICs1OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RW5jb2RlciopIGNvbnN0OwogICAgICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6
QXJndW1lbnREZWNvZGVyKiwgSGFuZGxlJik7CiAKKyNpZiBQTEFURk9STShRVCkKKyAgICAgICAg
Q29yZUlQQzo6QXR0YWNobWVudCByZWxlYXNlVG9BdHRhY2htZW50KCkgY29uc3Q7CisgICAgICAg
IHZvaWQgYWRvcHRGcm9tQXR0YWNobWVudChpbnQgZmlsZURlc2NyaXB0b3IsIHNpemVfdCk7Cisj
ZW5kaWYKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgU2hhcmVkTWVtb3J5Owog
I2lmIFBMQVRGT1JNKE1BQykKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGljOgogI2VsaWYgUExBVEZP
Uk0oV0lOKQogICAgICAgICBtdXRhYmxlIEhBTkRMRSBtX2hhbmRsZTsKICNlbGlmIFBMQVRGT1JN
KFFUKQotICAgICAgICBtdXRhYmxlIFN0cmluZyBtX2tleTsKKyAgICAgICAgbXV0YWJsZSBpbnQg
bV9maWxlRGVzY3JpcHRvcjsKICNlbmRpZgogICAgICAgICBzaXplX3QgbV9zaXplOwogICAgIH07
CkBAIC05Niw3ICs5Nyw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIEhBTkRM
RSBtX2hhbmRsZTsKICNlbGlmIFBMQVRGT1JNKFFUKQotICAgIFFTaGFyZWRNZW1vcnkqIG1faW1w
bDsKKyAgICBpbnQgbV9maWxlRGVzY3JpcHRvcjsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Xb3JrUXVldWUuaAppbmRleCA3OGZhOGI3Li5iY2FhZTBlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Xb3JrUXVldWUuaApAQCAtNDEsNyArNDEsOCBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogI2lmIFBMQVRGT1JNKFFUKQotY2xhc3MgUUxvY2FsU29ja2V0OworI2luY2x1ZGUgPFFT
b2NrZXROb3RpZmllcj4KKyNpbmNsdWRlICJQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgiCiBj
bGFzcyBRT2JqZWN0OwogY2xhc3MgUVRocmVhZDsKICNlbGlmIFBMQVRGT1JNKEdUSykKQEAgLTc5
LDEwICs4MCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVySGFuZGxlKEhBTkRMRSwgUGFz
c093blB0cjxXb3JrSXRlbT4pOwogICAgIHZvaWQgdW5yZWdpc3RlckFuZENsb3NlSGFuZGxlKEhB
TkRMRSk7CiAjZWxpZiBQTEFURk9STShRVCkKLSAgICB2b2lkIGNvbm5lY3RTaWduYWwoUU9iamVj
dCosIGNvbnN0IGNoYXIqIHNpZ25hbCwgUGFzc093blB0cjxXb3JrSXRlbT4pOwotICAgIHZvaWQg
ZGlzY29ubmVjdFNpZ25hbChRT2JqZWN0KiwgY29uc3QgY2hhciogc2lnbmFsKTsKLQotICAgIHZv
aWQgbW92ZVNvY2tldFRvV29ya1RocmVhZChRTG9jYWxTb2NrZXQqKTsKKyAgICBRU29ja2V0Tm90
aWZpZXIqIHJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCwgUVNvY2tldE5vdGlmaWVyOjpU
eXBlLCBQYXNzT3duUHRyPFdvcmtJdGVtPik7CisgICAgdm9pZCBzY2hlZHVsZVdvcmtPblRlcm1p
bmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciwgUGFzc093blB0cjxXb3Jr
SXRlbT4pOwogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIHZvaWQgcmVnaXN0ZXJFdmVudFNvdXJj
ZUhhbmRsZXIoaW50LCBpbnQsIFBhc3NPd25QdHI8V29ya0l0ZW0+KTsKICAgICB2b2lkIHVucmVn
aXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQzNmQ4MmIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVk
TWVtb3J5UG9vbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICogQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiTWFwcGVkTWVtb3J5UG9vbC5oIgot
Ci0jaW5jbHVkZSAiQ2xlYW51cEhhbmRsZXIuaCIKLSNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIK
LSNpbmNsdWRlIDxRRGlyPgotI2luY2x1ZGUgPFFJT0RldmljZT4KLSNpbmNsdWRlIDxRVGVtcG9y
YXJ5RmlsZT4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLU1hcHBlZE1lbW9yeVBvb2wqIE1hcHBl
ZE1lbW9yeVBvb2w6OnRoZUluc3RhbmNlID0gMDsKLQotTWFwcGVkTWVtb3J5UG9vbCogTWFwcGVk
TWVtb3J5UG9vbDo6aW5zdGFuY2UoKQotewotICAgIGlmICghdGhlSW5zdGFuY2UpIHsKLSAgICAg
ICAgdGhlSW5zdGFuY2UgPSBuZXcgTWFwcGVkTWVtb3J5UG9vbDsKLQotICAgICAgICAvLyBEbyBu
b3QgbGVhdmUgbWFwcGluZyBmaWxlcyBvbiB0aGUgZGlzay4KLSAgICAgICAgQ2xlYW51cEhhbmRs
ZXI6Omluc3RhbmNlKCktPm1hcmtGb3JDbGVhbnVwKHRoZUluc3RhbmNlKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdGhlSW5zdGFuY2U7Ci19Ci0KLU1hcHBlZE1lbW9yeVBvb2w6On5NYXBwZWRNZW1v
cnlQb29sKCkKLXsKLSAgICBDbGVhbnVwSGFuZGxlcjo6aW5zdGFuY2UoKS0+dW5tYXJrKHRoZUlu
c3RhbmNlKTsKLQotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBtX3Bvb2wuc2l6ZSgpOyAr
K24pIHsKLSAgICAgICAgTWFwcGVkTWVtb3J5JiBjdXJyZW50ID0gbV9wb29sLmF0KG4pOwotICAg
ICAgICBpZiAoIWN1cnJlbnQuZmlsZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBj
dXJyZW50LmZpbGUtPnJlbW92ZSgpOwotICAgICAgICBkZWxldGUgY3VycmVudC5maWxlOwotICAg
IH0KLSAgICBtX3Bvb2wuY2xlYXIoKTsKLX0KLQotTWFwcGVkTWVtb3J5KiBNYXBwZWRNZW1vcnlQ
b29sOjptYXBNZW1vcnkoc2l6ZV90IHNpemUpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsg
biA8IG1fcG9vbC5zaXplKCk7ICsrbikgewotICAgICAgICBNYXBwZWRNZW1vcnkmIGN1cnJlbnQg
PSBtX3Bvb2wuYXQobik7Ci0gICAgICAgIGlmIChjdXJyZW50LmRhdGFTaXplID49IHNpemUgJiYg
Y3VycmVudC5pc0ZyZWUoKSkgewotICAgICAgICAgICAgY3VycmVudC5tYXJrVXNlZCgpOwotICAg
ICAgICAgICAgcmV0dXJuICZjdXJyZW50OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgTWFwcGVk
TWVtb3J5IG5ld01hcDsKLSAgICBuZXdNYXAuZGF0YVNpemUgPSBzaXplOwotICAgIG5ld01hcC5m
aWxlID0gbmV3IFFUZW1wb3JhcnlGaWxlKFFEaXI6OnRlbXBQYXRoKCkgKyAiL1dlYktpdDJVcGRh
dGVDaHVuayIpOwotICAgIG5ld01hcC5maWxlLT5vcGVuKFFJT0RldmljZTo6UmVhZFdyaXRlKTsK
LSAgICBuZXdNYXAuZmlsZU5hbWUgPSBuZXdNYXAuZmlsZS0+ZmlsZU5hbWUoKTsKLSAgICBuZXdN
YXAuZmlsZS0+cmVzaXplKG5ld01hcC5tYXBTaXplKCkpOwotICAgIG5ld01hcC5tYXBwZWRCeXRl
cyA9IG5ld01hcC5maWxlLT5tYXAoMCwgbmV3TWFwLm1hcFNpemUoKSk7Ci0gICAgbmV3TWFwLmZp
bGUtPmNsb3NlKCk7Ci0gICAgbmV3TWFwLm1hcmtVc2VkKCk7Ci0gICAgbV9wb29sLmFwcGVuZChu
ZXdNYXApOwotICAgIHJldHVybiAmbV9wb29sLmxhc3QoKTsKLX0KLQotTWFwcGVkTWVtb3J5KiBN
YXBwZWRNZW1vcnlQb29sOjptYXBGaWxlKFFTdHJpbmcgZmlsZU5hbWUsIHNpemVfdCBzaXplKQot
ewotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBtX3Bvb2wuc2l6ZSgpOyArK24pIHsKLSAg
ICAgICAgTWFwcGVkTWVtb3J5JiBjdXJyZW50ID0gbV9wb29sLmF0KG4pOwotICAgICAgICBpZiAo
Y3VycmVudC5maWxlTmFtZSA9PSBmaWxlTmFtZSkgewotICAgICAgICAgICAgQVNTRVJUKCFjdXJy
ZW50LmlzRnJlZSgpKTsKLSAgICAgICAgICAgIHJldHVybiAmY3VycmVudDsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIE1hcHBlZE1lbW9yeSBuZXdNYXA7Ci0gICAgbmV3TWFwLmZpbGUgPSBuZXcg
UUZpbGUoZmlsZU5hbWUpOwotICAgIG5ld01hcC5maWxlTmFtZSA9IGZpbGVOYW1lOwotICAgIG5l
d01hcC5kYXRhU2l6ZSA9IHNpemU7Ci0gICAgQVNTRVJUKG5ld01hcC5maWxlLT5leGlzdHMoKSk7
Ci0gICAgQVNTRVJUKG5ld01hcC5maWxlLT5zaXplKCkgPj0gbmV3TWFwLm1hcFNpemUoKSk7Ci0g
ICAgbmV3TWFwLmZpbGUtPm9wZW4oUUlPRGV2aWNlOjpSZWFkV3JpdGUpOwotICAgIG5ld01hcC5t
YXBwZWRCeXRlcyA9IG5ld01hcC5maWxlLT5tYXAoMCwgbmV3TWFwLm1hcFNpemUoKSk7Ci0gICAg
QVNTRVJUKG5ld01hcC5tYXBwZWRCeXRlcyk7Ci0gICAgQVNTRVJUKCFuZXdNYXAuaXNGcmVlKCkp
OwotICAgIG5ld01hcC5maWxlLT5jbG9zZSgpOwotICAgIG1fcG9vbC5hcHBlbmQobmV3TWFwKTsK
LSAgICByZXR1cm4gJm1fcG9vbC5sYXN0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5o
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDZhZjhjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuaAorKysgL2Rldi9udWxsCkBAIC0xLDEw
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5
IG9mIFN6ZWdlZAotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE1hcHBlZE1lbW9yeVBvb2xfaAotI2RlZmlu
ZSBNYXBwZWRNZW1vcnlQb29sX2gKLQotI2luY2x1ZGUgPFFGaWxlPgotI2luY2x1ZGUgPFFPYmpl
Y3Q+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIE1hcHBlZE1lbW9yeVBvb2w7Ci0KLXN0
cnVjdCBNYXBwZWRNZW1vcnkgewotCi0gICAgUVN0cmluZyBtYXBwZWRGaWxlTmFtZSgpIGNvbnN0
Ci0gICAgewotICAgICAgICBBU1NFUlQoZmlsZSk7Ci0gICAgICAgIEFTU0VSVChtYXBwZWRCeXRl
cyk7Ci0gICAgICAgIHJldHVybiBmaWxlTmFtZTsKLSAgICB9Ci0KLSAgICB2b2lkIG1hcmtGcmVl
KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtYXBwZWRCeXRlcyk7Ci0gICAgICAgIGRhdGFQdHIt
PmlzRnJlZSA9IHRydWU7Ci0gICAgfQotCi0gICAgdWNoYXIqIGRhdGEoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1hcHBlZEJ5dGVzKTsKLSAgICAgICAgcmV0dXJuIGRhdGFQdHItPmJ5
dGVzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTWFwcGVkTWVtb3J5UG9v
bDsKLQotICAgIE1hcHBlZE1lbW9yeSgpCi0gICAgICAgIDogZmlsZSgwKQotICAgICAgICAsIG1h
cHBlZEJ5dGVzKDApCi0gICAgICAgICwgZGF0YVNpemUoMCkKLSAgICB7Ci0gICAgfQotCi0gICAg
dm9pZCBtYXJrVXNlZCgpIHsgZGF0YVB0ci0+aXNGcmVlID0gZmFsc2U7IH0KLQotICAgIHNpemVf
dCBtYXBTaXplKCkgY29uc3QgeyByZXR1cm4gZGF0YVNpemUgKyBzaXplb2YoRGF0YSk7IH0KLSAg
ICBib29sIGlzRnJlZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGFQdHItPmlzRnJlZTsgfQotCi0gICAg
c3RydWN0IERhdGEgewotICAgICAgICB1aW50MzJfdCBpc0ZyZWU7IC8vIGtlZXAgYnl0ZXMgYWxp
Z25lZAotICAgICAgICB1Y2hhciBieXRlc1tdOwotICAgIH07Ci0KLSAgICBRRmlsZSogZmlsZTsK
LSAgICBRU3RyaW5nIGZpbGVOYW1lOwotICAgIHVuaW9uIHsKLSAgICAgICAgdWNoYXIqIG1hcHBl
ZEJ5dGVzOwotICAgICAgICBEYXRhKiBkYXRhUHRyOwotICAgIH07Ci0gICAgc2l6ZV90IGRhdGFT
aXplOwotfTsKLQotY2xhc3MgTWFwcGVkTWVtb3J5UG9vbCA6IFFPYmplY3QgewotICAgIFFfT0JK
RUNUCi1wdWJsaWM6Ci0gICAgc3RhdGljIE1hcHBlZE1lbW9yeVBvb2wqIGluc3RhbmNlKCk7Ci0K
LSAgICBNYXBwZWRNZW1vcnkqIG1hcE1lbW9yeShzaXplX3Qgc2l6ZSk7Ci0gICAgTWFwcGVkTWVt
b3J5KiBtYXBGaWxlKFFTdHJpbmcgZmlsZU5hbWUsIHNpemVfdCBzaXplKTsKLQotcHJpdmF0ZToK
LSAgICBNYXBwZWRNZW1vcnlQb29sKCkgeyB9Ci0gICAgfk1hcHBlZE1lbW9yeVBvb2woKTsKLQot
ICAgIHN0YXRpYyBNYXBwZWRNZW1vcnlQb29sKiB0aGVJbnN0YW5jZTsKLQotICAgIFZlY3RvcjxN
YXBwZWRNZW1vcnk+IG1fcG9vbDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gTWFwcGVkTWVtb3J5UG9vbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9T
aGFyZWRNZW1vcnlRdC5jcHAKaW5kZXggZjVmZWNmYy4uOWEzMzczZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcApAQCAtMjksMTM5ICsyOSwxODEg
QEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgogI2luY2x1ZGUgIkFyZ3VtZW50RW5j
b2Rlci5oIgotI2luY2x1ZGUgIkNsZWFudXBIYW5kbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8UURpcj4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2lu
Y2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL21tYW4u
aD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1
ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+Ci0jaW5jbHVkZSA8UUxh
dGluMVN0cmluZz4KLSNpbmNsdWRlIDxRU2hhcmVkTWVtb3J5PgotI2luY2x1ZGUgPFFTdHJpbmc+
Ci0jaW5jbHVkZSA8UVV1aWQ+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIFNoYXJlZE1lbW9y
eTo6SGFuZGxlOjpIYW5kbGUoKQotICAgIDogbV9rZXkoKQorICAgIDogbV9maWxlRGVzY3JpcHRv
cigtMSkKICAgICAsIG1fc2l6ZSgwKQogewogfQogCiBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6fkhh
bmRsZSgpCiB7CisgICAgaWYgKCFpc051bGwoKSkKKyAgICAgICAgd2hpbGUgKGNsb3NlKG1fZmls
ZURlc2NyaXB0b3IpID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKIH0KIAogYm9vbCBTaGFyZWRN
ZW1vcnk6OkhhbmRsZTo6aXNOdWxsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9rZXkuaXNOdWxs
KCk7CisgICAgcmV0dXJuIG1fZmlsZURlc2NyaXB0b3IgPT0gLTE7CiB9CiAKIHZvaWQgU2hhcmVk
TWVtb3J5OjpIYW5kbGU6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIp
IGNvbnN0CiB7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlVUludDY0KG1fc2l6ZSk7Ci0gICAgZW5jb2Rl
ci0+ZW5jb2RlKG1fa2V5KTsKLSAgICBtX2tleSA9IFN0cmluZygpOworICAgIEFTU0VSVCghaXNO
dWxsKCkpOworCisgICAgZW5jb2Rlci0+ZW5jb2RlKHJlbGVhc2VUb0F0dGFjaG1lbnQoKSk7CiB9
CiAKIGJvb2wgU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXIqIGRlY29kZXIsIEhhbmRsZSYgaGFuZGxlKQogewogICAgIEFTU0VSVF9BUkcoaGFuZGxl
LCAhaGFuZGxlLm1fc2l6ZSk7Ci0gICAgQVNTRVJUX0FSRyhoYW5kbGUsIGhhbmRsZS5tX2tleS5p
c051bGwoKSk7CisgICAgQVNTRVJUX0FSRyhoYW5kbGUsIGhhbmRsZS5pc051bGwoKSk7CiAKLSAg
ICB1aW50NjRfdCBzaXplOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlVUludDY0KHNpemUpKQor
ICAgIENvcmVJUEM6OkF0dGFjaG1lbnQgYXR0YWNobWVudDsKKyAgICBpZiAoIWRlY29kZXItPmRl
Y29kZShhdHRhY2htZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RyaW5nIGtl
eTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZShrZXkpKQotICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBoYW5kbGUuYWRvcHRGcm9tQXR0YWNobWVudChhdHRhY2htZW50LnJlbGVhc2VGaWxlRGVz
Y3JpcHRvcigpLCBhdHRhY2htZW50LnNpemUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAg
ICBoYW5kbGUubV9zaXplID0gc2l6ZTsKLSAgICBoYW5kbGUubV9rZXkgPSBrZXk7CitDb3JlSVBD
OjpBdHRhY2htZW50IFNoYXJlZE1lbW9yeTo6SGFuZGxlOjpyZWxlYXNlVG9BdHRhY2htZW50KCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKIAotICAgIHJldHVybiB0cnVlOworICAg
IGludCB0ZW1wID0gbV9maWxlRGVzY3JpcHRvcjsKKyAgICBtX2ZpbGVEZXNjcmlwdG9yID0gLTE7
CisgICAgcmV0dXJuIENvcmVJUEM6OkF0dGFjaG1lbnQodGVtcCwgbV9zaXplKTsKIH0KIAotc3Rh
dGljIFFTdHJpbmcgY3JlYXRlVW5pcXVlS2V5KCkKK3ZvaWQgU2hhcmVkTWVtb3J5OjpIYW5kbGU6
OmFkb3B0RnJvbUF0dGFjaG1lbnQoaW50IGZpbGVEZXNjcmlwdG9yLCBzaXplX3Qgc2l6ZSkKIHsK
LSAgICByZXR1cm4gUUxhdGluMVN0cmluZygiUVdLU2hhcmVkTWVtb3J5S2V5IikgKyBRVXVpZDo6
Y3JlYXRlVXVpZCgpLnRvU3RyaW5nKCk7CisgICAgQVNTRVJUKCFtX3NpemUpOworICAgIEFTU0VS
VChpc051bGwoKSk7CisKKyAgICBtX2ZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7Cisg
ICAgbV9zaXplID0gc2l6ZTsKIH0KIAogUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1l
bW9yeTo6Y3JlYXRlKHNpemVfdCBzaXplKQogewotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNo
YXJlZE1lbW9yeShhZG9wdFJlZihuZXcgU2hhcmVkTWVtb3J5KSk7Ci0gICAgUVNoYXJlZE1lbW9y
eSogaW1wbCA9IG5ldyBRU2hhcmVkTWVtb3J5KGNyZWF0ZVVuaXF1ZUtleSgpKTsKLSAgICBib29s
IGNyZWF0ZWQgPSBpbXBsLT5jcmVhdGUoc2l6ZSk7Ci0gICAgQVNTRVJUX1VOVVNFRChjcmVhdGVk
LCBjcmVhdGVkKTsKKyAgICBRU3RyaW5nIHRlbXBOYW1lID0gUURpcjo6dGVtcCgpLmZpbGVQYXRo
KCJxd2tzaG0uWFhYWFhYIik7CisgICAgUUJ5dGVBcnJheSB0ZW1wTmFtZUNTVFIgPSB0ZW1wTmFt
ZS50b0xvY2FsOEJpdCgpOworICAgIGNoYXIqIHRlbXBOYW1lQyA9IHRlbXBOYW1lQ1NUUi5kYXRh
KCk7CisKKyAgICBpbnQgZmlsZURlc2NyaXB0b3I7CisgICAgd2hpbGUgKChmaWxlRGVzY3JpcHRv
ciA9IG1rb3N0ZW1wKHRlbXBOYW1lQywgT19DUkVBVCB8IE9fQ0xPRVhFQyB8IE9fUkRXUikpID09
IC0xKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgIH0KIAotICAgIHNoYXJlZE1lbW9yeS0+bV9pbXBsID0gaW1wbDsKLSAgICBzaGFyZWRN
ZW1vcnktPm1fc2l6ZSA9IHNpemU7Ci0gICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEgPSBpbXBsLT5k
YXRhKCk7CisgICAgd2hpbGUgKGZ0cnVuY2F0ZShmaWxlRGVzY3JpcHRvciwgc2l6ZSkgPT0gLTEp
IHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICB3aGlsZSAoY2xv
c2UoZmlsZURlc2NyaXB0b3IpID09IC0xICYmIGVycm5vID09IEVJTlRSKSB7fQorICAgICAgICAg
ICAgdW5saW5rKHRlbXBOYW1lQyk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQqIGRhdGEgPSBtbWFwKDAsIHNpemUsIFBST1RfUkVBRCB8IFBST1Rf
V1JJVEUsIE1BUF9TSEFSRUQsIGZpbGVEZXNjcmlwdG9yLCAwKTsKKyAgICBpZiAoZGF0YSA9PSBN
QVBfRkFJTEVEKSB7CisgICAgICAgIHdoaWxlIChjbG9zZShmaWxlRGVzY3JpcHRvcikgPT0gLTEg
JiYgZXJybm8gPT0gRUlOVFIpIHt9CisgICAgICAgIHVubGluayh0ZW1wTmFtZUMpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CiAKLSAgICAvLyBEbyBub3QgbGVhdmUgdGhlIHNoYXJlZCBtZW1v
cnkgc2VnbWVudCBiZWhpbmQuCi0gICAgQ2xlYW51cEhhbmRsZXI6Omluc3RhbmNlKCktPm1hcmtG
b3JDbGVhbnVwKGltcGwpOworICAgIHVubGluayh0ZW1wTmFtZUMpOwogCi0gICAgcmV0dXJuIHNo
YXJlZE1lbW9yeS5yZWxlYXNlKCk7CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gaW5zdGFuY2Ug
PSBhZG9wdFJlZihuZXcgU2hhcmVkTWVtb3J5KCkpOworICAgIGluc3RhbmNlLT5tX2RhdGEgPSBk
YXRhOworICAgIGluc3RhbmNlLT5tX2ZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7Cisg
ICAgaW5zdGFuY2UtPm1fc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIGluc3RhbmNlLnJlbGVhc2Uo
KTsKIH0KIAotc3RhdGljIGlubGluZSBRU2hhcmVkTWVtb3J5OjpBY2Nlc3NNb2RlIGFjY2Vzc01v
ZGUoU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uIHByb3RlY3Rpb24pCitzdGF0aWMgaW5saW5lIGlu
dCBhY2Nlc3NNb2RlTU1hcChTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb24gcHJvdGVjdGlvbikKIHsK
ICAgICBzd2l0Y2ggKHByb3RlY3Rpb24pIHsKICAgICBjYXNlIFNoYXJlZE1lbW9yeTo6UmVhZE9u
bHk6Ci0gICAgICAgIHJldHVybiBRU2hhcmVkTWVtb3J5OjpSZWFkT25seTsKKyAgICAgICAgcmV0
dXJuIFBST1RfUkVBRDsKICAgICBjYXNlIFNoYXJlZE1lbW9yeTo6UmVhZFdyaXRlOgotICAgICAg
ICByZXR1cm4gUVNoYXJlZE1lbW9yeTo6UmVhZFdyaXRlOworICAgICAgICByZXR1cm4gUFJPVF9S
RUFEIHwgUFJPVF9XUklURTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gUVNoYXJlZE1lbW9yeTo6UmVhZFdyaXRlOworICAgIHJldHVybiBQUk9UX1JFQUQg
fCBQUk9UX1dSSVRFOwogfQogCiBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5
OjpjcmVhdGUoY29uc3QgSGFuZGxlJiBoYW5kbGUsIFByb3RlY3Rpb24gcHJvdGVjdGlvbikKIHsK
LSAgICBpZiAoaGFuZGxlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQo
IWhhbmRsZS5pc051bGwoKSk7CiAKLSAgICBRU2hhcmVkTWVtb3J5KiBpbXBsID0gbmV3IFFTaGFy
ZWRNZW1vcnkoUVN0cmluZyhoYW5kbGUubV9rZXkpKTsKLSAgICBib29sIGF0dGFjaGVkID0gaW1w
bC0+YXR0YWNoKGFjY2Vzc01vZGUocHJvdGVjdGlvbikpOwotICAgIGlmICghYXR0YWNoZWQpIHsK
LSAgICAgICAgZGVsZXRlIGltcGw7CisgICAgdm9pZCogZGF0YSA9IG1tYXAoMCwgaGFuZGxlLm1f
c2l6ZSwgYWNjZXNzTW9kZU1NYXAocHJvdGVjdGlvbiksIE1BUF9TSEFSRUQsIGhhbmRsZS5tX2Zp
bGVEZXNjcmlwdG9yLCAwKTsKKyAgICBpZiAoZGF0YSA9PSBNQVBfRkFJTEVEKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnko
YWRvcHRSZWYobmV3IFNoYXJlZE1lbW9yeSkpOwotICAgIHNoYXJlZE1lbW9yeS0+bV9pbXBsID0g
aW1wbDsKLSAgICBBU1NFUlQoaGFuZGxlLm1fc2l6ZSA9PSBpbXBsLT5zaXplKCkpOwotICAgIHNo
YXJlZE1lbW9yeS0+bV9zaXplID0gaGFuZGxlLm1fc2l6ZTsKLSAgICBzaGFyZWRNZW1vcnktPm1f
ZGF0YSA9IGltcGwtPmRhdGEoKTsKIAotICAgIC8vIERvIG5vdCBsZWF2ZSB0aGUgc2hhcmVkIG1l
bW9yeSBzZWdtZW50IGJlaGluZC4KLSAgICBDbGVhbnVwSGFuZGxlcjo6aW5zdGFuY2UoKS0+bWFy
a0ZvckNsZWFudXAoaW1wbCk7Ci0KLSAgICByZXR1cm4gc2hhcmVkTWVtb3J5LnJlbGVhc2UoKTsK
KyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBpbnN0YW5jZSA9IGFkb3B0UmVmKG5ldyBTaGFyZWRN
ZW1vcnkoKSk7CisgICAgaW5zdGFuY2UtPm1fZGF0YSA9IGRhdGE7CisgICAgaW5zdGFuY2UtPm1f
ZmlsZURlc2NyaXB0b3IgPSBoYW5kbGUubV9maWxlRGVzY3JpcHRvcjsKKyAgICBpbnN0YW5jZS0+
bV9zaXplID0gaGFuZGxlLm1fc2l6ZTsKKyAgICBoYW5kbGUubV9maWxlRGVzY3JpcHRvciA9IC0x
OworICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIAogU2hhcmVkTWVtb3J5Ojp+U2hhcmVkTWVtb3J5
KCkKIHsKLSAgICBpZiAoQ2xlYW51cEhhbmRsZXI6Omluc3RhbmNlKCktPmhhc1N0YXJ0ZWREZWxl
dGluZygpKQotICAgICAgICByZXR1cm47CisgICAgbXVubWFwKG1fZGF0YSwgbV9zaXplKTsKKyAg
ICB3aGlsZSAoY2xvc2UobV9maWxlRGVzY3JpcHRvcikgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIp
IHt9Cit9CiAKLSAgICBDbGVhbnVwSGFuZGxlcjo6aW5zdGFuY2UoKS0+dW5tYXJrKG1faW1wbCk7
Ci0gICAgZGVsZXRlIG1faW1wbDsKK3N0YXRpYyBpbmxpbmUgaW50IGFjY2Vzc01vZGVGaWxlKFNo
YXJlZE1lbW9yeTo6UHJvdGVjdGlvbiBwcm90ZWN0aW9uKQoreworICAgIHN3aXRjaCAocHJvdGVj
dGlvbikgeworICAgIGNhc2UgU2hhcmVkTWVtb3J5OjpSZWFkT25seToKKyAgICAgICAgcmV0dXJu
IE9fUkRPTkxZOworICAgIGNhc2UgU2hhcmVkTWVtb3J5OjpSZWFkV3JpdGU6CisgICAgICAgIHJl
dHVybiBPX1JEV1I7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIE9fUkRXUjsKIH0KIAogYm9vbCBTaGFyZWRNZW1vcnk6OmNyZWF0ZUhhbmRsZShIYW5kbGUm
IGhhbmRsZSwgUHJvdGVjdGlvbiBwcm90ZWN0aW9uKQogewotICAgIEFTU0VSVF9BUkcoaGFuZGxl
LCBoYW5kbGUubV9rZXkuaXNOdWxsKCkpOwogICAgIEFTU0VSVF9BUkcoaGFuZGxlLCAhaGFuZGxl
Lm1fc2l6ZSk7CisgICAgQVNTRVJUX0FSRyhoYW5kbGUsIGhhbmRsZS5pc051bGwoKSk7CisKKyAg
ICBpbnQgZHVwbGljYXRlZEhhbmRsZTsKKyAgICB3aGlsZSAoKGR1cGxpY2F0ZWRIYW5kbGUgPSBk
dXAobV9maWxlRGVzY3JpcHRvcikpID09IC0xKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFSU5U
UikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBRU3RyaW5nIGtleSA9IG1faW1wbC0+
a2V5KCk7Ci0gICAgaWYgKGtleS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGhhbmRsZS5tX2tleSA9IFN0cmluZyhrZXkpOworICAgIHdoaWxlICgoZmNudGwoZHVwbGljYXRl
ZEhhbmRsZSwgRl9TRVRGRCwgIE9fQ0xPRVhFQyB8IGFjY2Vzc01vZGVGaWxlKHByb3RlY3Rpb24p
KSA9PSAtMSkpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHdoaWxlIChjbG9zZShkdXBsaWNhdGVk
SGFuZGxlKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikge30KKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBoYW5kbGUubV9maWxlRGVzY3JpcHRvciA9IGR1
cGxpY2F0ZWRIYW5kbGU7CiAgICAgaGFuZGxlLm1fc2l6ZSA9IG1fc2l6ZTsKLQogICAgIHJldHVy
biB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9Xb3Jr
UXVldWVRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5jcHAK
aW5kZXggMjcxOTg0Zi4uOTljZTk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vcXQvV29ya1F1ZXVlUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dv
cmtRdWV1ZVF0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPFFMb2NhbFNvY2tldD4K
ICNpbmNsdWRlIDxRT2JqZWN0PgogI2luY2x1ZGUgPFFUaHJlYWQ+CisjaW5jbHVkZSA8UVByb2Nl
c3M+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAKQEAgLTc1LDMyICs3NiwxNyBAQCBwdWJsaWM6CiAgICAgV29ya0l0ZW0qIG1fd29ya0l0
ZW07CiB9OwogCi12b2lkIFdvcmtRdWV1ZTo6Y29ubmVjdFNpZ25hbChRT2JqZWN0KiBvLCBjb25z
dCBjaGFyKiBzaWduYWwsIFBhc3NPd25QdHI8V29ya0l0ZW0+IHdvcmtJdGVtKQotewotICAgIFdv
cmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0
aGlzLCBvLCBzaWduYWwsIHdvcmtJdGVtLmxlYWtQdHIoKSk7Ci0gICAgaXRlbVF0LT5tb3ZlVG9U
aHJlYWQobV93b3JrVGhyZWFkKTsKLSAgICBtX3NpZ25hbExpc3RlbmVycy5hZGQobywgaXRlbVF0
KTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc2Nvbm5lY3RTaWduYWwoUU9iamVjdCogbywgY29u
c3QgY2hhciogbmFtZSkKLXsKLSAgICBIYXNoTWFwPFFPYmplY3QqLCBXb3JrSXRlbVF0Kj46Oml0
ZXJhdG9yIGl0ID0gbV9zaWduYWxMaXN0ZW5lcnMuZmluZChvKTsKLSAgICBmb3IgKDsgaXQgIT0g
bV9zaWduYWxMaXN0ZW5lcnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKHN0cmNtcChpdC0+
c2Vjb25kLT5tX3NpZ25hbCwgbmFtZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ZGVsZXRlIGl0LT5zZWNvbmQ7Ci0gICAgICAgIG1fc2lnbmFsTGlzdGVuZXJzLnJlbW92ZShpdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjptb3ZlU29ja2V0
VG9Xb3JrVGhyZWFkKFFMb2NhbFNvY2tldCogc29ja2V0KQorUVNvY2tldE5vdGlmaWVyKiBXb3Jr
UXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBzb2NrZXREZXNjcmlwdG9yLCBR
U29ja2V0Tm90aWZpZXI6OlR5cGUgdHlwZSwgUGFzc093blB0cjxXb3JrSXRlbT4gd29ya0l0ZW0p
CiB7CiAgICAgQVNTRVJUKG1fd29ya1RocmVhZCk7Ci0gICAgQVNTRVJUKHNvY2tldCk7CiAKLSAg
ICBzb2NrZXQtPnNldFBhcmVudCgwKTsKLSAgICBzb2NrZXQtPm1vdmVUb1RocmVhZChtX3dvcmtU
aHJlYWQpOworICAgIFFTb2NrZXROb3RpZmllciogbm90aWZpZXIgPSBuZXcgUVNvY2tldE5vdGlm
aWVyKHNvY2tldERlc2NyaXB0b3IsIHR5cGUsIDApOworICAgIG5vdGlmaWVyLT5zZXRFbmFibGVk
KGZhbHNlKTsKKyAgICBub3RpZmllci0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7CisgICAg
V29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRlbVF0
KHRoaXMsIG5vdGlmaWVyLCBTSUdOQUwoYWN0aXZhdGVkKGludCkpLCB3b3JrSXRlbS5sZWFrUHRy
KCkpOworICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7CisgICAgbm90aWZp
ZXItPnNldEVuYWJsZWQodHJ1ZSk7CisgICAgcmV0dXJuIG5vdGlmaWVyOwogfQogCiB2b2lkIFdv
cmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqKQpAQCAtMTI5LDQgKzExNSwx
MCBAQCB2b2lkIFdvcmtRdWV1ZTo6c2NoZWR1bGVXb3JrQWZ0ZXJEZWxheShQYXNzT3duUHRyPFdv
cmtJdGVtPiwgZG91YmxlKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgV29ya1F1
ZXVlOjpzY2hlZHVsZVdvcmtPblRlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRl
bnRpZmllciBwcm9jZXNzLCBQYXNzT3duUHRyPFdvcmtJdGVtPiB3b3JrSXRlbSkKK3sKKyAgICBX
b3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQo
dGhpcywgcHJvY2VzcywgU0lHTkFMKGZpbmlzaGVkKGludCwgUVByb2Nlc3M6OkV4aXRTdGF0dXMp
KSwgd29ya0l0ZW0ubGVha1B0cigpKTsKKyAgICBpdGVtUXQtPm1vdmVUb1RocmVhZChtX3dvcmtU
aHJlYWQpOworfQorCiAjaW5jbHVkZSAiV29ya1F1ZXVlUXQubW9jIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9xdC9VcGRhdGVDaHVuay5jcHAKaW5kZXggNGQ4ZTYyZC4uMmY5YmU0NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvcXQvVXBkYXRlQ2h1bmsuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAKICNp
bmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKICNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIK
LSNpbmNsdWRlICJNYXBwZWRNZW1vcnlQb29sLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgiCiAjaW5jbHVkZSA8UUlPRGV2aWNlPgogI2luY2x1ZGUgPFFJbWFnZT4KQEAgLTQz
LDI4ICs0MiwzNSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogbmFtZXNwYWNlIFdlYktpdCB7CiAK
IFVwZGF0ZUNodW5rOjpVcGRhdGVDaHVuaygpCi0gICAgOiBtX21hcHBlZE1lbW9yeSgwKQogewog
fQogCiBVcGRhdGVDaHVuazo6VXBkYXRlQ2h1bmsoY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICA6
IG1fcmVjdChyZWN0KQotICAgICwgbV9tYXBwZWRNZW1vcnkoTWFwcGVkTWVtb3J5UG9vbDo6aW5z
dGFuY2UoKS0+bWFwTWVtb3J5KHNpemUoKSkpCisgICAgLCBtX3NoYXJlZE1lbW9yeShTaGFyZWRN
ZW1vcnk6OmNyZWF0ZShzaXplKCkpKQogewogfQogCiBVcGRhdGVDaHVuazo6flVwZGF0ZUNodW5r
KCkKIHsKLSAgICBpZiAobV9tYXBwZWRNZW1vcnkpCi0gICAgICAgIG1fbWFwcGVkTWVtb3J5LT5t
YXJrRnJlZSgpOwogfQogCiB2b2lkIFVwZGF0ZUNodW5rOjplbmNvZGUoQ29yZUlQQzo6QXJndW1l
bnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXItPmVuY29kZShtX3JlY3Qp
OwotICAgIGVuY29kZXItPmVuY29kZShTdHJpbmcobV9tYXBwZWRNZW1vcnktPm1hcHBlZEZpbGVO
YW1lKCkpKTsKKyAgICBpZiAoIW1fc2hhcmVkTWVtb3J5KSB7CisgICAgICAgIGVuY29kZXItPmVu
Y29kZShmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTaGFyZWRNZW1vcnk6
OkhhbmRsZSBoYW5kbGU7CisgICAgaWYgKG1fc2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUoaGFu
ZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KSkgeworICAgICAgICBlbmNvZGVyLT5lbmNvZGUo
dHJ1ZSk7CisgICAgICAgIGVuY29kZXItPmVuY29kZShoYW5kbGUpOworICAgIH0gZWxzZQorICAg
ICAgICBlbmNvZGVyLT5lbmNvZGUoZmFsc2UpOwogCi0gICAgbV9tYXBwZWRNZW1vcnkgPSAwOwor
ICAgIG1fc2hhcmVkTWVtb3J5ID0gMDsKIH0KIAogYm9vbCBVcGRhdGVDaHVuazo6ZGVjb2RlKENv
cmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgVXBkYXRlQ2h1bmsmIGNodW5rKQpAQCAt
NzQsMTYgKzgwLDIzIEBAIGJvb2wgVXBkYXRlQ2h1bms6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVu
dERlY29kZXIqIGRlY29kZXIsIFVwZGF0ZUNodW5rJiBjaHVuaykKICAgICBJbnRSZWN0IHJlY3Q7
CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocmVjdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
KwogICAgIGNodW5rLm1fcmVjdCA9IHJlY3Q7CiAKLSAgICBpZiAoY2h1bmsuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gU3VjY2Vzc2Z1bGx5IGRlY29kZWQgZW1wdHkgY2h1bmsu
CisgICAgYm9vbCBoYXNTaGFyZWRNZW1vcnk7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFz
U2hhcmVkTWVtb3J5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RyaW5nIGZpbGVO
YW1lOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGZpbGVOYW1lKSkKKyAgICBpZiAoIWhhc1No
YXJlZE1lbW9yeSkgeworICAgICAgICBjaHVuay5tX3NoYXJlZE1lbW9yeSA9IDA7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsK
KyAgICBpZiAoIWRlY29kZXItPmRlY29kZShoYW5kbGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBjaHVuay5tX21hcHBlZE1lbW9yeSA9IE1hcHBlZE1lbW9yeVBvb2w6Omluc3RhbmNl
KCktPm1hcEZpbGUoZmlsZU5hbWUsIGNodW5rLnNpemUoKSk7CisgICAgY2h1bmsubV9zaGFyZWRN
ZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9u
bHkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMDEsNyArMTE0LDEwIEBAIHNpemVfdCBV
cGRhdGVDaHVuazo6c2l6ZSgpIGNvbnN0CiAKIFFJbWFnZSBVcGRhdGVDaHVuazo6Y3JlYXRlSW1h
Z2UoKSBjb25zdAogewotICAgIEFTU0VSVChtX21hcHBlZE1lbW9yeSk7CisgICAgQVNTRVJUKG1f
c2hhcmVkTWVtb3J5KTsKKyAgICBpZiAoIW1fc2hhcmVkTWVtb3J5KQorICAgICAgICByZXR1cm4g
UUltYWdlKCk7CisKICAgICBRSW1hZ2U6OkZvcm1hdCBmb3JtYXQ7CiAgICAgaW50IGJwcDsKICAg
ICBpZiAoUVBpeG1hcDo6ZGVmYXVsdERlcHRoKCkgPT0gMTYpIHsKQEAgLTExMiw3ICsxMjgsNyBA
QCBRSW1hZ2UgVXBkYXRlQ2h1bms6OmNyZWF0ZUltYWdlKCkgY29uc3QKICAgICAgICAgYnBwID0g
NDsKICAgICB9CiAKLSAgICByZXR1cm4gUUltYWdlKG1fbWFwcGVkTWVtb3J5LT5kYXRhKCksIG1f
cmVjdC53aWR0aCgpLCBtX3JlY3QuaGVpZ2h0KCksIChtX3JlY3Qud2lkdGgoKSAqIGJwcCArIDMp
ICYgfjB4MywgZm9ybWF0KTsKKyAgICByZXR1cm4gUUltYWdlKHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG1fc2hhcmVkTWVtb3J5LT5kYXRhKCkpLCBtX3JlY3Qud2lkdGgoKSwgbV9y
ZWN0LmhlaWdodCgpLCAobV9yZWN0LndpZHRoKCkgKiBicHAgKyAzKSAmIH4weDMsIGZvcm1hdCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL3F0L1VwZGF0ZUNodW5rLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvVXBkYXRl
Q2h1bmsuaAppbmRleCBmNTA2YmE3Li42NjQwNTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvcXQvVXBkYXRlQ2h1bmsuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQv
VXBkYXRlQ2h1bmsuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8UUltYWdlPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogCiBu
YW1lc3BhY2UgQ29yZUlQQyB7CiBjbGFzcyBBcmd1bWVudEVuY29kZXI7CkBAIC0zNyw4ICszOCw2
IEBAIGNsYXNzIEFyZ3VtZW50RGVjb2RlcjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNz
IE1hcHBlZE1lbW9yeTsKLQogY2xhc3MgVXBkYXRlQ2h1bmsgewogcHVibGljOgogICAgIFVwZGF0
ZUNodW5rKCk7CkBAIC01OCw3ICs1Nyw3IEBAIHByaXZhdGU6CiAKICAgICBXZWJDb3JlOjpJbnRS
ZWN0IG1fcmVjdDsKIAotICAgIG11dGFibGUgTWFwcGVkTWVtb3J5KiBtX21hcHBlZE1lbW9yeTsK
KyAgICBtdXRhYmxlIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1fc2hhcmVkTWVtb3J5OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmgKaW5kZXggMzFlZmQ0ZC4uNzlkMTI1MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIu
aApAQCAtNzIsMTEgKzcyLDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgZ2V0UHJvY2Vz
c1R5cGVGcm9tU3RyaW5nKGNvbnN0IGNoYXIqLCBQcm9jZXNzVHlwZSYpOwogCi0jaWYgUExBVEZP
Uk0oUVQpCi0gICAgZnJpZW5kIGNsYXNzIFByb2Nlc3NMYXVuY2hlckhlbHBlcjsKLSAgICBzdGF0
aWMgUUxvY2FsU29ja2V0KiB0YWtlUGVuZGluZ0Nvbm5lY3Rpb24oKTsKLSNlbmRpZgotCiBwcml2
YXRlOgogICAgIFByb2Nlc3NMYXVuY2hlcihDbGllbnQqLCBjb25zdCBMYXVuY2hPcHRpb25zJiBs
YXVuY2hPcHRpb25zKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
dW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAKaW5kZXggN2RmZjg5NC4uN2MxMzA5
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nl
c3NMYXVuY2hlclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIv
cXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCkBAIC0yNywxNyArMjcsOSBAQAogI2luY2x1ZGUgIlBy
b2Nlc3NMYXVuY2hlci5oIgogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkNs
ZWFudXBIYW5kbGVyLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJS
dW5Mb29wLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSW5p
dGlhbGl6ZVRocmVhZGluZy5oPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCiAjaW5jbHVkZSA8UUFw
cGxpY2F0aW9uPgogI2luY2x1ZGUgPFFEZWJ1Zz4KICNpbmNsdWRlIDxRRmlsZT4KQEAgLTQ1LDUy
ICszNywyNyBAQAogI2luY2x1ZGUgPFFNZXRhVHlwZT4KICNpbmNsdWRlIDxRUHJvY2Vzcz4KICNp
bmNsdWRlIDxRU3RyaW5nPgotCiAjaW5jbHVkZSA8UXRDb3JlL3FnbG9iYWwuaD4KLQorI2luY2x1
ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxydW50aW1lL0luaXRp
YWxpemVUaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8c3lzL3Jlc291
cmNlLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Cisj
aWYgZGVmaW5lZCBRX09TX1VOSVgKKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNpbmNsdWRlIDxz
aWduYWwuaD4KKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKLWNsYXNzIFByb2Nlc3NMYXVuY2hlckhlbHBlciA6IHB1YmxpYyBRT2JqZWN0
IHsKLSAgICBRX09CSkVDVAotcHVibGljOgotICAgIH5Qcm9jZXNzTGF1bmNoZXJIZWxwZXIoKTsK
LSAgICB2b2lkIGxhdW5jaChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlciopOwotICAgIFFMb2NhbFNv
Y2tldCogdGFrZVBlbmRpbmdDb25uZWN0aW9uKCk7Ci0gICAgc3RhdGljIFByb2Nlc3NMYXVuY2hl
ckhlbHBlciogaW5zdGFuY2UoKTsKLQotICAgIGNvbnN0IFFTdHJpbmcgc2VydmVyTmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VydmVyLnNlcnZlck5hbWUoKTsgfQotCi1wcml2YXRlOgotICAgIFBy
b2Nlc3NMYXVuY2hlckhlbHBlcigpOwotICAgIFFMb2NhbFNlcnZlciBtX3NlcnZlcjsKLSAgICBR
TGlzdDxXb3JrSXRlbSo+IG1faXRlbXM7Ci0KLSAgICBRX1NMT1Qgdm9pZCBuZXdDb25uZWN0aW9u
KCk7Ci19OwotCi1RX0dMT0JBTF9TVEFUSUMoV1RGOjpIYXNoU2V0PFFQcm9jZXNzKj4sIHByb2Nl
c3Nlcyk7Ci0KLXN0YXRpYyB2b2lkIGNsZWFudXBBdEV4aXQoKQotewotICAgIC8vIFRlcm1pbmF0
ZSBvdXIgd2ViIHByb2Nlc3MoZXMpLgotICAgIFdURjo6SGFzaFNldDxRUHJvY2Vzcyo+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBwcm9jZXNzZXMoKS0+ZW5kKCk7Ci0gICAgZm9yIChXVEY6Okhhc2hT
ZXQ8UVByb2Nlc3MqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwcm9jZXNzZXMoKS0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFFQcm9jZXNzKiBwcm9jZXNzID0gKml0OwotICAg
ICAgICBwcm9jZXNzLT5kaXNjb25uZWN0KHByb2Nlc3MpOwotICAgICAgICBwcm9jZXNzLT50ZXJt
aW5hdGUoKTsKLSAgICAgICAgaWYgKCFwcm9jZXNzLT53YWl0Rm9yRmluaXNoZWQoMjAwKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPmtpbGwoKTsKLSAgICB9Ci0KLSAgICAvLyBEbyBub3QgbGVhdmUg
dGhlIHNvY2tldCBmaWxlIGJlaGluZC4KLSAgICBRTG9jYWxTZXJ2ZXI6OnJlbW92ZVNlcnZlcihQ
cm9jZXNzTGF1bmNoZXJIZWxwZXI6Omluc3RhbmNlKCktPnNlcnZlck5hbWUoKSk7Ci19Ci0KIGNs
YXNzIFF0V2ViUHJvY2VzcyA6IHB1YmxpYyBRUHJvY2VzcwogewogICAgIFFfT0JKRUNUCkBAIC05
OCwzMiArNjUsMjAgQEAgcHVibGljOgogICAgIFF0V2ViUHJvY2VzcyhRT2JqZWN0KiBwYXJlbnQg
PSAwKQogICAgICAgICA6IFFQcm9jZXNzKHBhcmVudCkKICAgICB7Ci0gICAgICAgIHN0YXRpYyBi
b29sIGlzUmVnaXN0ZXJlZCA9IGZhbHNlOwotICAgICAgICBpZiAoIWlzUmVnaXN0ZXJlZCkgewot
ICAgICAgICAgICAgcVJlZ2lzdGVyTWV0YVR5cGU8UVByb2Nlc3M6OlByb2Nlc3NTdGF0ZT4oIlFQ
cm9jZXNzOjpQcm9jZXNzU3RhdGUiKTsKLSAgICAgICAgICAgIGlzUmVnaXN0ZXJlZCA9IHRydWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBjb25uZWN0KHRoaXMsIFNJR05BTChzdGF0ZUNoYW5nZWQo
UVByb2Nlc3M6OlByb2Nlc3NTdGF0ZSkpLCB0aGlzLCBTTE9UKHByb2Nlc3NTdGF0ZUNoYW5nZWQo
UVByb2Nlc3M6OlByb2Nlc3NTdGF0ZSkpKTsKICAgICB9CiAKLXByaXZhdGUgc2xvdHM6Ci0gICAg
dm9pZCBwcm9jZXNzU3RhdGVDaGFuZ2VkKFFQcm9jZXNzOjpQcm9jZXNzU3RhdGUgc3RhdGUpOwor
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBzZXR1cENoaWxkUHJvY2VzcygpOwogfTsKIAot
dm9pZCBRdFdlYlByb2Nlc3M6OnByb2Nlc3NTdGF0ZUNoYW5nZWQoUVByb2Nlc3M6OlByb2Nlc3NT
dGF0ZSBzdGF0ZSkKK3ZvaWQgUXRXZWJQcm9jZXNzOjpzZXR1cENoaWxkUHJvY2VzcygpCiB7Ci0g
ICAgUVByb2Nlc3MqIHByb2Nlc3MgPSBxb2JqZWN0X2Nhc3Q8UVByb2Nlc3MqPihzZW5kZXIoKSk7
Ci0gICAgaWYgKCFwcm9jZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc3RhdGUgPT0g
UVByb2Nlc3M6OlJ1bm5pbmcpCi0gICAgICAgIHByb2Nlc3NlcygpLT5hZGQocHJvY2Vzcyk7Ci0g
ICAgZWxzZSBpZiAoc3RhdGUgPT0gUVByb2Nlc3M6Ok5vdFJ1bm5pbmcpCi0gICAgICAgIHByb2Nl
c3NlcygpLT5yZW1vdmUocHJvY2Vzcyk7CisjaWYgZGVmaW5lZCBRX09TX1VOSVgKKyAgICBwcmN0
bChQUl9TRVRfUERFQVRIU0lHLCBTSUdLSUxMKTsKKyNlbmRpZgogfQogCi12b2lkIFByb2Nlc3NM
YXVuY2hlckhlbHBlcjo6bGF1bmNoKFdlYktpdDo6UHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlcikK
K3ZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKCkKIHsKICAgICBRU3RyaW5nIGFw
cGxpY2F0aW9uUGF0aCA9ICIlMSAlMiI7CiAKQEAgLTEzMywxMiArODgsMzggQEAgdm9pZCBQcm9j
ZXNzTGF1bmNoZXJIZWxwZXI6OmxhdW5jaChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlciogbGF1bmNo
ZXIpCiAgICAgICAgIGFwcGxpY2F0aW9uUGF0aCA9IGFwcGxpY2F0aW9uUGF0aC5hcmcoIlF0V2Vi
UHJvY2VzcyIpOwogICAgIH0KIAotICAgIFFTdHJpbmcgcHJvZ3JhbShhcHBsaWNhdGlvblBhdGgu
YXJnKG1fc2VydmVyLnNlcnZlck5hbWUoKSkpOworICAgIGludCBzb2NrZXRzWzJdOworICAgIGlm
IChzb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfREdSQU0sIDAsIHNvY2tldHMpID09IC0xKSB7Cisg
ICAgICAgIHFEZWJ1ZygpIDw8ICJDcmVhdGlvbiBvZiBzb2NrZXQgZmFpbGVkIHdpdGggZXJybm86
IiA8PCBlcnJubzsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBEb24ndCBleHBvc2UgdWkgc29ja2V0IHRvIHdlYiBwcm9jZXNz
CisgICAgd2hpbGUgKGZjbnRsKHNvY2tldHNbMV0sIEZfU0VURkQsIEZEX0NMT0VYRUMgPT0gLTEp
KSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICB3aGlsZSAoY2xvc2Uoc29ja2V0c1swXSkgPT0gLTEg
JiYgZXJybm8gPT0gRUlOVFIpIHt9CisgICAgICAgICAgICB3aGlsZSAoY2xvc2Uoc29ja2V0c1sx
XSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpIHt9CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBRU3RyaW5nIHByb2dyYW0oYXBwbGljYXRpb25QYXRoLmFyZyhz
b2NrZXRzWzBdKSk7CiAKICAgICBRUHJvY2Vzcyogd2ViUHJvY2VzcyA9IG5ldyBRdFdlYlByb2Nl
c3MoKTsKICAgICB3ZWJQcm9jZXNzLT5zZXRQcm9jZXNzQ2hhbm5lbE1vZGUoUVByb2Nlc3M6OkZv
cndhcmRlZENoYW5uZWxzKTsKICAgICB3ZWJQcm9jZXNzLT5zdGFydChwcm9ncmFtKTsKIAorICAg
IC8vIERvbid0IGV4cG9zZSB3ZWIgc29ja2V0IHRvIHBvc3NpYmxlIGZ1dHVyZSB3ZWIgcHJvY2Vz
c2VzCisgICAgd2hpbGUgKGZjbnRsKHNvY2tldHNbMF0sIEZfU0VURkQsIEZEX0NMT0VYRUMpID09
IC0xKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBkZWxldGUgd2ViUHJvY2VzczsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICghd2ViUHJvY2Vzcy0+d2Fp
dEZvclN0YXJ0ZWQoKSkgewogICAgICAgICBxRGVidWcoKSA8PCAiRmFpbGVkIHRvIHN0YXJ0IiA8
PCBwcm9ncmFtOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE0OCw1NSArMTI5
LDcgQEAgdm9pZCBQcm9jZXNzTGF1bmNoZXJIZWxwZXI6OmxhdW5jaChXZWJLaXQ6OlByb2Nlc3NM
YXVuY2hlciogbGF1bmNoZXIpCiAKICAgICBzZXRwcmlvcml0eShQUklPX1BST0NFU1MsIHdlYlBy
b2Nlc3MtPnBpZCgpLCAxMCk7CiAKLSAgICBtX2l0ZW1zLmFwcGVuZChXb3JrSXRlbTo6Y3JlYXRl
KGxhdW5jaGVyLCAmV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1By
b2Nlc3MsIHdlYlByb2Nlc3MsIG1fc2VydmVyLnNlcnZlck5hbWUoKSkubGVha1B0cigpKTsKLX0K
LQotUUxvY2FsU29ja2V0KiBQcm9jZXNzTGF1bmNoZXJIZWxwZXI6OnRha2VQZW5kaW5nQ29ubmVj
dGlvbigpCi17Ci0gICAgcmV0dXJuIG1fc2VydmVyLm5leHRQZW5kaW5nQ29ubmVjdGlvbigpOwot
fQotCi1Qcm9jZXNzTGF1bmNoZXJIZWxwZXI6On5Qcm9jZXNzTGF1bmNoZXJIZWxwZXIoKQotewot
ICAgIG1fc2VydmVyLmNsb3NlKCk7Ci19Ci0KLVByb2Nlc3NMYXVuY2hlckhlbHBlcjo6UHJvY2Vz
c0xhdW5jaGVySGVscGVyKCkKLXsKLSAgICBzcmFuZG9tKHRpbWUoMCkpOwotICAgIGlmICghbV9z
ZXJ2ZXIubGlzdGVuKCJRdFdlYktpdCIgKyBRU3RyaW5nOjpudW1iZXIocmFuZG9tKCkpKSkgewot
ICAgICAgICBxRGVidWcoKSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBzZXJ2ZXIgc29ja2V0LiI7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICBjb25uZWN0KCZtX3NlcnZl
ciwgU0lHTkFMKG5ld0Nvbm5lY3Rpb24oKSksIHRoaXMsIFNMT1QobmV3Q29ubmVjdGlvbigpKSk7
Ci19Ci0KLVByb2Nlc3NMYXVuY2hlckhlbHBlciogUHJvY2Vzc0xhdW5jaGVySGVscGVyOjppbnN0
YW5jZSgpCi17Ci0gICAgc3RhdGljIFByb2Nlc3NMYXVuY2hlckhlbHBlciogcmVzdWx0ID0gMDsK
LSAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICByZXN1bHQgPSBuZXcgUHJvY2Vzc0xhdW5jaGVy
SGVscGVyKCk7Ci0KLSAgICAgICAgLy8gVGhlIHB1cnBvc2Ugb2YgdGhlIGZvbGxvd2luZyBsaW5l
IGlzIHRvIGVuc3VyZSB0aGF0IG91ciBzdGF0aWMgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBl
eGl0IGhhbmRsZXIgaXMgaW5zdGFsbGVkLgotICAgICAgICBwcm9jZXNzZXMoKS0+Y2xlYXIoKTsK
LQotICAgICAgICBhdGV4aXQoY2xlYW51cEF0RXhpdCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXZvaWQgUHJvY2Vzc0xhdW5jaGVySGVscGVyOjpuZXdDb25uZWN0aW9uKCkKLXsK
LSAgICBBU1NFUlQoIW1faXRlbXMuaXNFbXB0eSgpKTsKLQotICAgIG1faXRlbXNbMF0tPmV4ZWN1
dGUoKTsKLSAgICBkZWxldGUgbV9pdGVtc1swXTsKLSAgICBtX2l0ZW1zLnBvcF9mcm9udCgpOwot
fQotCi12b2lkIFByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2VzcygpCi17Ci0gICAgUHJvY2Vz
c0xhdW5jaGVySGVscGVyOjppbnN0YW5jZSgpLT5sYXVuY2godGhpcyk7CisgICAgUnVuTG9vcDo6
bWFpbigpLT5zY2hlZHVsZVdvcmsoV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmV2ViS2l0OjpQcm9j
ZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3MsIHdlYlByb2Nlc3MsIHNvY2tl
dHNbMV0pKTsKIH0KIAogdm9pZCBQcm9jZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVByb2Nlc3MoKQpA
QCAtMjA4LDE0ICsxNDEsOSBAQCB2b2lkIFByb2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2Vz
cygpCiAgICAgbV9wcm9jZXNzSWRlbnRpZmllci0+dGVybWluYXRlKCk7CiB9CiAKLVFMb2NhbFNv
Y2tldCogUHJvY2Vzc0xhdW5jaGVyOjp0YWtlUGVuZGluZ0Nvbm5lY3Rpb24oKQotewotICAgIHJl
dHVybiBQcm9jZXNzTGF1bmNoZXJIZWxwZXI6Omluc3RhbmNlKCktPnRha2VQZW5kaW5nQ29ubmVj
dGlvbigpOwotfQotCiB2b2lkIFByb2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExh
dW5jaGVyUXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVh
ZExhdW5jaGVyUXQuY3BwCmluZGV4IDQ3MWE0MjQuLjM0NDU4MGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9UaHJlYWRMYXVuY2hlclF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJRdC5j
cHAKQEAgLTU0LDcgKzU0LDcgQEAgc3RhdGljIHZvaWQqIHdlYlRocmVhZEJvZHkodm9pZCogLyog
Y29udGV4dCAqLykKIAogICAgIC8vIEZJWE1FOiBXZSBkbyBub3Qgc3VwcG9ydCB0aHJlYWRlZCBt
b2RlIGZvciBub3cuCiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKCJmb28i
LCBSdW5Mb29wOjpjdXJyZW50KCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxp
emUoLTEsIFJ1bkxvb3A6OmN1cnJlbnQoKSk7CiAgICAgUnVuTG9vcDo6cnVuKCk7CiAKICAgICBy
ZXR1cm4gMDsKQEAgLTcwLDggKzcwLDcgQEAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmll
ciBUaHJlYWRMYXVuY2hlcjo6Y3JlYXRlV2ViVGhyZWFkKCkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogCi0gICAgUVN0cmluZyBzZXJ2ZXJJZGVudGlmaWVyID0gUVN0cmluZzo6bnVtYmVyKGNv
bm5lY3Rpb25JZGVudGlmaWVyKTsKLSAgICByZXR1cm4gc2VydmVySWRlbnRpZmllcjsKKyAgICBy
ZXR1cm4gY29ubmVjdGlvbklkZW50aWZpZXI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBjN2U5
MzgyLi42ZDExNWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmNwcApAQCAtMzQ0LDggKzM0NCwxMCBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkRmlu
aXNoTGF1bmNoaW5nKENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdAogICAg
IG1fY29ubmVjdGlvbiA9IENvcmVJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVNlcnZlckNvbm5lY3Rp
b24oY29ubmVjdGlvbklkZW50aWZpZXIsIHRoaXMsIFJ1bkxvb3A6Om1haW4oKSk7CiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIG1fY29ubmVjdGlvbi0+c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25N
YWNoRXhjZXB0aW9ucygpOworI2VsaWYgUExBVEZPUk0oUVQpCisgICAgbV9jb25uZWN0aW9uLT5z
ZXRTaG91bGRDbG9zZUNvbm5lY3Rpb25PblByb2Nlc3NUZXJtaW5hdGlvbihwcm9jZXNzSWRlbnRp
ZmllcigpKTsKICNlbmRpZgotICAgIAorCiAgICAgbV9jb25uZWN0aW9uLT5vcGVuKCk7CiAgICAg
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BlbmRpbmdNZXNzYWdlcy5zaXplKCk7ICsr
aSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRR
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4dFF0LmNwcAppbmRl
eCA1YjJjZDg4Li5mNmI4NDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvV2ViQ29udGV4dFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2Vi
Q29udGV4dFF0LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgi
CisjaW5jbHVkZSA8UVByb2Nlc3M+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC00Miw2ICs0
Myw3IEBAIFN0cmluZyBXZWJDb250ZXh0OjphcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkKIAog
dm9pZCBXZWJDb250ZXh0OjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMmKQogeworICAgIHFSZWdpc3Rlck1ldGFUeXBlPFFQcm9jZXNzOjpF
eGl0U3RhdHVzPigiUVByb2Nlc3M6OkV4aXRTdGF0dXMiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIucHJvCmluZGV4IGM0Nzg2MzYuLjlhODZiYzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJv
CkBAIC0yMzIsNyArMjMyLDYgQEAgSEVBREVSUyArPSBcCiAgICAgUGxhdGZvcm0vU2hhcmVkTWVt
b3J5LmggXAogICAgIFBsYXRmb3JtL1dvcmtJdGVtLmggXAogICAgIFBsYXRmb3JtL1dvcmtRdWV1
ZS5oIFwKLSAgICBQbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmggXAogICAgIFNoYXJlZC9B
UEkvYy9XS0Jhc2UuaCBcCiAgICAgU2hhcmVkL0FQSS9jL1dLQ2VydGlmaWNhdGVJbmZvLmggXAog
ICAgIFNoYXJlZC9BUEkvYy9XS0NvbnRleHRNZW51SXRlbS5oIFwKQEAgLTI5Myw3ICsyOTIsNiBA
QCBIRUFERVJTICs9IFwKICAgICBTaGFyZWQvV2ViVVJMUmVzcG9uc2UuaCBcCiAgICAgU2hhcmVk
L1dlYlVzZXJDb250ZW50VVJMUGF0dGVybi5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OZXRzY2Fw
ZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5oIFwKLSAgICBTaGFyZWQvcXQvQ2xlYW51cEhhbmRsZXIu
aCBcCiAgICAgU2hhcmVkL3F0L1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmggXAogICAgIFNoYXJl
ZC9xdC9VcGRhdGVDaHVuay5oIFwKICAgICBTaGFyZWQvcXQvV2ViRXZlbnRGYWN0b3J5UXQuaCBc
CkBAIC00NjQsNyArNDYyLDYgQEAgU09VUkNFUyArPSBcCiAgICAgUGxhdGZvcm0vTW9kdWxlLmNw
cCBcCiAgICAgUGxhdGZvcm0vUnVuTG9vcC5jcHAgXAogICAgIFBsYXRmb3JtL1dvcmtRdWV1ZS5j
cHAgXAotICAgIFBsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwIFwKICAgICBQbGF0Zm9y
bS9xdC9Nb2R1bGVRdC5jcHAgXAogICAgIFBsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHAgXAogICAg
IFBsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcCBcCkBAIC01MTcsNyArNTE0LDYgQEAgU09V
UkNFUyArPSBcCiAgICAgU2hhcmVkL1dlYlVSTFJlc3BvbnNlLmNwcCBcCiAgICAgU2hhcmVkL1dl
YldoZWVsRXZlbnQuY3BwIFwKICAgICBTaGFyZWQvcXQvU2hhcmVhYmxlQml0bWFwUXQuY3BwIFwK
LSAgICBTaGFyZWQvcXQvQ2xlYW51cEhhbmRsZXIuY3BwIFwKICAgICBTaGFyZWQvcXQvTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudFF0LmNwcCBcCiAgICAgU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNwcCBc
CiAgICAgU2hhcmVkL3F0L1dlYkNvcmVBcmd1bWVudENvZGVyc1F0LmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcAppbmRleCBiZDRl
MzcwLi4zZTEyMmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dl
YlByb2Nlc3NNYWluUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2Vi
UHJvY2Vzc01haW5RdC5jcHAKQEAgLTE2MCw3ICsxNjAsMTggQEAgUVdFQktJVF9FWFBPUlQgaW50
IFdlYlByb2Nlc3NNYWluUXQoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIFJ1bkxvb3A6Omlu
aXRpYWxpemVNYWluUnVuTG9vcCgpOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBjb25uZWN0aW9uLgot
ICAgIFFTdHJpbmcgaWRlbnRpZmllcihhcHAtPmFyZ3VtZW50cygpLnNpemUoKSA+IDEgPyBhcHAt
PmFyZ3VtZW50cygpLmF0KDEpIDogIiIpOworICAgIGlmIChhcHAtPmFyZ3VtZW50cygpLnNpemUo
KSA8PSAxKSB7CisgICAgICAgIHFEZWJ1ZygpIDw8ICJFcnJvcjogd3JvbmcgbnVtYmVyIG9mIGFy
Z3VtZW50cy4iOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBib29sIHdhc051bWJl
ciA9IGZhbHNlOworICAgIGludCBpZGVudGlmaWVyID0gYXBwLT5hcmd1bWVudHMoKS5hdCgxKS50
b0ludCgmd2FzTnVtYmVyLCAxMCk7CisgICAgaWYgKCF3YXNOdW1iZXIpIHsKKyAgICAgICAgcURl
YnVnKCkgPDwgIkVycm9yOiBjb25uZWN0aW9uIGlkZW50aWZpZXIgd3JvbmcuIjsKKyAgICAgICAg
cmV0dXJuIDE7CisgICAgfQorCiAgICAgV2ViS2l0OjpXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0
aWFsaXplKGlkZW50aWZpZXIsIFJ1bkxvb3A6Om1haW4oKSk7CiAKICAgICBSdW5Mb29wOjpydW4o
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79608</attachid>
            <date>2011-01-20 08:59:50 -0800</date>
            <delta_ts>2011-01-24 00:09:42 -0800</delta_ts>
            <desc>And 3rd patch, remove unneeded qthread include from ConnectionQt.cpp and invalid assert in Attachment::dispose</desc>
            <filename>cleanuphandler-removal-03.patch</filename>
            <type>text/plain</type>
            <size>59170</size>
            <attacher name="Kimmo Kinnunen">kimmo.t.kinnunen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBkYzZkYzViLi5lYzRlMTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAw
IEBACisyMDExLTAxLTE4ICBLaW1tbyBLaW5udW5lbiAgPGtpbW1vLnQua2lubnVuZW5Abm9raWEu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtR
dF0gUmVtb3ZlIENsZWFudXBIYW5kbGVyIGJ5IHBhc3NpbmcgZmlsZSBkZXNjcmlwdG9ycy4KKwor
ICAgICAgICBEZWxldGluZyBmaWxlcyBpbiBzaWduYWwgaGFuZGxlciBvZiBVSSBwcm9jZXNzIGlz
IG5vdCBhIGdvb2QgaWRlYSwKKyAgICAgICAgYmVjYXVzZSB0aGUgbWVtb3J5IHdoZXJlIGZpbGVu
YW1lcyBhcmUgc3RvcmVkIG1pZ2h0IG5vdCBiZSB2YWxpZAorICAgICAgICBhZnRlciBhIGNyYXNo
LgorCisgICAgICAgIFRvIGF2b2lkIHRoZSBuZWVkIG9mIHVzaW5nIHNpZ25hbCBoYW5kbGVycyBm
b3IgY2xlYW51cCwKKyAgICAgICAgY2hhbmdlIGZvbGxvd2luZzoKKyAgICAgICAgICAxKSBBdm9p
ZCBwYXNzaW5nIGZpbGVuYW1lcyBiZXR3ZWVuIHByb2Nlc3NlcywgcGFzcyBmZHMKKyAgICAgICAg
ICAyKSBXaGVuIG1tYXAnaW5nIGZpbGVzLCBkZWxldGUgdGhlbSBpbW1lZGlhdGVseSBhZnRlcgor
ICAgICAgICAgICAgIG9wZW5pbmcgYW5kIG1tYXAnaW5nIHRoZW0uCisgICAgICAgICAgMykgUGFz
cyBzb2NrZXRzIHdpdGggZmRzIGR1cmluZyBmb3JrK2V4ZWMgaW5zdGVhZCBvZgorICAgICAgICAg
ICAgIHBhc3NpbmcgdGhlbSB2aWEgdGhlIGZpbGVzeXN0ZW0uCisgICAgICAgICAgNCkgVXNlIG1t
YXAnZWQgZmlsZXMgZm9yIGltcGxlbWVudGF0aW9uIG9mIFNoYXJlZE1lbW9yeS4KKyAgICAgICAg
ICAgICBRU2hhcmVkTWVtb3J5IGRvZXMgbm90IHN1cHBvcnQgY2xlYW51cCBjb3JyZWN0bHkuCisK
KyAgICAgICAgQ29uc3F1ZW5jZXM6CisgICAgICAgICAgLSBNb3ZlIE1hcHBlZE1lbW9yeSB0byBT
aGFyZWRNZW1vcnksIG1ha2UgVXBkYXRlQ2h1bmsgdXNlIHRoaXMuCisgICAgICAgICAgLSBJbXBs
ZW1lbnQgQ29yZUlQQzo6QXR0YWNobWVudCB1c2luZyBtbWFwZWQgZmlsZXMuCisgICAgICAgICAg
LSBTZW5kIG1lc3NhZ2VzIHVzaW5nIGRhdGFncmFtIHNvY2tldC4gVGhpcyBzb2x1dGlvbiB3b3Jr
cworICAgICAgICAgICAgc2ltaWxpYXJseSB0byBNYWNoIHBvcnRzIG9uIE1hYy4KKyAgICAgICAg
ICAtIFNlbmQgYmlnIG1lc3NhZ2VzIG91dC1vZi1saW5lIGFuZCB0aHVzIGF2b2lkIGluY3JlYXNp
bmcKKyAgICAgICAgICAgIHRoZSByZWNlaXZlIGJ1ZmZlci4KKyAgICAgICAgICAtIFJlbW92ZSBN
ZW1vcnlNYXBwZWRQb29sIGFuZCByZWx5IG9uIGxpYmMva2VybmVsIGNhY2hpbmcKKyAgICAgICAg
ICAgIG9mIG1tYXBwZWQgYXJlYXMuCisgICAgICAgICAgLSBVbm1hcCBtZW1vcnkgYXJlYXMgYWZ0
ZXIgdXNlLgorICAgICAgICAgIC0gV2hlbiBVSSBwcm9jZXNzIGNyYXNoZXMsIGtpbGwgdGhlIHdl
YiBwcm9jZXNzIHVzaW5nIFNJR0tJTEwuCisgICAgICAgICAgICBUaGlzIGlzIHBvc3NpYmxlIGFn
YWluIGJlY2F1c2UgY2xlYW51cCBoYW5kbGVyIGlzIG5vdCBuZWVkZWQuCisKKyAgICAgICAgW1dL
Ml1bUXRdIE11bHRpcGxlIHByb2JsZW1zIHdpdGggTWVtb3J5TWFwcGVkUG9vbAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE5ODQKKworICAgICAgICAq
IFBsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVudC5jcHA6CisgICAgICAgIChDb3JlSVBDOjpBdHRh
Y2htZW50OjpBdHRhY2htZW50KToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1l
bnQuaDoKKyAgICAgICAgKENvcmVJUEM6OkF0dGFjaG1lbnQ6OnNpemUpOgorICAgICAgICAoQ29y
ZUlQQzo6QXR0YWNobWVudDo6cmVsZWFzZUZpbGVEZXNjcmlwdG9yKToKKyAgICAgICAgKENvcmVJ
UEM6OkF0dGFjaG1lbnQ6OmZpbGVEZXNjcmlwdG9yKToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3Jl
SVBDL0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rp
b25RdC5jcHA6CisgICAgICAgIChDb3JlSVBDOjpNZXNzYWdlSW5mbzo6TWVzc2FnZUluZm8pOgor
ICAgICAgICAoQ29yZUlQQzo6TWVzc2FnZUluZm86OnNldE1lc3NhZ2VCb2R5T09MKToKKyAgICAg
ICAgKENvcmVJUEM6Ok1lc3NhZ2VJbmZvOjppc01lc3NhZ2VCb2R5T09MKToKKyAgICAgICAgKENv
cmVJUEM6Ok1lc3NhZ2VJbmZvOjpib2R5U2l6ZSk6CisgICAgICAgIChDb3JlSVBDOjpNZXNzYWdl
SW5mbzo6bWVzc2FnZUlEKToKKyAgICAgICAgKENvcmVJUEM6Ok1lc3NhZ2VJbmZvOjphdHRhY2ht
ZW50Q291bnQpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1Jbml0aWFs
aXplKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnBsYXRmb3JtSW52YWxpZGF0ZSk6
CisgICAgICAgIChDb3JlSVBDOjpTb2NrZXROb3RpZmllckRpc2FibGVHdWFyZDo6U29ja2V0Tm90
aWZpZXJEaXNhYmxlR3VhcmQpOgorICAgICAgICAoQ29yZUlQQzo6U29ja2V0Tm90aWZpZXJEaXNh
YmxlR3VhcmQ6On5Tb2NrZXROb3RpZmllckRpc2FibGVHdWFyZCk6CisgICAgICAgIChDb3JlSVBD
OjpDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVyKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5l
Y3Rpb246Om9wZW4pOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1DYW5T
ZW5kT3V0Z29pbmdNZXNzYWdlcyk6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpzZW5k
T3V0Z29pbmdNZXNzYWdlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaDoKKyAg
ICAgICAgKiBQbGF0Zm9ybS9Xb3JrUXVldWUuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9xdC9NYXBw
ZWRNZW1vcnlQb29sLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbGF0Zm9ybS9xdC9NYXBwZWRN
ZW1vcnlQb29sLmg6IFJlbW92ZWQuCisgICAgICAgICogUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5
UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6SGFuZGxlKToK
KyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6On5IYW5kbGUpOgorICAgICAg
ICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6aXNOdWxsKToKKyAgICAgICAgKFdlYktp
dDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJl
ZE1lbW9yeTo6SGFuZGxlOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6
OkhhbmRsZTo6cmVsZWFzZVRvQXR0YWNobWVudCk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1l
bW9yeTo6SGFuZGxlOjphZG9wdEZyb21BdHRhY2htZW50KToKKyAgICAgICAgKFdlYktpdDo6U2hh
cmVkTWVtb3J5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjphY2Nlc3NNb2RlTU1hcCk6Cisg
ICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6flNoYXJlZE1lbW9yeSk6CisgICAgICAgIChX
ZWJLaXQ6OmFjY2Vzc01vZGVGaWxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5Ojpj
cmVhdGVIYW5kbGUpOgorICAgICAgICAqIFBsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcDoKKyAg
ICAgICAgKFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAq
IFNoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5r
OjpVcGRhdGVDaHVuayk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5rOjp+VXBkYXRlQ2h1
bmspOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVDaHVuazo6ZW5jb2RlKToKKyAgICAgICAgKFdl
YktpdDo6VXBkYXRlQ2h1bms6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5r
OjpjcmVhdGVJbWFnZSk6CisgICAgICAgICogU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlF0V2ViUHJvY2Vzczo6UXRXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6UXRXZWJQ
cm9jZXNzOjpzZXR1cENoaWxkUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVu
Y2hlcjo6bGF1bmNoUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6
cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhy
ZWFkTGF1bmNoZXJRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OndlYlRocmVhZEJvZHkpOgorICAg
ICAgICAoV2ViS2l0OjpUaHJlYWRMYXVuY2hlcjo6Y3JlYXRlV2ViVGhyZWFkKToKKyAgICAgICAg
KiBXZWJLaXQyLnBybzoKKyAgICAgICAgKiBXZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpblF0KToKKwogMjAxMS0wMS0xOSAg
U2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhl
IFdlYktpdDIgYnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3Jl
SVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBD
L0FyZ3VtZW50RGVjb2Rlci5jcHAKaW5kZXggMzM2ZjcyZi4uOTM4YWFlZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudERlY29kZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcApAQCAt
NDYsNyArNDYsMTMgQEAgQXJndW1lbnREZWNvZGVyOjp+QXJndW1lbnREZWNvZGVyKCkKIHsKICAg
ICBBU1NFUlQobV9idWZmZXIpOwogICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKKyNpZiAhUExBVEZP
Uk0oUVQpCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzcG9zZSBvZiB0aGUgbWFjaCBwb3J0
cyBpbiBjYXNlcyBvZiBmYWlsdXJlLgorI2Vsc2UKKyAgICBEZXF1ZTxBdHRhY2htZW50Pjo6aXRl
cmF0b3IgZW5kID0gbV9hdHRhY2htZW50cy5lbmQoKTsKKyAgICBmb3IgKERlcXVlPEF0dGFjaG1l
bnQ+OjppdGVyYXRvciBpID0gbV9hdHRhY2htZW50cy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQor
ICAgICAgICAgICAgaS0+ZGlzcG9zZSgpOworI2VuZGlmCiB9CiAKIHZvaWQgQXJndW1lbnREZWNv
ZGVyOjppbml0aWFsaXplKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5j
b2Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rl
ci5jcHAKaW5kZXggMTM0MGMwYS4uODVhN2NhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudEVuY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcApAQCAtNDksNyArNDksMTIgQEAg
QXJndW1lbnRFbmNvZGVyOjp+QXJndW1lbnRFbmNvZGVyKCkKIHsKICAgICBpZiAobV9idWZmZXIp
CiAgICAgICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKKyNpZiAhUExBVEZPUk0oUVQpCiAgICAgLy8g
RklYTUU6IFdlIG5lZWQgdG8gZGlzcG9zZSBvZiB0aGUgYXR0YWNobWVudHMgaW4gY2FzZXMgb2Yg
ZmFpbHVyZS4KKyNlbHNlCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2F0dGFjaG1lbnRzLnNp
emUoKTsgKytpKQorICAgICAgICBtX2F0dGFjaG1lbnRzW2ldLmRpc3Bvc2UoKTsKKyNlbmRpZgog
fQogCiBzdGF0aWMgaW5saW5lIHNpemVfdCByb3VuZFVwVG9BbGlnbm1lbnQoc2l6ZV90IHZhbHVl
LCB1bnNpZ25lZCBhbGlnbm1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL0F0dGFjaG1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy9BdHRhY2htZW50LmNwcAppbmRleCBjOGQzNWY0Li42Y2E2Y2ZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVudC5jcHAKQEAgLTI3LDYgKzI3LDEwIEBA
CiAKICNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKICNpbmNsdWRlICJBcmd1bWVudEVuY29k
ZXIuaCIKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxl
cnJuby5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBDb3JlSVBDIHsKIApAQCAtNTYsNiArNjAsMTgg
QEAgdm9pZCBBdHRhY2htZW50OjpyZWxlYXNlKCkKIHsKICAgICBtX3R5cGUgPSBVbmluaXRpYWxp
emVkOwogfQorCisjZWxpZiBQTEFURk9STShRVCkKKworQXR0YWNobWVudDo6QXR0YWNobWVudChp
bnQgZmlsZURlc2NyaXB0b3IsIHNpemVfdCBzaXplKQorICAgIDogbV90eXBlKE1hcHBlZE1lbW9y
eSkKKyAgICAsIG1fZmlsZURlc2NyaXB0b3IoZmlsZURlc2NyaXB0b3IpCisgICAgLCBtX3NpemUo
c2l6ZSkKK3sKKyAgICBBU1NFUlQobV9maWxlRGVzY3JpcHRvcik7CisgICAgQVNTRVJUKG1fc2l6
ZSk7Cit9CisKICNlbmRpZgogCiB2b2lkIEF0dGFjaG1lbnQ6OmVuY29kZShBcmd1bWVudEVuY29k
ZXIqIGVuY29kZXIpIGNvbnN0CkBAIC03MCw0ICs4NiwxMCBAQCBib29sIEF0dGFjaG1lbnQ6OmRl
Y29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEF0dGFjaG1lbnQmIGF0dGFjaG1lbnQpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgQXR0YWNobWVudDo6ZGlzcG9zZSgpCit7CisgICAg
aWYgKG1fZmlsZURlc2NyaXB0b3IgIT0gLTEpCisgICAgICAgIHdoaWxlIChjbG9zZShtX2ZpbGVE
ZXNjcmlwdG9yKSA9PSAtMSAmJiAoZXJybm8gPT0gRUlOVFIpKSB7fQorfQorCiB9IC8vIG5hbWVz
cGFjZSBDb3JlSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBD
L0F0dGFjaG1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVu
dC5oCmluZGV4IDU1YTA5YzkuLjE5OTg2MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvQXR0YWNobWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvQXR0YWNobWVudC5oCkBAIC00MCwxMiArNDAsMTYgQEAgcHVibGljOgogI2lmIFBM
QVRGT1JNKE1BQykKICAgICAgICAgTWFjaFBvcnRUeXBlLAogICAgICAgICBNYWNoT09MTWVtb3J5
VHlwZQorI2VsaWYgUExBVEZPUk0oUVQpCisgICAgICAgIE1hcHBlZE1lbW9yeQogI2VuZGlmCiAg
ICAgfTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBBdHRhY2htZW50KG1hY2hfcG9ydF9uYW1l
X3QgcG9ydCwgbWFjaF9tc2dfdHlwZV9uYW1lX3QgZGlzcG9zaXRpb24pOwogICAgIEF0dGFjaG1l
bnQodm9pZCogYWRkcmVzcywgbWFjaF9tc2dfc2l6ZV90IHNpemUsIG1hY2hfbXNnX2NvcHlfb3B0
aW9uc190IGNvcHlPcHRpb25zLCBib29sIGRlYWxsb2NhdGUpOworI2VsaWYgUExBVEZPUk0oUVQp
CisgICAgQXR0YWNobWVudChpbnQgZmlsZURlc2NyaXB0b3IsIHNpemVfdCk7CiAjZW5kaWYKIAog
ICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQpAQCAtNjIsMTEgKzY2LDE4
IEBAIHB1YmxpYzoKICAgICBtYWNoX21zZ19zaXplX3Qgc2l6ZSgpIGNvbnN0IHsgQVNTRVJUKG1f
dHlwZSA9PSBNYWNoT09MTWVtb3J5VHlwZSk7IHJldHVybiBtX29vbE1lbW9yeS5zaXplOyB9CiAg
ICAgbWFjaF9tc2dfY29weV9vcHRpb25zX3QgY29weU9wdGlvbnMoKSBjb25zdCB7IEFTU0VSVCht
X3R5cGUgPT0gTWFjaE9PTE1lbW9yeVR5cGUpOyByZXR1cm4gbV9vb2xNZW1vcnkuY29weU9wdGlv
bnM7IH0KICAgICBib29sIGRlYWxsb2NhdGUoKSBjb25zdCB7IEFTU0VSVChtX3R5cGUgPT0gTWFj
aE9PTE1lbW9yeVR5cGUpOyByZXR1cm4gbV9vb2xNZW1vcnkuZGVhbGxvY2F0ZTsgfQorI2VsaWYg
UExBVEZPUk0oUVQpCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
KworICAgIGludCByZWxlYXNlRmlsZURlc2NyaXB0b3IoKSB7IGludCB0ZW1wID0gbV9maWxlRGVz
Y3JpcHRvcjsgbV9maWxlRGVzY3JpcHRvciA9IC0xOyByZXR1cm4gdGVtcDsgfQorICAgIGludCBm
aWxlRGVzY3JpcHRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZURlc2NyaXB0b3I7IH0KKworICAg
IHZvaWQgZGlzcG9zZSgpOwogI2VuZGlmCiAKICAgICB2b2lkIGVuY29kZShBcmd1bWVudEVuY29k
ZXIqKSBjb25zdDsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgQXR0
YWNobWVudCYpOwotICAgIAorCiBwcml2YXRlOgogICAgIFR5cGUgbV90eXBlOwogCkBAIC04Myw2
ICs5NCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBib29sIGRlYWxsb2NhdGU7CiAgICAgICAg
IH0gbV9vb2xNZW1vcnk7CiAgICAgfTsKKyNlbGlmIFBMQVRGT1JNKFFUKQorICAgIGludCBtX2Zp
bGVEZXNjcmlwdG9yOworICAgIHNpemVfdCBtX3NpemU7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oIGIvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgKaW5kZXggYzRlYzQ3OC4uMmFh
MDdmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0
aW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgK
QEAgLTQ0LDkgKzQ0LDggQEAKICNlbGlmIFBMQVRGT1JNKFdJTikKICNpbmNsdWRlIDxzdHJpbmc+
CiAjZWxpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlIDxRU3RyaW5nPgotY2xhc3MgUUxvY2FsU2Vy
dmVyOwotY2xhc3MgUUxvY2FsU29ja2V0OworY2xhc3MgUVNvY2tldE5vdGlmaWVyOworI2luY2x1
ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKICNlbmRpZgogCiBjbGFzcyBSdW5Mb29w
OwpAQCAtNzgsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShDb25uZWN0aW9uKiwgTWVzc2FnZUlELCBBcmd1bWVudERlY29kZXIqKSA9IDA7
CiAgICAgICAgIHZpcnR1YWwgU3luY1JlcGx5TW9kZSBkaWRSZWNlaXZlU3luY01lc3NhZ2UoQ29u
bmVjdGlvbiosIE1lc3NhZ2VJRCwgQXJndW1lbnREZWNvZGVyKiwgQXJndW1lbnRFbmNvZGVyKikg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIEF1dG9tYXRpY1JlcGx5OyB9CiAgICAgfTsK
LSAgICAKKwogICAgIGNsYXNzIENsaWVudCA6IHB1YmxpYyBNZXNzYWdlUmVjZWl2ZXIgewogICAg
IHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCB+Q2xpZW50KCkgeyB9CkBAIC05OCw3ICs5Nyw3
IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEhBTkRMRSBJZGVudGlmaWVyOwogICAgIHN0YXRpYyBi
b29sIGNyZWF0ZVNlcnZlckFuZENsaWVudElkZW50aWZpZXJzKElkZW50aWZpZXImIHNlcnZlcklk
ZW50aWZpZXIsIElkZW50aWZpZXImIGNsaWVudElkZW50aWZpZXIpOwogI2VsaWYgUExBVEZPUk0o
UVQpCi0gICAgdHlwZWRlZiBjb25zdCBRU3RyaW5nIElkZW50aWZpZXI7CisgICAgdHlwZWRlZiBp
bnQgSWRlbnRpZmllcjsKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICB0eXBlZGVmIGludCBJZGVu
dGlmaWVyOwogI2VuZGlmCkBAIC0xMDksNiArMTA4LDggQEAgcHVibGljOgogCiAjaWYgUExBVEZP
Uk0oTUFDKQogICAgIHZvaWQgc2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25NYWNoRXhjZXB0aW9u
cygpOworI2VsaWYgUExBVEZPUk0oUVQpCisgICAgdm9pZCBzZXRTaG91bGRDbG9zZUNvbm5lY3Rp
b25PblByb2Nlc3NUZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIp
OwogI2VuZGlmCiAKICAgICBib29sIG9wZW4oKTsKQEAgLTI4NCw4ICsyODUsOCBAQCBwcml2YXRl
OgogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fcmVhZEJ1ZmZlcjsKICAgICBzaXplX3QgbV9jdXJy
ZW50TWVzc2FnZVNpemU7Ci0gICAgUUxvY2FsU29ja2V0KiBtX3NvY2tldDsKLSAgICBRU3RyaW5n
IG1fc2VydmVyTmFtZTsKKyAgICBRU29ja2V0Tm90aWZpZXIqIG1fc29ja2V0Tm90aWZpZXI7Cisg
ICAgaW50IG1fc29ja2V0RGVzY3JpcHRvcjsKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICB2b2lk
IHJlYWRFdmVudEhhbmRsZXIoKTsKICAgICB2b2lkIHByb2Nlc3NDb21wbGV0ZWRNZXNzYWdlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rp
b25RdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25R
dC5jcHAKaW5kZXggYzA3MzZiOC4uZGE3YTc4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0LmNwcApAQCAtMjksMTE0ICsyOSwzMzIg
QEAKICNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKICNpbmNsdWRlICJQcm9jZXNzTGF1bmNo
ZXIuaCIKICNpbmNsdWRlICJXb3JrSXRlbS5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgor
I2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KLSNp
bmNsdWRlIDxRTG9jYWxTZXJ2ZXI+Ci0jaW5jbHVkZSA8UUxvY2FsU29ja2V0PgorI2luY2x1ZGUg
PFFTb2NrZXROb3RpZmllcj4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8dW5p
c3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBD
b3JlSVBDIHsKIAotLy8gVGhpcyBpcyB3aGF0IG90aGVyIHBvcnRzIHVzZS4uLgogc3RhdGljIGNv
bnN0IHNpemVfdCBtZXNzYWdlTWF4U2l6ZSA9IDQwOTY7CitzdGF0aWMgY29uc3Qgc2l6ZV90IGF0
dGFjaG1lbnRNYXhBbW91bnQgPSAyNTU7CisKK2VudW0geworICAgIE1lc3NhZ2VCb2R5SXNPT0wg
PSAxIDw8IDMxCit9OworCitjbGFzcyBNZXNzYWdlSW5mbyB7CitwdWJsaWM6CisgICAgTWVzc2Fn
ZUluZm8oKSB7fQorCisgICAgTWVzc2FnZUluZm8oTWVzc2FnZUlEIG1lc3NhZ2VJRCwgc2l6ZV90
IGJvZHlTaXplLCBzaXplX3QgaW5pdGlhbEF0dGFjaG1lbnRDb3VudCkKKyAgICAgICAgOiBtX21l
c3NhZ2VJRChtZXNzYWdlSUQudG9JbnQoKSkKKyAgICAgICAgLCBtX2JvZHlTaXplKGJvZHlTaXpl
KQorICAgICAgICAsIG1fYXR0YWNobWVudENvdW50KGluaXRpYWxBdHRhY2htZW50Q291bnQpCisg
ICAgeworICAgICAgICBBU1NFUlQoIShtX21lc3NhZ2VJRCAmIE1lc3NhZ2VCb2R5SXNPT0wpKTsK
KyAgICB9CisKKyAgICB2b2lkIHNldE1lc3NhZ2VCb2R5T09MKCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCghaXNNZXNzYWdlQm9keU9PTCgpKTsKKworICAgICAgICBtX21lc3NhZ2VJRCB8PSBNZXNz
YWdlQm9keUlzT09MOworICAgICAgICBtX2F0dGFjaG1lbnRDb3VudCsrOworICAgIH0KKworICAg
IGJvb2wgaXNNZXNzYWdlQm9keU9PTCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZUlEICYgTWVz
c2FnZUJvZHlJc09PTDsgfQorCisgICAgc2l6ZV90IGJvZHlTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9ib2R5U2l6ZTsgfQorCisgICAgTWVzc2FnZUlEIG1lc3NhZ2VJRCgpIGNvbnN0IHsgcmV0dXJu
IE1lc3NhZ2VJRDo6ZnJvbUludChtX21lc3NhZ2VJRCAmIH5NZXNzYWdlQm9keUlzT09MKTsgfQor
CisgICAgc2l6ZV90IGF0dGFjaG1lbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0YWNobWVu
dENvdW50OyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV9tZXNzYWdlSUQ7CisgICAgc2l6
ZV90IG1fYm9keVNpemU7CisgICAgc2l6ZV90IG1fYXR0YWNobWVudENvdW50OworfTsKIAogdm9p
ZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUluaXRpYWxpemUoSWRlbnRpZmllciBpZGVudGlmaWVyKQog
ewotICAgIG1fc2VydmVyTmFtZSA9IGlkZW50aWZpZXI7Ci0gICAgbV9zb2NrZXQgPSAwOworICAg
IG1fc29ja2V0RGVzY3JpcHRvciA9IGlkZW50aWZpZXI7CisgICAgbV9zb2NrZXROb3RpZmllciA9
IDA7CiAgICAgbV9yZWFkQnVmZmVyLnJlc2l6ZShtZXNzYWdlTWF4U2l6ZSk7CiAgICAgbV9jdXJy
ZW50TWVzc2FnZVNpemUgPSAwOwogfQogCiB2b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW52YWxp
ZGF0ZSgpCiB7Ci0gICAgbV9zb2NrZXQtPmRpc2Nvbm5lY3QoKTsKLSAgICBpZiAoIW1faXNTZXJ2
ZXIpCi0gICAgICAgIG1fc29ja2V0LT5kZWxldGVMYXRlcigpOwotICAgIG1fc29ja2V0ID0gMDsK
KyAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IC0xKQorICAgICAgICB3aGlsZSAoY2xvc2Uo
bV9zb2NrZXREZXNjcmlwdG9yKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikge30KKworICAgIGlm
ICghbV9pc0Nvbm5lY3RlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlIG1fc29ja2V0
Tm90aWZpZXI7CisgICAgbV9zb2NrZXROb3RpZmllciA9IDA7CisgICAgbV9zb2NrZXREZXNjcmlw
dG9yID0gLTE7CisgICAgbV9pc0Nvbm5lY3RlZCA9IGZhbHNlOwogfQogCitjbGFzcyBTb2NrZXRO
b3RpZmllclJlc291cmNlR3VhcmQgeworcHVibGljOgorICAgIFNvY2tldE5vdGlmaWVyUmVzb3Vy
Y2VHdWFyZChRU29ja2V0Tm90aWZpZXIqIHNvY2tldE5vdGlmaWVyKQorICAgICAgICA6IG1fc29j
a2V0Tm90aWZpZXIoc29ja2V0Tm90aWZpZXIpCisgICAgeworICAgICAgICBtX3NvY2tldE5vdGlm
aWVyLT5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICB9CisKKyAgICB+U29ja2V0Tm90aWZpZXJSZXNv
dXJjZUd1YXJkKCkKKyAgICB7CisgICAgICAgIG1fc29ja2V0Tm90aWZpZXItPnNldEVuYWJsZWQo
dHJ1ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFFTb2NrZXROb3RpZmllciogY29uc3QgbV9z
b2NrZXROb3RpZmllcjsKK307CisKK3RlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIGl0ZXJhdG9yPgor
Y2xhc3MgQXR0YWNobWVudFJlc291cmNlR3VhcmQgeworcHVibGljOgorICAgIEF0dGFjaG1lbnRS
ZXNvdXJjZUd1YXJkKFQmIGF0dGFjaG1lbnRzKQorICAgICAgICA6IG1fYXR0YWNobWVudHMoYXR0
YWNobWVudHMpCisgICAgeworICAgIH0KKyAgICB+QXR0YWNobWVudFJlc291cmNlR3VhcmQoKQor
ICAgIHsKKyAgICAgICAgaXRlcmF0b3IgZW5kID0gbV9hdHRhY2htZW50cy5lbmQoKTsKKyAgICAg
ICAgZm9yIChpdGVyYXRvciBpID0gbV9hdHRhY2htZW50cy5iZWdpbigpOyBpICE9IGVuZDsgKytp
KQorICAgICAgICAgICAgaS0+ZGlzcG9zZSgpOworICAgIH0KK3ByaXZhdGU6CisgICAgVCYgbV9h
dHRhY2htZW50czsKK307CisKIHZvaWQgQ29ubmVjdGlvbjo6cmVhZHlSZWFkSGFuZGxlcigpCiB7
Ci0gICAgd2hpbGUgKG1fc29ja2V0LT5ieXRlc0F2YWlsYWJsZSgpKSB7Ci0gICAgICAgIGlmICgh
bV9jdXJyZW50TWVzc2FnZVNpemUpIHsKLSAgICAgICAgICAgIHNpemVfdCBudW1iZXJPZkJ5dGVz
UmVhZCA9IG1fc29ja2V0LT5yZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fcmVhZEJ1ZmZl
ci5kYXRhKCkpLCBzaXplb2Yoc2l6ZV90KSk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG51
bWJlck9mQnl0ZXNSZWFkLCBudW1iZXJPZkJ5dGVzUmVhZCk7Ci0gICAgICAgICAgICBtX2N1cnJl
bnRNZXNzYWdlU2l6ZSA9ICpyZWludGVycHJldF9jYXN0PHNpemVfdCo+KG1fcmVhZEJ1ZmZlci5k
YXRhKCkpOwotICAgICAgICB9CisgICAgRGVxdWU8QXR0YWNobWVudD4gYXR0YWNobWVudHM7Cisg
ICAgU29ja2V0Tm90aWZpZXJSZXNvdXJjZUd1YXJkIHNvY2tldE5vdGlmaWVyRW5hYmxlcihtX3Nv
Y2tldE5vdGlmaWVyKTsKKyAgICBBdHRhY2htZW50UmVzb3VyY2VHdWFyZDxEZXF1ZTxBdHRhY2ht
ZW50PiwgRGVxdWU8QXR0YWNobWVudD46Oml0ZXJhdG9yPiBhdHRhY2hlbWVudERpc3Bvc2VyKGF0
dGFjaG1lbnRzKTsKKworICAgIGNoYXIgYXR0YWNobWVudERlc2NyaXB0b3JCdWZmZXJbQ01TR19T
UEFDRShzaXplb2YoaW50KSAqIChhdHRhY2htZW50TWF4QW1vdW50KSldOworICAgIHN0cnVjdCBt
c2doZHIgbWVzc2FnZTsKKyAgICBtZW1zZXQoJm1lc3NhZ2UsIDAsIHNpemVvZihtZXNzYWdlKSk7
CisKKyAgICBzdHJ1Y3QgaW92ZWMgaW92WzFdOworICAgIG1lbXNldCgmaW92LCAwLCBzaXplb2Yo
aW92KSk7CiAKLSAgICAgICAgaWYgKG1fc29ja2V0LT5ieXRlc0F2YWlsYWJsZSgpIDwgbV9jdXJy
ZW50TWVzc2FnZVNpemUpCisgICAgbWVzc2FnZS5tc2dfY29udHJvbCA9IGF0dGFjaG1lbnREZXNj
cmlwdG9yQnVmZmVyOworICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBDTVNHX1NQQUNFKHNp
emVvZihpbnQpICogKGF0dGFjaG1lbnRNYXhBbW91bnQpKTsKKworICAgIGlvdlswXS5pb3ZfYmFz
ZSA9IG1fcmVhZEJ1ZmZlci5kYXRhKCk7CisgICAgaW92WzBdLmlvdl9sZW4gPSBtX3JlYWRCdWZm
ZXIuc2l6ZSgpOworCisgICAgbWVzc2FnZS5tc2dfaW92ID0gaW92OworICAgIG1lc3NhZ2UubXNn
X2lvdmxlbiA9IDE7CisKKworICAgIGludCBtZXNzYWdlTGVuZ3RoID0gMDsKKyAgICB3aGlsZSAo
KG1lc3NhZ2VMZW5ndGggPSByZWN2bXNnKG1fc29ja2V0RGVzY3JpcHRvciwgJm1lc3NhZ2UsIE1T
R19DTVNHX0NMT0VYRUMpKSA9PSAtMSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpCiAg
ICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RydWN0IGNtc2doZHIqIGNvbnRyb2xN
ZXNzYWdlID0gQ01TR19GSVJTVEhEUigmbWVzc2FnZSk7CisKKyAgICBNZXNzYWdlSW5mbyBtZXNz
YWdlSW5mbzsKKyAgICB1bnNpZ25lZCBjaGFyKiBtZXNzYWdlRGF0YSA9IG1fcmVhZEJ1ZmZlci5k
YXRhKCk7CisKKyAgICBtZW1jcHkoJm1lc3NhZ2VJbmZvLCBtZXNzYWdlRGF0YSwgc2l6ZW9mKG1l
c3NhZ2VJbmZvKSk7CisgICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGggPT0gc2l6ZW9mKG1lc3NhZ2VJ
bmZvKSArIG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpICogc2l6ZW9mKHNpemVfdCkgKyAo
bWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpID8gMCA6IG1lc3NhZ2VJbmZvLmJvZHlTaXpl
KCkpKTsKKworICAgIG1lc3NhZ2VEYXRhICs9IHNpemVvZihtZXNzYWdlSW5mbyk7CisKKyAgICBS
ZWZQdHI8V2ViS2l0OjpTaGFyZWRNZW1vcnk+IG9vbE1lc3NhZ2VCb2R5OworCisgICAgaWYgKG1l
c3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpKSB7CisgICAgICAgIGlmIChjb250cm9sTWVzc2Fn
ZSAmJiBjb250cm9sTWVzc2FnZS0+Y21zZ19sZXZlbCA9PSBTT0xfU09DS0VUICYmIGNvbnRyb2xN
ZXNzYWdlLT5jbXNnX3R5cGUgPT0gU0NNX1JJR0hUUykgeworICAgICAgICAgICAgc2l6ZV90IGF0
dGFjaG1lbnRTaXplc1ttZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKV07CisgICAgICAgICAg
ICBtZW1jcHkoYXR0YWNobWVudFNpemVzLCBtZXNzYWdlRGF0YSwgc2l6ZW9mKGF0dGFjaG1lbnRT
aXplcykpOworCisgICAgICAgICAgICBtZXNzYWdlRGF0YSArPSBzaXplb2YoYXR0YWNobWVudFNp
emVzKTsKKworICAgICAgICAgICAgaW50IGZpbGVEZXNjcmlwdG9yc1ttZXNzYWdlSW5mby5hdHRh
Y2htZW50Q291bnQoKV07CisgICAgICAgICAgICBtZW1jcHkoZmlsZURlc2NyaXB0b3JzLCBDTVNH
X0RBVEEoY29udHJvbE1lc3NhZ2UpLCBzaXplb2YoZmlsZURlc2NyaXB0b3JzKSk7CisKKyAgICAg
ICAgICAgIGludCBhdHRhY2htZW50Q291bnQgPSBtZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQo
KTsKIAotICAgICAgICBpZiAobV9yZWFkQnVmZmVyLnNpemUoKSA8IG1fY3VycmVudE1lc3NhZ2VT
aXplKQotICAgICAgICAgICAgbV9yZWFkQnVmZmVyLmdyb3cobV9jdXJyZW50TWVzc2FnZVNpemUp
OworICAgICAgICAgICAgaWYgKG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSkKKyAgICAg
ICAgICAgICAgICBhdHRhY2htZW50Q291bnQtLTsKIAotICAgICAgICBzaXplX3QgbnVtYmVyT2ZC
eXRlc1JlYWQgPSBtX3NvY2tldC0+cmVhZChyZWludGVycHJldF9jYXN0PGNoYXIqPihtX3JlYWRC
dWZmZXIuZGF0YSgpKSwgbV9jdXJyZW50TWVzc2FnZVNpemUpOwotICAgICAgICBBU1NFUlRfVU5V
U0VEKG51bWJlck9mQnl0ZXNSZWFkLCBudW1iZXJPZkJ5dGVzUmVhZCk7CisgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGF0dGFjaG1lbnRDb3VudDsgKytpKQorICAgICAgICAgICAgICAg
IGF0dGFjaG1lbnRzLmFwcGVuZChBdHRhY2htZW50KGZpbGVEZXNjcmlwdG9yc1tpXSwgYXR0YWNo
bWVudFNpemVzW2ldKSk7CiAKLSAgICAgICAgLy8gVGhlIG1lc3NhZ2VJRCBpcyBlbmNvZGVkIGF0
IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAgICAgICAgc2l6ZV90IHJlYWxCdWZmZXJTaXplID0g
bV9jdXJyZW50TWVzc2FnZVNpemUgLSBzaXplb2YodWludDMyX3QpOwotICAgICAgICB1aW50MzJf
dCBtZXNzYWdlSUQgPSAqcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KG1fcmVhZEJ1ZmZlci5k
YXRhKCkgKyByZWFsQnVmZmVyU2l6ZSk7CisgICAgICAgICAgICBpZiAobWVzc2FnZUluZm8uaXNN
ZXNzYWdlQm9keU9PTCgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1lc3NhZ2VJbmZvLmJv
ZHlTaXplKCkpOwogCi0gICAgICAgIHByb2Nlc3NJbmNvbWluZ01lc3NhZ2UoTWVzc2FnZUlEOjpm
cm9tSW50KG1lc3NhZ2VJRCksIGFkb3B0UHRyKG5ldyBBcmd1bWVudERlY29kZXIobV9yZWFkQnVm
ZmVyLmRhdGEoKSwgcmVhbEJ1ZmZlclNpemUpKSk7CisgICAgICAgICAgICAgICAgV2ViS2l0OjpT
aGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgICAgICAgICAgICAgaGFuZGxlLmFkb3B0
RnJvbUF0dGFjaG1lbnQoZmlsZURlc2NyaXB0b3JzW2F0dGFjaG1lbnRDb3VudF0sIGF0dGFjaG1l
bnRTaXplc1thdHRhY2htZW50Q291bnRdKTsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLmlz
TnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIG1f
Y3VycmVudE1lc3NhZ2VTaXplID0gMDsKKyAgICAgICAgICAgICAgICBvb2xNZXNzYWdlQm9keSA9
IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUoaGFuZGxlLCBXZWJLaXQ6OlNoYXJlZE1lbW9y
eTo6UmVhZE9ubHkpOworICAgICAgICAgICAgICAgIGlmICghb29sTWVzc2FnZUJvZHkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGNvbnRyb2xNZXNzYWdlID0gQ01TR19OWFRIRFIoJm1lc3NhZ2UsIGNvbnRyb2xNZXNzYWdl
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQorCisgICAgQVNTRVJUKGF0dGFj
aG1lbnRzLnNpemUoKSA9PSBtZXNzYWdlSW5mby5pc01lc3NhZ2VCb2R5T09MKCkgPyBtZXNzYWdl
SW5mby5hdHRhY2htZW50Q291bnQoKSAtIDEgOiBtZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQo
KSk7CisKKyAgICB1bnNpZ25lZCBjaGFyKiBtZXNzYWdlQm9keSA9IG1lc3NhZ2VEYXRhOworCisg
ICAgaWYgKG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSkKKyAgICAgICAgbWVzc2FnZUJv
ZHkgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihvb2xNZXNzYWdlQm9keS0+ZGF0
YSgpKTsKKworICAgIEFyZ3VtZW50RGVjb2RlciogYXJndW1lbnREZWNvZGVyOworICAgIGlmIChh
dHRhY2htZW50cy5pc0VtcHR5KCkpCisgICAgICAgIGFyZ3VtZW50RGVjb2RlciA9IG5ldyBBcmd1
bWVudERlY29kZXIobWVzc2FnZUJvZHksIG1lc3NhZ2VJbmZvLmJvZHlTaXplKCkpOworICAgIGVs
c2UKKyAgICAgICAgYXJndW1lbnREZWNvZGVyID0gbmV3IEFyZ3VtZW50RGVjb2RlcihtZXNzYWdl
Qm9keSwgbWVzc2FnZUluZm8uYm9keVNpemUoKSwgYXR0YWNobWVudHMpOworCisgICAgcHJvY2Vz
c0luY29taW5nTWVzc2FnZShtZXNzYWdlSW5mby5tZXNzYWdlSUQoKSwgYWRvcHRQdHIoYXJndW1l
bnREZWNvZGVyKSk7CisKKyAgICBBU1NFUlQoIWNvbnRyb2xNZXNzYWdlKTsKIH0KIAogYm9vbCBD
b25uZWN0aW9uOjpvcGVuKCkKIHsKLSAgICBBU1NFUlQoIW1fc29ja2V0KTsKLQotICAgIGlmICht
X2lzU2VydmVyKSB7Ci0gICAgICAgIG1fc29ja2V0ID0gV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6
OnRha2VQZW5kaW5nQ29ubmVjdGlvbigpOwotICAgICAgICBtX2lzQ29ubmVjdGVkID0gbV9zb2Nr
ZXQ7Ci0gICAgICAgIGlmIChtX2lzQ29ubmVjdGVkKSB7Ci0gICAgICAgICAgICBtX2Nvbm5lY3Rp
b25RdWV1ZS5tb3ZlU29ja2V0VG9Xb3JrVGhyZWFkKG1fc29ja2V0KTsKLSAgICAgICAgICAgIG1f
Y29ubmVjdGlvblF1ZXVlLmNvbm5lY3RTaWduYWwobV9zb2NrZXQsIFNJR05BTChyZWFkeVJlYWQo
KSksIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIp
KTsKKyAgICBBU1NFUlQoIW1fc29ja2V0Tm90aWZpZXIpOworICAgIGludCBmbGFncyA9IGZjbnRs
KG1fc29ja2V0RGVzY3JpcHRvciwgRl9HRVRGTCwgMCk7CisgICAgd2hpbGUgKGZjbnRsKG1fc29j
a2V0RGVzY3JpcHRvciwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKSA9PSAtMSkgeworICAg
ICAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgbV9zb2NrZXQgPSBuZXcgUUxvY2FsU29ja2V0KCk7Ci0gICAgICAgIG1fc29ja2V0
LT5jb25uZWN0VG9TZXJ2ZXIobV9zZXJ2ZXJOYW1lKTsKLSAgICAgICAgbV9jb25uZWN0aW9uUXVl
dWUubW92ZVNvY2tldFRvV29ya1RocmVhZChtX3NvY2tldCk7Ci0gICAgICAgIG1fY29ubmVjdGlv
blF1ZXVlLmNvbm5lY3RTaWduYWwobV9zb2NrZXQsIFNJR05BTChyZWFkeVJlYWQoKSksIFdvcmtJ
dGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIpKTsKLSAgICAg
ICAgbV9jb25uZWN0aW9uUXVldWUuY29ubmVjdFNpZ25hbChtX3NvY2tldCwgU0lHTkFMKGRpc2Nv
bm5lY3RlZCgpKSwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6Y29ubmVjdGlv
bkRpZENsb3NlKSk7Ci0gICAgICAgIG1faXNDb25uZWN0ZWQgPSBtX3NvY2tldC0+d2FpdEZvckNv
bm5lY3RlZCgpOwogICAgIH0KLSAgICByZXR1cm4gbV9pc0Nvbm5lY3RlZDsKKworICAgIG1faXND
b25uZWN0ZWQgPSB0cnVlOworICAgIG1fc29ja2V0Tm90aWZpZXIgPSBtX2Nvbm5lY3Rpb25RdWV1
ZS5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihtX3NvY2tldERlc2NyaXB0b3IsIFFTb2NrZXRO
b3RpZmllcjo6UmVhZCwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6cmVhZHlS
ZWFkSGFuZGxlcikpOworCisgICAgLy8gU2NoZWR1bGUgYSBjYWxsIHRvIHJlYWR5UmVhZEhhbmRs
ZXIuIERhdGEgbWF5IGhhdmUgYXJyaXZlZCBiZWZvcmUgaW5zdGFsbGF0aW9uIG9mIHRoZSBzaWdu
YWwKKyAgICAvLyBoYW5kbGVyLgorICAgIG1fY29ubmVjdGlvblF1ZXVlLnNjaGVkdWxlV29yayhX
b3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVyKSk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBDb25uZWN0aW9uOjpwbGF0Zm9ybUNhblNlbmRP
dXRnb2luZ01lc3NhZ2VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zb2NrZXQ7CisgICAgcmV0
dXJuIG1fc29ja2V0Tm90aWZpZXI7CiB9CiAKIGJvb2wgQ29ubmVjdGlvbjo6c2VuZE91dGdvaW5n
TWVzc2FnZShNZXNzYWdlSUQgbWVzc2FnZUlELCBQYXNzT3duUHRyPEFyZ3VtZW50RW5jb2Rlcj4g
YXJndW1lbnRzKQogewotICAgIEFTU0VSVChtX3NvY2tldCk7CisgICAgQVNTRVJUKG1fc29ja2V0
Tm90aWZpZXIpOworICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihNZXNzYWdlSW5mbykgKyBhdHRh
Y2htZW50TWF4QW1vdW50ICogc2l6ZW9mKHNpemVfdCkgPD0gbWVzc2FnZU1heFNpemUsIEF0dGFj
aG1lbnRzRml0VG9NZXNzYWdlSW5saW5lKTsKIAotICAgIC8vIFdlIHB1dCB0aGUgbWVzc2FnZSBJ
RCBsYXN0LgotICAgIGFyZ3VtZW50cy0+ZW5jb2RlVUludDMyKG1lc3NhZ2VJRC50b0ludCgpKTsK
KyAgICBWZWN0b3I8QXR0YWNobWVudD4gYXR0YWNobWVudHMgPSBhcmd1bWVudHMtPnJlbGVhc2VB
dHRhY2htZW50cygpOworICAgIEF0dGFjaG1lbnRSZXNvdXJjZUd1YXJkPFZlY3RvcjxBdHRhY2ht
ZW50PiwgVmVjdG9yPEF0dGFjaG1lbnQ+OjppdGVyYXRvcj4gYXR0YWNoZW1lbnREaXNwb3Nlcihh
dHRhY2htZW50cyk7CiAKLSAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IGFyZ3VtZW50cy0+YnVmZmVy
U2l6ZSgpOwotCi0gICAgLy8gV3JpdGUgbWVzc2FnZSBzaXplIGZpcnN0Ci0gICAgLy8gRklYTUU6
IFNob3VsZCAganVzdCBkbyBhIHNpbmdsZSB3cml0ZS4KLSAgICBxaW50NjQgYnl0ZXNXcml0dGVu
Rm9yU2l6ZSA9IG1fc29ja2V0LT53cml0ZShyZWludGVycHJldF9jYXN0PGNoYXIqPigmYnVmZmVy
U2l6ZSksIHNpemVvZihidWZmZXJTaXplKSk7Ci0gICAgaWYgKGJ5dGVzV3JpdHRlbkZvclNpemUg
IT0gc2l6ZW9mKGJ1ZmZlclNpemUpKSB7Ci0gICAgICAgIGNvbm5lY3Rpb25EaWRDbG9zZSgpOwor
ICAgIGlmIChhdHRhY2htZW50cy5zaXplKCkgPiAoYXR0YWNobWVudE1heEFtb3VudCAtIDEpKSB7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgcWludDY0IGJ5dGVzV3JpdHRlbkZvckJ1ZmZlciA9IG1fc29ja2V0LT53cml0
ZShyZWludGVycHJldF9jYXN0PGNoYXIqPihhcmd1bWVudHMtPmJ1ZmZlcigpKSwgYXJndW1lbnRz
LT5idWZmZXJTaXplKCkpOwotICAgIGlmIChieXRlc1dyaXR0ZW5Gb3JCdWZmZXIgIT0gYXJndW1l
bnRzLT5idWZmZXJTaXplKCkpIHsKLSAgICAgICAgY29ubmVjdGlvbkRpZENsb3NlKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbyhtZXNzYWdlSUQs
IGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpLCBhdHRhY2htZW50cy5zaXplKCkpOworICAgIHNpemVf
dCBtZXNzYWdlU2l6ZVdpdGhCb2R5SW5saW5lID0gc2l6ZW9mKG1lc3NhZ2VJbmZvKSArIChhdHRh
Y2htZW50cy5zaXplKCkgKiBzaXplb2Yoc2l6ZV90KSkgKyBhcmd1bWVudHMtPmJ1ZmZlclNpemUo
KTsKKyAgICBpZiAobWVzc2FnZVNpemVXaXRoQm9keUlubGluZSA+IG1lc3NhZ2VNYXhTaXplICYm
IGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpKSB7CisgICAgICAgIFJlZlB0cjxXZWJLaXQ6OlNoYXJl
ZE1lbW9yeT4gb29sTWVzc2FnZUJvZHkgPSBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlKGFy
Z3VtZW50cy0+YnVmZmVyU2l6ZSgpKTsKKyAgICAgICAgaWYgKCFvb2xNZXNzYWdlQm9keSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6
SGFuZGxlIGhhbmRsZTsKKyAgICAgICAgaWYgKCFvb2xNZXNzYWdlQm9keS0+Y3JlYXRlSGFuZGxl
KGhhbmRsZSwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBtZXNzYWdlSW5mby5zZXRNZXNzYWdlQm9keU9PTCgpOwor
CisgICAgICAgIG1lbWNweShvb2xNZXNzYWdlQm9keS0+ZGF0YSgpLCBhcmd1bWVudHMtPmJ1ZmZl
cigpLCBhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSk7CisKKyAgICAgICAgYXR0YWNobWVudHMuYXBw
ZW5kKGhhbmRsZS5yZWxlYXNlVG9BdHRhY2htZW50KCkpOwogICAgIH0KIAotICAgIG1fc29ja2V0
LT5mbHVzaCgpOworICAgIHN0cnVjdCBtc2doZHIgbWVzc2FnZTsKKyAgICBtZW1zZXQoJm1lc3Nh
Z2UsIDAsIHNpemVvZihtZXNzYWdlKSk7CiAKKyAgICBzdHJ1Y3QgaW92ZWMgaW92WzNdOworICAg
IG1lbXNldCgmaW92LCAwLCBzaXplb2YoaW92KSk7CisKKyAgICBtZXNzYWdlLm1zZ19pb3YgPSBp
b3Y7CisgICAgaW50IGlvdkxlbmd0aCA9IDE7CisKKyAgICBpb3ZbMF0uaW92X2Jhc2UgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPigmbWVzc2FnZUluZm8pOworICAgIGlvdlswXS5pb3ZfbGVuID0g
c2l6ZW9mKG1lc3NhZ2VJbmZvKTsKKworCisgICAgY2hhciBhdHRhY2htZW50RkRCdWZmZXJbQ01T
R19TUEFDRShzaXplb2YoaW50KSAqIChhdHRhY2htZW50cy5zaXplKCkpKV07CisgICAgc2l6ZV90
IGF0dGFjaG1lbnRTaXplc1thdHRhY2htZW50cy5zaXplKCldOworCisgICAgaWYgKCFhdHRhY2ht
ZW50cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbWVzc2FnZS5tc2dfY29udHJvbCA9IGF0dGFjaG1l
bnRGREJ1ZmZlcjsKKyAgICAgICAgbWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihhdHRh
Y2htZW50RkRCdWZmZXIpOworCisgICAgICAgIHN0cnVjdCBjbXNnaGRyKiBjbXNnID0gQ01TR19G
SVJTVEhEUigmbWVzc2FnZSk7CisgICAgICAgIGNtc2ctPmNtc2dfbGV2ZWwgPSBTT0xfU09DS0VU
OworICAgICAgICBjbXNnLT5jbXNnX3R5cGUgPSBTQ01fUklHSFRTOworICAgICAgICBjbXNnLT5j
bXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihpbnQpICogYXR0YWNobWVudHMuc2l6ZSgpKTsKKwor
ICAgICAgICBpbnQqIGZkcHRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQqPihDTVNHX0RBVEEoY21z
ZykpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dGFjaG1lbnRzLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBhdHRhY2htZW50U2l6ZXNbaV0gPSBhdHRhY2htZW50c1tpXS5zaXpl
KCk7CisgICAgICAgICAgICBmZHB0cltpXSA9IGF0dGFjaG1lbnRzW2ldLmZpbGVEZXNjcmlwdG9y
KCk7CisgICAgICAgIH0KKworICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gY21zZy0+
Y21zZ19sZW47CisKKyAgICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2Jhc2UgPSBhdHRhY2htZW50
U2l6ZXM7CisgICAgICAgIGlvdltpb3ZMZW5ndGhdLmlvdl9sZW4gPSBzaXplb2YoYXR0YWNobWVu
dFNpemVzKTsKKyAgICAgICAgKytpb3ZMZW5ndGg7CisgICAgfQorCisgICAgaWYgKCFtZXNzYWdl
SW5mby5pc01lc3NhZ2VCb2R5T09MKCkgJiYgYXJndW1lbnRzLT5idWZmZXJTaXplKCkpIHsKKyAg
ICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2Jhc2UgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihh
cmd1bWVudHMtPmJ1ZmZlcigpKTsKKyAgICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2xlbiA9IGFy
Z3VtZW50cy0+YnVmZmVyU2l6ZSgpOworICAgICAgICArK2lvdkxlbmd0aDsKKyAgICB9CisKKyAg
ICBtZXNzYWdlLm1zZ19pb3ZsZW4gPSBpb3ZMZW5ndGg7CisKKyAgICBpbnQgYnl0ZXNTZW50ID0g
MDsKKyAgICB3aGlsZSAoKGJ5dGVzU2VudCA9IHNlbmRtc2cobV9zb2NrZXREZXNjcmlwdG9yLCAm
bWVzc2FnZSwgMCkpID09IC0xKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQg
Q29ubmVjdGlvbjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24o
V2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MpCit7CisgICAgbV9jb25u
ZWN0aW9uUXVldWUuc2NoZWR1bGVXb3JrT25UZXJtaW5hdGlvbihwcm9jZXNzLCBXb3JrSXRlbTo6
Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpjb25uZWN0aW9uRGlkQ2xvc2UpKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgQ29yZUlQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
U2hhcmVkTWVtb3J5LmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaApp
bmRleCAwNWRjMGRkLi5iYjYxNjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9TaGFyZWRNZW1vcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1v
cnkuaApAQCAtMzEsMTAgKzMxLDcgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiAj
aWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSA8UXRHbG9iYWw+Ci1RVF9CRUdJTl9OQU1FU1BBQ0UK
LWNsYXNzIFFTaGFyZWRNZW1vcnk7Ci1RVF9FTkRfTkFNRVNQQUNFCisjaW5jbHVkZSAiQXR0YWNo
bWVudC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2VuZGlmCiAKQEAgLTYy
LDYgKzU5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1l
bnRFbmNvZGVyKikgY29uc3Q7CiAgICAgICAgIHN0YXRpYyBib29sIGRlY29kZShDb3JlSVBDOjpB
cmd1bWVudERlY29kZXIqLCBIYW5kbGUmKTsKIAorI2lmIFBMQVRGT1JNKFFUKQorICAgICAgICBD
b3JlSVBDOjpBdHRhY2htZW50IHJlbGVhc2VUb0F0dGFjaG1lbnQoKSBjb25zdDsKKyAgICAgICAg
dm9pZCBhZG9wdEZyb21BdHRhY2htZW50KGludCBmaWxlRGVzY3JpcHRvciwgc2l6ZV90KTsKKyNl
bmRpZgogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBTaGFyZWRNZW1vcnk7CiAj
aWYgUExBVEZPUk0oTUFDKQpAQCAtNjksNyArNzAsNyBAQCBwdWJsaWM6CiAjZWxpZiBQTEFURk9S
TShXSU4pCiAgICAgICAgIG11dGFibGUgSEFORExFIG1faGFuZGxlOwogI2VsaWYgUExBVEZPUk0o
UVQpCi0gICAgICAgIG11dGFibGUgU3RyaW5nIG1fa2V5OworICAgICAgICBtdXRhYmxlIGludCBt
X2ZpbGVEZXNjcmlwdG9yOwogI2VuZGlmCiAgICAgICAgIHNpemVfdCBtX3NpemU7CiAgICAgfTsK
QEAgLTk2LDcgKzk3LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShXSU4pCiAgICAgSEFORExF
IG1faGFuZGxlOwogI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgUVNoYXJlZE1lbW9yeSogbV9pbXBs
OworICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL1dvcmtRdWV1ZS5oCmluZGV4IDc4ZmE4YjcuLmJjYWFlMGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL1dvcmtRdWV1ZS5oCkBAIC00MSw3ICs0MSw4IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiAjaWYgUExBVEZPUk0oUVQpCi1jbGFzcyBRTG9jYWxTb2NrZXQ7CisjaW5jbHVkZSA8UVNv
Y2tldE5vdGlmaWVyPgorI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKIGNs
YXNzIFFPYmplY3Q7CiBjbGFzcyBRVGhyZWFkOwogI2VsaWYgUExBVEZPUk0oR1RLKQpAQCAtNzks
MTAgKzgwLDggQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJIYW5kbGUoSEFORExFLCBQYXNz
T3duUHRyPFdvcmtJdGVtPik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyQW5kQ2xvc2VIYW5kbGUoSEFO
RExFKTsKICNlbGlmIFBMQVRGT1JNKFFUKQotICAgIHZvaWQgY29ubmVjdFNpZ25hbChRT2JqZWN0
KiwgY29uc3QgY2hhciogc2lnbmFsLCBQYXNzT3duUHRyPFdvcmtJdGVtPik7Ci0gICAgdm9pZCBk
aXNjb25uZWN0U2lnbmFsKFFPYmplY3QqLCBjb25zdCBjaGFyKiBzaWduYWwpOwotCi0gICAgdm9p
ZCBtb3ZlU29ja2V0VG9Xb3JrVGhyZWFkKFFMb2NhbFNvY2tldCopOworICAgIFFTb2NrZXROb3Rp
ZmllciogcmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50LCBRU29ja2V0Tm90aWZpZXI6OlR5
cGUsIFBhc3NPd25QdHI8V29ya0l0ZW0+KTsKKyAgICB2b2lkIHNjaGVkdWxlV29ya09uVGVybWlu
YXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLCBQYXNzT3duUHRyPFdvcmtJ
dGVtPik7CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgdm9pZCByZWdpc3RlckV2ZW50U291cmNl
SGFuZGxlcihpbnQsIGludCwgUGFzc093blB0cjxXb3JrSXRlbT4pOwogICAgIHZvaWQgdW5yZWdp
c3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDM2ZDgyYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRN
ZW1vcnlQb29sLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJNYXBwZWRNZW1vcnlQb29sLmgiCi0K
LSNpbmNsdWRlICJDbGVhbnVwSGFuZGxlci5oIgotI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgot
I2luY2x1ZGUgPFFEaXI+Ci0jaW5jbHVkZSA8UUlPRGV2aWNlPgotI2luY2x1ZGUgPFFUZW1wb3Jh
cnlGaWxlPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotTWFwcGVkTWVtb3J5UG9vbCogTWFwcGVk
TWVtb3J5UG9vbDo6dGhlSW5zdGFuY2UgPSAwOwotCi1NYXBwZWRNZW1vcnlQb29sKiBNYXBwZWRN
ZW1vcnlQb29sOjppbnN0YW5jZSgpCi17Ci0gICAgaWYgKCF0aGVJbnN0YW5jZSkgewotICAgICAg
ICB0aGVJbnN0YW5jZSA9IG5ldyBNYXBwZWRNZW1vcnlQb29sOwotCi0gICAgICAgIC8vIERvIG5v
dCBsZWF2ZSBtYXBwaW5nIGZpbGVzIG9uIHRoZSBkaXNrLgotICAgICAgICBDbGVhbnVwSGFuZGxl
cjo6aW5zdGFuY2UoKS0+bWFya0ZvckNsZWFudXAodGhlSW5zdGFuY2UpOwotICAgIH0KLQotICAg
IHJldHVybiB0aGVJbnN0YW5jZTsKLX0KLQotTWFwcGVkTWVtb3J5UG9vbDo6fk1hcHBlZE1lbW9y
eVBvb2woKQotewotICAgIENsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT51bm1hcmsodGhlSW5z
dGFuY2UpOwotCi0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IG1fcG9vbC5zaXplKCk7ICsr
bikgewotICAgICAgICBNYXBwZWRNZW1vcnkmIGN1cnJlbnQgPSBtX3Bvb2wuYXQobik7Ci0gICAg
ICAgIGlmICghY3VycmVudC5maWxlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGN1
cnJlbnQuZmlsZS0+cmVtb3ZlKCk7Ci0gICAgICAgIGRlbGV0ZSBjdXJyZW50LmZpbGU7Ci0gICAg
fQotICAgIG1fcG9vbC5jbGVhcigpOwotfQotCi1NYXBwZWRNZW1vcnkqIE1hcHBlZE1lbW9yeVBv
b2w6Om1hcE1lbW9yeShzaXplX3Qgc2l6ZSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBu
IDwgbV9wb29sLnNpemUoKTsgKytuKSB7Ci0gICAgICAgIE1hcHBlZE1lbW9yeSYgY3VycmVudCA9
IG1fcG9vbC5hdChuKTsKLSAgICAgICAgaWYgKGN1cnJlbnQuZGF0YVNpemUgPj0gc2l6ZSAmJiBj
dXJyZW50LmlzRnJlZSgpKSB7Ci0gICAgICAgICAgICBjdXJyZW50Lm1hcmtVc2VkKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gJmN1cnJlbnQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBNYXBwZWRN
ZW1vcnkgbmV3TWFwOwotICAgIG5ld01hcC5kYXRhU2l6ZSA9IHNpemU7Ci0gICAgbmV3TWFwLmZp
bGUgPSBuZXcgUVRlbXBvcmFyeUZpbGUoUURpcjo6dGVtcFBhdGgoKSArICIvV2ViS2l0MlVwZGF0
ZUNodW5rIik7Ci0gICAgbmV3TWFwLmZpbGUtPm9wZW4oUUlPRGV2aWNlOjpSZWFkV3JpdGUpOwot
ICAgIG5ld01hcC5maWxlTmFtZSA9IG5ld01hcC5maWxlLT5maWxlTmFtZSgpOwotICAgIG5ld01h
cC5maWxlLT5yZXNpemUobmV3TWFwLm1hcFNpemUoKSk7Ci0gICAgbmV3TWFwLm1hcHBlZEJ5dGVz
ID0gbmV3TWFwLmZpbGUtPm1hcCgwLCBuZXdNYXAubWFwU2l6ZSgpKTsKLSAgICBuZXdNYXAuZmls
ZS0+Y2xvc2UoKTsKLSAgICBuZXdNYXAubWFya1VzZWQoKTsKLSAgICBtX3Bvb2wuYXBwZW5kKG5l
d01hcCk7Ci0gICAgcmV0dXJuICZtX3Bvb2wubGFzdCgpOwotfQotCi1NYXBwZWRNZW1vcnkqIE1h
cHBlZE1lbW9yeVBvb2w6Om1hcEZpbGUoUVN0cmluZyBmaWxlTmFtZSwgc2l6ZV90IHNpemUpCi17
Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IG1fcG9vbC5zaXplKCk7ICsrbikgewotICAg
ICAgICBNYXBwZWRNZW1vcnkmIGN1cnJlbnQgPSBtX3Bvb2wuYXQobik7Ci0gICAgICAgIGlmIChj
dXJyZW50LmZpbGVOYW1lID09IGZpbGVOYW1lKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWN1cnJl
bnQuaXNGcmVlKCkpOwotICAgICAgICAgICAgcmV0dXJuICZjdXJyZW50OwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgTWFwcGVkTWVtb3J5IG5ld01hcDsKLSAgICBuZXdNYXAuZmlsZSA9IG5ldyBR
RmlsZShmaWxlTmFtZSk7Ci0gICAgbmV3TWFwLmZpbGVOYW1lID0gZmlsZU5hbWU7Ci0gICAgbmV3
TWFwLmRhdGFTaXplID0gc2l6ZTsKLSAgICBBU1NFUlQobmV3TWFwLmZpbGUtPmV4aXN0cygpKTsK
LSAgICBBU1NFUlQobmV3TWFwLmZpbGUtPnNpemUoKSA+PSBuZXdNYXAubWFwU2l6ZSgpKTsKLSAg
ICBuZXdNYXAuZmlsZS0+b3BlbihRSU9EZXZpY2U6OlJlYWRXcml0ZSk7Ci0gICAgbmV3TWFwLm1h
cHBlZEJ5dGVzID0gbmV3TWFwLmZpbGUtPm1hcCgwLCBuZXdNYXAubWFwU2l6ZSgpKTsKLSAgICBB
U1NFUlQobmV3TWFwLm1hcHBlZEJ5dGVzKTsKLSAgICBBU1NFUlQoIW5ld01hcC5pc0ZyZWUoKSk7
Ci0gICAgbmV3TWFwLmZpbGUtPmNsb3NlKCk7Ci0gICAgbV9wb29sLmFwcGVuZChuZXdNYXApOwot
ICAgIHJldHVybiAmbV9wb29sLmxhc3QoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNmFmOGMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkg
b2YgU3plZ2VkCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTWFwcGVkTWVtb3J5UG9vbF9oCi0jZGVmaW5l
IE1hcHBlZE1lbW9yeVBvb2xfaAotCi0jaW5jbHVkZSA8UUZpbGU+Ci0jaW5jbHVkZSA8UU9iamVj
dD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTWFwcGVkTWVtb3J5UG9vbDsKLQotc3Ry
dWN0IE1hcHBlZE1lbW9yeSB7Ci0KLSAgICBRU3RyaW5nIG1hcHBlZEZpbGVOYW1lKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChmaWxlKTsKLSAgICAgICAgQVNTRVJUKG1hcHBlZEJ5dGVz
KTsKLSAgICAgICAgcmV0dXJuIGZpbGVOYW1lOwotICAgIH0KLQotICAgIHZvaWQgbWFya0ZyZWUo
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1hcHBlZEJ5dGVzKTsKLSAgICAgICAgZGF0YVB0ci0+
aXNGcmVlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB1Y2hhciogZGF0YSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQobWFwcGVkQnl0ZXMpOwotICAgICAgICByZXR1cm4gZGF0YVB0ci0+Ynl0
ZXM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBNYXBwZWRNZW1vcnlQb29s
OwotCi0gICAgTWFwcGVkTWVtb3J5KCkKLSAgICAgICAgOiBmaWxlKDApCi0gICAgICAgICwgbWFw
cGVkQnl0ZXMoMCkKLSAgICAgICAgLCBkYXRhU2l6ZSgwKQotICAgIHsKLSAgICB9Ci0KLSAgICB2
b2lkIG1hcmtVc2VkKCkgeyBkYXRhUHRyLT5pc0ZyZWUgPSBmYWxzZTsgfQotCi0gICAgc2l6ZV90
IG1hcFNpemUoKSBjb25zdCB7IHJldHVybiBkYXRhU2l6ZSArIHNpemVvZihEYXRhKTsgfQotICAg
IGJvb2wgaXNGcmVlKCkgY29uc3QgeyByZXR1cm4gZGF0YVB0ci0+aXNGcmVlOyB9Ci0KLSAgICBz
dHJ1Y3QgRGF0YSB7Ci0gICAgICAgIHVpbnQzMl90IGlzRnJlZTsgLy8ga2VlcCBieXRlcyBhbGln
bmVkCi0gICAgICAgIHVjaGFyIGJ5dGVzW107Ci0gICAgfTsKLQotICAgIFFGaWxlKiBmaWxlOwot
ICAgIFFTdHJpbmcgZmlsZU5hbWU7Ci0gICAgdW5pb24gewotICAgICAgICB1Y2hhciogbWFwcGVk
Qnl0ZXM7Ci0gICAgICAgIERhdGEqIGRhdGFQdHI7Ci0gICAgfTsKLSAgICBzaXplX3QgZGF0YVNp
emU7Ci19OwotCi1jbGFzcyBNYXBwZWRNZW1vcnlQb29sIDogUU9iamVjdCB7Ci0gICAgUV9PQkpF
Q1QKLXB1YmxpYzoKLSAgICBzdGF0aWMgTWFwcGVkTWVtb3J5UG9vbCogaW5zdGFuY2UoKTsKLQot
ICAgIE1hcHBlZE1lbW9yeSogbWFwTWVtb3J5KHNpemVfdCBzaXplKTsKLSAgICBNYXBwZWRNZW1v
cnkqIG1hcEZpbGUoUVN0cmluZyBmaWxlTmFtZSwgc2l6ZV90IHNpemUpOwotCi1wcml2YXRlOgot
ICAgIE1hcHBlZE1lbW9yeVBvb2woKSB7IH0KLSAgICB+TWFwcGVkTWVtb3J5UG9vbCgpOwotCi0g
ICAgc3RhdGljIE1hcHBlZE1lbW9yeVBvb2wqIHRoZUluc3RhbmNlOwotCi0gICAgVmVjdG9yPE1h
cHBlZE1lbW9yeT4gbV9wb29sOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZiAvLyBNYXBwZWRNZW1vcnlQb29sX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1No
YXJlZE1lbW9yeVF0LmNwcAppbmRleCBmNWZlY2ZjLi5jOTdkNjE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCkBAIC0yOSwxMzkgKzI5LDE4MSBA
QAogCiAjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCiAjaW5jbHVkZSAiQXJndW1lbnRFbmNv
ZGVyLmgiCi0jaW5jbHVkZSAiQ2xlYW51cEhhbmRsZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxRRGlyPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j
bHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5o
PgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVk
ZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRTGF0
aW4xU3RyaW5nPgotI2luY2x1ZGUgPFFTaGFyZWRNZW1vcnk+Ci0jaW5jbHVkZSA8UVN0cmluZz4K
LSNpbmNsdWRlIDxRVXVpZD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogU2hhcmVkTWVtb3J5
OjpIYW5kbGU6OkhhbmRsZSgpCi0gICAgOiBtX2tleSgpCisgICAgOiBtX2ZpbGVEZXNjcmlwdG9y
KC0xKQogICAgICwgbV9zaXplKDApCiB7CiB9CiAKIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjp+SGFu
ZGxlKCkKIHsKKyAgICBpZiAoIWlzTnVsbCgpKQorICAgICAgICB3aGlsZSAoY2xvc2UobV9maWxl
RGVzY3JpcHRvcikgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpIHt9CiB9CiAKIGJvb2wgU2hhcmVk
TWVtb3J5OjpIYW5kbGU6OmlzTnVsbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fa2V5LmlzTnVs
bCgpOworICAgIHJldHVybiBtX2ZpbGVEZXNjcmlwdG9yID09IC0xOwogfQogCiB2b2lkIFNoYXJl
ZE1lbW9yeTo6SGFuZGxlOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVy
KSBjb25zdAogewotICAgIGVuY29kZXItPmVuY29kZVVJbnQ2NChtX3NpemUpOwotICAgIGVuY29k
ZXItPmVuY29kZShtX2tleSk7Ci0gICAgbV9rZXkgPSBTdHJpbmcoKTsKKyAgICBBU1NFUlQoIWlz
TnVsbCgpKTsKKworICAgIGVuY29kZXItPmVuY29kZShyZWxlYXNlVG9BdHRhY2htZW50KCkpOwog
fQogCiBib29sIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnRE
ZWNvZGVyKiBkZWNvZGVyLCBIYW5kbGUmIGhhbmRsZSkKIHsKICAgICBBU1NFUlRfQVJHKGhhbmRs
ZSwgIWhhbmRsZS5tX3NpemUpOwotICAgIEFTU0VSVF9BUkcoaGFuZGxlLCBoYW5kbGUubV9rZXku
aXNOdWxsKCkpOworICAgIEFTU0VSVF9BUkcoaGFuZGxlLCBoYW5kbGUuaXNOdWxsKCkpOwogCi0g
ICAgdWludDY0X3Qgc2l6ZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZVVJbnQ2NChzaXplKSkK
KyAgICBDb3JlSVBDOjpBdHRhY2htZW50IGF0dGFjaG1lbnQ7CisgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUoYXR0YWNobWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBr
ZXk7Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoa2V5KSkKLSAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaGFuZGxlLmFkb3B0RnJvbUF0dGFjaG1lbnQoYXR0YWNobWVudC5yZWxlYXNlRmlsZURl
c2NyaXB0b3IoKSwgYXR0YWNobWVudC5zaXplKCkpOworICAgIHJldHVybiB0cnVlOworfQogCi0g
ICAgaGFuZGxlLm1fc2l6ZSA9IHNpemU7Ci0gICAgaGFuZGxlLm1fa2V5ID0ga2V5OworQ29yZUlQ
Qzo6QXR0YWNobWVudCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6cmVsZWFzZVRvQXR0YWNobWVudCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpbnQgdGVtcCA9IG1fZmlsZURlc2NyaXB0b3I7CisgICAgbV9maWxlRGVzY3JpcHRvciA9IC0x
OworICAgIHJldHVybiBDb3JlSVBDOjpBdHRhY2htZW50KHRlbXAsIG1fc2l6ZSk7CiB9CiAKLXN0
YXRpYyBRU3RyaW5nIGNyZWF0ZVVuaXF1ZUtleSgpCit2b2lkIFNoYXJlZE1lbW9yeTo6SGFuZGxl
OjphZG9wdEZyb21BdHRhY2htZW50KGludCBmaWxlRGVzY3JpcHRvciwgc2l6ZV90IHNpemUpCiB7
Ci0gICAgcmV0dXJuIFFMYXRpbjFTdHJpbmcoIlFXS1NoYXJlZE1lbW9yeUtleSIpICsgUVV1aWQ6
OmNyZWF0ZVV1aWQoKS50b1N0cmluZygpOworICAgIEFTU0VSVCghbV9zaXplKTsKKyAgICBBU1NF
UlQoaXNOdWxsKCkpOworCisgICAgbV9maWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwor
ICAgIG1fc2l6ZSA9IHNpemU7CiB9CiAKIFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRN
ZW1vcnk6OmNyZWF0ZShzaXplX3Qgc2l6ZSkKIHsKLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBz
aGFyZWRNZW1vcnkoYWRvcHRSZWYobmV3IFNoYXJlZE1lbW9yeSkpOwotICAgIFFTaGFyZWRNZW1v
cnkqIGltcGwgPSBuZXcgUVNoYXJlZE1lbW9yeShjcmVhdGVVbmlxdWVLZXkoKSk7Ci0gICAgYm9v
bCBjcmVhdGVkID0gaW1wbC0+Y3JlYXRlKHNpemUpOwotICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRl
ZCwgY3JlYXRlZCk7CisgICAgUVN0cmluZyB0ZW1wTmFtZSA9IFFEaXI6OnRlbXAoKS5maWxlUGF0
aCgicXdrc2htLlhYWFhYWCIpOworICAgIFFCeXRlQXJyYXkgdGVtcE5hbWVDU1RSID0gdGVtcE5h
bWUudG9Mb2NhbDhCaXQoKTsKKyAgICBjaGFyKiB0ZW1wTmFtZUMgPSB0ZW1wTmFtZUNTVFIuZGF0
YSgpOworCisgICAgaW50IGZpbGVEZXNjcmlwdG9yOworICAgIHdoaWxlICgoZmlsZURlc2NyaXB0
b3IgPSBta29zdGVtcCh0ZW1wTmFtZUMsIE9fQ1JFQVQgfCBPX0NMT0VYRUMgfCBPX1JEV1IpKSA9
PSAtMSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICB9CiAKLSAgICBzaGFyZWRNZW1vcnktPm1faW1wbCA9IGltcGw7Ci0gICAgc2hhcmVk
TWVtb3J5LT5tX3NpemUgPSBzaXplOwotICAgIHNoYXJlZE1lbW9yeS0+bV9kYXRhID0gaW1wbC0+
ZGF0YSgpOworICAgIHdoaWxlIChmdHJ1bmNhdGUoZmlsZURlc2NyaXB0b3IsIHNpemUpID09IC0x
KSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAgd2hpbGUgKGNs
b3NlKGZpbGVEZXNjcmlwdG9yKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikge30KKyAgICAgICAg
ICAgIHVubGluayh0ZW1wTmFtZUMpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB2b2lkKiBkYXRhID0gbW1hcCgwLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9U
X1dSSVRFLCBNQVBfU0hBUkVELCBmaWxlRGVzY3JpcHRvciwgMCk7CisgICAgaWYgKGRhdGEgPT0g
TUFQX0ZBSUxFRCkgeworICAgICAgICB3aGlsZSAoY2xvc2UoZmlsZURlc2NyaXB0b3IpID09IC0x
ICYmIGVycm5vID09IEVJTlRSKSB7fQorICAgICAgICB1bmxpbmsodGVtcE5hbWVDKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQogCi0gICAgLy8gRG8gbm90IGxlYXZlIHRoZSBzaGFyZWQgbWVt
b3J5IHNlZ21lbnQgYmVoaW5kLgotICAgIENsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT5tYXJr
Rm9yQ2xlYW51cChpbXBsKTsKKyAgICB1bmxpbmsodGVtcE5hbWVDKTsKIAotICAgIHJldHVybiBz
aGFyZWRNZW1vcnkucmVsZWFzZSgpOworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IGluc3RhbmNl
ID0gYWRvcHRSZWYobmV3IFNoYXJlZE1lbW9yeSgpKTsKKyAgICBpbnN0YW5jZS0+bV9kYXRhID0g
ZGF0YTsKKyAgICBpbnN0YW5jZS0+bV9maWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwor
ICAgIGluc3RhbmNlLT5tX3NpemUgPSBzaXplOworICAgIHJldHVybiBpbnN0YW5jZS5yZWxlYXNl
KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgUVNoYXJlZE1lbW9yeTo6QWNjZXNzTW9kZSBhY2Nlc3NN
b2RlKFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbiBwcm90ZWN0aW9uKQorc3RhdGljIGlubGluZSBp
bnQgYWNjZXNzTW9kZU1NYXAoU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uIHByb3RlY3Rpb24pCiB7
CiAgICAgc3dpdGNoIChwcm90ZWN0aW9uKSB7CiAgICAgY2FzZSBTaGFyZWRNZW1vcnk6OlJlYWRP
bmx5OgotICAgICAgICByZXR1cm4gUVNoYXJlZE1lbW9yeTo6UmVhZE9ubHk7CisgICAgICAgIHJl
dHVybiBQUk9UX1JFQUQ7CiAgICAgY2FzZSBTaGFyZWRNZW1vcnk6OlJlYWRXcml0ZToKLSAgICAg
ICAgcmV0dXJuIFFTaGFyZWRNZW1vcnk6OlJlYWRXcml0ZTsKKyAgICAgICAgcmV0dXJuIFBST1Rf
UkVBRCB8IFBST1RfV1JJVEU7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIFFTaGFyZWRNZW1vcnk6OlJlYWRXcml0ZTsKKyAgICByZXR1cm4gUFJPVF9SRUFE
IHwgUFJPVF9XUklURTsKIH0KIAogUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9y
eTo6Y3JlYXRlKGNvbnN0IEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCiB7
Ci0gICAgaWYgKGhhbmRsZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJU
KCFoYW5kbGUuaXNOdWxsKCkpOwogCi0gICAgUVNoYXJlZE1lbW9yeSogaW1wbCA9IG5ldyBRU2hh
cmVkTWVtb3J5KFFTdHJpbmcoaGFuZGxlLm1fa2V5KSk7Ci0gICAgYm9vbCBhdHRhY2hlZCA9IGlt
cGwtPmF0dGFjaChhY2Nlc3NNb2RlKHByb3RlY3Rpb24pKTsKLSAgICBpZiAoIWF0dGFjaGVkKSB7
Ci0gICAgICAgIGRlbGV0ZSBpbXBsOworICAgIHZvaWQqIGRhdGEgPSBtbWFwKDAsIGhhbmRsZS5t
X3NpemUsIGFjY2Vzc01vZGVNTWFwKHByb3RlY3Rpb24pLCBNQVBfU0hBUkVELCBoYW5kbGUubV9m
aWxlRGVzY3JpcHRvciwgMCk7CisgICAgaWYgKGRhdGEgPT0gTUFQX0ZBSUxFRCkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5
KGFkb3B0UmVmKG5ldyBTaGFyZWRNZW1vcnkpKTsKLSAgICBzaGFyZWRNZW1vcnktPm1faW1wbCA9
IGltcGw7Ci0gICAgQVNTRVJUKGhhbmRsZS5tX3NpemUgPT0gaW1wbC0+c2l6ZSgpKTsKLSAgICBz
aGFyZWRNZW1vcnktPm1fc2l6ZSA9IGhhbmRsZS5tX3NpemU7Ci0gICAgc2hhcmVkTWVtb3J5LT5t
X2RhdGEgPSBpbXBsLT5kYXRhKCk7CiAKLSAgICAvLyBEbyBub3QgbGVhdmUgdGhlIHNoYXJlZCBt
ZW1vcnkgc2VnbWVudCBiZWhpbmQuCi0gICAgQ2xlYW51cEhhbmRsZXI6Omluc3RhbmNlKCktPm1h
cmtGb3JDbGVhbnVwKGltcGwpOwotCi0gICAgcmV0dXJuIHNoYXJlZE1lbW9yeS5yZWxlYXNlKCk7
CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gaW5zdGFuY2UgPSBhZG9wdFJlZihuZXcgU2hhcmVk
TWVtb3J5KCkpOworICAgIGluc3RhbmNlLT5tX2RhdGEgPSBkYXRhOworICAgIGluc3RhbmNlLT5t
X2ZpbGVEZXNjcmlwdG9yID0gaGFuZGxlLm1fZmlsZURlc2NyaXB0b3I7CisgICAgaW5zdGFuY2Ut
Pm1fc2l6ZSA9IGhhbmRsZS5tX3NpemU7CisgICAgaGFuZGxlLm1fZmlsZURlc2NyaXB0b3IgPSAt
MTsKKyAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKIFNoYXJlZE1lbW9yeTo6flNoYXJlZE1lbW9y
eSgpCiB7Ci0gICAgaWYgKENsZWFudXBIYW5kbGVyOjppbnN0YW5jZSgpLT5oYXNTdGFydGVkRGVs
ZXRpbmcoKSkKLSAgICAgICAgcmV0dXJuOworICAgIG11bm1hcChtX2RhdGEsIG1fc2l6ZSk7Cisg
ICAgd2hpbGUgKGNsb3NlKG1fZmlsZURlc2NyaXB0b3IpID09IC0xICYmIGVycm5vID09IEVJTlRS
KSB7fQorfQogCi0gICAgQ2xlYW51cEhhbmRsZXI6Omluc3RhbmNlKCktPnVubWFyayhtX2ltcGwp
OwotICAgIGRlbGV0ZSBtX2ltcGw7CitzdGF0aWMgaW5saW5lIGludCBhY2Nlc3NNb2RlRmlsZShT
aGFyZWRNZW1vcnk6OlByb3RlY3Rpb24gcHJvdGVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKHByb3Rl
Y3Rpb24pIHsKKyAgICBjYXNlIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHk6CisgICAgICAgIHJldHVy
biBPX1JET05MWTsKKyAgICBjYXNlIFNoYXJlZE1lbW9yeTo6UmVhZFdyaXRlOgorICAgICAgICBy
ZXR1cm4gT19SRFdSOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBPX1JEV1I7CiB9CiAKIGJvb2wgU2hhcmVkTWVtb3J5OjpjcmVhdGVIYW5kbGUoSGFuZGxl
JiBoYW5kbGUsIFByb3RlY3Rpb24gcHJvdGVjdGlvbikKIHsKLSAgICBBU1NFUlRfQVJHKGhhbmRs
ZSwgaGFuZGxlLm1fa2V5LmlzTnVsbCgpKTsKICAgICBBU1NFUlRfQVJHKGhhbmRsZSwgIWhhbmRs
ZS5tX3NpemUpOworICAgIEFTU0VSVF9BUkcoaGFuZGxlLCBoYW5kbGUuaXNOdWxsKCkpOworCisg
ICAgaW50IGR1cGxpY2F0ZWRIYW5kbGU7CisgICAgd2hpbGUgKChkdXBsaWNhdGVkSGFuZGxlID0g
ZHVwKG1fZmlsZURlc2NyaXB0b3IpKSA9PSAtMSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRUlO
VFIpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQogCi0gICAgUVN0cmluZyBrZXkgPSBtX2ltcGwt
PmtleSgpOwotICAgIGlmIChrZXkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBoYW5kbGUubV9rZXkgPSBTdHJpbmcoa2V5KTsKKyAgICB3aGlsZSAoKGZjbnRsKGR1cGxpY2F0
ZWRIYW5kbGUsIEZfU0VURkQsICBPX0NMT0VYRUMgfCBhY2Nlc3NNb2RlRmlsZShwcm90ZWN0aW9u
KSkgPT0gLTEpKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB3aGlsZSAoY2xvc2UoZHVwbGljYXRl
ZEhhbmRsZSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpIHt9CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgaGFuZGxlLm1fZmlsZURlc2NyaXB0b3IgPSBk
dXBsaWNhdGVkSGFuZGxlOwogICAgIGhhbmRsZS5tX3NpemUgPSBtX3NpemU7Ci0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvV29y
a1F1ZXVlUXQuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvV29ya1F1ZXVlUXQuY3Bw
CmluZGV4IDI3MTk4NGYuLjk5Y2U5NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL3F0L1dvcmtRdWV1ZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9X
b3JrUXVldWVRdC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxRTG9jYWxTb2NrZXQ+
CiAjaW5jbHVkZSA8UU9iamVjdD4KICNpbmNsdWRlIDxRVGhyZWFkPgorI2luY2x1ZGUgPFFQcm9j
ZXNzPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgogCkBAIC03NSwzMiArNzYsMTcgQEAgcHVibGljOgogICAgIFdvcmtJdGVtKiBtX3dvcmtJ
dGVtOwogfTsKIAotdm9pZCBXb3JrUXVldWU6OmNvbm5lY3RTaWduYWwoUU9iamVjdCogbywgY29u
c3QgY2hhciogc2lnbmFsLCBQYXNzT3duUHRyPFdvcmtJdGVtPiB3b3JrSXRlbSkKLXsKLSAgICBX
b3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQo
dGhpcywgbywgc2lnbmFsLCB3b3JrSXRlbS5sZWFrUHRyKCkpOwotICAgIGl0ZW1RdC0+bW92ZVRv
VGhyZWFkKG1fd29ya1RocmVhZCk7Ci0gICAgbV9zaWduYWxMaXN0ZW5lcnMuYWRkKG8sIGl0ZW1R
dCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNjb25uZWN0U2lnbmFsKFFPYmplY3QqIG8sIGNv
bnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgSGFzaE1hcDxRT2JqZWN0KiwgV29ya0l0ZW1RdCo+Ojpp
dGVyYXRvciBpdCA9IG1fc2lnbmFsTGlzdGVuZXJzLmZpbmQobyk7Ci0gICAgZm9yICg7IGl0ICE9
IG1fc2lnbmFsTGlzdGVuZXJzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChzdHJjbXAoaXQt
PnNlY29uZC0+bV9zaWduYWwsIG5hbWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGRlbGV0ZSBpdC0+c2Vjb25kOwotICAgICAgICBtX3NpZ25hbExpc3RlbmVycy5yZW1vdmUoaXQp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIFdvcmtRdWV1ZTo6bW92ZVNvY2tl
dFRvV29ya1RocmVhZChRTG9jYWxTb2NrZXQqIHNvY2tldCkKK1FTb2NrZXROb3RpZmllciogV29y
a1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgc29ja2V0RGVzY3JpcHRvciwg
UVNvY2tldE5vdGlmaWVyOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8V29ya0l0ZW0+IHdvcmtJdGVt
KQogewogICAgIEFTU0VSVChtX3dvcmtUaHJlYWQpOwotICAgIEFTU0VSVChzb2NrZXQpOwogCi0g
ICAgc29ja2V0LT5zZXRQYXJlbnQoMCk7Ci0gICAgc29ja2V0LT5tb3ZlVG9UaHJlYWQobV93b3Jr
VGhyZWFkKTsKKyAgICBRU29ja2V0Tm90aWZpZXIqIG5vdGlmaWVyID0gbmV3IFFTb2NrZXROb3Rp
Zmllcihzb2NrZXREZXNjcmlwdG9yLCB0eXBlLCAwKTsKKyAgICBub3RpZmllci0+c2V0RW5hYmxl
ZChmYWxzZSk7CisgICAgbm90aWZpZXItPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOworICAg
IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1R
dCh0aGlzLCBub3RpZmllciwgU0lHTkFMKGFjdGl2YXRlZChpbnQpKSwgd29ya0l0ZW0ubGVha1B0
cigpKTsKKyAgICBpdGVtUXQtPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOworICAgIG5vdGlm
aWVyLT5zZXRFbmFibGVkKHRydWUpOworICAgIHJldHVybiBub3RpZmllcjsKIH0KIAogdm9pZCBX
b3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKikKQEAgLTEyOSw0ICsxMTUs
MTAgQEAgdm9pZCBXb3JrUXVldWU6OnNjaGVkdWxlV29ya0FmdGVyRGVsYXkoUGFzc093blB0cjxX
b3JrSXRlbT4sIGRvdWJsZSkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIFdvcmtR
dWV1ZTo6c2NoZWR1bGVXb3JrT25UZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vzc0lk
ZW50aWZpZXIgcHJvY2VzcywgUGFzc093blB0cjxXb3JrSXRlbT4gd29ya0l0ZW0pCit7CisgICAg
V29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRlbVF0
KHRoaXMsIHByb2Nlc3MsIFNJR05BTChmaW5pc2hlZChpbnQsIFFQcm9jZXNzOjpFeGl0U3RhdHVz
KSksIHdvcmtJdGVtLmxlYWtQdHIoKSk7CisgICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3Jr
VGhyZWFkKTsKK30KKwogI2luY2x1ZGUgIldvcmtRdWV1ZVF0Lm1vYyIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvcXQvVXBkYXRlQ2h1bmsuY3BwCmluZGV4IDRkOGU2MmQuLjJmOWJlNDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNwcApAQCAtMjksNyArMjksNiBAQAogCiAj
aW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCiAjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgi
Ci0jaW5jbHVkZSAiTWFwcGVkTWVtb3J5UG9vbC5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVu
dENvZGVycy5oIgogI2luY2x1ZGUgPFFJT0RldmljZT4KICNpbmNsdWRlIDxRSW1hZ2U+CkBAIC00
MywyOCArNDIsMzUgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBVcGRhdGVDaHVuazo6VXBkYXRlQ2h1bmsoKQotICAgIDogbV9tYXBwZWRNZW1vcnkoMCkKIHsK
IH0KIAogVXBkYXRlQ2h1bms6OlVwZGF0ZUNodW5rKGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAg
OiBtX3JlY3QocmVjdCkKLSAgICAsIG1fbWFwcGVkTWVtb3J5KE1hcHBlZE1lbW9yeVBvb2w6Omlu
c3RhbmNlKCktPm1hcE1lbW9yeShzaXplKCkpKQorICAgICwgbV9zaGFyZWRNZW1vcnkoU2hhcmVk
TWVtb3J5OjpjcmVhdGUoc2l6ZSgpKSkKIHsKIH0KIAogVXBkYXRlQ2h1bms6On5VcGRhdGVDaHVu
aygpCiB7Ci0gICAgaWYgKG1fbWFwcGVkTWVtb3J5KQotICAgICAgICBtX21hcHBlZE1lbW9yeS0+
bWFya0ZyZWUoKTsKIH0KIAogdm9pZCBVcGRhdGVDaHVuazo6ZW5jb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyLT5lbmNvZGUobV9yZWN0
KTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoU3RyaW5nKG1fbWFwcGVkTWVtb3J5LT5tYXBwZWRGaWxl
TmFtZSgpKSk7CisgICAgaWYgKCFtX3NoYXJlZE1lbW9yeSkgeworICAgICAgICBlbmNvZGVyLT5l
bmNvZGUoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU2hhcmVkTWVtb3J5
OjpIYW5kbGUgaGFuZGxlOworICAgIGlmIChtX3NoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGhh
bmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSkpIHsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2Rl
KHRydWUpOworICAgICAgICBlbmNvZGVyLT5lbmNvZGUoaGFuZGxlKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW5jb2Rlci0+ZW5jb2RlKGZhbHNlKTsKIAotICAgIG1fbWFwcGVkTWVtb3J5ID0gMDsK
KyAgICBtX3NoYXJlZE1lbW9yeSA9IDA7CiB9CiAKIGJvb2wgVXBkYXRlQ2h1bms6OmRlY29kZShD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFVwZGF0ZUNodW5rJiBjaHVuaykKQEAg
LTc0LDE2ICs4MCwyMyBAQCBib29sIFVwZGF0ZUNodW5rOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKiBkZWNvZGVyLCBVcGRhdGVDaHVuayYgY2h1bmspCiAgICAgSW50UmVjdCByZWN0
OwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJlY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CisKICAgICBjaHVuay5tX3JlY3QgPSByZWN0OwogCi0gICAgaWYgKGNodW5rLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7IC8vIFN1Y2Nlc3NmdWxseSBkZWNvZGVkIGVtcHR5IGNodW5r
LgorICAgIGJvb2wgaGFzU2hhcmVkTWVtb3J5OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhh
c1NoYXJlZE1lbW9yeSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBmaWxl
TmFtZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZShmaWxlTmFtZSkpCisgICAgaWYgKCFoYXNT
aGFyZWRNZW1vcnkpIHsKKyAgICAgICAgY2h1bmsubV9zaGFyZWRNZW1vcnkgPSAwOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7
CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFuZGxlKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgY2h1bmsubV9tYXBwZWRNZW1vcnkgPSBNYXBwZWRNZW1vcnlQb29sOjppbnN0YW5j
ZSgpLT5tYXBGaWxlKGZpbGVOYW1lLCBjaHVuay5zaXplKCkpOworICAgIGNodW5rLm1fc2hhcmVk
TWVtb3J5ID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRP
bmx5KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTAxLDcgKzExNCwxMCBAQCBzaXplX3Qg
VXBkYXRlQ2h1bms6OnNpemUoKSBjb25zdAogCiBRSW1hZ2UgVXBkYXRlQ2h1bms6OmNyZWF0ZUlt
YWdlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9tYXBwZWRNZW1vcnkpOworICAgIEFTU0VSVCht
X3NoYXJlZE1lbW9yeSk7CisgICAgaWYgKCFtX3NoYXJlZE1lbW9yeSkKKyAgICAgICAgcmV0dXJu
IFFJbWFnZSgpOworCiAgICAgUUltYWdlOjpGb3JtYXQgZm9ybWF0OwogICAgIGludCBicHA7CiAg
ICAgaWYgKFFQaXhtYXA6OmRlZmF1bHREZXB0aCgpID09IDE2KSB7CkBAIC0xMTIsNyArMTI4LDcg
QEAgUUltYWdlIFVwZGF0ZUNodW5rOjpjcmVhdGVJbWFnZSgpIGNvbnN0CiAgICAgICAgIGJwcCA9
IDQ7CiAgICAgfQogCi0gICAgcmV0dXJuIFFJbWFnZShtX21hcHBlZE1lbW9yeS0+ZGF0YSgpLCBt
X3JlY3Qud2lkdGgoKSwgbV9yZWN0LmhlaWdodCgpLCAobV9yZWN0LndpZHRoKCkgKiBicHAgKyAz
KSAmIH4weDMsIGZvcm1hdCk7CisgICAgcmV0dXJuIFFJbWFnZShyZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGNoYXIqPihtX3NoYXJlZE1lbW9yeS0+ZGF0YSgpKSwgbV9yZWN0LndpZHRoKCksIG1f
cmVjdC5oZWlnaHQoKSwgKG1fcmVjdC53aWR0aCgpICogYnBwICsgMykgJiB+MHgzLCBmb3JtYXQp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9xdC9VcGRhdGVDaHVuay5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1VwZGF0
ZUNodW5rLmgKaW5kZXggZjUwNmJhNy4uNjY0MDU2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0
L1VwZGF0ZUNodW5rLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgPFFJbWFnZT4KICNp
bmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKIAog
bmFtZXNwYWNlIENvcmVJUEMgewogY2xhc3MgQXJndW1lbnRFbmNvZGVyOwpAQCAtMzcsOCArMzgs
NiBAQCBjbGFzcyBBcmd1bWVudERlY29kZXI7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFz
cyBNYXBwZWRNZW1vcnk7Ci0KIGNsYXNzIFVwZGF0ZUNodW5rIHsKIHB1YmxpYzoKICAgICBVcGRh
dGVDaHVuaygpOwpAQCAtNTgsNyArNTcsNyBAQCBwcml2YXRlOgogCiAgICAgV2ViQ29yZTo6SW50
UmVjdCBtX3JlY3Q7CiAKLSAgICBtdXRhYmxlIE1hcHBlZE1lbW9yeSogbV9tYXBwZWRNZW1vcnk7
CisgICAgbXV0YWJsZSBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtX3NoYXJlZE1lbW9yeTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oCmluZGV4IDMxZWZkNGQuLjc5ZDEyNTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVy
LmgKQEAgLTcyLDExICs3Miw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIGdldFByb2Nl
c3NUeXBlRnJvbVN0cmluZyhjb25zdCBjaGFyKiwgUHJvY2Vzc1R5cGUmKTsKIAotI2lmIFBMQVRG
T1JNKFFUKQotICAgIGZyaWVuZCBjbGFzcyBQcm9jZXNzTGF1bmNoZXJIZWxwZXI7Ci0gICAgc3Rh
dGljIFFMb2NhbFNvY2tldCogdGFrZVBlbmRpbmdDb25uZWN0aW9uKCk7Ci0jZW5kaWYKLQogcHJp
dmF0ZToKICAgICBQcm9jZXNzTGF1bmNoZXIoQ2xpZW50KiwgY29uc3QgTGF1bmNoT3B0aW9ucyYg
bGF1bmNoT3B0aW9ucyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9M
YXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCmluZGV4IDdkZmY4OTQuLjdjMTMw
OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9j
ZXNzTGF1bmNoZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVy
L3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcApAQCAtMjcsMTcgKzI3LDkgQEAKICNpbmNsdWRlICJQ
cm9jZXNzTGF1bmNoZXIuaCIKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJD
bGVhbnVwSGFuZGxlci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAi
UnVuTG9vcC5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRlIDxydW50aW1lL0lu
aXRpYWxpemVUaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQogI2luY2x1ZGUgPFFB
cHBsaWNhdGlvbj4KICNpbmNsdWRlIDxRRGVidWc+CiAjaW5jbHVkZSA8UUZpbGU+CkBAIC00NSw1
MiArMzcsMjcgQEAKICNpbmNsdWRlIDxRTWV0YVR5cGU+CiAjaW5jbHVkZSA8UVByb2Nlc3M+CiAj
aW5jbHVkZSA8UVN0cmluZz4KLQogI2luY2x1ZGUgPFF0Q29yZS9xZ2xvYmFsLmg+Ci0KKyNpbmNs
dWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8cnVudGltZS9Jbml0
aWFsaXplVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHN5cy9yZXNv
dXJjZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
I2lmIGRlZmluZWQgUV9PU19VTklYCisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjaW5jbHVkZSA8
c2lnbmFsLmg+CisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi1jbGFzcyBQcm9jZXNzTGF1bmNoZXJIZWxwZXIgOiBwdWJsaWMgUU9iamVj
dCB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICB+UHJvY2Vzc0xhdW5jaGVySGVscGVyKCk7
Ci0gICAgdm9pZCBsYXVuY2goV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXIqKTsKLSAgICBRTG9jYWxT
b2NrZXQqIHRha2VQZW5kaW5nQ29ubmVjdGlvbigpOwotICAgIHN0YXRpYyBQcm9jZXNzTGF1bmNo
ZXJIZWxwZXIqIGluc3RhbmNlKCk7Ci0KLSAgICBjb25zdCBRU3RyaW5nIHNlcnZlck5hbWUoKSBj
b25zdCB7IHJldHVybiBtX3NlcnZlci5zZXJ2ZXJOYW1lKCk7IH0KLQotcHJpdmF0ZToKLSAgICBQ
cm9jZXNzTGF1bmNoZXJIZWxwZXIoKTsKLSAgICBRTG9jYWxTZXJ2ZXIgbV9zZXJ2ZXI7Ci0gICAg
UUxpc3Q8V29ya0l0ZW0qPiBtX2l0ZW1zOwotCi0gICAgUV9TTE9UIHZvaWQgbmV3Q29ubmVjdGlv
bigpOwotfTsKLQotUV9HTE9CQUxfU1RBVElDKFdURjo6SGFzaFNldDxRUHJvY2Vzcyo+LCBwcm9j
ZXNzZXMpOwotCi1zdGF0aWMgdm9pZCBjbGVhbnVwQXRFeGl0KCkKLXsKLSAgICAvLyBUZXJtaW5h
dGUgb3VyIHdlYiBwcm9jZXNzKGVzKS4KLSAgICBXVEY6Okhhc2hTZXQ8UVByb2Nlc3MqPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gcHJvY2Vzc2VzKCktPmVuZCgpOwotICAgIGZvciAoV1RGOjpIYXNo
U2V0PFFQcm9jZXNzKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcHJvY2Vzc2VzKCktPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBRUHJvY2VzcyogcHJvY2VzcyA9ICppdDsKLSAg
ICAgICAgcHJvY2Vzcy0+ZGlzY29ubmVjdChwcm9jZXNzKTsKLSAgICAgICAgcHJvY2Vzcy0+dGVy
bWluYXRlKCk7Ci0gICAgICAgIGlmICghcHJvY2Vzcy0+d2FpdEZvckZpbmlzaGVkKDIwMCkpCi0g
ICAgICAgICAgICBwcm9jZXNzLT5raWxsKCk7Ci0gICAgfQotCi0gICAgLy8gRG8gbm90IGxlYXZl
IHRoZSBzb2NrZXQgZmlsZSBiZWhpbmQuCi0gICAgUUxvY2FsU2VydmVyOjpyZW1vdmVTZXJ2ZXIo
UHJvY2Vzc0xhdW5jaGVySGVscGVyOjppbnN0YW5jZSgpLT5zZXJ2ZXJOYW1lKCkpOwotfQotCiBj
bGFzcyBRdFdlYlByb2Nlc3MgOiBwdWJsaWMgUVByb2Nlc3MKIHsKICAgICBRX09CSkVDVApAQCAt
OTgsMzIgKzY1LDIwIEBAIHB1YmxpYzoKICAgICBRdFdlYlByb2Nlc3MoUU9iamVjdCogcGFyZW50
ID0gMCkKICAgICAgICAgOiBRUHJvY2VzcyhwYXJlbnQpCiAgICAgewotICAgICAgICBzdGF0aWMg
Ym9vbCBpc1JlZ2lzdGVyZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFpc1JlZ2lzdGVyZWQpIHsK
LSAgICAgICAgICAgIHFSZWdpc3Rlck1ldGFUeXBlPFFQcm9jZXNzOjpQcm9jZXNzU3RhdGU+KCJR
UHJvY2Vzczo6UHJvY2Vzc1N0YXRlIik7Ci0gICAgICAgICAgICBpc1JlZ2lzdGVyZWQgPSB0cnVl
OwotICAgICAgICB9Ci0KLSAgICAgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoc3RhdGVDaGFuZ2Vk
KFFQcm9jZXNzOjpQcm9jZXNzU3RhdGUpKSwgdGhpcywgU0xPVChwcm9jZXNzU3RhdGVDaGFuZ2Vk
KFFQcm9jZXNzOjpQcm9jZXNzU3RhdGUpKSk7CiAgICAgfQogCi1wcml2YXRlIHNsb3RzOgotICAg
IHZvaWQgcHJvY2Vzc1N0YXRlQ2hhbmdlZChRUHJvY2Vzczo6UHJvY2Vzc1N0YXRlIHN0YXRlKTsK
K3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgc2V0dXBDaGlsZFByb2Nlc3MoKTsKIH07CiAK
LXZvaWQgUXRXZWJQcm9jZXNzOjpwcm9jZXNzU3RhdGVDaGFuZ2VkKFFQcm9jZXNzOjpQcm9jZXNz
U3RhdGUgc3RhdGUpCit2b2lkIFF0V2ViUHJvY2Vzczo6c2V0dXBDaGlsZFByb2Nlc3MoKQogewot
ICAgIFFQcm9jZXNzKiBwcm9jZXNzID0gcW9iamVjdF9jYXN0PFFQcm9jZXNzKj4oc2VuZGVyKCkp
OwotICAgIGlmICghcHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHN0YXRlID09
IFFQcm9jZXNzOjpSdW5uaW5nKQotICAgICAgICBwcm9jZXNzZXMoKS0+YWRkKHByb2Nlc3MpOwot
ICAgIGVsc2UgaWYgKHN0YXRlID09IFFQcm9jZXNzOjpOb3RSdW5uaW5nKQotICAgICAgICBwcm9j
ZXNzZXMoKS0+cmVtb3ZlKHByb2Nlc3MpOworI2lmIGRlZmluZWQgUV9PU19VTklYCisgICAgcHJj
dGwoUFJfU0VUX1BERUFUSFNJRywgU0lHS0lMTCk7CisjZW5kaWYKIH0KIAotdm9pZCBQcm9jZXNz
TGF1bmNoZXJIZWxwZXI6OmxhdW5jaChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlciogbGF1bmNoZXIp
Cit2b2lkIFByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2VzcygpCiB7CiAgICAgUVN0cmluZyBh
cHBsaWNhdGlvblBhdGggPSAiJTEgJTIiOwogCkBAIC0xMzMsMTIgKzg4LDM4IEBAIHZvaWQgUHJv
Y2Vzc0xhdW5jaGVySGVscGVyOjpsYXVuY2goV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXIqIGxhdW5j
aGVyKQogICAgICAgICBhcHBsaWNhdGlvblBhdGggPSBhcHBsaWNhdGlvblBhdGguYXJnKCJRdFdl
YlByb2Nlc3MiKTsKICAgICB9CiAKLSAgICBRU3RyaW5nIHByb2dyYW0oYXBwbGljYXRpb25QYXRo
LmFyZyhtX3NlcnZlci5zZXJ2ZXJOYW1lKCkpKTsKKyAgICBpbnQgc29ja2V0c1syXTsKKyAgICBp
ZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX0RHUkFNLCAwLCBzb2NrZXRzKSA9PSAtMSkgewor
ICAgICAgICBxRGVidWcoKSA8PCAiQ3JlYXRpb24gb2Ygc29ja2V0IGZhaWxlZCB3aXRoIGVycm5v
OiIgPDwgZXJybm87CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gRG9uJ3QgZXhwb3NlIHVpIHNvY2tldCB0byB3ZWIgcHJvY2Vz
cworICAgIHdoaWxlIChmY250bChzb2NrZXRzWzFdLCBGX1NFVEZELCBGRF9DTE9FWEVDID09IC0x
KSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgd2hpbGUgKGNsb3NlKHNvY2tldHNbMF0pID09IC0x
ICYmIGVycm5vID09IEVJTlRSKSB7fQorICAgICAgICAgICAgd2hpbGUgKGNsb3NlKHNvY2tldHNb
MV0pID09IC0xICYmIGVycm5vID09IEVJTlRSKSB7fQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgUVN0cmluZyBwcm9ncmFtKGFwcGxpY2F0aW9uUGF0aC5hcmco
c29ja2V0c1swXSkpOwogCiAgICAgUVByb2Nlc3MqIHdlYlByb2Nlc3MgPSBuZXcgUXRXZWJQcm9j
ZXNzKCk7CiAgICAgd2ViUHJvY2Vzcy0+c2V0UHJvY2Vzc0NoYW5uZWxNb2RlKFFQcm9jZXNzOjpG
b3J3YXJkZWRDaGFubmVscyk7CiAgICAgd2ViUHJvY2Vzcy0+c3RhcnQocHJvZ3JhbSk7CiAKKyAg
ICAvLyBEb24ndCBleHBvc2Ugd2ViIHNvY2tldCB0byBwb3NzaWJsZSBmdXR1cmUgd2ViIHByb2Nl
c3NlcworICAgIHdoaWxlIChmY250bChzb2NrZXRzWzBdLCBGX1NFVEZELCBGRF9DTE9FWEVDKSA9
PSAtMSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgZGVsZXRlIHdlYlByb2Nlc3M7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoIXdlYlByb2Nlc3MtPndh
aXRGb3JTdGFydGVkKCkpIHsKICAgICAgICAgcURlYnVnKCkgPDwgIkZhaWxlZCB0byBzdGFydCIg
PDwgcHJvZ3JhbTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDgsNTUgKzEy
OSw3IEBAIHZvaWQgUHJvY2Vzc0xhdW5jaGVySGVscGVyOjpsYXVuY2goV2ViS2l0OjpQcm9jZXNz
TGF1bmNoZXIqIGxhdW5jaGVyKQogCiAgICAgc2V0cHJpb3JpdHkoUFJJT19QUk9DRVNTLCB3ZWJQ
cm9jZXNzLT5waWQoKSwgMTApOwogCi0gICAgbV9pdGVtcy5hcHBlbmQoV29ya0l0ZW06OmNyZWF0
ZShsYXVuY2hlciwgJldlYktpdDo6UHJvY2Vzc0xhdW5jaGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdQ
cm9jZXNzLCB3ZWJQcm9jZXNzLCBtX3NlcnZlci5zZXJ2ZXJOYW1lKCkpLmxlYWtQdHIoKSk7Ci19
Ci0KLVFMb2NhbFNvY2tldCogUHJvY2Vzc0xhdW5jaGVySGVscGVyOjp0YWtlUGVuZGluZ0Nvbm5l
Y3Rpb24oKQotewotICAgIHJldHVybiBtX3NlcnZlci5uZXh0UGVuZGluZ0Nvbm5lY3Rpb24oKTsK
LX0KLQotUHJvY2Vzc0xhdW5jaGVySGVscGVyOjp+UHJvY2Vzc0xhdW5jaGVySGVscGVyKCkKLXsK
LSAgICBtX3NlcnZlci5jbG9zZSgpOwotfQotCi1Qcm9jZXNzTGF1bmNoZXJIZWxwZXI6OlByb2Nl
c3NMYXVuY2hlckhlbHBlcigpCi17Ci0gICAgc3JhbmRvbSh0aW1lKDApKTsKLSAgICBpZiAoIW1f
c2VydmVyLmxpc3RlbigiUXRXZWJLaXQiICsgUVN0cmluZzo6bnVtYmVyKHJhbmRvbSgpKSkpIHsK
LSAgICAgICAgcURlYnVnKCkgPDwgIkZhaWxlZCB0byBjcmVhdGUgc2VydmVyIHNvY2tldC4iOwot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgY29ubmVjdCgmbV9zZXJ2
ZXIsIFNJR05BTChuZXdDb25uZWN0aW9uKCkpLCB0aGlzLCBTTE9UKG5ld0Nvbm5lY3Rpb24oKSkp
OwotfQotCi1Qcm9jZXNzTGF1bmNoZXJIZWxwZXIqIFByb2Nlc3NMYXVuY2hlckhlbHBlcjo6aW5z
dGFuY2UoKQotewotICAgIHN0YXRpYyBQcm9jZXNzTGF1bmNoZXJIZWxwZXIqIHJlc3VsdCA9IDA7
Ci0gICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmVzdWx0ID0gbmV3IFByb2Nlc3NMYXVuY2hl
ckhlbHBlcigpOwotCi0gICAgICAgIC8vIFRoZSBwdXJwb3NlIG9mIHRoZSBmb2xsb3dpbmcgbGlu
ZSBpcyB0byBlbnN1cmUgdGhhdCBvdXIgc3RhdGljIGlzIGluaXRpYWxpemVkIGJlZm9yZSB0aGUg
ZXhpdCBoYW5kbGVyIGlzIGluc3RhbGxlZC4KLSAgICAgICAgcHJvY2Vzc2VzKCktPmNsZWFyKCk7
Ci0KLSAgICAgICAgYXRleGl0KGNsZWFudXBBdEV4aXQpOwotICAgIH0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi12b2lkIFByb2Nlc3NMYXVuY2hlckhlbHBlcjo6bmV3Q29ubmVjdGlvbigpCi17
Ci0gICAgQVNTRVJUKCFtX2l0ZW1zLmlzRW1wdHkoKSk7Ci0KLSAgICBtX2l0ZW1zWzBdLT5leGVj
dXRlKCk7Ci0gICAgZGVsZXRlIG1faXRlbXNbMF07Ci0gICAgbV9pdGVtcy5wb3BfZnJvbnQoKTsK
LX0KLQotdm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQotewotICAgIFByb2Nl
c3NMYXVuY2hlckhlbHBlcjo6aW5zdGFuY2UoKS0+bGF1bmNoKHRoaXMpOworICAgIFJ1bkxvb3A6
Om1haW4oKS0+c2NoZWR1bGVXb3JrKFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJldlYktpdDo6UHJv
Y2Vzc0xhdW5jaGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdQcm9jZXNzLCB3ZWJQcm9jZXNzLCBzb2Nr
ZXRzWzFdKSk7CiB9CiAKIHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVQcm9jZXNzKCkK
QEAgLTIwOCwxNCArMTQxLDkgQEAgdm9pZCBQcm9jZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVByb2Nl
c3MoKQogICAgIG1fcHJvY2Vzc0lkZW50aWZpZXItPnRlcm1pbmF0ZSgpOwogfQogCi1RTG9jYWxT
b2NrZXQqIFByb2Nlc3NMYXVuY2hlcjo6dGFrZVBlbmRpbmdDb25uZWN0aW9uKCkKLXsKLSAgICBy
ZXR1cm4gUHJvY2Vzc0xhdW5jaGVySGVscGVyOjppbnN0YW5jZSgpLT50YWtlUGVuZGluZ0Nvbm5l
Y3Rpb24oKTsKLX0KLQogdm9pZCBQcm9jZXNzTGF1bmNoZXI6OnBsYXRmb3JtSW52YWxpZGF0ZSgp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9UaHJlYWRM
YXVuY2hlclF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9UaHJl
YWRMYXVuY2hlclF0LmNwcAppbmRleCA0NzFhNDI0Li4zNDQ1ODBjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJRdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExhdW5jaGVyUXQu
Y3BwCkBAIC01NCw3ICs1NCw3IEBAIHN0YXRpYyB2b2lkKiB3ZWJUaHJlYWRCb2R5KHZvaWQqIC8q
IGNvbnRleHQgKi8pCiAKICAgICAvLyBGSVhNRTogV2UgZG8gbm90IHN1cHBvcnQgdGhyZWFkZWQg
bW9kZSBmb3Igbm93LgogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5pdGlhbGl6ZSgiZm9v
IiwgUnVuTG9vcDo6Y3VycmVudCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFs
aXplKC0xLCBSdW5Mb29wOjpjdXJyZW50KCkpOwogICAgIFJ1bkxvb3A6OnJ1bigpOwogCiAgICAg
cmV0dXJuIDA7CkBAIC03MCw4ICs3MCw3IEBAIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZp
ZXIgVGhyZWFkTGF1bmNoZXI6OmNyZWF0ZVdlYlRocmVhZCgpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KIAotICAgIFFTdHJpbmcgc2VydmVySWRlbnRpZmllciA9IFFTdHJpbmc6Om51bWJlcihj
b25uZWN0aW9uSWRlbnRpZmllcik7Ci0gICAgcmV0dXJuIHNlcnZlcklkZW50aWZpZXI7CisgICAg
cmV0dXJuIGNvbm5lY3Rpb25JZGVudGlmaWVyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXggYzdl
OTM4Mi4uNmQxMTVkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHAKQEAgLTM0NCw4ICszNDQsMTAgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmRpZEZp
bmlzaExhdW5jaGluZyhDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3QKICAg
ICBtX2Nvbm5lY3Rpb24gPSBDb3JlSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVTZXJ2ZXJDb25uZWN0
aW9uKGNvbm5lY3Rpb25JZGVudGlmaWVyLCB0aGlzLCBSdW5Mb29wOjptYWluKCkpOwogI2lmIFBM
QVRGT1JNKE1BQykKICAgICBtX2Nvbm5lY3Rpb24tPnNldFNob3VsZENsb3NlQ29ubmVjdGlvbk9u
TWFjaEV4Y2VwdGlvbnMoKTsKKyNlbGlmIFBMQVRGT1JNKFFUKQorICAgIG1fY29ubmVjdGlvbi0+
c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24ocHJvY2Vzc0lkZW50
aWZpZXIoKSk7CiAjZW5kaWYKLSAgICAKKwogICAgIG1fY29ubmVjdGlvbi0+b3BlbigpOwogICAg
IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wZW5kaW5nTWVzc2FnZXMuc2l6ZSgpOyAr
K2kpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0
UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRRdC5jcHAKaW5k
ZXggNWIyY2Q4OC4uZjZiODQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1dlYkNvbnRleHRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dl
YkNvbnRleHRRdC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5o
IgorI2luY2x1ZGUgPFFQcm9jZXNzPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNDIsNiAr
NDMsNyBAQCBTdHJpbmcgV2ViQ29udGV4dDo6YXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSgpCiAK
IHZvaWQgV2ViQ29udGV4dDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzJikKIHsKKyAgICBxUmVnaXN0ZXJNZXRhVHlwZTxRUHJvY2Vzczo6
RXhpdFN0YXR1cz4oIlFQcm9jZXNzOjpFeGl0U3RhdHVzIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnBybwppbmRleCBjNDc4NjM2Li45YTg2YmM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybworKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBy
bwpAQCAtMjMyLDcgKzIzMiw2IEBAIEhFQURFUlMgKz0gXAogICAgIFBsYXRmb3JtL1NoYXJlZE1l
bW9yeS5oIFwKICAgICBQbGF0Zm9ybS9Xb3JrSXRlbS5oIFwKICAgICBQbGF0Zm9ybS9Xb3JrUXVl
dWUuaCBcCi0gICAgUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5oIFwKICAgICBTaGFyZWQv
QVBJL2MvV0tCYXNlLmggXAogICAgIFNoYXJlZC9BUEkvYy9XS0NlcnRpZmljYXRlSW5mby5oIFwK
ICAgICBTaGFyZWQvQVBJL2MvV0tDb250ZXh0TWVudUl0ZW0uaCBcCkBAIC0yOTMsNyArMjkyLDYg
QEAgSEVBREVSUyArPSBcCiAgICAgU2hhcmVkL1dlYlVSTFJlc3BvbnNlLmggXAogICAgIFNoYXJl
ZC9XZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaCBcCiAgICAgU2hhcmVkL1BsdWdpbnMvTmV0c2Nh
cGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCBcCi0gICAgU2hhcmVkL3F0L0NsZWFudXBIYW5kbGVy
LmggXAogICAgIFNoYXJlZC9xdC9QbGF0Zm9ybUNlcnRpZmljYXRlSW5mby5oIFwKICAgICBTaGFy
ZWQvcXQvVXBkYXRlQ2h1bmsuaCBcCiAgICAgU2hhcmVkL3F0L1dlYkV2ZW50RmFjdG9yeVF0Lmgg
XApAQCAtNDY0LDcgKzQ2Miw2IEBAIFNPVVJDRVMgKz0gXAogICAgIFBsYXRmb3JtL01vZHVsZS5j
cHAgXAogICAgIFBsYXRmb3JtL1J1bkxvb3AuY3BwIFwKICAgICBQbGF0Zm9ybS9Xb3JrUXVldWUu
Y3BwIFwKLSAgICBQbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcCBcCiAgICAgUGxhdGZv
cm0vcXQvTW9kdWxlUXQuY3BwIFwKICAgICBQbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwIFwKICAg
ICBQbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAgXApAQCAtNTE3LDcgKzUxNCw2IEBAIFNP
VVJDRVMgKz0gXAogICAgIFNoYXJlZC9XZWJVUkxSZXNwb25zZS5jcHAgXAogICAgIFNoYXJlZC9X
ZWJXaGVlbEV2ZW50LmNwcCBcCiAgICAgU2hhcmVkL3F0L1NoYXJlYWJsZUJpdG1hcFF0LmNwcCBc
Ci0gICAgU2hhcmVkL3F0L0NsZWFudXBIYW5kbGVyLmNwcCBcCiAgICAgU2hhcmVkL3F0L05hdGl2
ZVdlYktleWJvYXJkRXZlbnRRdC5jcHAgXAogICAgIFNoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHAg
XAogICAgIFNoYXJlZC9xdC9XZWJDb3JlQXJndW1lbnRDb2RlcnNRdC5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKaW5kZXggYmQ0
ZTM3MC4uM2UxMjJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9X
ZWJQcm9jZXNzTWFpblF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dl
YlByb2Nlc3NNYWluUXQuY3BwCkBAIC0xNjAsNyArMTYwLDE4IEBAIFFXRUJLSVRfRVhQT1JUIGlu
dCBXZWJQcm9jZXNzTWFpblF0KGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBSdW5Mb29wOjpp
bml0aWFsaXplTWFpblJ1bkxvb3AoKTsKIAogICAgIC8vIENyZWF0ZSB0aGUgY29ubmVjdGlvbi4K
LSAgICBRU3RyaW5nIGlkZW50aWZpZXIoYXBwLT5hcmd1bWVudHMoKS5zaXplKCkgPiAxID8gYXBw
LT5hcmd1bWVudHMoKS5hdCgxKSA6ICIiKTsKKyAgICBpZiAoYXBwLT5hcmd1bWVudHMoKS5zaXpl
KCkgPD0gMSkgeworICAgICAgICBxRGVidWcoKSA8PCAiRXJyb3I6IHdyb25nIG51bWJlciBvZiBh
cmd1bWVudHMuIjsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgYm9vbCB3YXNOdW1i
ZXIgPSBmYWxzZTsKKyAgICBpbnQgaWRlbnRpZmllciA9IGFwcC0+YXJndW1lbnRzKCkuYXQoMSku
dG9JbnQoJndhc051bWJlciwgMTApOworICAgIGlmICghd2FzTnVtYmVyKSB7CisgICAgICAgIHFE
ZWJ1ZygpIDw8ICJFcnJvcjogY29ubmVjdGlvbiBpZGVudGlmaWVyIHdyb25nLiI7CisgICAgICAg
IHJldHVybiAxOworICAgIH0KKwogICAgIFdlYktpdDo6V2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5p
dGlhbGl6ZShpZGVudGlmaWVyLCBSdW5Mb29wOjptYWluKCkpOwogCiAgICAgUnVuTG9vcDo6cnVu
KCk7Cg==
</data>
<flag name="review"
          id="71026"
          type_id="1"
          status="+"
          setter="kenneth"
    />
    <flag name="commit-queue"
          id="71027"
          type_id="3"
          status="-"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79899</attachid>
            <date>2011-01-24 00:09:42 -0800</date>
            <delta_ts>2011-01-24 04:58:39 -0800</delta_ts>
            <desc>4th version, fixing compiles and comments (uses AttachmentQt.cpp)</desc>
            <filename>cleanuphandler-removal-04.patch</filename>
            <type>text/plain</type>
            <size>60069</size>
            <attacher name="Kimmo Kinnunen">kimmo.t.kinnunen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAwN2Y2NDFkLi43ZjFkOTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAw
IEBACisyMDExLTAxLTE4ICBLaW1tbyBLaW5udW5lbiAgPGtpbW1vLnQua2lubnVuZW5Abm9raWEu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtR
dF0gUmVtb3ZlIENsZWFudXBIYW5kbGVyIGJ5IHBhc3NpbmcgZmlsZSBkZXNjcmlwdG9ycy4KKwor
ICAgICAgICBEZWxldGluZyBmaWxlcyBpbiBzaWduYWwgaGFuZGxlciBvZiBVSSBwcm9jZXNzIGlz
IG5vdCBhIGdvb2QgaWRlYSwKKyAgICAgICAgYmVjYXVzZSB0aGUgbWVtb3J5IHdoZXJlIGZpbGVu
YW1lcyBhcmUgc3RvcmVkIG1pZ2h0IG5vdCBiZSB2YWxpZAorICAgICAgICBhZnRlciBhIGNyYXNo
LgorCisgICAgICAgIFRvIGF2b2lkIHRoZSBuZWVkIG9mIHVzaW5nIHNpZ25hbCBoYW5kbGVycyBm
b3IgY2xlYW51cCwKKyAgICAgICAgY2hhbmdlIGZvbGxvd2luZzoKKyAgICAgICAgICAxKSBBdm9p
ZCBwYXNzaW5nIGZpbGVuYW1lcyBiZXR3ZWVuIHByb2Nlc3NlcywgcGFzcyBmZHMKKyAgICAgICAg
ICAyKSBXaGVuIG1tYXAnaW5nIGZpbGVzLCBkZWxldGUgdGhlbSBpbW1lZGlhdGVseSBhZnRlcgor
ICAgICAgICAgICAgIG9wZW5pbmcgYW5kIG1tYXAnaW5nIHRoZW0uCisgICAgICAgICAgMykgUGFz
cyBzb2NrZXRzIHdpdGggZmRzIGR1cmluZyBmb3JrK2V4ZWMgaW5zdGVhZCBvZgorICAgICAgICAg
ICAgIHBhc3NpbmcgdGhlbSB2aWEgdGhlIGZpbGVzeXN0ZW0uCisgICAgICAgICAgNCkgVXNlIG1t
YXAnZWQgZmlsZXMgZm9yIGltcGxlbWVudGF0aW9uIG9mIFNoYXJlZE1lbW9yeS4KKyAgICAgICAg
ICAgICBRU2hhcmVkTWVtb3J5IGRvZXMgbm90IHN1cHBvcnQgY2xlYW51cCBjb3JyZWN0bHkuCisK
KyAgICAgICAgQ29uc3F1ZW5jZXM6CisgICAgICAgICAgLSBNb3ZlIE1hcHBlZE1lbW9yeSB0byBT
aGFyZWRNZW1vcnksIG1ha2UgVXBkYXRlQ2h1bmsgdXNlIHRoaXMuCisgICAgICAgICAgLSBJbXBs
ZW1lbnQgQ29yZUlQQzo6QXR0YWNobWVudCB1c2luZyBtbWFwZWQgZmlsZXMuCisgICAgICAgICAg
LSBTZW5kIG1lc3NhZ2VzIHVzaW5nIGRhdGFncmFtIHNvY2tldC4gVGhpcyBzb2x1dGlvbiB3b3Jr
cworICAgICAgICAgICAgc2ltaWxpYXJseSB0byBNYWNoIHBvcnRzIG9uIE1hYy4KKyAgICAgICAg
ICAtIFNlbmQgYmlnIG1lc3NhZ2VzIG91dC1vZi1saW5lIGFuZCB0aHVzIGF2b2lkIGluY3JlYXNp
bmcKKyAgICAgICAgICAgIHRoZSByZWNlaXZlIGJ1ZmZlci4KKyAgICAgICAgICAtIFJlbW92ZSBN
ZW1vcnlNYXBwZWRQb29sIGFuZCByZWx5IG9uIGxpYmMva2VybmVsIGNhY2hpbmcKKyAgICAgICAg
ICAgIG9mIG1tYXBwZWQgYXJlYXMuCisgICAgICAgICAgLSBVbm1hcCBtZW1vcnkgYXJlYXMgYWZ0
ZXIgdXNlLgorICAgICAgICAgIC0gV2hlbiBVSSBwcm9jZXNzIGNyYXNoZXMsIGtpbGwgdGhlIHdl
YiBwcm9jZXNzIHVzaW5nIFNJR0tJTEwuCisgICAgICAgICAgICBUaGlzIGlzIHBvc3NpYmxlIGFn
YWluIGJlY2F1c2UgY2xlYW51cCBoYW5kbGVyIGlzIG5vdCBuZWVkZWQuCisKKyAgICAgICAgW1dL
Ml1bUXRdIE11bHRpcGxlIHByb2JsZW1zIHdpdGggTWVtb3J5TWFwcGVkUG9vbAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE5ODQKKworICAgICAgICAq
IFBsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVudC5jcHA6CisgICAgICAgIChDb3JlSVBDOjpBdHRh
Y2htZW50OjpBdHRhY2htZW50KToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1l
bnQuaDoKKyAgICAgICAgKENvcmVJUEM6OkF0dGFjaG1lbnQ6OnNpemUpOgorICAgICAgICAoQ29y
ZUlQQzo6QXR0YWNobWVudDo6cmVsZWFzZUZpbGVEZXNjcmlwdG9yKToKKyAgICAgICAgKENvcmVJ
UEM6OkF0dGFjaG1lbnQ6OmZpbGVEZXNjcmlwdG9yKToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3Jl
SVBDL0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rp
b25RdC5jcHA6CisgICAgICAgIChDb3JlSVBDOjpNZXNzYWdlSW5mbzo6TWVzc2FnZUluZm8pOgor
ICAgICAgICAoQ29yZUlQQzo6TWVzc2FnZUluZm86OnNldE1lc3NhZ2VCb2R5T09MKToKKyAgICAg
ICAgKENvcmVJUEM6Ok1lc3NhZ2VJbmZvOjppc01lc3NhZ2VCb2R5T09MKToKKyAgICAgICAgKENv
cmVJUEM6Ok1lc3NhZ2VJbmZvOjpib2R5U2l6ZSk6CisgICAgICAgIChDb3JlSVBDOjpNZXNzYWdl
SW5mbzo6bWVzc2FnZUlEKToKKyAgICAgICAgKENvcmVJUEM6Ok1lc3NhZ2VJbmZvOjphdHRhY2ht
ZW50Q291bnQpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1Jbml0aWFs
aXplKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnBsYXRmb3JtSW52YWxpZGF0ZSk6
CisgICAgICAgIChDb3JlSVBDOjpTb2NrZXROb3RpZmllckRpc2FibGVHdWFyZDo6U29ja2V0Tm90
aWZpZXJEaXNhYmxlR3VhcmQpOgorICAgICAgICAoQ29yZUlQQzo6U29ja2V0Tm90aWZpZXJEaXNh
YmxlR3VhcmQ6On5Tb2NrZXROb3RpZmllckRpc2FibGVHdWFyZCk6CisgICAgICAgIChDb3JlSVBD
OjpDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVyKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5l
Y3Rpb246Om9wZW4pOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1DYW5T
ZW5kT3V0Z29pbmdNZXNzYWdlcyk6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpzZW5k
T3V0Z29pbmdNZXNzYWdlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaDoKKyAg
ICAgICAgKiBQbGF0Zm9ybS9Xb3JrUXVldWUuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9xdC9NYXBw
ZWRNZW1vcnlQb29sLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbGF0Zm9ybS9xdC9NYXBwZWRN
ZW1vcnlQb29sLmg6IFJlbW92ZWQuCisgICAgICAgICogUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5
UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6SGFuZGxlKToK
KyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6On5IYW5kbGUpOgorICAgICAg
ICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6aXNOdWxsKToKKyAgICAgICAgKFdlYktp
dDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJl
ZE1lbW9yeTo6SGFuZGxlOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6
OkhhbmRsZTo6cmVsZWFzZVRvQXR0YWNobWVudCk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1l
bW9yeTo6SGFuZGxlOjphZG9wdEZyb21BdHRhY2htZW50KToKKyAgICAgICAgKFdlYktpdDo6U2hh
cmVkTWVtb3J5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjphY2Nlc3NNb2RlTU1hcCk6Cisg
ICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6flNoYXJlZE1lbW9yeSk6CisgICAgICAgIChX
ZWJLaXQ6OmFjY2Vzc01vZGVGaWxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5Ojpj
cmVhdGVIYW5kbGUpOgorICAgICAgICAqIFBsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcDoKKyAg
ICAgICAgKFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAq
IFNoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5r
OjpVcGRhdGVDaHVuayk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5rOjp+VXBkYXRlQ2h1
bmspOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVDaHVuazo6ZW5jb2RlKToKKyAgICAgICAgKFdl
YktpdDo6VXBkYXRlQ2h1bms6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5r
OjpjcmVhdGVJbWFnZSk6CisgICAgICAgICogU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlF0V2ViUHJvY2Vzczo6UXRXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6UXRXZWJQ
cm9jZXNzOjpzZXR1cENoaWxkUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVu
Y2hlcjo6bGF1bmNoUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6
cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhy
ZWFkTGF1bmNoZXJRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OndlYlRocmVhZEJvZHkpOgorICAg
ICAgICAoV2ViS2l0OjpUaHJlYWRMYXVuY2hlcjo6Y3JlYXRlV2ViVGhyZWFkKToKKyAgICAgICAg
KiBXZWJLaXQyLnBybzoKKyAgICAgICAgKiBXZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpblF0KToKKwogMjAxMS0wMS0yMyAg
RGFtaWFuIEthbGV0YSAgPGRrYWxldGFAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEtldmluIERlY2tlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvQXJndW1lbnREZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMv
QXJndW1lbnREZWNvZGVyLmNwcAppbmRleCAzMzZmNzJmLi5iNzA1NWY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudERlY29kZXIuY3BwCkBAIC00
Niw3ICs0NiwxMyBAQCBBcmd1bWVudERlY29kZXI6On5Bcmd1bWVudERlY29kZXIoKQogewogICAg
IEFTU0VSVChtX2J1ZmZlcik7CiAgICAgZmFzdEZyZWUobV9idWZmZXIpOworI2lmICFQTEFURk9S
TShRVCkKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkaXNwb3NlIG9mIHRoZSBtYWNoIHBvcnRz
IGluIGNhc2VzIG9mIGZhaWx1cmUuCisjZWxzZQorICAgIERlcXVlPEF0dGFjaG1lbnQ+OjppdGVy
YXRvciBlbmQgPSBtX2F0dGFjaG1lbnRzLmVuZCgpOworICAgIGZvciAoRGVxdWU8QXR0YWNobWVu
dD46Oml0ZXJhdG9yIGl0ID0gbV9hdHRhY2htZW50cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
CisgICAgICAgIGl0LT5kaXNwb3NlKCk7CisjZW5kaWYKIH0KIAogdm9pZCBBcmd1bWVudERlY29k
ZXI6OmluaXRpYWxpemUoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNv
ZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVy
LmNwcAppbmRleCAxMzQwYzBhLi44NWE3Y2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudEVuY29kZXIuY3BwCkBAIC00OSw3ICs0OSwxMiBAQCBB
cmd1bWVudEVuY29kZXI6On5Bcmd1bWVudEVuY29kZXIoKQogewogICAgIGlmIChtX2J1ZmZlcikK
ICAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOworI2lmICFQTEFURk9STShRVCkKICAgICAvLyBG
SVhNRTogV2UgbmVlZCB0byBkaXNwb3NlIG9mIHRoZSBhdHRhY2htZW50cyBpbiBjYXNlcyBvZiBm
YWlsdXJlLgorI2Vsc2UKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fYXR0YWNobWVudHMuc2l6
ZSgpOyArK2kpCisgICAgICAgIG1fYXR0YWNobWVudHNbaV0uZGlzcG9zZSgpOworI2VuZGlmCiB9
CiAKIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHJvdW5kVXBUb0FsaWdubWVudChzaXplX3QgdmFsdWUs
IHVuc2lnbmVkIGFsaWdubWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvQXR0YWNobWVudC5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9B
dHRhY2htZW50LmgKaW5kZXggNTVhMDljOS4uYzA1NzcxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vQ29yZUlQQy9BdHRhY2htZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9BdHRhY2htZW50LmgKQEAgLTQwLDEyICs0MCwxNiBAQCBwdWJsaWM6
CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBNYWNoUG9ydFR5cGUsCiAgICAgICAgIE1hY2hP
T0xNZW1vcnlUeXBlCisjZWxpZiBQTEFURk9STShRVCkKKyAgICAgICAgTWFwcGVkTWVtb3J5CiAj
ZW5kaWYKICAgICB9OwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIEF0dGFjaG1lbnQobWFjaF9w
b3J0X25hbWVfdCBwb3J0LCBtYWNoX21zZ190eXBlX25hbWVfdCBkaXNwb3NpdGlvbik7CiAgICAg
QXR0YWNobWVudCh2b2lkKiBhZGRyZXNzLCBtYWNoX21zZ19zaXplX3Qgc2l6ZSwgbWFjaF9tc2df
Y29weV9vcHRpb25zX3QgY29weU9wdGlvbnMsIGJvb2wgZGVhbGxvY2F0ZSk7CisjZWxpZiBQTEFU
Rk9STShRVCkKKyAgICBBdHRhY2htZW50KGludCBmaWxlRGVzY3JpcHRvciwgc2l6ZV90KTsKICNl
bmRpZgogCiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CkBAIC02Miw2
ICs2NiwxMyBAQCBwdWJsaWM6CiAgICAgbWFjaF9tc2dfc2l6ZV90IHNpemUoKSBjb25zdCB7IEFT
U0VSVChtX3R5cGUgPT0gTWFjaE9PTE1lbW9yeVR5cGUpOyByZXR1cm4gbV9vb2xNZW1vcnkuc2l6
ZTsgfQogICAgIG1hY2hfbXNnX2NvcHlfb3B0aW9uc190IGNvcHlPcHRpb25zKCkgY29uc3QgeyBB
U1NFUlQobV90eXBlID09IE1hY2hPT0xNZW1vcnlUeXBlKTsgcmV0dXJuIG1fb29sTWVtb3J5LmNv
cHlPcHRpb25zOyB9CiAgICAgYm9vbCBkZWFsbG9jYXRlKCkgY29uc3QgeyBBU1NFUlQobV90eXBl
ID09IE1hY2hPT0xNZW1vcnlUeXBlKTsgcmV0dXJuIG1fb29sTWVtb3J5LmRlYWxsb2NhdGU7IH0K
KyNlbGlmIFBMQVRGT1JNKFFUKQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9CisKKyAgICBpbnQgcmVsZWFzZUZpbGVEZXNjcmlwdG9yKCkgeyBpbnQgdGVtcCA9IG1f
ZmlsZURlc2NyaXB0b3I7IG1fZmlsZURlc2NyaXB0b3IgPSAtMTsgcmV0dXJuIHRlbXA7IH0KKyAg
ICBpbnQgZmlsZURlc2NyaXB0b3IoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVEZXNjcmlwdG9yOyB9
CisKKyAgICB2b2lkIGRpc3Bvc2UoKTsKICNlbmRpZgogCiAgICAgdm9pZCBlbmNvZGUoQXJndW1l
bnRFbmNvZGVyKikgY29uc3Q7CkBAIC04Myw2ICs5NCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBib29sIGRlYWxsb2NhdGU7CiAgICAgICAgIH0gbV9vb2xNZW1vcnk7CiAgICAgfTsKKyNlbGlm
IFBMQVRGT1JNKFFUKQorICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yOworICAgIHNpemVfdCBtX3Np
emU7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25u
ZWN0aW9uLmgKaW5kZXggMWIwMDljZi4uNThjYjg5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgKQEAgLTQ0LDkgKzQ0LDggQEAKICNlbGlmIFBMQVRG
T1JNKFdJTikKICNpbmNsdWRlIDxzdHJpbmc+CiAjZWxpZiBQTEFURk9STShRVCkKLSNpbmNsdWRl
IDxRU3RyaW5nPgotY2xhc3MgUUxvY2FsU2VydmVyOwotY2xhc3MgUUxvY2FsU29ja2V0OworY2xh
c3MgUVNvY2tldE5vdGlmaWVyOworI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIu
aCIKICNlbmRpZgogCiBjbGFzcyBSdW5Mb29wOwpAQCAtOTgsNyArOTcsNyBAQCBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBIQU5ETEUgSWRlbnRpZmllcjsKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVTZXJ2
ZXJBbmRDbGllbnRJZGVudGlmaWVycyhJZGVudGlmaWVyJiBzZXJ2ZXJJZGVudGlmaWVyLCBJZGVu
dGlmaWVyJiBjbGllbnRJZGVudGlmaWVyKTsKICNlbGlmIFBMQVRGT1JNKFFUKQotICAgIHR5cGVk
ZWYgY29uc3QgUVN0cmluZyBJZGVudGlmaWVyOworICAgIHR5cGVkZWYgaW50IElkZW50aWZpZXI7
CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgdHlwZWRlZiBpbnQgSWRlbnRpZmllcjsKICNlbmRp
ZgpAQCAtMTA5LDYgKzEwOCw4IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2
b2lkIHNldFNob3VsZENsb3NlQ29ubmVjdGlvbk9uTWFjaEV4Y2VwdGlvbnMoKTsKKyNlbGlmIFBM
QVRGT1JNKFFUKQorICAgIHZvaWQgc2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9jZXNzVGVy
bWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyKTsKICNlbmRpZgogCiAg
ICAgYm9vbCBvcGVuKCk7CkBAIC0yODUsOCArMjg2LDggQEAgcHJpdmF0ZToKIAogICAgIFZlY3Rv
cjx1aW50OF90PiBtX3JlYWRCdWZmZXI7CiAgICAgc2l6ZV90IG1fY3VycmVudE1lc3NhZ2VTaXpl
OwotICAgIFFMb2NhbFNvY2tldCogbV9zb2NrZXQ7Ci0gICAgUVN0cmluZyBtX3NlcnZlck5hbWU7
CisgICAgUVNvY2tldE5vdGlmaWVyKiBtX3NvY2tldE5vdGlmaWVyOworICAgIGludCBtX3NvY2tl
dERlc2NyaXB0b3I7CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgdm9pZCByZWFkRXZlbnRIYW5k
bGVyKCk7CiAgICAgdm9pZCBwcm9jZXNzQ29tcGxldGVkTWVzc2FnZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9BdHRhY2htZW50UXQuY3BwIGIvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9BdHRhY2htZW50UXQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YWE3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0F0dGFjaG1lbnRRdC5jcHAKQEAgLTAs
MCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJBdHRhY2htZW50
LmgiCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJy
bm8uaD4KKyNlbmRpZgorCisKK25hbWVzcGFjZSBDb3JlSVBDIHsKKworQXR0YWNobWVudDo6QXR0
YWNobWVudChpbnQgZmlsZURlc2NyaXB0b3IsIHNpemVfdCBzaXplKQorICAgIDogbV90eXBlKE1h
cHBlZE1lbW9yeSkKKyAgICAsIG1fZmlsZURlc2NyaXB0b3IoZmlsZURlc2NyaXB0b3IpCisgICAg
LCBtX3NpemUoc2l6ZSkKK3sKKyAgICBBU1NFUlQobV9maWxlRGVzY3JpcHRvcik7CisgICAgQVNT
RVJUKG1fc2l6ZSk7Cit9CisKK3ZvaWQgQXR0YWNobWVudDo6ZGlzcG9zZSgpCit7CisgICAgaWYg
KG1fZmlsZURlc2NyaXB0b3IgIT0gLTEpCisgICAgICAgIHdoaWxlIChjbG9zZShtX2ZpbGVEZXNj
cmlwdG9yKSA9PSAtMSAmJiAoZXJybm8gPT0gRUlOVFIpKSB7IH0KK30KKworfSAvLyBuYW1lc3Bh
Y2UgQ29yZUlQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9x
dC9Db25uZWN0aW9uUXQuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9D
b25uZWN0aW9uUXQuY3BwCmluZGV4IGMwNzM2YjguLjVhOTA1NjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25RdC5jcHAKQEAgLTI5LDEx
NCArMjksMzMxIEBACiAjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCiAjaW5jbHVkZSAiUHJv
Y2Vzc0xhdW5jaGVyLmgiCiAjaW5jbHVkZSAiV29ya0l0ZW0uaCIKKyNpbmNsdWRlICJTaGFyZWRN
ZW1vcnkuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlIDxRQXBwbGlj
YXRpb24+Ci0jaW5jbHVkZSA8UUxvY2FsU2VydmVyPgotI2luY2x1ZGUgPFFMb2NhbFNvY2tldD4K
KyNpbmNsdWRlIDxRU29ja2V0Tm90aWZpZXI+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2lu
Y2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4K
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBu
YW1lc3BhY2UgQ29yZUlQQyB7CiAKLS8vIFRoaXMgaXMgd2hhdCBvdGhlciBwb3J0cyB1c2UuLi4K
IHN0YXRpYyBjb25zdCBzaXplX3QgbWVzc2FnZU1heFNpemUgPSA0MDk2Oworc3RhdGljIGNvbnN0
IHNpemVfdCBhdHRhY2htZW50TWF4QW1vdW50ID0gMjU1OworCitlbnVtIHsKKyAgICBNZXNzYWdl
Qm9keUlzT09MID0gMSA8PCAzMQorfTsKKworY2xhc3MgTWVzc2FnZUluZm8geworcHVibGljOgor
ICAgIE1lc3NhZ2VJbmZvKCkgeyB9CisKKyAgICBNZXNzYWdlSW5mbyhNZXNzYWdlSUQgbWVzc2Fn
ZUlELCBzaXplX3QgYm9keVNpemUsIHNpemVfdCBpbml0aWFsQXR0YWNobWVudENvdW50KQorICAg
ICAgICA6IG1fbWVzc2FnZUlEKG1lc3NhZ2VJRC50b0ludCgpKQorICAgICAgICAsIG1fYm9keVNp
emUoYm9keVNpemUpCisgICAgICAgICwgbV9hdHRhY2htZW50Q291bnQoaW5pdGlhbEF0dGFjaG1l
bnRDb3VudCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKG1fbWVzc2FnZUlEICYgTWVzc2FnZUJv
ZHlJc09PTCkpOworICAgIH0KKworICAgIHZvaWQgc2V0TWVzc2FnZUJvZHlPT0woKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFpc01lc3NhZ2VCb2R5T09MKCkpOworCisgICAgICAgIG1fbWVzc2Fn
ZUlEIHw9IE1lc3NhZ2VCb2R5SXNPT0w7CisgICAgICAgIG1fYXR0YWNobWVudENvdW50Kys7Cisg
ICAgfQorCisgICAgYm9vbCBpc01lc3NhZ2VCb2R5T09MKCkgY29uc3QgeyByZXR1cm4gbV9tZXNz
YWdlSUQgJiBNZXNzYWdlQm9keUlzT09MOyB9CisKKyAgICBzaXplX3QgYm9keVNpemUoKSBjb25z
dCB7IHJldHVybiBtX2JvZHlTaXplOyB9CisKKyAgICBNZXNzYWdlSUQgbWVzc2FnZUlEKCkgY29u
c3QgeyByZXR1cm4gTWVzc2FnZUlEOjpmcm9tSW50KG1fbWVzc2FnZUlEICYgfk1lc3NhZ2VCb2R5
SXNPT0wpOyB9CisKKyAgICBzaXplX3QgYXR0YWNobWVudENvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9hdHRhY2htZW50Q291bnQ7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX21lc3NhZ2VJ
RDsKKyAgICBzaXplX3QgbV9ib2R5U2l6ZTsKKyAgICBzaXplX3QgbV9hdHRhY2htZW50Q291bnQ7
Cit9OwogCiB2b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyIGlk
ZW50aWZpZXIpCiB7Ci0gICAgbV9zZXJ2ZXJOYW1lID0gaWRlbnRpZmllcjsKLSAgICBtX3NvY2tl
dCA9IDA7CisgICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaWRlbnRpZmllcjsKKyAgICBtX3NvY2tl
dE5vdGlmaWVyID0gMDsKICAgICBtX3JlYWRCdWZmZXIucmVzaXplKG1lc3NhZ2VNYXhTaXplKTsK
ICAgICBtX2N1cnJlbnRNZXNzYWdlU2l6ZSA9IDA7CiB9CiAKIHZvaWQgQ29ubmVjdGlvbjo6cGxh
dGZvcm1JbnZhbGlkYXRlKCkKIHsKLSAgICBtX3NvY2tldC0+ZGlzY29ubmVjdCgpOwotICAgIGlm
ICghbV9pc1NlcnZlcikKLSAgICAgICAgbV9zb2NrZXQtPmRlbGV0ZUxhdGVyKCk7Ci0gICAgbV9z
b2NrZXQgPSAwOworICAgIGlmIChtX3NvY2tldERlc2NyaXB0b3IgIT0gLTEpCisgICAgICAgIHdo
aWxlIChjbG9zZShtX3NvY2tldERlc2NyaXB0b3IpID09IC0xICYmIGVycm5vID09IEVJTlRSKSB7
IH0KKworICAgIGlmICghbV9pc0Nvbm5lY3RlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVs
ZXRlIG1fc29ja2V0Tm90aWZpZXI7CisgICAgbV9zb2NrZXROb3RpZmllciA9IDA7CisgICAgbV9z
b2NrZXREZXNjcmlwdG9yID0gLTE7CisgICAgbV9pc0Nvbm5lY3RlZCA9IGZhbHNlOwogfQogCitj
bGFzcyBTb2NrZXROb3RpZmllclJlc291cmNlR3VhcmQgeworcHVibGljOgorICAgIFNvY2tldE5v
dGlmaWVyUmVzb3VyY2VHdWFyZChRU29ja2V0Tm90aWZpZXIqIHNvY2tldE5vdGlmaWVyKQorICAg
ICAgICA6IG1fc29ja2V0Tm90aWZpZXIoc29ja2V0Tm90aWZpZXIpCisgICAgeworICAgICAgICBt
X3NvY2tldE5vdGlmaWVyLT5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICB9CisKKyAgICB+U29ja2V0
Tm90aWZpZXJSZXNvdXJjZUd1YXJkKCkKKyAgICB7CisgICAgICAgIG1fc29ja2V0Tm90aWZpZXIt
PnNldEVuYWJsZWQodHJ1ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFFTb2NrZXROb3RpZmll
ciogY29uc3QgbV9zb2NrZXROb3RpZmllcjsKK307CisKK3RlbXBsYXRlPGNsYXNzIFQsIGNsYXNz
IGl0ZXJhdG9yPgorY2xhc3MgQXR0YWNobWVudFJlc291cmNlR3VhcmQgeworcHVibGljOgorICAg
IEF0dGFjaG1lbnRSZXNvdXJjZUd1YXJkKFQmIGF0dGFjaG1lbnRzKQorICAgICAgICA6IG1fYXR0
YWNobWVudHMoYXR0YWNobWVudHMpCisgICAgeworICAgIH0KKyAgICB+QXR0YWNobWVudFJlc291
cmNlR3VhcmQoKQorICAgIHsKKyAgICAgICAgaXRlcmF0b3IgZW5kID0gbV9hdHRhY2htZW50cy5l
bmQoKTsKKyAgICAgICAgZm9yIChpdGVyYXRvciBpID0gbV9hdHRhY2htZW50cy5iZWdpbigpOyBp
ICE9IGVuZDsgKytpKQorICAgICAgICAgICAgaS0+ZGlzcG9zZSgpOworICAgIH0KK3ByaXZhdGU6
CisgICAgVCYgbV9hdHRhY2htZW50czsKK307CisKIHZvaWQgQ29ubmVjdGlvbjo6cmVhZHlSZWFk
SGFuZGxlcigpCiB7Ci0gICAgd2hpbGUgKG1fc29ja2V0LT5ieXRlc0F2YWlsYWJsZSgpKSB7Ci0g
ICAgICAgIGlmICghbV9jdXJyZW50TWVzc2FnZVNpemUpIHsKLSAgICAgICAgICAgIHNpemVfdCBu
dW1iZXJPZkJ5dGVzUmVhZCA9IG1fc29ja2V0LT5yZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KG1fcmVhZEJ1ZmZlci5kYXRhKCkpLCBzaXplb2Yoc2l6ZV90KSk7Ci0gICAgICAgICAgICBBU1NF
UlRfVU5VU0VEKG51bWJlck9mQnl0ZXNSZWFkLCBudW1iZXJPZkJ5dGVzUmVhZCk7Ci0gICAgICAg
ICAgICBtX2N1cnJlbnRNZXNzYWdlU2l6ZSA9ICpyZWludGVycHJldF9jYXN0PHNpemVfdCo+KG1f
cmVhZEJ1ZmZlci5kYXRhKCkpOwotICAgICAgICB9CisgICAgRGVxdWU8QXR0YWNobWVudD4gYXR0
YWNobWVudHM7CisgICAgU29ja2V0Tm90aWZpZXJSZXNvdXJjZUd1YXJkIHNvY2tldE5vdGlmaWVy
RW5hYmxlcihtX3NvY2tldE5vdGlmaWVyKTsKKyAgICBBdHRhY2htZW50UmVzb3VyY2VHdWFyZDxE
ZXF1ZTxBdHRhY2htZW50PiwgRGVxdWU8QXR0YWNobWVudD46Oml0ZXJhdG9yPiBhdHRhY2hlbWVu
dERpc3Bvc2VyKGF0dGFjaG1lbnRzKTsKKworICAgIGNoYXIgYXR0YWNobWVudERlc2NyaXB0b3JC
dWZmZXJbQ01TR19TUEFDRShzaXplb2YoaW50KSAqIChhdHRhY2htZW50TWF4QW1vdW50KSldOwor
ICAgIHN0cnVjdCBtc2doZHIgbWVzc2FnZTsKKyAgICBtZW1zZXQoJm1lc3NhZ2UsIDAsIHNpemVv
ZihtZXNzYWdlKSk7CisKKyAgICBzdHJ1Y3QgaW92ZWMgaW92WzFdOworICAgIG1lbXNldCgmaW92
LCAwLCBzaXplb2YoaW92KSk7CisKKyAgICBtZXNzYWdlLm1zZ19jb250cm9sID0gYXR0YWNobWVu
dERlc2NyaXB0b3JCdWZmZXI7CisgICAgbWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IENNU0dfU1BB
Q0Uoc2l6ZW9mKGludCkgKiAoYXR0YWNobWVudE1heEFtb3VudCkpOworCisgICAgaW92WzBdLmlv
dl9iYXNlID0gbV9yZWFkQnVmZmVyLmRhdGEoKTsKKyAgICBpb3ZbMF0uaW92X2xlbiA9IG1fcmVh
ZEJ1ZmZlci5zaXplKCk7CisKKyAgICBtZXNzYWdlLm1zZ19pb3YgPSBpb3Y7CisgICAgbWVzc2Fn
ZS5tc2dfaW92bGVuID0gMTsKKwogCi0gICAgICAgIGlmIChtX3NvY2tldC0+Ynl0ZXNBdmFpbGFi
bGUoKSA8IG1fY3VycmVudE1lc3NhZ2VTaXplKQorICAgIGludCBtZXNzYWdlTGVuZ3RoID0gMDsK
KyAgICB3aGlsZSAoKG1lc3NhZ2VMZW5ndGggPSByZWN2bXNnKG1fc29ja2V0RGVzY3JpcHRvciwg
Jm1lc3NhZ2UsIE1TR19DTVNHX0NMT0VYRUMpKSA9PSAtMSkgeworICAgICAgICBpZiAoZXJybm8g
IT0gRUlOVFIpCiAgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RydWN0IGNtc2do
ZHIqIGNvbnRyb2xNZXNzYWdlID0gQ01TR19GSVJTVEhEUigmbWVzc2FnZSk7CisKKyAgICBNZXNz
YWdlSW5mbyBtZXNzYWdlSW5mbzsKKyAgICB1bnNpZ25lZCBjaGFyKiBtZXNzYWdlRGF0YSA9IG1f
cmVhZEJ1ZmZlci5kYXRhKCk7CisKKyAgICBtZW1jcHkoJm1lc3NhZ2VJbmZvLCBtZXNzYWdlRGF0
YSwgc2l6ZW9mKG1lc3NhZ2VJbmZvKSk7CisgICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGggPT0gc2l6
ZW9mKG1lc3NhZ2VJbmZvKSArIG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpICogc2l6ZW9m
KHNpemVfdCkgKyAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpID8gMCA6IG1lc3NhZ2VJ
bmZvLmJvZHlTaXplKCkpKTsKKworICAgIG1lc3NhZ2VEYXRhICs9IHNpemVvZihtZXNzYWdlSW5m
byk7CisKKyAgICBSZWZQdHI8V2ViS2l0OjpTaGFyZWRNZW1vcnk+IG9vbE1lc3NhZ2VCb2R5Owor
CisgICAgaWYgKG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpKSB7CisgICAgICAgIGlmIChj
b250cm9sTWVzc2FnZSAmJiBjb250cm9sTWVzc2FnZS0+Y21zZ19sZXZlbCA9PSBTT0xfU09DS0VU
ICYmIGNvbnRyb2xNZXNzYWdlLT5jbXNnX3R5cGUgPT0gU0NNX1JJR0hUUykgeworICAgICAgICAg
ICAgc2l6ZV90IGF0dGFjaG1lbnRTaXplc1ttZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKV07
CisgICAgICAgICAgICBtZW1jcHkoYXR0YWNobWVudFNpemVzLCBtZXNzYWdlRGF0YSwgc2l6ZW9m
KGF0dGFjaG1lbnRTaXplcykpOworCisgICAgICAgICAgICBtZXNzYWdlRGF0YSArPSBzaXplb2Yo
YXR0YWNobWVudFNpemVzKTsKKworICAgICAgICAgICAgaW50IGZpbGVEZXNjcmlwdG9yc1ttZXNz
YWdlSW5mby5hdHRhY2htZW50Q291bnQoKV07CisgICAgICAgICAgICBtZW1jcHkoZmlsZURlc2Ny
aXB0b3JzLCBDTVNHX0RBVEEoY29udHJvbE1lc3NhZ2UpLCBzaXplb2YoZmlsZURlc2NyaXB0b3Jz
KSk7CiAKLSAgICAgICAgaWYgKG1fcmVhZEJ1ZmZlci5zaXplKCkgPCBtX2N1cnJlbnRNZXNzYWdl
U2l6ZSkKLSAgICAgICAgICAgIG1fcmVhZEJ1ZmZlci5ncm93KG1fY3VycmVudE1lc3NhZ2VTaXpl
KTsKKyAgICAgICAgICAgIGludCBhdHRhY2htZW50Q291bnQgPSBtZXNzYWdlSW5mby5hdHRhY2ht
ZW50Q291bnQoKTsKIAotICAgICAgICBzaXplX3QgbnVtYmVyT2ZCeXRlc1JlYWQgPSBtX3NvY2tl
dC0+cmVhZChyZWludGVycHJldF9jYXN0PGNoYXIqPihtX3JlYWRCdWZmZXIuZGF0YSgpKSwgbV9j
dXJyZW50TWVzc2FnZVNpemUpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKG51bWJlck9mQnl0ZXNS
ZWFkLCBudW1iZXJPZkJ5dGVzUmVhZCk7CisgICAgICAgICAgICBpZiAobWVzc2FnZUluZm8uaXNN
ZXNzYWdlQm9keU9PTCgpKQorICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRDb3VudC0tOwogCi0g
ICAgICAgIC8vIFRoZSBtZXNzYWdlSUQgaXMgZW5jb2RlZCBhdCB0aGUgZW5kIG9mIHRoZSBidWZm
ZXIuCi0gICAgICAgIHNpemVfdCByZWFsQnVmZmVyU2l6ZSA9IG1fY3VycmVudE1lc3NhZ2VTaXpl
IC0gc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgdWludDMyX3QgbWVzc2FnZUlEID0gKnJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihtX3JlYWRCdWZmZXIuZGF0YSgpICsgcmVhbEJ1ZmZlclNp
emUpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRhY2htZW50Q291bnQ7ICsr
aSkKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50cy5hcHBlbmQoQXR0YWNobWVudChmaWxlRGVz
Y3JpcHRvcnNbaV0sIGF0dGFjaG1lbnRTaXplc1tpXSkpOwogCi0gICAgICAgIHByb2Nlc3NJbmNv
bWluZ01lc3NhZ2UoTWVzc2FnZUlEOjpmcm9tSW50KG1lc3NhZ2VJRCksIGFkb3B0UHRyKG5ldyBB
cmd1bWVudERlY29kZXIobV9yZWFkQnVmZmVyLmRhdGEoKSwgcmVhbEJ1ZmZlclNpemUpKSk7Cisg
ICAgICAgICAgICBpZiAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpKSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKG1lc3NhZ2VJbmZvLmJvZHlTaXplKCkpOwogCi0gICAgICAgIG1fY3Vy
cmVudE1lc3NhZ2VTaXplID0gMDsKKyAgICAgICAgICAgICAgICBXZWJLaXQ6OlNoYXJlZE1lbW9y
eTo6SGFuZGxlIGhhbmRsZTsKKyAgICAgICAgICAgICAgICBoYW5kbGUuYWRvcHRGcm9tQXR0YWNo
bWVudChmaWxlRGVzY3JpcHRvcnNbYXR0YWNobWVudENvdW50XSwgYXR0YWNobWVudFNpemVzW2F0
dGFjaG1lbnRDb3VudF0pOworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUuaXNOdWxsKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvb2xN
ZXNzYWdlQm9keSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUoaGFuZGxlLCBXZWJLaXQ6
OlNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOworICAgICAgICAgICAgICAgIGlmICghb29sTWVzc2Fn
ZUJvZHkpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNvbnRyb2xNZXNzYWdlID0gQ01TR19OWFRIRFIoJm1lc3NhZ2UsIGNv
bnRyb2xNZXNzYWdlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQorCisgICAg
QVNTRVJUKGF0dGFjaG1lbnRzLnNpemUoKSA9PSBtZXNzYWdlSW5mby5pc01lc3NhZ2VCb2R5T09M
KCkgPyBtZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKSAtIDEgOiBtZXNzYWdlSW5mby5hdHRh
Y2htZW50Q291bnQoKSk7CisKKyAgICB1bnNpZ25lZCBjaGFyKiBtZXNzYWdlQm9keSA9IG1lc3Nh
Z2VEYXRhOworCisgICAgaWYgKG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSkKKyAgICAg
ICAgbWVzc2FnZUJvZHkgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihvb2xNZXNz
YWdlQm9keS0+ZGF0YSgpKTsKKworICAgIEFyZ3VtZW50RGVjb2RlciogYXJndW1lbnREZWNvZGVy
OworICAgIGlmIChhdHRhY2htZW50cy5pc0VtcHR5KCkpCisgICAgICAgIGFyZ3VtZW50RGVjb2Rl
ciA9IG5ldyBBcmd1bWVudERlY29kZXIobWVzc2FnZUJvZHksIG1lc3NhZ2VJbmZvLmJvZHlTaXpl
KCkpOworICAgIGVsc2UKKyAgICAgICAgYXJndW1lbnREZWNvZGVyID0gbmV3IEFyZ3VtZW50RGVj
b2RlcihtZXNzYWdlQm9keSwgbWVzc2FnZUluZm8uYm9keVNpemUoKSwgYXR0YWNobWVudHMpOwor
CisgICAgcHJvY2Vzc0luY29taW5nTWVzc2FnZShtZXNzYWdlSW5mby5tZXNzYWdlSUQoKSwgYWRv
cHRQdHIoYXJndW1lbnREZWNvZGVyKSk7CisKKyAgICBBU1NFUlQoIWNvbnRyb2xNZXNzYWdlKTsK
IH0KIAogYm9vbCBDb25uZWN0aW9uOjpvcGVuKCkKIHsKLSAgICBBU1NFUlQoIW1fc29ja2V0KTsK
LQotICAgIGlmIChtX2lzU2VydmVyKSB7Ci0gICAgICAgIG1fc29ja2V0ID0gV2ViS2l0OjpQcm9j
ZXNzTGF1bmNoZXI6OnRha2VQZW5kaW5nQ29ubmVjdGlvbigpOwotICAgICAgICBtX2lzQ29ubmVj
dGVkID0gbV9zb2NrZXQ7Ci0gICAgICAgIGlmIChtX2lzQ29ubmVjdGVkKSB7Ci0gICAgICAgICAg
ICBtX2Nvbm5lY3Rpb25RdWV1ZS5tb3ZlU29ja2V0VG9Xb3JrVGhyZWFkKG1fc29ja2V0KTsKLSAg
ICAgICAgICAgIG1fY29ubmVjdGlvblF1ZXVlLmNvbm5lY3RTaWduYWwobV9zb2NrZXQsIFNJR05B
TChyZWFkeVJlYWQoKSksIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWR5
UmVhZEhhbmRsZXIpKTsKKyAgICBBU1NFUlQoIW1fc29ja2V0Tm90aWZpZXIpOworICAgIGludCBm
bGFncyA9IGZjbnRsKG1fc29ja2V0RGVzY3JpcHRvciwgRl9HRVRGTCwgMCk7CisgICAgd2hpbGUg
KGZjbnRsKG1fc29ja2V0RGVzY3JpcHRvciwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKSA9
PSAtMSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgbV9zb2NrZXQgPSBuZXcgUUxvY2FsU29ja2V0KCk7Ci0gICAg
ICAgIG1fc29ja2V0LT5jb25uZWN0VG9TZXJ2ZXIobV9zZXJ2ZXJOYW1lKTsKLSAgICAgICAgbV9j
b25uZWN0aW9uUXVldWUubW92ZVNvY2tldFRvV29ya1RocmVhZChtX3NvY2tldCk7Ci0gICAgICAg
IG1fY29ubmVjdGlvblF1ZXVlLmNvbm5lY3RTaWduYWwobV9zb2NrZXQsIFNJR05BTChyZWFkeVJl
YWQoKSksIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRs
ZXIpKTsKLSAgICAgICAgbV9jb25uZWN0aW9uUXVldWUuY29ubmVjdFNpZ25hbChtX3NvY2tldCwg
U0lHTkFMKGRpc2Nvbm5lY3RlZCgpKSwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlv
bjo6Y29ubmVjdGlvbkRpZENsb3NlKSk7Ci0gICAgICAgIG1faXNDb25uZWN0ZWQgPSBtX3NvY2tl
dC0+d2FpdEZvckNvbm5lY3RlZCgpOwogICAgIH0KLSAgICByZXR1cm4gbV9pc0Nvbm5lY3RlZDsK
KworICAgIG1faXNDb25uZWN0ZWQgPSB0cnVlOworICAgIG1fc29ja2V0Tm90aWZpZXIgPSBtX2Nv
bm5lY3Rpb25RdWV1ZS5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihtX3NvY2tldERlc2NyaXB0
b3IsIFFTb2NrZXROb3RpZmllcjo6UmVhZCwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVj
dGlvbjo6cmVhZHlSZWFkSGFuZGxlcikpOworCisgICAgLy8gU2NoZWR1bGUgYSBjYWxsIHRvIHJl
YWR5UmVhZEhhbmRsZXIuIERhdGEgbWF5IGhhdmUgYXJyaXZlZCBiZWZvcmUgaW5zdGFsbGF0aW9u
IG9mIHRoZSBzaWduYWwKKyAgICAvLyBoYW5kbGVyLgorICAgIG1fY29ubmVjdGlvblF1ZXVlLnNj
aGVkdWxlV29yayhXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpyZWFkeVJlYWRI
YW5kbGVyKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBDb25uZWN0aW9uOjpwbGF0
Zm9ybUNhblNlbmRPdXRnb2luZ01lc3NhZ2VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zb2Nr
ZXQ7CisgICAgcmV0dXJuIG1fc29ja2V0Tm90aWZpZXI7CiB9CiAKIGJvb2wgQ29ubmVjdGlvbjo6
c2VuZE91dGdvaW5nTWVzc2FnZShNZXNzYWdlSUQgbWVzc2FnZUlELCBQYXNzT3duUHRyPEFyZ3Vt
ZW50RW5jb2Rlcj4gYXJndW1lbnRzKQogewotICAgIEFTU0VSVChtX3NvY2tldCk7Ci0KLSAgICAv
LyBXZSBwdXQgdGhlIG1lc3NhZ2UgSUQgbGFzdC4KLSAgICBhcmd1bWVudHMtPmVuY29kZVVJbnQz
MihtZXNzYWdlSUQudG9JbnQoKSk7CisgICAgQVNTRVJUKG1fc29ja2V0Tm90aWZpZXIpOworICAg
IENPTVBJTEVfQVNTRVJUKHNpemVvZihNZXNzYWdlSW5mbykgKyBhdHRhY2htZW50TWF4QW1vdW50
ICogc2l6ZW9mKHNpemVfdCkgPD0gbWVzc2FnZU1heFNpemUsIEF0dGFjaG1lbnRzRml0VG9NZXNz
YWdlSW5saW5lKTsKIAotICAgIHNpemVfdCBidWZmZXJTaXplID0gYXJndW1lbnRzLT5idWZmZXJT
aXplKCk7CisgICAgVmVjdG9yPEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnRzID0gYXJndW1lbnRzLT5y
ZWxlYXNlQXR0YWNobWVudHMoKTsKKyAgICBBdHRhY2htZW50UmVzb3VyY2VHdWFyZDxWZWN0b3I8
QXR0YWNobWVudD4sIFZlY3RvcjxBdHRhY2htZW50Pjo6aXRlcmF0b3I+IGF0dGFjaGVtZW50RGlz
cG9zZXIoYXR0YWNobWVudHMpOwogCi0gICAgLy8gV3JpdGUgbWVzc2FnZSBzaXplIGZpcnN0Ci0g
ICAgLy8gRklYTUU6IFNob3VsZCAganVzdCBkbyBhIHNpbmdsZSB3cml0ZS4KLSAgICBxaW50NjQg
Ynl0ZXNXcml0dGVuRm9yU2l6ZSA9IG1fc29ja2V0LT53cml0ZShyZWludGVycHJldF9jYXN0PGNo
YXIqPigmYnVmZmVyU2l6ZSksIHNpemVvZihidWZmZXJTaXplKSk7Ci0gICAgaWYgKGJ5dGVzV3Jp
dHRlbkZvclNpemUgIT0gc2l6ZW9mKGJ1ZmZlclNpemUpKSB7Ci0gICAgICAgIGNvbm5lY3Rpb25E
aWRDbG9zZSgpOworICAgIGlmIChhdHRhY2htZW50cy5zaXplKCkgPiAoYXR0YWNobWVudE1heEFt
b3VudCAtIDEpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcWludDY0IGJ5dGVzV3JpdHRlbkZvckJ1ZmZlciA9IG1f
c29ja2V0LT53cml0ZShyZWludGVycHJldF9jYXN0PGNoYXIqPihhcmd1bWVudHMtPmJ1ZmZlcigp
KSwgYXJndW1lbnRzLT5idWZmZXJTaXplKCkpOwotICAgIGlmIChieXRlc1dyaXR0ZW5Gb3JCdWZm
ZXIgIT0gYXJndW1lbnRzLT5idWZmZXJTaXplKCkpIHsKLSAgICAgICAgY29ubmVjdGlvbkRpZENs
b3NlKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBNZXNzYWdlSW5mbyBtZXNzYWdlSW5m
byhtZXNzYWdlSUQsIGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpLCBhdHRhY2htZW50cy5zaXplKCkp
OworICAgIHNpemVfdCBtZXNzYWdlU2l6ZVdpdGhCb2R5SW5saW5lID0gc2l6ZW9mKG1lc3NhZ2VJ
bmZvKSArIChhdHRhY2htZW50cy5zaXplKCkgKiBzaXplb2Yoc2l6ZV90KSkgKyBhcmd1bWVudHMt
PmJ1ZmZlclNpemUoKTsKKyAgICBpZiAobWVzc2FnZVNpemVXaXRoQm9keUlubGluZSA+IG1lc3Nh
Z2VNYXhTaXplICYmIGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpKSB7CisgICAgICAgIFJlZlB0cjxX
ZWJLaXQ6OlNoYXJlZE1lbW9yeT4gb29sTWVzc2FnZUJvZHkgPSBXZWJLaXQ6OlNoYXJlZE1lbW9y
eTo6Y3JlYXRlKGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpKTsKKyAgICAgICAgaWYgKCFvb2xNZXNz
YWdlQm9keSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBXZWJLaXQ6OlNo
YXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKKyAgICAgICAgaWYgKCFvb2xNZXNzYWdlQm9keS0+
Y3JlYXRlSGFuZGxlKGhhbmRsZSwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtZXNzYWdlSW5mby5zZXRNZXNzYWdl
Qm9keU9PTCgpOworCisgICAgICAgIG1lbWNweShvb2xNZXNzYWdlQm9keS0+ZGF0YSgpLCBhcmd1
bWVudHMtPmJ1ZmZlcigpLCBhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSk7CisKKyAgICAgICAgYXR0
YWNobWVudHMuYXBwZW5kKGhhbmRsZS5yZWxlYXNlVG9BdHRhY2htZW50KCkpOwogICAgIH0KIAot
ICAgIG1fc29ja2V0LT5mbHVzaCgpOworICAgIHN0cnVjdCBtc2doZHIgbWVzc2FnZTsKKyAgICBt
ZW1zZXQoJm1lc3NhZ2UsIDAsIHNpemVvZihtZXNzYWdlKSk7CisKKyAgICBzdHJ1Y3QgaW92ZWMg
aW92WzNdOworICAgIG1lbXNldCgmaW92LCAwLCBzaXplb2YoaW92KSk7CisKKyAgICBtZXNzYWdl
Lm1zZ19pb3YgPSBpb3Y7CisgICAgaW50IGlvdkxlbmd0aCA9IDE7CisKKyAgICBpb3ZbMF0uaW92
X2Jhc2UgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigmbWVzc2FnZUluZm8pOworICAgIGlvdlsw
XS5pb3ZfbGVuID0gc2l6ZW9mKG1lc3NhZ2VJbmZvKTsKKworICAgIGNoYXIgYXR0YWNobWVudEZE
QnVmZmVyW0NNU0dfU1BBQ0Uoc2l6ZW9mKGludCkgKiAoYXR0YWNobWVudHMuc2l6ZSgpKSldOwor
ICAgIHNpemVfdCBhdHRhY2htZW50U2l6ZXNbYXR0YWNobWVudHMuc2l6ZSgpXTsKKworICAgIGlm
ICghYXR0YWNobWVudHMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1lc3NhZ2UubXNnX2NvbnRyb2wg
PSBhdHRhY2htZW50RkRCdWZmZXI7CisgICAgICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBz
aXplb2YoYXR0YWNobWVudEZEQnVmZmVyKTsKKworICAgICAgICBzdHJ1Y3QgY21zZ2hkciogY21z
ZyA9IENNU0dfRklSU1RIRFIoJm1lc3NhZ2UpOworICAgICAgICBjbXNnLT5jbXNnX2xldmVsID0g
U09MX1NPQ0tFVDsKKyAgICAgICAgY21zZy0+Y21zZ190eXBlID0gU0NNX1JJR0hUUzsKKyAgICAg
ICAgY21zZy0+Y21zZ19sZW4gPSBDTVNHX0xFTihzaXplb2YoaW50KSAqIGF0dGFjaG1lbnRzLnNp
emUoKSk7CisKKyAgICAgICAgaW50KiBmZHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oQ01T
R19EQVRBKGNtc2cpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRhY2htZW50cy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgYXR0YWNobWVudFNpemVzW2ldID0gYXR0YWNobWVu
dHNbaV0uc2l6ZSgpOworICAgICAgICAgICAgZmRwdHJbaV0gPSBhdHRhY2htZW50c1tpXS5maWxl
RGVzY3JpcHRvcigpOworICAgICAgICB9CisKKyAgICAgICAgbWVzc2FnZS5tc2dfY29udHJvbGxl
biA9IGNtc2ctPmNtc2dfbGVuOwogCisgICAgICAgIGlvdltpb3ZMZW5ndGhdLmlvdl9iYXNlID0g
YXR0YWNobWVudFNpemVzOworICAgICAgICBpb3ZbaW92TGVuZ3RoXS5pb3ZfbGVuID0gc2l6ZW9m
KGF0dGFjaG1lbnRTaXplcyk7CisgICAgICAgICsraW92TGVuZ3RoOworICAgIH0KKworICAgIGlm
ICghbWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpICYmIGFyZ3VtZW50cy0+YnVmZmVyU2l6
ZSgpKSB7CisgICAgICAgIGlvdltpb3ZMZW5ndGhdLmlvdl9iYXNlID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oYXJndW1lbnRzLT5idWZmZXIoKSk7CisgICAgICAgIGlvdltpb3ZMZW5ndGhdLmlv
dl9sZW4gPSBhcmd1bWVudHMtPmJ1ZmZlclNpemUoKTsKKyAgICAgICAgKytpb3ZMZW5ndGg7Cisg
ICAgfQorCisgICAgbWVzc2FnZS5tc2dfaW92bGVuID0gaW92TGVuZ3RoOworCisgICAgaW50IGJ5
dGVzU2VudCA9IDA7CisgICAgd2hpbGUgKChieXRlc1NlbnQgPSBzZW5kbXNnKG1fc29ja2V0RGVz
Y3JpcHRvciwgJm1lc3NhZ2UsIDApKSA9PSAtMSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRUlO
VFIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIHJldHVybiB0cnVlOwog
fQogCit2b2lkIENvbm5lY3Rpb246OnNldFNob3VsZENsb3NlQ29ubmVjdGlvbk9uUHJvY2Vzc1Rl
cm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzKQorewor
ICAgIG1fY29ubmVjdGlvblF1ZXVlLnNjaGVkdWxlV29ya09uVGVybWluYXRpb24ocHJvY2Vzcywg
V29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6Y29ubmVjdGlvbkRpZENsb3NlKSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIENvcmVJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVk
TWVtb3J5LmgKaW5kZXggOTg1NDEzMi4uZmQxZDYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
U2hhcmVkTWVtb3J5LmgKQEAgLTMxLDEwICszMSw3IEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KIAogI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPFF0R2xvYmFsPgotUVRfQkVHSU5f
TkFNRVNQQUNFCi1jbGFzcyBRU2hhcmVkTWVtb3J5OwotUVRfRU5EX05BTUVTUEFDRQorI2luY2x1
ZGUgIkF0dGFjaG1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNlbmRp
ZgogCkBAIC02Myw2ICs2MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgZW5jb2RlKENvcmVJ
UEM6OkFyZ3VtZW50RW5jb2RlciopIGNvbnN0OwogICAgICAgICBzdGF0aWMgYm9vbCBkZWNvZGUo
Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgSGFuZGxlJik7CiAKKyNpZiBQTEFURk9STShRVCkK
KyAgICAgICAgQ29yZUlQQzo6QXR0YWNobWVudCByZWxlYXNlVG9BdHRhY2htZW50KCkgY29uc3Q7
CisgICAgICAgIHZvaWQgYWRvcHRGcm9tQXR0YWNobWVudChpbnQgZmlsZURlc2NyaXB0b3IsIHNp
emVfdCk7CisjZW5kaWYKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgU2hhcmVk
TWVtb3J5OwogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTcwLDcgKzcxLDcgQEAgcHVibGljOgogI2Vs
aWYgUExBVEZPUk0oV0lOKQogICAgICAgICBtdXRhYmxlIEhBTkRMRSBtX2hhbmRsZTsKICNlbGlm
IFBMQVRGT1JNKFFUKQotICAgICAgICBtdXRhYmxlIFN0cmluZyBtX2tleTsKKyAgICAgICAgbXV0
YWJsZSBpbnQgbV9maWxlRGVzY3JpcHRvcjsKICNlbmRpZgogICAgICAgICBzaXplX3QgbV9zaXpl
OwogICAgIH07CkBAIC05Nyw3ICs5OCw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oV0lOKQog
ICAgIEhBTkRMRSBtX2hhbmRsZTsKICNlbGlmIFBMQVRGT1JNKFFUKQotICAgIFFTaGFyZWRNZW1v
cnkqIG1faW1wbDsKKyAgICBpbnQgbV9maWxlRGVzY3JpcHRvcjsKICNlbmRpZgogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAppbmRleCA3OGZhOGI3Li5iY2FhZTBlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaApAQCAtNDEsNyArNDEsOCBAQAogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogI2lmIFBMQVRGT1JNKFFUKQotY2xhc3MgUUxvY2FsU29ja2V0OworI2lu
Y2x1ZGUgPFFTb2NrZXROb3RpZmllcj4KKyNpbmNsdWRlICJQbGF0Zm9ybVByb2Nlc3NJZGVudGlm
aWVyLmgiCiBjbGFzcyBRT2JqZWN0OwogY2xhc3MgUVRocmVhZDsKICNlbGlmIFBMQVRGT1JNKEdU
SykKQEAgLTc5LDEwICs4MCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVySGFuZGxlKEhB
TkRMRSwgUGFzc093blB0cjxXb3JrSXRlbT4pOwogICAgIHZvaWQgdW5yZWdpc3RlckFuZENsb3Nl
SGFuZGxlKEhBTkRMRSk7CiAjZWxpZiBQTEFURk9STShRVCkKLSAgICB2b2lkIGNvbm5lY3RTaWdu
YWwoUU9iamVjdCosIGNvbnN0IGNoYXIqIHNpZ25hbCwgUGFzc093blB0cjxXb3JrSXRlbT4pOwot
ICAgIHZvaWQgZGlzY29ubmVjdFNpZ25hbChRT2JqZWN0KiwgY29uc3QgY2hhciogc2lnbmFsKTsK
LQotICAgIHZvaWQgbW92ZVNvY2tldFRvV29ya1RocmVhZChRTG9jYWxTb2NrZXQqKTsKKyAgICBR
U29ja2V0Tm90aWZpZXIqIHJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCwgUVNvY2tldE5v
dGlmaWVyOjpUeXBlLCBQYXNzT3duUHRyPFdvcmtJdGVtPik7CisgICAgdm9pZCBzY2hlZHVsZVdv
cmtPblRlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciwgUGFzc093
blB0cjxXb3JrSXRlbT4pOwogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIHZvaWQgcmVnaXN0ZXJF
dmVudFNvdXJjZUhhbmRsZXIoaW50LCBpbnQsIFBhc3NPd25QdHI8V29ya0l0ZW0+KTsKICAgICB2
b2lkIHVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwIGIvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQzNmQ4MmIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
cXQvTWFwcGVkTWVtb3J5UG9vbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICogQ29weXJp
Z2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiTWFwcGVkTWVtb3J5
UG9vbC5oIgotCi0jaW5jbHVkZSAiQ2xlYW51cEhhbmRsZXIuaCIKLSNpbmNsdWRlICJTdGRMaWJF
eHRyYXMuaCIKLSNpbmNsdWRlIDxRRGlyPgotI2luY2x1ZGUgPFFJT0RldmljZT4KLSNpbmNsdWRl
IDxRVGVtcG9yYXJ5RmlsZT4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLU1hcHBlZE1lbW9yeVBv
b2wqIE1hcHBlZE1lbW9yeVBvb2w6OnRoZUluc3RhbmNlID0gMDsKLQotTWFwcGVkTWVtb3J5UG9v
bCogTWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2UoKQotewotICAgIGlmICghdGhlSW5zdGFuY2Up
IHsKLSAgICAgICAgdGhlSW5zdGFuY2UgPSBuZXcgTWFwcGVkTWVtb3J5UG9vbDsKLQotICAgICAg
ICAvLyBEbyBub3QgbGVhdmUgbWFwcGluZyBmaWxlcyBvbiB0aGUgZGlzay4KLSAgICAgICAgQ2xl
YW51cEhhbmRsZXI6Omluc3RhbmNlKCktPm1hcmtGb3JDbGVhbnVwKHRoZUluc3RhbmNlKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdGhlSW5zdGFuY2U7Ci19Ci0KLU1hcHBlZE1lbW9yeVBvb2w6On5N
YXBwZWRNZW1vcnlQb29sKCkKLXsKLSAgICBDbGVhbnVwSGFuZGxlcjo6aW5zdGFuY2UoKS0+dW5t
YXJrKHRoZUluc3RhbmNlKTsKLQotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBtX3Bvb2wu
c2l6ZSgpOyArK24pIHsKLSAgICAgICAgTWFwcGVkTWVtb3J5JiBjdXJyZW50ID0gbV9wb29sLmF0
KG4pOwotICAgICAgICBpZiAoIWN1cnJlbnQuZmlsZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBjdXJyZW50LmZpbGUtPnJlbW92ZSgpOwotICAgICAgICBkZWxldGUgY3VycmVudC5m
aWxlOwotICAgIH0KLSAgICBtX3Bvb2wuY2xlYXIoKTsKLX0KLQotTWFwcGVkTWVtb3J5KiBNYXBw
ZWRNZW1vcnlQb29sOjptYXBNZW1vcnkoc2l6ZV90IHNpemUpCi17Ci0gICAgZm9yICh1bnNpZ25l
ZCBuID0gMDsgbiA8IG1fcG9vbC5zaXplKCk7ICsrbikgewotICAgICAgICBNYXBwZWRNZW1vcnkm
IGN1cnJlbnQgPSBtX3Bvb2wuYXQobik7Ci0gICAgICAgIGlmIChjdXJyZW50LmRhdGFTaXplID49
IHNpemUgJiYgY3VycmVudC5pc0ZyZWUoKSkgewotICAgICAgICAgICAgY3VycmVudC5tYXJrVXNl
ZCgpOwotICAgICAgICAgICAgcmV0dXJuICZjdXJyZW50OwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgTWFwcGVkTWVtb3J5IG5ld01hcDsKLSAgICBuZXdNYXAuZGF0YVNpemUgPSBzaXplOwotICAg
IG5ld01hcC5maWxlID0gbmV3IFFUZW1wb3JhcnlGaWxlKFFEaXI6OnRlbXBQYXRoKCkgKyAiL1dl
YktpdDJVcGRhdGVDaHVuayIpOwotICAgIG5ld01hcC5maWxlLT5vcGVuKFFJT0RldmljZTo6UmVh
ZFdyaXRlKTsKLSAgICBuZXdNYXAuZmlsZU5hbWUgPSBuZXdNYXAuZmlsZS0+ZmlsZU5hbWUoKTsK
LSAgICBuZXdNYXAuZmlsZS0+cmVzaXplKG5ld01hcC5tYXBTaXplKCkpOwotICAgIG5ld01hcC5t
YXBwZWRCeXRlcyA9IG5ld01hcC5maWxlLT5tYXAoMCwgbmV3TWFwLm1hcFNpemUoKSk7Ci0gICAg
bmV3TWFwLmZpbGUtPmNsb3NlKCk7Ci0gICAgbmV3TWFwLm1hcmtVc2VkKCk7Ci0gICAgbV9wb29s
LmFwcGVuZChuZXdNYXApOwotICAgIHJldHVybiAmbV9wb29sLmxhc3QoKTsKLX0KLQotTWFwcGVk
TWVtb3J5KiBNYXBwZWRNZW1vcnlQb29sOjptYXBGaWxlKFFTdHJpbmcgZmlsZU5hbWUsIHNpemVf
dCBzaXplKQotewotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBtX3Bvb2wuc2l6ZSgpOyAr
K24pIHsKLSAgICAgICAgTWFwcGVkTWVtb3J5JiBjdXJyZW50ID0gbV9wb29sLmF0KG4pOwotICAg
ICAgICBpZiAoY3VycmVudC5maWxlTmFtZSA9PSBmaWxlTmFtZSkgewotICAgICAgICAgICAgQVNT
RVJUKCFjdXJyZW50LmlzRnJlZSgpKTsKLSAgICAgICAgICAgIHJldHVybiAmY3VycmVudDsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIE1hcHBlZE1lbW9yeSBuZXdNYXA7Ci0gICAgbmV3TWFwLmZp
bGUgPSBuZXcgUUZpbGUoZmlsZU5hbWUpOwotICAgIG5ld01hcC5maWxlTmFtZSA9IGZpbGVOYW1l
OwotICAgIG5ld01hcC5kYXRhU2l6ZSA9IHNpemU7Ci0gICAgQVNTRVJUKG5ld01hcC5maWxlLT5l
eGlzdHMoKSk7Ci0gICAgQVNTRVJUKG5ld01hcC5maWxlLT5zaXplKCkgPj0gbmV3TWFwLm1hcFNp
emUoKSk7Ci0gICAgbmV3TWFwLmZpbGUtPm9wZW4oUUlPRGV2aWNlOjpSZWFkV3JpdGUpOwotICAg
IG5ld01hcC5tYXBwZWRCeXRlcyA9IG5ld01hcC5maWxlLT5tYXAoMCwgbmV3TWFwLm1hcFNpemUo
KSk7Ci0gICAgQVNTRVJUKG5ld01hcC5tYXBwZWRCeXRlcyk7Ci0gICAgQVNTRVJUKCFuZXdNYXAu
aXNGcmVlKCkpOwotICAgIG5ld01hcC5maWxlLT5jbG9zZSgpOwotICAgIG1fcG9vbC5hcHBlbmQo
bmV3TWFwKTsKLSAgICByZXR1cm4gJm1fcG9vbC5sYXN0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVt
b3J5UG9vbC5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDZhZjhjLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuaAorKysgL2Rldi9udWxs
CkBAIC0xLDEwOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAxMCBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE1hcHBlZE1lbW9yeVBvb2xf
aAotI2RlZmluZSBNYXBwZWRNZW1vcnlQb29sX2gKLQotI2luY2x1ZGUgPFFGaWxlPgotI2luY2x1
ZGUgPFFPYmplY3Q+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIE1hcHBlZE1lbW9yeVBv
b2w7Ci0KLXN0cnVjdCBNYXBwZWRNZW1vcnkgewotCi0gICAgUVN0cmluZyBtYXBwZWRGaWxlTmFt
ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoZmlsZSk7Ci0gICAgICAgIEFTU0VSVCht
YXBwZWRCeXRlcyk7Ci0gICAgICAgIHJldHVybiBmaWxlTmFtZTsKLSAgICB9Ci0KLSAgICB2b2lk
IG1hcmtGcmVlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtYXBwZWRCeXRlcyk7Ci0gICAgICAg
IGRhdGFQdHItPmlzRnJlZSA9IHRydWU7Ci0gICAgfQotCi0gICAgdWNoYXIqIGRhdGEoKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1hcHBlZEJ5dGVzKTsKLSAgICAgICAgcmV0dXJuIGRh
dGFQdHItPmJ5dGVzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTWFwcGVk
TWVtb3J5UG9vbDsKLQotICAgIE1hcHBlZE1lbW9yeSgpCi0gICAgICAgIDogZmlsZSgwKQotICAg
ICAgICAsIG1hcHBlZEJ5dGVzKDApCi0gICAgICAgICwgZGF0YVNpemUoMCkKLSAgICB7Ci0gICAg
fQotCi0gICAgdm9pZCBtYXJrVXNlZCgpIHsgZGF0YVB0ci0+aXNGcmVlID0gZmFsc2U7IH0KLQot
ICAgIHNpemVfdCBtYXBTaXplKCkgY29uc3QgeyByZXR1cm4gZGF0YVNpemUgKyBzaXplb2YoRGF0
YSk7IH0KLSAgICBib29sIGlzRnJlZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGFQdHItPmlzRnJlZTsg
fQotCi0gICAgc3RydWN0IERhdGEgewotICAgICAgICB1aW50MzJfdCBpc0ZyZWU7IC8vIGtlZXAg
Ynl0ZXMgYWxpZ25lZAotICAgICAgICB1Y2hhciBieXRlc1tdOwotICAgIH07Ci0KLSAgICBRRmls
ZSogZmlsZTsKLSAgICBRU3RyaW5nIGZpbGVOYW1lOwotICAgIHVuaW9uIHsKLSAgICAgICAgdWNo
YXIqIG1hcHBlZEJ5dGVzOwotICAgICAgICBEYXRhKiBkYXRhUHRyOwotICAgIH07Ci0gICAgc2l6
ZV90IGRhdGFTaXplOwotfTsKLQotY2xhc3MgTWFwcGVkTWVtb3J5UG9vbCA6IFFPYmplY3Qgewot
ICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgc3RhdGljIE1hcHBlZE1lbW9yeVBvb2wqIGluc3Rh
bmNlKCk7Ci0KLSAgICBNYXBwZWRNZW1vcnkqIG1hcE1lbW9yeShzaXplX3Qgc2l6ZSk7Ci0gICAg
TWFwcGVkTWVtb3J5KiBtYXBGaWxlKFFTdHJpbmcgZmlsZU5hbWUsIHNpemVfdCBzaXplKTsKLQot
cHJpdmF0ZToKLSAgICBNYXBwZWRNZW1vcnlQb29sKCkgeyB9Ci0gICAgfk1hcHBlZE1lbW9yeVBv
b2woKTsKLQotICAgIHN0YXRpYyBNYXBwZWRNZW1vcnlQb29sKiB0aGVJbnN0YW5jZTsKLQotICAg
IFZlY3RvcjxNYXBwZWRNZW1vcnk+IG1fcG9vbDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jZW5kaWYgLy8gTWFwcGVkTWVtb3J5UG9vbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAKaW5kZXggZjVmZWNmYy4uMmU2MTQxZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcApAQCAtMjksMTM5
ICsyOSwxODEgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgogI2luY2x1ZGUgIkFy
Z3VtZW50RW5jb2Rlci5oIgotI2luY2x1ZGUgIkNsZWFudXBIYW5kbGVyLmgiCiAjaW5jbHVkZSAi
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8UURpcj4KKyNpbmNsdWRlIDxlcnJu
by5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8
c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5o
PgogI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+Ci0jaW5j
bHVkZSA8UUxhdGluMVN0cmluZz4KLSNpbmNsdWRlIDxRU2hhcmVkTWVtb3J5PgotI2luY2x1ZGUg
PFFTdHJpbmc+Ci0jaW5jbHVkZSA8UVV1aWQ+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
ICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIFNo
YXJlZE1lbW9yeTo6SGFuZGxlOjpIYW5kbGUoKQotICAgIDogbV9rZXkoKQorICAgIDogbV9maWxl
RGVzY3JpcHRvcigtMSkKICAgICAsIG1fc2l6ZSgwKQogewogfQogCiBTaGFyZWRNZW1vcnk6Okhh
bmRsZTo6fkhhbmRsZSgpCiB7CisgICAgaWYgKCFpc051bGwoKSkKKyAgICAgICAgd2hpbGUgKGNs
b3NlKG1fZmlsZURlc2NyaXB0b3IpID09IC0xICYmIGVycm5vID09IEVJTlRSKSB7IH0KIH0KIAog
Ym9vbCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6aXNOdWxsKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9rZXkuaXNOdWxsKCk7CisgICAgcmV0dXJuIG1fZmlsZURlc2NyaXB0b3IgPT0gLTE7CiB9CiAK
IHZvaWQgU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29k
ZXIqIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlVUludDY0KG1fc2l6ZSk7
Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKG1fa2V5KTsKLSAgICBtX2tleSA9IFN0cmluZygpOworICAg
IEFTU0VSVCghaXNOdWxsKCkpOworCisgICAgZW5jb2Rlci0+ZW5jb2RlKHJlbGVhc2VUb0F0dGFj
aG1lbnQoKSk7CiB9CiAKIGJvb2wgU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmRlY29kZShDb3JlSVBD
OjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEhhbmRsZSYgaGFuZGxlKQogewogICAgIEFTU0VS
VF9BUkcoaGFuZGxlLCAhaGFuZGxlLm1fc2l6ZSk7Ci0gICAgQVNTRVJUX0FSRyhoYW5kbGUsIGhh
bmRsZS5tX2tleS5pc051bGwoKSk7CisgICAgQVNTRVJUX0FSRyhoYW5kbGUsIGhhbmRsZS5pc051
bGwoKSk7CiAKLSAgICB1aW50NjRfdCBzaXplOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlVUlu
dDY0KHNpemUpKQorICAgIENvcmVJUEM6OkF0dGFjaG1lbnQgYXR0YWNobWVudDsKKyAgICBpZiAo
IWRlY29kZXItPmRlY29kZShhdHRhY2htZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgU3RyaW5nIGtleTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZShrZXkpKQotICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBoYW5kbGUuYWRvcHRGcm9tQXR0YWNobWVudChhdHRhY2htZW50LnJl
bGVhc2VGaWxlRGVzY3JpcHRvcigpLCBhdHRhY2htZW50LnNpemUoKSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CiAKLSAgICBoYW5kbGUubV9zaXplID0gc2l6ZTsKLSAgICBoYW5kbGUubV9rZXkgPSBr
ZXk7CitDb3JlSVBDOjpBdHRhY2htZW50IFNoYXJlZE1lbW9yeTo6SGFuZGxlOjpyZWxlYXNlVG9B
dHRhY2htZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKIAotICAgIHJldHVy
biB0cnVlOworICAgIGludCB0ZW1wID0gbV9maWxlRGVzY3JpcHRvcjsKKyAgICBtX2ZpbGVEZXNj
cmlwdG9yID0gLTE7CisgICAgcmV0dXJuIENvcmVJUEM6OkF0dGFjaG1lbnQodGVtcCwgbV9zaXpl
KTsKIH0KIAotc3RhdGljIFFTdHJpbmcgY3JlYXRlVW5pcXVlS2V5KCkKK3ZvaWQgU2hhcmVkTWVt
b3J5OjpIYW5kbGU6OmFkb3B0RnJvbUF0dGFjaG1lbnQoaW50IGZpbGVEZXNjcmlwdG9yLCBzaXpl
X3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gUUxhdGluMVN0cmluZygiUVdLU2hhcmVkTWVtb3J5S2V5
IikgKyBRVXVpZDo6Y3JlYXRlVXVpZCgpLnRvU3RyaW5nKCk7CisgICAgQVNTRVJUKCFtX3NpemUp
OworICAgIEFTU0VSVChpc051bGwoKSk7CisKKyAgICBtX2ZpbGVEZXNjcmlwdG9yID0gZmlsZURl
c2NyaXB0b3I7CisgICAgbV9zaXplID0gc2l6ZTsKIH0KIAogUGFzc1JlZlB0cjxTaGFyZWRNZW1v
cnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNpemVfdCBzaXplKQogewotICAgIFJlZlB0cjxTaGFy
ZWRNZW1vcnk+IHNoYXJlZE1lbW9yeShhZG9wdFJlZihuZXcgU2hhcmVkTWVtb3J5KSk7Ci0gICAg
UVNoYXJlZE1lbW9yeSogaW1wbCA9IG5ldyBRU2hhcmVkTWVtb3J5KGNyZWF0ZVVuaXF1ZUtleSgp
KTsKLSAgICBib29sIGNyZWF0ZWQgPSBpbXBsLT5jcmVhdGUoc2l6ZSk7Ci0gICAgQVNTRVJUX1VO
VVNFRChjcmVhdGVkLCBjcmVhdGVkKTsKKyAgICBRU3RyaW5nIHRlbXBOYW1lID0gUURpcjo6dGVt
cCgpLmZpbGVQYXRoKCJxd2tzaG0uWFhYWFhYIik7CisgICAgUUJ5dGVBcnJheSB0ZW1wTmFtZUNT
VFIgPSB0ZW1wTmFtZS50b0xvY2FsOEJpdCgpOworICAgIGNoYXIqIHRlbXBOYW1lQyA9IHRlbXBO
YW1lQ1NUUi5kYXRhKCk7CisKKyAgICBpbnQgZmlsZURlc2NyaXB0b3I7CisgICAgd2hpbGUgKChm
aWxlRGVzY3JpcHRvciA9IG1rb3N0ZW1wKHRlbXBOYW1lQywgT19DUkVBVCB8IE9fQ0xPRVhFQyB8
IE9fUkRXUikpID09IC0xKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgIH0KIAotICAgIHNoYXJlZE1lbW9yeS0+bV9pbXBsID0gaW1wbDsK
LSAgICBzaGFyZWRNZW1vcnktPm1fc2l6ZSA9IHNpemU7Ci0gICAgc2hhcmVkTWVtb3J5LT5tX2Rh
dGEgPSBpbXBsLT5kYXRhKCk7CisgICAgd2hpbGUgKGZ0cnVuY2F0ZShmaWxlRGVzY3JpcHRvciwg
c2l6ZSkgPT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAg
ICB3aGlsZSAoY2xvc2UoZmlsZURlc2NyaXB0b3IpID09IC0xICYmIGVycm5vID09IEVJTlRSKSB7
IH0KKyAgICAgICAgICAgIHVubGluayh0ZW1wTmFtZUMpOworICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkKiBkYXRhID0gbW1hcCgwLCBzaXplLCBQUk9U
X1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmaWxlRGVzY3JpcHRvciwgMCk7CisgICAg
aWYgKGRhdGEgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICB3aGlsZSAoY2xvc2UoZmlsZURlc2Ny
aXB0b3IpID09IC0xICYmIGVycm5vID09IEVJTlRSKSB7IH0KKyAgICAgICAgdW5saW5rKHRlbXBO
YW1lQyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KIAotICAgIC8vIERvIG5vdCBsZWF2ZSB0
aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IGJlaGluZC4KLSAgICBDbGVhbnVwSGFuZGxlcjo6aW5z
dGFuY2UoKS0+bWFya0ZvckNsZWFudXAoaW1wbCk7CisgICAgdW5saW5rKHRlbXBOYW1lQyk7CiAK
LSAgICByZXR1cm4gc2hhcmVkTWVtb3J5LnJlbGVhc2UoKTsKKyAgICBSZWZQdHI8U2hhcmVkTWVt
b3J5PiBpbnN0YW5jZSA9IGFkb3B0UmVmKG5ldyBTaGFyZWRNZW1vcnkoKSk7CisgICAgaW5zdGFu
Y2UtPm1fZGF0YSA9IGRhdGE7CisgICAgaW5zdGFuY2UtPm1fZmlsZURlc2NyaXB0b3IgPSBmaWxl
RGVzY3JpcHRvcjsKKyAgICBpbnN0YW5jZS0+bV9zaXplID0gc2l6ZTsKKyAgICByZXR1cm4gaW5z
dGFuY2UucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIFFTaGFyZWRNZW1vcnk6OkFjY2Vz
c01vZGUgYWNjZXNzTW9kZShTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb24gcHJvdGVjdGlvbikKK3N0
YXRpYyBpbmxpbmUgaW50IGFjY2Vzc01vZGVNTWFwKFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbiBw
cm90ZWN0aW9uKQogewogICAgIHN3aXRjaCAocHJvdGVjdGlvbikgewogICAgIGNhc2UgU2hhcmVk
TWVtb3J5OjpSZWFkT25seToKLSAgICAgICAgcmV0dXJuIFFTaGFyZWRNZW1vcnk6OlJlYWRPbmx5
OworICAgICAgICByZXR1cm4gUFJPVF9SRUFEOwogICAgIGNhc2UgU2hhcmVkTWVtb3J5OjpSZWFk
V3JpdGU6Ci0gICAgICAgIHJldHVybiBRU2hhcmVkTWVtb3J5OjpSZWFkV3JpdGU7CisgICAgICAg
IHJldHVybiBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBRU2hhcmVkTWVtb3J5OjpSZWFkV3JpdGU7CisgICAgcmV0
dXJuIFBST1RfUkVBRCB8IFBST1RfV1JJVEU7CiB9CiAKIFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5
PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShjb25zdCBIYW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBw
cm90ZWN0aW9uKQogewotICAgIGlmIChoYW5kbGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiAw
OworICAgIEFTU0VSVCghaGFuZGxlLmlzTnVsbCgpKTsKIAotICAgIFFTaGFyZWRNZW1vcnkqIGlt
cGwgPSBuZXcgUVNoYXJlZE1lbW9yeShRU3RyaW5nKGhhbmRsZS5tX2tleSkpOwotICAgIGJvb2wg
YXR0YWNoZWQgPSBpbXBsLT5hdHRhY2goYWNjZXNzTW9kZShwcm90ZWN0aW9uKSk7Ci0gICAgaWYg
KCFhdHRhY2hlZCkgewotICAgICAgICBkZWxldGUgaW1wbDsKKyAgICB2b2lkKiBkYXRhID0gbW1h
cCgwLCBoYW5kbGUubV9zaXplLCBhY2Nlc3NNb2RlTU1hcChwcm90ZWN0aW9uKSwgTUFQX1NIQVJF
RCwgaGFuZGxlLm1fZmlsZURlc2NyaXB0b3IsIDApOworICAgIGlmIChkYXRhID09IE1BUF9GQUlM
RUQpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+
IHNoYXJlZE1lbW9yeShhZG9wdFJlZihuZXcgU2hhcmVkTWVtb3J5KSk7Ci0gICAgc2hhcmVkTWVt
b3J5LT5tX2ltcGwgPSBpbXBsOwotICAgIEFTU0VSVChoYW5kbGUubV9zaXplID09IGltcGwtPnNp
emUoKSk7Ci0gICAgc2hhcmVkTWVtb3J5LT5tX3NpemUgPSBoYW5kbGUubV9zaXplOwotICAgIHNo
YXJlZE1lbW9yeS0+bV9kYXRhID0gaW1wbC0+ZGF0YSgpOwogCi0gICAgLy8gRG8gbm90IGxlYXZl
IHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgYmVoaW5kLgotICAgIENsZWFudXBIYW5kbGVyOjpp
bnN0YW5jZSgpLT5tYXJrRm9yQ2xlYW51cChpbXBsKTsKLQotICAgIHJldHVybiBzaGFyZWRNZW1v
cnkucmVsZWFzZSgpOworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IGluc3RhbmNlID0gYWRvcHRS
ZWYobmV3IFNoYXJlZE1lbW9yeSgpKTsKKyAgICBpbnN0YW5jZS0+bV9kYXRhID0gZGF0YTsKKyAg
ICBpbnN0YW5jZS0+bV9maWxlRGVzY3JpcHRvciA9IGhhbmRsZS5tX2ZpbGVEZXNjcmlwdG9yOwor
ICAgIGluc3RhbmNlLT5tX3NpemUgPSBoYW5kbGUubV9zaXplOworICAgIGhhbmRsZS5tX2ZpbGVE
ZXNjcmlwdG9yID0gLTE7CisgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCiBTaGFyZWRNZW1vcnk6
On5TaGFyZWRNZW1vcnkoKQogewotICAgIGlmIChDbGVhbnVwSGFuZGxlcjo6aW5zdGFuY2UoKS0+
aGFzU3RhcnRlZERlbGV0aW5nKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBtdW5tYXAobV9kYXRh
LCBtX3NpemUpOworICAgIHdoaWxlIChjbG9zZShtX2ZpbGVEZXNjcmlwdG9yKSA9PSAtMSAmJiBl
cnJubyA9PSBFSU5UUikgeyB9Cit9CiAKLSAgICBDbGVhbnVwSGFuZGxlcjo6aW5zdGFuY2UoKS0+
dW5tYXJrKG1faW1wbCk7Ci0gICAgZGVsZXRlIG1faW1wbDsKK3N0YXRpYyBpbmxpbmUgaW50IGFj
Y2Vzc01vZGVGaWxlKFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbiBwcm90ZWN0aW9uKQoreworICAg
IHN3aXRjaCAocHJvdGVjdGlvbikgeworICAgIGNhc2UgU2hhcmVkTWVtb3J5OjpSZWFkT25seToK
KyAgICAgICAgcmV0dXJuIE9fUkRPTkxZOworICAgIGNhc2UgU2hhcmVkTWVtb3J5OjpSZWFkV3Jp
dGU6CisgICAgICAgIHJldHVybiBPX1JEV1I7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIE9fUkRXUjsKIH0KIAogYm9vbCBTaGFyZWRNZW1vcnk6OmNyZWF0
ZUhhbmRsZShIYW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwcm90ZWN0aW9uKQogewotICAgIEFT
U0VSVF9BUkcoaGFuZGxlLCBoYW5kbGUubV9rZXkuaXNOdWxsKCkpOwogICAgIEFTU0VSVF9BUkco
aGFuZGxlLCAhaGFuZGxlLm1fc2l6ZSk7CisgICAgQVNTRVJUX0FSRyhoYW5kbGUsIGhhbmRsZS5p
c051bGwoKSk7CisKKyAgICBpbnQgZHVwbGljYXRlZEhhbmRsZTsKKyAgICB3aGlsZSAoKGR1cGxp
Y2F0ZWRIYW5kbGUgPSBkdXAobV9maWxlRGVzY3JpcHRvcikpID09IC0xKSB7CisgICAgICAgIGlm
IChlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBRU3RyaW5n
IGtleSA9IG1faW1wbC0+a2V5KCk7Ci0gICAgaWYgKGtleS5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGhhbmRsZS5tX2tleSA9IFN0cmluZyhrZXkpOworICAgIHdoaWxlICgo
ZmNudGwoZHVwbGljYXRlZEhhbmRsZSwgRl9TRVRGRCwgIE9fQ0xPRVhFQyB8IGFjY2Vzc01vZGVG
aWxlKHByb3RlY3Rpb24pKSA9PSAtMSkpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHdoaWxlIChj
bG9zZShkdXBsaWNhdGVkSGFuZGxlKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikgeyB9CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgaGFuZGxlLm1fZmls
ZURlc2NyaXB0b3IgPSBkdXBsaWNhdGVkSGFuZGxlOwogICAgIGhhbmRsZS5tX3NpemUgPSBtX3Np
emU7Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vcXQvV29ya1F1ZXVlUXQuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQv
V29ya1F1ZXVlUXQuY3BwCmluZGV4IDI3MTk4NGYuLjk5Y2U5NmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
IDxRTG9jYWxTb2NrZXQ+CiAjaW5jbHVkZSA8UU9iamVjdD4KICNpbmNsdWRlIDxRVGhyZWFkPgor
I2luY2x1ZGUgPFFQcm9jZXNzPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgogCkBAIC03NSwzMiArNzYsMTcgQEAgcHVibGljOgogICAgIFdv
cmtJdGVtKiBtX3dvcmtJdGVtOwogfTsKIAotdm9pZCBXb3JrUXVldWU6OmNvbm5lY3RTaWduYWwo
UU9iamVjdCogbywgY29uc3QgY2hhciogc2lnbmFsLCBQYXNzT3duUHRyPFdvcmtJdGVtPiB3b3Jr
SXRlbSkKLXsKLSAgICBXb3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVl
dWU6OldvcmtJdGVtUXQodGhpcywgbywgc2lnbmFsLCB3b3JrSXRlbS5sZWFrUHRyKCkpOwotICAg
IGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7Ci0gICAgbV9zaWduYWxMaXN0ZW5l
cnMuYWRkKG8sIGl0ZW1RdCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNjb25uZWN0U2lnbmFs
KFFPYmplY3QqIG8sIGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgSGFzaE1hcDxRT2JqZWN0Kiwg
V29ya0l0ZW1RdCo+OjppdGVyYXRvciBpdCA9IG1fc2lnbmFsTGlzdGVuZXJzLmZpbmQobyk7Ci0g
ICAgZm9yICg7IGl0ICE9IG1fc2lnbmFsTGlzdGVuZXJzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
IGlmIChzdHJjbXAoaXQtPnNlY29uZC0+bV9zaWduYWwsIG5hbWUpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kOwotICAgICAgICBtX3NpZ25hbExpc3Rl
bmVycy5yZW1vdmUoaXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIFdvcmtR
dWV1ZTo6bW92ZVNvY2tldFRvV29ya1RocmVhZChRTG9jYWxTb2NrZXQqIHNvY2tldCkKK1FTb2Nr
ZXROb3RpZmllciogV29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgc29j
a2V0RGVzY3JpcHRvciwgUVNvY2tldE5vdGlmaWVyOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8V29y
a0l0ZW0+IHdvcmtJdGVtKQogewogICAgIEFTU0VSVChtX3dvcmtUaHJlYWQpOwotICAgIEFTU0VS
VChzb2NrZXQpOwogCi0gICAgc29ja2V0LT5zZXRQYXJlbnQoMCk7Ci0gICAgc29ja2V0LT5tb3Zl
VG9UaHJlYWQobV93b3JrVGhyZWFkKTsKKyAgICBRU29ja2V0Tm90aWZpZXIqIG5vdGlmaWVyID0g
bmV3IFFTb2NrZXROb3RpZmllcihzb2NrZXREZXNjcmlwdG9yLCB0eXBlLCAwKTsKKyAgICBub3Rp
Zmllci0+c2V0RW5hYmxlZChmYWxzZSk7CisgICAgbm90aWZpZXItPm1vdmVUb1RocmVhZChtX3dv
cmtUaHJlYWQpOworICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtR
dWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBub3RpZmllciwgU0lHTkFMKGFjdGl2YXRlZChpbnQpKSwg
d29ya0l0ZW0ubGVha1B0cigpKTsKKyAgICBpdGVtUXQtPm1vdmVUb1RocmVhZChtX3dvcmtUaHJl
YWQpOworICAgIG5vdGlmaWVyLT5zZXRFbmFibGVkKHRydWUpOworICAgIHJldHVybiBub3RpZmll
cjsKIH0KIAogdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKikK
QEAgLTEyOSw0ICsxMTUsMTAgQEAgdm9pZCBXb3JrUXVldWU6OnNjaGVkdWxlV29ya0FmdGVyRGVs
YXkoUGFzc093blB0cjxXb3JrSXRlbT4sIGRvdWJsZSkKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCit2b2lkIFdvcmtRdWV1ZTo6c2NoZWR1bGVXb3JrT25UZXJtaW5hdGlvbihXZWJLaXQ6OlBs
YXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgcHJvY2VzcywgUGFzc093blB0cjxXb3JrSXRlbT4gd29y
a0l0ZW0pCit7CisgICAgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1
ZXVlOjpXb3JrSXRlbVF0KHRoaXMsIHByb2Nlc3MsIFNJR05BTChmaW5pc2hlZChpbnQsIFFQcm9j
ZXNzOjpFeGl0U3RhdHVzKSksIHdvcmtJdGVtLmxlYWtQdHIoKSk7CisgICAgaXRlbVF0LT5tb3Zl
VG9UaHJlYWQobV93b3JrVGhyZWFkKTsKK30KKwogI2luY2x1ZGUgIldvcmtRdWV1ZVF0Lm1vYyIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvVXBkYXRlQ2h1bmsuY3BwCmluZGV4IDRkOGU2MmQuLjJm
OWJlNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9VcGRhdGVDaHVuay5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNwcApAQCAtMjks
NyArMjksNiBAQAogCiAjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCiAjaW5jbHVkZSAiQXJn
dW1lbnRFbmNvZGVyLmgiCi0jaW5jbHVkZSAiTWFwcGVkTWVtb3J5UG9vbC5oIgogI2luY2x1ZGUg
IldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFFJT0RldmljZT4KICNpbmNsdWRl
IDxRSW1hZ2U+CkBAIC00MywyOCArNDIsMzUgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBVcGRhdGVDaHVuazo6VXBkYXRlQ2h1bmsoKQotICAgIDogbV9tYXBw
ZWRNZW1vcnkoMCkKIHsKIH0KIAogVXBkYXRlQ2h1bms6OlVwZGF0ZUNodW5rKGNvbnN0IEludFJl
Y3QmIHJlY3QpCiAgICAgOiBtX3JlY3QocmVjdCkKLSAgICAsIG1fbWFwcGVkTWVtb3J5KE1hcHBl
ZE1lbW9yeVBvb2w6Omluc3RhbmNlKCktPm1hcE1lbW9yeShzaXplKCkpKQorICAgICwgbV9zaGFy
ZWRNZW1vcnkoU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZSgpKSkKIHsKIH0KIAogVXBkYXRlQ2h1
bms6On5VcGRhdGVDaHVuaygpCiB7Ci0gICAgaWYgKG1fbWFwcGVkTWVtb3J5KQotICAgICAgICBt
X21hcHBlZE1lbW9yeS0+bWFya0ZyZWUoKTsKIH0KIAogdm9pZCBVcGRhdGVDaHVuazo6ZW5jb2Rl
KENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVy
LT5lbmNvZGUobV9yZWN0KTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoU3RyaW5nKG1fbWFwcGVkTWVt
b3J5LT5tYXBwZWRGaWxlTmFtZSgpKSk7CisgICAgaWYgKCFtX3NoYXJlZE1lbW9yeSkgeworICAg
ICAgICBlbmNvZGVyLT5lbmNvZGUoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOworICAgIGlmIChtX3NoYXJlZE1lbW9yeS0+
Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSkpIHsKKyAgICAgICAg
ZW5jb2Rlci0+ZW5jb2RlKHRydWUpOworICAgICAgICBlbmNvZGVyLT5lbmNvZGUoaGFuZGxlKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGZhbHNlKTsKIAotICAgIG1fbWFw
cGVkTWVtb3J5ID0gMDsKKyAgICBtX3NoYXJlZE1lbW9yeSA9IDA7CiB9CiAKIGJvb2wgVXBkYXRl
Q2h1bms6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFVwZGF0ZUNo
dW5rJiBjaHVuaykKQEAgLTc0LDE2ICs4MCwyMyBAQCBib29sIFVwZGF0ZUNodW5rOjpkZWNvZGUo
Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBVcGRhdGVDaHVuayYgY2h1bmspCiAg
ICAgSW50UmVjdCByZWN0OwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJlY3QpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CisKICAgICBjaHVuay5tX3JlY3QgPSByZWN0OwogCi0gICAgaWYgKGNo
dW5rLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7IC8vIFN1Y2Nlc3NmdWxseSBkZWNv
ZGVkIGVtcHR5IGNodW5rLgorICAgIGJvb2wgaGFzU2hhcmVkTWVtb3J5OworICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKGhhc1NoYXJlZE1lbW9yeSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIFN0cmluZyBmaWxlTmFtZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZShmaWxlTmFtZSkp
CisgICAgaWYgKCFoYXNTaGFyZWRNZW1vcnkpIHsKKyAgICAgICAgY2h1bmsubV9zaGFyZWRNZW1v
cnkgPSAwOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBTaGFyZWRNZW1vcnk6
OkhhbmRsZSBoYW5kbGU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFuZGxlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY2h1bmsubV9tYXBwZWRNZW1vcnkgPSBNYXBwZWRNZW1v
cnlQb29sOjppbnN0YW5jZSgpLT5tYXBGaWxlKGZpbGVOYW1lLCBjaHVuay5zaXplKCkpOworICAg
IGNodW5rLm1fc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoaGFuZGxlLCBTaGFy
ZWRNZW1vcnk6OlJlYWRPbmx5KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTAxLDcgKzEx
NCwxMCBAQCBzaXplX3QgVXBkYXRlQ2h1bms6OnNpemUoKSBjb25zdAogCiBRSW1hZ2UgVXBkYXRl
Q2h1bms6OmNyZWF0ZUltYWdlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9tYXBwZWRNZW1vcnkp
OworICAgIEFTU0VSVChtX3NoYXJlZE1lbW9yeSk7CisgICAgaWYgKCFtX3NoYXJlZE1lbW9yeSkK
KyAgICAgICAgcmV0dXJuIFFJbWFnZSgpOworCiAgICAgUUltYWdlOjpGb3JtYXQgZm9ybWF0Owog
ICAgIGludCBicHA7CiAgICAgaWYgKFFQaXhtYXA6OmRlZmF1bHREZXB0aCgpID09IDE2KSB7CkBA
IC0xMTIsNyArMTI4LDcgQEAgUUltYWdlIFVwZGF0ZUNodW5rOjpjcmVhdGVJbWFnZSgpIGNvbnN0
CiAgICAgICAgIGJwcCA9IDQ7CiAgICAgfQogCi0gICAgcmV0dXJuIFFJbWFnZShtX21hcHBlZE1l
bW9yeS0+ZGF0YSgpLCBtX3JlY3Qud2lkdGgoKSwgbV9yZWN0LmhlaWdodCgpLCAobV9yZWN0Lndp
ZHRoKCkgKiBicHAgKyAzKSAmIH4weDMsIGZvcm1hdCk7CisgICAgcmV0dXJuIFFJbWFnZShyZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihtX3NoYXJlZE1lbW9yeS0+ZGF0YSgpKSwgbV9y
ZWN0LndpZHRoKCksIG1fcmVjdC5oZWlnaHQoKSwgKG1fcmVjdC53aWR0aCgpICogYnBwICsgMykg
JiB+MHgzLCBmb3JtYXQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9VcGRhdGVDaHVuay5oIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL3F0L1VwZGF0ZUNodW5rLmgKaW5kZXggZjUwNmJhNy4uNjY0MDU2YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmgKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1
ZGUgPFFJbWFnZT4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlICJTaGFy
ZWRNZW1vcnkuaCIKIAogbmFtZXNwYWNlIENvcmVJUEMgewogY2xhc3MgQXJndW1lbnRFbmNvZGVy
OwpAQCAtMzcsOCArMzgsNiBAQCBjbGFzcyBBcmd1bWVudERlY29kZXI7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1jbGFzcyBNYXBwZWRNZW1vcnk7Ci0KIGNsYXNzIFVwZGF0ZUNodW5rIHsKIHB1
YmxpYzoKICAgICBVcGRhdGVDaHVuaygpOwpAQCAtNTgsNyArNTcsNyBAQCBwcml2YXRlOgogCiAg
ICAgV2ViQ29yZTo6SW50UmVjdCBtX3JlY3Q7CiAKLSAgICBtdXRhYmxlIE1hcHBlZE1lbW9yeSog
bV9tYXBwZWRNZW1vcnk7CisgICAgbXV0YWJsZSBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtX3NoYXJl
ZE1lbW9yeTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oCmluZGV4IDMxZWZkNGQu
Ljc5ZDEyNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Q
cm9jZXNzTGF1bmNoZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIv
UHJvY2Vzc0xhdW5jaGVyLmgKQEAgLTcyLDExICs3Miw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBib29sIGdldFByb2Nlc3NUeXBlRnJvbVN0cmluZyhjb25zdCBjaGFyKiwgUHJvY2Vzc1R5cGUm
KTsKIAotI2lmIFBMQVRGT1JNKFFUKQotICAgIGZyaWVuZCBjbGFzcyBQcm9jZXNzTGF1bmNoZXJI
ZWxwZXI7Ci0gICAgc3RhdGljIFFMb2NhbFNvY2tldCogdGFrZVBlbmRpbmdDb25uZWN0aW9uKCk7
Ci0jZW5kaWYKLQogcHJpdmF0ZToKICAgICBQcm9jZXNzTGF1bmNoZXIoQ2xpZW50KiwgY29uc3Qg
TGF1bmNoT3B0aW9ucyYgbGF1bmNoT3B0aW9ucyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCmluZGV4
IDdkZmY4OTQuLmJhYTVlZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9M
YXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcApAQCAtMjcsMTcgKzI3LDkg
QEAKICNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24u
aCIKLSNpbmNsdWRlICJDbGVhbnVwSGFuZGxlci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAjaW5jbHVkZSAiUnVuTG9vcC5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNs
dWRlIDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQogI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KICNpbmNsdWRlIDxRRGVidWc+CiAjaW5jbHVkZSA8
UUZpbGU+CkBAIC00NSw1MiArMzcsMjcgQEAKICNpbmNsdWRlIDxRTWV0YVR5cGU+CiAjaW5jbHVk
ZSA8UVByb2Nlc3M+CiAjaW5jbHVkZSA8UVN0cmluZz4KLQogI2luY2x1ZGUgPFF0Q29yZS9xZ2xv
YmFsLmg+Ci0KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8c3RyaW5nPgogI2lu
Y2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRl
IDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorI2lmIGRlZmluZWQgUV9PU19VTklYCisjaW5jbHVkZSA8c3lzL3ByY3Rs
Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBQcm9jZXNzTGF1bmNoZXJIZWxwZXIg
OiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICB+UHJvY2Vzc0xh
dW5jaGVySGVscGVyKCk7Ci0gICAgdm9pZCBsYXVuY2goV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXIq
KTsKLSAgICBRTG9jYWxTb2NrZXQqIHRha2VQZW5kaW5nQ29ubmVjdGlvbigpOwotICAgIHN0YXRp
YyBQcm9jZXNzTGF1bmNoZXJIZWxwZXIqIGluc3RhbmNlKCk7Ci0KLSAgICBjb25zdCBRU3RyaW5n
IHNlcnZlck5hbWUoKSBjb25zdCB7IHJldHVybiBtX3NlcnZlci5zZXJ2ZXJOYW1lKCk7IH0KLQot
cHJpdmF0ZToKLSAgICBQcm9jZXNzTGF1bmNoZXJIZWxwZXIoKTsKLSAgICBRTG9jYWxTZXJ2ZXIg
bV9zZXJ2ZXI7Ci0gICAgUUxpc3Q8V29ya0l0ZW0qPiBtX2l0ZW1zOwotCi0gICAgUV9TTE9UIHZv
aWQgbmV3Q29ubmVjdGlvbigpOwotfTsKLQotUV9HTE9CQUxfU1RBVElDKFdURjo6SGFzaFNldDxR
UHJvY2Vzcyo+LCBwcm9jZXNzZXMpOwotCi1zdGF0aWMgdm9pZCBjbGVhbnVwQXRFeGl0KCkKLXsK
LSAgICAvLyBUZXJtaW5hdGUgb3VyIHdlYiBwcm9jZXNzKGVzKS4KLSAgICBXVEY6Okhhc2hTZXQ8
UVByb2Nlc3MqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvY2Vzc2VzKCktPmVuZCgpOwotICAg
IGZvciAoV1RGOjpIYXNoU2V0PFFQcm9jZXNzKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcHJvY2Vz
c2VzKCktPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBRUHJvY2VzcyogcHJv
Y2VzcyA9ICppdDsKLSAgICAgICAgcHJvY2Vzcy0+ZGlzY29ubmVjdChwcm9jZXNzKTsKLSAgICAg
ICAgcHJvY2Vzcy0+dGVybWluYXRlKCk7Ci0gICAgICAgIGlmICghcHJvY2Vzcy0+d2FpdEZvckZp
bmlzaGVkKDIwMCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5raWxsKCk7Ci0gICAgfQotCi0gICAg
Ly8gRG8gbm90IGxlYXZlIHRoZSBzb2NrZXQgZmlsZSBiZWhpbmQuCi0gICAgUUxvY2FsU2VydmVy
OjpyZW1vdmVTZXJ2ZXIoUHJvY2Vzc0xhdW5jaGVySGVscGVyOjppbnN0YW5jZSgpLT5zZXJ2ZXJO
YW1lKCkpOwotfQotCiBjbGFzcyBRdFdlYlByb2Nlc3MgOiBwdWJsaWMgUVByb2Nlc3MKIHsKICAg
ICBRX09CSkVDVApAQCAtOTgsMzIgKzY1LDIwIEBAIHB1YmxpYzoKICAgICBRdFdlYlByb2Nlc3Mo
UU9iamVjdCogcGFyZW50ID0gMCkKICAgICAgICAgOiBRUHJvY2VzcyhwYXJlbnQpCiAgICAgewot
ICAgICAgICBzdGF0aWMgYm9vbCBpc1JlZ2lzdGVyZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFp
c1JlZ2lzdGVyZWQpIHsKLSAgICAgICAgICAgIHFSZWdpc3Rlck1ldGFUeXBlPFFQcm9jZXNzOjpQ
cm9jZXNzU3RhdGU+KCJRUHJvY2Vzczo6UHJvY2Vzc1N0YXRlIik7Ci0gICAgICAgICAgICBpc1Jl
Z2lzdGVyZWQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgY29ubmVjdCh0aGlzLCBTSUdO
QUwoc3RhdGVDaGFuZ2VkKFFQcm9jZXNzOjpQcm9jZXNzU3RhdGUpKSwgdGhpcywgU0xPVChwcm9j
ZXNzU3RhdGVDaGFuZ2VkKFFQcm9jZXNzOjpQcm9jZXNzU3RhdGUpKSk7CiAgICAgfQogCi1wcml2
YXRlIHNsb3RzOgotICAgIHZvaWQgcHJvY2Vzc1N0YXRlQ2hhbmdlZChRUHJvY2Vzczo6UHJvY2Vz
c1N0YXRlIHN0YXRlKTsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgc2V0dXBDaGlsZFBy
b2Nlc3MoKTsKIH07CiAKLXZvaWQgUXRXZWJQcm9jZXNzOjpwcm9jZXNzU3RhdGVDaGFuZ2VkKFFQ
cm9jZXNzOjpQcm9jZXNzU3RhdGUgc3RhdGUpCit2b2lkIFF0V2ViUHJvY2Vzczo6c2V0dXBDaGls
ZFByb2Nlc3MoKQogewotICAgIFFQcm9jZXNzKiBwcm9jZXNzID0gcW9iamVjdF9jYXN0PFFQcm9j
ZXNzKj4oc2VuZGVyKCkpOwotICAgIGlmICghcHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKHN0YXRlID09IFFQcm9jZXNzOjpSdW5uaW5nKQotICAgICAgICBwcm9jZXNzZXMoKS0+
YWRkKHByb2Nlc3MpOwotICAgIGVsc2UgaWYgKHN0YXRlID09IFFQcm9jZXNzOjpOb3RSdW5uaW5n
KQotICAgICAgICBwcm9jZXNzZXMoKS0+cmVtb3ZlKHByb2Nlc3MpOworI2lmIGRlZmluZWQgUV9P
U19VTklYCisgICAgcHJjdGwoUFJfU0VUX1BERUFUSFNJRywgU0lHS0lMTCk7CisjZW5kaWYKIH0K
IAotdm9pZCBQcm9jZXNzTGF1bmNoZXJIZWxwZXI6OmxhdW5jaChXZWJLaXQ6OlByb2Nlc3NMYXVu
Y2hlciogbGF1bmNoZXIpCit2b2lkIFByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2VzcygpCiB7
CiAgICAgUVN0cmluZyBhcHBsaWNhdGlvblBhdGggPSAiJTEgJTIiOwogCkBAIC0xMzMsMTIgKzg4
LDM4IEBAIHZvaWQgUHJvY2Vzc0xhdW5jaGVySGVscGVyOjpsYXVuY2goV2ViS2l0OjpQcm9jZXNz
TGF1bmNoZXIqIGxhdW5jaGVyKQogICAgICAgICBhcHBsaWNhdGlvblBhdGggPSBhcHBsaWNhdGlv
blBhdGguYXJnKCJRdFdlYlByb2Nlc3MiKTsKICAgICB9CiAKLSAgICBRU3RyaW5nIHByb2dyYW0o
YXBwbGljYXRpb25QYXRoLmFyZyhtX3NlcnZlci5zZXJ2ZXJOYW1lKCkpKTsKKyAgICBpbnQgc29j
a2V0c1syXTsKKyAgICBpZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX0RHUkFNLCAwLCBzb2Nr
ZXRzKSA9PSAtMSkgeworICAgICAgICBxRGVidWcoKSA8PCAiQ3JlYXRpb24gb2Ygc29ja2V0IGZh
aWxlZCB3aXRoIGVycm5vOiIgPDwgZXJybm87CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRG9uJ3QgZXhwb3NlIHRoZSB1aSBz
b2NrZXQgdG8gdGhlIHdlYiBwcm9jZXNzCisgICAgd2hpbGUgKGZjbnRsKHNvY2tldHNbMV0sIEZf
U0VURkQsIEZEX0NMT0VYRUMgPT0gLTEpKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikg
eworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB3aGlsZSAo
Y2xvc2Uoc29ja2V0c1swXSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpIHsgfQorICAgICAgICAg
ICAgd2hpbGUgKGNsb3NlKHNvY2tldHNbMV0pID09IC0xICYmIGVycm5vID09IEVJTlRSKSB7IH0K
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFFTdHJpbmcgcHJv
Z3JhbShhcHBsaWNhdGlvblBhdGguYXJnKHNvY2tldHNbMF0pKTsKIAogICAgIFFQcm9jZXNzKiB3
ZWJQcm9jZXNzID0gbmV3IFF0V2ViUHJvY2VzcygpOwogICAgIHdlYlByb2Nlc3MtPnNldFByb2Nl
c3NDaGFubmVsTW9kZShRUHJvY2Vzczo6Rm9yd2FyZGVkQ2hhbm5lbHMpOwogICAgIHdlYlByb2Nl
c3MtPnN0YXJ0KHByb2dyYW0pOwogCisgICAgLy8gRG9uJ3QgZXhwb3NlIHRoZSB3ZWIgc29ja2V0
IHRvIHBvc3NpYmxlIGZ1dHVyZSB3ZWIgcHJvY2Vzc2VzCisgICAgd2hpbGUgKGZjbnRsKHNvY2tl
dHNbMF0sIEZfU0VURkQsIEZEX0NMT0VYRUMpID09IC0xKSB7CisgICAgICAgIGlmIChlcnJubyAh
PSBFSU5UUikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICBkZWxldGUgd2ViUHJvY2VzczsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKwogICAgIGlmICghd2ViUHJvY2Vzcy0+d2FpdEZvclN0YXJ0ZWQoKSkgewogICAgICAgICBx
RGVidWcoKSA8PCAiRmFpbGVkIHRvIHN0YXJ0IiA8PCBwcm9ncmFtOwogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTE0OCw1NSArMTI5LDcgQEAgdm9pZCBQcm9jZXNzTGF1bmNoZXJI
ZWxwZXI6OmxhdW5jaChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlciogbGF1bmNoZXIpCiAKICAgICBz
ZXRwcmlvcml0eShQUklPX1BST0NFU1MsIHdlYlByb2Nlc3MtPnBpZCgpLCAxMCk7CiAKLSAgICBt
X2l0ZW1zLmFwcGVuZChXb3JrSXRlbTo6Y3JlYXRlKGxhdW5jaGVyLCAmV2ViS2l0OjpQcm9jZXNz
TGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3MsIHdlYlByb2Nlc3MsIG1fc2VydmVy
LnNlcnZlck5hbWUoKSkubGVha1B0cigpKTsKLX0KLQotUUxvY2FsU29ja2V0KiBQcm9jZXNzTGF1
bmNoZXJIZWxwZXI6OnRha2VQZW5kaW5nQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fc2Vy
dmVyLm5leHRQZW5kaW5nQ29ubmVjdGlvbigpOwotfQotCi1Qcm9jZXNzTGF1bmNoZXJIZWxwZXI6
On5Qcm9jZXNzTGF1bmNoZXJIZWxwZXIoKQotewotICAgIG1fc2VydmVyLmNsb3NlKCk7Ci19Ci0K
LVByb2Nlc3NMYXVuY2hlckhlbHBlcjo6UHJvY2Vzc0xhdW5jaGVySGVscGVyKCkKLXsKLSAgICBz
cmFuZG9tKHRpbWUoMCkpOwotICAgIGlmICghbV9zZXJ2ZXIubGlzdGVuKCJRdFdlYktpdCIgKyBR
U3RyaW5nOjpudW1iZXIocmFuZG9tKCkpKSkgewotICAgICAgICBxRGVidWcoKSA8PCAiRmFpbGVk
IHRvIGNyZWF0ZSBzZXJ2ZXIgc29ja2V0LiI7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIH0KLSAgICBjb25uZWN0KCZtX3NlcnZlciwgU0lHTkFMKG5ld0Nvbm5lY3Rpb24oKSks
IHRoaXMsIFNMT1QobmV3Q29ubmVjdGlvbigpKSk7Ci19Ci0KLVByb2Nlc3NMYXVuY2hlckhlbHBl
ciogUHJvY2Vzc0xhdW5jaGVySGVscGVyOjppbnN0YW5jZSgpCi17Ci0gICAgc3RhdGljIFByb2Nl
c3NMYXVuY2hlckhlbHBlciogcmVzdWx0ID0gMDsKLSAgICBpZiAoIXJlc3VsdCkgewotICAgICAg
ICByZXN1bHQgPSBuZXcgUHJvY2Vzc0xhdW5jaGVySGVscGVyKCk7Ci0KLSAgICAgICAgLy8gVGhl
IHB1cnBvc2Ugb2YgdGhlIGZvbGxvd2luZyBsaW5lIGlzIHRvIGVuc3VyZSB0aGF0IG91ciBzdGF0
aWMgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBleGl0IGhhbmRsZXIgaXMgaW5zdGFsbGVkLgot
ICAgICAgICBwcm9jZXNzZXMoKS0+Y2xlYXIoKTsKLQotICAgICAgICBhdGV4aXQoY2xlYW51cEF0
RXhpdCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUHJvY2Vzc0xhdW5j
aGVySGVscGVyOjpuZXdDb25uZWN0aW9uKCkKLXsKLSAgICBBU1NFUlQoIW1faXRlbXMuaXNFbXB0
eSgpKTsKLQotICAgIG1faXRlbXNbMF0tPmV4ZWN1dGUoKTsKLSAgICBkZWxldGUgbV9pdGVtc1sw
XTsKLSAgICBtX2l0ZW1zLnBvcF9mcm9udCgpOwotfQotCi12b2lkIFByb2Nlc3NMYXVuY2hlcjo6
bGF1bmNoUHJvY2VzcygpCi17Ci0gICAgUHJvY2Vzc0xhdW5jaGVySGVscGVyOjppbnN0YW5jZSgp
LT5sYXVuY2godGhpcyk7CisgICAgUnVuTG9vcDo6bWFpbigpLT5zY2hlZHVsZVdvcmsoV29ya0l0
ZW06OmNyZWF0ZSh0aGlzLCAmV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5j
aGluZ1Byb2Nlc3MsIHdlYlByb2Nlc3MsIHNvY2tldHNbMV0pKTsKIH0KIAogdm9pZCBQcm9jZXNz
TGF1bmNoZXI6OnRlcm1pbmF0ZVByb2Nlc3MoKQpAQCAtMjA4LDE0ICsxNDEsOSBAQCB2b2lkIFBy
b2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2VzcygpCiAgICAgbV9wcm9jZXNzSWRlbnRpZmll
ci0+dGVybWluYXRlKCk7CiB9CiAKLVFMb2NhbFNvY2tldCogUHJvY2Vzc0xhdW5jaGVyOjp0YWtl
UGVuZGluZ0Nvbm5lY3Rpb24oKQotewotICAgIHJldHVybiBQcm9jZXNzTGF1bmNoZXJIZWxwZXI6
Omluc3RhbmNlKCktPnRha2VQZW5kaW5nQ29ubmVjdGlvbigpOwotfQotCiB2b2lkIFByb2Nlc3NM
YXVuY2hlcjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExhdW5jaGVyUXQuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExhdW5jaGVyUXQuY3BwCmluZGV4IDQ3MWE0
MjQuLjM0NDU4MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hl
ci9xdC9UaHJlYWRMYXVuY2hlclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF1bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJRdC5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgc3RhdGlj
IHZvaWQqIHdlYlRocmVhZEJvZHkodm9pZCogLyogY29udGV4dCAqLykKIAogICAgIC8vIEZJWE1F
OiBXZSBkbyBub3Qgc3VwcG9ydCB0aHJlYWRlZCBtb2RlIGZvciBub3cuCiAKLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKCJmb28iLCBSdW5Mb29wOjpjdXJyZW50KCkpOworICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUoLTEsIFJ1bkxvb3A6OmN1cnJlbnQoKSk7
CiAgICAgUnVuTG9vcDo6cnVuKCk7CiAKICAgICByZXR1cm4gMDsKQEAgLTcwLDggKzcwLDcgQEAg
Q29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBUaHJlYWRMYXVuY2hlcjo6Y3JlYXRlV2Vi
VGhyZWFkKCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgUVN0cmluZyBzZXJ2ZXJJ
ZGVudGlmaWVyID0gUVN0cmluZzo6bnVtYmVyKGNvbm5lY3Rpb25JZGVudGlmaWVyKTsKLSAgICBy
ZXR1cm4gc2VydmVySWRlbnRpZmllcjsKKyAgICByZXR1cm4gY29ubmVjdGlvbklkZW50aWZpZXI7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBjN2U5MzgyLi42ZDExNWRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtMzQ0LDggKzM0NCwxMCBA
QCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKENvcmVJUEM6OkNvbm5l
Y3Rpb246OklkZW50aWZpZXIgY29ubmVjdAogICAgIG1fY29ubmVjdGlvbiA9IENvcmVJUEM6OkNv
bm5lY3Rpb246OmNyZWF0ZVNlcnZlckNvbm5lY3Rpb24oY29ubmVjdGlvbklkZW50aWZpZXIsIHRo
aXMsIFJ1bkxvb3A6Om1haW4oKSk7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIG1fY29ubmVjdGlv
bi0+c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25NYWNoRXhjZXB0aW9ucygpOworI2VsaWYgUExB
VEZPUk0oUVQpCisgICAgbV9jb25uZWN0aW9uLT5zZXRTaG91bGRDbG9zZUNvbm5lY3Rpb25PblBy
b2Nlc3NUZXJtaW5hdGlvbihwcm9jZXNzSWRlbnRpZmllcigpKTsKICNlbmRpZgotICAgIAorCiAg
ICAgbV9jb25uZWN0aW9uLT5vcGVuKCk7CiAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3BlbmRpbmdNZXNzYWdlcy5zaXplKCk7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvV2ViQ29udGV4dFF0LmNwcAppbmRleCA1YjJjZDg4Li5mNmI4NDZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4dFF0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4dFF0LmNwcApAQCAtMjgsNiArMjgs
NyBAQAogCiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSA8UVByb2Nlc3M+CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCkBAIC00Miw2ICs0Myw3IEBAIFN0cmluZyBXZWJDb250ZXh0Ojph
cHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkKIAogdm9pZCBXZWJDb250ZXh0OjpwbGF0Zm9ybUlu
aXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKQogeworICAg
IHFSZWdpc3Rlck1ldGFUeXBlPFFQcm9jZXNzOjpFeGl0U3RhdHVzPigiUVByb2Nlc3M6OkV4aXRT
dGF0dXMiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnBybyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCmluZGV4IGM0
Nzg2MzYuLjRlNmEwMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCkBAIC0yMzIsNyArMjMyLDYgQEAgSEVBREVS
UyArPSBcCiAgICAgUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmggXAogICAgIFBsYXRmb3JtL1dvcmtJ
dGVtLmggXAogICAgIFBsYXRmb3JtL1dvcmtRdWV1ZS5oIFwKLSAgICBQbGF0Zm9ybS9xdC9NYXBw
ZWRNZW1vcnlQb29sLmggXAogICAgIFNoYXJlZC9BUEkvYy9XS0Jhc2UuaCBcCiAgICAgU2hhcmVk
L0FQSS9jL1dLQ2VydGlmaWNhdGVJbmZvLmggXAogICAgIFNoYXJlZC9BUEkvYy9XS0NvbnRleHRN
ZW51SXRlbS5oIFwKQEAgLTI5Myw3ICsyOTIsNiBAQCBIRUFERVJTICs9IFwKICAgICBTaGFyZWQv
V2ViVVJMUmVzcG9uc2UuaCBcCiAgICAgU2hhcmVkL1dlYlVzZXJDb250ZW50VVJMUGF0dGVybi5o
IFwKICAgICBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5oIFwK
LSAgICBTaGFyZWQvcXQvQ2xlYW51cEhhbmRsZXIuaCBcCiAgICAgU2hhcmVkL3F0L1BsYXRmb3Jt
Q2VydGlmaWNhdGVJbmZvLmggXAogICAgIFNoYXJlZC9xdC9VcGRhdGVDaHVuay5oIFwKICAgICBT
aGFyZWQvcXQvV2ViRXZlbnRGYWN0b3J5UXQuaCBcCkBAIC00NTksMTIgKzQ1NywxMiBAQCBTT1VS
Q0VTICs9IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0JpbmFyeVNlbWFwaG9yZS5jcHAgXAogICAg
IFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAgXAogICAgIFBsYXRmb3JtL0NvcmVJUEMv
RGF0YVJlZmVyZW5jZS5jcHAgXAorICAgIFBsYXRmb3JtL0NvcmVJUEMvcXQvQXR0YWNobWVudFF0
LmNwcCBcCiAgICAgUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3BwIFwKICAgICBQ
bGF0Zm9ybS9Mb2dnaW5nLmNwcCBcCiAgICAgUGxhdGZvcm0vTW9kdWxlLmNwcCBcCiAgICAgUGxh
dGZvcm0vUnVuTG9vcC5jcHAgXAogICAgIFBsYXRmb3JtL1dvcmtRdWV1ZS5jcHAgXAotICAgIFBs
YXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwIFwKICAgICBQbGF0Zm9ybS9xdC9Nb2R1bGVR
dC5jcHAgXAogICAgIFBsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHAgXAogICAgIFBsYXRmb3JtL3F0
L1NoYXJlZE1lbW9yeVF0LmNwcCBcCkBAIC01MTcsNyArNTE1LDYgQEAgU09VUkNFUyArPSBcCiAg
ICAgU2hhcmVkL1dlYlVSTFJlc3BvbnNlLmNwcCBcCiAgICAgU2hhcmVkL1dlYldoZWVsRXZlbnQu
Y3BwIFwKICAgICBTaGFyZWQvcXQvU2hhcmVhYmxlQml0bWFwUXQuY3BwIFwKLSAgICBTaGFyZWQv
cXQvQ2xlYW51cEhhbmRsZXIuY3BwIFwKICAgICBTaGFyZWQvcXQvTmF0aXZlV2ViS2V5Ym9hcmRF
dmVudFF0LmNwcCBcCiAgICAgU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNwcCBcCiAgICAgU2hhcmVk
L3F0L1dlYkNvcmVBcmd1bWVudENvZGVyc1F0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcAppbmRleCBiZDRlMzcwLi4zZTEyMmZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWlu
UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5R
dC5jcHAKQEAgLTE2MCw3ICsxNjAsMTggQEAgUVdFQktJVF9FWFBPUlQgaW50IFdlYlByb2Nlc3NN
YWluUXQoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIFJ1bkxvb3A6OmluaXRpYWxpemVNYWlu
UnVuTG9vcCgpOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBjb25uZWN0aW9uLgotICAgIFFTdHJpbmcg
aWRlbnRpZmllcihhcHAtPmFyZ3VtZW50cygpLnNpemUoKSA+IDEgPyBhcHAtPmFyZ3VtZW50cygp
LmF0KDEpIDogIiIpOworICAgIGlmIChhcHAtPmFyZ3VtZW50cygpLnNpemUoKSA8PSAxKSB7Cisg
ICAgICAgIHFEZWJ1ZygpIDw8ICJFcnJvcjogd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cy4iOwor
ICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBib29sIHdhc051bWJlciA9IGZhbHNlOwor
ICAgIGludCBpZGVudGlmaWVyID0gYXBwLT5hcmd1bWVudHMoKS5hdCgxKS50b0ludCgmd2FzTnVt
YmVyLCAxMCk7CisgICAgaWYgKCF3YXNOdW1iZXIpIHsKKyAgICAgICAgcURlYnVnKCkgPDwgIkVy
cm9yOiBjb25uZWN0aW9uIGlkZW50aWZpZXIgd3JvbmcuIjsKKyAgICAgICAgcmV0dXJuIDE7Cisg
ICAgfQorCiAgICAgV2ViS2l0OjpXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKGlkZW50
aWZpZXIsIFJ1bkxvb3A6Om1haW4oKSk7CiAKICAgICBSdW5Mb29wOjpydW4oKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>