<?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>223732</bug_id>
          
          <creation_ts>2021-03-25 00:27:32 -0700</creation_ts>
          <short_desc>[GPU Process]: Improve getImageData() perf part 2: Use shared memory and a semaphore</short_desc>
          <delta_ts>2021-03-30 00:54:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Canvas</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>220649</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>rniwa</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1743683</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-03-25 00:27:32 -0700</bug_when>
    <thetext>[GPU Process]: Improve getImageData() perf part 2: Use shared memory and a semaphore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743684</commentid>
    <comment_count>1</comment_count>
      <attachid>424220</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-03-25 00:30:09 -0700</bug_when>
    <thetext>Created attachment 424220
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743696</commentid>
    <comment_count>2</comment_count>
      <attachid>424222</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-03-25 01:57:16 -0700</bug_when>
    <thetext>Created attachment 424222
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743909</commentid>
    <comment_count>3</comment_count>
      <attachid>424277</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-03-25 14:00:10 -0700</bug_when>
    <thetext>Created attachment 424277
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744004</commentid>
    <comment_count>4</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-03-25 16:59:13 -0700</bug_when>
    <thetext>42% progression on MotionMark Images on Mac</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744013</commentid>
    <comment_count>5</comment_count>
      <attachid>424304</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-03-25 17:18:58 -0700</bug_when>
    <thetext>Created attachment 424304
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744014</commentid>
    <comment_count>6</comment_count>
      <attachid>424305</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-03-25 17:19:59 -0700</bug_when>
    <thetext>Created attachment 424305
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744040</commentid>
    <comment_count>7</comment_count>
      <attachid>424305</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-03-25 19:26:53 -0700</bug_when>
    <thetext>Comment on attachment 424305
Patch

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

&gt; Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h:84
&gt; +                memcpy(getImageDataSharedMemory-&gt;data(), imageData-&gt;data()-&gt;data(), imageData-&gt;data()-&gt;byteLength());

I think this needs to RELEASE_ASSERT() on the size of getImageDataSharedMemory.

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:162
&gt; +    }

Does m_getImageDataSharedMemory ever go away? It&apos;s going to just get larger and larger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744042</commentid>
    <comment_count>8</comment_count>
      <attachid>424305</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-03-25 19:36:05 -0700</bug_when>
    <thetext>Comment on attachment 424305
Patch

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

&gt; Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h:82
&gt; +            auto getImageDataSharedMemory = m_remoteRenderingBackend.getImageDataSharedMemory();

Maybe just sharedMemory is sufficient since it&apos;s pretty obvious we&apos;re dealing with GetImageData here.

&gt; Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h:86
&gt; +            else {
&gt; +                if (getImageDataSharedMemory)

Why not else if?

&gt; Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp:328
&gt; +    ASSERT(!m_getImageDataSharedMemory || byteCount &gt; m_getImageDataSharedMemory-&gt;size());
&gt; +    m_getImageDataSharedMemory = SharedMemory::allocate(byteCount);

We should probably limit byteCount at some size, say, 32MB.

&gt; Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h:82
&gt; +    RefPtr&lt;SharedMemory&gt; getImageDataSharedMemory() { return m_getImageDataSharedMemory; }

Maybe sharedMemoryForGetImageData?

&gt; Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h:121
&gt; +    void sharedMemoryForGetImageData(size_t byteCount, CompletionHandler&lt;void(const SharedMemory::IPCHandle&amp;)&gt;&amp;&amp;);

Maybe updateSharedMemoryForGetImageData?
The crucial thing here is that we want the new size, right?

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h:201
&gt; +        SharedMemory* sharedMemory = m_remoteRenderingBackendProxy-&gt;maybePrepareSharedMemoryForGetImageData(dataSize);

Why not just sharedMemoryForGetImageData?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744087</commentid>
    <comment_count>9</comment_count>
      <attachid>424305</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-03-26 00:52:37 -0700</bug_when>
    <thetext>Comment on attachment 424305
Patch

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

It probably works very well, so just some free to ignore bikeshedding related to beautyness:

Your dialogue of operation is:

Client: -  Create me a semaphore.
Server: - Here is a semaphore 7.
Client: - Got it. Create me a buffer size of 8877.
Server: - Here is a buffer size of 8877.
Client: - Got it.


I find it a bit error prone and confusing, as it always prompts the question: if the caller wants a buffer, why doesn&apos;t it just.. alloc it? And there&apos;s some inefficiency like creating excess temp semaphores but that&apos;s even more minor.

The option would be to implement the dialogue like this:
Client: - Here is semaphore 77 and buffer the size of 8877.  Report to me when you got those.
Server: - Done.
Client: - Got it.

This also, in theory can improve the memory attribution, if we consider the allocator typically the entity wanting something to happen and as such the entity who is responsible for the allocation.

It&apos;s slightly unfortunate that the &quot;display list&quot; is disconnected from the normal messaging so you need that manual synchronousness. If the drawing commands were part of the pic, there&apos;d be no need for that. Of course, there&apos;s probably zero parallelism lost in this case.

Other very small thing is that the mode is like this:
1) allocate buffer
2) replace old buffer

I don&apos;t think in this scenario you can do anything with the old buffer if your step 1) fails.

So on buffer resize you have two buffers in flight. The alternative could be
1) free old buffer
2) allocate new buffer

&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h:84
&gt;&gt; +                memcpy(getImageDataSharedMemory-&gt;data(), imageData-&gt;data()-&gt;data(), imageData-&gt;data()-&gt;byteLength());
&gt; 
&gt; I think this needs to RELEASE_ASSERT() on the size of getImageDataSharedMemory.

Yeah, it&apos;s a buffer overflow if the caller lies about the size. I wouldn&apos;t call it RELEASE_ASSERT as it&apos;s normal that the caller lies, so it should just act like so. E.g. close the connection or ignore the message.

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h:210
&gt; +        memcpy(imageData-&gt;data()-&gt;data(), sharedMemory-&gt;data(), dataSize);

I guess you considered the failure case memset here, but then that was be blocked on lack of the API in Semaphore.. 
It&apos;s a bit unfortunate. (The IPC Stream implementation detects the timeout by other means by semi-accident)

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:154
&gt; +        sendSync(Messages::RemoteRenderingBackend::SemaphoreForGetImageData(), Messages::RemoteRenderingBackend::SemaphoreForGetImageData::Reply(semaphore), m_renderingBackendIdentifier, 1_s);

this sync message can fail, though the below assignment is correct in this case.

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:160
&gt; +        sendSync(Messages::RemoteRenderingBackend::SharedMemoryForGetImageData(dataSize), Messages::RemoteRenderingBackend::SharedMemoryForGetImageData::Reply(handle), m_renderingBackendIdentifier, 1_s);

This sync message can fail, below assignment probably is not correct in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744088</commentid>
    <comment_count>10</comment_count>
      <attachid>424305</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-03-26 00:59:23 -0700</bug_when>
    <thetext>Comment on attachment 424305
Patch

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

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:171
&gt; +    m_getImageDataSemaphore-&gt;waitFor(5_s);

Another bike shedding very small source of confusion is:
Some of the messages timeout in 1_s, some in 5_s prompting some questions.
There&apos;s the IPC::Timeout which could be part of all your blocking function signatures. This way you&apos;d be able to establish a top-level timeout and then it&apos;d be easy to understand that your top-level function completes roughly in this time, regardless of if error handling has been forgotten in some sync sends and stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744091</commentid>
    <comment_count>11</comment_count>
      <attachid>424305</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-03-26 01:07:35 -0700</bug_when>
    <thetext>Comment on attachment 424305
Patch

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

&gt;&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:162
&gt;&gt; +    }
&gt; 
&gt; Does m_getImageDataSharedMemory ever go away? It&apos;s going to just get larger and larger.

Pretty much. We need to clear with some timer or at least when we receive a memory pressure warning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744095</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-03-26 01:25:22 -0700</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #9)
&gt; Comment on attachment 424305 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=424305&amp;action=review
&gt; 
&gt; It probably works very well, so just some free to ignore bikeshedding
&gt; related to beautyness:
&gt; 
&gt; Your dialogue of operation is:
&gt; 
&gt; Client: -  Create me a semaphore.
&gt; Server: - Here is a semaphore 7.
&gt; Client: - Got it. Create me a buffer size of 8877.
&gt; Server: - Here is a buffer size of 8877.
&gt; Client: - Got it.
&gt; 
&gt; I find it a bit error prone and confusing, as it always prompts the
&gt; question: if the caller wants a buffer, why doesn&apos;t it just.. alloc it? And
&gt; there&apos;s some inefficiency like creating excess temp semaphores but that&apos;s
&gt; even more minor.
&gt; 
&gt; The option would be to implement the dialogue like this:
&gt; Client: - Here is semaphore 77 and buffer the size of 8877.  Report to me
&gt; when you got those.
&gt; Server: - Done.
&gt; Client: - Got it.

We don&apos;t want to allocate this buffer in WebContent process because then WebContent can dictate whether it&apos;s writable by WebContent or not. It&apos;s also important GPU Process can guarantee itself of a necessary buffer size. We don&apos;t want to be relying on WebContent to create &amp; report the buffer of a right size.

&gt; Other very small thing is that the mode is like this:
&gt; 1) allocate buffer
&gt; 2) replace old buffer
&gt; 
&gt; I don&apos;t think in this scenario you can do anything with the old buffer if
&gt; your step 1) fails.
&gt; 
&gt; So on buffer resize you have two buffers in flight. The alternative could be
&gt; 1) free old buffer
&gt; 2) allocate new buffer

This is a good point. We should probably just clear the reference to the shared memory region before asking for the data.

&gt; &gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h:84
&gt; &gt;&gt; +                memcpy(getImageDataSharedMemory-&gt;data(), imageData-&gt;data()-&gt;data(), imageData-&gt;data()-&gt;byteLength());
&gt; &gt; 
&gt; &gt; I think this needs to RELEASE_ASSERT() on the size of getImageDataSharedMemory.
&gt; 
&gt; Yeah, it&apos;s a buffer overflow if the caller lies about the size. I wouldn&apos;t
&gt; call it RELEASE_ASSERT as it&apos;s normal that the caller lies, so it should
&gt; just act like so. E.g. close the connection or ignore the message.

Yeah, sorry, I missed this. This needs be a message check indeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744168</commentid>
    <comment_count>13</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-03-26 07:49:03 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #12)
&gt; We don&apos;t want to allocate this buffer in WebContent process because then
&gt; WebContent can dictate whether it&apos;s writable by WebContent or not.

The GPU process should not care if the WebProcess overwrites the pixel data area that the web process asks GPU Process to use. If WebProcess wants to trash the pixel data, it should be free to do so.

&gt;  It&apos;s also
&gt; important GPU Process can guarantee itself of a necessary buffer size. We
&gt; don&apos;t want to be relying on WebContent to create &amp; report the buffer of a
&gt; right size.

This does not make sense to me. IIRC plenty of already used cases of the pattern where the WebContent process allocates the memory. As far as I understand there is additional security gained by the GPU Process allocating the memory what so ever.

The OS will tell the GPU Process how big the SHM area *really* is. Again: WebKit already relies upon this -- in fact, the last time I looked the very implementation of RRB display lists does this, e.g. the same class we are now talking about adding stuff to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744169</commentid>
    <comment_count>14</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-03-26 07:50:25 -0700</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #13)
&gt; As far as I understand there is additional security gained by the GPU Process allocating
&gt; the memory what so ever.

This should read &quot;As far as I understand there is *no* additional  ...&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744178</commentid>
    <comment_count>15</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-03-26 08:12:18 -0700</bug_when>
    <thetext>.. where as when the web content process allocates the SHM area, there&apos;s a tiny security benefit that you don&apos;t need to have arbitrary sanity limit on the buffer size. If the process is able to allocate 1TB bitmap, then it&apos;s probably good to go. If that&apos;s a no-go, then the memory limits have expressed this by denying the allocation from the real culprit. (see the comment about limiting the allocation to 32mb)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744310</commentid>
    <comment_count>16</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-03-26 13:36:45 -0700</bug_when>
    <thetext>&gt; Your dialogue of operation is:
&gt; 
&gt; Client: -  Create me a semaphore.
&gt; Server: - Here is a semaphore 7.
&gt; Client: - Got it. Create me a buffer size of 8877.
&gt; Server: - Here is a buffer size of 8877.
&gt; Client: - Got it.
&gt; 
&gt; 
&gt; I find it a bit error prone and confusing, as it always prompts the
&gt; question: if the caller wants a buffer, why doesn&apos;t it just.. alloc it? And
&gt; there&apos;s some inefficiency like creating excess temp semaphores but that&apos;s
&gt; even more minor.
&gt; 
&gt; The option would be to implement the dialogue like this:
&gt; Client: - Here is semaphore 77 and buffer the size of 8877.  Report to me
&gt; when you got those.
&gt; Server: - Done.
&gt; Client: - Got it.

and
&gt; We don&apos;t want to allocate this buffer in WebContent process because then
&gt; WebContent can dictate whether it&apos;s writable by WebContent or not.

and
&gt; If WebProcess wants to
&gt; trash the pixel data, it should be free to do so.

The web content will be reading this shmem and the GPU Process will be writing it. I do understand the principle of &quot;least access&quot; where access is locked down to the minimum necessary to use the resource. On the other hand, I do agree with Kimmo&apos;s simplicity argument, and I think Kimmo&apos;s rebuttal (&quot;trash the pixel data&quot;) is convincing. I think the benefits of Kimmo&apos;s design outweigh the potential security risk of having the web process able to write into the shmem.

&gt; It&apos;s also
&gt; important GPU Process can guarantee itself of a necessary buffer size. We
&gt; don&apos;t want to be relying on WebContent to create &amp; report the buffer of a
&gt; right size.

and
&gt; The OS will tell the GPU Process how big the SHM area *really* is.

In this patch, there is no &quot;size&quot; argument passed separately from the IPCHandle, so the web process can&apos;t lie about how bit the shmem is. Both processes are going to have to do OOB checks, so I don&apos;t think these kinds of OOB security problems exist with Kimmo&apos;s alternate design.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744312</commentid>
    <comment_count>17</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-03-26 13:39:59 -0700</bug_when>
    <thetext>&gt; Client: - Here is semaphore 77 and buffer the size of 8877.

There will have to be separate messages for these, because the buffer size is sensitive to image size, but the semaphore isn&apos;t sensitive to anything. So there will only be one time when the semaphore travels across the IPC boundary, but there might be many times that a shmem travels across the IPC boundary - if, for example, the GPUP calls getImageData() on progressively larger and larger images.

However, we might want a _third_ message which transfers both at the same time, just so we don&apos;t need two sync IPC calls in a row if both objects are necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744317</commentid>
    <comment_count>18</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-03-26 13:48:18 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #16)
&gt; In this patch, there is no &quot;size&quot; argument passed separately from the
&gt; IPCHandle, so the web process can&apos;t lie about how bit the shmem is.

Wait a minute, I think this is false.

void SharedMemory::IPCHandle::encode(IPC::Encoder&amp; encoder) const
{
    encoder &lt;&lt; static_cast&lt;uint64_t&gt;(handle.m_size);
    encoder &lt;&lt; dataSize;
    encoder &lt;&lt; IPC::MachPort(handle.m_port, MACH_MSG_TYPE_MOVE_SEND);
    handle.m_port = MACH_PORT_NULL;
}

bool SharedMemory::IPCHandle::decode(IPC::Decoder&amp; decoder, IPCHandle&amp; ipcHandle)
{
    ASSERT(!ipcHandle.handle.m_port);
    ASSERT(!ipcHandle.handle.m_size);

    SharedMemory::Handle handle;

    uint64_t bufferSize;
    if (!decoder.decode(bufferSize))
        return false;

    uint64_t dataLength;
    if (!decoder.decode(dataLength))
        return false;

    // SharedMemory::Handle::size() is rounded up to the nearest page.
    if (dataLength &gt; bufferSize)
        return false;

    IPC::MachPort machPort;
    if (!decoder.decode(machPort))
        return false;
    
    handle.m_size = bufferSize;
    handle.m_port = machPort.port();
    ipcHandle.handle = WTFMove(handle);
    ipcHandle.dataSize = dataLength;
    return true;
}

and

RefPtr&lt;SharedMemory&gt; SharedMemory::map(const Handle&amp; handle, Protection protection)
{
    ...
    kern_return_t kr = mach_vm_map(mach_task_self(), &amp;mappedAddress, handle.m_size, 0, VM_FLAGS_ANYWHERE, handle.m_port, 0, false, vmProtection, vmProtection, VM_INHERIT_NONE);
    ...
}

It looks like the size data *is* transferred out-of-band. So a compromised web process could tell the GPU Process that a shmem area is huge when it actually isn&apos;t, and then run a getImageData which causes the GPU Process to write into a &quot;huge&quot; shmem, thereby causing it to write off the end.

Because of this, I don&apos;t think the web process can send the shmem to the GPU Process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744348</commentid>
    <comment_count>19</comment_count>
      <attachid>424305</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-03-26 15:22:28 -0700</bug_when>
    <thetext>Comment on attachment 424305
Patch

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

&gt;&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:171
&gt;&gt; +    m_getImageDataSemaphore-&gt;waitFor(5_s);
&gt; 
&gt; Another bike shedding very small source of confusion is:
&gt; Some of the messages timeout in 1_s, some in 5_s prompting some questions.
&gt; There&apos;s the IPC::Timeout which could be part of all your blocking function signatures. This way you&apos;d be able to establish a top-level timeout and then it&apos;d be easy to understand that your top-level function completes roughly in this time, regardless of if error handling has been forgotten in some sync sends and stuff.

I&apos;m having trouble understanding what you mean here. Do you think you could write what you&apos;re describing in code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744418</commentid>
    <comment_count>20</comment_count>
      <attachid>424427</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-03-26 17:50:58 -0700</bug_when>
    <thetext>Created attachment 424427
Updated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744452</commentid>
    <comment_count>21</comment_count>
      <attachid>424438</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-03-26 21:00:07 -0700</bug_when>
    <thetext>Created attachment 424438
Updated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744474</commentid>
    <comment_count>22</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-03-27 02:59:55 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #18)
&gt; (In reply to Myles C. Maxfield from comment #16)
&gt; &gt; In this patch, there is no &quot;size&quot; argument passed separately from the
&gt; &gt; IPCHandle, so the web process can&apos;t lie about how bit the shmem is.
&gt; 
&gt; Wait a minute, I think this is false.
...
&gt; and
...
&gt; It looks like the size data *is* transferred out-of-band. So a compromised
&gt; web process could tell the GPU Process that a shmem area is huge when it
&gt; actually isn&apos;t, and then run a getImageData which causes the GPU Process to
&gt; write into a &quot;huge&quot; shmem, thereby causing it to write off the end.

Luckily, mach_vm_map will check the size for you and will fail if we give it a larger size than the actual mapping region :) However, we still don&apos;t want to let WebContent give us some memory region we write into in GetImageData.

(In reply to Kimmo Kinnunen from comment #13)
&gt; (In reply to Ryosuke Niwa from comment #12)
&gt; &gt; We don&apos;t want to allocate this buffer in WebContent process because then
&gt; &gt; WebContent can dictate whether it&apos;s writable by WebContent or not.
&gt; 
&gt; The GPU process should not care if the WebProcess overwrites the pixel data
&gt; area that the web process asks GPU Process to use. If WebProcess wants to
&gt; trash the pixel data, it should be free to do so.

In this patch, yes because we&apos;re using memcpy. However, a logical next step is to avoid creating a temporary ImageData object by directly copying from IOSurface into this shared memory. When we do that, we&apos;d be handing this piece of memory to vImage and that&apos;s gonna tell GPU to DMA into this memory region in some cases. We really don&apos;t want to risk any other process trying to write into this memory region meanwhile. It&apos;s possible we have some safe guard somewhere in kernel, GPU driver, etc... but it&apos;s simply not something we should be risking for a very marginal benefit of being able to allocate this memory region in WebContent process.

&gt; The OS will tell the GPU Process how big the SHM area *really* is. Again:
&gt; WebKit already relies upon this -- in fact, the last time I looked the very
&gt; implementation of RRB display lists does this, e.g. the same class we are
&gt; now talking about adding stuff to.

We should probably reexamine that. Most notably, it&apos;s dangerous to let WebContent allocate a shared memory of arbitrary size &amp; map it in GPU process because that would make the address of such a memory location in GPU process more predictable, potentially bypassing ASLR. In fact, we probably want to limit both the size of each region as well as the number of shared memory each WebContent process is allowed to share with GPU Process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744688</commentid>
    <comment_count>23</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-03-28 22:33:51 -0700</bug_when>
    <thetext>I&apos;ll refrain from committing this until we resolve the discussion above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744703</commentid>
    <comment_count>24</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-03-29 00:56:16 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #19)
&gt; Comment on attachment 424305 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=424305&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:171
&gt; &gt;&gt; +    m_getImageDataSemaphore-&gt;waitFor(5_s);
&gt; &gt; 
&gt; &gt; Another bike shedding very small source of confusion is:
&gt; &gt; Some of the messages timeout in 1_s, some in 5_s prompting some questions.
&gt; &gt; There&apos;s the IPC::Timeout which could be part of all your blocking function signatures. This way you&apos;d be able to establish a top-level timeout and then it&apos;d be easy to understand that your top-level function completes roughly in this time, regardless of if error handling has been forgotten in some sync sends and stuff.
&gt; 
&gt; I&apos;m having trouble understanding what you mean here. Do you think you could
&gt; write what you&apos;re describing in code?

BufferProxy::getImageData() {
  IPC::Timeout timeout = 5_s;
  backendProxy-&gt;sharedMemoryForGetImageData(..., timeout);

  ... // Hopefully someday you&apos;d pass the same timeout here, but the code is already there to do the other thingy.

  backendProxy-&gt;waitForGetImageDataToComplete(..., timeout);
}
  

BackendProxy::sharedMemoryForGetImageData(size_t dataSize, IPC::Timeout timeout) {
  if  (...)
     sendSync(..., timeout);
}

BackendProxy::waitForGetImageDataToComplete(IPC::Timeout timeout) {
  semaphore-&gt;wait(timeout);
}

IPC::Timeout is intended to support consistent timeout handling in logic that does compound IPC.


&gt; It looks like the size data *is* transferred out-of-band. So a compromised web process could tell the GPU Process that a shmem area is huge when it actually isn&apos;t, and then run a getImageData which causes the GPU Process to write into a &quot;huge&quot; shmem, thereby causing it to write off the end.
&gt; Because of this, I don&apos;t think the web process can send the shmem to the GPU Process.

It would appear with cursory reading, but this is not the correct reading.

SharedMemory::IPCHandle {
  Handle handle;  // &quot;This is what I, the untrusted bandit, tell you to use as the shared memory contents&quot;
  uint64_t dataSize { 0 }; // &quot;This is the size of the data that I, the untrusted bandit, stored in that memory area.&quot;
};

So notably: WebContent process says: 
&quot;This is the size of the data I put to the shared memory. But remember: I could be lying.&quot;. 
By extension, WebContent process says:
&quot;I did not say anything about the size of the shared memory area. You should figure that out yourself.&quot;

And as you can read the code, this is _expected_ to be handled, by anybody who handles the IPC::SharedMemory::IPCHandle.

I do think talking about MachPorts and SharedMemory::IPCHandles is wrong in the IPC layer. I fixed similar problem already for IPC::Semaphore, but did not have time to fix it for the IPCHandle nor IOSurface. It is another discussion which this shouldn&apos;t divert to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744705</commentid>
    <comment_count>25</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-03-29 01:13:15 -0700</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #24)
&gt;
&gt; &gt; It looks like the size data *is* transferred out-of-band. So a compromised web process could tell the GPU Process that a shmem area is huge when it actually isn&apos;t, and then run a getImageData which causes the GPU Process to write into a &quot;huge&quot; shmem, thereby causing it to write off the end.
&gt; &gt; Because of this, I don&apos;t think the web process can send the shmem to the GPU Process.
&gt; 
&gt; It would appear with cursory reading, but this is not the correct reading.
...
&gt; And as you can read the code, this is _expected_ to be handled, by anybody
&gt; who handles the IPC::SharedMemory::IPCHandle.
&gt; 
&gt; I do think talking about MachPorts and SharedMemory::IPCHandles is wrong in
&gt; the IPC layer. I fixed similar problem already for IPC::Semaphore, but did
&gt; not have time to fix it for the IPCHandle nor IOSurface. It is another
&gt; discussion which this shouldn&apos;t divert to.

As I noted above, the kernel will verify that the size to be mapped is smaller than the size of the actual memory region being shared with a given process. Since Handle::m_size is what we call mach_vm_map, and SharedMemory::IPCHandle::decode will fail if Handle::m_size &lt; IPCHandle::dataSize, IPCHandle::dataSize can never be bigger than the actual memory region being shared.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744707</commentid>
    <comment_count>26</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-03-29 01:19:43 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #22)
&gt; In this patch, yes because we&apos;re using memcpy. However, a logical next step
&gt; is to avoid creating a temporary ImageData object by directly copying from
&gt; IOSurface into this shared memory. When we do that, we&apos;d be handing this
&gt; piece of memory to vImage and that&apos;s gonna tell GPU to DMA into this memory
&gt; region in some cases. We really don&apos;t want to risk any other process trying
&gt; to write into this memory region meanwhile. It&apos;s possible we have some safe
&gt; guard somewhere in kernel, GPU driver, etc... but it&apos;s simply not something
&gt; we should be risking for a very marginal benefit of being able to allocate
&gt; this memory region in WebContent process.

Sure.. It is a bit hard to give reviews though if the design must be based on:
- Something hypothetical threat which isn&apos;t really defined
- Something that might happen in the future
- Something that might or might not be a problem in any case (If there&apos;s a security bug in the kernel, does it make a difference the memory is mapped RO or RW in the web process?)

OTOH, nobody did ask me for a review, so in that sense it might be a non-issue that the review would be hard to give..

&gt; &gt; The OS will tell the GPU Process how big the SHM area *really* is. Again:
&gt; &gt; WebKit already relies upon this -- in fact, the last time I looked the very
&gt; 
&gt; We should probably reexamine that. Most notably, it&apos;s dangerous to let
&gt; WebContent allocate a shared memory of arbitrary size &amp; map it in GPU
&gt; process because that would make the address of such a memory location in GPU
&gt; process more predictable, potentially bypassing ASLR. In fact, we probably
&gt; want to limit both the size of each region as well as the number of shared
&gt; memory each WebContent process is allowed to share with GPU Process.

Sure.. I just don&apos;t understand how is this justified in this process. 
I think WebProcess has been able to do this for the existence of WebKit2. Just in this review it&apos;s now a problem?
I&apos;m not sure in that above description there&apos;s very concrete steps of what is the actual, concrete problem.
What is the mechanism that makes mapping shm more predictable than mapping anonymous memory as shareable?

Anyhow, I don&apos;t question that these issues might exist -- I definitively don&apos;t know much about the system.

I just question a bit the process where sometimes there&apos;s rush to push code in one way, but then when the reviewer changes, suddenly some other &quot;possiblys&quot; and &quot;not worth the risks&quot; evaluation comes into play the other direction.

If WebProcess shouldn&apos;t pass shared memory to other processes, why is the feature there in the first place? Why is it used in many places?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744910</commentid>
    <comment_count>27</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-03-29 14:15:49 -0700</bug_when>
    <thetext>I did discover while working on this patch that the uint64_t dataSize member of IPCHandle is necessary to use. If you map a region that is smaller than the page size and then you try to read/write a byte that is inside the page but past the region, the process crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744927</commentid>
    <comment_count>28</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-03-29 14:49:50 -0700</bug_when>
    <thetext>Committed r275180 (235881@main): &lt;https://commits.webkit.org/235881@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744928</commentid>
    <comment_count>29</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-29 14:50:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/75974323&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745048</commentid>
    <comment_count>30</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-03-30 00:54:22 -0700</bug_when>
    <thetext>Myles, the longIPCTimeout/shortIPCTimeout wasn&apos;t at all what the IPC::Timeout was intended for..</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424220</attachid>
            <date>2021-03-25 00:30:09 -0700</date>
            <delta_ts>2021-03-25 01:57:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223732-20210325003008.patch</filename>
            <type>text/plain</type>
            <size>18189</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDAxMzU0ZDUxMzEzZGM3YTJh
NWQ2ZmUzMmRhNzBhZGRkNGFlYWY2ZDguLmZiZTA1ZjAzMzEzMzYxYmVhYzIxNWRmNDVlMDIxOWZk
MjM1NDQwNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMjEtMDMtMjUgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
OiBJbXByb3ZlIGdldEltYWdlRGF0YSgpIHBlcmYgcGFydCAyOiBVc2Ugc2hhcmVkIG1lbW9yeSBh
bmQgYSBzZW1hcGhvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMzczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBhIGRlc2lnbiBmb3IgZ2V0SW1hZ2VEYXRhKCkg
d2hlcmUgdGhlIHdlYiBwcm9jZXNzIGFuZCB0aGUgR1BVIHByb2Nlc3MKKyAgICAgICAgc2V0IHVw
IGEgc2htZW0gKyBzZW1hcGhvcmUgYWhlYWQtb2YtdGltZSwgc28gdGhhdCB3aGVuIHdlIGVuY291
bnRlciBhIGNhbGwgdG8gZ2V0SW1hZ2VEYXRhKCksCisgICAgICAgIHRoZSBHUFUgcHJvY2VzcyBj
YW4ganVzdCB3cml0ZSBpbnRvIHRoZSBzaG1lbSBhbmQgc2lnbmFsIHRoZSBzZW1hcGhvcmUuIFRo
ZSB3ZWIgcHJvY2VzcyBqdXN0CisgICAgICAgIGVuY29kZXMgdGhlIGdldEltYWdlRGF0YSgpIGNh
bGwgaW50byB0aGUgcmVndWxhciBkaXNwbGF5IGxpc3QsIGZsdXNoQXN5bmMoKXMgdG8ga2ljayB0
aGUgR1BVCisgICAgICAgIHByb2Nlc3MsIHRoZW4ganVzdCB3YWl0cyBvbiB0aGUgc2VtYXBob3Jl
LiBJbml0aWFsIHBlcmZvcm1hbmNlIHRlc3Rpbmcgc2hvd3MgdGhhdCB0aGlzIGlzCisgICAgICAg
IHdheSwgd2F5IGZhc3RlciB0aGFuIHNlbmRpbmcgbWVzc2FnZXMgY29udGFpbmluZyBwaXhlbCBj
b2xvciBkYXRhIHBheWxvYWRzLgorCisgICAgICAgIElmIHdlIG5lZWQgbW9yZSBwZXJmb3JtYW5j
ZSwgdGhlIG5leHQgc3RlcCBpcyB0byB0cnkgdG8gcmVkdWNlIHRoZSBtZW1jcHkoKXMuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdlLgor
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oOgorICAg
ICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNlbWFwaG9yZUZvckdldElt
YWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJl
ZE1lbW9yeUZvckdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OmRpZEZpbmlzaEdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSk6Cisg
ICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3Nh
Z2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVm
ZmVyUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6Om1heWJlUHJlcGFyZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckdldElt
YWdlRGF0YVRvQ29tcGxldGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OmdldEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6CisKIDIwMjEtMDMtMjQg
IFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIERp
c3BsYXlMaW5rIGxvZyBjaGFubmVscyBpbiBXZWJDb3JlIGFuZCBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKaW5k
ZXggNmNhMWU2MGRhYWJlNmUwNTgxYzI0YjYxYWQwNGI5OTY4NTM3YWNjNi4uNmYzY2JlNzk0YmIw
ODgxYTZkNWU5MjcwZjI5YTFlMjkzMDA0YWY0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzgsOCArNzgsMTUgQEAg
cHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpHZXRJbWFnZURhdGE+KCkpIHsKICAgICAgICAgICAgIGF1dG8mIGdldEltYWdlRGF0YUl0ZW0g
PSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0SW1hZ2VEYXRhPigpOwotICAgICAg
ICAgICAgVU5VU0VEX1ZBUklBQkxFKGdldEltYWdlRGF0YUl0ZW0pOwotICAgICAgICAgICAgLy8g
RklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA2NDkgSW1w
bGVtZW50IHRoaXMuCisgICAgICAgICAgICBhdXRvIGltYWdlRGF0YSA9IEJhc2VDb25jcmV0ZUlt
YWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoZ2V0SW1hZ2VEYXRhSXRlbS5vdXRwdXRGb3JtYXQoKSwg
Z2V0SW1hZ2VEYXRhSXRlbS5zcmNSZWN0KCkpOworICAgICAgICAgICAgYXV0byBnZXRJbWFnZURh
dGFTaGFyZWRNZW1vcnkgPSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZ2V0SW1hZ2VEYXRhU2hh
cmVkTWVtb3J5KCk7CisgICAgICAgICAgICBpZiAoaW1hZ2VEYXRhICYmIGltYWdlRGF0YS0+ZGF0
YSgpICYmIGdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSkKKyAgICAgICAgICAgICAgICBtZW1jcHko
Z2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5kYXRhKCksIGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRh
KCksIGltYWdlRGF0YS0+ZGF0YSgpLT5ieXRlTGVuZ3RoKCkpOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgaWYgKGdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSkKKyAgICAgICAg
ICAgICAgICAgICAgbWVtc2V0KGdldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCAwLCBn
ZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPnNpemUoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZGlkRmluaXNoR2V0SW1hZ2VEYXRhKCk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHAKaW5kZXggZWUxNDJmMmY1OWZkYjZiNGNhYjU4OTM2NzAzZWRjMjZmY2YxOWI5Yi4uZTQ3YzE2
NDg4NWY5YTgyYjJjMmYzYjA5ZmEyYjc5YTgzMDQ4OTY4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMTYsMTQgKzMxNiwyNSBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNldE5l
eHRJdGVtQnVmZmVyVG9SZWFkKERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbgogICAgIG1fcGVu
ZGluZ1dha2V1cEluZm8gPSB7e3sgaWRlbnRpZmllciwgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6
OmhlYWRlclNpemUoKSwgZGVzdGluYXRpb25JZGVudGlmaWVyLCBHUFVQcm9jZXNzV2FrZXVwUmVh
c29uOjpVbnNwZWNpZmllZCB9LCBXVEY6Om51bGxvcHQgfX07CiB9CiAKLXZvaWQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBJbnRSZWN0IHNyY1JlY3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFdl
YkNvcmU6OkltYWdlRGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OnNlbWFwaG9yZUZvckdldEltYWdlRGF0YShDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIobV9n
ZXRJbWFnZURhdGFTZW1hcGhvcmUpOworfQogCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VE
YXRhOwotICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNh
Y2hlZEltYWdlQnVmZmVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpCi0gICAgICAgIGlt
YWdlRGF0YSA9IGltYWdlQnVmZmVyLT5nZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0
KTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGltYWdlRGF0YSkpOwordm9pZCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoc2l6ZV90IGJ5
dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hh
bmRsZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghbV9nZXRJbWFnZURh
dGFTaGFyZWRNZW1vcnkgfHwgYnl0ZUNvdW50ID4gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkt
PnNpemUoKSk7CisgICAgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6
OmFsbG9jYXRlKGJ5dGVDb3VudCk7CisgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwor
ICAgIGlmIChtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSkKKyAgICAgICAgbV9nZXRJbWFnZURh
dGFTaGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVj
dGlvbjo6UmVhZE9ubHkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFNoYXJlZE1lbW9yeTo6SVBD
SGFuZGxlIHsgV1RGTW92ZShoYW5kbGUpLCBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSA/IG1f
Z2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5zaXplKCkgOiAwIH0pOworfQorCit2b2lkIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZEZpbmlzaEdldEltYWdlRGF0YSgpCit7CisgICAgbV9nZXRJ
bWFnZURhdGFTZW1hcGhvcmUuc2lnbmFsKCk7CiB9CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Z2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCAzOTQzZDUyMWQz
NjkzZmJkMmNlZjM2YjQ3ZDM0OTZiMWMyZGYzNjU5Li5iMTRjNDg4OWQxNTI4Y2E1OGQ3ZmU3ODg1
NGFjNzhmMDY5NjMzNjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNiArNzksOSBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHNldE5leHRJdGVtQnVmZmVyVG9SZWFkKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGRlc3RpbmF0aW9uKTsKIAorICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IGdldEltYWdl
RGF0YVNoYXJlZE1lbW9yeSgpIHsgcmV0dXJuIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5OyB9
CisgICAgdm9pZCBkaWRGaW5pc2hHZXRJbWFnZURhdGEoKTsKKwogICAgIC8vIFJ1bnMgRnVuY3Rp
b24gaW4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB0YXNrIHF1ZXVlLgogICAgIHZvaWQgZGlzcGF0
Y2goRnVuY3Rpb248dm9pZCgpPiYmKTsKIApAQCAtMTE0LDcgKzExNyw4IEBAIHByaXZhdGU6CiAg
ICAgLy8gTWVzc2FnZXMgdG8gYmUgcmVjZWl2ZWQuCiAgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZl
cihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJp
bmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JT
cGFjZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcik7CiAgICAgdm9pZCB3YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0KGNvbnN0IEdQVVBy
b2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzJik7Ci0gICAgdm9pZCBnZXRJbWFnZURhdGEoV2Vi
Q29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIFdlYkNvcmU6OkludFJl
Y3Qgc3JjUmVjdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+JiYpPiYmKTsKKyAgICB2
b2lkIHNlbWFwaG9yZUZvckdldEltYWdlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IElQQzo6U2VtYXBob3JlJik+JiYpOworICAgIHZvaWQgc2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VE
YXRhKHNpemVfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU2hhcmVk
TWVtb3J5OjpJUENIYW5kbGUmKT4mJik7CiAgICAgdm9pZCBnZXREYXRhVVJMRm9ySW1hZ2VCdWZm
ZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJD
b3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+JiYpOwogICAgIHZvaWQgZ2V0
RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CiAgICAgdm9pZCBnZXRCR1JB
RGF0YUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYpOwpAQCAtMTQ4LDYg
KzE1Miw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUJ1ZmZlcklkZW50aWZpZXIsIFJlZlB0cjxEaXNwbGF5TGlzdFJlYWRlckhhbmRsZT4+IG1fc2hh
cmVkRGlzcGxheUxpc3RIYW5kbGVzOwogICAgIE9wdGlvbmFsPFBlbmRpbmdXYWtldXBJbmZvcm1h
dGlvbj4gbV9wZW5kaW5nV2FrZXVwSW5mbzsKICAgICBJUEM6OlNlbWFwaG9yZSBtX3Jlc3VtZURp
c3BsYXlMaXN0U2VtYXBob3JlOworICAgIElQQzo6U2VtYXBob3JlIG1fZ2V0SW1hZ2VEYXRhU2Vt
YXBob3JlOworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVt
b3J5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLm1lc3NhZ2VzLmluCmluZGV4IDEzODJjYTVlOTI4ZDQ1ODFlYjVmNzhiNzBjZDkyMjM3Mjhi
YjZmZDUuLmFhOGM2ZjllZGYxZDEzMzFkY2UyZDQ1NmI5YWEyYTMzYzAyMGM5Y2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0yNSw3ICsyNSw4IEBACiBtZXNz
YWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHsKICAgICBDcmVhdGVJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNv
bG9yU3BhY2UgY29sb3JTcGFjZSwgZW51bTp1aW50OF90IFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBp
eGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKQogICAgIFdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3Qoc3RydWN0
IFdlYktpdDo6R1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMgYXJndW1lbnRzKQotICAg
IEdldEltYWdlRGF0YShlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBvdXRwdXRGb3JtYXQsIFdlYkNvcmU6OkludFJlY3Qgc3JjUmVjdCwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFJl
ZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IGltYWdlRGF0YSkgU3luY2hyb25vdXMKKyAgICBTZW1h
cGhvcmVGb3JHZXRJbWFnZURhdGEoKSAtPiAoSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5j
aHJvbm91cworICAgIFNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShzaXplX3QgYnl0ZUNvdW50
KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3Vz
CiAgICAgR2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFN0cmluZyB1cmxTdHJpbmcpIFN5bmNo
cm9ub3VzCiAgICAgR2V0RGF0YUZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5
bmNocm9ub3VzCiAgICAgR2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoVmVj
dG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
CmluZGV4IDViYmYyNTYzMDYyOTBlNDlhYzhkYjMxYjVkMDFhYzk2YjU2YWFjNDIuLjBmNTFjZjM5
ZDRiNDczYjYzNDgzZGU0YzVmOTE4OGM1OTBmOGI2OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTkzLDEyICsxOTMsMjAgQEAgcHJvdGVjdGVkOgogICAgICAgICBpZiAoVU5MSUtF
TFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gV2ViQ29yZTo6SW1hZ2VEYXRhOjpj
cmVhdGUoc3JjUmVjdC5zaXplKCkpOworICAgICAgICBzaXplX3QgZGF0YVNpemUgPSBpbWFnZURh
dGEtPmRhdGEoKS0+Ynl0ZUxlbmd0aCgpOworCisgICAgICAgIFNoYXJlZE1lbW9yeSogc2hhcmVk
TWVtb3J5ID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPm1heWJlUHJlcGFyZVNoYXJl
ZE1lbW9yeUZvckdldEltYWdlRGF0YShkYXRhU2l6ZSk7CisgICAgICAgIGlmICghc2hhcmVkTWVt
b3J5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICAgICAgYXV0byYgbXV0YWJs
ZVRoaXMgPSBjb25zdF9jYXN0PFJlbW90ZUltYWdlQnVmZmVyUHJveHkmPigqdGhpcyk7CiAgICAg
ICAgIG11dGFibGVUaGlzLm1fZHJhd2luZ0NvbnRleHQucmVjb3JkZXIoKS5nZXRJbWFnZURhdGEo
b3V0cHV0Rm9ybWF0LCBzcmNSZWN0KTsKLSAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA2NDkgVXNlIHRoZSByZWNvcmRlZCBjb21tYW5k
IGluc3RlYWQgb2YgdGhlIHN5bmNocm9ub3VzIElQQyBtZXNzYWdlLgorICAgICAgICBtdXRhYmxl
VGhpcy5mbHVzaERyYXdpbmdDb250ZXh0QXN5bmMoKTsKIAotICAgICAgICBjb25zdF9jYXN0PFJl
bW90ZUltYWdlQnVmZmVyUHJveHkqPih0aGlzKS0+Zmx1c2hEcmF3aW5nQ29udGV4dCgpOwotICAg
ICAgICByZXR1cm4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPmdldEltYWdlRGF0YShv
dXRwdXRGb3JtYXQsIHNyY1JlY3QsIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAg
ICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPndhaXRGb3JHZXRJbWFnZURhdGFU
b0NvbXBsZXRlKCk7CisgICAgICAgIG1lbWNweShpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBz
aGFyZWRNZW1vcnktPmRhdGEoKSwgZGF0YVNpemUpOworICAgICAgICByZXR1cm4gaW1hZ2VEYXRh
OwogICAgIH0KIAogICAgIHZvaWQgcHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYgaW1hZ2VEYXRh
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgZGVzdFBvaW50ID0geyB9LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RG
b3JtYXQgPSBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBv
dmVycmlkZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4IDFh
MGM2MzIwZTNiYmRmMTYzZTQ3MDYyNWRmYTNiYmFlZTc3NmI5MjUuLmU2NmI0NTNmN2E3MjZhNjM4
YjJmMjc0MGQzMmQzNGJkMzYxNDkyYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTQzLDEzICsxNDMsMzEgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2kKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4gUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCitTaGFyZWRNZW1vcnkqIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6bWF5YmVQcmVwYXJlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRh
KHNpemVfdCBkYXRhU2l6ZSkKIHsKICAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVk
ZWQoKTsKIAotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YTsKLSAgICBzZW5kU3luYyhN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1h
dCwgc3JjUmVjdCwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldEltYWdlRGF0YTo6UmVwbHkoaW1hZ2VEYXRhKSwgbV9yZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllciwgMV9zKTsKLSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAg
IC8vIEZJWE1FOiBEZXRlcm1pbmUgaWYgaXQncyBhZHZhbnRhZ2VvdXMgdG8gYWRkIGEgM3JkIG1l
c3NhZ2UgdGhhdCBkb2VzIGJvdGggU2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhIGFuZCBTaGFyZWRN
ZW1vcnlGb3JHZXRJbWFnZURhdGEgaW4gYSBzaW5nbGUgbWVzc2FnZSwgd2hlbiB3ZSBuZWVkIGJv
dGggdGhlIHNlbWFwaG9yZSBhbmQgdGhlIHNoYXJlZCBtZW1vcnkgYXQgdGhlIHNhbWUgdGltZS4K
KworICAgIGlmICghbV9nZXRJbWFnZURhdGFTZW1hcGhvcmUpIHsKKyAgICAgICAgSVBDOjpTZW1h
cGhvcmUgc2VtYXBob3JlOworICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6U2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKCksIE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGE6OlJlcGx5KHNlbWFwaG9y
ZSksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIsIDFfcyk7CisgICAgICAgIG1fZ2V0SW1h
Z2VEYXRhU2VtYXBob3JlID0gV1RGTW92ZShzZW1hcGhvcmUpOworICAgIH0KKworICAgIGlmICgh
bV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgfHwgZGF0YVNpemUgPiBtX2dldEltYWdlRGF0YVNo
YXJlZE1lbW9yeS0+c2l6ZSgpKSB7CisgICAgICAgIFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhh
bmRsZTsKKyAgICAgICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OlNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShkYXRhU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGE6OlJlcGx5KGhhbmRs
ZSksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIsIDFfcyk7CisgICAgICAgIG1fZ2V0SW1h
Z2VEYXRhU2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjptYXAoaGFuZGxlLmhhbmRsZSwgU2hh
cmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisgICAgfQorCisgICAgcmV0dXJuIG1f
Z2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LmdldCgpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6d2FpdEZvckdldEltYWdlRGF0YVRvQ29tcGxldGUoKQoreworICAgIEFT
U0VSVChtX2dldEltYWdlRGF0YVNlbWFwaG9yZSk7CisgICAgbV9nZXRJbWFnZURhdGFTZW1hcGhv
cmUtPndhaXRGb3IoNV9zKTsKIH0KIAogU3RyaW5nIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6Z2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
biwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCmluZGV4IDk0YmMzY2QxODZj
YzJkY2JjNDkwYTU4Y2UyMjI2NjYxZDdiYTExNTQuLjFjMzIxZTcyOTU2NDU1YjE3MTU1OTM4NmMy
OGIwNWI2NDRiYTllYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
NSw2ICs3NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHdpbGxBcHBlbmRJdGVtKFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBzZW5kRGVmZXJyZWRXYWtldXBN
ZXNzYWdlSWZOZWVkZWQoKTsKIAorICAgIFNoYXJlZE1lbW9yeSogbWF5YmVQcmVwYXJlU2hhcmVk
TWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKHNpemVfdCBkYXRhU2l6ZSk7CisgICAgdm9pZCB3YWl0Rm9y
R2V0SW1hZ2VEYXRhVG9Db21wbGV0ZSgpOworCiAgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgog
ICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVy
cmlkZTsKICAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92
ZXJyaWRlOwpAQCAtODQsNyArODcsNiBAQCBwdWJsaWM6CiAKICAgICAvLyBNZXNzYWdlcyB0byBi
ZSBzZW50LgogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZm
ZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIFdlYkNv
cmU6OlBpeGVsRm9ybWF0KTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBnZXRJbWFn
ZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcik7CiAgICAgU3RyaW5nIGdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZl
UmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICBW
ZWN0b3I8dWludDhfdD4gZ2V0RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKTsKICAgICBWZWN0b3I8dWludDhfdD4gZ2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZl
cihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwpAQCAtMTI5LDYgKzEzMSw4
IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8R1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVu
dHM+IG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzOwogICAgIHVuc2lnbmVkIG1fcmVt
YWluaW5nSXRlbXNUb0FwcGVuZEJlZm9yZVNlbmRpbmdXYWtldXAgeyAwIH07CiAgICAgSVBDOjpT
ZW1hcGhvcmUgbV9yZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZTsKKyAgICBPcHRpb25hbDxJUEM6
OlNlbWFwaG9yZT4gbV9nZXRJbWFnZURhdGFTZW1hcGhvcmU7CisgICAgUmVmUHRyPFNoYXJlZE1l
bW9yeT4gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424222</attachid>
            <date>2021-03-25 01:57:16 -0700</date>
            <delta_ts>2021-03-25 14:00:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223732-20210325015715.patch</filename>
            <type>text/plain</type>
            <size>18265</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDAxMzU0ZDUxMzEzZGM3YTJh
NWQ2ZmUzMmRhNzBhZGRkNGFlYWY2ZDguLmZiZTA1ZjAzMzEzMzYxYmVhYzIxNWRmNDVlMDIxOWZk
MjM1NDQwNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMjEtMDMtMjUgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
OiBJbXByb3ZlIGdldEltYWdlRGF0YSgpIHBlcmYgcGFydCAyOiBVc2Ugc2hhcmVkIG1lbW9yeSBh
bmQgYSBzZW1hcGhvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMzczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBhIGRlc2lnbiBmb3IgZ2V0SW1hZ2VEYXRhKCkg
d2hlcmUgdGhlIHdlYiBwcm9jZXNzIGFuZCB0aGUgR1BVIHByb2Nlc3MKKyAgICAgICAgc2V0IHVw
IGEgc2htZW0gKyBzZW1hcGhvcmUgYWhlYWQtb2YtdGltZSwgc28gdGhhdCB3aGVuIHdlIGVuY291
bnRlciBhIGNhbGwgdG8gZ2V0SW1hZ2VEYXRhKCksCisgICAgICAgIHRoZSBHUFUgcHJvY2VzcyBj
YW4ganVzdCB3cml0ZSBpbnRvIHRoZSBzaG1lbSBhbmQgc2lnbmFsIHRoZSBzZW1hcGhvcmUuIFRo
ZSB3ZWIgcHJvY2VzcyBqdXN0CisgICAgICAgIGVuY29kZXMgdGhlIGdldEltYWdlRGF0YSgpIGNh
bGwgaW50byB0aGUgcmVndWxhciBkaXNwbGF5IGxpc3QsIGZsdXNoQXN5bmMoKXMgdG8ga2ljayB0
aGUgR1BVCisgICAgICAgIHByb2Nlc3MsIHRoZW4ganVzdCB3YWl0cyBvbiB0aGUgc2VtYXBob3Jl
LiBJbml0aWFsIHBlcmZvcm1hbmNlIHRlc3Rpbmcgc2hvd3MgdGhhdCB0aGlzIGlzCisgICAgICAg
IHdheSwgd2F5IGZhc3RlciB0aGFuIHNlbmRpbmcgbWVzc2FnZXMgY29udGFpbmluZyBwaXhlbCBj
b2xvciBkYXRhIHBheWxvYWRzLgorCisgICAgICAgIElmIHdlIG5lZWQgbW9yZSBwZXJmb3JtYW5j
ZSwgdGhlIG5leHQgc3RlcCBpcyB0byB0cnkgdG8gcmVkdWNlIHRoZSBtZW1jcHkoKXMuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdlLgor
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oOgorICAg
ICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNlbWFwaG9yZUZvckdldElt
YWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJl
ZE1lbW9yeUZvckdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OmRpZEZpbmlzaEdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSk6Cisg
ICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3Nh
Z2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVm
ZmVyUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6Om1heWJlUHJlcGFyZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckdldElt
YWdlRGF0YVRvQ29tcGxldGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OmdldEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6CisKIDIwMjEtMDMtMjQg
IFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIERp
c3BsYXlMaW5rIGxvZyBjaGFubmVscyBpbiBXZWJDb3JlIGFuZCBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKaW5k
ZXggNmNhMWU2MGRhYWJlNmUwNTgxYzI0YjYxYWQwNGI5OTY4NTM3YWNjNi4uNmYzY2JlNzk0YmIw
ODgxYTZkNWU5MjcwZjI5YTFlMjkzMDA0YWY0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzgsOCArNzgsMTUgQEAg
cHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpHZXRJbWFnZURhdGE+KCkpIHsKICAgICAgICAgICAgIGF1dG8mIGdldEltYWdlRGF0YUl0ZW0g
PSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0SW1hZ2VEYXRhPigpOwotICAgICAg
ICAgICAgVU5VU0VEX1ZBUklBQkxFKGdldEltYWdlRGF0YUl0ZW0pOwotICAgICAgICAgICAgLy8g
RklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA2NDkgSW1w
bGVtZW50IHRoaXMuCisgICAgICAgICAgICBhdXRvIGltYWdlRGF0YSA9IEJhc2VDb25jcmV0ZUlt
YWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoZ2V0SW1hZ2VEYXRhSXRlbS5vdXRwdXRGb3JtYXQoKSwg
Z2V0SW1hZ2VEYXRhSXRlbS5zcmNSZWN0KCkpOworICAgICAgICAgICAgYXV0byBnZXRJbWFnZURh
dGFTaGFyZWRNZW1vcnkgPSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZ2V0SW1hZ2VEYXRhU2hh
cmVkTWVtb3J5KCk7CisgICAgICAgICAgICBpZiAoaW1hZ2VEYXRhICYmIGltYWdlRGF0YS0+ZGF0
YSgpICYmIGdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSkKKyAgICAgICAgICAgICAgICBtZW1jcHko
Z2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5kYXRhKCksIGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRh
KCksIGltYWdlRGF0YS0+ZGF0YSgpLT5ieXRlTGVuZ3RoKCkpOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgaWYgKGdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSkKKyAgICAgICAg
ICAgICAgICAgICAgbWVtc2V0KGdldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCAwLCBn
ZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPnNpemUoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZGlkRmluaXNoR2V0SW1hZ2VEYXRhKCk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHAKaW5kZXggZWUxNDJmMmY1OWZkYjZiNGNhYjU4OTM2NzAzZWRjMjZmY2YxOWI5Yi4uZTQ3YzE2
NDg4NWY5YTgyYjJjMmYzYjA5ZmEyYjc5YTgzMDQ4OTY4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMTYsMTQgKzMxNiwyNSBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNldE5l
eHRJdGVtQnVmZmVyVG9SZWFkKERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbgogICAgIG1fcGVu
ZGluZ1dha2V1cEluZm8gPSB7e3sgaWRlbnRpZmllciwgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6
OmhlYWRlclNpemUoKSwgZGVzdGluYXRpb25JZGVudGlmaWVyLCBHUFVQcm9jZXNzV2FrZXVwUmVh
c29uOjpVbnNwZWNpZmllZCB9LCBXVEY6Om51bGxvcHQgfX07CiB9CiAKLXZvaWQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBJbnRSZWN0IHNyY1JlY3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFdl
YkNvcmU6OkltYWdlRGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OnNlbWFwaG9yZUZvckdldEltYWdlRGF0YShDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIobV9n
ZXRJbWFnZURhdGFTZW1hcGhvcmUpOworfQogCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VE
YXRhOwotICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNh
Y2hlZEltYWdlQnVmZmVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpCi0gICAgICAgIGlt
YWdlRGF0YSA9IGltYWdlQnVmZmVyLT5nZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0
KTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGltYWdlRGF0YSkpOwordm9pZCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoc2l6ZV90IGJ5
dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hh
bmRsZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghbV9nZXRJbWFnZURh
dGFTaGFyZWRNZW1vcnkgfHwgYnl0ZUNvdW50ID4gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkt
PnNpemUoKSk7CisgICAgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6
OmFsbG9jYXRlKGJ5dGVDb3VudCk7CisgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwor
ICAgIGlmIChtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSkKKyAgICAgICAgbV9nZXRJbWFnZURh
dGFTaGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVj
dGlvbjo6UmVhZE9ubHkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFNoYXJlZE1lbW9yeTo6SVBD
SGFuZGxlIHsgV1RGTW92ZShoYW5kbGUpLCBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSA/IG1f
Z2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5zaXplKCkgOiAwIH0pOworfQorCit2b2lkIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZEZpbmlzaEdldEltYWdlRGF0YSgpCit7CisgICAgbV9nZXRJ
bWFnZURhdGFTZW1hcGhvcmUuc2lnbmFsKCk7CiB9CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Z2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCAzOTQzZDUyMWQz
NjkzZmJkMmNlZjM2YjQ3ZDM0OTZiMWMyZGYzNjU5Li5iMTRjNDg4OWQxNTI4Y2E1OGQ3ZmU3ODg1
NGFjNzhmMDY5NjMzNjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzksNiArNzksOSBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHNldE5leHRJdGVtQnVmZmVyVG9SZWFkKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGRlc3RpbmF0aW9uKTsKIAorICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IGdldEltYWdl
RGF0YVNoYXJlZE1lbW9yeSgpIHsgcmV0dXJuIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5OyB9
CisgICAgdm9pZCBkaWRGaW5pc2hHZXRJbWFnZURhdGEoKTsKKwogICAgIC8vIFJ1bnMgRnVuY3Rp
b24gaW4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB0YXNrIHF1ZXVlLgogICAgIHZvaWQgZGlzcGF0
Y2goRnVuY3Rpb248dm9pZCgpPiYmKTsKIApAQCAtMTE0LDcgKzExNyw4IEBAIHByaXZhdGU6CiAg
ICAgLy8gTWVzc2FnZXMgdG8gYmUgcmVjZWl2ZWQuCiAgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZl
cihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJp
bmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JT
cGFjZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcik7CiAgICAgdm9pZCB3YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0KGNvbnN0IEdQVVBy
b2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzJik7Ci0gICAgdm9pZCBnZXRJbWFnZURhdGEoV2Vi
Q29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIFdlYkNvcmU6OkludFJl
Y3Qgc3JjUmVjdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+JiYpPiYmKTsKKyAgICB2
b2lkIHNlbWFwaG9yZUZvckdldEltYWdlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IElQQzo6U2VtYXBob3JlJik+JiYpOworICAgIHZvaWQgc2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VE
YXRhKHNpemVfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU2hhcmVk
TWVtb3J5OjpJUENIYW5kbGUmKT4mJik7CiAgICAgdm9pZCBnZXREYXRhVVJMRm9ySW1hZ2VCdWZm
ZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJD
b3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+JiYpOwogICAgIHZvaWQgZ2V0
RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CiAgICAgdm9pZCBnZXRCR1JB
RGF0YUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYpOwpAQCAtMTQ4LDYg
KzE1Miw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUJ1ZmZlcklkZW50aWZpZXIsIFJlZlB0cjxEaXNwbGF5TGlzdFJlYWRlckhhbmRsZT4+IG1fc2hh
cmVkRGlzcGxheUxpc3RIYW5kbGVzOwogICAgIE9wdGlvbmFsPFBlbmRpbmdXYWtldXBJbmZvcm1h
dGlvbj4gbV9wZW5kaW5nV2FrZXVwSW5mbzsKICAgICBJUEM6OlNlbWFwaG9yZSBtX3Jlc3VtZURp
c3BsYXlMaXN0U2VtYXBob3JlOworICAgIElQQzo6U2VtYXBob3JlIG1fZ2V0SW1hZ2VEYXRhU2Vt
YXBob3JlOworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVt
b3J5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLm1lc3NhZ2VzLmluCmluZGV4IDEzODJjYTVlOTI4ZDQ1ODFlYjVmNzhiNzBjZDkyMjM3Mjhi
YjZmZDUuLmFhOGM2ZjllZGYxZDEzMzFkY2UyZDQ1NmI5YWEyYTMzYzAyMGM5Y2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0yNSw3ICsyNSw4IEBACiBtZXNz
YWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHsKICAgICBDcmVhdGVJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNv
bG9yU3BhY2UgY29sb3JTcGFjZSwgZW51bTp1aW50OF90IFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBp
eGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKQogICAgIFdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3Qoc3RydWN0
IFdlYktpdDo6R1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMgYXJndW1lbnRzKQotICAg
IEdldEltYWdlRGF0YShlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBvdXRwdXRGb3JtYXQsIFdlYkNvcmU6OkludFJlY3Qgc3JjUmVjdCwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFJl
ZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IGltYWdlRGF0YSkgU3luY2hyb25vdXMKKyAgICBTZW1h
cGhvcmVGb3JHZXRJbWFnZURhdGEoKSAtPiAoSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5j
aHJvbm91cworICAgIFNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShzaXplX3QgYnl0ZUNvdW50
KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3Vz
CiAgICAgR2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFN0cmluZyB1cmxTdHJpbmcpIFN5bmNo
cm9ub3VzCiAgICAgR2V0RGF0YUZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5
bmNocm9ub3VzCiAgICAgR2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoVmVj
dG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
CmluZGV4IDViYmYyNTYzMDYyOTBlNDlhYzhkYjMxYjVkMDFhYzk2YjU2YWFjNDIuLmI1MTg2MjQ2
MmM4OWM2NTJjM2MzOWQ5MDJmN2MxYWJjYTAyNTc0NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTkzLDEyICsxOTMsMjIgQEAgcHJvdGVjdGVkOgogICAgICAgICBpZiAoVU5MSUtF
TFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gV2ViQ29yZTo6SW1hZ2VEYXRhOjpj
cmVhdGUoc3JjUmVjdC5zaXplKCkpOworICAgICAgICBpZiAoIWltYWdlRGF0YSB8fCAhaW1hZ2VE
YXRhLT5kYXRhKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgc2l6ZV90
IGRhdGFTaXplID0gaW1hZ2VEYXRhLT5kYXRhKCktPmJ5dGVMZW5ndGgoKTsKKworICAgICAgICBT
aGFyZWRNZW1vcnkqIHNoYXJlZE1lbW9yeSA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LT5tYXliZVByZXBhcmVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoZGF0YVNpemUpOworICAg
ICAgICBpZiAoIXNoYXJlZE1lbW9yeSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCiAg
ICAgICAgIGF1dG8mIG11dGFibGVUaGlzID0gY29uc3RfY2FzdDxSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5Jj4oKnRoaXMpOwogICAgICAgICBtdXRhYmxlVGhpcy5tX2RyYXdpbmdDb250ZXh0LnJlY29y
ZGVyKCkuZ2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7Ci0gICAgICAgIC8vIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNjQ5IFVzZSB0
aGUgcmVjb3JkZWQgY29tbWFuZCBpbnN0ZWFkIG9mIHRoZSBzeW5jaHJvbm91cyBJUEMgbWVzc2Fn
ZS4KKyAgICAgICAgbXV0YWJsZVRoaXMuZmx1c2hEcmF3aW5nQ29udGV4dEFzeW5jKCk7CiAKLSAg
ICAgICAgY29uc3RfY2FzdDxSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Kj4odGhpcyktPmZsdXNoRHJh
d2luZ0NvbnRleHQoKTsKLSAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LT5nZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX3JlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7CisgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT53
YWl0Rm9yR2V0SW1hZ2VEYXRhVG9Db21wbGV0ZSgpOworICAgICAgICBtZW1jcHkoaW1hZ2VEYXRh
LT5kYXRhKCktPmRhdGEoKSwgc2hhcmVkTWVtb3J5LT5kYXRhKCksIGRhdGFTaXplKTsKKyAgICAg
ICAgcmV0dXJuIGltYWdlRGF0YTsKICAgICB9CiAKICAgICB2b2lkIHB1dEltYWdlRGF0YShXZWJD
b3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJ
bWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSwgV2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcAppbmRleCAxYTBjNjMyMGUzYmJkZjE2M2U0NzA2MjVkZmEzYmJhZWU3NzZiOTI1
Li5lNjZiNDUzZjdhNzI2YTYzOGIyZjI3NDBkMzJkMzRiZDM2MTQ5MmE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0MywxMyArMTQzLDMxIEBAIFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJlZlB0cjxJbWFnZURh
dGE+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorU2hhcmVk
TWVtb3J5KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1heWJlUHJlcGFyZVNoYXJlZE1l
bW9yeUZvckdldEltYWdlRGF0YShzaXplX3QgZGF0YVNpemUpCiB7CiAgICAgc2VuZERlZmVycmVk
V2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7CiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURh
dGE7Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldElt
YWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRJbWFnZURhdGE6OlJlcGx5
KGltYWdlRGF0YSksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIsIDFfcyk7Ci0gICAgcmV0
dXJuIGltYWdlRGF0YTsKKyAgICAvLyBGSVhNRTogRGV0ZXJtaW5lIGlmIGl0J3MgYWR2YW50YWdl
b3VzIHRvIGFkZCBhIDNyZCBtZXNzYWdlIHRoYXQgZG9lcyBib3RoIFNlbWFwaG9yZUZvckdldElt
YWdlRGF0YSBhbmQgU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhIGluIGEgc2luZ2xlIG1lc3Nh
Z2UsIHdoZW4gd2UgbmVlZCBib3RoIHRoZSBzZW1hcGhvcmUgYW5kIHRoZSBzaGFyZWQgbWVtb3J5
IGF0IHRoZSBzYW1lIHRpbWUuCisKKyAgICBpZiAoIW1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlKSB7
CisgICAgICAgIElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZTsKKyAgICAgICAgc2VuZFN5bmMoTWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlNlbWFwaG9yZUZvckdldEltYWdlRGF0YSgp
LCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6U2VtYXBob3JlRm9yR2V0SW1hZ2VE
YXRhOjpSZXBseShzZW1hcGhvcmUpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCAxX3Mp
OworICAgICAgICBtX2dldEltYWdlRGF0YVNlbWFwaG9yZSA9IFdURk1vdmUoc2VtYXBob3JlKTsK
KyAgICB9CisKKyAgICBpZiAoIW1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5IHx8IGRhdGFTaXpl
ID4gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPnNpemUoKSkgeworICAgICAgICBTaGFyZWRN
ZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGU7CisgICAgICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoZGF0YVNpemUp
LCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6U2hhcmVkTWVtb3J5Rm9yR2V0SW1h
Z2VEYXRhOjpSZXBseShoYW5kbGUpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCAxX3Mp
OworICAgICAgICBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6bWFw
KGhhbmRsZS5oYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworICAg
IH0KKworICAgIHJldHVybiBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS5nZXQoKTsKK30KKwor
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndhaXRGb3JHZXRJbWFnZURhdGFUb0Nv
bXBsZXRlKCkKK3sKKyAgICBBU1NFUlQobV9nZXRJbWFnZURhdGFTZW1hcGhvcmUpOworICAgIG1f
Z2V0SW1hZ2VEYXRhU2VtYXBob3JlLT53YWl0Rm9yKDVfcyk7CiB9CiAKIFN0cmluZyBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24sIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
aAppbmRleCA5NGJjM2NkMTg2Y2MyZGNiYzQ5MGE1OGNlMjIyNjY2MWQ3YmExMTU0Li4xYzMyMWU3
Mjk1NjQ1NWIxNzE1NTkzODZjMjhiMDViNjQ0YmE5ZWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNzUsNiArNzUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsQXBw
ZW5kSXRlbShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQg
c2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7CiAKKyAgICBTaGFyZWRNZW1vcnkq
IG1heWJlUHJlcGFyZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShzaXplX3QgZGF0YVNpemUp
OworICAgIHZvaWQgd2FpdEZvckdldEltYWdlRGF0YVRvQ29tcGxldGUoKTsKKwogICAgIC8vIElQ
Qzo6TWVzc2FnZVNlbmRlci4KICAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25u
ZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3Rp
bmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKQEAgLTg0LDcgKzg3LDYgQEAgcHVibGljOgogCiAg
ICAgLy8gTWVzc2FnZXMgdG8gYmUgc2VudC4KICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZm
ZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6
OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6RGVzdGluYXRp
b25Db2xvclNwYWNlLCBXZWJDb3JlOjpQaXhlbEZvcm1hdCk7Ci0gICAgUmVmUHRyPFdlYkNvcmU6
OkltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIFN0cmluZyBnZXREYXRhVVJMRm9ySW1h
Z2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGdldERhdGFGb3JJbWFnZUJ1ZmZlcihj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGdldEJH
UkFEYXRhRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KTsKQEAgLTEyOSw2ICsxMzEsOCBAQCBwcml2YXRlOgogICAgIE9wdGlvbmFsPEdQVVByb2Nlc3NX
YWtldXBNZXNzYWdlQXJndW1lbnRzPiBtX2RlZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50czsK
ICAgICB1bnNpZ25lZCBtX3JlbWFpbmluZ0l0ZW1zVG9BcHBlbmRCZWZvcmVTZW5kaW5nV2FrZXVw
IHsgMCB9OwogICAgIElQQzo6U2VtYXBob3JlIG1fcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmU7
CisgICAgT3B0aW9uYWw8SVBDOjpTZW1hcGhvcmU+IG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlOwor
ICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424277</attachid>
            <date>2021-03-25 14:00:10 -0700</date>
            <delta_ts>2021-03-25 17:18:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223732-20210325140009.patch</filename>
            <type>text/plain</type>
            <size>18321</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MDUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGNlNzM2MThkNmQ3Yzg4N2U4
ZDJiZmI2ZTNmM2MwOTFiYzNhMTA2YzEuLjJlYzBiYzA1YTBiNGE1ZjdlNWEzM2Q4MGQwMzFhZTU5
MDc3NTQ2MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMjEtMDMtMjUgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
OiBJbXByb3ZlIGdldEltYWdlRGF0YSgpIHBlcmYgcGFydCAyOiBVc2Ugc2hhcmVkIG1lbW9yeSBh
bmQgYSBzZW1hcGhvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMzczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBhIGRlc2lnbiBmb3IgZ2V0SW1hZ2VEYXRhKCkg
d2hlcmUgdGhlIHdlYiBwcm9jZXNzIGFuZCB0aGUgR1BVIHByb2Nlc3MKKyAgICAgICAgc2V0IHVw
IGEgc2htZW0gKyBzZW1hcGhvcmUgYWhlYWQtb2YtdGltZSwgc28gdGhhdCB3aGVuIHdlIGVuY291
bnRlciBhIGNhbGwgdG8gZ2V0SW1hZ2VEYXRhKCksCisgICAgICAgIHRoZSBHUFUgcHJvY2VzcyBj
YW4ganVzdCB3cml0ZSBpbnRvIHRoZSBzaG1lbSBhbmQgc2lnbmFsIHRoZSBzZW1hcGhvcmUuIFRo
ZSB3ZWIgcHJvY2VzcyBqdXN0CisgICAgICAgIGVuY29kZXMgdGhlIGdldEltYWdlRGF0YSgpIGNh
bGwgaW50byB0aGUgcmVndWxhciBkaXNwbGF5IGxpc3QsIGZsdXNoQXN5bmMoKXMgdG8ga2ljayB0
aGUgR1BVCisgICAgICAgIHByb2Nlc3MsIHRoZW4ganVzdCB3YWl0cyBvbiB0aGUgc2VtYXBob3Jl
LiBJbml0aWFsIHBlcmZvcm1hbmNlIHRlc3Rpbmcgc2hvd3MgdGhhdCB0aGlzIGlzCisgICAgICAg
IHdheSwgd2F5IGZhc3RlciB0aGFuIHNlbmRpbmcgbWVzc2FnZXMgY29udGFpbmluZyBwaXhlbCBj
b2xvciBkYXRhIHBheWxvYWRzLgorCisgICAgICAgIElmIHdlIG5lZWQgbW9yZSBwZXJmb3JtYW5j
ZSwgdGhlIG5leHQgc3RlcCBpcyB0byB0cnkgdG8gcmVkdWNlIHRoZSBtZW1jcHkoKXMuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdlLgor
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oOgorICAg
ICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNlbWFwaG9yZUZvckdldElt
YWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJl
ZE1lbW9yeUZvckdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OmRpZEZpbmlzaEdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSk6Cisg
ICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3Nh
Z2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVm
ZmVyUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6Om1heWJlUHJlcGFyZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckdldElt
YWdlRGF0YVRvQ29tcGxldGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OmdldEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6CisKIDIwMjEtMDMtMjUg
IEJKIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgU2VuZEtleXMgb24gSW5wdXQg
b2YgdHlwZT1maWxlIHJldHVybnMgZWxlbWVudCBub3QgZm91bmQgaW4gc29tZSBjYXNlcwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVm
ZmVyLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZm
ZXIuaAppbmRleCA2Y2ExZTYwZGFhYmU2ZTA1ODFjMjRiNjFhZDA0Yjk5Njg1MzdhY2M2Li42ZjNj
YmU3OTRiYjA4ODFhNmQ1ZTkyNzBmMjlhMWUyOTMwMDRhZjRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OCw4ICs3
OCwxNSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkdldEltYWdlRGF0YT4oKSkgewogICAgICAgICAgICAgYXV0byYgZ2V0SW1hZ2VE
YXRhSXRlbSA9IGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRJbWFnZURhdGE+KCk7
Ci0gICAgICAgICAgICBVTlVTRURfVkFSSUFCTEUoZ2V0SW1hZ2VEYXRhSXRlbSk7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
MDY0OSBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gQmFzZUNv
bmNyZXRlSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShnZXRJbWFnZURhdGFJdGVtLm91dHB1dEZv
cm1hdCgpLCBnZXRJbWFnZURhdGFJdGVtLnNyY1JlY3QoKSk7CisgICAgICAgICAgICBhdXRvIGdl
dEltYWdlRGF0YVNoYXJlZE1lbW9yeSA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5nZXRJbWFn
ZURhdGFTaGFyZWRNZW1vcnkoKTsKKyAgICAgICAgICAgIGlmIChpbWFnZURhdGEgJiYgaW1hZ2VE
YXRhLT5kYXRhKCkgJiYgZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KQorICAgICAgICAgICAgICAg
IG1lbWNweShnZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPmRhdGEoKSwgaW1hZ2VEYXRhLT5kYXRh
KCktPmRhdGEoKSwgaW1hZ2VEYXRhLT5kYXRhKCktPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KQor
ICAgICAgICAgICAgICAgICAgICBtZW1zZXQoZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5kYXRh
KCksIDAsIGdldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5kaWRGaW5pc2hHZXRJbWFnZURh
dGEoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmNwcAppbmRleCBlZTE0MmYyZjU5ZmRiNmI0Y2FiNTg5MzY3MDNlZGMyNmZjZjE5Yjli
Li5mNTNlZWQ0YzQyOTJmNzk2OGRmYjcwNGEyZjBmNGQ2MzgzYTE4ZGQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMxNiwxNCArMzE2LDI3IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6c2V0TmV4dEl0ZW1CdWZmZXJUb1JlYWQoRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVuCiAg
ICAgbV9wZW5kaW5nV2FrZXVwSW5mbyA9IHt7eyBpZGVudGlmaWVyLCBTaGFyZWREaXNwbGF5TGlz
dEhhbmRsZTo6aGVhZGVyU2l6ZSgpLCBkZXN0aW5hdGlvbklkZW50aWZpZXIsIEdQVVByb2Nlc3NX
YWtldXBSZWFzb246OlVuc3BlY2lmaWVkIH0sIFdURjo6bnVsbG9wdCB9fTsKIH0KIAotdm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBvdXRwdXRGb3JtYXQsIEludFJlY3Qgc3JjUmVjdCwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChS
ZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoY29uc3QgSVBDOjpTZW1hcGhvcmUmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBjb21wbGV0aW9uSGFu
ZGxlcihtX2dldEltYWdlRGF0YVNlbWFwaG9yZSk7Cit9CiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBpbWFnZURhdGE7Ci0gICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNl
Q2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSkKLSAg
ICAgICAgaW1hZ2VEYXRhID0gaW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQs
IHNyY1JlY3QpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoaW1hZ2VEYXRhKSk7Cit2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShz
aXplX3QgYnl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9y
eTo6SVBDSGFuZGxlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFtX2dl
dEltYWdlRGF0YVNoYXJlZE1lbW9yeSB8fCBieXRlQ291bnQgPiBtX2dldEltYWdlRGF0YVNoYXJl
ZE1lbW9yeS0+c2l6ZSgpKTsKKyAgICBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSA9IFNoYXJl
ZE1lbW9yeTo6YWxsb2NhdGUoYnl0ZUNvdW50KTsKKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBo
YW5kbGU7CisgICAgaWYgKG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KQorICAgICAgICBtX2dl
dEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5
OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoU2hhcmVkTWVt
b3J5OjpJUENIYW5kbGUgeyBXVEZNb3ZlKGhhbmRsZSksIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVt
b3J5ID8gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPnNpemUoKSA6IDAgfSk7Cit9CisKK3Zv
aWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkRmluaXNoR2V0SW1hZ2VEYXRhKCkKK3sKKyNp
ZiBPUyhEQVJXSU4pCisgICAgbV9nZXRJbWFnZURhdGFTZW1hcGhvcmUuc2lnbmFsKCk7CisjZW5k
aWYKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXREYXRhVVJMRm9ySW1hZ2VC
dWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBX
ZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5oCmluZGV4IDM5NDNkNTIxZDM2OTNmYmQyY2VmMzZiNDdkMzQ5NmIxYzJk
ZjM2NTkuLmIxNGM0ODg5ZDE1MjhjYTU4ZDdmZTc4ODU0YWM3OGYwNjk2MzM2NzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC03OSw2ICs3OSw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0TmV4dEl0
ZW1CdWZmZXJUb1JlYWQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVy
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb24pOwogCisg
ICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KCkgeyByZXR1
cm4gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnk7IH0KKyAgICB2b2lkIGRpZEZpbmlzaEdldElt
YWdlRGF0YSgpOworCiAgICAgLy8gUnVucyBGdW5jdGlvbiBpbiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kIHRhc2sgcXVldWUuCiAgICAgdm9pZCBkaXNwYXRjaChGdW5jdGlvbjx2b2lkKCk+JiYpOwog
CkBAIC0xMTQsNyArMTE3LDggQEAgcHJpdmF0ZToKICAgICAvLyBNZXNzYWdlcyB0byBiZSByZWNl
aXZlZC4KICAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlLCBXZWJDb3JlOjpQaXhlbEZvcm1h
dCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIHdha2VV
cEFuZEFwcGx5RGlzcGxheUxpc3QoY29uc3QgR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVu
dHMmKTsKLSAgICB2b2lkIGdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgV2ViQ29yZTo6SW50UmVjdCBzcmNSZWN0LCBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFdl
YkNvcmU6OkltYWdlRGF0YT4mJik+JiYpOworICAgIHZvaWQgc2VtYXBob3JlRm9yR2V0SW1hZ2VE
YXRhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSVBDOjpTZW1hcGhvcmUmKT4mJik7Cisg
ICAgdm9pZCBzaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoc2l6ZV90IGJ5dGVDb3VudCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpPiYmKTsK
ICAgICB2b2lkIGdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwg
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFN0cmluZyYmKT4mJik7CiAgICAgdm9pZCBnZXREYXRhRm9ySW1hZ2VCdWZmZXIoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVp
bnQ4X3Q+JiYpPiYmKTsKICAgICB2b2lkIGdldEJHUkFEYXRhRm9ySW1hZ2VCdWZmZXIoV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3Rvcjx1aW50OF90PiYmKT4mJik7CkBAIC0xNDgsNiArMTUyLDggQEAgcHJpdmF0ZToKICAgICBI
YXNoTWFwPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgUmVmUHRy
PERpc3BsYXlMaXN0UmVhZGVySGFuZGxlPj4gbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXM7CiAg
ICAgT3B0aW9uYWw8UGVuZGluZ1dha2V1cEluZm9ybWF0aW9uPiBtX3BlbmRpbmdXYWtldXBJbmZv
OwogICAgIElQQzo6U2VtYXBob3JlIG1fcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmU7CisgICAg
SVBDOjpTZW1hcGhvcmUgbV9nZXRJbWFnZURhdGFTZW1hcGhvcmU7CisgICAgUmVmUHRyPFNoYXJl
ZE1lbW9yeT4gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnk7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggMTM4
MmNhNWU5MjhkNDU4MWViNWY3OGI3MGNkOTIyMzcyOGJiNmZkNS4uYWE4YzZmOWVkZjFkMTMzMWRj
ZTJkNDU2YjlhYTJhMzNjMDIwYzljZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVz
c2FnZXMuaW4KQEAgLTI1LDcgKzI1LDggQEAKIG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQgewogICAgIENyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2Fs
U2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBlbnVt
OnVpbnQ4X3QgV2ViQ29yZTo6UGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiAgICAg
V2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChzdHJ1Y3QgV2ViS2l0OjpHUFVQcm9jZXNzV2FrZXVw
TWVzc2FnZUFyZ3VtZW50cyBhcmd1bWVudHMpCi0gICAgR2V0SW1hZ2VEYXRhKGVudW06dWludDhf
dCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgV2ViQ29yZTo6
SW50UmVjdCBzcmNSZWN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4g
aW1hZ2VEYXRhKSBTeW5jaHJvbm91cworICAgIFNlbWFwaG9yZUZvckdldEltYWdlRGF0YSgpIC0+
IChJUEM6OlNlbWFwaG9yZSBzZW1hcGhvcmUpIFN5bmNocm9ub3VzCisgICAgU2hhcmVkTWVtb3J5
Rm9yR2V0SW1hZ2VEYXRhKHNpemVfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9y
eTo6SVBDSGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKICAgICBHZXREYXRhVVJMRm9ySW1hZ2VC
dWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIGVudW06dWlu
dDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKSAtPiAoU3RyaW5nIHVybFN0cmluZykgU3luY2hyb25vdXMKICAgICBHZXREYXRhRm9ySW1h
Z2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpIC0+IChWZWN0b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25vdXMKICAgICBHZXRCR1JBRGF0
YUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChWZWN0b3I8dWludDhfdD4gZGF0YSkgU3luY2hy
b25vdXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggNWJiZjI1NjMwNjI5MGU0OWFj
OGRiMzFiNWQwMWFjOTZiNTZhYWM0Mi4uYjUxODYyNDYyYzg5YzY1MmMzYzM5ZDkwMmY3YzFhYmNh
MDI1NzQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTMsMTIgKzE5MywyMiBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICAgICAgYXV0byBp
bWFnZURhdGEgPSBXZWJDb3JlOjpJbWFnZURhdGE6OmNyZWF0ZShzcmNSZWN0LnNpemUoKSk7Cisg
ICAgICAgIGlmICghaW1hZ2VEYXRhIHx8ICFpbWFnZURhdGEtPmRhdGEoKSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICBzaXplX3QgZGF0YVNpemUgPSBpbWFnZURhdGEtPmRh
dGEoKS0+Ynl0ZUxlbmd0aCgpOworCisgICAgICAgIFNoYXJlZE1lbW9yeSogc2hhcmVkTWVtb3J5
ID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPm1heWJlUHJlcGFyZVNoYXJlZE1lbW9y
eUZvckdldEltYWdlRGF0YShkYXRhU2l6ZSk7CisgICAgICAgIGlmICghc2hhcmVkTWVtb3J5KQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICAgICAgYXV0byYgbXV0YWJsZVRoaXMg
PSBjb25zdF9jYXN0PFJlbW90ZUltYWdlQnVmZmVyUHJveHkmPigqdGhpcyk7CiAgICAgICAgIG11
dGFibGVUaGlzLm1fZHJhd2luZ0NvbnRleHQucmVjb3JkZXIoKS5nZXRJbWFnZURhdGEob3V0cHV0
Rm9ybWF0LCBzcmNSZWN0KTsKLSAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA2NDkgVXNlIHRoZSByZWNvcmRlZCBjb21tYW5kIGluc3Rl
YWQgb2YgdGhlIHN5bmNocm9ub3VzIElQQyBtZXNzYWdlLgorICAgICAgICBtdXRhYmxlVGhpcy5m
bHVzaERyYXdpbmdDb250ZXh0QXN5bmMoKTsKIAotICAgICAgICBjb25zdF9jYXN0PFJlbW90ZUlt
YWdlQnVmZmVyUHJveHkqPih0aGlzKS0+Zmx1c2hEcmF3aW5nQ29udGV4dCgpOwotICAgICAgICBy
ZXR1cm4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPmdldEltYWdlRGF0YShvdXRwdXRG
b3JtYXQsIHNyY1JlY3QsIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICAgICAg
bV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPndhaXRGb3JHZXRJbWFnZURhdGFUb0NvbXBs
ZXRlKCk7CisgICAgICAgIG1lbWNweShpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBzaGFyZWRN
ZW1vcnktPmRhdGEoKSwgZGF0YVNpemUpOworICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOwogICAg
IH0KIAogICAgIHZvaWQgcHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVz
dFBvaW50ID0geyB9LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQg
PSBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlk
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4IDFhMGM2MzIw
ZTNiYmRmMTYzZTQ3MDYyNWRmYTNiYmFlZTc3NmI5MjUuLjc3ZGE0NGUzN2UxNjcwN2FjZWI3ZGZk
NWY3ZjM2NmYwZDdhNWZlMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTQzLDEzICsxNDMsMzMgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2kKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCitTaGFyZWRNZW1vcnkqIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6bWF5YmVQcmVwYXJlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKHNpemVf
dCBkYXRhU2l6ZSkKIHsKICAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsK
IAotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YTsKLSAgICBzZW5kU3luYyhNZXNzYWdl
czo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3Jj
UmVjdCwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OkdldEltYWdlRGF0YTo6UmVwbHkoaW1hZ2VEYXRhKSwgbV9yZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllciwgMV9zKTsKLSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIC8vIEZJ
WE1FOiBEZXRlcm1pbmUgaWYgaXQncyBhZHZhbnRhZ2VvdXMgdG8gYWRkIGEgM3JkIG1lc3NhZ2Ug
dGhhdCBkb2VzIGJvdGggU2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhIGFuZCBTaGFyZWRNZW1vcnlG
b3JHZXRJbWFnZURhdGEgaW4gYSBzaW5nbGUgbWVzc2FnZSwgd2hlbiB3ZSBuZWVkIGJvdGggdGhl
IHNlbWFwaG9yZSBhbmQgdGhlIHNoYXJlZCBtZW1vcnkgYXQgdGhlIHNhbWUgdGltZS4KKworICAg
IGlmICghbV9nZXRJbWFnZURhdGFTZW1hcGhvcmUpIHsKKyAgICAgICAgSVBDOjpTZW1hcGhvcmUg
c2VtYXBob3JlOworICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6U2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKCksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGE6OlJlcGx5KHNlbWFwaG9yZSksIG1f
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIsIDFfcyk7CisgICAgICAgIG1fZ2V0SW1hZ2VEYXRh
U2VtYXBob3JlID0gV1RGTW92ZShzZW1hcGhvcmUpOworICAgIH0KKworICAgIGlmICghbV9nZXRJ
bWFnZURhdGFTaGFyZWRNZW1vcnkgfHwgZGF0YVNpemUgPiBtX2dldEltYWdlRGF0YVNoYXJlZE1l
bW9yeS0+c2l6ZSgpKSB7CisgICAgICAgIFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZTsK
KyAgICAgICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlNoYXJl
ZE1lbW9yeUZvckdldEltYWdlRGF0YShkYXRhU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGE6OlJlcGx5KGhhbmRsZSksIG1f
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIsIDFfcyk7CisgICAgICAgIG1fZ2V0SW1hZ2VEYXRh
U2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjptYXAoaGFuZGxlLmhhbmRsZSwgU2hhcmVkTWVt
b3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisgICAgfQorCisgICAgcmV0dXJuIG1fZ2V0SW1h
Z2VEYXRhU2hhcmVkTWVtb3J5LmdldCgpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6d2FpdEZvckdldEltYWdlRGF0YVRvQ29tcGxldGUoKQoreworICAgIEFTU0VSVCht
X2dldEltYWdlRGF0YVNlbWFwaG9yZSk7CisjaWYgT1MoREFSV0lOKQorICAgIG1fZ2V0SW1hZ2VE
YXRhU2VtYXBob3JlLT53YWl0Rm9yKDVfcyk7CisjZW5kaWYKIH0KIAogU3RyaW5nIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbiwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
CmluZGV4IDk0YmMzY2QxODZjYzJkY2JjNDkwYTU4Y2UyMjI2NjYxZDdiYTExNTQuLjFjMzIxZTcy
OTU2NDU1YjE3MTU1OTM4NmMyOGIwNWI2NDRiYTllYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC03NSw2ICs3NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHdpbGxBcHBl
bmRJdGVtKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBz
ZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKIAorICAgIFNoYXJlZE1lbW9yeSog
bWF5YmVQcmVwYXJlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKHNpemVfdCBkYXRhU2l6ZSk7
CisgICAgdm9pZCB3YWl0Rm9yR2V0SW1hZ2VEYXRhVG9Db21wbGV0ZSgpOworCiAgICAgLy8gSVBD
OjpNZXNzYWdlU2VuZGVyLgogICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5l
Y3Rpb24oKSBjb25zdCBvdmVycmlkZTsKICAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGlu
YXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtODQsNyArODcsNiBAQCBwdWJsaWM6CiAKICAg
ICAvLyBNZXNzYWdlcyB0byBiZSBzZW50LgogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZl
cj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6
UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlv
bkNvbG9yU3BhY2UsIFdlYkNvcmU6OlBpeGVsRm9ybWF0KTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6
SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgU3RyaW5nIGdldERhdGFVUkxGb3JJbWFn
ZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHks
IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKTsKICAgICBWZWN0b3I8dWludDhfdD4gZ2V0RGF0YUZvckltYWdlQnVmZmVyKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICBWZWN0b3I8dWludDhfdD4gZ2V0QkdS
QURhdGFGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
OwpAQCAtMTI5LDYgKzEzMSw4IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8R1BVUHJvY2Vzc1dh
a2V1cE1lc3NhZ2VBcmd1bWVudHM+IG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzOwog
ICAgIHVuc2lnbmVkIG1fcmVtYWluaW5nSXRlbXNUb0FwcGVuZEJlZm9yZVNlbmRpbmdXYWtldXAg
eyAwIH07CiAgICAgSVBDOjpTZW1hcGhvcmUgbV9yZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZTsK
KyAgICBPcHRpb25hbDxJUEM6OlNlbWFwaG9yZT4gbV9nZXRJbWFnZURhdGFTZW1hcGhvcmU7Cisg
ICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnk7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424304</attachid>
            <date>2021-03-25 17:18:58 -0700</date>
            <delta_ts>2021-03-25 17:19:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223732-20210325171857.patch</filename>
            <type>text/plain</type>
            <size>18594</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MDUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGNlNzM2MThkNmQ3Yzg4N2U4
ZDJiZmI2ZTNmM2MwOTFiYzNhMTA2YzEuLmFmZGE2ZTQwYzkyMDQ4MTc4YjA3NmUyMDAwN2Q3YTBi
ZjUxOGMzNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMjEtMDMtMjUgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
OiBJbXByb3ZlIGdldEltYWdlRGF0YSgpIHBlcmYgcGFydCAyOiBVc2Ugc2hhcmVkIG1lbW9yeSBh
bmQgYSBzZW1hcGhvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMzczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBhIGRlc2lnbiBmb3IgZ2V0SW1hZ2VEYXRhKCkg
d2hlcmUgdGhlIHdlYiBwcm9jZXNzIGFuZCB0aGUgR1BVIHByb2Nlc3MKKyAgICAgICAgc2V0IHVw
IGEgc2htZW0gKyBzZW1hcGhvcmUgYWhlYWQtb2YtdGltZSwgc28gdGhhdCB3aGVuIHdlIGVuY291
bnRlciBhIGNhbGwgdG8gZ2V0SW1hZ2VEYXRhKCksCisgICAgICAgIHRoZSBHUFUgcHJvY2VzcyBj
YW4ganVzdCB3cml0ZSBpbnRvIHRoZSBzaG1lbSBhbmQgc2lnbmFsIHRoZSBzZW1hcGhvcmUuIFRo
ZSB3ZWIgcHJvY2VzcyBqdXN0CisgICAgICAgIGVuY29kZXMgdGhlIGdldEltYWdlRGF0YSgpIGNh
bGwgaW50byB0aGUgcmVndWxhciBkaXNwbGF5IGxpc3QsIGZsdXNoQXN5bmMoKXMgdG8ga2ljayB0
aGUgR1BVCisgICAgICAgIHByb2Nlc3MsIHRoZW4ganVzdCB3YWl0cyBvbiB0aGUgc2VtYXBob3Jl
LiBJbml0aWFsIHBlcmZvcm1hbmNlIHRlc3Rpbmcgc2hvd3MgdGhhdCB0aGlzIGlzCisgICAgICAg
IHdheSwgd2F5IGZhc3RlciB0aGFuIHNlbmRpbmcgbWVzc2FnZXMgY29udGFpbmluZyBwaXhlbCBj
b2xvciBkYXRhIHBheWxvYWRzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2F1c2VzIGEgfjQwJSBw
cm9ncmVzc2lvbiBvbiB0aGUgSW1hZ2VzIHRlc3QgaW4gTW90aW9uTWFyayBvbiBteSBNYWMgd2l0
aCB0aGUgR1BVCisgICAgICAgIHByb2Nlc3MgZW5hYmxlZC4gV2hlbiBjb21wYXJlZCB0byB0aGUg
R1BVIHByb2Nlc3MgZW5hYmxlZCwgdGhlIHJlc3VsdHMgYWZ0ZXIganVzdCBydW5uaW5nCisgICAg
ICAgIGp1c3QgYSBmZXcgdGltZXMgc2VlbSB0byBiZSBwcmV0dHkgY2xvc2UgKHdpdGhpbiB0aGUg
bm9pc2UpLgorCisgICAgICAgIElmIHdlIG5lZWQgbW9yZSBwZXJmb3JtYW5jZSwgdGhlIG5leHQg
c3RlcCBpcyB0byB0cnkgdG8gcmVkdWNlIHRoZSBtZW1jcHkoKXMuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICog
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIEdQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNlbWFwaG9yZUZvckdldEltYWdlRGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZE1lbW9yeUZvckdl
dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRp
ZEZpbmlzaEdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmdldEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSk6CisgICAgICAgICogR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
Om1heWJlUHJlcGFyZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckdldEltYWdlRGF0YVRvQ29t
cGxldGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Omdl
dEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6CisKIDIwMjEtMDMtMjUgIEJKIEJ1cmcgIDxi
YnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgU2VuZEtleXMgb24gSW5wdXQgb2YgdHlwZT1maWxl
IHJldHVybnMgZWxlbWVudCBub3QgZm91bmQgaW4gc29tZSBjYXNlcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmggYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAppbmRleCA2
Y2ExZTYwZGFhYmU2ZTA1ODFjMjRiNjFhZDA0Yjk5Njg1MzdhY2M2Li42ZjNjYmU3OTRiYjA4ODFh
NmQ1ZTkyNzBmMjlhMWUyOTMwMDRhZjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OCw4ICs3OCwxNSBAQCBwcml2
YXRlOgogICAgIHsKICAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okdl
dEltYWdlRGF0YT4oKSkgewogICAgICAgICAgICAgYXV0byYgZ2V0SW1hZ2VEYXRhSXRlbSA9IGl0
ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRJbWFnZURhdGE+KCk7Ci0gICAgICAgICAg
ICBVTlVTRURfVkFSSUFCTEUoZ2V0SW1hZ2VEYXRhSXRlbSk7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDY0OSBJbXBsZW1l
bnQgdGhpcy4KKyAgICAgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gQmFzZUNvbmNyZXRlSW1hZ2VC
dWZmZXI6OmdldEltYWdlRGF0YShnZXRJbWFnZURhdGFJdGVtLm91dHB1dEZvcm1hdCgpLCBnZXRJ
bWFnZURhdGFJdGVtLnNyY1JlY3QoKSk7CisgICAgICAgICAgICBhdXRvIGdldEltYWdlRGF0YVNo
YXJlZE1lbW9yeSA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5nZXRJbWFnZURhdGFTaGFyZWRN
ZW1vcnkoKTsKKyAgICAgICAgICAgIGlmIChpbWFnZURhdGEgJiYgaW1hZ2VEYXRhLT5kYXRhKCkg
JiYgZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KQorICAgICAgICAgICAgICAgIG1lbWNweShnZXRJ
bWFnZURhdGFTaGFyZWRNZW1vcnktPmRhdGEoKSwgaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwg
aW1hZ2VEYXRhLT5kYXRhKCktPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KQorICAgICAgICAgICAg
ICAgICAgICBtZW1zZXQoZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5kYXRhKCksIDAsIGdldElt
YWdlRGF0YVNoYXJlZE1lbW9yeS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5kaWRGaW5pc2hHZXRJbWFnZURhdGEoKTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApp
bmRleCBlZTE0MmYyZjU5ZmRiNmI0Y2FiNTg5MzY3MDNlZGMyNmZjZjE5YjliLi5mNTNlZWQ0YzQy
OTJmNzk2OGRmYjcwNGEyZjBmNGQ2MzgzYTE4ZGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMxNiwxNCArMzE2LDI3IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c2V0TmV4dEl0
ZW1CdWZmZXJUb1JlYWQoRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVuCiAgICAgbV9wZW5kaW5n
V2FrZXVwSW5mbyA9IHt7eyBpZGVudGlmaWVyLCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6aGVh
ZGVyU2l6ZSgpLCBkZXN0aW5hdGlvbklkZW50aWZpZXIsIEdQVVByb2Nlc3NXYWtldXBSZWFzb246
OlVuc3BlY2lmaWVkIH0sIFdURjo6bnVsbG9wdCB9fTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIEludFJlY3Qgc3JjUmVjdCwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8V2ViQ29y
ZTo6SW1hZ2VEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6c2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoY29uc3QgSVBDOjpTZW1hcGhvcmUmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihtX2dldElt
YWdlRGF0YVNlbWFwaG9yZSk7Cit9CiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGE7
Ci0gICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVk
SW1hZ2VCdWZmZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSkKLSAgICAgICAgaW1hZ2VE
YXRhID0gaW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QpOwot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoaW1hZ2VEYXRhKSk7Cit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OnNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShzaXplX3QgYnl0ZUNv
dW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxl
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFtX2dldEltYWdlRGF0YVNo
YXJlZE1lbW9yeSB8fCBieXRlQ291bnQgPiBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+c2l6
ZSgpKTsKKyAgICBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6YWxs
b2NhdGUoYnl0ZUNvdW50KTsKKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAg
aWYgKG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KQorICAgICAgICBtX2dldEltYWdlRGF0YVNo
YXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9u
OjpSZWFkT25seSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoU2hhcmVkTWVtb3J5OjpJUENIYW5k
bGUgeyBXVEZNb3ZlKGhhbmRsZSksIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5ID8gbV9nZXRJ
bWFnZURhdGFTaGFyZWRNZW1vcnktPnNpemUoKSA6IDAgfSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6ZGlkRmluaXNoR2V0SW1hZ2VEYXRhKCkKK3sKKyNpZiBPUyhEQVJXSU4p
CisgICAgbV9nZXRJbWFnZURhdGFTZW1hcGhvcmUuc2lnbmFsKCk7CisjZW5kaWYKIH0KIAogdm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5oCmluZGV4IDM5NDNkNTIxZDM2OTNmYmQyY2VmMzZiNDdkMzQ5NmIxYzJkZjM2NTkuLmIxNGM0
ODg5ZDE1MjhjYTU4ZDdmZTc4ODU0YWM3OGYwNjk2MzM2NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKKysrIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
aApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03OSw2ICs3OSw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0TmV4dEl0ZW1CdWZmZXJUb1Jl
YWQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb24pOwogCisgICAgUmVmUHRyPFNo
YXJlZE1lbW9yeT4gZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KCkgeyByZXR1cm4gbV9nZXRJbWFn
ZURhdGFTaGFyZWRNZW1vcnk7IH0KKyAgICB2b2lkIGRpZEZpbmlzaEdldEltYWdlRGF0YSgpOwor
CiAgICAgLy8gUnVucyBGdW5jdGlvbiBpbiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHRhc2sgcXVl
dWUuCiAgICAgdm9pZCBkaXNwYXRjaChGdW5jdGlvbjx2b2lkKCk+JiYpOwogCkBAIC0xMTQsNyAr
MTE3LDggQEAgcHJpdmF0ZToKICAgICAvLyBNZXNzYWdlcyB0byBiZSByZWNlaXZlZC4KICAgICB2
b2lkIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNp
emUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29y
ZTo6RGVzdGluYXRpb25Db2xvclNwYWNlLCBXZWJDb3JlOjpQaXhlbEZvcm1hdCwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIHdha2VVcEFuZEFwcGx5RGlz
cGxheUxpc3QoY29uc3QgR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMmKTsKLSAgICB2
b2lkIGdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgV2ViQ29yZTo6SW50UmVjdCBzcmNSZWN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFdlYkNvcmU6OkltYWdl
RGF0YT4mJik+JiYpOworICAgIHZvaWQgc2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoY29uc3QgSVBDOjpTZW1hcGhvcmUmKT4mJik7CisgICAgdm9pZCBzaGFy
ZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoc2l6ZV90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpPiYmKTsKICAgICB2b2lkIGdl
dERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYm
KT4mJik7CiAgICAgdm9pZCBnZXREYXRhRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYm
KTsKICAgICB2b2lkIGdldEJHUkFEYXRhRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90
PiYmKT4mJik7CkBAIC0xNDgsNiArMTUyLDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgUmVmUHRyPERpc3BsYXlMaXN0
UmVhZGVySGFuZGxlPj4gbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXM7CiAgICAgT3B0aW9uYWw8
UGVuZGluZ1dha2V1cEluZm9ybWF0aW9uPiBtX3BlbmRpbmdXYWtldXBJbmZvOwogICAgIElQQzo6
U2VtYXBob3JlIG1fcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmU7CisgICAgSVBDOjpTZW1hcGhv
cmUgbV9nZXRJbWFnZURhdGFTZW1hcGhvcmU7CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9n
ZXRJbWFnZURhdGFTaGFyZWRNZW1vcnk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggMTM4MmNhNWU5MjhkNDU4
MWViNWY3OGI3MGNkOTIyMzcyOGJiNmZkNS4uYWE4YzZmOWVkZjFkMTMzMWRjZTJkNDU2YjlhYTJh
MzNjMDIwYzljZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KQEAg
LTI1LDcgKzI1LDggQEAKIG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgewogICAg
IENyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdl
YkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBlbnVtOnVpbnQ4X3QgV2Vi
Q29yZTo6UGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiAgICAgV2FrZVVwQW5kQXBw
bHlEaXNwbGF5TGlzdChzdHJ1Y3QgV2ViS2l0OjpHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3Vt
ZW50cyBhcmd1bWVudHMpCi0gICAgR2V0SW1hZ2VEYXRhKGVudW06dWludDhfdCBXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgV2ViQ29yZTo6SW50UmVjdCBzcmNS
ZWN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKSAtPiAoUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4gaW1hZ2VEYXRhKSBT
eW5jaHJvbm91cworICAgIFNlbWFwaG9yZUZvckdldEltYWdlRGF0YSgpIC0+IChJUEM6OlNlbWFw
aG9yZSBzZW1hcGhvcmUpIFN5bmNocm9ub3VzCisgICAgU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VE
YXRhKHNpemVfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxl
IGhhbmRsZSkgU3luY2hyb25vdXMKICAgICBHZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoU3RyaW5n
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIGVudW06dWludDhfdCBXZWJDb3Jl
OjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoU3Ry
aW5nIHVybFN0cmluZykgU3luY2hyb25vdXMKICAgICBHZXREYXRhRm9ySW1hZ2VCdWZmZXIoU3Ry
aW5nIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChWZWN0
b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25vdXMKICAgICBHZXRCR1JBRGF0YUZvckltYWdlQnVm
ZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpIC0+IChWZWN0b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25vdXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggNWJiZjI1NjMwNjI5MGU0OWFjOGRiMzFiNWQwMWFj
OTZiNTZhYWM0Mi4uYjUxODYyNDYyYzg5YzY1MmMzYzM5ZDkwMmY3YzFhYmNhMDI1NzQ3OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTMsMTIgKzE5MywyMiBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBX
ZWJDb3JlOjpJbWFnZURhdGE6OmNyZWF0ZShzcmNSZWN0LnNpemUoKSk7CisgICAgICAgIGlmICgh
aW1hZ2VEYXRhIHx8ICFpbWFnZURhdGEtPmRhdGEoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICBzaXplX3QgZGF0YVNpemUgPSBpbWFnZURhdGEtPmRhdGEoKS0+Ynl0ZUxl
bmd0aCgpOworCisgICAgICAgIFNoYXJlZE1lbW9yeSogc2hhcmVkTWVtb3J5ID0gbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHktPm1heWJlUHJlcGFyZVNoYXJlZE1lbW9yeUZvckdldEltYWdl
RGF0YShkYXRhU2l6ZSk7CisgICAgICAgIGlmICghc2hhcmVkTWVtb3J5KQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKICAgICAgICAgYXV0byYgbXV0YWJsZVRoaXMgPSBjb25zdF9jYXN0
PFJlbW90ZUltYWdlQnVmZmVyUHJveHkmPigqdGhpcyk7CiAgICAgICAgIG11dGFibGVUaGlzLm1f
ZHJhd2luZ0NvbnRleHQucmVjb3JkZXIoKS5nZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNS
ZWN0KTsKLSAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjA2NDkgVXNlIHRoZSByZWNvcmRlZCBjb21tYW5kIGluc3RlYWQgb2YgdGhlIHN5
bmNocm9ub3VzIElQQyBtZXNzYWdlLgorICAgICAgICBtdXRhYmxlVGhpcy5mbHVzaERyYXdpbmdD
b250ZXh0QXN5bmMoKTsKIAotICAgICAgICBjb25zdF9jYXN0PFJlbW90ZUltYWdlQnVmZmVyUHJv
eHkqPih0aGlzKS0+Zmx1c2hEcmF3aW5nQ29udGV4dCgpOwotICAgICAgICByZXR1cm4gbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1Jl
Y3QsIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICAgICAgbV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHktPndhaXRGb3JHZXRJbWFnZURhdGFUb0NvbXBsZXRlKCk7CisgICAg
ICAgIG1lbWNweShpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBzaGFyZWRNZW1vcnktPmRhdGEo
KSwgZGF0YVNpemUpOworICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOwogICAgIH0KIAogICAgIHZv
aWQgcHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3Jt
YXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9
LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQgPSBXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlkZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4IDFhMGM2MzIwZTNiYmRmMTYzZTQ3
MDYyNWRmYTNiYmFlZTc3NmI5MjUuLjc3ZGE0NGUzN2UxNjcwN2FjZWI3ZGZkNWY3ZjM2NmYwZDdh
NWZlMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQzLDEz
ICsxNDMsMzMgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2kKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotUmVmUHRyPEltYWdlRGF0YT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpCitTaGFyZWRNZW1vcnkqIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
bWF5YmVQcmVwYXJlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKHNpemVfdCBkYXRhU2l6ZSkK
IHsKICAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKIAotICAgIFJlZlB0
cjxJbWFnZURhdGE+IGltYWdlRGF0YTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6R2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OkdldEltYWdlRGF0YTo6UmVwbHkoaW1hZ2VEYXRhKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllciwgMV9zKTsKLSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIC8vIEZJWE1FOiBEZXRlcm1p
bmUgaWYgaXQncyBhZHZhbnRhZ2VvdXMgdG8gYWRkIGEgM3JkIG1lc3NhZ2UgdGhhdCBkb2VzIGJv
dGggU2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhIGFuZCBTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURh
dGEgaW4gYSBzaW5nbGUgbWVzc2FnZSwgd2hlbiB3ZSBuZWVkIGJvdGggdGhlIHNlbWFwaG9yZSBh
bmQgdGhlIHNoYXJlZCBtZW1vcnkgYXQgdGhlIHNhbWUgdGltZS4KKworICAgIGlmICghbV9nZXRJ
bWFnZURhdGFTZW1hcGhvcmUpIHsKKyAgICAgICAgSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlOwor
ICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6U2VtYXBo
b3JlRm9yR2V0SW1hZ2VEYXRhKCksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpT
ZW1hcGhvcmVGb3JHZXRJbWFnZURhdGE6OlJlcGx5KHNlbWFwaG9yZSksIG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIsIDFfcyk7CisgICAgICAgIG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlID0g
V1RGTW92ZShzZW1hcGhvcmUpOworICAgIH0KKworICAgIGlmICghbV9nZXRJbWFnZURhdGFTaGFy
ZWRNZW1vcnkgfHwgZGF0YVNpemUgPiBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+c2l6ZSgp
KSB7CisgICAgICAgIFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZTsKKyAgICAgICAgc2Vu
ZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlNoYXJlZE1lbW9yeUZvckdl
dEltYWdlRGF0YShkYXRhU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpT
aGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGE6OlJlcGx5KGhhbmRsZSksIG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIsIDFfcyk7CisgICAgICAgIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5
ID0gU2hhcmVkTWVtb3J5OjptYXAoaGFuZGxlLmhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0
aW9uOjpSZWFkT25seSk7CisgICAgfQorCisgICAgcmV0dXJuIG1fZ2V0SW1hZ2VEYXRhU2hhcmVk
TWVtb3J5LmdldCgpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2Fp
dEZvckdldEltYWdlRGF0YVRvQ29tcGxldGUoKQoreworICAgIEFTU0VSVChtX2dldEltYWdlRGF0
YVNlbWFwaG9yZSk7CisjaWYgT1MoREFSV0lOKQorICAgIG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3Jl
LT53YWl0Rm9yKDVfcyk7CisjZW5kaWYKIH0KIAogU3RyaW5nIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6Z2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbiwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCmluZGV4IDk0YmMz
Y2QxODZjYzJkY2JjNDkwYTU4Y2UyMjI2NjYxZDdiYTExNTQuLjFjMzIxZTcyOTU2NDU1YjE3MTU1
OTM4NmMyOGIwNWI2NDRiYTllYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC03NSw2ICs3NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHdpbGxBcHBlbmRJdGVtKFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBzZW5kRGVmZXJyZWRX
YWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKIAorICAgIFNoYXJlZE1lbW9yeSogbWF5YmVQcmVwYXJl
U2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKHNpemVfdCBkYXRhU2l6ZSk7CisgICAgdm9pZCB3
YWl0Rm9yR2V0SW1hZ2VEYXRhVG9Db21wbGV0ZSgpOworCiAgICAgLy8gSVBDOjpNZXNzYWdlU2Vu
ZGVyLgogICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25z
dCBvdmVycmlkZTsKICAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNv
bnN0IG92ZXJyaWRlOwpAQCAtODQsNyArODcsNiBAQCBwdWJsaWM6CiAKICAgICAvLyBNZXNzYWdl
cyB0byBiZSBzZW50LgogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1h
Z2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9k
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2Us
IFdlYkNvcmU6OlBpeGVsRm9ybWF0KTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBn
ZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7CiAgICAgU3RyaW5nIGdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlBy
ZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsK
ICAgICBWZWN0b3I8dWludDhfdD4gZ2V0RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKTsKICAgICBWZWN0b3I8dWludDhfdD4gZ2V0QkdSQURhdGFGb3JJbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwpAQCAtMTI5LDYg
KzEzMSw4IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8R1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VB
cmd1bWVudHM+IG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzOwogICAgIHVuc2lnbmVk
IG1fcmVtYWluaW5nSXRlbXNUb0FwcGVuZEJlZm9yZVNlbmRpbmdXYWtldXAgeyAwIH07CiAgICAg
SVBDOjpTZW1hcGhvcmUgbV9yZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZTsKKyAgICBPcHRpb25h
bDxJUEM6OlNlbWFwaG9yZT4gbV9nZXRJbWFnZURhdGFTZW1hcGhvcmU7CisgICAgUmVmUHRyPFNo
YXJlZE1lbW9yeT4gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnk7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424305</attachid>
            <date>2021-03-25 17:19:59 -0700</date>
            <delta_ts>2021-03-26 00:49:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223732-20210325171958.patch</filename>
            <type>text/plain</type>
            <size>18595</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MDUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGNlNzM2MThkNmQ3Yzg4N2U4
ZDJiZmI2ZTNmM2MwOTFiYzNhMTA2YzEuLjAyNzM5MTJlZWQ5Yzk1ZWM5ZDEwMGEwYmQ1NmVmYzI3
NzQxMGVjNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMjEtMDMtMjUgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
OiBJbXByb3ZlIGdldEltYWdlRGF0YSgpIHBlcmYgcGFydCAyOiBVc2Ugc2hhcmVkIG1lbW9yeSBh
bmQgYSBzZW1hcGhvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMzczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBhIGRlc2lnbiBmb3IgZ2V0SW1hZ2VEYXRhKCkg
d2hlcmUgdGhlIHdlYiBwcm9jZXNzIGFuZCB0aGUgR1BVIHByb2Nlc3MKKyAgICAgICAgc2V0IHVw
IGEgc2htZW0gKyBzZW1hcGhvcmUgYWhlYWQtb2YtdGltZSwgc28gdGhhdCB3aGVuIHdlIGVuY291
bnRlciBhIGNhbGwgdG8gZ2V0SW1hZ2VEYXRhKCksCisgICAgICAgIHRoZSBHUFUgcHJvY2VzcyBj
YW4ganVzdCB3cml0ZSBpbnRvIHRoZSBzaG1lbSBhbmQgc2lnbmFsIHRoZSBzZW1hcGhvcmUuIFRo
ZSB3ZWIgcHJvY2VzcyBqdXN0CisgICAgICAgIGVuY29kZXMgdGhlIGdldEltYWdlRGF0YSgpIGNh
bGwgaW50byB0aGUgcmVndWxhciBkaXNwbGF5IGxpc3QsIGZsdXNoQXN5bmMoKXMgdG8ga2ljayB0
aGUgR1BVCisgICAgICAgIHByb2Nlc3MsIHRoZW4ganVzdCB3YWl0cyBvbiB0aGUgc2VtYXBob3Jl
LiBJbml0aWFsIHBlcmZvcm1hbmNlIHRlc3Rpbmcgc2hvd3MgdGhhdCB0aGlzIGlzCisgICAgICAg
IHdheSwgd2F5IGZhc3RlciB0aGFuIHNlbmRpbmcgbWVzc2FnZXMgY29udGFpbmluZyBwaXhlbCBj
b2xvciBkYXRhIHBheWxvYWRzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2F1c2VzIGEgfjQwJSBw
cm9ncmVzc2lvbiBvbiB0aGUgSW1hZ2VzIHRlc3QgaW4gTW90aW9uTWFyayBvbiBteSBNYWMgd2l0
aCB0aGUgR1BVCisgICAgICAgIHByb2Nlc3MgZW5hYmxlZC4gV2hlbiBjb21wYXJlZCB0byB0aGUg
R1BVIHByb2Nlc3MgZGlzYWJsZWQsIHRoZSByZXN1bHRzIGFmdGVyIGp1c3QgcnVubmluZworICAg
ICAgICBqdXN0IGEgZmV3IHRpbWVzIHNlZW0gdG8gYmUgcHJldHR5IGNsb3NlICh3aXRoaW4gdGhl
IG5vaXNlKS4KKworICAgICAgICBJZiB3ZSBuZWVkIG1vcmUgcGVyZm9ybWFuY2UsIHRoZSBuZXh0
IHN0ZXAgaXMgdG8gdHJ5IHRvIHJlZHVjZSB0aGUgbWVtY3B5KClzLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAq
IEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBHUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRNZW1vcnlGb3JH
ZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpk
aWRGaW5pc2hHZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpnZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpnZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkpOgorICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbjoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjptYXliZVByZXBhcmVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndhaXRGb3JHZXRJbWFnZURhdGFUb0Nv
bXBsZXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpn
ZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgorCiAyMDIxLTAzLTI1ICBCSiBCdXJnICA8
YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFNlbmRLZXlzIG9uIElucHV0IG9mIHR5cGU9Zmls
ZSByZXR1cm5zIGVsZW1lbnQgbm90IGZvdW5kIGluIHNvbWUgY2FzZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKaW5kZXgg
NmNhMWU2MGRhYWJlNmUwNTgxYzI0YjYxYWQwNGI5OTY4NTM3YWNjNi4uNmYzY2JlNzk0YmIwODgx
YTZkNWU5MjcwZjI5YTFlMjkzMDA0YWY0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzgsOCArNzgsMTUgQEAgcHJp
dmF0ZToKICAgICB7CiAgICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpH
ZXRJbWFnZURhdGE+KCkpIHsKICAgICAgICAgICAgIGF1dG8mIGdldEltYWdlRGF0YUl0ZW0gPSBp
dGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0SW1hZ2VEYXRhPigpOwotICAgICAgICAg
ICAgVU5VU0VEX1ZBUklBQkxFKGdldEltYWdlRGF0YUl0ZW0pOwotICAgICAgICAgICAgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA2NDkgSW1wbGVt
ZW50IHRoaXMuCisgICAgICAgICAgICBhdXRvIGltYWdlRGF0YSA9IEJhc2VDb25jcmV0ZUltYWdl
QnVmZmVyOjpnZXRJbWFnZURhdGEoZ2V0SW1hZ2VEYXRhSXRlbS5vdXRwdXRGb3JtYXQoKSwgZ2V0
SW1hZ2VEYXRhSXRlbS5zcmNSZWN0KCkpOworICAgICAgICAgICAgYXV0byBnZXRJbWFnZURhdGFT
aGFyZWRNZW1vcnkgPSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZ2V0SW1hZ2VEYXRhU2hhcmVk
TWVtb3J5KCk7CisgICAgICAgICAgICBpZiAoaW1hZ2VEYXRhICYmIGltYWdlRGF0YS0+ZGF0YSgp
ICYmIGdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSkKKyAgICAgICAgICAgICAgICBtZW1jcHkoZ2V0
SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5kYXRhKCksIGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCks
IGltYWdlRGF0YS0+ZGF0YSgpLT5ieXRlTGVuZ3RoKCkpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSkKKyAgICAgICAgICAg
ICAgICAgICAgbWVtc2V0KGdldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCAwLCBnZXRJ
bWFnZURhdGFTaGFyZWRNZW1vcnktPnNpemUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZGlkRmluaXNoR2V0SW1hZ2VEYXRhKCk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAK
aW5kZXggZWUxNDJmMmY1OWZkYjZiNGNhYjU4OTM2NzAzZWRjMjZmY2YxOWI5Yi4uZjUzZWVkNGM0
MjkyZjc5NjhkZmI3MDRhMmYwZjRkNjM4M2ExOGRkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMTYsMTQgKzMxNiwyNyBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNldE5leHRJ
dGVtQnVmZmVyVG9SZWFkKERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbgogICAgIG1fcGVuZGlu
Z1dha2V1cEluZm8gPSB7e3sgaWRlbnRpZmllciwgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6Omhl
YWRlclNpemUoKSwgZGVzdGluYXRpb25JZGVudGlmaWVyLCBHUFVQcm9jZXNzV2FrZXVwUmVhc29u
OjpVbnNwZWNpZmllZCB9LCBXVEY6Om51bGxvcHQgfX07CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9y
bWF0LCBJbnRSZWN0IHNyY1JlY3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFdlYkNv
cmU6OkltYWdlRGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OnNlbWFwaG9yZUZvckdldEltYWdlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIobV9nZXRJ
bWFnZURhdGFTZW1hcGhvcmUpOworfQogCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRh
OwotICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hl
ZEltYWdlQnVmZmVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpCi0gICAgICAgIGltYWdl
RGF0YSA9IGltYWdlQnVmZmVyLT5nZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0KTsK
LSAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGltYWdlRGF0YSkpOwordm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoc2l6ZV90IGJ5dGVD
b3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRs
ZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghbV9nZXRJbWFnZURhdGFT
aGFyZWRNZW1vcnkgfHwgYnl0ZUNvdW50ID4gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPnNp
emUoKSk7CisgICAgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFs
bG9jYXRlKGJ5dGVDb3VudCk7CisgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOworICAg
IGlmIChtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSkKKyAgICAgICAgbV9nZXRJbWFnZURhdGFT
aGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlv
bjo6UmVhZE9ubHkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFNoYXJlZE1lbW9yeTo6SVBDSGFu
ZGxlIHsgV1RGTW92ZShoYW5kbGUpLCBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSA/IG1fZ2V0
SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5zaXplKCkgOiAwIH0pOworfQorCit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmRpZEZpbmlzaEdldEltYWdlRGF0YSgpCit7CisjaWYgT1MoREFSV0lO
KQorICAgIG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlLnNpZ25hbCgpOworI2VuZGlmCiB9CiAKIHZv
aWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChTdHJpbmcmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5o
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuaAppbmRleCAzOTQzZDUyMWQzNjkzZmJkMmNlZjM2YjQ3ZDM0OTZiMWMyZGYzNjU5Li5iMTRj
NDg4OWQxNTI4Y2E1OGQ3ZmU3ODg1NGFjNzhmMDY5NjMzNjcxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNzksNiArNzksOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE5leHRJdGVtQnVmZmVyVG9S
ZWFkKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGRlc3RpbmF0aW9uKTsKIAorICAgIFJlZlB0cjxT
aGFyZWRNZW1vcnk+IGdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSgpIHsgcmV0dXJuIG1fZ2V0SW1h
Z2VEYXRhU2hhcmVkTWVtb3J5OyB9CisgICAgdm9pZCBkaWRGaW5pc2hHZXRJbWFnZURhdGEoKTsK
KwogICAgIC8vIFJ1bnMgRnVuY3Rpb24gaW4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB0YXNrIHF1
ZXVlLgogICAgIHZvaWQgZGlzcGF0Y2goRnVuY3Rpb248dm9pZCgpPiYmKTsKIApAQCAtMTE0LDcg
KzExNyw4IEBAIHByaXZhdGU6CiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgcmVjZWl2ZWQuCiAgICAg
dm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxT
aXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNv
cmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQsIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCB3YWtlVXBBbmRBcHBseURp
c3BsYXlMaXN0KGNvbnN0IEdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzJik7Ci0gICAg
dm9pZCBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIFdlYkNvcmU6OkludFJlY3Qgc3JjUmVjdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpJbWFn
ZURhdGE+JiYpPiYmKTsKKyAgICB2b2lkIHNlbWFwaG9yZUZvckdldEltYWdlRGF0YShDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYpOworICAgIHZvaWQgc2hh
cmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKHNpemVfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKT4mJik7CiAgICAgdm9pZCBn
ZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcm
Jik+JiYpOwogICAgIHZvaWQgZ2V0RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4m
Jik7CiAgICAgdm9pZCBnZXRCR1JBRGF0YUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhf
dD4mJik+JiYpOwpAQCAtMTQ4LDYgKzE1Miw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIFJlZlB0cjxEaXNwbGF5TGlz
dFJlYWRlckhhbmRsZT4+IG1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzOwogICAgIE9wdGlvbmFs
PFBlbmRpbmdXYWtldXBJbmZvcm1hdGlvbj4gbV9wZW5kaW5nV2FrZXVwSW5mbzsKICAgICBJUEM6
OlNlbWFwaG9yZSBtX3Jlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlOworICAgIElQQzo6U2VtYXBo
b3JlIG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlOworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1f
Z2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IDEzODJjYTVlOTI4ZDQ1
ODFlYjVmNzhiNzBjZDkyMjM3MjhiYjZmZDUuLmFhOGM2ZjllZGYxZDEzMzFkY2UyZDQ1NmI5YWEy
YTMzYzAyMGM5Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBA
IC0yNSw3ICsyNSw4IEBACiBtZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHsKICAg
ICBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNv
cmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBX
ZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgZW51bTp1aW50OF90IFdl
YkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAgIFdha2VVcEFuZEFw
cGx5RGlzcGxheUxpc3Qoc3RydWN0IFdlYktpdDo6R1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1
bWVudHMgYXJndW1lbnRzKQotICAgIEdldEltYWdlRGF0YShlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIFdlYkNvcmU6OkludFJlY3Qgc3Jj
UmVjdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikgLT4gKFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IGltYWdlRGF0YSkg
U3luY2hyb25vdXMKKyAgICBTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoKSAtPiAoSVBDOjpTZW1h
cGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cworICAgIFNoYXJlZE1lbW9yeUZvckdldEltYWdl
RGF0YShzaXplX3QgYnl0ZUNvdW50KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRs
ZSBoYW5kbGUpIFN5bmNocm9ub3VzCiAgICAgR2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKFN0cmlu
ZyBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBlbnVtOnVpbnQ4X3QgV2ViQ29y
ZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFN0
cmluZyB1cmxTdHJpbmcpIFN5bmNocm9ub3VzCiAgICAgR2V0RGF0YUZvckltYWdlQnVmZmVyKFN0
cmluZyBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoVmVj
dG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCiAgICAgR2V0QkdSQURhdGFGb3JJbWFnZUJ1
ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKSAtPiAoVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdl
QnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eS5oCmluZGV4IDViYmYyNTYzMDYyOTBlNDlhYzhkYjMxYjVkMDFh
Yzk2YjU2YWFjNDIuLmI1MTg2MjQ2MmM4OWM2NTJjM2MzOWQ5MDJmN2MxYWJjYTAyNTc0NzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTkzLDEyICsxOTMsMjIgQEAgcHJvdGVjdGVk
OgogICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0g
V2ViQ29yZTo6SW1hZ2VEYXRhOjpjcmVhdGUoc3JjUmVjdC5zaXplKCkpOworICAgICAgICBpZiAo
IWltYWdlRGF0YSB8fCAhaW1hZ2VEYXRhLT5kYXRhKCkpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gaW1hZ2VEYXRhLT5kYXRhKCktPmJ5dGVM
ZW5ndGgoKTsKKworICAgICAgICBTaGFyZWRNZW1vcnkqIHNoYXJlZE1lbW9yeSA9IG1fcmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LT5tYXliZVByZXBhcmVTaGFyZWRNZW1vcnlGb3JHZXRJbWFn
ZURhdGEoZGF0YVNpemUpOworICAgICAgICBpZiAoIXNoYXJlZE1lbW9yeSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworCiAgICAgICAgIGF1dG8mIG11dGFibGVUaGlzID0gY29uc3RfY2Fz
dDxSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Jj4oKnRoaXMpOwogICAgICAgICBtdXRhYmxlVGhpcy5t
X2RyYXdpbmdDb250ZXh0LnJlY29yZGVyKCkuZ2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3Jj
UmVjdCk7Ci0gICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjIwNjQ5IFVzZSB0aGUgcmVjb3JkZWQgY29tbWFuZCBpbnN0ZWFkIG9mIHRoZSBz
eW5jaHJvbm91cyBJUEMgbWVzc2FnZS4KKyAgICAgICAgbXV0YWJsZVRoaXMuZmx1c2hEcmF3aW5n
Q29udGV4dEFzeW5jKCk7CiAKLSAgICAgICAgY29uc3RfY2FzdDxSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5Kj4odGhpcyktPmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKLSAgICAgICAgcmV0dXJuIG1fcmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5nZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNS
ZWN0LCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgICAgIG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LT53YWl0Rm9yR2V0SW1hZ2VEYXRhVG9Db21wbGV0ZSgpOworICAg
ICAgICBtZW1jcHkoaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwgc2hhcmVkTWVtb3J5LT5kYXRh
KCksIGRhdGFTaXplKTsKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKICAgICB9CiAKICAgICB2
b2lkIHB1dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9y
bWF0LCBjb25zdCBXZWJDb3JlOjpJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCA9IHsg
fSwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gV2ViQ29yZTo6
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCAxYTBjNjMyMGUzYmJkZjE2M2U0
NzA2MjVkZmEzYmJhZWU3NzZiOTI1Li43N2RhNDRlMzdlMTY3MDdhY2ViN2RmZDVmN2YzNjZmMGQ3
YTVmZTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Mywx
MyArMTQzLDMzIEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpCiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKQorU2hhcmVkTWVtb3J5KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
Om1heWJlUHJlcGFyZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShzaXplX3QgZGF0YVNpemUp
CiB7CiAgICAgc2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7CiAKLSAgICBSZWZQ
dHI8SW1hZ2VEYXRhPiBpbWFnZURhdGE7Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OkdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpHZXRJbWFnZURhdGE6OlJlcGx5KGltYWdlRGF0YSksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIsIDFfcyk7Ci0gICAgcmV0dXJuIGltYWdlRGF0YTsKKyAgICAvLyBGSVhNRTogRGV0ZXJt
aW5lIGlmIGl0J3MgYWR2YW50YWdlb3VzIHRvIGFkZCBhIDNyZCBtZXNzYWdlIHRoYXQgZG9lcyBi
b3RoIFNlbWFwaG9yZUZvckdldEltYWdlRGF0YSBhbmQgU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VE
YXRhIGluIGEgc2luZ2xlIG1lc3NhZ2UsIHdoZW4gd2UgbmVlZCBib3RoIHRoZSBzZW1hcGhvcmUg
YW5kIHRoZSBzaGFyZWQgbWVtb3J5IGF0IHRoZSBzYW1lIHRpbWUuCisKKyAgICBpZiAoIW1fZ2V0
SW1hZ2VEYXRhU2VtYXBob3JlKSB7CisgICAgICAgIElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZTsK
KyAgICAgICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlNlbWFw
aG9yZUZvckdldEltYWdlRGF0YSgpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
U2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhOjpSZXBseShzZW1hcGhvcmUpLCBtX3JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyLCAxX3MpOworICAgICAgICBtX2dldEltYWdlRGF0YVNlbWFwaG9yZSA9
IFdURk1vdmUoc2VtYXBob3JlKTsKKyAgICB9CisKKyAgICBpZiAoIW1fZ2V0SW1hZ2VEYXRhU2hh
cmVkTWVtb3J5IHx8IGRhdGFTaXplID4gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPnNpemUo
KSkgeworICAgICAgICBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGU7CisgICAgICAgIHNl
bmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpTaGFyZWRNZW1vcnlGb3JH
ZXRJbWFnZURhdGEoZGF0YVNpemUpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
U2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhOjpSZXBseShoYW5kbGUpLCBtX3JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyLCAxX3MpOworICAgICAgICBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9y
eSA9IFNoYXJlZE1lbW9yeTo6bWFwKGhhbmRsZS5oYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVj
dGlvbjo6UmVhZE9ubHkpOworICAgIH0KKworICAgIHJldHVybiBtX2dldEltYWdlRGF0YVNoYXJl
ZE1lbW9yeS5nZXQoKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Ondh
aXRGb3JHZXRJbWFnZURhdGFUb0NvbXBsZXRlKCkKK3sKKyAgICBBU1NFUlQobV9nZXRJbWFnZURh
dGFTZW1hcGhvcmUpOworI2lmIE9TKERBUldJTikKKyAgICBtX2dldEltYWdlRGF0YVNlbWFwaG9y
ZS0+d2FpdEZvcig1X3MpOworI2VuZGlmCiB9CiAKIFN0cmluZyBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OmdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24sIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAppbmRleCA5NGJj
M2NkMTg2Y2MyZGNiYzQ5MGE1OGNlMjIyNjY2MWQ3YmExMTU0Li4xYzMyMWU3Mjk1NjQ1NWIxNzE1
NTkzODZjMjhiMDViNjQ0YmE5ZWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNzUsNiArNzUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsQXBwZW5kSXRlbShXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc2VuZERlZmVycmVk
V2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7CiAKKyAgICBTaGFyZWRNZW1vcnkqIG1heWJlUHJlcGFy
ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShzaXplX3QgZGF0YVNpemUpOworICAgIHZvaWQg
d2FpdEZvckdldEltYWdlRGF0YVRvQ29tcGxldGUoKTsKKwogICAgIC8vIElQQzo6TWVzc2FnZVNl
bmRlci4KICAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBj
b25zdCBvdmVycmlkZTsKQEAgLTg0LDcgKzg3LDYgQEAgcHVibGljOgogCiAgICAgLy8gTWVzc2Fn
ZXMgdG8gYmUgc2VudC4KICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUlt
YWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01v
ZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNl
LCBXZWJDb3JlOjpQaXhlbEZvcm1hdCk7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4g
Z2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpOwogICAgIFN0cmluZyBnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQ
cmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGdldERhdGFGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcik7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGdldEJHUkFEYXRhRm9ySW1h
Z2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKQEAgLTEyOSw2
ICsxMzEsOCBAQCBwcml2YXRlOgogICAgIE9wdGlvbmFsPEdQVVByb2Nlc3NXYWtldXBNZXNzYWdl
QXJndW1lbnRzPiBtX2RlZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50czsKICAgICB1bnNpZ25l
ZCBtX3JlbWFpbmluZ0l0ZW1zVG9BcHBlbmRCZWZvcmVTZW5kaW5nV2FrZXVwIHsgMCB9OwogICAg
IElQQzo6U2VtYXBob3JlIG1fcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmU7CisgICAgT3B0aW9u
YWw8SVBDOjpTZW1hcGhvcmU+IG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlOworICAgIFJlZlB0cjxT
aGFyZWRNZW1vcnk+IG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5OwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="443938"
          type_id="1"
          status="+"
          setter="rniwa"
    />
    <flag name="commit-queue"
          id="443968"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424427</attachid>
            <date>2021-03-26 17:50:58 -0700</date>
            <delta_ts>2021-03-26 20:52:00 -0700</delta_ts>
            <desc>Updated</desc>
            <filename>bug-223732-20210326175057.patch</filename>
            <type>text/plain</type>
            <size>24249</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MDUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGNlNzM2MThkNmQ3Yzg4N2U4
ZDJiZmI2ZTNmM2MwOTFiYzNhMTA2YzEuLjAyNzM5MTJlZWQ5Yzk1ZWM5ZDEwMGEwYmQ1NmVmYzI3
NzQxMGVjNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMjEtMDMtMjUgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
OiBJbXByb3ZlIGdldEltYWdlRGF0YSgpIHBlcmYgcGFydCAyOiBVc2Ugc2hhcmVkIG1lbW9yeSBh
bmQgYSBzZW1hcGhvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMzczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBhIGRlc2lnbiBmb3IgZ2V0SW1hZ2VEYXRhKCkg
d2hlcmUgdGhlIHdlYiBwcm9jZXNzIGFuZCB0aGUgR1BVIHByb2Nlc3MKKyAgICAgICAgc2V0IHVw
IGEgc2htZW0gKyBzZW1hcGhvcmUgYWhlYWQtb2YtdGltZSwgc28gdGhhdCB3aGVuIHdlIGVuY291
bnRlciBhIGNhbGwgdG8gZ2V0SW1hZ2VEYXRhKCksCisgICAgICAgIHRoZSBHUFUgcHJvY2VzcyBj
YW4ganVzdCB3cml0ZSBpbnRvIHRoZSBzaG1lbSBhbmQgc2lnbmFsIHRoZSBzZW1hcGhvcmUuIFRo
ZSB3ZWIgcHJvY2VzcyBqdXN0CisgICAgICAgIGVuY29kZXMgdGhlIGdldEltYWdlRGF0YSgpIGNh
bGwgaW50byB0aGUgcmVndWxhciBkaXNwbGF5IGxpc3QsIGZsdXNoQXN5bmMoKXMgdG8ga2ljayB0
aGUgR1BVCisgICAgICAgIHByb2Nlc3MsIHRoZW4ganVzdCB3YWl0cyBvbiB0aGUgc2VtYXBob3Jl
LiBJbml0aWFsIHBlcmZvcm1hbmNlIHRlc3Rpbmcgc2hvd3MgdGhhdCB0aGlzIGlzCisgICAgICAg
IHdheSwgd2F5IGZhc3RlciB0aGFuIHNlbmRpbmcgbWVzc2FnZXMgY29udGFpbmluZyBwaXhlbCBj
b2xvciBkYXRhIHBheWxvYWRzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2F1c2VzIGEgfjQwJSBw
cm9ncmVzc2lvbiBvbiB0aGUgSW1hZ2VzIHRlc3QgaW4gTW90aW9uTWFyayBvbiBteSBNYWMgd2l0
aCB0aGUgR1BVCisgICAgICAgIHByb2Nlc3MgZW5hYmxlZC4gV2hlbiBjb21wYXJlZCB0byB0aGUg
R1BVIHByb2Nlc3MgZGlzYWJsZWQsIHRoZSByZXN1bHRzIGFmdGVyIGp1c3QgcnVubmluZworICAg
ICAgICBqdXN0IGEgZmV3IHRpbWVzIHNlZW0gdG8gYmUgcHJldHR5IGNsb3NlICh3aXRoaW4gdGhl
IG5vaXNlKS4KKworICAgICAgICBJZiB3ZSBuZWVkIG1vcmUgcGVyZm9ybWFuY2UsIHRoZSBuZXh0
IHN0ZXAgaXMgdG8gdHJ5IHRvIHJlZHVjZSB0aGUgbWVtY3B5KClzLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAq
IEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBHUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRNZW1vcnlGb3JH
ZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpk
aWRGaW5pc2hHZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpnZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpnZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkpOgorICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbjoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjptYXliZVByZXBhcmVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndhaXRGb3JHZXRJbWFnZURhdGFUb0Nv
bXBsZXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpn
ZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgorCiAyMDIxLTAzLTI1ICBCSiBCdXJnICA8
YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFNlbmRLZXlzIG9uIElucHV0IG9mIHR5cGU9Zmls
ZSByZXR1cm5zIGVsZW1lbnQgbm90IGZvdW5kIGluIHNvbWUgY2FzZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKaW5kZXgg
NmNhMWU2MGRhYWJlNmUwNTgxYzI0YjYxYWQwNGI5OTY4NTM3YWNjNi4uNGEwMWVlNjc2OWE2OThi
ZTVlNDc4MDkyZTQ5YmJkYTgxYzc0Yjk0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzgsOCArNzgsOCBAQCBwcml2
YXRlOgogICAgIHsKICAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okdl
dEltYWdlRGF0YT4oKSkgewogICAgICAgICAgICAgYXV0byYgZ2V0SW1hZ2VEYXRhSXRlbSA9IGl0
ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRJbWFnZURhdGE+KCk7Ci0gICAgICAgICAg
ICBVTlVTRURfVkFSSUFCTEUoZ2V0SW1hZ2VEYXRhSXRlbSk7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDY0OSBJbXBsZW1l
bnQgdGhpcy4KKyAgICAgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gQmFzZUNvbmNyZXRlSW1hZ2VC
dWZmZXI6OmdldEltYWdlRGF0YShnZXRJbWFnZURhdGFJdGVtLm91dHB1dEZvcm1hdCgpLCBnZXRJ
bWFnZURhdGFJdGVtLnNyY1JlY3QoKSk7CisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQucG9wdWxhdGVHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoaW1hZ2VEYXRhLmdldCgpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmNwcAppbmRleCBlZTE0MmYyZjU5ZmRiNmI0Y2FiNTg5MzY3MDNlZGMyNmZjZjE5YjliLi4yMDg5
NjVlM2I3ZmM4ZTYzMWM1ZWE1MzA4YzFkZTc3OTQ2MGFhZjUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM4LDEwICszOCwxMCBAQAogI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5j
bHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtR
dWV1ZS5oPgogCi0KICNkZWZpbmUgVEVSTUlOQVRFX1dFQl9QUk9DRVNTX1dJVEhfTUVTU0FHRSht
ZXNzYWdlKSBcCiAgICAgUkVMRUFTRV9MT0dfRkFVTFQoSVBDLCAiUmVxdWVzdGluZyB0ZXJtaW5h
dGlvbiBvZiB3ZWIgcHJvY2VzcyAlIiBQUkl1NjQgIiBmb3IgcmVhc29uOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT53ZWJQcm9jZXNzSWRlbnRpZmll
cigpLnRvVUludDY0KCksICNtZXNzYWdlKTsgXAogICAgIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy0+dGVybWluYXRlV2ViUHJvY2VzcygpOwpAQCAtMzE2LDE0ICszMTYsNjcgQEAgdm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZXROZXh0SXRlbUJ1ZmZlclRvUmVhZChEaXNwbGF5TGlz
dDo6SXRlbUJ1ZmZlcklkZW4KICAgICBtX3BlbmRpbmdXYWtldXBJbmZvID0ge3t7IGlkZW50aWZp
ZXIsIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpoZWFkZXJTaXplKCksIGRlc3RpbmF0aW9uSWRl
bnRpZmllciwgR1BVUHJvY2Vzc1dha2V1cFJlYXNvbjo6VW5zcGVjaWZpZWQgfSwgV1RGOjpudWxs
b3B0IH19OwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgSW50UmVjdCBzcmNSZWN0LCBSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQorT3B0aW9uYWw8U2hhcmVkTWVtb3J5OjpJUENIYW5kbGU+IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YUhlbHBlcihz
aXplX3QgYnl0ZUNvdW50KQoreworICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUo
IW1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5IHx8IGJ5dGVDb3VudCA+IG1fZ2V0SW1hZ2VEYXRh
U2hhcmVkTWVtb3J5LT5zaXplKCksIFdURjo6bnVsbG9wdCwgIlRoZSBleGlzdGluZyBTaG1lbSBm
b3IgZ2V0SW1hZ2VEYXRhKCkgaXMgYWxyZWFkeSBiaWcgZW5vdWdoIHRvIGhhbmRsZSB0aGUgcmVx
dWVzdCIpOworCisgICAgaWYgKGJ5dGVDb3VudCA+IDY0ICogTUIpIHsKKyAgICAgICAgLy8gSnVz
dCBhIHNhbml0eSBjaGVjay4gQSA0SyBpbWFnZSBpcyAzNk1CLgorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgIH0KKworICAgIGRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnko
KTsKKyAgICBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6YWxsb2Nh
dGUoYnl0ZUNvdW50KTsKKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgaWYg
KG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KQorICAgICAgICBtX2dldEltYWdlRGF0YVNoYXJl
ZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpS
ZWFkT25seSk7CisgICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIHsgV1RGTW92ZSho
YW5kbGUpLCBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSA/IG1fZ2V0SW1hZ2VEYXRhU2hhcmVk
TWVtb3J5LT5zaXplKCkgOiAwIH07Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKHNpemVfdCBieXRlQ291bnQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAg
IFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YTsKLSAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9
IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpKQotICAgICAgICBpbWFnZURhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VE
YXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92
ZShpbWFnZURhdGEpKTsKKyAgICBpZiAoYXV0byBoYW5kbGUgPSB1cGRhdGVTaGFyZWRNZW1vcnlG
b3JHZXRJbWFnZURhdGFIZWxwZXIoYnl0ZUNvdW50KSkKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShoYW5kbGUudmFsdWUoKSkpOworICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoeyB9KTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhv
cmVGb3JHZXRJbWFnZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OlNlbWFw
aG9yZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlKTsK
K30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlBbmRT
ZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoc2l6ZV90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQQzo6U2VtYXBo
b3JlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBpZiAoYXV0byBoYW5kbGUgPSB1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJ
bWFnZURhdGFIZWxwZXIoYnl0ZUNvdW50KSkKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShoYW5kbGUudmFsdWUoKSksIG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlKTsKKyAgICBlbHNl
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSwgbV9nZXRJbWFnZURhdGFTZW1hcGhvcmUp
OworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRlc3Ryb3lHZXRJbWFnZURhdGFT
aGFyZWRNZW1vcnkoKQoreworICAgIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5ID0gbnVsbHB0
cjsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpwb3B1bGF0ZUdldEltYWdlRGF0
YVNoYXJlZE1lbW9yeShXZWJDb3JlOjpJbWFnZURhdGEqIGltYWdlRGF0YSkKK3sKKyAgICBNRVNT
QUdFX0NIRUNLKG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LCAiV2UgY2FuJ3QgcnVuIGdldElt
YWdlRGF0YSB3aXRob3V0IGEgYnVmZmVyIHRvIHdyaXRlIGludG8iKTsKKworICAgIGlmIChpbWFn
ZURhdGEgJiYgaW1hZ2VEYXRhLT5kYXRhKCkpIHsKKyAgICAgICAgTUVTU0FHRV9DSEVDSyhpbWFn
ZURhdGEtPmRhdGEoKS0+Ynl0ZUxlbmd0aCgpIDw9IG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5
LT5zaXplKCksICJTaG1lbSBmb3IgcmV0dXJuIG9mIGdldEltYWdlRGF0YSBpcyB0b28gc21hbGwi
KTsKKyAgICAgICAgbWVtY3B5KG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5kYXRhKCksIGlt
YWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCksIGltYWdlRGF0YS0+ZGF0YSgpLT5ieXRlTGVuZ3RoKCkp
OworICAgIH0gZWxzZQorICAgICAgICBtZW1zZXQobV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkt
PmRhdGEoKSwgMCwgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPnNpemUoKSk7CisKKyNpZiBP
UyhEQVJXSU4pCisgICAgbV9nZXRJbWFnZURhdGFTZW1hcGhvcmUuc2lnbmFsKCk7CisjZW5kaWYK
IH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXREYXRhVVJMRm9ySW1hZ2VCdWZm
ZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJD
b3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oCmluZGV4IDM5NDNkNTIxZDM2OTNmYmQyY2VmMzZiNDdkMzQ5NmIxYzJkZjM2
NTkuLjlkNTVhYjRmYjQ1MDBjMjk1MDMwNzMxMzY3NDRhOTk5NzQ3ZmMwMzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC03OSw2ICs3OSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0TmV4dEl0ZW1C
dWZmZXJUb1JlYWQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb24pOwogCisgICAg
dm9pZCBwb3B1bGF0ZUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeShXZWJDb3JlOjpJbWFnZURhdGEq
KTsKKwogICAgIC8vIFJ1bnMgRnVuY3Rpb24gaW4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB0YXNr
IHF1ZXVlLgogICAgIHZvaWQgZGlzcGF0Y2goRnVuY3Rpb248dm9pZCgpPiYmKTsKIApAQCAtMTAz
LDYgKzEwNSw4IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheVJl
c3VsdCBzdWJtaXQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiwgV2Vi
Q29yZTo6SW1hZ2VCdWZmZXImIGRlc3RpbmF0aW9uKTsKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1h
Z2VCdWZmZXI+IG5leHREZXN0aW5hdGlvbkltYWdlQnVmZmVyQWZ0ZXJBcHBseWluZ0Rpc3BsYXlM
aXN0cyhXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgaW5pdGlhbERlc3RpbmF0aW9uLCBzaXplX3QgaW5p
dGlhbE9mZnNldCwgRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUmLCBHUFVQcm9jZXNzV2FrZXVwUmVh
c29uKTsKIAorICAgIE9wdGlvbmFsPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiB1cGRhdGVTaGFy
ZWRNZW1vcnlGb3JHZXRJbWFnZURhdGFIZWxwZXIoc2l6ZV90IGJ5dGVDb3VudCk7CisKICAgICAv
LyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCiAgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVy
Q29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJE
ZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMTQsNyArMTE4LDEwIEBAIHByaXZh
dGU6CiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgcmVjZWl2ZWQuCiAgICAgdm9pZCBjcmVhdGVJbWFn
ZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpS
ZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9u
Q29sb3JTcGFjZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCB3YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0KGNvbnN0
IEdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzJik7Ci0gICAgdm9pZCBnZXRJbWFnZURh
dGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIFdlYkNvcmU6
OkludFJlY3Qgc3JjUmVjdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+JiYpPiYmKTsK
KyAgICB2b2lkIHVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShzaXplX3QgYnl0ZUNv
dW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxl
Jik+JiYpOworICAgIHZvaWQgc2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgSVBDOjpTZW1hcGhvcmUmKT4mJik7CisgICAgdm9pZCB1cGRhdGVTaGFy
ZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoc2l6ZV90IGJ5dGVDb3VudCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0
IElQQzo6U2VtYXBob3JlJik+JiYpOworICAgIHZvaWQgZGVzdHJveUdldEltYWdlRGF0YVNoYXJl
ZE1lbW9yeSgpOwogICAgIHZvaWQgZ2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVS
ZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdldERhdGFGb3JJbWFnZUJ1
ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWZWN0b3I8dWludDhfdD4mJik+JiYpOwogICAgIHZvaWQgZ2V0QkdSQURhdGFGb3JJbWFnZUJ1
ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmKTsKQEAgLTE0OCw2ICsxNTUsOCBAQCBwcml2
YXRlOgogICAgIEhhc2hNYXA8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlm
aWVyLCBSZWZQdHI8RGlzcGxheUxpc3RSZWFkZXJIYW5kbGU+PiBtX3NoYXJlZERpc3BsYXlMaXN0
SGFuZGxlczsKICAgICBPcHRpb25hbDxQZW5kaW5nV2FrZXVwSW5mb3JtYXRpb24+IG1fcGVuZGlu
Z1dha2V1cEluZm87CiAgICAgSVBDOjpTZW1hcGhvcmUgbV9yZXN1bWVEaXNwbGF5TGlzdFNlbWFw
aG9yZTsKKyAgICBJUEM6OlNlbWFwaG9yZSBtX2dldEltYWdlRGF0YVNlbWFwaG9yZTsKKyAgICBS
ZWZQdHI8U2hhcmVkTWVtb3J5PiBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5p
bgppbmRleCAxMzgyY2E1ZTkyOGQ0NTgxZWI1Zjc4YjcwY2Q5MjIzNzI4YmI2ZmQ1Li5hZTIzMzdj
Yzc0NTMwNzZjZjY2YjZkY2EzMzAzMWE3Nzg2ZmI3YTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5tZXNzYWdlcy5pbgpAQCAtMjUsNyArMjUsMTAgQEAKIG1lc3NhZ2VzIC0+IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQgewogICAgIENyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0
U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpCiAgICAgV2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChzdHJ1Y3QgV2ViS2l0OjpHUFVQ
cm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cyBhcmd1bWVudHMpCi0gICAgR2V0SW1hZ2VEYXRh
KGVudW06dWludDhfdCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgV2ViQ29yZTo6SW50UmVjdCBzcmNSZWN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoUmVmUHRyPFdlYkNvcmU6
OkltYWdlRGF0YT4gaW1hZ2VEYXRhKSBTeW5jaHJvbm91cworICAgIFVwZGF0ZVNoYXJlZE1lbW9y
eUZvckdldEltYWdlRGF0YShzaXplX3QgYnl0ZUNvdW50KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1v
cnk6OklQQ0hhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzCisgICAgU2VtYXBob3JlRm9yR2V0SW1h
Z2VEYXRhKCkgLT4gKElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMKKyAgICBV
cGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoc2l6ZV90IGJ5dGVD
b3VudCkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlLCBJUEM6OlNl
bWFwaG9yZSBzZW1hcGhvcmUpIFN5bmNocm9ub3VzCisgICAgRGVzdHJveUdldEltYWdlRGF0YVNo
YXJlZE1lbW9yeSgpCiAgICAgR2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2Vy
dmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFN0cmluZyB1cmxT
dHJpbmcpIFN5bmNocm9ub3VzCiAgICAgR2V0RGF0YUZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoVmVjdG9yPHVpbnQ4
X3Q+IGRhdGEpIFN5bmNocm9ub3VzCiAgICAgR2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKSAtPiAoVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9JUENTZW1hcGhvcmUuaCBiL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0lQQ1NlbWFwaG9yZS5oCmluZGV4IDg4M2JiMjZiZTdkYjI4ZTExY2NlMGFl
OWI4MzFmOGQxZGYwMWNhNTIuLmE3N2NjMjBhNmZjNTU5ODVjMWNhZGFhZTdjOWNiY2E2NGM3ZGQw
ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0lQQ1NlbWFwaG9yZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0lQQ1NlbWFwaG9yZS5oCkBAIC01Nyw3
ICs1Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2lnbmFsKCk7CiAgICAgdm9pZCB3YWl0KCk7
Ci0gICAgdm9pZCB3YWl0Rm9yKFRpbWVvdXQpOworICAgIGJvb2wgd2FpdEZvcihUaW1lb3V0KTsK
ICAgICBNYWNoU2VuZFJpZ2h0IGNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0OwogICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3NlbmRSaWdodCB8fCBtX3NlbWFwaG9y
ZSAhPSBTRU1BUEhPUkVfTlVMTDsgfQogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL2Rhcndpbi9JUENTZW1hcGhvcmVEYXJ3aW4uY3BwIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvZGFyd2luL0lQQ1NlbWFwaG9yZURhcndpbi5jcHAKaW5kZXggOGJjMmVi
YzI3ZmNkMDViOTE0M2QyYjhmMTFkZGRlYTU0ZmIyZmVmMi4uM2QwMjNiMTE0MDZjYzRkMTE2YmJl
MDRiYjg4ZDE2YmRhOGM3ZmM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvZGFyd2luL0lQQ1NlbWFwaG9yZURhcndpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvZGFyd2luL0lQQ1NlbWFwaG9yZURhcndpbi5jcHAKQEAgLTc4LDEyICs3OCwxMyBA
QCB2b2lkIFNlbWFwaG9yZTo6d2FpdCgpCiAgICAgQVNTRVJUX1VOVVNFRChyZXQsIHJldCA9PSBL
RVJOX1NVQ0NFU1MpOwogfQogCi12b2lkIFNlbWFwaG9yZTo6d2FpdEZvcihUaW1lb3V0IHRpbWVv
dXQpCitib29sIFNlbWFwaG9yZTo6d2FpdEZvcihUaW1lb3V0IHRpbWVvdXQpCiB7CiAgICAgU2Vj
b25kcyB3YWl0VGltZSA9IHRpbWVvdXQuc2Vjb25kc1VudGlsRGVhZGxpbmUoKTsKICAgICBhdXRv
IHNlY29uZHMgPSB3YWl0VGltZS5zZWNvbmRzQXM8dW5zaWduZWQ+KCk7CiAgICAgYXV0byByZXQg
PSBzZW1hcGhvcmVfdGltZWR3YWl0KG1fc2VtYXBob3JlLCB7IHNlY29uZHMsIHN0YXRpY19jYXN0
PGNsb2NrX3Jlc190Pih3YWl0VGltZS5uYW5vc2Vjb25kc0FzPHVpbnQ2NF90PigpIC0gc2Vjb25k
cyAqIE5TRUNfUEVSX1NFQykgfSk7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXQsIHJldCA9PSBLRVJO
X1NVQ0NFU1MgfHwgcmV0ID09IEtFUk5fT1BFUkFUSU9OX1RJTUVEX09VVCk7CisgICAgQVNTRVJU
KHJldCwgcmV0ID09IEtFUk5fU1VDQ0VTUyB8fCByZXQgPT0gS0VSTl9PUEVSQVRJT05fVElNRURf
T1VUKTsKKyAgICByZXR1cm4gcmV0ID09IEtFUk5fU1VDQ0VTUzsKIH0KIAogTWFjaFNlbmRSaWdo
dCBTZW1hcGhvcmU6OmNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oCmluZGV4IDViYmYyNTYzMDYyOTBlNDlhYzhkYjMxYjVkMDFhYzk2YjU2YWFjNDIuLjMx
YzE0YmM0NjBlMDdlYmMzNjcyYzMxMjQyMTcwNTY1ZDBmZmRhZjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTkzLDEyICsxOTMsMjQgQEAgcHJvdGVjdGVkOgogICAgICAgICBpZiAo
VU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gV2ViQ29yZTo6SW1hZ2VE
YXRhOjpjcmVhdGUoc3JjUmVjdC5zaXplKCkpOworICAgICAgICBpZiAoIWltYWdlRGF0YSB8fCAh
aW1hZ2VEYXRhLT5kYXRhKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
c2l6ZV90IGRhdGFTaXplID0gaW1hZ2VEYXRhLT5kYXRhKCktPmJ5dGVMZW5ndGgoKTsKKworICAg
ICAgICBTaGFyZWRNZW1vcnkqIHNoYXJlZE1lbW9yeSA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LT5zaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoZGF0YVNpemUpOworICAgICAgICBp
ZiAoIXNoYXJlZE1lbW9yeSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAgICAg
IGF1dG8mIG11dGFibGVUaGlzID0gY29uc3RfY2FzdDxSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Jj4o
KnRoaXMpOwogICAgICAgICBtdXRhYmxlVGhpcy5tX2RyYXdpbmdDb250ZXh0LnJlY29yZGVyKCku
Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7Ci0gICAgICAgIC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNjQ5IFVzZSB0aGUgcmVj
b3JkZWQgY29tbWFuZCBpbnN0ZWFkIG9mIHRoZSBzeW5jaHJvbm91cyBJUEMgbWVzc2FnZS4KKyAg
ICAgICAgbXV0YWJsZVRoaXMuZmx1c2hEcmF3aW5nQ29udGV4dEFzeW5jKCk7CiAKLSAgICAgICAg
Y29uc3RfY2FzdDxSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Kj4odGhpcyktPmZsdXNoRHJhd2luZ0Nv
bnRleHQoKTsKLSAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5n
ZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX3JlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcik7CisgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+d2Fp
dEZvckdldEltYWdlRGF0YVRvQ29tcGxldGUoKSkKKyAgICAgICAgICAgIG1lbWNweShpbWFnZURh
dGEtPmRhdGEoKS0+ZGF0YSgpLCBzaGFyZWRNZW1vcnktPmRhdGEoKSwgZGF0YVNpemUpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtZW1zZXQoaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwg
MCwgZGF0YVNpemUpOworICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOwogICAgIH0KIAogICAgIHZv
aWQgcHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3Jt
YXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9
LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQgPSBXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlkZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4IDFhMGM2MzIwZTNiYmRmMTYzZTQ3
MDYyNWRmYTNiYmFlZTc3NmI5MjUuLmUyYWU3ZGM2YzFiMjczMDA4MjdiMzYyZTA3NmFkZGQ1MWE4
YmM5YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQzLDEz
ICsxNDMsNDkgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2kKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotUmVmUHRyPEltYWdlRGF0YT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpCitTaGFyZWRNZW1vcnkqIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
c2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKHNpemVfdCBkYXRhU2l6ZSkKIHsKICAgICBzZW5k
RGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKIAotICAgIFJlZlB0cjxJbWFnZURhdGE+
IGltYWdlRGF0YTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6R2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldEltYWdlRGF0
YTo6UmVwbHkoaW1hZ2VEYXRhKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciwgMV9zKTsK
LSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIGJvb2wgbmVlZHNTaGFyZWRNZW1vcnkgPSAhbV9n
ZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgfHwgZGF0YVNpemUgPiBtX2dldEltYWdlRGF0YVNoYXJl
ZE1lbW9yeS0+c2l6ZSgpOworICAgIGJvb2wgbmVlZHNTZW1hcGhvcmUgPSAhbV9nZXRJbWFnZURh
dGFTZW1hcGhvcmU7CisKKyAgICBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGU7CisgICAg
SVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlOworCisgICAgaWYgKG5lZWRzU2hhcmVkTWVtb3J5ICYm
IG5lZWRzU2VtYXBob3JlKQorICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRh
KGRhdGFTaXplKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJl
ZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldEltYWdlRGF0YTo6UmVwbHkoaGFuZGxlLCBzZW1hcGhv
cmUpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCAxX3MsIElQQzo6U2VuZFN5bmNPcHRp
b246Ok1haW50YWluT3JkZXJpbmdXaXRoQXN5bmNNZXNzYWdlcyk7CisgICAgZWxzZSBpZiAobmVl
ZHNTaGFyZWRNZW1vcnkpCisgICAgICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoZGF0YVNpemUpLCBN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0
SW1hZ2VEYXRhOjpSZXBseShoYW5kbGUpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCAx
X3MsIElQQzo6U2VuZFN5bmNPcHRpb246Ok1haW50YWluT3JkZXJpbmdXaXRoQXN5bmNNZXNzYWdl
cyk7CisgICAgZWxzZSBpZiAobmVlZHNTZW1hcGhvcmUpCisgICAgICAgIHNlbmRTeW5jKE1lc3Nh
Z2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoKSwg
TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlNlbWFwaG9yZUZvckdldEltYWdlRGF0
YTo6UmVwbHkoc2VtYXBob3JlKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciwgMV9zKTsK
KworICAgIGlmICghaGFuZGxlLmhhbmRsZS5pc051bGwoKSkKKyAgICAgICAgbV9nZXRJbWFnZURh
dGFTaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6Om1hcChoYW5kbGUuaGFuZGxlLCBTaGFyZWRN
ZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKyAgICBpZiAobmVlZHNTZW1hcGhvcmUpCisg
ICAgICAgIG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlID0gV1RGTW92ZShzZW1hcGhvcmUpOworCisg
ICAgaWYgKG1fZGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeVRpbWVyLmlzQWN0aXZlKCkp
CisgICAgICAgIG1fZGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeVRpbWVyLnN0b3AoKTsK
KyAgICBtX2Rlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnlUaW1lci5zdGFydE9uZVNob3Qo
NV9zKTsKKworICAgIHJldHVybiBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS5nZXQoKTsKK30K
KworYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndhaXRGb3JHZXRJbWFnZURhdGFU
b0NvbXBsZXRlKCkKK3sKKyAgICBBU1NFUlQobV9nZXRJbWFnZURhdGFTZW1hcGhvcmUpOworI2lm
IE9TKERBUldJTikKKyAgICByZXR1cm4gbV9nZXRJbWFnZURhdGFTZW1hcGhvcmUtPndhaXRGb3Io
NV9zKTsKKyNlbHNlCisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30KKwordm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoKQor
eworICAgIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5ID0gbnVsbHB0cjsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpEZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVk
TWVtb3J5KCksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIsIElQQzo6U2VuZE9wdGlvbjo6
RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKIH0KIAogU3RyaW5n
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVS
ZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5oCmluZGV4IDk0YmMzY2QxODZjYzJkY2JjNDkwYTU4Y2UyMjI2NjYxZDdiYTExNTQu
LmNmNzY3OTcyODQzNDFjZjA1OWIyY2UwOWM0NmE1Y2YxZmZlYWZhMTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1RpbWVyLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8
d3RmL1dlYWtQdHIuaD4KIApAQCAtNzUsNiArNzYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgd2ls
bEFwcGVuZEl0ZW0oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2
b2lkIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwogCisgICAgU2hhcmVkTWVt
b3J5KiBzaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoc2l6ZV90IGRhdGFTaXplKTsKKyAgICBi
b29sIHdhaXRGb3JHZXRJbWFnZURhdGFUb0NvbXBsZXRlKCk7CisgICAgdm9pZCBkZXN0cm95R2V0
SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KCk7CisKICAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCiAg
ICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3Zl
cnJpZGU7CkBAIC04NCw3ICs4OSw2IEBAIHB1YmxpYzoKIAogICAgIC8vIE1lc3NhZ2VzIHRvIGJl
IHNlbnQuCiAgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZl
cihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSwgV2ViQ29y
ZTo6UGl4ZWxGb3JtYXQpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IGdldEltYWdl
RGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKTsKICAgICBTdHJpbmcgZ2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVS
ZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIFZl
Y3Rvcjx1aW50OF90PiBnZXREYXRhRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpOwogICAgIFZlY3Rvcjx1aW50OF90PiBnZXRCR1JBRGF0YUZvckltYWdlQnVmZmVy
KFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CkBAIC0xMjksNiArMTMzLDkg
QEAgcHJpdmF0ZToKICAgICBPcHRpb25hbDxHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50
cz4gbV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHM7CiAgICAgdW5zaWduZWQgbV9yZW1h
aW5pbmdJdGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dha2V1cCB7IDAgfTsKICAgICBJUEM6OlNl
bWFwaG9yZSBtX3Jlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlOworICAgIE9wdGlvbmFsPElQQzo6
U2VtYXBob3JlPiBtX2dldEltYWdlRGF0YVNlbWFwaG9yZTsKKyAgICBSZWZQdHI8U2hhcmVkTWVt
b3J5PiBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeTsKKyAgICBXZWJDb3JlOjpUaW1lciBtX2Rl
c3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnlUaW1lciB7ICp0aGlzLCAmUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpkZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5IH07CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="commit-queue"
          id="444100"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424438</attachid>
            <date>2021-03-26 21:00:07 -0700</date>
            <delta_ts>2021-03-29 14:46:05 -0700</delta_ts>
            <desc>Updated</desc>
            <filename>bug-223732-20210326210006.patch</filename>
            <type>text/plain</type>
            <size>24840</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MDUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGNlNzM2MThkNmQ3Yzg4N2U4
ZDJiZmI2ZTNmM2MwOTFiYzNhMTA2YzEuLjFmYzllZGViZTAzYzBmMGVhYjIxOTJhNjc4NWUxZjZm
NDdhNjgzZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMjEtMDMtMjYgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
OiBJbXByb3ZlIGdldEltYWdlRGF0YSgpIHBlcmYgcGFydCAyOiBVc2Ugc2hhcmVkIG1lbW9yeSBh
bmQgYSBzZW1hcGhvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMzczMgorCisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAg
ICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgYSBkZXNpZ24gZm9yIGdldEltYWdlRGF0YSgpIHdo
ZXJlIHRoZSB3ZWIgcHJvY2VzcyBhbmQgdGhlIEdQVSBwcm9jZXNzCisgICAgICAgIHNldCB1cCBh
IHNobWVtICsgc2VtYXBob3JlIGFoZWFkLW9mLXRpbWUsIHNvIHRoYXQgd2hlbiB3ZSBlbmNvdW50
ZXIgYSBjYWxsIHRvIGdldEltYWdlRGF0YSgpLAorICAgICAgICB0aGUgR1BVIHByb2Nlc3MgY2Fu
IGp1c3Qgd3JpdGUgaW50byB0aGUgc2htZW0gYW5kIHNpZ25hbCB0aGUgc2VtYXBob3JlLiBUaGUg
d2ViIHByb2Nlc3MganVzdAorICAgICAgICBlbmNvZGVzIHRoZSBnZXRJbWFnZURhdGEoKSBjYWxs
IGludG8gdGhlIHJlZ3VsYXIgZGlzcGxheSBsaXN0LCBmbHVzaEFzeW5jKClzIHRvIGtpY2sgdGhl
IEdQVQorICAgICAgICBwcm9jZXNzLCB0aGVuIGp1c3Qgd2FpdHMgb24gdGhlIHNlbWFwaG9yZS4g
SW5pdGlhbCBwZXJmb3JtYW5jZSB0ZXN0aW5nIHNob3dzIHRoYXQgdGhpcyBpcworICAgICAgICB3
YXksIHdheSBmYXN0ZXIgdGhhbiBzZW5kaW5nIG1lc3NhZ2VzIGNvbnRhaW5pbmcgcGl4ZWwgY29s
b3IgZGF0YSBwYXlsb2Fkcy4KKworICAgICAgICBUaGlzIHBhdGNoIGNhdXNlcyBhIH40MCUgcHJv
Z3Jlc3Npb24gb24gdGhlIEltYWdlcyB0ZXN0IGluIE1vdGlvbk1hcmsgb24gbXkgTWFjIHdpdGgg
dGhlIEdQVQorICAgICAgICBwcm9jZXNzIGVuYWJsZWQuIFdoZW4gY29tcGFyZWQgdG8gdGhlIEdQ
VSBwcm9jZXNzIGRpc2FibGVkLCB0aGUgcmVzdWx0cyBhZnRlciBqdXN0IHJ1bm5pbmcKKyAgICAg
ICAganVzdCBhIGZldyB0aW1lcyBzZWVtIHRvIGJlIHByZXR0eSBjbG9zZSAod2l0aGluIHRoZSBu
b2lzZSkuCisKKyAgICAgICAgSWYgd2UgbmVlZCBtb3JlIHBlcmZvcm1hbmNlLCB0aGUgbmV4dCBz
dGVwIGlzIHRvIHRyeSB0byByZWR1Y2UgdGhlIG1lbWNweSgpcy4KKworICAgICAgICBObyBuZXcg
dGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBH
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmg6CisgICAgICAgICogR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VE
YXRhSGVscGVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBk
YXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6c2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBo
b3JlRm9yR2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6ZGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnBvcHVsYXRlR2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0SW1hZ2VEYXRh
KTogRGVsZXRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQubWVzc2FnZXMuaW46CisgICAgICAgICogUGxhdGZvcm0vSVBDL0lQQ1NlbWFwaG9y
ZS5oOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9kYXJ3aW4vSVBDU2VtYXBob3JlRGFyd2luLmNw
cDoKKyAgICAgICAgKElQQzo6U2VtYXBob3JlOjp3YWl0Rm9yKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpzaGFyZWRNZW1vcnlG
b3JHZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OndhaXRGb3JHZXRJbWFnZURhdGFUb0NvbXBsZXRlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVt
b3J5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRJ
bWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgorCiAyMDIxLTAzLTI1ICBCSiBCdXJnICA8YmJ1
cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFNlbmRLZXlzIG9uIElucHV0IG9mIHR5cGU9ZmlsZSBy
ZXR1cm5zIGVsZW1lbnQgbm90IGZvdW5kIGluIHNvbWUgY2FzZXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKaW5kZXggNmNh
MWU2MGRhYWJlNmUwNTgxYzI0YjYxYWQwNGI5OTY4NTM3YWNjNi4uNGEwMWVlNjc2OWE2OThiZTVl
NDc4MDkyZTQ5YmJkYTgxYzc0Yjk0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzgsOCArNzgsOCBAQCBwcml2YXRl
OgogICAgIHsKICAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldElt
YWdlRGF0YT4oKSkgewogICAgICAgICAgICAgYXV0byYgZ2V0SW1hZ2VEYXRhSXRlbSA9IGl0ZW0u
Z2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRJbWFnZURhdGE+KCk7Ci0gICAgICAgICAgICBV
TlVTRURfVkFSSUFCTEUoZ2V0SW1hZ2VEYXRhSXRlbSk7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDY0OSBJbXBsZW1lbnQg
dGhpcy4KKyAgICAgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gQmFzZUNvbmNyZXRlSW1hZ2VCdWZm
ZXI6OmdldEltYWdlRGF0YShnZXRJbWFnZURhdGFJdGVtLm91dHB1dEZvcm1hdCgpLCBnZXRJbWFn
ZURhdGFJdGVtLnNyY1JlY3QoKSk7CisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQucG9wdWxhdGVHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoaW1hZ2VEYXRhLmdldCgpKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cAppbmRleCBlZTE0MmYyZjU5ZmRiNmI0Y2FiNTg5MzY3MDNlZGMyNmZjZjE5YjliLi4yMDg5NjVl
M2I3ZmM4ZTYzMWM1ZWE1MzA4YzFkZTc3OTQ2MGFhZjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM4LDEwICszOCwxMCBAQAogI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVk
ZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1
ZS5oPgogCi0KICNkZWZpbmUgVEVSTUlOQVRFX1dFQl9QUk9DRVNTX1dJVEhfTUVTU0FHRShtZXNz
YWdlKSBcCiAgICAgUkVMRUFTRV9MT0dfRkFVTFQoSVBDLCAiUmVxdWVzdGluZyB0ZXJtaW5hdGlv
biBvZiB3ZWIgcHJvY2VzcyAlIiBQUkl1NjQgIiBmb3IgcmVhc29uOiAlIiBQVUJMSUNfTE9HX1NU
UklORywgbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT53ZWJQcm9jZXNzSWRlbnRpZmllcigp
LnRvVUludDY0KCksICNtZXNzYWdlKTsgXAogICAgIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cy0+dGVybWluYXRlV2ViUHJvY2VzcygpOwpAQCAtMzE2LDE0ICszMTYsNjcgQEAgdm9pZCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpzZXROZXh0SXRlbUJ1ZmZlclRvUmVhZChEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlcklkZW4KICAgICBtX3BlbmRpbmdXYWtldXBJbmZvID0ge3t7IGlkZW50aWZpZXIs
IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpoZWFkZXJTaXplKCksIGRlc3RpbmF0aW9uSWRlbnRp
ZmllciwgR1BVUHJvY2Vzc1dha2V1cFJlYXNvbjo6VW5zcGVjaWZpZWQgfSwgV1RGOjpudWxsb3B0
IH19OwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgSW50UmVjdCBzcmNSZWN0LCBSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQorT3B0aW9uYWw8U2hhcmVkTWVtb3J5OjpJUENIYW5kbGU+IFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YUhlbHBlcihzaXpl
X3QgYnl0ZUNvdW50KQoreworICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUoIW1f
Z2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5IHx8IGJ5dGVDb3VudCA+IG1fZ2V0SW1hZ2VEYXRhU2hh
cmVkTWVtb3J5LT5zaXplKCksIFdURjo6bnVsbG9wdCwgIlRoZSBleGlzdGluZyBTaG1lbSBmb3Ig
Z2V0SW1hZ2VEYXRhKCkgaXMgYWxyZWFkeSBiaWcgZW5vdWdoIHRvIGhhbmRsZSB0aGUgcmVxdWVz
dCIpOworCisgICAgaWYgKGJ5dGVDb3VudCA+IDY0ICogTUIpIHsKKyAgICAgICAgLy8gSnVzdCBh
IHNhbml0eSBjaGVjay4gQSA0SyBpbWFnZSBpcyAzNk1CLgorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIH0KKworICAgIGRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoKTsK
KyAgICBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6YWxsb2NhdGUo
Ynl0ZUNvdW50KTsKKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgaWYgKG1f
Z2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KQorICAgICAgICBtX2dldEltYWdlRGF0YVNoYXJlZE1l
bW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFk
T25seSk7CisgICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIHsgV1RGTW92ZShoYW5k
bGUpLCBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSA/IG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVt
b3J5LT5zaXplKCkgOiAwIH07Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBk
YXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKHNpemVfdCBieXRlQ291bnQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIFJl
ZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YTsKLSAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1f
cmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpKQotICAgICAgICBpbWFnZURhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRh
KG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShp
bWFnZURhdGEpKTsKKyAgICBpZiAoYXV0byBoYW5kbGUgPSB1cGRhdGVTaGFyZWRNZW1vcnlGb3JH
ZXRJbWFnZURhdGFIZWxwZXIoYnl0ZUNvdW50KSkKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGTW92ZShoYW5kbGUudmFsdWUoKSkpOworICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoeyB9KTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhvcmVG
b3JHZXRJbWFnZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OlNlbWFwaG9y
ZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlKTsKK30K
Kwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1h
cGhvcmVGb3JHZXRJbWFnZURhdGEoc2l6ZV90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQQzo6U2VtYXBob3Jl
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBpZiAoYXV0byBoYW5kbGUgPSB1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFn
ZURhdGFIZWxwZXIoYnl0ZUNvdW50KSkKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92
ZShoYW5kbGUudmFsdWUoKSksIG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlKTsKKyAgICBlbHNlCisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSwgbV9nZXRJbWFnZURhdGFTZW1hcGhvcmUpOwor
fQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRlc3Ryb3lHZXRJbWFnZURhdGFTaGFy
ZWRNZW1vcnkoKQoreworICAgIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5ID0gbnVsbHB0cjsK
K30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpwb3B1bGF0ZUdldEltYWdlRGF0YVNo
YXJlZE1lbW9yeShXZWJDb3JlOjpJbWFnZURhdGEqIGltYWdlRGF0YSkKK3sKKyAgICBNRVNTQUdF
X0NIRUNLKG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LCAiV2UgY2FuJ3QgcnVuIGdldEltYWdl
RGF0YSB3aXRob3V0IGEgYnVmZmVyIHRvIHdyaXRlIGludG8iKTsKKworICAgIGlmIChpbWFnZURh
dGEgJiYgaW1hZ2VEYXRhLT5kYXRhKCkpIHsKKyAgICAgICAgTUVTU0FHRV9DSEVDSyhpbWFnZURh
dGEtPmRhdGEoKS0+Ynl0ZUxlbmd0aCgpIDw9IG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5z
aXplKCksICJTaG1lbSBmb3IgcmV0dXJuIG9mIGdldEltYWdlRGF0YSBpcyB0b28gc21hbGwiKTsK
KyAgICAgICAgbWVtY3B5KG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5kYXRhKCksIGltYWdl
RGF0YS0+ZGF0YSgpLT5kYXRhKCksIGltYWdlRGF0YS0+ZGF0YSgpLT5ieXRlTGVuZ3RoKCkpOwor
ICAgIH0gZWxzZQorICAgICAgICBtZW1zZXQobV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPmRh
dGEoKSwgMCwgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPnNpemUoKSk7CisKKyNpZiBPUyhE
QVJXSU4pCisgICAgbV9nZXRJbWFnZURhdGFTZW1hcGhvcmUuc2lnbmFsKCk7CisjZW5kaWYKIH0K
IAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3Jl
OjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5oCmluZGV4IDM5NDNkNTIxZDM2OTNmYmQyY2VmMzZiNDdkMzQ5NmIxYzJkZjM2NTku
LjlkNTVhYjRmYjQ1MDBjMjk1MDMwNzMxMzY3NDRhOTk5NzQ3ZmMwMzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC03OSw2ICs3OSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0TmV4dEl0ZW1CdWZm
ZXJUb1JlYWQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb24pOwogCisgICAgdm9p
ZCBwb3B1bGF0ZUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeShXZWJDb3JlOjpJbWFnZURhdGEqKTsK
KwogICAgIC8vIFJ1bnMgRnVuY3Rpb24gaW4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB0YXNrIHF1
ZXVlLgogICAgIHZvaWQgZGlzcGF0Y2goRnVuY3Rpb248dm9pZCgpPiYmKTsKIApAQCAtMTAzLDYg
KzEwNSw4IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheVJlc3Vs
dCBzdWJtaXQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiwgV2ViQ29y
ZTo6SW1hZ2VCdWZmZXImIGRlc3RpbmF0aW9uKTsKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VC
dWZmZXI+IG5leHREZXN0aW5hdGlvbkltYWdlQnVmZmVyQWZ0ZXJBcHBseWluZ0Rpc3BsYXlMaXN0
cyhXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgaW5pdGlhbERlc3RpbmF0aW9uLCBzaXplX3QgaW5pdGlh
bE9mZnNldCwgRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUmLCBHUFVQcm9jZXNzV2FrZXVwUmVhc29u
KTsKIAorICAgIE9wdGlvbmFsPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiB1cGRhdGVTaGFyZWRN
ZW1vcnlGb3JHZXRJbWFnZURhdGFIZWxwZXIoc2l6ZV90IGJ5dGVDb3VudCk7CisKICAgICAvLyBJ
UEM6Ok1lc3NhZ2VTZW5kZXIuCiAgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29u
bmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0
aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMTQsNyArMTE4LDEwIEBAIHByaXZhdGU6
CiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgcmVjZWl2ZWQuCiAgICAgdm9pZCBjcmVhdGVJbWFnZUJ1
ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29s
b3JTcGFjZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7CiAgICAgdm9pZCB3YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0KGNvbnN0IEdQ
VVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzJik7Ci0gICAgdm9pZCBnZXRJbWFnZURhdGEo
V2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIFdlYkNvcmU6Oklu
dFJlY3Qgc3JjUmVjdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+JiYpPiYmKTsKKyAg
ICB2b2lkIHVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShzaXplX3QgYnl0ZUNvdW50
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik+
JiYpOworICAgIHZvaWQgc2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoY29uc3QgSVBDOjpTZW1hcGhvcmUmKT4mJik7CisgICAgdm9pZCB1cGRhdGVTaGFyZWRN
ZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoc2l6ZV90IGJ5dGVDb3VudCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQ
Qzo6U2VtYXBob3JlJik+JiYpOworICAgIHZvaWQgZGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1l
bW9yeSgpOwogICAgIHZvaWQgZ2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNv
bHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdldERhdGFGb3JJbWFnZUJ1ZmZl
cihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChW
ZWN0b3I8dWludDhfdD4mJik+JiYpOwogICAgIHZvaWQgZ2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZl
cihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmKTsKQEAgLTE0OCw2ICsxNTUsOCBAQCBwcml2YXRl
OgogICAgIEhhc2hNYXA8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVy
LCBSZWZQdHI8RGlzcGxheUxpc3RSZWFkZXJIYW5kbGU+PiBtX3NoYXJlZERpc3BsYXlMaXN0SGFu
ZGxlczsKICAgICBPcHRpb25hbDxQZW5kaW5nV2FrZXVwSW5mb3JtYXRpb24+IG1fcGVuZGluZ1dh
a2V1cEluZm87CiAgICAgSVBDOjpTZW1hcGhvcmUgbV9yZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9y
ZTsKKyAgICBJUEM6OlNlbWFwaG9yZSBtX2dldEltYWdlRGF0YVNlbWFwaG9yZTsKKyAgICBSZWZQ
dHI8U2hhcmVkTWVtb3J5PiBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgpp
bmRleCAxMzgyY2E1ZTkyOGQ0NTgxZWI1Zjc4YjcwY2Q5MjIzNzI4YmI2ZmQ1Li5hZTIzMzdjYzc0
NTMwNzZjZjY2YjZkY2EzMzAzMWE3Nzg2ZmI3YTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5tZXNzYWdlcy5pbgpAQCAtMjUsNyArMjUsMTAgQEAKIG1lc3NhZ2VzIC0+IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQgewogICAgIENyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6
ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpCiAgICAgV2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChzdHJ1Y3QgV2ViS2l0OjpHUFVQcm9j
ZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cyBhcmd1bWVudHMpCi0gICAgR2V0SW1hZ2VEYXRhKGVu
dW06dWludDhfdCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
V2ViQ29yZTo6SW50UmVjdCBzcmNSZWN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoUmVmUHRyPFdlYkNvcmU6Oklt
YWdlRGF0YT4gaW1hZ2VEYXRhKSBTeW5jaHJvbm91cworICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUZv
ckdldEltYWdlRGF0YShzaXplX3QgYnl0ZUNvdW50KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6
OklQQ0hhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzCisgICAgU2VtYXBob3JlRm9yR2V0SW1hZ2VE
YXRhKCkgLT4gKElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMKKyAgICBVcGRh
dGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoc2l6ZV90IGJ5dGVDb3Vu
dCkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlLCBJUEM6OlNlbWFw
aG9yZSBzZW1hcGhvcmUpIFN5bmNocm9ub3VzCisgICAgRGVzdHJveUdldEltYWdlRGF0YVNoYXJl
ZE1lbW9yeSgpCiAgICAgR2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2VydmVS
ZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFN0cmluZyB1cmxTdHJp
bmcpIFN5bmNocm9ub3VzCiAgICAgR2V0RGF0YUZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoVmVjdG9yPHVpbnQ4X3Q+
IGRhdGEpIFN5bmNocm9ub3VzCiAgICAgR2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KSAtPiAoVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9JUENTZW1hcGhvcmUuaCBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0lQQ1NlbWFwaG9yZS5oCmluZGV4IDg4M2JiMjZiZTdkYjI4ZTExY2NlMGFlOWI4
MzFmOGQxZGYwMWNhNTIuLmE3N2NjMjBhNmZjNTU5ODVjMWNhZGFhZTdjOWNiY2E2NGM3ZGQwZTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0lQQ1NlbWFwaG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0lQQ1NlbWFwaG9yZS5oCkBAIC01Nyw3ICs1
Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2lnbmFsKCk7CiAgICAgdm9pZCB3YWl0KCk7Ci0g
ICAgdm9pZCB3YWl0Rm9yKFRpbWVvdXQpOworICAgIGJvb2wgd2FpdEZvcihUaW1lb3V0KTsKICAg
ICBNYWNoU2VuZFJpZ2h0IGNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0OwogICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3NlbmRSaWdodCB8fCBtX3NlbWFwaG9yZSAh
PSBTRU1BUEhPUkVfTlVMTDsgfQogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL2Rhcndpbi9JUENTZW1hcGhvcmVEYXJ3aW4uY3BwIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvZGFyd2luL0lQQ1NlbWFwaG9yZURhcndpbi5jcHAKaW5kZXggOGJjMmViYzI3
ZmNkMDViOTE0M2QyYjhmMTFkZGRlYTU0ZmIyZmVmMi4uYjg2OWUwYzMwOTgxNzMyYTI4YmQxZTUy
OTM4MDY3NWI2NDlkYmUyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
ZGFyd2luL0lQQ1NlbWFwaG9yZURhcndpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvZGFyd2luL0lQQ1NlbWFwaG9yZURhcndpbi5jcHAKQEAgLTc4LDEyICs3OCwxMyBAQCB2
b2lkIFNlbWFwaG9yZTo6d2FpdCgpCiAgICAgQVNTRVJUX1VOVVNFRChyZXQsIHJldCA9PSBLRVJO
X1NVQ0NFU1MpOwogfQogCi12b2lkIFNlbWFwaG9yZTo6d2FpdEZvcihUaW1lb3V0IHRpbWVvdXQp
Citib29sIFNlbWFwaG9yZTo6d2FpdEZvcihUaW1lb3V0IHRpbWVvdXQpCiB7CiAgICAgU2Vjb25k
cyB3YWl0VGltZSA9IHRpbWVvdXQuc2Vjb25kc1VudGlsRGVhZGxpbmUoKTsKICAgICBhdXRvIHNl
Y29uZHMgPSB3YWl0VGltZS5zZWNvbmRzQXM8dW5zaWduZWQ+KCk7CiAgICAgYXV0byByZXQgPSBz
ZW1hcGhvcmVfdGltZWR3YWl0KG1fc2VtYXBob3JlLCB7IHNlY29uZHMsIHN0YXRpY19jYXN0PGNs
b2NrX3Jlc190Pih3YWl0VGltZS5uYW5vc2Vjb25kc0FzPHVpbnQ2NF90PigpIC0gc2Vjb25kcyAq
IE5TRUNfUEVSX1NFQykgfSk7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXQsIHJldCA9PSBLRVJOX1NV
Q0NFU1MgfHwgcmV0ID09IEtFUk5fT1BFUkFUSU9OX1RJTUVEX09VVCk7CisgICAgQVNTRVJUKHJl
dCA9PSBLRVJOX1NVQ0NFU1MgfHwgcmV0ID09IEtFUk5fT1BFUkFUSU9OX1RJTUVEX09VVCk7Cisg
ICAgcmV0dXJuIHJldCA9PSBLRVJOX1NVQ0NFU1M7CiB9CiAKIE1hY2hTZW5kUmlnaHQgU2VtYXBo
b3JlOjpjcmVhdGVTZW5kUmlnaHQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApp
bmRleCA1YmJmMjU2MzA2MjkwZTQ5YWM4ZGIzMWI1ZDAxYWM5NmI1NmFhYzQyLi4zMWMxNGJjNDYw
ZTA3ZWJjMzY3MmMzMTI0MjE3MDU2NWQwZmZkYWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJv
eHkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE5MywxMiArMTkzLDI0IEBAIHByb3RlY3RlZDoKICAgICAgICAgaWYgKFVOTElLRUxZ
KCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAorICAgICAgICBhdXRvIGltYWdlRGF0YSA9IFdlYkNvcmU6OkltYWdlRGF0YTo6Y3Jl
YXRlKHNyY1JlY3Quc2l6ZSgpKTsKKyAgICAgICAgaWYgKCFpbWFnZURhdGEgfHwgIWltYWdlRGF0
YS0+ZGF0YSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHNpemVfdCBk
YXRhU2l6ZSA9IGltYWdlRGF0YS0+ZGF0YSgpLT5ieXRlTGVuZ3RoKCk7CisKKyAgICAgICAgU2hh
cmVkTWVtb3J5KiBzaGFyZWRNZW1vcnkgPSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+
c2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKGRhdGFTaXplKTsKKyAgICAgICAgaWYgKCFzaGFy
ZWRNZW1vcnkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgICAgICBhdXRvJiBt
dXRhYmxlVGhpcyA9IGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSY+KCp0aGlzKTsK
ICAgICAgICAgbXV0YWJsZVRoaXMubV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLmdldEltYWdl
RGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QpOwotICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDY0OSBVc2UgdGhlIHJlY29yZGVkIGNv
bW1hbmQgaW5zdGVhZCBvZiB0aGUgc3luY2hyb25vdXMgSVBDIG1lc3NhZ2UuCisgICAgICAgIG11
dGFibGVUaGlzLmZsdXNoRHJhd2luZ0NvbnRleHRBc3luYygpOwogCi0gICAgICAgIGNvbnN0X2Nh
c3Q8UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSo+KHRoaXMpLT5mbHVzaERyYXdpbmdDb250ZXh0KCk7
Ci0gICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Z2V0SW1hZ2VE
YXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
OworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPndhaXRGb3JHZXRJ
bWFnZURhdGFUb0NvbXBsZXRlKCkpCisgICAgICAgICAgICBtZW1jcHkoaW1hZ2VEYXRhLT5kYXRh
KCktPmRhdGEoKSwgc2hhcmVkTWVtb3J5LT5kYXRhKCksIGRhdGFTaXplKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbWVtc2V0KGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCksIDAsIGRhdGFT
aXplKTsKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKICAgICB9CiAKICAgICB2b2lkIHB1dElt
YWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBXZWJDb3JlOjpJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSwgV2ViQ29y
ZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gV2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCAxYTBjNjMyMGUzYmJkZjE2M2U0NzA2MjVkZmEz
YmJhZWU3NzZiOTI1Li42NGEzNmJjYTFhYTFmM2M3YmVjMWNjOGM3MThkODg5NTYyOGVlNjJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0MywxMyArMTQzLDU0
IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVh
dGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJl
ZlB0cjxJbWFnZURhdGE+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKQorU2hhcmVkTWVtb3J5KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNoYXJlZE1l
bW9yeUZvckdldEltYWdlRGF0YShzaXplX3QgZGF0YVNpemUpCiB7CiAgICAgc2VuZERlZmVycmVk
V2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7CiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURh
dGE7Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldElt
YWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRJbWFnZURhdGE6OlJlcGx5
KGltYWdlRGF0YSksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIsIDFfcyk7Ci0gICAgcmV0
dXJuIGltYWdlRGF0YTsKKyAgICBib29sIG5lZWRzU2hhcmVkTWVtb3J5ID0gIW1fZ2V0SW1hZ2VE
YXRhU2hhcmVkTWVtb3J5IHx8IGRhdGFTaXplID4gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnlM
ZW5ndGg7CisgICAgYm9vbCBuZWVkc1NlbWFwaG9yZSA9ICFtX2dldEltYWdlRGF0YVNlbWFwaG9y
ZTsKKworICAgIGlmIChuZWVkc1NoYXJlZE1lbW9yeSkKKyAgICAgICAgbV9nZXRJbWFnZURhdGFT
aGFyZWRNZW1vcnkgPSBudWxscHRyOworCisgICAgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFu
ZGxlOworICAgIElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZTsKKworICAgIGlmIChuZWVkc1NoYXJl
ZE1lbW9yeSAmJiBuZWVkc1NlbWFwaG9yZSkKKyAgICAgICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdl
dEltYWdlRGF0YShkYXRhU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpV
cGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGE6OlJlcGx5KGhhbmRs
ZSwgc2VtYXBob3JlKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciwgMV9zLCBJUEM6OlNl
bmRTeW5jT3B0aW9uOjpNYWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMpOworICAgIGVs
c2UgaWYgKG5lZWRzU2hhcmVkTWVtb3J5KQorICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKGRh
dGFTaXplKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1l
bW9yeUZvckdldEltYWdlRGF0YTo6UmVwbHkoaGFuZGxlKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciwgMV9zLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpNYWludGFpbk9yZGVyaW5nV2l0aEFz
eW5jTWVzc2FnZXMpOworICAgIGVsc2UgaWYgKG5lZWRzU2VtYXBob3JlKQorICAgICAgICBzZW5k
U3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6U2VtYXBob3JlRm9yR2V0SW1h
Z2VEYXRhKCksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpTZW1hcGhvcmVGb3JH
ZXRJbWFnZURhdGE6OlJlcGx5KHNlbWFwaG9yZSksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIsIDFfcyk7CisKKyAgICBpZiAoIWhhbmRsZS5oYW5kbGUuaXNOdWxsKCkpIHsKKyAgICAgICAg
bV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6Om1hcChoYW5kbGUuaGFu
ZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKyAgICAgICAgbV9nZXRJ
bWFnZURhdGFTaGFyZWRNZW1vcnlMZW5ndGggPSBoYW5kbGUuZGF0YVNpemU7CisgICAgfQorICAg
IGlmIChuZWVkc1NlbWFwaG9yZSkKKyAgICAgICAgbV9nZXRJbWFnZURhdGFTZW1hcGhvcmUgPSBX
VEZNb3ZlKHNlbWFwaG9yZSk7CisKKyAgICBpZiAobV9kZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVk
TWVtb3J5VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9kZXN0cm95R2V0SW1hZ2VEYXRhU2hh
cmVkTWVtb3J5VGltZXIuc3RvcCgpOworICAgIG1fZGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1l
bW9yeVRpbWVyLnN0YXJ0T25lU2hvdCg1X3MpOworCisgICAgcmV0dXJuIG1fZ2V0SW1hZ2VEYXRh
U2hhcmVkTWVtb3J5LmdldCgpOworfQorCitib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6d2FpdEZvckdldEltYWdlRGF0YVRvQ29tcGxldGUoKQoreworICAgIEFTU0VSVChtX2dldElt
YWdlRGF0YVNlbWFwaG9yZSk7CisjaWYgT1MoREFSV0lOKQorICAgIHJldHVybiBtX2dldEltYWdl
RGF0YVNlbWFwaG9yZS0+d2FpdEZvcig1X3MpOworI2Vsc2UKKyAgICByZXR1cm4gdHJ1ZTsKKyNl
bmRpZgorfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGVzdHJveUdldElt
YWdlRGF0YVNoYXJlZE1lbW9yeSgpCit7CisgICAgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkg
PSBudWxscHRyOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRl
c3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllciwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JT
eW5jUmVwbHkpOwogfQogCiBTdHJpbmcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRE
YXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKaW5kZXggOTRiYzNjZDE4NmNjMmRjYmM0
OTBhNThjZTIyMjY2NjFkN2JhMTE1NC4uZTg3NWEwYTZhMDNhNGU5ZjcyY2VlMjY4ZjRkYWFjZGRh
MWQxMTYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDYgKzM3
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KICNpbmNsdWRlIDx3
dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCkBAIC03NSw2ICs3NiwxMCBA
QCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsQXBwZW5kSXRlbShXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVl
ZGVkKCk7CiAKKyAgICBTaGFyZWRNZW1vcnkqIHNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShz
aXplX3QgZGF0YVNpemUpOworICAgIGJvb2wgd2FpdEZvckdldEltYWdlRGF0YVRvQ29tcGxldGUo
KTsKKyAgICB2b2lkIGRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoKTsKKwogICAgIC8v
IElQQzo6TWVzc2FnZVNlbmRlci4KICAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJD
b25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRl
c3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKQEAgLTg0LDcgKzg5LDYgQEAgcHVibGljOgog
CiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgc2VudC4KICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VC
dWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNv
cmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6RGVzdGlu
YXRpb25Db2xvclNwYWNlLCBXZWJDb3JlOjpQaXhlbEZvcm1hdCk7Ci0gICAgUmVmUHRyPFdlYkNv
cmU6OkltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIFN0cmluZyBnZXREYXRhVVJMRm9y
SW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGdldERhdGFGb3JJbWFnZUJ1ZmZl
cihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGdl
dEJHUkFEYXRhRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKTsKQEAgLTEyOSw2ICsxMzMsMTAgQEAgcHJpdmF0ZToKICAgICBPcHRpb25hbDxHUFVQcm9j
ZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cz4gbV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVu
dHM7CiAgICAgdW5zaWduZWQgbV9yZW1haW5pbmdJdGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dh
a2V1cCB7IDAgfTsKICAgICBJUEM6OlNlbWFwaG9yZSBtX3Jlc3VtZURpc3BsYXlMaXN0U2VtYXBo
b3JlOworICAgIE9wdGlvbmFsPElQQzo6U2VtYXBob3JlPiBtX2dldEltYWdlRGF0YVNlbWFwaG9y
ZTsKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeTsK
KyAgICB1aW50NjRfdCBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeUxlbmd0aCB7IDAgfTsKKyAg
ICBXZWJDb3JlOjpUaW1lciBtX2Rlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnlUaW1lciB7
ICp0aGlzLCAmUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkZXN0cm95R2V0SW1hZ2VEYXRh
U2hhcmVkTWVtb3J5IH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
      

    </bug>

</bugzilla>