<?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>230860</bug_id>
          
          <creation_ts>2021-09-27 15:10:23 -0700</creation_ts>
          <short_desc>[GPU Process] Use IPC streaming for concurrent display list processing</short_desc>
          <delta_ts>2021-10-13 15:06:56 -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>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=231701</see_also>
          <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>
          <dependson>230714</dependson>
    
    <dependson>231263</dependson>
    
    <dependson>231296</dependson>
    
    <dependson>231301</dependson>
    
    <dependson>231304</dependson>
    
    <dependson>231305</dependson>
    
    <dependson>231319</dependson>
    
    <dependson>231326</dependson>
    
    <dependson>231335</dependson>
    
    <dependson>231447</dependson>
    
    <dependson>231483</dependson>
    
    <dependson>231484</dependson>
    
    <dependson>231532</dependson>
    
    <dependson>231584</dependson>
          <blocked>231596</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>jonlee</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1797659</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-27 15:10:23 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797661</commentid>
    <comment_count>1</comment_count>
      <attachid>439399</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-27 15:15:01 -0700</bug_when>
    <thetext>Created attachment 439399
Extremely hacky WIP - no resource caching</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797770</commentid>
    <comment_count>2</comment_count>
      <attachid>439399</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-09-28 00:23:24 -0700</bug_when>
    <thetext>Comment on attachment 439399
Extremely hacky WIP - no resource caching

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

&gt; Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp:705
&gt; +    MESSAGE_CHECK(m_renderingDestinationImageBuffer, &quot;No destination image buffer specified.&quot;);

So this is a bit highlighting the pondering issue:
The &quot;Save&quot; is a message to the context of the destination image buffer.
How can we be in the middle of dispatching &quot;save&quot; to non-existing object?

The implementation would be:

void RemoteGraphicsContext::save(DisplayList::Save&amp;&amp; item) {
   item.apply(m_context);
}

&gt; Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in:25
&gt; +messages -&gt; RemoteRenderingBackend NotRefCounted Stream {

I know this is WIP and I see the value of having it this way due to existing code. However, I want to put this out there so you can ponder about it. (Also I don&apos;t mean to say you didn&apos;t already)

Nomenclature:
ImageBuffer == drawing target == drawing context == display list context == roughly GraphicsContext

Now you have structure of:

GPUConnectionToWebProcess:
  - Map of RemoteRenderingBackends

RemoteRenderingBackend:
  - Map of ImageBuffers

So identity reference (id) gatekeeping is done at two levels: 
- I want to send message to RemoteRenderingBackend by this id (CreateImageBuffer)
- I want to draw to this ImageBuffer ( HandleMetaCommandChangeDestinationImageBuffer )

The first level of gatekeeping is redundant. Each individual RemoteRenderingBackend do not _really_ contribute to the algorithm.

So if you think of C++, you wouldn&apos;t necessarily have API like:

  MyRenderingBackend::handleSave(ImageBuffer, DisplayList::Save);

Instead, you would have
  MyImageBuffer::handleSave(DisplayList::Save)

Which we already actually have:
  GraphicsContext::save(...);

The current strangeness is visible in the API, since following can happen:
  HandleSave
  HandleMetaCommandChangeDestinationImageBuffer
  HandleFillRect

E.g. it is obvious that the ImageBuffers carry the state that is modified through the RemoteRenderingBackend, while RemoteRenderingBackend cannot carry that.
So then the question is: why isn&apos;t the command sent to the ImageBuffer?


So the structure could be:

GPUConnectionToWebProcess:
  - Map of RemoteImageBuffers / RemoteGraphicsContext / RemoteDisplayListContext

GPUConnectionToWebProcess::CreateImageBuffer

The &quot;stream&quot; signifies the sequence of ordered operations on a group of objects.

So the stream actually already has implemented `HandleMetaCommandChangeDestinationImageBuffer`, it&apos;s IPC control message `SetStreamDestinationID`.

&gt; Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in:28
&gt; +    HandleSave(WebCore::DisplayList::Save item)

Also this I know might be just because of how the WIP is organized, but mentioning just in case.

If there&apos;s value in having the args already in DisplayList items this makes sense. E.g. if we anyway construct the lists.

If we don&apos; t construct the lists, then this wraps a message inside a message. So these could be just plain GraphicsContext args.


.messages.in:
HandleFillRect(FloatRect rect) 

proxy:
void RemoteGraphicsContextProxy::fillRect(FloatRect rect) {
  m_streamConnection-&gt;send(Messages::HandleFillRect { rect } );
}

remote:
void RemoteGraphicsContext::handleFillRect(Messages::HandleFillRect&amp;&amp; msg) {
  m_context.fillRect(msg.rect)
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797775</commentid>
    <comment_count>3</comment_count>
      <attachid>439399</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-09-28 00:48:02 -0700</bug_when>
    <thetext>Comment on attachment 439399
Extremely hacky WIP - no resource caching

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

&gt; Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in:39
&gt; +    HandleSetLineCap(WebCore::DisplayList::SetLineCap item)

So one example where the logic of &quot;use DisplayList:: items so we can memcpy things around and that&apos;s that&quot; is flawed is that
the IPC layer was built inherently for the reason of security, and as such the messages need to be verified by the 
machinery. Currently the DisplayList items are insecure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797906</commentid>
    <comment_count>4</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-28 09:07:55 -0700</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #3)
&gt; Comment on attachment 439399 [details]
&gt; Extremely hacky WIP - no resource caching
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=439399&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in:39
&gt; &gt; +    HandleSetLineCap(WebCore::DisplayList::SetLineCap item)
&gt; 
&gt; So one example where the logic of &quot;use DisplayList:: items so we can memcpy
&gt; things around and that&apos;s that&quot; is flawed is that
&gt; the IPC layer was built inherently for the reason of security, and as such
&gt; the messages need to be verified by the 
&gt; machinery. Currently the DisplayList items are insecure.

Note that this patch drops the `isValid()` checks for each of the inline display list items, which we currently have in trunk. Once we add these back in, DisplayList items sent via SimpleArgumentCoder will no longer be insecure (and validation failure should result in a MESSAGE_CHECK).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797935</commentid>
    <comment_count>5</comment_count>
      <attachid>439399</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-28 09:57:19 -0700</bug_when>
    <thetext>Comment on attachment 439399
Extremely hacky WIP - no resource caching

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

&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp:705
&gt;&gt; +    MESSAGE_CHECK(m_renderingDestinationImageBuffer, &quot;No destination image buffer specified.&quot;);
&gt; 
&gt; So this is a bit highlighting the pondering issue:
&gt; The &quot;Save&quot; is a message to the context of the destination image buffer.
&gt; How can we be in the middle of dispatching &quot;save&quot; to non-existing object?
&gt; 
&gt; The implementation would be:
&gt; 
&gt; void RemoteGraphicsContext::save(DisplayList::Save&amp;&amp; item) {
&gt;    item.apply(m_context);
&gt; }

This is my eventual goal (in this patch, I even included empty RemoteGraphicsContext/RemoteGraphicsContextProxy files that I added with this intention, but did not build on, since adding logic to the existing RRB/RRBP pipeline was more convenient).

I plan to make both RRB and the new RemoteGraphicsContext streaming IPC message receivers that share the same StreamServerConnection; then, RemoteGraphicsContextProxy in the web process would be able to directly message RemoteGraphicsContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797942</commentid>
    <comment_count>6</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-28 10:08:29 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #4)
&gt; (In reply to Kimmo Kinnunen from comment #3)
&gt; &gt; Comment on attachment 439399 [details]
&gt; &gt; Extremely hacky WIP - no resource caching
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=439399&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in:39
&gt; &gt; &gt; +    HandleSetLineCap(WebCore::DisplayList::SetLineCap item)
&gt; &gt; 
&gt; &gt; So one example where the logic of &quot;use DisplayList:: items so we can memcpy
&gt; &gt; things around and that&apos;s that&quot; is flawed is that
&gt; &gt; the IPC layer was built inherently for the reason of security, and as such
&gt; &gt; the messages need to be verified by the 
&gt; &gt; machinery. Currently the DisplayList items are insecure.
&gt; 
&gt; Note that this patch drops the `isValid()` checks for each of the inline
&gt; display list items, which we currently have in trunk. Once we add these back
&gt; in, DisplayList items sent via SimpleArgumentCoder will no longer be
&gt; insecure (and validation failure should result in a MESSAGE_CHECK).

I would also add that we know for a fact that very fast, low-overhead encoding/decoding of display list items and their arguments is necessary in order to hit our performance goals, particularly on the Canvas subtests.

In theory, we could use normal IPC encoding/decoding and validation instead, but this would require us to make equivalent progressions elsewhere to mitigate the performance hit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798417</commentid>
    <comment_count>7</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-09-29 10:06:27 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #6)

&gt; I would also add that we know for a fact that very fast, low-overhead
&gt; encoding/decoding of display list items and their arguments is necessary in
&gt; order to hit our performance goals, particularly on the Canvas subtests.
&gt; 
&gt; In theory, we could use normal IPC encoding/decoding and validation instead,
&gt; but this would require us to make equivalent progressions elsewhere to
&gt; mitigate the performance hit.

This statement is just not logical.
Encoding of IPC messages filled with display list items:
 - Put draw args to display list item
 - memcpy item to message
 - send message
 - receive message
 - memcpy item from message
 - extract args from display list item
 - call with args

Encoding of IPC messages filled with draw args:
 - Put draw args to message
 - send message
 - receive message
 - extract args from display list item
 - call with args


All other things being equal, this does not make sense. The only way it would make sense is we already had the display list items.

Think of it the other way:
Putting FloatRect into display list item is *superior* to putting it to plain IPC message directly.
Why would we use inferior method for IPC messages?
Where is the magic that encodes FloatRects faster than IPC encoder?
What is the fundamental reason that magic is not the default mode of the IPC encoder?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798419</commentid>
    <comment_count>8</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-09-29 10:07:14 -0700</bug_when>
    <thetext>Err, it should have been:

Encoding of IPC messages filled with draw args:
 - Put draw args to message
 - send message
 - receive message
 - extract args from message
 - call with args</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798427</commentid>
    <comment_count>9</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-09-29 10:23:22 -0700</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #7)
&gt; (In reply to Wenson Hsieh from comment #6)
&gt; 
&gt; &gt; I would also add that we know for a fact that very fast, low-overhead
&gt; &gt; encoding/decoding of display list items and their arguments is necessary in
&gt; &gt; order to hit our performance goals, particularly on the Canvas subtests.
&gt; &gt; 
&gt; &gt; In theory, we could use normal IPC encoding/decoding and validation instead,
&gt; &gt; but this would require us to make equivalent progressions elsewhere to
&gt; &gt; mitigate the performance hit.
&gt; 
&gt; This statement is just not logical.
&gt; Encoding of IPC messages filled with display list items:
&gt;  - Put draw args to display list item
&gt;  - memcpy item to message
&gt;  - send message
&gt;  - receive message
&gt;  - memcpy item from message
&gt;  - extract args from display list item
&gt;  - call with args
&gt; 
&gt; Encoding of IPC messages filled with draw args:
&gt;  - Put draw args to message
&gt;  - send message
&gt;  - receive message
&gt;  - extract args from display list item
&gt;  - call with args

This is not what I&apos;m comparing against. &quot;normal IPC encoding/decoding&quot; was referring to the established IPC argument encoding technique of allocating a new chunk of memory and encoding the arguments (one fixed-length piece of data at a time), resizing the buffer and copying out the contents of buffer as needed.

I would hope that this:

&gt; Encoding of IPC messages filled with display list items:

..and this:

&gt; Encoding of IPC messages filled with draw args:

..would yield about the same performance in IPC streams, though the latter will make multiple calls to `memcpy` whereas the former would just make a single call.

&gt; 
&gt; 
&gt; All other things being equal, this does not make sense. The only way it
&gt; would make sense is we already had the display list items.
&gt; 
&gt; Think of it the other way:
&gt; Putting FloatRect into display list item is *superior* to putting it to
&gt; plain IPC message directly.
&gt; Why would we use inferior method for IPC messages?
&gt; Where is the magic that encodes FloatRects faster than IPC encoder?

I&apos;m not sure I totally understand what you mean, but FloatRect encoding is optimized to use SimpleArgumentCoder, which performs a single `memcpy`.

&gt; What is the fundamental reason that magic is not the default mode of the IPC
&gt; encoder?

(..following from above, SimpleArgumentCoder is not the default mode if the IPC encoder because we can&apos;t assume objects consist only of memcpy-able data with no pointers by default).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798432</commentid>
    <comment_count>10</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-09-29 10:30:08 -0700</bug_when>
    <thetext>Yeah, you&apos;re probably right that the dl items will be in practice faster due to the nature of how the IPC encoders iterate field by field.
Maybe someday we could just memcpy the messages that have trivially copyable fields.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799650</commentid>
    <comment_count>11</comment_count>
      <attachid>439939</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-01 17:17:13 -0700</bug_when>
    <thetext>Created attachment 439939
WIP - supports cached images</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799931</commentid>
    <comment_count>12</comment_count>
      <attachid>440023</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-03 16:30:59 -0700</bug_when>
    <thetext>Created attachment 440023
WIP - clip to mask, get|putImageData, draw glyphs, paint media</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800130</commentid>
    <comment_count>13</comment_count>
      <attachid>440023</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-10-04 11:06:26 -0700</bug_when>
    <thetext>Comment on attachment 440023
WIP - clip to mask, get|putImageData, draw glyphs, paint media

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

Such an amazingly clean patch for a WIP.
Some small comment, did not go through all of it yet.

&gt; Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h:61
&gt; +        m_remoteRenderingBackend.streamConnection().startReceivingMessages(m_context.get(), Messages::RemoteGraphicsContext::messageReceiverName(), renderingResourceIdentifier.toUInt64());

You need the startReceivingIPC - stopReceivingIPC pattern, since you will start receiving vfunc calls immediately after this method call, and the vtable ptr is not yet set up.
(or initialize-stopReceivingIPC, cannot remember which).

&gt; Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h:67
&gt; +        m_remoteRenderingBackend.streamConnection().stopReceivingMessages(Messages::RemoteGraphicsContext::messageReceiverName(), m_renderingResourceIdentifier.toUInt64());

The object lifetime has already ended, and you might still receive messages until this method returns. So the initialize - stopReceivingIPC is needed.

&gt; Source/WebKit/Platform/IPC/Timeout.h:37
&gt; +        : m_deadline(std::isinf(timeDelta) ? MonotonicTime::infinity() : MonotonicTime::now() + timeDelta)

Great addition!

Overall, I think passing infinity generally should be a bug, so in production something else is needed for the call sites?
Either that approximate time or then maybe we could compute the deadline upon first would-block call?
E.g. explain in timeout that it&apos;s not strictly accurate timeout, rather it would start approximately during the first blocking call..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800148</commentid>
    <comment_count>14</comment_count>
      <attachid>440023</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-04 11:48:01 -0700</bug_when>
    <thetext>Comment on attachment 440023
WIP - clip to mask, get|putImageData, draw glyphs, paint media

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

&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h:61
&gt;&gt; +        m_remoteRenderingBackend.streamConnection().startReceivingMessages(m_context.get(), Messages::RemoteGraphicsContext::messageReceiverName(), renderingResourceIdentifier.toUInt64());
&gt; 
&gt; You need the startReceivingIPC - stopReceivingIPC pattern, since you will start receiving vfunc calls immediately after this method call, and the vtable ptr is not yet set up.
&gt; (or initialize-stopReceivingIPC, cannot remember which).

Good catch! Definitely going to fix this for my next WIP iteration.

&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h:67
&gt;&gt; +        m_remoteRenderingBackend.streamConnection().stopReceivingMessages(Messages::RemoteGraphicsContext::messageReceiverName(), m_renderingResourceIdentifier.toUInt64());
&gt; 
&gt; The object lifetime has already ended, and you might still receive messages until this method returns. So the initialize - stopReceivingIPC is needed.

👍🏻

&gt;&gt; Source/WebKit/Platform/IPC/Timeout.h:37
&gt;&gt; +        : m_deadline(std::isinf(timeDelta) ? MonotonicTime::infinity() : MonotonicTime::now() + timeDelta)
&gt; 
&gt; Great addition!
&gt; 
&gt; Overall, I think passing infinity generally should be a bug, so in production something else is needed for the call sites?
&gt; Either that approximate time or then maybe we could compute the deadline upon first would-block call?
&gt; E.g. explain in timeout that it&apos;s not strictly accurate timeout, rather it would start approximately during the first blocking call..

Ah, yes — using ∞ and adding the optimization here was just meant to be temporary, until I could adopt a faster, coarse-granularity alternative to `MonotonicTime::now()`.

Yusuke recently added `WTF::ApproximateTime` in r283161, so my next step was to adopt that, change the ∞ timeouts in this patch to something reasonable, and finally re-run Canvas Lines to verify that it&apos;s sufficient to address the performance regression on this subtest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800238</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-04 15:11:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/83857897&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800271</commentid>
    <comment_count>16</comment_count>
      <attachid>440023</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-04 16:09:05 -0700</bug_when>
    <thetext>Comment on attachment 440023
WIP - clip to mask, get|putImageData, draw glyphs, paint media

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

&gt;&gt;&gt; Source/WebKit/Platform/IPC/Timeout.h:37
&gt;&gt;&gt; +        : m_deadline(std::isinf(timeDelta) ? MonotonicTime::infinity() : MonotonicTime::now() + timeDelta)
&gt;&gt; 
&gt;&gt; Great addition!
&gt;&gt; 
&gt;&gt; Overall, I think passing infinity generally should be a bug, so in production something else is needed for the call sites?
&gt;&gt; Either that approximate time or then maybe we could compute the deadline upon first would-block call?
&gt;&gt; E.g. explain in timeout that it&apos;s not strictly accurate timeout, rather it would start approximately during the first blocking call..
&gt; 
&gt; Ah, yes — using ∞ and adding the optimization here was just meant to be temporary, until I could adopt a faster, coarse-granularity alternative to `MonotonicTime::now()`.
&gt; 
&gt; Yusuke recently added `WTF::ApproximateTime` in r283161, so my next step was to adopt that, change the ∞ timeouts in this patch to something reasonable, and finally re-run Canvas Lines to verify that it&apos;s sufficient to address the performance regression on this subtest.

Hm…using `ApproximateTime::now()` does partially mitigate the regression, but using ∞ and skipping the `mach_(approximate|absolute)_time` call altogether is still significantly faster.

I might stick with an indefinite wait for now, with a FIXME to refactor it to speed this up. I suspect that we might be able to cache an IPC timeout once per frame, and use that instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800332</commentid>
    <comment_count>17</comment_count>
      <attachid>440135</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-04 18:10:40 -0700</bug_when>
    <thetext>Created attachment 440135
WIP - rebase on trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801350</commentid>
    <comment_count>18</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2021-10-06 14:27:18 -0700</bug_when>
    <thetext>rdar://83438038</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802632</commentid>
    <comment_count>19</comment_count>
      <attachid>440798</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-11 08:52:26 -0700</bug_when>
    <thetext>Created attachment 440798
Final piece (still blocked on subtasks)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802902</commentid>
    <comment_count>20</comment_count>
      <attachid>440866</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-11 17:38:17 -0700</bug_when>
    <thetext>Created attachment 440866
Rebase on trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803183</commentid>
    <comment_count>21</comment_count>
      <attachid>440949</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-12 09:39:00 -0700</bug_when>
    <thetext>Created attachment 440949
Rebase again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803306</commentid>
    <comment_count>22</comment_count>
      <attachid>440949</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-10-12 12:28:51 -0700</bug_when>
    <thetext>Comment on attachment 440949
Rebase again

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

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:78
&gt; +        m_streamConnection = makeUnique&lt;IPC::StreamClientConnection&gt;(gpuProcessConnection.connection(), 1 &lt;&lt; 21);

What in the world is this 1 &lt;&lt; 21</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803312</commentid>
    <comment_count>23</comment_count>
      <attachid>440949</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-12 12:34:07 -0700</bug_when>
    <thetext>Comment on attachment 440949
Rebase again

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

&gt;&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:78
&gt;&gt; +        m_streamConnection = makeUnique&lt;IPC::StreamClientConnection&gt;(gpuProcessConnection.connection(), 1 &lt;&lt; 21);
&gt; 
&gt; What in the world is this 1 &lt;&lt; 21

…good point! I&apos;ll pull this out into a `constexpr` variable.

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:204
&gt; +    sendSyncToStream(Messages::RemoteRenderingBackend::GetDataURLForImageBuffer(mimeType, quality, preserveResolution, renderingResourceIdentifier), Messages::RemoteRenderingBackend::GetDataURLForImageBuffer::Reply(urlString), 3_s);

Also going to change these timeouts back to 1_s from 3_s, as we discussed. I think I changed these when debugging `get/putImageData` and forgot to change them back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803483</commentid>
    <comment_count>24</comment_count>
      <attachid>441004</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-12 15:37:46 -0700</bug_when>
    <thetext>Created attachment 441004
Rebase again + fix test failures</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803646</commentid>
    <comment_count>25</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-12 22:50:43 -0700</bug_when>
    <thetext>Committed r284079 (242907@main): &lt;https://commits.webkit.org/242907@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 441004.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439399</attachid>
            <date>2021-09-27 15:15:01 -0700</date>
            <delta_ts>2021-10-01 17:17:11 -0700</delta_ts>
            <desc>Extremely hacky WIP - no resource caching</desc>
            <filename>bug-230860-20210927151500.patch</filename>
            <type>text/plain</type>
            <size>197753</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMDQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDJmZDdkOTQ0YTczN2IxODFl
YTA5NGE1ZDQxNmNjYWM5ZWRkYmRkNTMuLmUzMjQxOGU5NjczODExYjhjZDE1YmYwZDYwYjU2YmVm
YjhhNmZkMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAKKzIwMjEtMDktMjUgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYktpdDJdIFJlZmFj
dG9yIHNvbWUgSVBDIGFyZ3VtZW50IGVuY29kZXIgbG9naWMgdG8gd29yayB3aXRoIFN0cmVhbUNv
bm5lY3Rpb25FbmNvZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzA3MTQKKyAgICAgICAgcmRhcjovLzgzNDc3NTkxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBpdCBwb3NzaWJsZSB0byB1c2Ug
YElQQzo6U3RyZWFtQ29ubmVjdGlvbkVuY29kZXJgIHRvIGVuY29kZSBkaXNwbGF5IGxpc3QgaXRl
bXMgKGFuZCB0aGVpciBtZW1iZXJzKSBpbiBhbgorICAgICAgICBJUEMgc3RyZWFtLiBUaGlzIHBh
dGNoIGNvbXByaXNlcyB0d28gbWFpbiBzZXRzIG9mIGNoYW5nZXMgaW4gYEFyZ3VtZW50Q29kZXJz
YCwgYW5kIGBXZWJDb3JlQXJndW1lbnRDb2RlcnNgLiBTZWUKKyAgICAgICAgYmVsb3cgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5jcHA6
CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8YXVkaXRfdG9rZW5fdD46OmRlY29kZSk6Cisg
ICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8TW9ub3N0YXRlPjo6ZW5jb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxNb25vc3RhdGU+OjpkZWNvZGUpOiBEZWxldGVk
LgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oOgorICAgICAgICAoSVBD
OjpBcmd1bWVudENvZGVyPE1vbm9zdGF0ZT46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3Vt
ZW50Q29kZXI8TW9ub3N0YXRlPjo6ZGVjb2RlKToKKworICAgICAgICBNYW55IG9mIHRoZXNlIGBl
bmNvZGUoKWAgbWV0aG9kcyBhcmUgY3VycmVudGx5IG5vbi10ZW1wbGF0ZWQsIHdoaWNoIG1lYW5z
IHRoYXQgRW5jb2RlciBhbmQgRGVjb2RlciB1c2VkIGhlcmUKKyAgICAgICAgcmVmZXIgc29sZWx5
IHRvIElQQzo6RW5jb2RlciBhbmQgSVBDOjpEZWNvZGVyIChyZXNwZWN0aXZlbHkpIGluc3RlYWQg
b2Ygb3RoZXIgdHlwZXMgb2YgZW5jb2RlcnMgKG5hbWVseSwKKyAgICAgICAgU3RyZWFtQ29ubmVj
dGlvbkVuY29kZXIpLgorCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHA6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8QWZmaW5lVHJhbnNmb3JtPjo6ZW5jb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxBZmZpbmVUcmFuc2Zvcm0+
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPEZsb2F0UG9p
bnQ+OjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPEZsb2F0
UG9pbnQ+OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPEZs
b2F0UG9pbnQzRD46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29k
ZXI8RmxvYXRQb2ludDNEPjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1l
bnRDb2RlcjxGbG9hdFJlY3Q+OjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1
bWVudENvZGVyPEZsb2F0UmVjdD46OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFy
Z3VtZW50Q29kZXI8RmxvYXRCb3hFeHRlbnQ+OjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
SVBDOjpBcmd1bWVudENvZGVyPEZsb2F0Qm94RXh0ZW50Pjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxGbG9hdFNpemU+OjplbmNvZGUpOiBEZWxldGVkLgor
ICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPEZsb2F0U2l6ZT46OmRlY29kZSk6IERlbGV0ZWQu
CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8RmxvYXRSb3VuZGVkUmVjdD46OmVuY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8RmxvYXRSb3VuZGVkUmVjdD46
OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8SW50UG9pbnQ+
OjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPEludFBvaW50
Pjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxJbnRTaXpl
Pjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxJbnRTaXpl
Pjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxMYXlvdXRT
aXplPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxMYXlv
dXRTaXplPjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxM
YXlvdXRQb2ludD46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29k
ZXI8TGF5b3V0UG9pbnQ+OjpkZWNvZGUpOiBEZWxldGVkLgorCisgICAgICAgIFRoZXNlIFdlYkNv
cmUgYXJndW1lbnQgY29kZXJzIGFyZSBhbHNvIGN1cnJlbnRseSBpbmNvbXBhdGlibGUgd2l0aCBT
dHJlYW1Db25uZWN0aW9uRW5jb2Rlciwgc2luY2UgdGhleSBhcmUgbm9uLQorICAgICAgICB0ZW1w
bGF0ZWQgKGFuZCB0aHVzIG9ubHkgd29yayB3aXRoIElQQzo6RW5jb2RlcikuIFNpbmNlIHRoZXNl
IGFyZSBhbGwgZW5jb2RhYmxlIGFzIFBPRCB0eXBlcywgd2UgY2FuIGp1c3QgdXNlCisgICAgICAg
IFNpbXBsZUFyZ3VtZW50Q29kZXIgZm9yIGFsbCBvZiB0aGVzZS4gV2UgYWxzbyBhZGQgYSBuZXcg
YERFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVJgIG1hY3JvIHRvIG1ha2UgdGhpcyBjb2RlIGEK
KyAgICAgICAgYml0IGVhc2llciB0byByZWFkLgorCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzTWFjLm1tOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPENHUmVjdD46OmVuY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q0dSZWN0Pjo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDR1NpemU+OjplbmNvZGUpOiBE
ZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPENHU2l6ZT46OmRlY29kZSk6IERl
bGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q0dQb2ludD46OmVuY29kZSk6IERl
bGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q0dQb2ludD46OmRlY29kZSk6IERl
bGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q0dBZmZpbmVUcmFuc2Zvcm0+Ojpl
bmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPENHQWZmaW5lVHJh
bnNmb3JtPjo6ZGVjb2RlKTogRGVsZXRlZC4KKwogMjAyMS0wOS0yNCAgRGV2aW4gUm91c3NvICA8
ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHR5cGVjaGVja2luZyBgaXNgIG92ZXJs
b2FkcyBmb3IgYHN0ZDo6dW5pcXVlX3B0cmAsIGBXVEY6OlVuaXF1ZVJlZmAsIGFuZCBgV1RGOjpX
ZWFrUHRyYApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgKaW5kZXggYjFlOGQzYjA0YWIyNjA1MTMyODg2YTBhODAzMDUwOGExMzE2MTI4MC4uYzgyNDc5
NGNhODQ4MGFkYWQ0M2QxZWFkYzJiNWM5OTM3NTMxYTQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC04Myw3ICs4Myw2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmx1c2goRGlzcGxheUxpc3Q6OkZsdXNoSWRlbnRpZmll
cikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcihS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
VG9BcHBlbmREaXNwbGF5TGlzdEl0ZW1zKERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlJiYp
IHsgfQogCiAgICAgdmlydHVhbCBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdC5jcHAKaW5kZXggZmFkNmE2OTUwMDdhOTY2NDVjMjcxMWQ4ZjA5MTBlYTg1NjQzZjUy
OC4uYWQ1MGI3OWZhOWJkMGQ4NDc3NTFhNzc3NTVmY2E1OGJlYjMyYzZlNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3QuY3BwCkBAIC0xODAsMTEgKzE4MCw2IEBAIHZvaWQgRGlzcGxheUxpc3Q6OnNl
dEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50KEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50KiBjbGllbnQp
CiAgICAgaXRlbUJ1ZmZlcigpLnNldENsaWVudChjbGllbnQpOwogfQogCi12b2lkIERpc3BsYXlM
aXN0OjpwcmVwYXJlVG9BcHBlbmQoSXRlbUJ1ZmZlckhhbmRsZSYmIGhhbmRsZSkKLXsKLSAgICBp
dGVtQnVmZmVyKCkucHJlcGFyZVRvQXBwZW5kKFdURk1vdmUoaGFuZGxlKSk7Ci19Ci0KIHZvaWQg
RGlzcGxheUxpc3Q6OmZvckVhY2hJdGVtQnVmZmVyKEZ1bmN0aW9uPHZvaWQoY29uc3QgSXRlbUJ1
ZmZlckhhbmRsZSYpPiYmIG1hcEZ1bmN0aW9uKSBjb25zdAogewogICAgIGlmIChtX2l0ZW1zKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3QuaAppbmRleCAyMjY4NGRjMzk4ZTFlZjUyYzFiZDk2NmZmNDUwMzcy
MzdkY2YyYWVmLi40NmM2ODdmOTA0NzE2MGM0Njg1OTM2YWRkNWRmZTc3NTk1YjNhYTZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3QuaApAQCAtNzksNyArNzksNiBAQCBwdWJsaWM6CiAKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50KEl0ZW1CdWZmZXJSZWFk
aW5nQ2xpZW50Kik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJdGVtQnVmZmVyV3JpdGlu
Z0NsaWVudChJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcHJlcGFyZVRvQXBwZW5kKEl0ZW1CdWZmZXJIYW5kbGUmJik7CiAKICAgICB2b2lkIHNocmlu
a1RvRml0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oCmluZGV4IDk2NTYzNjM0ZDU3ZjQwOTRiM2MyY2JhNmYwNjc0MGY1MDYzZGQ0YmYuLjdkZjU5
YzhiZGEzY2NjMDAwNjI0ZWY1YWYyYTA5OWI4ZGQwNDYyMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdD
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtNDksNiArNDksOSBAQCBwdWJsaWM6
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29s
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29u
dGV4dCYpOwogCisgICAgdm9pZCBzZXRJc0VtcHR5KCkgeyBtX2NvbnRleHQuc2V0SXNFbXB0eSgp
OyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmlzRW1wdHko
KTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgUmVjb3JkZXIgbV9jb250ZXh0OwogICAgIERpc3BsYXlM
aXN0IG1fZGlzcGxheUxpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIuaAppbmRleCA4MWI5MjQ3NGUyNGVjZDIzNmYyMjA3NzRlZDFjYmNmODQ2OWYzMjc4Li5iMmNl
ZWVkYTRiNDgzZDM3NTAyMmIyMWRjZThkNDc2Mjc5Y2ZmMTU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKQEAgLTgzLDEzICs4MywxMyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAg
aWYgKCFtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuaXNFbXB0eSgpKQorICAgICAgICBp
ZiAoIW1fZHJhd2luZ0NvbnRleHQuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9kcmF3aW5nQ29u
dGV4dC5yZXBsYXlEaXNwbGF5TGlzdChCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Y29udGV4dCgp
KTsKICAgICB9CiAKICAgICB2b2lkIGNsZWFyQmFja2VuZCgpIG92ZXJyaWRlCiAgICAgewotICAg
ICAgICBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuY2xlYXIoKTsKKyAgICAgICAgbV9k
cmF3aW5nQ29udGV4dC5zZXRJc0VtcHR5KCk7CiAgICAgICAgIEJhc2VDb25jcmV0ZUltYWdlQnVm
ZmVyOjpjbGVhckJhY2tlbmQoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbUJ1ZmZlci5jcHAKaW5kZXggMTM1NGJkYmVkZDYxMTZjMjA5ZmI1NGE2M2UxOTQyMjUz
Y2IzYTU4YS4uMjc1ZGNmN2Q4NDdiYzI1MTAyZTE0ZjY3ZDdmNGZjN2VmYjRjYjRjOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKQEAgLTc4NiwxMSArNzg2
LDUgQEAgdm9pZCBJdGVtQnVmZmVyOjpkaWRBcHBlbmREYXRhKHNpemVfdCBudW1iZXJPZkJ5dGVz
LCBEaWRDaGFuZ2VJdGVtQnVmZmVyIGRpZENoYW4KICAgICAgICAgbV93cml0aW5nQ2xpZW50LT5k
aWRBcHBlbmREYXRhKG1fd3JpdGFibGVCdWZmZXIsIG51bWJlck9mQnl0ZXMsIGRpZENoYW5nZUl0
ZW1CdWZmZXIpOwogfQogCi12b2lkIEl0ZW1CdWZmZXI6OnByZXBhcmVUb0FwcGVuZChJdGVtQnVm
ZmVySGFuZGxlJiYgaGFuZGxlKQotewotICAgIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgPSAwOwot
ICAgIG1fcmVhZE9ubHlCdWZmZXJzLmFwcGVuZChzdGQ6OmV4Y2hhbmdlKG1fd3JpdGFibGVCdWZm
ZXIsIFdURk1vdmUoaGFuZGxlKSkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1
ZmZlci5oCmluZGV4IGM4NzMxOTgyZWY4MzkzMWJiYWUzMWI3ODY1MGFjMGRhMjBhMDVmYzUuLjIx
MzNlM2JkNjRjZDUwY2YwMDlmMjlkMDI4NWVjMDAxMTcxM2E3MmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1C
dWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgKQEAgLTE5MCw3ICsxOTAsNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHNldENsaWVudChJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCogY2xpZW50KSB7IG1f
d3JpdGluZ0NsaWVudCA9IGNsaWVudDsgfQogICAgIHZvaWQgc2V0Q2xpZW50KEl0ZW1CdWZmZXJS
ZWFkaW5nQ2xpZW50KiBjbGllbnQpIHsgbV9yZWFkaW5nQ2xpZW50ID0gY2xpZW50OyB9Ci0gICAg
dm9pZCBwcmVwYXJlVG9BcHBlbmQoSXRlbUJ1ZmZlckhhbmRsZSYmKTsKIAogcHJpdmF0ZToKICAg
ICBjb25zdCBJdGVtQnVmZmVySGFuZGxlcyYgcmVhZE9ubHlCdWZmZXJzKCkgY29uc3QgeyByZXR1
cm4gbV9yZWFkT25seUJ1ZmZlcnM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCmlu
ZGV4IGE0M2QxM2Y2Y2JjM2QyMGNiMmNkODFkMGE0YWEzM2I1YjI2NGI5ZGQuLmRhNmE0Yjg3NWY1
NTMyZDUzZDY3Njg2ZDA2MjNiNDIxNTZjN2MwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuaApAQCAtNDQsNiArNDQsOCBAQAogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KICNp
bmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCisjaW5jbHVkZSA8ZGJnX2dyYXBoaWNzLmg+CisKIG5h
bWVzcGFjZSBXVEYgewogY2xhc3MgVGV4dFN0cmVhbTsKIH0KQEAgLTcyLDcgKzc0LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLSAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiB9OwogCiBjbGFzcyBSZXN0b3JlIHsKQEAg
LTgxLDcgKzgzLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0g
ZmFsc2U7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiB9OwogCiBj
bGFzcyBUcmFuc2xhdGUgewpAQCAtOTAsNiArOTIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAorICAgIFRyYW5zbGF0ZSgpID0gZGVmYXVsdDsK
ICAgICBUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKICAgICAgICAgOiBtX3goeCkKICAgICAg
ICAgLCBtX3koeSkKQEAgLTk5LDcgKzEwMiw3IEBAIHB1YmxpYzoKICAgICBmbG9hdCB4KCkgY29u
c3QgeyByZXR1cm4gbV94OyB9CiAgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQog
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAg
IGZsb2F0IG1feCB7IDAgfTsKQEAgLTExMiw2ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAorICAgIFJvdGF0ZSgpID0gZGVmYXVsdDsK
ICAgICBSb3RhdGUoZmxvYXQgYW5nbGUpCiAgICAgICAgIDogbV9hbmdsZShhbmdsZSkKICAgICB7
CkBAIC0xMTksNyArMTIzLDcgQEAgcHVibGljOgogCiAgICAgZmxvYXQgYW5nbGUoKSBjb25zdCB7
IHJldHVybiBtX2FuZ2xlOyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKIHByaXZhdGU6CiAgICAgZmxvYXQgbV9hbmdsZSB7IDAgfTsgLy8gSW4gcmFkaWFucy4K
QEAgLTEzMSw2ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSBmYWxzZTsKIAorICAgIFNjYWxlKCkgPSBkZWZhdWx0OwogICAgIFNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkKICAgICAgICAgOiBtX3NpemUoc2l6ZSkKICAgICB7CkBAIC0xMzgsNyAr
MTQzLDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRmxvYXRTaXplJiBhbW91bnQoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAogcHJpdmF0ZToKICAgICBGbG9hdFNpemUgbV9zaXplOwpAQCAtMTUwLDYgKzE1NSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsK
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCisgICAg
U2V0Q1RNKCkgPSBkZWZhdWx0OwogICAgIFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKICAgICAgICAgOiBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCiAgICAgewpAQCAtMTU3
LDcgKzE2Myw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KIAotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV90
cmFuc2Zvcm07CkBAIC0xNjksNiArMTc1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKKyAgICBDb25jYXRlbmF0ZUNUTSgpID0gZGVmYXVsdDsK
ICAgICBDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAg
ICAgICAgOiBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCiAgICAgewpAQCAtMTc2LDcgKzE4Myw3IEBA
IHB1YmxpYzoKIAogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV90cmFuc2Zvcm07IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07CkBA
IC0xODksNiArMTk2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG1heENvbG9y
U3RvcENvdW50ID0gNDsKIAorICAgIFNldElubGluZUZpbGxHcmFkaWVudCgpID0gZGVmYXVsdDsK
ICAgICBTZXRJbmxpbmVGaWxsR3JhZGllbnQoY29uc3QgR3JhZGllbnQmLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwogICAgIFdFQkNPUkVfRVhQT1JUIFNl
dElubGluZUZpbGxHcmFkaWVudChmbG9hdCBvZmZzZXRzW21heENvbG9yU3RvcENvdW50XSwgU1JH
QkE8dWludDhfdD4gY29sb3JzW21heENvbG9yU3RvcENvdW50XSwgY29uc3QgR3JhZGllbnQ6OkRh
dGEmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0sIEdyYWRp
ZW50U3ByZWFkTWV0aG9kLCB1aW50OF90IGNvbG9yU3RvcENvdW50KTsKICAgICBTZXRJbmxpbmVG
aWxsR3JhZGllbnQoY29uc3QgU2V0SW5saW5lRmlsbEdyYWRpZW50Jik7CkBAIC0xOTcsNyArMjA1
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzSW5saW5lKGNvbnN0IEdyYWRpZW50Jik7
CiAgICAgUmVmPEdyYWRpZW50PiBncmFkaWVudCgpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGZsb2F0IG1fb2Zmc2V0c1tt
YXhDb2xvclN0b3BDb3VudF07CkBAIC0yMTUsMTMgKzIyMywxNCBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAorICAgIFNldElubGluZUZpbGxDb2xv
cigpID0gZGVmYXVsdDsKICAgICBTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8dWludDhfdD4gY29s
b3JEYXRhKQogICAgICAgICA6IG1fY29sb3JEYXRhKGNvbG9yRGF0YSkKICAgICB7CiAgICAgfQog
CiAgICAgQ29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiB7IG1fY29sb3JEYXRhIH07IH0KLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU1JH
QkE8dWludDhfdD4gbV9jb2xvckRhdGE7CkBAIC0yMzMsNiArMjQyLDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKKyAgICBTZXRJbmxpbmVTdHJv
a2VDb2xvcigpID0gZGVmYXVsdDsKICAgICBTZXRJbmxpbmVTdHJva2VDb2xvcihTUkdCQTx1aW50
OF90PiBjb2xvckRhdGEpCiAgICAgICAgIDogbV9jb2xvckRhdGEoY29sb3JEYXRhKQogICAgIHsK
QEAgLTI0MCw3ICsyNTAsNyBAQCBwdWJsaWM6CiAKICAgICBDb2xvciBjb2xvcigpIGNvbnN0IHsg
cmV0dXJuIHsgbV9jb2xvckRhdGEgfTsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFNSR0JBPHVpbnQ4X3Q+IG1fY29sb3JEYXRhOwpA
QCAtMjUyLDYgKzI2Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IGZhbHNlOwogCisgICAgU2V0U3Ryb2tlVGhpY2tuZXNzKCkgPSBkZWZhdWx0OwogICAgIFNl
dFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiAgICAgICAgIDogbV90aGlja25lc3Mo
dGhpY2tuZXNzKQogICAgIHsKQEAgLTI1OSw3ICsyNzAsNyBAQCBwdWJsaWM6CiAKICAgICBmbG9h
dCB0aGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3RoaWNrbmVzczsgfQogCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGZsb2F0IG1fdGhp
Y2tuZXNzIHsgMCB9OwpAQCAtMjgyLDcgKzI5Myw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8U2V0U3RhdGU+IGRlY29kZShEZWNv
ZGVyJik7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYsIE5hdGl2ZUltYWdlKiBz
dHJva2VQYXR0ZXJuSW1hZ2UsIE5hdGl2ZUltYWdlKiBmaWxsUGF0dGVybkltYWdlKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYsIE5hdGl2ZUltYWdlKiBz
dHJva2VQYXR0ZXJuSW1hZ2UsIE5hdGl2ZUltYWdlKiBmaWxsUGF0dGVybkltYWdlKTsKIAogcHJp
dmF0ZToKICAgICBzdHJ1Y3QgUGF0dGVybkRhdGEgewpAQCAtNTk5LDYgKzYxMCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCisgICAgU2V0TGlu
ZUNhcCgpID0gZGVmYXVsdDsKICAgICBTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKICAgICAg
ICAgOiBtX2xpbmVDYXAobGluZUNhcCkKICAgICB7CkBAIC02MDYsMTAgKzYxOCwxMCBAQCBwdWJs
aWM6CiAKICAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDYXA7IH0K
IAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKLSAg
ICBMaW5lQ2FwIG1fbGluZUNhcDsKKyAgICBMaW5lQ2FwIG1fbGluZUNhcCB7IExpbmVDYXA6OkJ1
dHQgfTsKIH07CiAKIGNsYXNzIFNldExpbmVEYXNoIHsKQEAgLTYyNyw3ICs2MzksNyBAQCBwdWJs
aWM6CiAgICAgY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2Rh
c2hBcnJheTsgfQogICAgIGZsb2F0IGRhc2hPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Rhc2hP
ZmZzZXQ7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTZXRMaW5lRGFz
aD4gZGVjb2RlKERlY29kZXImKTsKQEAgLTY2Niw2ICs2NzgsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAorICAgIFNldExpbmVKb2luKCkgPSBk
ZWZhdWx0OwogICAgIFNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQogICAgICAgICA6IG1f
bGluZUpvaW4obGluZUpvaW4pCiAgICAgewpAQCAtNjczLDEwICs2ODYsMTAgQEAgcHVibGljOgog
CiAgICAgTGluZUpvaW4gbGluZUpvaW4oKSBjb25zdCB7IHJldHVybiBtX2xpbmVKb2luOyB9CiAK
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAg
TGluZUpvaW4gbV9saW5lSm9pbjsKKyAgICBMaW5lSm9pbiBtX2xpbmVKb2luIHsgTGluZUpvaW46
Ok1pdGVyIH07CiB9OwogCiBjbGFzcyBTZXRNaXRlckxpbWl0IHsKQEAgLTY4NSw2ICs2OTgsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAorICAg
IFNldE1pdGVyTGltaXQoKSA9IGRlZmF1bHQ7CiAgICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRl
ckxpbWl0KQogICAgICAgICA6IG1fbWl0ZXJMaW1pdChtaXRlckxpbWl0KQogICAgIHsKQEAgLTY5
MiwxMCArNzA2LDEwIEBAIHB1YmxpYzoKIAogICAgIGZsb2F0IG1pdGVyTGltaXQoKSBjb25zdCB7
IHJldHVybiBtX21pdGVyTGltaXQ7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBmbG9hdCBtX21pdGVyTGltaXQ7CisgICAgZmxvYXQg
bV9taXRlckxpbWl0IHsgMCB9OwogfTsKIAogY2xhc3MgQ2xlYXJTaGFkb3cgewpAQCAtNzA0LDcg
KzcxOCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNl
OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBDbGVhclNo
YWRvdygpID0gZGVmYXVsdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwogfTsKIAogLy8gRklYTUU6IHRyZWF0IGFzIGRyYXdpbmcgaXRlbT8K
QEAgLTcxNCw2ICs3MjksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSBmYWxzZTsKIAorICAgIENsaXAoKSA9IGRlZmF1bHQ7CiAgICAgQ2xpcChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiAgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewpAQCAtNzIxLDcgKzcz
Nyw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owog
CiBwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CkBAIC03MzMsNiArNzQ5LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKKyAgICBDbGlw
T3V0KCkgPSBkZWZhdWx0OwogICAgIENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAg
ICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsKQEAgLTc0MCw3ICs3NTcsNyBAQCBwdWJsaWM6CiAK
ICAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBG
bG9hdFJlY3QgbV9yZWN0OwpAQCAtNzUyLDYgKzc2OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCisgICAgQ2xpcFRvSW1hZ2VCdWZmZXIoKSA9
IGRlZmF1bHQ7CiAgICAgQ2xpcFRvSW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIGltYWdlQnVmZmVySWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJl
Y3QpCiAgICAgICAgIDogbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIoaW1hZ2VCdWZmZXJJZGVudGlm
aWVyKQogICAgICAgICAsIG1fZGVzdGluYXRpb25SZWN0KGRlc3RpbmF0aW9uUmVjdCkKQEAgLTc2
Miw5ICs3ODAsOSBAQCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29u
c3QgeyByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIuaXNWYWxpZCgpOyB9CiAKLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkltYWdlQnVmZmVyJikgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmLCBXZWJDb3Jl
OjpJbWFnZUJ1ZmZlciYpIGNvbnN0OwogCi0gICAgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBOT19SRVRVUk5fRFVFX1RPX0FT
U0VSVCBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owog
CiBwcml2YXRlOgogICAgIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBtX2ltYWdlQnVmZmVy
SWRlbnRpZmllcjsKQEAgLTc5Miw3ICs4MTAsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENsaXBPdXRUb1BhdGg+IGRlY29kZShE
ZWNvZGVyJik7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKIHBy
aXZhdGU6CiAgICAgUGF0aCBtX3BhdGg7CkBAIC04MzYsNyArODU0LDcgQEAgcHVibGljOgogICAg
IGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KICAgICBXaW5kUnVs
ZSB3aW5kUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZFJ1bGU7IH0KIAotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgc3RkOjpvcHRpb25hbDxDbGlwUGF0aD4gZGVjb2RlKERlY29kZXImKTsKQEAgLTky
Niw2ICs5NDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBm
YWxzZTsKIAorICAgIEVuZENsaXBUb0RyYXdpbmdDb21tYW5kcygpID0gZGVmYXVsdDsKICAgICBF
bmRDbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKICAg
ICAgICAgOiBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQogICAgIHsKQEAgLTk1NCw3ICs5NzMs
NyBAQCBwdWJsaWM6CiAgICAgRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25z
dCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpOwogICAgIFdFQkNP
UkVfRVhQT1JUIERyYXdHbHlwaHMoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBWZWN0b3I8
R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYmLCBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+
JiYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250
U21vb3RoaW5nTW9kZSk7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEZvbnQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZvbnQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KQEAgLTEwMjYsNiArMTA0NSw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKKyAgICBEcmF3SW1hZ2VC
dWZmZXIoKSA9IGRlZmF1bHQ7CiAgICAgRHJhd0ltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCiAgICAgICAgIDogbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIoaW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyKQogICAgICAgICAsIG1fZGVzdGluYXRpb25SZWN0KGRlc3RSZWN0KQpAQCAtMTA0
MSw5ICsxMDYxLDkgQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIHZh
bGlkYXRlIEltYWdlUGFpbnRpbmdPcHRpb25zLgogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLmlzVmFsaWQoKTsgfQogCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6SW1h
Z2VCdWZmZXImKSBjb25zdDsKIAotICAgIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAg
IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBz
dGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJlY3Q7
IH0KQEAgLTEwNjEsNiArMTA4MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CiAKKyAgICBEcmF3TmF0aXZlSW1hZ2UoKSA9IGRlZmF1bHQ7CiAgICAg
RHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZp
ZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQogICAgICAgICA6IG1faW1hZ2VJZGVudGlmaWVyKGltYWdlSWRlbnRpZmllcikKICAg
ICAgICAgLCBtX2ltYWdlU2l6ZShpbWFnZVNpemUpCkBAIC0xMDc2LDggKzEwOTcsOCBAQCBwdWJs
aWM6CiAgICAgLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdG8gdmFsaWRhdGUgSW1hZ2VQYWludGlu
Z09wdGlvbnMuCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUlkZW50
aWZpZXIuaXNWYWxpZCgpOyB9CiAKLSAgICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JiwgTmF0aXZlSW1hZ2UmKSBjb25zdDsKKyAgICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCBX
RUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JiwgTmF0aXZlSW1hZ2UmKSBj
b25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9kZXN0
aW5hdGlvblJlY3Q7IH0KQEAgLTEwOTYsNiArMTExNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKKyAgICBEcmF3UGF0dGVybigpID0gZGVmYXVs
dDsKICAgICBXRUJDT1JFX0VYUE9SVCBEcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCiAgICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGltYWdlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VJZGVudGlmaWVy
OyB9CkBAIC0xMTA4LDggKzExMzAsOCBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFdlIG1pZ2h0
IHdhbnQgdG8gdmFsaWRhdGUgSW1hZ2VQYWludGluZ09wdGlvbnMuCiAgICAgYm9vbCBpc1ZhbGlk
KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUlkZW50aWZpZXIuaXNWYWxpZCgpOyB9CiAKLSAgICBO
T19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JiwgTmF0aXZlSW1hZ2UmKSBjb25zdDsK
KyAgICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiwgTmF0aXZlSW1hZ2UmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0K
ICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQpAQCAtMTEzMSw2ICsxMTUz
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsgLy8g
SXMgZHJhd2luZyBpdGVtIGJlY2F1c2UgdGhlIHNpemUgb2YgdGhlIHRyYW5zcGFyZW5jeSBsYXll
ciBpcyBpbXBsaWNpdGx5IHRoZSBjbGlwIGJvdW5kcy4KIAorICAgIEJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoKSA9IGRlZmF1bHQ7CiAgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KQogICAgICAgICA6IG1fb3BhY2l0eShvcGFjaXR5KQogICAgIHsKQEAgLTExMzgsMTMgKzEx
NjEsMTMgQEAgcHVibGljOgogCiAgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
b3BhY2l0eTsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAg
ICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0K
IAogcHJpdmF0ZToKLSAgICBmbG9hdCBtX29wYWNpdHk7CisgICAgZmxvYXQgbV9vcGFjaXR5IHsg
MCB9OwogfTsKIAogY2xhc3MgRW5kVHJhbnNwYXJlbmN5TGF5ZXIgewpAQCAtMTE1Myw3ICsxMTc2
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7
IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xv
YmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CkBAIC0xMTY1LDYgKzEx
ODgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwog
CisgICAgRHJhd1JlY3QoKSA9IGRlZmF1bHQ7CiAgICAgRHJhd1JlY3QoRmxvYXRSZWN0IHJlY3Qs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcykKICAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICAgICAg
LCBtX2JvcmRlclRoaWNrbmVzcyhib3JkZXJUaGlja25lc3MpCkBAIC0xMTc0LDcgKzExOTgsNyBA
QCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
ICAgICBmbG9hdCBib3JkZXJUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlclRoaWNr
bmVzczsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAg
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KQEAgLTExOTAs
NiArMTIxNCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRy
dWU7CiAKKyAgICBEcmF3TGluZSgpID0gZGVmYXVsdDsKICAgICBEcmF3TGluZShGbG9hdFBvaW50
IHBvaW50MSwgRmxvYXRQb2ludCBwb2ludDIpCiAgICAgICAgIDogbV9wb2ludDEocG9pbnQxKQog
ICAgICAgICAsIG1fcG9pbnQyKHBvaW50MikKQEAgLTExOTksNyArMTIyNCw3IEBAIHB1YmxpYzoK
ICAgICBGbG9hdFBvaW50IHBvaW50MSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQxOyB9CiAgICAg
RmxvYXRQb2ludCBwb2ludDIoKSBjb25zdCB7IHJldHVybiBtX3BvaW50MjsgfQogCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAg
IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKQEAgLTEyMjYsNyArMTI1MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzUHJp
bnRpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByaW50aW5nOyB9CiAgICAgYm9vbCBkb3VibGVMaW5l
cygpIGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlTGluZXM7IH0KIAotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9i
YWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CkBAIC0xMjk4LDYgKzEzMjMsNyBAQCBwdWJsaWM6CiAKICAgICB1c2luZyBVbmRlcmx5aW5nRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGVUeXBlID0gc3RkOjp1bmRlcmx5aW5nX3R5cGU8RG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGU6Ok1vZGU+Ojp0eXBlOwogCisgICAgRHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcigpID0gZGVmYXVsdDsKICAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQogICAg
ICAgICA6IG1fcmVjdChyZWN0KQogICAgICAgICAsIG1fc3R5bGVNb2RlKHN0YXRpY19jYXN0PFVu
ZGVybHlpbmdEb2N1bWVudE1hcmtlckxpbmVTdHlsZVR5cGU+KHN0eWxlLm1vZGUpKQpAQCAtMTMx
Niw3ICsxMzQyLDcgQEAgcHVibGljOgogCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
IAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CkBAIC0xMzMzLDYgKzEzNTksNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCisgICAg
RHJhd0VsbGlwc2UoKSA9IGRlZmF1bHQ7CiAgICAgRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQogICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsKQEAgLTEzNDAsNyArMTM2Nyw3
IEBAIHB1YmxpYzoKIAogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0
OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpu
dWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQpAQCAtMTM3MCw3ICsx
Mzk3LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxEcmF3UGF0aD4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBn
bG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQpAQCAtMTQyNiw3ICsxNDUz
LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpv
cHRpb25hbDxEcmF3Rm9jdXNSaW5nUGF0aD4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRS
ZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBz
dGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CkBAIC0xNDg2LDcgKzE1MTMsNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgb2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBj
b25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwpAQCAtMTU0Miw2
ICsxNTY5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1
ZTsKIAorICAgIEZpbGxSZWN0KCkgPSBkZWZhdWx0OwogICAgIEZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKICAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICB7CkBAIC0xNTQ5LDcgKzE1
NzcsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
IAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CkBA
IC0xNTczLDcgKzE2MDEsNyBAQCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVy
biBtX2NvbG9yOyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAK
ICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQpAQCAt
MTYyMCw3ICsxNjQ4LDcgQEAgcHVibGljOgogICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGNvbnN0IEdyYWRpZW50JiBncmFkaWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fZ3JhZGllbnQuZ2V0KCk7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxC
b3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0OyB9CkBAIC0xNjc0LDcgKzE3MDIsNyBAQCBwdWJsaWM6CiAgICAgQ29tcG9z
aXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29wOyB9CiAg
ICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9CiAK
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlv
bmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0
OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQpAQCAtMTc0NCw3ICsxNzcyLDcg
QEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRp
b25hbDxGaWxsUm91bmRlZFJlY3Q+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4g
Z2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpv
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdC5yZWN0KCk7IH0KQEAgLTE4MDQsNyArMTgzMiw3IEBAIHB1Ymxp
YzoKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4g
Z2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpv
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdDsgfQpAQCAtMTg1MiwxMyArMTg4MCwxNCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCisgICAgRmlsbExpbmUoKSA9
IGRlZmF1bHQ7CiAgICAgRmlsbExpbmUoY29uc3QgTGluZURhdGEmIGxpbmVEYXRhKQogICAgICAg
ICA6IG1fbGluZURhdGEobGluZURhdGEpCiAgICAgewogICAgIH0KIAogICAgIFBhdGggcGF0aCgp
IGNvbnN0IHsgcmV0dXJuIFBhdGg6OmZyb20oe21fbGluZURhdGF9KTsgfQotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4g
Z2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpv
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IHsgcmV0dXJuIHBhdGgoKS5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KIApAQCAtMTg3MiwxMyAr
MTkwMSwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRl
bSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVl
OwogCisgICAgRmlsbEFyYygpID0gZGVmYXVsdDsKICAgICBGaWxsQXJjKGNvbnN0IEFyY0RhdGEm
IGFyY0RhdGEpCiAgICAgICAgIDogbV9hcmNEYXRhKGFyY0RhdGEpCiAgICAgewogICAgIH0KIAog
ICAgIFBhdGggcGF0aCgpIGNvbnN0IHsgcmV0dXJuIFBhdGg6OmZyb20oe21fYXJjRGF0YX0pOyB9
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7
IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gcGF0aCgpLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQog
CkBAIC0xODkyLDEzICsxOTIyLDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CiAKKyAgICBGaWxsUXVhZEN1cnZlKCkgPSBkZWZhdWx0OwogICAgIEZp
bGxRdWFkQ3VydmUoY29uc3QgUXVhZEN1cnZlRGF0YSYgcXVhZEN1cnZlRGF0YSkKICAgICAgICAg
OiBtX3F1YWRDdXJ2ZURhdGEocXVhZEN1cnZlRGF0YSkKICAgICB7CiAgICAgfQogCiAgICAgUGF0
aCBwYXRoKCkgY29uc3QgeyByZXR1cm4gUGF0aDo6ZnJvbSh7bV9xdWFkQ3VydmVEYXRhfSk7IH0K
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAgICAgc3RkOjpvcHRpb25h
bDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsg
fQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBwYXRoKCkuZmFzdEJvdW5kaW5nUmVjdCgpOyB9CiAK
QEAgLTE5MTIsMTMgKzE5NDMsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gdHJ1ZTsKIAorICAgIEZpbGxCZXppZXJDdXJ2ZSgpID0gZGVmYXVsdDsKICAgICBG
aWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJiBiZXppZXJDdXJ2ZURhdGEpCiAg
ICAgICAgIDogbV9iZXppZXJDdXJ2ZURhdGEoYmV6aWVyQ3VydmVEYXRhKQogICAgIHsKICAgICB9
CiAKICAgICBQYXRoIHBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRoOjpmcm9tKHttX2JlemllckN1
cnZlRGF0YX0pOyB9Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAg
IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBz
dGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gcGF0aCgpLmZhc3RCb3VuZGlu
Z1JlY3QoKTsgfQogCkBAIC0xOTQ5LDcgKzE5ODEsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZpbGxQYXRoPiBkZWNvZGUoRGVj
b2RlciYpOwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAg
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5n
UmVjdCgpOyB9CkBAIC0xOTgxLDYgKzIwMTMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCisgICAgRmlsbEVsbGlwc2UoKSA9IGRlZmF1bHQ7CiAg
ICAgRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICA6IG1fcmVjdChy
ZWN0KQogICAgIHsKQEAgLTE5ODgsNyArMjAyMSw3IEBAIHB1YmxpYzoKIAogICAgIEZsb2F0UmVj
dCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdDsgfQpAQCAtMjEyNSw2ICsyMTU4LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAorICAgIFBhaW50RnJhbWVGb3JNZWRpYSgp
ID0gZGVmYXVsdDsKICAgICBQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKIAogICAgIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CkBAIC0yMTMyLDcgKzIxNjYsNyBA
QCBwdWJsaWM6CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZp
ZXIuaXNWYWxpZCgpOyB9CiAKLSAgICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIFdF
QkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBz
dGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHsgbV9kZXN0aW5hdGlvbiB9OyB9
CkBAIC0yMTQ5LDYgKzIxODMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSB0cnVlOwogCisgICAgU3Ryb2tlUmVjdCgpID0gZGVmYXVsdDsKICAgICBTdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICA6IG1f
cmVjdChyZWN0KQogICAgICAgICAsIG1fbGluZVdpZHRoKGxpbmVXaWR0aCkKQEAgLTIxNTgsNyAr
MjE5Myw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdDsgfQogICAgIGZsb2F0IGxpbmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVdpZHRo
OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpu
dWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwpAQCAtMjE3NCw2ICsyMjA5LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAorICAgIFN0cm9rZUxpbmUo
KSA9IGRlZmF1bHQ7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgU3Ryb2tlTGlu
ZShjb25zdCBMaW5lRGF0YSYgbGluZURhdGEpCiAgICAgICAgIDogbV9zdGFydChsaW5lRGF0YS5z
dGFydCkKQEAgLTIxOTAsNyArMjIyNiw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFBvaW50IHN0YXJ0
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQogICAgIEZsb2F0UG9pbnQgZW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9lbmQ7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7
IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CkBAIC0yMjA4LDEzICsyMjQ0
LDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0g
dHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAK
KyAgICBTdHJva2VBcmMoKSA9IGRlZmF1bHQ7CiAgICAgU3Ryb2tlQXJjKGNvbnN0IEFyY0RhdGEm
IGFyY0RhdGEpCiAgICAgICAgIDogbV9hcmNEYXRhKGFyY0RhdGEpCiAgICAgewogICAgIH0KIAog
ICAgIFBhdGggcGF0aCgpIGNvbnN0IHsgcmV0dXJuIFBhdGg6OmZyb20oe21fYXJjRGF0YX0pOyB9
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7
IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAKQEAgLTIyMjgsMTMgKzIyNjUsMTQgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAorICAgIFN0cm9rZVF1YWRDdXJ2
ZSgpID0gZGVmYXVsdDsKICAgICBTdHJva2VRdWFkQ3VydmUoY29uc3QgUXVhZEN1cnZlRGF0YSYg
cXVhZEN1cnZlRGF0YSkKICAgICAgICAgOiBtX3F1YWRDdXJ2ZURhdGEocXVhZEN1cnZlRGF0YSkK
ICAgICB7CiAgICAgfQogCiAgICAgUGF0aCBwYXRoKCkgY29uc3QgeyByZXR1cm4gUGF0aDo6ZnJv
bSh7bV9xdWFkQ3VydmVEYXRhfSk7IH0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIApAQCAtMjI0OCwxMyAr
MjI4NiwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRl
bSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVl
OwogCisgICAgU3Ryb2tlQmV6aWVyQ3VydmUoKSA9IGRlZmF1bHQ7CiAgICAgU3Ryb2tlQmV6aWVy
Q3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJiBiZXppZXJDdXJ2ZURhdGEpCiAgICAgICAgIDog
bV9iZXppZXJDdXJ2ZURhdGEoYmV6aWVyQ3VydmVEYXRhKQogICAgIHsKICAgICB9CiAKICAgICBQ
YXRoIHBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRoOjpmcm9tKHttX2JlemllckN1cnZlRGF0YX0p
OyB9Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIHN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxv
cHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKQEAgLTIyODUsNyArMjMyNCw3IEBAIHB1YmxpYzoKICAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8U3Ryb2tlUGF0
aD4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CkBAIC0yMzE3LDYgKzIz
NTYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwog
CisgICAgU3Ryb2tlRWxsaXBzZSgpID0gZGVmYXVsdDsKICAgICBTdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICB7CkBAIC0yMzI0
LDcgKzIzNjQsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CkBAIC0yMzM5LDYgKzIz
NzksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwog
CisgICAgQ2xlYXJSZWN0KCkgPSBkZWZhdWx0OwogICAgIENsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiAgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewpAQCAtMjM0Niw3ICsyMzg3
LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9yZWN0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAK
ICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQpAQCAt
MjM2Myw3ICsyNDA0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gZmFsc2U7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiB9Owog
CiBjbGFzcyBBcHBseUZpbGxQYXR0ZXJuIHsKQEAgLTIzNzIsNyArMjQxMyw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogfTsKIAogI2VuZGlmCkBAIC0yMzgzLDYgKzI0MjQs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRy
dWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAor
ICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoKSA9IGRlZmF1bHQ7CiAgICAgQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKICAgICAgICAgOiBtX3NjYWxlRmFjdG9yKHNj
YWxlRmFjdG9yKQogICAgIHsKQEAgLTIzOTAsNyArMjQzMiw3IEBAIHB1YmxpYzoKIAogICAgIGZs
b2F0IHNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQogCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGZsb2F0
IG1fc2NhbGVGYWN0b3IgeyAxIH07CkBAIC0yNDAyLDcgKzI0NDQsOCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIGV4cGxpY2l0IEZsdXNo
Q29udGV4dChGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikKKyAgICBGbHVzaENvbnRleHQoKSA9
IGRlZmF1bHQ7CisgICAgRmx1c2hDb250ZXh0KEZsdXNoSWRlbnRpZmllciBpZGVudGlmaWVyKQog
ICAgICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgIHsKICAgICB9CkBAIC0yNDEw
LDcgKzI0NTMsNyBAQCBwdWJsaWM6CiAgICAgRmx1c2hJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7
IHJldHVybiBtX2lkZW50aWZpZXIuaXNWYWxpZCgpOyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgRmx1c2hJZGVudGlmaWVyIG1faWRl
bnRpZmllcjsKQEAgLTI0MjQsNyArMjQ2Nyw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgZXhwbGljaXQgTWV0YUNvbW1hbmRDaGFuZ2VJ
dGVtQnVmZmVyKEl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAgTWV0YUNvbW1h
bmRDaGFuZ2VJdGVtQnVmZmVyKCkgPSBkZWZhdWx0OworICAgIE1ldGFDb21tYW5kQ2hhbmdlSXRl
bUJ1ZmZlcihJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyKQogICAgICAgICA6IG1faWRl
bnRpZmllcihpZGVudGlmaWVyKQogICAgIHsKICAgICB9CkBAIC0yNDQyLDcgKzI0ODYsOCBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIGV4
cGxpY2l0IE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcihSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgaWRlbnRpZmllcikKKyAgICBNZXRhQ29tbWFuZENoYW5nZURlc3Rp
bmF0aW9uSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CisgICAgTWV0YUNvbW1hbmRDaGFuZ2VEZXN0
aW5hdGlvbkltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpZGVudGlmaWVy
KQogICAgICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgIHsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggMWU0NzIxN2UwNzRjZTU4
N2JjYWZmY2ZlYWI0YzMxMDBiZGExNWNhNC4uZmM3MTBmMGU4NjI5NDk5NjUxMWYxMWFjZmEyYWFk
ZjI0NDMxOGJjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApA
QCAtODIsNyArODIsNyBAQCBzdGF0aWMgYm9vbCBjb250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5n
ZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNoYQogICAgICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLAogICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpGaWxsQ29sb3JDaGFuZ2UsCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
R3JhZGllbnRDaGFuZ2UsCisvLyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFk
aWVudENoYW5nZSwKICAgICB9OwogCiAgICAgaWYgKGNoYW5nZUZsYWdzICE9IChjaGFuZ2VGbGFn
cyAmIGlubGluZVN0YXRlQ2hhbmdlRmxhZ3MpKQpAQCAtOTQsOSArOTQsOSBAQCBzdGF0aWMgYm9v
bCBjb250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGVDaGFuZ2UmIGNoYQogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci50
cnlHZXRBc1NSR0JBQnl0ZXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGNo
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFu
Z2UpCi0gICAgICAgICYmICghY2hhbmdlcy5tX3N0YXRlLmZpbGxHcmFkaWVudCB8fCAhU2V0SW5s
aW5lRmlsbEdyYWRpZW50Ojppc0lubGluZSgqY2hhbmdlcy5tX3N0YXRlLmZpbGxHcmFkaWVudCkp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisvLyAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSkKKy8vICAgICAgICAmJiAo
IWNoYW5nZXMubV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgIVNldElubGluZUZpbGxHcmFkaWVudDo6
aXNJbmxpbmUoKmNoYW5nZXMubV9zdGF0ZS5maWxsR3JhZGllbnQpKSkKKy8vICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEyOCw4ICsxMjgsOCBAQCB2b2lk
IFJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGVDaGFuZ2UmIGNoYW5nZXMsCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQogICAgICAgICBhcHBlbmQ8U2V0SW5saW5l
RmlsbENvbG9yPigqY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMo
KSk7CiAKLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxHcmFkaWVudENoYW5nZSkpCi0gICAgICAgIGFwcGVuZDxTZXRJbmxpbmVGaWxsR3JhZGll
bnQ+KCpjaGFuZ2VzLm1fc3RhdGUuZmlsbEdyYWRpZW50LCBjaGFuZ2VzLm1fc3RhdGUuZmlsbEdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0pOworLy8gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKQorLy8gICAgICAgIGFwcGVu
ZDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCpjaGFuZ2VzLm1fc3RhdGUuZmlsbEdyYWRpZW50LCBj
aGFuZ2VzLm1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwogfQogCiBib29sIFJl
Y29yZGVyOjpjYW5BcHBlbmRJdGVtT2ZUeXBlKEl0ZW1UeXBlIHR5cGUpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCAzMWE1MjI4OTBiN2VlNGU2NTBmNWJh
NWJiMWI3ZTUyNDYyYWYxNjEwLi5kYjQxOTVhNzliZGViMDIwZmE0Y2I2MjM3NjI4MmQ5OTk2NGM1
ZTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTYxLDcgKzYx
LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UGl4ZWxCdWZmZXIoY29u
c3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhl
bEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7CiAKLSAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0LmlzRW1wdHkoKTsgfQorICAgIHZvaWQg
c2V0SXNFbXB0eSgpIHsgbV9pc0VtcHR5ID0gdHJ1ZTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNFbXB0eTsgfQogCiAgICAgY2xhc3MgRGVsZWdhdGUgewogICAgIHB1
YmxpYzoKQEAgLTcyLDYgKzczLDcyIEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIHJl
Y29yZEZvbnRVc2UoRm9udCYpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkSW1hZ2VC
dWZmZXJVc2UoSW1hZ2VCdWZmZXImKSB7IH0KICAgICAgICAgdmlydHVhbCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkOyB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlY29yZChjb25zdCBTYXZlJikgeyB9Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCByZWNvcmQoY29uc3QgUmVzdG9yZSYpIHsgfQorICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkKGNvbnN0IFRyYW5zbGF0ZSYpIHsgfQorICAgICAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkKGNvbnN0IFJvdGF0ZSYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkKGNvbnN0IFNjYWxlJikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWNvcmQoY29uc3Qg
U2V0Q1RNJikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWNvcmQoY29uc3QgQ29uY2F0ZW5h
dGVDVE0mKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHJlY29yZChjb25zdCBTZXRJbmxpbmVG
aWxsQ29sb3ImKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHJlY29yZChjb25zdCBTZXRJbmxp
bmVTdHJva2VDb2xvciYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkKGNvbnN0IFNl
dFN0cm9rZVRoaWNrbmVzcyYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkKGNvbnN0
IFNldFN0YXRlJikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWNvcmQoY29uc3QgU2V0TGlu
ZUNhcCYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkKGNvbnN0IFNldExpbmVEYXNo
JikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWNvcmQoY29uc3QgU2V0TGluZUpvaW4mKSB7
IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHJlY29yZChjb25zdCBTZXRNaXRlckxpbWl0JikgeyB9
CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWNvcmQoY29uc3QgQ2xlYXJTaGFkb3cmKSB7IH0KKyAg
ICAgICAgdmlydHVhbCB2b2lkIHJlY29yZChjb25zdCBDbGlwJikgeyB9CisgICAgICAgIHZpcnR1
YWwgdm9pZCByZWNvcmQoY29uc3QgQ2xpcE91dCYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkKGNvbnN0IENsaXBUb0ltYWdlQnVmZmVyJikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmQoY29uc3QgQ2xpcE91dFRvUGF0aCYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkKGNvbnN0IENsaXBQYXRoJikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWNvcmQo
Y29uc3QgQmVnaW5DbGlwVG9EcmF3aW5nQ29tbWFuZHMmKSB7IH0KKyAgICAgICAgdmlydHVhbCB2
b2lkIHJlY29yZChjb25zdCBFbmRDbGlwVG9EcmF3aW5nQ29tbWFuZHMmKSB7IH0KKyAgICAgICAg
dmlydHVhbCB2b2lkIHJlY29yZChjb25zdCBEcmF3R2x5cGhzJikgeyB9CisgICAgICAgIHZpcnR1
YWwgdm9pZCByZWNvcmQoY29uc3QgRHJhd0ltYWdlQnVmZmVyJikgeyB9CisgICAgICAgIHZpcnR1
YWwgdm9pZCByZWNvcmQoY29uc3QgRHJhd05hdGl2ZUltYWdlJikgeyB9CisgICAgICAgIHZpcnR1
YWwgdm9pZCByZWNvcmQoY29uc3QgRHJhd1BhdHRlcm4mKSB7IH0KKyAgICAgICAgdmlydHVhbCB2
b2lkIHJlY29yZChjb25zdCBCZWdpblRyYW5zcGFyZW5jeUxheWVyJikgeyB9CisgICAgICAgIHZp
cnR1YWwgdm9pZCByZWNvcmQoY29uc3QgRW5kVHJhbnNwYXJlbmN5TGF5ZXImKSB7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJlY29yZChjb25zdCBEcmF3UmVjdCYpIHsgfQorICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkKGNvbnN0IERyYXdMaW5lJikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmQoY29uc3QgRHJhd0xpbmVzRm9yVGV4dCYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkKGNvbnN0IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXImKSB7IH0KKyAgICAgICAg
dmlydHVhbCB2b2lkIHJlY29yZChjb25zdCBEcmF3RWxsaXBzZSYpIHsgfQorICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkKGNvbnN0IERyYXdQYXRoJikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmQoY29uc3QgRHJhd0ZvY3VzUmluZ1BhdGgmKSB7IH0KKyAgICAgICAgdmlydHVhbCB2
b2lkIHJlY29yZChjb25zdCBEcmF3Rm9jdXNSaW5nUmVjdHMmKSB7IH0KKyAgICAgICAgdmlydHVh
bCB2b2lkIHJlY29yZChjb25zdCBGaWxsUmVjdCYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkKGNvbnN0IEZpbGxSZWN0V2l0aENvbG9yJikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmQoY29uc3QgRmlsbFJlY3RXaXRoR3JhZGllbnQmKSB7IH0KKyAgICAgICAgdmlydHVh
bCB2b2lkIHJlY29yZChjb25zdCBGaWxsQ29tcG9zaXRlZFJlY3QmKSB7IH0KKyAgICAgICAgdmly
dHVhbCB2b2lkIHJlY29yZChjb25zdCBGaWxsUm91bmRlZFJlY3QmKSB7IH0KKyAgICAgICAgdmly
dHVhbCB2b2lkIHJlY29yZChjb25zdCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSYpIHsgfQorICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkKGNvbnN0IEZpbGxMaW5lJikgeyB9CisgICAgICAgIHZp
cnR1YWwgdm9pZCByZWNvcmQoY29uc3QgRmlsbEFyYyYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkKGNvbnN0IEZpbGxRdWFkQ3VydmUmKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lk
IHJlY29yZChjb25zdCBGaWxsQmV6aWVyQ3VydmUmKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lk
IHJlY29yZChjb25zdCBGaWxsUGF0aCYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
KGNvbnN0IEZpbGxFbGxpcHNlJikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWNvcmQoY29u
c3QgR2V0UGl4ZWxCdWZmZXImKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHJlY29yZChjb25z
dCBQdXRQaXhlbEJ1ZmZlciYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkKGNvbnN0
IFBhaW50RnJhbWVGb3JNZWRpYSYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkKGNv
bnN0IFN0cm9rZVJlY3QmKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHJlY29yZChjb25zdCBT
dHJva2VMaW5lJikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWNvcmQoY29uc3QgU3Ryb2tl
QXJjJikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWNvcmQoY29uc3QgU3Ryb2tlUXVhZEN1
cnZlJikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWNvcmQoY29uc3QgU3Ryb2tlQmV6aWVy
Q3VydmUmKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHJlY29yZChjb25zdCBTdHJva2VQYXRo
JikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWNvcmQoY29uc3QgU3Ryb2tlRWxsaXBzZSYp
IHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkKGNvbnN0IENsZWFyUmVjdCYpIHsgfQor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkKGNvbnN0IEFwcGx5U3Ryb2tlUGF0dGVybiYpIHsg
fQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkKGNvbnN0IEFwcGx5RmlsbFBhdHRlcm4mKSB7
IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHJlY29yZChjb25zdCBBcHBseURldmljZVNjYWxlRmFj
dG9yJikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWNvcmQoY29uc3QgRmx1c2hDb250ZXh0
JikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWNvcmQoY29uc3QgTWV0YUNvbW1hbmRDaGFu
Z2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyJikgeyB9CiAgICAgfTsKIAogICAgIHZvaWQgZmx1c2hD
b250ZXh0KEZsdXNoSWRlbnRpZmllciBpZGVudGlmaWVyKSB7IGFwcGVuZDxGbHVzaENvbnRleHQ+
KGlkZW50aWZpZXIpOyB9CkBAIC0xODIsMjAgKzI0OSwyNCBAQCBwcml2YXRlOgogICAgICAgICBp
ZiBjb25zdGV4cHIgKGl0ZW1OZWVkc1N0YXRlPFQ+KCkpCiAgICAgICAgICAgICBhcHBlbmRTdGF0
ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwogCi0gICAgICAgIG1fZGlzcGxheUxpc3QuYXBwZW5k
PFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0KLSAgICAgICAgaWYgY29uc3RleHBy
IChUOjppc0RyYXdpbmdJdGVtKSB7Ci0gICAgICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc3BsYXlM
aXN0LnRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cygpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgICAgIGF1dG8gaXRlbSA9IFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KTsKLSAgICAgICAgICAgIGlmIChhdXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKCp0aGlzKSkK
LSAgICAgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVtRXh0ZW50KGV4dGVu
dEZyb21Mb2NhbEJvdW5kcygqcmVjdCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoYXV0byByZWN0
ID0gaXRlbS5nbG9iYWxCb3VuZHMoKSkKLSAgICAgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFk
ZERyYXdpbmdJdGVtRXh0ZW50KCpyZWN0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVtRXh0ZW50KHN0ZDo6bnVsbG9wdCk7Ci0g
ICAgICAgIH0KKyAgICAgICAgbV9pc0VtcHR5ID0gZmFsc2U7CisgICAgICAgIGlmIChtX2RlbGVn
YXRlKQorICAgICAgICAgICAgbV9kZWxlZ2F0ZS0+cmVjb3JkKFQgeyBzdGQ6OmZvcndhcmQ8QXJn
cz4oYXJncykuLi4gfSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZGlzcGxheUxpc3Qu
YXBwZW5kPFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisKKy8vICAgICAgICBpZiBj
b25zdGV4cHIgKFQ6OmlzRHJhd2luZ0l0ZW0pIHsKKy8vICAgICAgICAgICAgaWYgKExJS0VMWSgh
bV9kaXNwbGF5TGlzdC50cmFja3NEcmF3aW5nSXRlbUV4dGVudHMoKSkpCisvLyAgICAgICAgICAg
ICAgICByZXR1cm47CisvLworLy8gICAgICAgICAgICBhdXRvIGl0ZW0gPSBUKHN0ZDo6Zm9yd2Fy
ZDxBcmdzPihhcmdzKS4uLik7CisvLyAgICAgICAgICAgIGlmIChhdXRvIHJlY3QgPSBpdGVtLmxv
Y2FsQm91bmRzKCp0aGlzKSkKKy8vICAgICAgICAgICAgICAgIG1fZGlzcGxheUxpc3QuYWRkRHJh
d2luZ0l0ZW1FeHRlbnQoZXh0ZW50RnJvbUxvY2FsQm91bmRzKCpyZWN0KSk7CisvLyAgICAgICAg
ICAgIGVsc2UgaWYgKGF1dG8gcmVjdCA9IGl0ZW0uZ2xvYmFsQm91bmRzKCkpCisvLyAgICAgICAg
ICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVtRXh0ZW50KCpyZWN0KTsKKy8vICAg
ICAgICAgICAgZWxzZQorLy8gICAgICAgICAgICAgICAgbV9kaXNwbGF5TGlzdC5hZGREcmF3aW5n
SXRlbUV4dGVudChzdGQ6Om51bGxvcHQpOworLy8gICAgICAgIH0KICAgICB9CiAKICAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGNhbkFwcGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUpIGNvbnN0OwpAQCAt
MjUyLDYgKzMyMyw3IEBAIHByaXZhdGU6CiAgICAgRGlzcGxheUxpc3QmIG1fZGlzcGxheUxpc3Q7
CiAgICAgRGVsZWdhdGUqIG1fZGVsZWdhdGU7CiAgICAgYm9vbCBtX2lzTmVzdGVkOworICAgIGJv
b2wgbV9pc0VtcHR5IHsgdHJ1ZSB9OwogCiAgICAgVmVjdG9yPENvbnRleHRTdGF0ZSwgND4gbV9z
dGF0ZVN0YWNrOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5kZXggMmE5YjAwOWFhMWNiMjczYmMzM2JhOTk5ZmQ1
MDMxZDM2ZTc1MjE1NC4uZmM2OWViYzZkMDE1ZDRjMjA0OWZjNzAwNmZhZDYxZTYxNjY0NTM3NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcApAQCAtNDY1LDEwICs0NjUsMTAgQEAgUmVtb3RlSW1hZ2VEZWNvZGVyQVZG
UHJveHkmIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmltYWdlRGVjb2RlckFWRlByb3h5KCkK
IH0KICNlbmRpZgogCi12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRl
cmluZ0JhY2tlbmQoUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmIGNy
ZWF0aW9uUGFyYW1ldGVycykKK3ZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRl
UmVuZGVyaW5nQmFja2VuZChSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJz
JiYgY3JlYXRpb25QYXJhbWV0ZXJzLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJiBzdHJl
YW1CdWZmZXIpCiB7CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRNYXAuZW5zdXJlKGNyZWF0aW9uUGFyYW1ldGVycy5pZGVudGlmaWVyLCBbJl0oKSB7Ci0gICAg
ICAgIHJldHVybiBJUEM6OlNjb3BlZEFjdGl2ZU1lc3NhZ2VSZWNlaXZlUXVldWUgeyBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoY3JlYXRpb25QYXJhbWV0ZXJz
KSkgfTsKKyAgICAgICAgcmV0dXJuIElQQzo6U2NvcGVkQWN0aXZlTWVzc2FnZVJlY2VpdmVRdWV1
ZSB7IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShjcmVhdGlv
blBhcmFtZXRlcnMpLCBXVEZNb3ZlKHN0cmVhbUJ1ZmZlcikpIH07CiAgICAgfSk7CiAgICAgQVNT
RVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCmlu
ZGV4IGI4ODJhYTA5MDczNzc2ZGM4YjhkZjY5N2RmMDIxMGNiNTg5YWVkM2IuLjZmMGVlNjU3ZDIz
NDM2NDJhMmM2YjUxZTQ1ODUxNDc5OGM2N2JlYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApAQCAtMTc4LDcgKzE3OCw3
IEBAIHByaXZhdGU6CiAgICAgUmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXImIG1lZGlhUmVjb3Jk
ZXJNYW5hZ2VyKCk7CiAjZW5kaWYKIAotICAgIHZvaWQgY3JlYXRlUmVuZGVyaW5nQmFja2VuZChS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzJiYpOworICAgIHZvaWQgY3Jl
YXRlUmVuZGVyaW5nQmFja2VuZChSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0
ZXJzJiYsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmKTsKICAgICB2b2lkIHJlbGVhc2VS
ZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIAogI2lmIEVOQUJM
RShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggZmU0OGNhMjBiYTA4OTVh
YjhhZjc0ZTk2MjY3NGVmMWIzZGRlODdmZC4uYzFiZjgwMTljZWFiNDFmNzlhNmY1YWRlZTFmYTg2
MTZlMjA1ZWIwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KQEAgLTIzLDcgKzIzLDcg
QEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKIG1lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MgV2FudHNEaXNwYXRjaE1lc3NhZ2UgewotICAgIHZvaWQgQ3JlYXRlUmVuZGVy
aW5nQmFja2VuZChzdHJ1Y3QgV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25Q
YXJhbWV0ZXJzIGNyZWF0aW9uUGFyYW1ldGVycykKKyAgICB2b2lkIENyZWF0ZVJlbmRlcmluZ0Jh
Y2tlbmQoc3RydWN0IFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1l
dGVycyBjcmVhdGlvblBhcmFtZXRlcnMsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciBzdHJl
YW1CdWZmZXIpCiAgICAgdm9pZCBSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChXZWJLaXQ6OlJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQogI2lmIEVO
QUJMRShXRUJHTCkKICAgICB2b2lkIENyZWF0ZUdyYXBoaWNzQ29udGV4dEdMKHN0cnVjdCBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcywgV2ViS2l0OjpHcmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXIgZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCBXZWJL
aXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
LCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXIgc3RyZWFtKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42NTJmM2JmNWU2ZTRhYWYxZDE3MjEwMTMzNmM4MDIyYWI5N2ZiZmI4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZUdyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHQuaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHQuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNTQzOGY0Y2M2OTAwMmU2N2IwMTBiMTVlYjg4MGZmYWEy
NTcwNDNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKaW5kZXggY2IzZjhlODM1ZDBjODBhN2E1Mjc2OWE0ZDYy
MDdkNzhhNTg4NGI0Mi4uYTE4NWFmODg4M2VjNTQ4MjFhYTk1ODg4M2E5MDEzOTI3YmY2ZTZkMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdl
QnVmZmVyLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUlt
YWdlQnVmZmVyLmgKQEAgLTkyLDE0ICs5Miw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGbHVzaENvbnRleHQ+KCkpIHsKLSAgICAgICAgICAgIEJhc2VDb25jcmV0ZUltYWdl
QnVmZmVyOjpmbHVzaENvbnRleHQoKTsKLSAgICAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IGl0
ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaENvbnRleHQ+KCkuaWRlbnRpZmllcigp
OwotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNoYXJlZERpc3BsYXlMaXN0cywgc3RyZWFt
IDw8ICJBY2tub3dsZWRnaW5nIEZsdXNoeyIgPDwgaWRlbnRpZmllciA8PCAifSBpbiBJbWFnZSgi
IDw8IG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIDw8ICIpIik7Ci0gICAgICAgICAgICBt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZGlkRmx1c2goaWRlbnRpZmllciwgbV9yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LQogICAgICAgICBpZiAoaXRlbS5pczxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6TWV0YUNvbW1hbmRD
aGFuZ2VJdGVtQnVmZmVyPigpKSB7CiAgICAgICAgICAgICBhdXRvIG5leHRCdWZmZXJJZGVudGlm
aWVyID0gaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Ok1ldGFDb21tYW5kQ2hhbmdlSXRl
bUJ1ZmZlcj4oKS5pZGVudGlmaWVyKCk7CiAgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2hh
cmVkRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlN3aXRjaGluZyB0byBJdGVtc1siIDw8IG5leHRC
dWZmZXJJZGVudGlmaWVyIDw8ICJdIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggYWE5
NDU2NDE0OWQwOGU0ODk2MzQ3ZDk0ZjAzOTQ2MTU0NzI5YmY3My4uMDA4ZTI5MzZkMjJiOWM1NzI5
ZDZjZThlOTYwMTkwZDJkNDBmZjUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtNDMs
NiArNDMsOSBAQAogI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L1dvcmtRdWV1ZS5oPgogCisjaW5jbHVkZSA8ZGJnX2NvbG9ycy5oPgorI2luY2x1ZGUgPGRiZ19n
ZW9tZXRyeS5oPgorCiAjaWYgRU5BQkxFKElQQ19URVNUSU5HX0FQSSkKICNkZWZpbmUgV0VCX1BS
T0NFU1NfVEVSTUlOQVRFX0NPTkRJVElPTiAhbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5j
b25uZWN0aW9uKCkuaWdub3JlSW52YWxpZE1lc3NhZ2VGb3JUZXN0aW5nKCkKICNlbHNlCkBAIC03
MiwxOSArNzUsMjMgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKLVJlZjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzcywgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmIGNyZWF0aW9u
UGFyYW1ldGVycykKK1JlZjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kPiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcywgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmIGNy
ZWF0aW9uUGFyYW1ldGVycywgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiYgc3RyZWFtQnVm
ZmVyKQogewotICAgIGF1dG8gaW5zdGFuY2UgPSBhZG9wdFJlZigqbmV3IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgV1RGTW92ZShjcmVhdGlvblBhcmFt
ZXRlcnMpKSk7CisgICAgYXV0byBpbnN0YW5jZSA9IGFkb3B0UmVmKCpuZXcgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZChncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBXVEZNb3ZlKGNyZWF0aW9uUGFy
YW1ldGVycyksIFdURk1vdmUoc3RyZWFtQnVmZmVyKSkpOwogICAgIGluc3RhbmNlLT5zdGFydExp
c3RlbmluZ0ZvcklQQygpOwogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIAotUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZChHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3Jl
YXRpb25QYXJhbWV0ZXJzJiYgY3JlYXRpb25QYXJhbWV0ZXJzKQorUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZChHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25Q
YXJhbWV0ZXJzJiYgY3JlYXRpb25QYXJhbWV0ZXJzLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZm
ZXImJiBzdHJlYW1CdWZmZXIpCiAgICAgOiBtX3dvcmtRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgi
UmVtb3RlUmVuZGVyaW5nQmFja2VuZCB3b3JrIHF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpTZXJp
YWwsIFdvcmtRdWV1ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmUpKQorICAgICwgbV9zdHJlYW1Db25u
ZWN0aW9uV29ya1F1ZXVlKG1fd29ya1F1ZXVlLmdldCgpKQogICAgICwgbV9ncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCiAgICAgLCBtX3JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKGNyZWF0aW9uUGFyYW1ldGVycy5pZGVudGlmaWVyKQogICAgICwg
bV9yZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZShXVEZNb3ZlKGNyZWF0aW9uUGFyYW1ldGVycy5y
ZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZSkpCiB7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpEaWRDcmVhdGVXYWtlVXBTZW1hcGhvcmVGb3JEaXNwbGF5
TGlzdFN0cmVhbShtX3N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUud2FrZVVwU2VtYXBob3JlKCkp
LCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBtX3N0cmVhbUNvbm5lY3Rpb24g
PSBJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb248UmVtb3RlUmVuZGVyaW5nQmFja2VuZD46OmNy
ZWF0ZShtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rpb24oKSwgV1RGTW92ZShz
dHJlYW1CdWZmZXIpLCBtX3N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUpOworICAgIG1fc3RyZWFt
Q29ubmVjdGlvbi0+c3RhcnRSZWNlaXZpbmdNZXNzYWdlcygqdGhpcywgTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9yZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpKTsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogfQogCkBAIC0xMDcsNiArMTE0LDcgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpz
dG9wTGlzdGVuaW5nRm9ySVBDKCkKICAgICAvLyBUaGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBk
ZXN0cnVjdG9yIHdvbid0IGJlIGNhbGxlZCB1bnRpbCBkaXNjb25uZWN0KCkgaXMgY2FsbGVkIGFu
ZCB3ZSB1bnJlZ2lzdGVyIG91cnNlbHZlcyBhcyBhIFdvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlciBi
ZWNhdXNlCiAgICAgLy8gdGhlIElQQzo6Q29ubmVjdGlvbiByZWZzIGl0cyBXb3JrUXVldWVNZXNz
YWdlUmVjZWl2ZXJzLgogICAgIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlv
bigpLnJlbW92ZVdvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyLnRvVUludDY0KCkpOworICAgIG1fc3RyZWFtQ29ubmVjdGlvbi0+c3RvcFJlY2Vpdmlu
Z01lc3NhZ2VzKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7CiB9CiAK
IHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlzcGF0Y2goRnVuY3Rpb248dm9pZCgpPiYm
IHRhc2spCkBAIC0xNDcsMTEgKzE1NSw2IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
ZGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKEltYWdlQnVmZmVyQmFja2VuZEhhbmRsCiAgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpEaWRDcmVhdGVJbWFn
ZUJ1ZmZlckJhY2tlbmQoV1RGTW92ZShoYW5kbGUpLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpkaWRGbHVzaChEaXNwbGF5TGlzdDo6Rmx1c2hJZGVudGlmaWVyIGZsdXNo
SWRlbnRpZmllciwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OkRpZEZsdXNoKGZsdXNoSWRlbnRpZmllciwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Ci19Ci0KIHZvaWQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQgcGl4
ZWxGb3JtYXQsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlclJlc291cmNl
SWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTY5Nyw2
ICs3MDAsMzkxIEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlTGFzdEtub3du
U3RhdGUoUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlIHN0CiAgICAgbV9sYXN0S25vd25TdGF0
ZS5zdG9yZVJlbGF4ZWQoc3RhdGUpOwogfQogCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmhhbmRsZVNhdmUoRGlzcGxheUxpc3Q6OlNhdmUmJiBpdGVtKQoreworICAgIE1FU1NBR0VfQ0hF
Q0sobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLCAiTm8gZGVzdGluYXRpb24gaW1h
Z2UgYnVmZmVyIHNwZWNpZmllZC4iKTsKKyAgICBpdGVtLmFwcGx5KG1fcmVuZGVyaW5nRGVzdGlu
YXRpb25JbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpoYW5kbGVSZXN0b3JlKERpc3BsYXlMaXN0OjpSZXN0b3JlJiYgaXRlbSkKK3sKKyAg
ICBNRVNTQUdFX0NIRUNLKG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlciwgIk5vIGRl
c3RpbmF0aW9uIGltYWdlIGJ1ZmZlciBzcGVjaWZpZWQuIik7CisgICAgaXRlbS5hcHBseShtX3Jl
bmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6aGFuZGxlVHJhbnNsYXRlKERpc3BsYXlMaXN0OjpUcmFuc2xh
dGUmJiBpdGVtKQoreworICAgIE1FU1NBR0VfQ0hFQ0sobV9yZW5kZXJpbmdEZXN0aW5hdGlvbklt
YWdlQnVmZmVyLCAiTm8gZGVzdGluYXRpb24gaW1hZ2UgYnVmZmVyIHNwZWNpZmllZC4iKTsKKyAg
ICBpdGVtLmFwcGx5KG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlci0+Y29udGV4dCgp
KTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpoYW5kbGVSb3RhdGUoRGlzcGxh
eUxpc3Q6OlJvdGF0ZSYmIGl0ZW0pCit7CisgICAgTUVTU0FHRV9DSEVDSyhtX3JlbmRlcmluZ0Rl
c3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJObyBkZXN0aW5hdGlvbiBpbWFnZSBidWZmZXIgc3BlY2lm
aWVkLiIpOworICAgIGl0ZW0uYXBwbHkobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVy
LT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmhhbmRsZVNj
YWxlKERpc3BsYXlMaXN0OjpTY2FsZSYmIGl0ZW0pCit7CisgICAgTUVTU0FHRV9DSEVDSyhtX3Jl
bmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJObyBkZXN0aW5hdGlvbiBpbWFnZSBidWZm
ZXIgc3BlY2lmaWVkLiIpOworICAgIGl0ZW0uYXBwbHkobV9yZW5kZXJpbmdEZXN0aW5hdGlvbklt
YWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmhhbmRsZVNldENUTShEaXNwbGF5TGlzdDo6U2V0Q1RNJiYgaXRlbSkKK3sKKyAgICBNRVNTQUdF
X0NIRUNLKG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlciwgIk5vIGRlc3RpbmF0aW9u
IGltYWdlIGJ1ZmZlciBzcGVjaWZpZWQuIik7CisgICAgaXRlbS5hcHBseShtX3JlbmRlcmluZ0Rl
c3RpbmF0aW9uSW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6aGFuZGxlQ29uY2F0ZW5hdGVDVE0oRGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRl
Q1RNJiYgaXRlbSkKK3sKKyAgICBNRVNTQUdFX0NIRUNLKG1fcmVuZGVyaW5nRGVzdGluYXRpb25J
bWFnZUJ1ZmZlciwgIk5vIGRlc3RpbmF0aW9uIGltYWdlIGJ1ZmZlciBzcGVjaWZpZWQuIik7Cisg
ICAgaXRlbS5hcHBseShtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXItPmNvbnRleHQo
KSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6aGFuZGxlU2V0SW5saW5lRmls
bENvbG9yKERpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3ImJiBpdGVtKQoreworICAgIE1F
U1NBR0VfQ0hFQ0sobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLCAiTm8gZGVzdGlu
YXRpb24gaW1hZ2UgYnVmZmVyIHNwZWNpZmllZC4iKTsKKyAgICBpdGVtLmFwcGx5KG1fcmVuZGVy
aW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpoYW5kbGVTZXRJbmxpbmVTdHJva2VDb2xvcihEaXNwbGF5TGlzdDo6
U2V0SW5saW5lU3Ryb2tlQ29sb3ImJiBpdGVtKQoreworICAgIE1FU1NBR0VfQ0hFQ0sobV9yZW5k
ZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLCAiTm8gZGVzdGluYXRpb24gaW1hZ2UgYnVmZmVy
IHNwZWNpZmllZC4iKTsKKyAgICBpdGVtLmFwcGx5KG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpo
YW5kbGVTZXRTdHJva2VUaGlja25lc3MoRGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzcyYm
IGl0ZW0pCit7CisgICAgTUVTU0FHRV9DSEVDSyhtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VC
dWZmZXIsICJObyBkZXN0aW5hdGlvbiBpbWFnZSBidWZmZXIgc3BlY2lmaWVkLiIpOworICAgIGl0
ZW0uYXBwbHkobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLT5jb250ZXh0KCkpOwor
fQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmhhbmRsZVNldFN0YXRlKERpc3BsYXlM
aXN0OjpTZXRTdGF0ZSYmIGl0ZW0pCit7CisgICAgTUVTU0FHRV9DSEVDSyhtX3JlbmRlcmluZ0Rl
c3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJObyBkZXN0aW5hdGlvbiBpbWFnZSBidWZmZXIgc3BlY2lm
aWVkLiIpOworICAgIGl0ZW0uYXBwbHkobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVy
LT5jb250ZXh0KCksIG51bGxwdHIsIG51bGxwdHIpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OmhhbmRsZVNldExpbmVDYXAoRGlzcGxheUxpc3Q6OlNldExpbmVDYXAmJiBpdGVt
KQoreworICAgIE1FU1NBR0VfQ0hFQ0sobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVy
LCAiTm8gZGVzdGluYXRpb24gaW1hZ2UgYnVmZmVyIHNwZWNpZmllZC4iKTsKKyAgICBpdGVtLmFw
cGx5KG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwor
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpoYW5kbGVTZXRMaW5lRGFzaChEaXNwbGF5TGlz
dDo6U2V0TGluZURhc2gmJiBpdGVtKQoreworICAgIE1FU1NBR0VfQ0hFQ0sobV9yZW5kZXJpbmdE
ZXN0aW5hdGlvbkltYWdlQnVmZmVyLCAiTm8gZGVzdGluYXRpb24gaW1hZ2UgYnVmZmVyIHNwZWNp
ZmllZC4iKTsKKyAgICBpdGVtLmFwcGx5KG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZl
ci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpoYW5kbGVT
ZXRMaW5lSm9pbihEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW4mJiBpdGVtKQoreworICAgIE1FU1NB
R0VfQ0hFQ0sobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLCAiTm8gZGVzdGluYXRp
b24gaW1hZ2UgYnVmZmVyIHNwZWNpZmllZC4iKTsKKyAgICBpdGVtLmFwcGx5KG1fcmVuZGVyaW5n
RGVzdGluYXRpb25JbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpoYW5kbGVTZXRNaXRlckxpbWl0KERpc3BsYXlMaXN0OjpTZXRNaXRlckxp
bWl0JiYgaXRlbSkKK3sKKyAgICBNRVNTQUdFX0NIRUNLKG1fcmVuZGVyaW5nRGVzdGluYXRpb25J
bWFnZUJ1ZmZlciwgIk5vIGRlc3RpbmF0aW9uIGltYWdlIGJ1ZmZlciBzcGVjaWZpZWQuIik7Cisg
ICAgaXRlbS5hcHBseShtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXItPmNvbnRleHQo
KSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6aGFuZGxlQ2xlYXJTaGFkb3co
RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93JiYgaXRlbSkKK3sKKyAgICBNRVNTQUdFX0NIRUNLKG1f
cmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlciwgIk5vIGRlc3RpbmF0aW9uIGltYWdlIGJ1
ZmZlciBzcGVjaWZpZWQuIik7CisgICAgaXRlbS5hcHBseShtX3JlbmRlcmluZ0Rlc3RpbmF0aW9u
SW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6aGFuZGxlQ2xpcChEaXNwbGF5TGlzdDo6Q2xpcCYmIGl0ZW0pCit7CisgICAgTUVTU0FHRV9D
SEVDSyhtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJObyBkZXN0aW5hdGlvbiBp
bWFnZSBidWZmZXIgc3BlY2lmaWVkLiIpOworICAgIGl0ZW0uYXBwbHkobV9yZW5kZXJpbmdEZXN0
aW5hdGlvbkltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OmhhbmRsZUNsaXBPdXQoRGlzcGxheUxpc3Q6OkNsaXBPdXQmJiBpdGVtKQorewor
ICAgIE1FU1NBR0VfQ0hFQ0sobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLCAiTm8g
ZGVzdGluYXRpb24gaW1hZ2UgYnVmZmVyIHNwZWNpZmllZC4iKTsKKyAgICBpdGVtLmFwcGx5KG1f
cmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpoYW5kbGVDbGlwVG9JbWFnZUJ1ZmZlcihEaXNwbGF5TGlz
dDo6Q2xpcFRvSW1hZ2VCdWZmZXImJiBpdGVtKQoreworICAgIE1FU1NBR0VfQ0hFQ0sobV9yZW5k
ZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLCAiTm8gZGVzdGluYXRpb24gaW1hZ2UgYnVmZmVy
IHNwZWNpZmllZC4iKTsKKyAgICBpdGVtLmFwcGx5KG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpo
YW5kbGVDbGlwT3V0VG9QYXRoKERpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoJiYgaXRlbSkKK3sK
KyAgICBNRVNTQUdFX0NIRUNLKG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlciwgIk5v
IGRlc3RpbmF0aW9uIGltYWdlIGJ1ZmZlciBzcGVjaWZpZWQuIik7CisgICAgaXRlbS5hcHBseSht
X3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9CisKK3ZvaWQg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6aGFuZGxlQ2xpcFBhdGgoRGlzcGxheUxpc3Q6OkNsaXBQ
YXRoJiYgaXRlbSkKK3sKKyAgICBNRVNTQUdFX0NIRUNLKG1fcmVuZGVyaW5nRGVzdGluYXRpb25J
bWFnZUJ1ZmZlciwgIk5vIGRlc3RpbmF0aW9uIGltYWdlIGJ1ZmZlciBzcGVjaWZpZWQuIik7Cisg
ICAgaXRlbS5hcHBseShtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXItPmNvbnRleHQo
KSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6aGFuZGxlQmVnaW5DbGlwVG9E
cmF3aW5nQ29tbWFuZHMoRGlzcGxheUxpc3Q6OkJlZ2luQ2xpcFRvRHJhd2luZ0NvbW1hbmRzJiYg
aXRlbSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lLgorfQorCit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmhhbmRsZUVuZENsaXBUb0RyYXdpbmdDb21tYW5kcyhEaXNwbGF5TGlz
dDo6RW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzJiYgaXRlbSkKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50IG1lLgorfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmhhbmRsZURyYXdH
bHlwaHMoRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHMmJiBpdGVtKQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgbWUuCit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6aGFuZGxlRHJh
d0ltYWdlQnVmZmVyKERpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXImJiBpdGVtKQoreworICAg
IE1FU1NBR0VfQ0hFQ0sobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLCAiTm8gZGVz
dGluYXRpb24gaW1hZ2UgYnVmZmVyIHNwZWNpZmllZC4iKTsKKyAgICBpdGVtLmFwcGx5KG1fcmVu
ZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpoYW5kbGVEcmF3TmF0aXZlSW1hZ2UoRGlzcGxheUxpc3Q6OkRy
YXdOYXRpdmVJbWFnZSYmIGl0ZW0pCit7CisgICAgTUVTU0FHRV9DSEVDSyhtX3JlbmRlcmluZ0Rl
c3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJObyBkZXN0aW5hdGlvbiBpbWFnZSBidWZmZXIgc3BlY2lm
aWVkLiIpOworICAgIGl0ZW0uYXBwbHkobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVy
LT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmhhbmRsZURy
YXdQYXR0ZXJuKERpc3BsYXlMaXN0OjpEcmF3UGF0dGVybiYmIGl0ZW0pCit7CisgICAgTUVTU0FH
RV9DSEVDSyhtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJObyBkZXN0aW5hdGlv
biBpbWFnZSBidWZmZXIgc3BlY2lmaWVkLiIpOworICAgIGl0ZW0uYXBwbHkobV9yZW5kZXJpbmdE
ZXN0aW5hdGlvbkltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OmhhbmRsZUJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoRGlzcGxheUxpc3Q6OkJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXImJiBpdGVtKQoreworICAgIE1FU1NBR0VfQ0hFQ0sobV9yZW5k
ZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLCAiTm8gZGVzdGluYXRpb24gaW1hZ2UgYnVmZmVy
IHNwZWNpZmllZC4iKTsKKyAgICBpdGVtLmFwcGx5KG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpo
YW5kbGVFbmRUcmFuc3BhcmVuY3lMYXllcihEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5
ZXImJiBpdGVtKQoreworICAgIE1FU1NBR0VfQ0hFQ0sobV9yZW5kZXJpbmdEZXN0aW5hdGlvbklt
YWdlQnVmZmVyLCAiTm8gZGVzdGluYXRpb24gaW1hZ2UgYnVmZmVyIHNwZWNpZmllZC4iKTsKKyAg
ICBpdGVtLmFwcGx5KG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlci0+Y29udGV4dCgp
KTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpoYW5kbGVEcmF3UmVjdChEaXNw
bGF5TGlzdDo6RHJhd1JlY3QmJiBpdGVtKQoreworICAgIE1FU1NBR0VfQ0hFQ0sobV9yZW5kZXJp
bmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLCAiTm8gZGVzdGluYXRpb24gaW1hZ2UgYnVmZmVyIHNw
ZWNpZmllZC4iKTsKKyAgICBpdGVtLmFwcGx5KG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1
ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpoYW5k
bGVEcmF3TGluZShEaXNwbGF5TGlzdDo6RHJhd0xpbmUmJiBpdGVtKQoreworICAgIE1FU1NBR0Vf
Q0hFQ0sobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLCAiTm8gZGVzdGluYXRpb24g
aW1hZ2UgYnVmZmVyIHNwZWNpZmllZC4iKTsKKyAgICBpdGVtLmFwcGx5KG1fcmVuZGVyaW5nRGVz
dGluYXRpb25JbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpoYW5kbGVEcmF3TGluZXNGb3JUZXh0KERpc3BsYXlMaXN0OjpEcmF3TGluZXNG
b3JUZXh0JiYgaXRlbSkKK3sKKyAgICBNRVNTQUdFX0NIRUNLKG1fcmVuZGVyaW5nRGVzdGluYXRp
b25JbWFnZUJ1ZmZlciwgIk5vIGRlc3RpbmF0aW9uIGltYWdlIGJ1ZmZlciBzcGVjaWZpZWQuIik7
CisgICAgaXRlbS5hcHBseShtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXItPmNvbnRl
eHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6aGFuZGxlRHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihEaXNwbGF5TGlzdDo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlciYm
IGl0ZW0pCit7CisgICAgTUVTU0FHRV9DSEVDSyhtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VC
dWZmZXIsICJObyBkZXN0aW5hdGlvbiBpbWFnZSBidWZmZXIgc3BlY2lmaWVkLiIpOworICAgIGl0
ZW0uYXBwbHkobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLT5jb250ZXh0KCkpOwor
fQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmhhbmRsZURyYXdFbGxpcHNlKERpc3Bs
YXlMaXN0OjpEcmF3RWxsaXBzZSYmIGl0ZW0pCit7CisgICAgTUVTU0FHRV9DSEVDSyhtX3JlbmRl
cmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJObyBkZXN0aW5hdGlvbiBpbWFnZSBidWZmZXIg
c3BlY2lmaWVkLiIpOworICAgIGl0ZW0uYXBwbHkobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdl
QnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Omhh
bmRsZURyYXdQYXRoKERpc3BsYXlMaXN0OjpEcmF3UGF0aCYmIGl0ZW0pCit7CisgICAgTUVTU0FH
RV9DSEVDSyhtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJObyBkZXN0aW5hdGlv
biBpbWFnZSBidWZmZXIgc3BlY2lmaWVkLiIpOworICAgIGl0ZW0uYXBwbHkobV9yZW5kZXJpbmdE
ZXN0aW5hdGlvbkltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OmhhbmRsZURyYXdGb2N1c1JpbmdQYXRoKERpc3BsYXlMaXN0OjpEcmF3Rm9j
dXNSaW5nUGF0aCYmIGl0ZW0pCit7CisgICAgTUVTU0FHRV9DSEVDSyhtX3JlbmRlcmluZ0Rlc3Rp
bmF0aW9uSW1hZ2VCdWZmZXIsICJObyBkZXN0aW5hdGlvbiBpbWFnZSBidWZmZXIgc3BlY2lmaWVk
LiIpOworICAgIGl0ZW0uYXBwbHkobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLT5j
b250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmhhbmRsZURyYXdG
b2N1c1JpbmdSZWN0cyhEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzJiYgaXRlbSkKK3sK
KyAgICBNRVNTQUdFX0NIRUNLKG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlciwgIk5v
IGRlc3RpbmF0aW9uIGltYWdlIGJ1ZmZlciBzcGVjaWZpZWQuIik7CisgICAgaXRlbS5hcHBseSht
X3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9CisKK3ZvaWQg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6aGFuZGxlRmlsbFJlY3QoRGlzcGxheUxpc3Q6OkZpbGxS
ZWN0JiYgaXRlbSkKK3sKKyAgICBNRVNTQUdFX0NIRUNLKG1fcmVuZGVyaW5nRGVzdGluYXRpb25J
bWFnZUJ1ZmZlciwgIk5vIGRlc3RpbmF0aW9uIGltYWdlIGJ1ZmZlciBzcGVjaWZpZWQuIik7Cisg
ICAgaXRlbS5hcHBseShtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXItPmNvbnRleHQo
KSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6aGFuZGxlRmlsbFJlY3RXaXRo
Q29sb3IoRGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yJiYgaXRlbSkKK3sKKyAgICBNRVNT
QUdFX0NIRUNLKG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlciwgIk5vIGRlc3RpbmF0
aW9uIGltYWdlIGJ1ZmZlciBzcGVjaWZpZWQuIik7CisgICAgaXRlbS5hcHBseShtX3JlbmRlcmlu
Z0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6aGFuZGxlRmlsbFJlY3RXaXRoR3JhZGllbnQoRGlzcGxheUxpc3Q6OkZp
bGxSZWN0V2l0aEdyYWRpZW50JiYgaXRlbSkKK3sKKyAgICBNRVNTQUdFX0NIRUNLKG1fcmVuZGVy
aW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlciwgIk5vIGRlc3RpbmF0aW9uIGltYWdlIGJ1ZmZlciBz
cGVjaWZpZWQuIik7CisgICAgaXRlbS5hcHBseShtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VC
dWZmZXItPmNvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6aGFu
ZGxlRmlsbENvbXBvc2l0ZWRSZWN0KERpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3QmJiBp
dGVtKQoreworICAgIE1FU1NBR0VfQ0hFQ0sobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVm
ZmVyLCAiTm8gZGVzdGluYXRpb24gaW1hZ2UgYnVmZmVyIHNwZWNpZmllZC4iKTsKKyAgICBpdGVt
LmFwcGx5KG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30K
Kwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpoYW5kbGVGaWxsUm91bmRlZFJlY3QoRGlz
cGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdCYmIGl0ZW0pCit7CisgICAgTUVTU0FHRV9DSEVDSyht
X3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJObyBkZXN0aW5hdGlvbiBpbWFnZSBi
dWZmZXIgc3BlY2lmaWVkLiIpOworICAgIGl0ZW0uYXBwbHkobV9yZW5kZXJpbmdEZXN0aW5hdGlv
bkltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OmhhbmRsZUZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKERpc3BsYXlMaXN0OjpGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZSYmIGl0ZW0pCit7CisgICAgTUVTU0FHRV9DSEVDSyhtX3JlbmRlcmluZ0Rl
c3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJObyBkZXN0aW5hdGlvbiBpbWFnZSBidWZmZXIgc3BlY2lm
aWVkLiIpOworICAgIGl0ZW0uYXBwbHkobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVy
LT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmhhbmRsZUZp
bGxMaW5lKERpc3BsYXlMaXN0OjpGaWxsTGluZSYmIGl0ZW0pCit7CisgICAgTUVTU0FHRV9DSEVD
SyhtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJObyBkZXN0aW5hdGlvbiBpbWFn
ZSBidWZmZXIgc3BlY2lmaWVkLiIpOworICAgIGl0ZW0uYXBwbHkobV9yZW5kZXJpbmdEZXN0aW5h
dGlvbkltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmhhbmRsZUZpbGxBcmMoRGlzcGxheUxpc3Q6OkZpbGxBcmMmJiBpdGVtKQoreworICAg
IE1FU1NBR0VfQ0hFQ0sobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLCAiTm8gZGVz
dGluYXRpb24gaW1hZ2UgYnVmZmVyIHNwZWNpZmllZC4iKTsKKyAgICBpdGVtLmFwcGx5KG1fcmVu
ZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpoYW5kbGVGaWxsUXVhZEN1cnZlKERpc3BsYXlMaXN0OjpGaWxs
UXVhZEN1cnZlJiYgaXRlbSkKK3sKKyAgICBNRVNTQUdFX0NIRUNLKG1fcmVuZGVyaW5nRGVzdGlu
YXRpb25JbWFnZUJ1ZmZlciwgIk5vIGRlc3RpbmF0aW9uIGltYWdlIGJ1ZmZlciBzcGVjaWZpZWQu
Iik7CisgICAgaXRlbS5hcHBseShtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXItPmNv
bnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6aGFuZGxlRmlsbEJl
emllckN1cnZlKERpc3BsYXlMaXN0OjpGaWxsQmV6aWVyQ3VydmUmJiBpdGVtKQoreworICAgIE1F
U1NBR0VfQ0hFQ0sobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLCAiTm8gZGVzdGlu
YXRpb24gaW1hZ2UgYnVmZmVyIHNwZWNpZmllZC4iKTsKKyAgICBpdGVtLmFwcGx5KG1fcmVuZGVy
aW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpoYW5kbGVGaWxsUGF0aChEaXNwbGF5TGlzdDo6RmlsbFBhdGgmJiBp
dGVtKQoreworICAgIE1FU1NBR0VfQ0hFQ0sobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVm
ZmVyLCAiTm8gZGVzdGluYXRpb24gaW1hZ2UgYnVmZmVyIHNwZWNpZmllZC4iKTsKKyAgICBpdGVt
LmFwcGx5KG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30K
Kwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpoYW5kbGVGaWxsRWxsaXBzZShEaXNwbGF5
TGlzdDo6RmlsbEVsbGlwc2UmJiBpdGVtKQoreworICAgIE1FU1NBR0VfQ0hFQ0sobV9yZW5kZXJp
bmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLCAiTm8gZGVzdGluYXRpb24gaW1hZ2UgYnVmZmVyIHNw
ZWNpZmllZC4iKTsKKyAgICBpdGVtLmFwcGx5KG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1
ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpoYW5k
bGVHZXRQaXhlbEJ1ZmZlcihEaXNwbGF5TGlzdDo6R2V0UGl4ZWxCdWZmZXImJiBpdGVtKQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUuCit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6aGFuZGxlUHV0UGl4ZWxCdWZmZXIoRGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyJiYg
aXRlbSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lLgorfQorCit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmhhbmRsZVBhaW50RnJhbWVGb3JNZWRpYShEaXNwbGF5TGlzdDo6UGFp
bnRGcmFtZUZvck1lZGlhJiYgaXRlbSkKK3sKKyAgICBNRVNTQUdFX0NIRUNLKG1fcmVuZGVyaW5n
RGVzdGluYXRpb25JbWFnZUJ1ZmZlciwgIk5vIGRlc3RpbmF0aW9uIGltYWdlIGJ1ZmZlciBzcGVj
aWZpZWQuIik7CisgICAgaXRlbS5hcHBseShtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZm
ZXItPmNvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6aGFuZGxl
U3Ryb2tlUmVjdChEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdCYmIGl0ZW0pCit7CisgICAgTUVTU0FH
RV9DSEVDSyhtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJObyBkZXN0aW5hdGlv
biBpbWFnZSBidWZmZXIgc3BlY2lmaWVkLiIpOworICAgIGl0ZW0uYXBwbHkobV9yZW5kZXJpbmdE
ZXN0aW5hdGlvbkltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OmhhbmRsZVN0cm9rZUxpbmUoRGlzcGxheUxpc3Q6OlN0cm9rZUxpbmUmJiBp
dGVtKQoreworICAgIE1FU1NBR0VfQ0hFQ0sobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVm
ZmVyLCAiTm8gZGVzdGluYXRpb24gaW1hZ2UgYnVmZmVyIHNwZWNpZmllZC4iKTsKKyAgICBpdGVt
LmFwcGx5KG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30K
Kwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpoYW5kbGVTdHJva2VBcmMoRGlzcGxheUxp
c3Q6OlN0cm9rZUFyYyYmIGl0ZW0pCit7CisgICAgTUVTU0FHRV9DSEVDSyhtX3JlbmRlcmluZ0Rl
c3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJObyBkZXN0aW5hdGlvbiBpbWFnZSBidWZmZXIgc3BlY2lm
aWVkLiIpOworICAgIGl0ZW0uYXBwbHkobV9yZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVy
LT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmhhbmRsZVN0
cm9rZVF1YWRDdXJ2ZShEaXNwbGF5TGlzdDo6U3Ryb2tlUXVhZEN1cnZlJiYgaXRlbSkKK3sKKyAg
ICBNRVNTQUdFX0NIRUNLKG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlciwgIk5vIGRl
c3RpbmF0aW9uIGltYWdlIGJ1ZmZlciBzcGVjaWZpZWQuIik7CisgICAgaXRlbS5hcHBseShtX3Jl
bmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6aGFuZGxlU3Ryb2tlQmV6aWVyQ3VydmUoRGlzcGxheUxpc3Q6
OlN0cm9rZUJlemllckN1cnZlJiYgaXRlbSkKK3sKKyAgICBNRVNTQUdFX0NIRUNLKG1fcmVuZGVy
aW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlciwgIk5vIGRlc3RpbmF0aW9uIGltYWdlIGJ1ZmZlciBz
cGVjaWZpZWQuIik7CisgICAgaXRlbS5hcHBseShtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VC
dWZmZXItPmNvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6aGFu
ZGxlU3Ryb2tlUGF0aChEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aCYmIGl0ZW0pCit7CisgICAgTUVT
U0FHRV9DSEVDSyhtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJObyBkZXN0aW5h
dGlvbiBpbWFnZSBidWZmZXIgc3BlY2lmaWVkLiIpOworICAgIGl0ZW0uYXBwbHkobV9yZW5kZXJp
bmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmhhbmRsZVN0cm9rZUVsbGlwc2UoRGlzcGxheUxpc3Q6OlN0cm9rZUVs
bGlwc2UmJiBpdGVtKQoreworICAgIE1FU1NBR0VfQ0hFQ0sobV9yZW5kZXJpbmdEZXN0aW5hdGlv
bkltYWdlQnVmZmVyLCAiTm8gZGVzdGluYXRpb24gaW1hZ2UgYnVmZmVyIHNwZWNpZmllZC4iKTsK
KyAgICBpdGVtLmFwcGx5KG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1ZmZlci0+Y29udGV4
dCgpKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpoYW5kbGVDbGVhclJlY3Qo
RGlzcGxheUxpc3Q6OkNsZWFyUmVjdCYmIGl0ZW0pCit7CisgICAgTUVTU0FHRV9DSEVDSyhtX3Jl
bmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJObyBkZXN0aW5hdGlvbiBpbWFnZSBidWZm
ZXIgc3BlY2lmaWVkLiIpOworICAgIGl0ZW0uYXBwbHkobV9yZW5kZXJpbmdEZXN0aW5hdGlvbklt
YWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmhhbmRsZUFwcGx5U3Ryb2tlUGF0dGVybihEaXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJu
JiYgaXRlbSkKK3sKKyAgICBNRVNTQUdFX0NIRUNLKG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFn
ZUJ1ZmZlciwgIk5vIGRlc3RpbmF0aW9uIGltYWdlIGJ1ZmZlciBzcGVjaWZpZWQuIik7CisgICAg
aXRlbS5hcHBseShtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7
Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6aGFuZGxlQXBwbHlGaWxsUGF0dGVy
bihEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybiYmIGl0ZW0pCit7CisgICAgTUVTU0FHRV9D
SEVDSyhtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJObyBkZXN0aW5hdGlvbiBp
bWFnZSBidWZmZXIgc3BlY2lmaWVkLiIpOworICAgIGl0ZW0uYXBwbHkobV9yZW5kZXJpbmdEZXN0
aW5hdGlvbkltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OmhhbmRsZUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoRGlzcGxheUxpc3Q6OkFwcGx5
RGV2aWNlU2NhbGVGYWN0b3ImJiBpdGVtKQoreworICAgIE1FU1NBR0VfQ0hFQ0sobV9yZW5kZXJp
bmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLCAiTm8gZGVzdGluYXRpb24gaW1hZ2UgYnVmZmVyIHNw
ZWNpZmllZC4iKTsKKyAgICBpdGVtLmFwcGx5KG1fcmVuZGVyaW5nRGVzdGluYXRpb25JbWFnZUJ1
ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpoYW5k
bGVGbHVzaENvbnRleHQoRGlzcGxheUxpc3Q6OkZsdXNoQ29udGV4dCYmIGl0ZW0pCit7CisgICAg
TUVTU0FHRV9DSEVDSyhtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJObyBkZXN0
aW5hdGlvbiBpbWFnZSBidWZmZXIgc3BlY2lmaWVkLiIpOworICAgIG1fcmVuZGVyaW5nRGVzdGlu
YXRpb25JbWFnZUJ1ZmZlci0+Zmx1c2hDb250ZXh0KCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpEaWRGbHVzaChpdGVtLmlkZW50aWZpZXIoKSwgbV9y
ZW5kZXJpbmdEZXN0aW5hdGlvbkltYWdlQnVmZmVyLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIoKSksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmhhbmRsZU1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1
ZmZlcihEaXNwbGF5TGlzdDo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVy
JiYgaXRlbSkKK3sKKyAgICBtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXIgPSBtX3Jl
bW90ZVJlc291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIoaXRlbS5pZGVudGlmaWVyKCkpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oCmluZGV4IDdkODBiNzI1ODYzOTRlNTVlY2NjYzliZjczZjk1
ZWZiMGNjOTQwNTAuLmFhYTdhODg2NzhkZWY0ZDYzYzA1NmEyNTRhMTk0OWZiYjZlODU3OWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMzgsNiArMzgsOCBAQAogI2luY2x1ZGUgIlJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nVXBkYXRlSUQuaCIKICNp
bmNsdWRlICJTY29wZWRSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmgiCisjaW5jbHVkZSAiU3Ry
ZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5oIgorI2luY2x1ZGUgIlN0cmVhbVNlcnZlckNvbm5lY3Rp
b24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0Rpc3BsYXlMaXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CkBA
IC03MSw3ICs3Myw3IEBAIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQKICAgICAsIHB1Ymxp
YyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQgewogcHVibGlj
OgogCi0gICAgc3RhdGljIFJlZjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGUoR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFt
ZXRlcnMmJik7CisgICAgc3RhdGljIFJlZjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGUo
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlv
blBhcmFtZXRlcnMmJiwgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiYpOwogICAgIHZpcnR1
YWwgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKICAgICB2b2lkIHN0b3BMaXN0ZW5pbmdGb3JJ
UEMoKTsKIApAQCAtODAsOSArODIsMTEgQEAgcHVibGljOgogICAgIC8vIFJlbmRlcmluZyBvcGVy
YXRpb25zLgogICAgIGJvb2wgYXBwbHlNZWRpYUl0ZW0oV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1IYW5kbGUsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOwogCisgICAgLy8gSVBDOjpTdHJl
YW1TZXJ2ZXJDb25uZWN0aW9uCisgICAgdm9pZCBkaWRSZWNlaXZlU3RyZWFtTWVzc2FnZShJUEM6
OlN0cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlJiwgSVBDOjpEZWNvZGVyJik7CisKICAgICAvLyBN
ZXNzYWdlcyB0byBiZSBzZW50LgogICAgIHZvaWQgZGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5k
KEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKTsKLSAgICB2b2lkIGRpZEZsdXNoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaElk
ZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAKICAgICB2
b2lkIHNldE5leHRJdGVtQnVmZmVyVG9SZWFkKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVm
ZmVySWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGRlc3Rp
bmF0aW9uKTsKIApAQCAtOTgsOCArMTAyLDc0IEBAIHB1YmxpYzoKIAogICAgIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRTdGF0ZSBsYXN0S25vd25TdGF0ZSgpIGNvbnN0OwogCisgICAgdm9pZCBoYW5k
bGVTYXZlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlJiYpOworICAgIHZvaWQgaGFuZGxlUmVz
dG9yZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZSYmKTsKKyAgICB2b2lkIGhhbmRsZVRy
YW5zbGF0ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlJiYpOworICAgIHZvaWQgaGFu
ZGxlUm90YXRlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGUmJik7CisgICAgdm9pZCBoYW5k
bGVTY2FsZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGUmJik7CisgICAgdm9pZCBoYW5kbGVT
ZXRDVE0oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENUTSYmKTsKKyAgICB2b2lkIGhhbmRsZUNv
bmNhdGVuYXRlQ1RNKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTSYmKTsKKyAg
ICB2b2lkIGhhbmRsZVNldElubGluZUZpbGxDb2xvcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
SW5saW5lRmlsbENvbG9yJiYpOworICAgIHZvaWQgaGFuZGxlU2V0SW5saW5lU3Ryb2tlQ29sb3Io
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yJiYpOworICAgIHZvaWQg
aGFuZGxlU2V0U3Ryb2tlVGhpY2tuZXNzKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VU
aGlja25lc3MmJik7CisgICAgdm9pZCBoYW5kbGVTZXRTdGF0ZShXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0U3RhdGUmJik7CisgICAgdm9pZCBoYW5kbGVTZXRMaW5lQ2FwKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRMaW5lQ2FwJiYpOworICAgIHZvaWQgaGFuZGxlU2V0TGluZURhc2goV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoJiYpOworICAgIHZvaWQgaGFuZGxlU2V0TGluZUpv
aW4oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luJiYpOworICAgIHZvaWQgaGFuZGxl
U2V0TWl0ZXJMaW1pdChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdCYmKTsKKyAg
ICB2b2lkIGhhbmRsZUNsZWFyU2hhZG93KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRv
dyYmKTsKKyAgICB2b2lkIGhhbmRsZUNsaXAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXAmJik7
CisgICAgdm9pZCBoYW5kbGVDbGlwT3V0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0JiYp
OworICAgIHZvaWQgaGFuZGxlQ2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsaXBUb0ltYWdlQnVmZmVyJiYpOworICAgIHZvaWQgaGFuZGxlQ2xpcE91dFRvUGF0aChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aCYmKTsKKyAgICB2b2lkIGhhbmRsZUNsaXBQ
YXRoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aCYmKTsKKyAgICB2b2lkIGhhbmRsZUJl
Z2luQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpbkNsaXBU
b0RyYXdpbmdDb21tYW5kcyYmKTsKKyAgICB2b2lkIGhhbmRsZUVuZENsaXBUb0RyYXdpbmdDb21t
YW5kcyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzJiYpOwor
ICAgIHZvaWQgaGFuZGxlRHJhd0dseXBocyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBo
cyYmKTsKKyAgICB2b2lkIGhhbmRsZURyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0ltYWdlQnVmZmVyJiYpOworICAgIHZvaWQgaGFuZGxlRHJhd05hdGl2ZUltYWdlKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2UmJik7CisgICAgdm9pZCBoYW5kbGVE
cmF3UGF0dGVybihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm4mJik7CisgICAgdm9p
ZCBoYW5kbGVCZWdpblRyYW5zcGFyZW5jeUxheWVyKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdp
blRyYW5zcGFyZW5jeUxheWVyJiYpOworICAgIHZvaWQgaGFuZGxlRW5kVHJhbnNwYXJlbmN5TGF5
ZXIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyJiYpOworICAgIHZv
aWQgaGFuZGxlRHJhd1JlY3QoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0JiYpOworICAg
IHZvaWQgaGFuZGxlRHJhd0xpbmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lJiYpOwor
ICAgIHZvaWQgaGFuZGxlRHJhd0xpbmVzRm9yVGV4dChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0xpbmVzRm9yVGV4dCYmKTsKKyAgICB2b2lkIGhhbmRsZURyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXImJik7Cisg
ICAgdm9pZCBoYW5kbGVEcmF3RWxsaXBzZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlw
c2UmJik7CisgICAgdm9pZCBoYW5kbGVEcmF3UGF0aChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d1BhdGgmJik7CisgICAgdm9pZCBoYW5kbGVEcmF3Rm9jdXNSaW5nUGF0aChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGgmJik7CisgICAgdm9pZCBoYW5kbGVEcmF3Rm9jdXNS
aW5nUmVjdHMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0cyYmKTsKKyAg
ICB2b2lkIGhhbmRsZUZpbGxSZWN0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdCYmKTsK
KyAgICB2b2lkIGhhbmRsZUZpbGxSZWN0V2l0aENvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUmVjdFdpdGhDb2xvciYmKTsKKyAgICB2b2lkIGhhbmRsZUZpbGxSZWN0V2l0aEdyYWRpZW50
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudCYmKTsKKyAgICB2b2lk
IGhhbmRsZUZpbGxDb21wb3NpdGVkUmVjdChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBv
c2l0ZWRSZWN0JiYpOworICAgIHZvaWQgaGFuZGxlRmlsbFJvdW5kZWRSZWN0KFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3QmJik7CisgICAgdm9pZCBoYW5kbGVGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUmJik7CisgICAgdm9pZCBoYW5kbGVGaWxsTGluZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bExpbmUmJik7CisgICAgdm9pZCBoYW5kbGVGaWxsQXJjKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsQXJjJiYpOworICAgIHZvaWQgaGFuZGxlRmlsbFF1YWRDdXJ2ZShXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbFF1YWRDdXJ2ZSYmKTsKKyAgICB2b2lkIGhhbmRsZUZpbGxCZXppZXJDdXJ2ZShX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEJlemllckN1cnZlJiYpOworICAgIHZvaWQgaGFuZGxl
RmlsbFBhdGgoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoJiYpOworICAgIHZvaWQgaGFu
ZGxlRmlsbEVsbGlwc2UoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxFbGxpcHNlJiYpOworICAg
IHZvaWQgaGFuZGxlR2V0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldFBpeGVs
QnVmZmVyJiYpOworICAgIHZvaWQgaGFuZGxlUHV0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlB1dFBpeGVsQnVmZmVyJiYpOworICAgIHZvaWQgaGFuZGxlUGFpbnRGcmFtZUZvck1l
ZGlhKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWEmJik7CisgICAgdm9p
ZCBoYW5kbGVTdHJva2VSZWN0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0JiYpOwor
ICAgIHZvaWQgaGFuZGxlU3Ryb2tlTGluZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlTGlu
ZSYmKTsKKyAgICB2b2lkIGhhbmRsZVN0cm9rZUFyYyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ry
b2tlQXJjJiYpOworICAgIHZvaWQgaGFuZGxlU3Ryb2tlUXVhZEN1cnZlKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTdHJva2VRdWFkQ3VydmUmJik7CisgICAgdm9pZCBoYW5kbGVTdHJva2VCZXppZXJD
dXJ2ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlQmV6aWVyQ3VydmUmJik7CisgICAgdm9p
ZCBoYW5kbGVTdHJva2VQYXRoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoJiYpOwor
ICAgIHZvaWQgaGFuZGxlU3Ryb2tlRWxsaXBzZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tl
RWxsaXBzZSYmKTsKKyAgICB2b2lkIGhhbmRsZUNsZWFyUmVjdChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xlYXJSZWN0JiYpOworICAgIHZvaWQgaGFuZGxlQXBwbHlTdHJva2VQYXR0ZXJuKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm4mJik7CisgICAgdm9pZCBoYW5kbGVB
cHBseUZpbGxQYXR0ZXJuKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQYXR0ZXJuJiYp
OworICAgIHZvaWQgaGFuZGxlQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvciYmKTsKKyAgICB2b2lkIGhhbmRsZUZsdXNoQ29u
dGV4dChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1c2hDb250ZXh0JiYpOworICAgIHZvaWQgaGFu
ZGxlTWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXImJik7CisKIHBy
aXZhdGU6Ci0gICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZChHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzJiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmKTsKKyAgICBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzJiYsIElQQzo6U3RyZWFtQ29ubmVjdGlv
bkJ1ZmZlciYmKTsKICAgICB2b2lkIHN0YXJ0TGlzdGVuaW5nRm9ySVBDKCk7CiAKICAgICBzdGQ6
Om9wdGlvbmFsPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VOVVNFRF9S
RVRVUk4gZGVjb2RlSXRlbShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGUsIHVpbnQ4X3QqIGhhbmRsZUxvY2F0aW9uKSBvdmVy
cmlkZTsKQEAgLTEyOCwxMCArMTk4LDYgQEAgcHJpdmF0ZToKICAgICBJUEM6OkNvbm5lY3Rpb24q
IG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdWludDY0X3Qg
bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIC8vIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLSAgICBib29sIGRpZFJlY2VpdmVTeW5j
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBVbmlxdWVSZWY8SVBDOjpF
bmNvZGVyPiYpIG92ZXJyaWRlOwotCiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgcmVjZWl2ZWQuCiAg
ICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNv
bnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFdlYkNvcmU6OlBpeGVsRm9ybWF0
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgd2FrZVVw
QW5kQXBwbHlEaXNwbGF5TGlzdChjb25zdCBHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50
cyYpOwpAQCAtMTgxLDYgKzI0Nyw4IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIFJlZjxXb3Jr
UXVldWU+IG1fd29ya1F1ZXVlOworICAgIElQQzo6U3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZSBt
X3N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWU7CisgICAgUmVmUHRyPElQQzo6U3RyZWFtU2VydmVy
Q29ubmVjdGlvbjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kPj4gbV9zdHJlYW1Db25uZWN0aW9uOwog
ICAgIFJlbW90ZVJlc291cmNlQ2FjaGUgbV9yZW1vdGVSZXNvdXJjZUNhY2hlOwogICAgIFJlZjxH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CiAg
ICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cjsKQEAgLTE5Miw2ICsyNjAsNyBAQCBwcml2YXRlOgogICAgIFNjb3BlZFJlbmRlcmluZ1Jlc291
cmNlc1JlcXVlc3QgbV9yZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OwogICAgIFJlZlB0cjxXZWJD
b3JlOjpJbWFnZUJ1ZmZlcj4gbV9jdXJyZW50TWFza0ltYWdlQnVmZmVyOwogICAgIEF0b21pYzxS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGU+IG1fbGFzdEtub3duU3RhdGUgeyBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kU3RhdGU6OkluaXRpYWxpemVkIH07CisgICAgUmVmUHRyPFdlYkNvcmU6Oklt
YWdlQnVmZmVyPiBtX3JlbmRlcmluZ0Rlc3RpbmF0aW9uSW1hZ2VCdWZmZXI7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4K
aW5kZXggMWVmNTZkY2M5NzYyNzRlMzU2YWIyMmI0ZWE0ZTcxYmNmYWMwYjBkZi4uOGUxOWQxODRl
Y2ZkNDQ5Mjc1YzliNTZhNmQ2ZTE0YTRkM2MyOTAwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQubWVzc2FnZXMuaW4KQEAgLTIyLDIyICsyMiw3NCBAQAogCiAjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQogCi1tZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHsKLSAgICBDcmVh
dGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3Jl
OjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgZW51bTp1aW50OF90IFdlYkNvcmU6
OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQotICAgIFdha2VVcEFuZEFwcGx5RGlz
cGxheUxpc3Qoc3RydWN0IFdlYktpdDo6R1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMg
YXJndW1lbnRzKQotICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHVpbnQz
Ml90IGJ5dGVDb3VudCkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxl
KSBTeW5jaHJvbm91cwotICAgIFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKCkgLT4gKElQQzo6
U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMKLSAgICBVcGRhdGVTaGFyZWRNZW1vcnlB
bmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQpIC0+IChXZWJL
aXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZSwgSVBDOjpTZW1hcGhvcmUgc2VtYXBo
b3JlKSBTeW5jaHJvbm91cwotICAgIERlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgp
Ci0gICAgR2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgc3RkOjpvcHRp
b25hbDxkb3VibGU+IHF1YWxpdHksIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29s
dXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoU3RyaW5nIHVybFN0cmluZykg
U3luY2hyb25vdXMKLSAgICBHZXREYXRhRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rvcjx1aW50OF90
PiBkYXRhKSBTeW5jaHJvbm91cwotICAgIEdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVy
KFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgZW51bTp1
aW50OF90IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIC0+
IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKLSAg
ICBDYWNoZU5hdGl2ZUltYWdlKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxl
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKQotICAgIENhY2hlRm9udChJUEM6OkZvbnRSZWZlcmVuY2UgZm9udCkKLSAgICBE
ZWxldGVBbGxGb250cygpCi0gICAgRGlkQ3JlYXRlU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYktp
dDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKQotICAgIFJlbGVhc2VS
ZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCkKLSAgICBGaW5hbGl6ZVJl
bmRlcmluZ1VwZGF0ZShXZWJLaXQ6OlJlbmRlcmluZ1VwZGF0ZUlEIHJlbmRlcmluZ1VwZGF0ZUlE
KQorbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBOb3RSZWZDb3VudGVkIFN0cmVh
bSB7CisgICAgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXpl
LCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIGVudW06dWlu
dDhfdCBXZWJDb3JlOjpQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCwgV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgCisKKyAgICBI
YW5kbGVTYXZlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlIGl0ZW0pCisgICAgSGFuZGxlUmVz
dG9yZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZSBpdGVtKQorICAgIEhhbmRsZVRyYW5z
bGF0ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlIGl0ZW0pCisgICAgSGFuZGxlUm90
YXRlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGUgaXRlbSkKKyAgICBIYW5kbGVTY2FsZShX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGUgaXRlbSkKKyAgICBIYW5kbGVTZXRDVE0oV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldENUTSBpdGVtKQorICAgIEhhbmRsZUNvbmNhdGVuYXRlQ1RNKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTSBpdGVtKQorICAgIEhhbmRsZVNldElu
bGluZUZpbGxDb2xvcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yIGl0
ZW0pOworICAgIEhhbmRsZVNldElubGluZVN0cm9rZUNvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRJbmxpbmVTdHJva2VDb2xvciBpdGVtKTsKKyAgICBIYW5kbGVTZXRTdHJva2VUaGlja25l
c3MoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzcyBpdGVtKTsKKyAgICBI
YW5kbGVTZXRTdGF0ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGUgaXRlbSk7CisgICAg
SGFuZGxlU2V0TGluZUNhcChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcCBpdGVtKQor
ICAgIEhhbmRsZVNldExpbmVEYXNoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCBp
dGVtKQorICAgIEhhbmRsZVNldExpbmVKb2luKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5l
Sm9pbiBpdGVtKQorICAgIEhhbmRsZVNldE1pdGVyTGltaXQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldE1pdGVyTGltaXQgaXRlbSkKKyAgICBIYW5kbGVDbGVhclNoYWRvdyhXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q2xlYXJTaGFkb3cgaXRlbSkKKyAgICBIYW5kbGVDbGlwKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpDbGlwIGl0ZW0pCisgICAgSGFuZGxlQ2xpcE91dChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xpcE91dCBpdGVtKQorICAgIEhhbmRsZUNsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDbGlwVG9JbWFnZUJ1ZmZlciBpdGVtKQorICAgIEhhbmRsZUNsaXBPdXRUb1Bh
dGgoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGggaXRlbSkKKyAgICBIYW5kbGVD
bGlwUGF0aChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGggaXRlbSkKKyAgICBIYW5kbGVC
ZWdpbkNsaXBUb0RyYXdpbmdDb21tYW5kcyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5DbGlw
VG9EcmF3aW5nQ29tbWFuZHMgaXRlbSkKKyAgICBIYW5kbGVFbmRDbGlwVG9EcmF3aW5nQ29tbWFu
ZHMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZENsaXBUb0RyYXdpbmdDb21tYW5kcyBpdGVtKQor
ICAgIEhhbmRsZURyYXdHbHlwaHMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHMgaXRl
bSkKKyAgICBIYW5kbGVEcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJ
bWFnZUJ1ZmZlciBpdGVtKQorICAgIEhhbmRsZURyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlIGl0ZW0pCisgICAgSGFuZGxlRHJhd1BhdHRlcm4oV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuIGl0ZW0pCisgICAgSGFuZGxlQmVnaW5UcmFu
c3BhcmVuY3lMYXllcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXll
ciBpdGVtKQorICAgIEhhbmRsZUVuZFRyYW5zcGFyZW5jeUxheWVyKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllciBpdGVtKQorICAgIEhhbmRsZURyYXdSZWN0KFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdCBpdGVtKQorICAgIEhhbmRsZURyYXdMaW5lKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZSBpdGVtKQorICAgIEhhbmRsZURyYXdMaW5lc0ZvclRl
eHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgaXRlbSkKKyAgICBIYW5k
bGVEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyIGl0ZW0pCisgICAgSGFuZGxlRHJhd0VsbGlwc2UoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlIGl0ZW0pCisgICAgSGFuZGxlRHJhd1BhdGgoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoIGl0ZW0pCisgICAgSGFuZGxlRHJhd0ZvY3VzUmluZ1Bh
dGgoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoIGl0ZW0pCisgICAgSGFu
ZGxlRHJhd0ZvY3VzUmluZ1JlY3RzKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5n
UmVjdHMgaXRlbSkKKyAgICBIYW5kbGVGaWxsUmVjdChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJlY3QgaXRlbSkKKyAgICBIYW5kbGVGaWxsUmVjdFdpdGhDb2xvcihXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3IgaXRlbSkKKyAgICBIYW5kbGVGaWxsUmVjdFdpdGhHcmFk
aWVudChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQgaXRlbSkKKyAg
ICBIYW5kbGVGaWxsQ29tcG9zaXRlZFJlY3QoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21w
b3NpdGVkUmVjdCBpdGVtKQorICAgIEhhbmRsZUZpbGxSb3VuZGVkUmVjdChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0IGl0ZW0pCisgICAgSGFuZGxlRmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIGl0
ZW0pCisgICAgSGFuZGxlRmlsbExpbmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxMaW5lIGl0
ZW0pCisgICAgSGFuZGxlRmlsbEFyYyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEFyYyBpdGVt
KQorICAgIEhhbmRsZUZpbGxRdWFkQ3VydmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxRdWFk
Q3VydmUgaXRlbSkKKyAgICBIYW5kbGVGaWxsQmV6aWVyQ3VydmUoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxCZXppZXJDdXJ2ZSBpdGVtKQorICAgIEhhbmRsZUZpbGxQYXRoKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUGF0aCBpdGVtKQorICAgIEhhbmRsZUZpbGxFbGxpcHNlKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZSBpdGVtKQorICAgIEhhbmRsZUdldFBpeGVsQnVmZmVy
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRQaXhlbEJ1ZmZlciBpdGVtKQorICAgIEhhbmRsZVB1
dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRQaXhlbEJ1ZmZlciBpdGVtKQor
ICAgIEhhbmRsZVBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UGFpbnRG
cmFtZUZvck1lZGlhIGl0ZW0pCisgICAgSGFuZGxlU3Ryb2tlUmVjdChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U3Ryb2tlUmVjdCBpdGVtKQorICAgIEhhbmRsZVN0cm9rZUxpbmUoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlN0cm9rZUxpbmUgaXRlbSkKKyAgICBIYW5kbGVTdHJva2VBcmMoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlN0cm9rZUFyYyBpdGVtKQorICAgIEhhbmRsZVN0cm9rZVF1YWRDdXJ2ZShX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUXVhZEN1cnZlIGl0ZW0pCisgICAgSGFuZGxlU3Ry
b2tlQmV6aWVyQ3VydmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUJlemllckN1cnZlIGl0
ZW0pCisgICAgSGFuZGxlU3Ryb2tlUGF0aChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0
aCBpdGVtKQorICAgIEhhbmRsZVN0cm9rZUVsbGlwc2UoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0
cm9rZUVsbGlwc2UgaXRlbSkKKyAgICBIYW5kbGVDbGVhclJlY3QoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsZWFyUmVjdCBpdGVtKQorICAgIEhhbmRsZUFwcGx5U3Ryb2tlUGF0dGVybihXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuIGl0ZW0pCisgICAgSGFuZGxlQXBwbHlG
aWxsUGF0dGVybihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybiBpdGVtKQor
ICAgIEhhbmRsZUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IgaXRlbSkKKyAgICBIYW5kbGVGbHVzaENvbnRleHQoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZsdXNoQ29udGV4dCBpdGVtKQorICAgIEhhbmRsZU1ldGFDb21tYW5k
Q2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6TWV0YUNv
bW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyIGl0ZW0pCiB9CiAKICNlbmRpZiAvLyBF
TkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9Bcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVu
dENvZGVycy5jcHAKaW5kZXggYTMyMDU1MTg3OThiNzRkY2VkYjhhMDEzZjljOWM5ODg1YWFlNjYx
Ni4uZTdmMjc4MDM2MmRkMjAzNzQzNGNhMWNiMzkwZGRlNmVmNzkxNTkzNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcApAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIlByaXZhdGVDbGlja01lYXN1cmVtZW50RGVjb2Rlci5oIgogI2luY2x1ZGUg
IlByaXZhdGVDbGlja01lYXN1cmVtZW50RW5jb2Rlci5oIgogI2luY2x1ZGUgIlN0cmVhbUNvbm5l
Y3Rpb25FbmNvZGVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IApAQCAtMjE4LDYgKzIxOSw3IEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29k
ZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNICiB9CiAKICNpZiBI
QVZFKEFVRElUX1RPS0VOKQorCiB2b2lkIEFyZ3VtZW50Q29kZXI8YXVkaXRfdG9rZW5fdD46OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBhdWRpdF90b2tlbl90JiBhdWRpdFRva2VuKQog
ewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGF1ZGl0VG9r
ZW4udmFsKTsgaSsrKQpAQCAtMjMyLDE1ICsyMzQsNyBAQCBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBBcmd1bWVudENvZGVyPGF1ZGl0X3Rva2VuX3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
YQogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KLSNlbmRpZgotCi12b2lkIEFyZ3VtZW50Q29k
ZXI8TW9ub3N0YXRlPjo6ZW5jb2RlKEVuY29kZXImLCBjb25zdCBNb25vc3RhdGUmKQotewotfQog
Ci1XQVJOX1VOVVNFRF9SRVRVUk4gc3RkOjpvcHRpb25hbDxNb25vc3RhdGU+IEFyZ3VtZW50Q29k
ZXI8TW9ub3N0YXRlPjo6ZGVjb2RlKERlY29kZXImKQotewotICAgIHJldHVybiBNb25vc3RhdGUg
eyB9OwotfQorI2VuZGlmIC8vIEhBVkUoQVVESVRfVE9LRU4pCiAKIH0gLy8gbmFtZXNwYWNlIElQ
QwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMu
aCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKaW5kZXggYThj
ODkzZjBjNTI0MGE4ODg5YzM0NTE0ZjlmYjFlZmVlMGQ2MjcwYS4uZmI3YjY4NzMwODJlOTZlMWMz
OWNhNzZlZGEzM2VhYWIxOTUxYzc2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9B
cmd1bWVudENvZGVycy5oCkBAIC00MCw2ICs0MCwyMiBAQAogCiBuYW1lc3BhY2UgSVBDIHsKIAor
I2RlZmluZSBERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFR5cGUpIFwKKyAgICB0ZW1wbGF0
ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFR5cGU+IHsgXAorICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFbmNvZGVyPiB2b2lkIHN0YXRpYyBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
VHlwZSYgdmFsdWUpIHsgU2ltcGxlQXJndW1lbnRDb2RlcjxUeXBlPjo6ZW5jb2RlKGVuY29kZXIs
IHZhbHVlKTsgfSBcCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IGJvb2wgc3Rh
dGljIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBUeXBlJiB2YWx1ZSkgeyByZXR1cm4gU2ltcGxl
QXJndW1lbnRDb2RlcjxUeXBlPjo6ZGVjb2RlKGRlY29kZXIsIHZhbHVlKTsgfSBcCisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFR5cGU+IGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKSBcCisgICAgICAgIHsgXAorICAgICAgICAgICAgVHlwZSB2
YWx1ZTsgXAorICAgICAgICAgICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgdmFsdWUpKSBcCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgXAorICAgICAgICAgICAgcmV0dXJuIHZh
bHVlOyBcCisgICAgICAgIH0gXAorICAgIH07IFwKKyAgICB0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50
Q29kZXI8VHlwZSwgdm9pZD46OmVuY29kZTxFbmNvZGVyPihFbmNvZGVyJiwgY29uc3QgVHlwZSYp
OyBcCisgICAgdGVtcGxhdGUgYm9vbCBBcmd1bWVudENvZGVyPFR5cGU+OjpkZWNvZGU8RGVjb2Rl
cj4oRGVjb2RlciYsIFR5cGUmKTsgXAorICAgIHRlbXBsYXRlIHN0ZDo6b3B0aW9uYWw8VHlwZT4g
QXJndW1lbnRDb2RlcjxUeXBlPjo6ZGVjb2RlPERlY29kZXI+KERlY29kZXImKTsKKwogLy8gQW4g
YXJndW1lbnQgY29kZXIgd29ya3Mgb24gUE9EIHR5cGVzCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgU2ltcGxlQXJndW1lbnRDb2RlciB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rl
cj4KQEAgLTQ4LDYgKzY0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFNpbXBsZUFy
Z3VtZW50Q29kZXIgewogICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmdCksIHNpemVvZihUKSwgYWxpZ25vZihUKSk7
CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4KICAgICBzdGF0aWMgV0FS
Tl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFQmIHQpCiAgICAg
ewogICAgICAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oJnQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpOwpAQCAtMTA3LDEy
ICsxMjQsMTQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8QXJy
YXlSZWZlcmVuY2U8VCwgYXJyYXlSZWZlcmVuY2VEeW5hbWkKIH07CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGVyPE9wdGlvblNldDxUPj4geworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEVuY29kZXI+CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IE9wdGlvblNldDxUPiYgb3B0aW9uU2V0KQogICAgIHsKICAgICAgICAgQVNTRVJU
KFdURjo6aXNWYWxpZE9wdGlvblNldChvcHRpb25TZXQpKTsKICAgICAgICAgZW5jb2RlciA8PCBv
cHRpb25TZXQudG9SYXcoKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVy
PgogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgT3B0aW9uU2V0PFQ+JiBvcHRpb25TZXQpCiAgICAgewogICAgICAgICB0eXBlbmFtZSBP
cHRpb25TZXQ8VD46OlN0b3JhZ2VUeXBlIHZhbHVlOwpAQCAtMTI0LDYgKzE0Myw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGVyPE9wdGlvblNldDxUPj4gewogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVy
PgogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPE9wdGlvblNldDxUPj4gZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiAgICAgewogICAgICAgICBzdGQ6Om9wdGlvbmFsPHR5cGVuYW1lIE9wdGlvblNl
dDxUPjo6U3RvcmFnZVR5cGU+IHZhbHVlOwpAQCAtMTg3LDYgKzIwNyw3IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGVyPHN0ZDo6b3B0aW9uYWw8VD4+IHsKIH07CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGVyPEJveDxUPj4geworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IEJveDxUPiYgYm94KQogICAgIHsKICAgICAgICAgaWYgKCFib3gp
IHsKQEAgLTE5OCw2ICsyMTksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJndW1l
bnRDb2RlcjxCb3g8VD4+IHsKICAgICAgICAgZW5jb2RlciA8PCAqYm94LmdldCgpOwogICAgIH0K
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+CiAgICAgc3RhdGljIFdBUk5fVU5VU0VE
X1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBCb3g8VD4mIGJveCkKICAgICB7
CiAgICAgICAgIGJvb2wgaXNFbmdhZ2VkOwpAQCAtMjE3LDYgKzIzOSw3IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGVyPEJveDxUPj4gewogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgogICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPEJveDxUPj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewog
ICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGlzRW5nYWdlZDsKQEAgLTIzNSwxMSArMjU4LDEz
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGVyPEJveDxUPj4gewog
fTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RydWN0IEFyZ3VtZW50Q29k
ZXI8c3RkOjpwYWlyPFQsIFU+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAg
ICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjpwYWlyPFQs
IFU+JiBwYWlyKQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBwYWlyLmZpcnN0IDw8IHBhaXIu
c2Vjb25kOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+CiAgICAgc3Rh
dGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6
OnBhaXI8VCwgVT4mIHBhaXIpCiAgICAgewogICAgICAgICBUIGZpcnN0OwpAQCAtMjU1LDYgKzI4
MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0cnVjdCBBcmd1bWVudENv
ZGVyPHN0ZDo6cGFpcjxULCBVPj4gewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPHN0
ZDo6cGFpcjxULCBVPj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewogICAgICAgICBz
dGQ6Om9wdGlvbmFsPFQ+IGZpcnN0OwpAQCAtMzY1LDExICszOTEsMTMgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gRWxlbWVudHM+IHN0cnVjdCBBcmd1bWVudENvZGVyPHN0ZDo6dHVwbGU8RWxlbWVu
dHMuLi4+PiB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1
ZVR5cGU+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZh
bHVlVHlwZT4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXVEY6OktleVZhbHVlUGFpcjxLZXlU
eXBlLCBWYWx1ZVR5cGU+JiBwYWlyKQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBwYWlyLmtl
eSA8PCBwYWlyLnZhbHVlOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+
CiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBXVEY6OktleVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+JiBwYWlyKQogICAgIHsK
ICAgICAgICAgS2V5VHlwZSBrZXk7CkBAIC0zOTcsNiArNDI1LDcgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW4KICAgICAgICAgICAgIGVuY29kZXIgPDwgdmVjdG9yW2ldOwogICAgIH0KIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+CiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiB2ZWN0b3IpCiAgICAgewogICAgICAgICBz
dGQ6Om9wdGlvbmFsPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT4+IG9wdGlvbmFsOwpAQCAtNDM2LDYgKzQ2NSw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBz
aXplX3QgbWluCiAgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICog
c2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKICAgICB9CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRGVjb2Rlcj4KICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERl
Y29kZXImIGRlY29kZXIsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eT4mIHZlY3RvcikKICAgICB7CiAgICAgICAgIHVpbnQ2NF90IGRlY29kZWRT
aXplOwpAQCAtNDUwLDcgKzQ4MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluCiAgICAgICAg
IC8vIFNpbmNlIHdlIGtub3cgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGVsZW1lbnRzLCB3ZSBjYW4g
YWxsb2NhdGUgdGhlIHZlY3RvciBpbgogICAgICAgICAvLyBvbmUgZmVsbCBzd29vcC4gQmVmb3Jl
IGFsbG9jYXRpbmcgd2UgbXVzdCBob3dldmVyIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1
ZmZlcgogICAgICAgICAvLyBpcyBiaWcgZW5vdWdoLgotICAgICAgICBpZiAoIWRlY29kZXIuYnVm
ZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjxUPihzaXplKSkKKyAgICAgICAgaWYgKCFkZWNvZGVy
LnRlbXBsYXRlIGJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW48VD4oc2l6ZSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiB0ZW1wOwpAQCAtNDk3LDYgKzUyNyw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyLCBzaXplX3QgbWluCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1l
IE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBl
bmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIEhhc2hUYWJsZVRyYWl0cz4gc3RydWN0IEFy
Z3VtZW50Q29kZXI8SGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRz
QXJnLCBNYXBwZWRUcmFpdHNBcmcsIEhhc2hUYWJsZVRyYWl0cz4+IHsKICAgICB0eXBlZGVmIEhh
c2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJh
aXRzQXJnLCBIYXNoVGFibGVUcmFpdHM+IEhhc2hNYXBUeXBlOwogCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgSGFzaE1hcFR5cGUmIGhhc2hNYXApCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0
YXRpY19jYXN0PHVpbnQzMl90PihoYXNoTWFwLnNpemUoKSk7CkBAIC01MDQsNiArNTM1LDcgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhh
c2hBcmcsIHR5cGVuYW1lIEtleVRyYWkKICAgICAgICAgICAgIGVuY29kZXIgPDwgKml0OwogICAg
IH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+CiAgICAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8SGFzaE1hcFR5cGU+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAg
ICAgdWludDMyX3QgaGFzaE1hcFNpemU7CkBAIC01MzQsNiArNTY2LDcgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVu
YW1lIEtleVRyYWkKICAgICAgICAgcmV0dXJuIGhhc2hNYXA7CiAgICAgfQogCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRGVjb2Rlcj4KICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wg
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEhhc2hNYXBUeXBlJiBoYXNoTWFwKQogICAgIHsKICAg
ICAgICAgc3RkOjpvcHRpb25hbDxIYXNoTWFwVHlwZT4gdGVtcEhhc2hNYXA7CkBAIC01NDgsNiAr
NTgxLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWkKIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFy
ZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBIYXNo
VGFibGVUcmFpdHM+IHN0cnVjdCBBcmd1bWVudENvZGVyPEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJn
LCBLZXlUcmFpdHNBcmcsIEhhc2hUYWJsZVRyYWl0cz4+IHsKICAgICB0eXBlZGVmIEhhc2hTZXQ8
S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIEhhc2hUYWJsZVRyYWl0cz4gSGFzaFNldFR5
cGU7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBIYXNoU2V0VHlwZSYgaGFzaFNldCkKICAgICB7
CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGhhc2hTZXQuc2l6ZSgp
KTsKQEAgLTU1NSw2ICs1ODksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgSGFzaAogICAgICAgICAg
ICAgZW5jb2RlciA8PCAqaXQ7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rl
cj4KICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIEhhc2hTZXRUeXBlJiBoYXNoU2V0KQogICAgIHsKICAgICAgICAgc3RkOjpvcHRpb25h
bDxIYXNoU2V0VHlwZT4gdGVtcEhhc2hTZXQ7CkBAIC01NjYsNiArNjAxLDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcs
IHR5cGVuYW1lIEhhc2gKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRGVjb2Rlcj4KICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxIYXNoU2V0VHlw
ZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewogICAgICAgICB1aW50NjRfdCBoYXNo
U2V0U2l6ZTsKQEAgLTU5NSw2ICs2MzEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgSGFzaAogdGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFp
dHNBcmc+IHN0cnVjdCBBcmd1bWVudENvZGVyPEhhc2hDb3VudGVkU2V0PEtleUFyZywgSGFzaEFy
ZywgS2V5VHJhaXRzQXJnPj4gewogICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8S2V5QXJnLCBI
YXNoQXJnLCBLZXlUcmFpdHNBcmc+IEhhc2hDb3VudGVkU2V0VHlwZTsKICAgICAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBIYXNoQ291bnRlZFNldFR5cGUmIGhhc2hDb3VudGVkU2V0KQogICAgIHsK
ICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaGFzaENvdW50ZWRTZXQu
c2l6ZSgpKTsKQEAgLTYwNSw2ICs2NDIsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZz4gc3RydWN0IEFyZ3VtZQogICAg
ICAgICB9CiAgICAgfQogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+CiAgICAg
c3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBI
YXNoQ291bnRlZFNldFR5cGUmIGhhc2hDb3VudGVkU2V0KQogICAgIHsKICAgICAgICAgdWludDY0
X3QgaGFzaENvdW50ZWRTZXRTaXplOwpAQCAtNjM2LDYgKzY3NCw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnPiBzdHJ1
Y3QgQXJndW1lCiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEVy
cm9yVHlwZT4gc3RydWN0IEFyZ3VtZW50Q29kZXI8RXhwZWN0ZWQ8VmFsdWVUeXBlLCBFcnJvclR5
cGU+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgRXhwZWN0ZWQ8VmFsdWVUeXBlLCBFcnJvclR5
cGU+JiBleHBlY3RlZCkKICAgICB7CiAgICAgICAgIGlmICghZXhwZWN0ZWQuaGFzX3ZhbHVlKCkp
IHsKQEAgLTY0Nyw2ICs2ODYsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVu
YW1lIEVycm9yVHlwZT4gc3RydWN0IEFyZ3VtZW50Q29kZXI8RXhwZWN0ZWQ8VgogICAgICAgICBl
bmNvZGVyIDw8IGV4cGVjdGVkLnZhbHVlKCk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRGVjb2Rlcj4KICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxFeHBlY3RlZDxWYWx1ZVR5cGUs
IEVycm9yVHlwZT4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgc3Rk
OjpvcHRpb25hbDxib29sPiBoYXNWYWx1ZTsKQEAgLTY3Myw2ICs3MTMsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEVycm9yVHlwZT4gc3RydWN0IEFyZ3VtZW50Q29k
ZXI8RXhwZWN0ZWQ8VgogCiB0ZW1wbGF0ZTxzaXplX3QgaW5kZXgsIHR5cGVuYW1lLi4uIFR5cGVz
Pgogc3RydWN0IFZhcmlhbnRDb2RlciB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4K
ICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RGOjpWYXJp
YW50PFR5cGVzLi4uPiYgdmFyaWFudCwgdW5zaWduZWQgaSkKICAgICB7CiAgICAgICAgIGlmIChp
ID09IGluZGV4KSB7CkBAIC02ODIsNiArNzIzLDcgQEAgc3RydWN0IFZhcmlhbnRDb2RlciB7CiAg
ICAgICAgIFZhcmlhbnRDb2RlcjxpbmRleCAtIDEsIFR5cGVzLi4uPjo6ZW5jb2RlKGVuY29kZXIs
IHZhcmlhbnQsIGkpOwogICAgIH0KICAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVy
PgogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdURjo6VmFyaWFudDxUeXBlcy4uLj4+IGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCB1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgaWYgKGkgPT0g
aW5kZXgpIHsKQEAgLTY5NywxMiArNzM5LDE0IEBAIHN0cnVjdCBWYXJpYW50Q29kZXIgewogCiB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4KIHN0cnVjdCBWYXJpYW50Q29kZXI8MCwgVHlwZXMu
Li4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+JiB2YXJp
YW50LCB1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChpLCAhaSk7CiAg
ICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8MD4odmFyaWFudCk7CiAgICAgfQogICAgIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V1RG
OjpWYXJpYW50PFR5cGVzLi4uPj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHVuc2lnbmVkIGkp
CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGksICFpKTsKQEAgLTcxNSw2ICs3NTksNyBA
QCBzdHJ1Y3QgVmFyaWFudENvZGVyPDAsIFR5cGVzLi4uPiB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBUeXBlcz4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V1RGOjpWYXJpYW50PFR5cGVzLi4u
Pj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CiAgICAgc3RhdGljIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdURjo6VmFyaWFudDxUeXBlcy4uLj4mIHZhcmlh
bnQpCiAgICAgewogICAgICAgICB1bnNpZ25lZCBpID0gdmFyaWFudC5pbmRleCgpOwpAQCAtNzIy
LDYgKzc2Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+PiB7CiAgICAgICAgIFZhcmlhbnRDb2RlcjxzaXpl
b2YuLi4oVHlwZXMpIC0gMSwgVHlwZXMuLi4+OjplbmNvZGUoZW5jb2RlciwgdmFyaWFudCwgaSk7
CiAgICAgfQogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+CiAgICAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8V1RGOjpWYXJpYW50PFR5cGVzLi4uPj4gZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCiAgICAgewogICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBpOwpAQCAtNzcz
LDggKzgxOSwxNCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPGF1ZGl0X3Rva2Vu
X3Q+IHsKICNlbmRpZgogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPE1vbm9zdGF0
ZT4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgTW9ub3N0YXRlJik7
Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TW9ub3N0YXRlPiBkZWNvZGUoRGVjb2RlciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVu
Y29kZXImLCBjb25zdCBNb25vc3RhdGUmKSB7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIERl
Y29kZXI+CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TW9ub3N0YXRlPiBkZWNvZGUoRGVjb2Rl
ciYpCisgICAgeworICAgICAgICByZXR1cm4gTW9ub3N0YXRlIHsgfTsKKyAgICB9CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5j
cHAKaW5kZXggZDZlYTljOGNhNTNjOWQ1ODAyYzYwYjZkM2RkNDMyYTE4NWM5YmRhOS4uZWJlMjdj
MzMyZGYwMmRjNmJjYmJjODYyMjRjZmFmMjVkYTk1M2M2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUu
aD4KIAorI2luY2x1ZGUgPGRiZ19jb2xvcnMuaD4KKwogI2lmIFBMQVRGT1JNKENPQ09BKQogI2lu
Y2x1ZGUgIk1hY2hNZXNzYWdlLmgiCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL1N0cmVhbUNsaWVudENvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL1N0cmVhbUNsaWVudENvbm5lY3Rpb24uaAppbmRleCAzZTJjMjRhYzk0NzdlODRl
MGJhMzcxMTQ2NDgyN2JhYWU4ZTM5ZDI1Li5iNTc2YTdkZTdmNWM4YmZmYjA5MzY4ZjhhMmZjMjM3
NWI2MDE3NTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1D
bGllbnRDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFt
Q2xpZW50Q29ubmVjdGlvbi5oCkBAIC00Nyw2ICs0Nyw3IEBAIG5hbWVzcGFjZSBJUEMgewogLy8K
IC8vIFRoZSBTdHJlYW1DbGllbnRDb25uZWN0aW9uIHRydXN0cyB0aGUgU3RyZWFtU2VydmVyQ29u
bmVjdGlvbi4KIGNsYXNzIFN0cmVhbUNsaWVudENvbm5lY3Rpb24gZmluYWwgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cmVhbUNsaWVu
dENvbm5lY3Rpb24pOwogcHVibGljOgogICAgIFN0cmVhbUNsaWVudENvbm5lY3Rpb24oQ29ubmVj
dGlvbiYsIHNpemVfdCBidWZmZXJTaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuY3BwIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5jcHAKaW5kZXggMjlmNzcxYTk3
NTgzMzIwNTgwMTY1NzkwYjUxNzMwMTQzMTk1ZjVhMy4uMDY1ZjdlMTljMzgxNjg0Y2YxZjM4Y2U1
NmY5Y2ViYmNhNWIzNTAzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
U3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5jcHAKQEAgLTI5LDcgKzI5LDEyIEBACiBu
YW1lc3BhY2UgSVBDIHsKIAogU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZTo6U3RyZWFtQ29ubmVj
dGlvbldvcmtRdWV1ZShjb25zdCBjaGFyKiBuYW1lKQotICAgIDogbV9uYW1lKG5hbWUpCisgICAg
OiBtX3Byb2Nlc3NpbmdRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZShuYW1lLCBXb3JrUXVldWU6OlR5
cGU6OlNlcmlhbCwgV29ya1F1ZXVlOjpRT1M6OlVzZXJJbnRlcmFjdGl2ZSkpCit7Cit9CisKK1N0
cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWU6OlN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUoV29ya1F1
ZXVlJiBxdWV1ZSkKKyAgICA6IG1fcHJvY2Vzc2luZ1F1ZXVlKHF1ZXVlKQogewogfQogCkBAIC01
NSw3ICs2MCw3IEBAIHZvaWQgU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZTo6YWRkU3RyZWFtQ29u
bmVjdGlvbihTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZSYKIAogdm9pZCBTdHJlYW1Db25uZWN0
aW9uV29ya1F1ZXVlOjpyZW1vdmVTdHJlYW1Db25uZWN0aW9uKFN0cmVhbVNlcnZlckNvbm5lY3Rp
b25CYXNlJiBjb25uZWN0aW9uKQogewotICAgIEFTU0VSVChtX3Byb2Nlc3NpbmdUaHJlYWQpOwor
ICAgIEFTU0VSVChtX2lzUHJvY2Vzc2luZyk7CiAgICAgewogICAgICAgICBMb2NrZXIgbG9ja2Vy
IHsgbV9sb2NrIH07CiAgICAgICAgIG1fY29ubmVjdGlvbnMucmVtb3ZlKGNvbm5lY3Rpb24pOwpA
QCAtNjcsMTEgKzcyLDExIEBAIHZvaWQgU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZTo6cmVtb3Zl
U3RyZWFtQ29ubmVjdGlvbihTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzCiB2b2lkIFN0cmVhbUNv
bm5lY3Rpb25Xb3JrUXVldWU6OnN0b3AoKQogewogICAgIG1fc2hvdWxkUXVpdCA9IHRydWU7Ci0g
ICAgaWYgKCFtX3Byb2Nlc3NpbmdUaHJlYWQpCisgICAgaWYgKCFtX2lzUHJvY2Vzc2luZykKICAg
ICAgICAgcmV0dXJuOwogICAgIG1fd2FrZVVwU2VtYXBob3JlLnNpZ25hbCgpOwotICAgIG1fcHJv
Y2Vzc2luZ1RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKLSAgICBtX3Byb2Nlc3NpbmdUaHJl
YWQgPSBudWxscHRyOworICAgIG1fcHJvY2Vzc2luZ1F1ZXVlLT5kaXNwYXRjaFN5bmMoW10geyB9
KTsKKyAgICBtX2lzUHJvY2Vzc2luZyA9IGZhbHNlOwogfQogCiB2b2lkIFN0cmVhbUNvbm5lY3Rp
b25Xb3JrUXVldWU6Ondha2VVcCgpCkBAIC04NiwxMiArOTEsMTIgQEAgSVBDOjpTZW1hcGhvcmUm
IFN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWU6Ondha2VVcFNlbWFwaG9yZSgpCiAKIHZvaWQgU3Ry
ZWFtQ29ubmVjdGlvbldvcmtRdWV1ZTo6d2FrZVVwUHJvY2Vzc2luZ1RocmVhZCgpCiB7Ci0gICAg
aWYgKG1fcHJvY2Vzc2luZ1RocmVhZCkgeworICAgIGlmIChtX2lzUHJvY2Vzc2luZykgewogICAg
ICAgICBtX3dha2VVcFNlbWFwaG9yZS5zaWduYWwoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGF1dG8gdGFzayA9IFt0aGlzXSgpIG11dGFibGUgeworICAgIG1fcHJvY2Vzc2luZ1F1
ZXVlLT5kaXNwYXRjaChbdGhpc10oKSBtdXRhYmxlIHsKICAgICAgICAgZm9yICg7OykgewogICAg
ICAgICAgICAgcHJvY2Vzc1N0cmVhbXMoKTsKICAgICAgICAgICAgIGlmIChtX3Nob3VsZFF1aXQp
IHsKQEAgLTEwMCw4ICsxMDUsOCBAQCB2b2lkIFN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWU6Ondh
a2VVcFByb2Nlc3NpbmdUaHJlYWQoKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV93YWtl
VXBTZW1hcGhvcmUud2FpdCgpOwogICAgICAgICB9Ci0gICAgfTsKLSAgICBtX3Byb2Nlc3NpbmdU
aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShtX25hbWUsIFdURk1vdmUodGFzayksIFRocmVhZFR5cGU6
OkdyYXBoaWNzLCBUaHJlYWQ6OlFPUzo6VXNlckludGVyYWN0aXZlKTsKKyAgICB9KTsKKyAgICBt
X2lzUHJvY2Vzc2luZyA9IHRydWU7CiB9CiAKIHZvaWQgU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1
ZTo6cHJvY2Vzc1N0cmVhbXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5oCmluZGV4IDAwNGIzMjk4YWQ0OTAxMGUxZGYx
MTczZGEwZTYyZmJiYWE4NDQ3ZWUuLmJjZmYzNTllM2MxNjUxMDdiMTg2MDk1Nzk5MTQ5Y2YyNWRk
ZTMxOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5l
Y3Rpb25Xb3JrUXVldWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1D
b25uZWN0aW9uV29ya1F1ZXVlLmgKQEAgLTMzLDEyICszMywxNCBAQAogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiBuYW1lc3BhY2UgSVBDIHsKIAogY2xh
c3MgU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZSBmaW5hbCA6IHB1YmxpYyBGdW5jdGlvbkRpc3Bh
dGNoZXIgewogcHVibGljOgogICAgIFN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUoY29uc3QgY2hh
ciopOworICAgIFN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUoV29ya1F1ZXVlJik7CiAgICAgflN0
cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUoKSA9IGRlZmF1bHQ7CiAgICAgdm9pZCBhZGRTdHJlYW1D
b25uZWN0aW9uKFN0cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlJik7CiAgICAgdm9pZCByZW1vdmVT
dHJlYW1Db25uZWN0aW9uKFN0cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlJik7CkBAIC01MywxMCAr
NTUsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgd2FrZVVwUHJvY2Vzc2luZ1RocmVhZCgpOwogICAg
IHZvaWQgcHJvY2Vzc1N0cmVhbXMoKTsKIAotICAgIGNvbnN0IGNoYXIqIGNvbnN0IG1fbmFtZTsK
LQogICAgIFNlbWFwaG9yZSBtX3dha2VVcFNlbWFwaG9yZTsKLSAgICBSZWZQdHI8VGhyZWFkPiBt
X3Byb2Nlc3NpbmdUaHJlYWQ7CisgICAgUmVmPFdvcmtRdWV1ZT4gbV9wcm9jZXNzaW5nUXVldWU7
CisgICAgYm9vbCBtX2lzUHJvY2Vzc2luZyB7IGZhbHNlIH07CiAKICAgICBzdGQ6OmF0b21pYzxi
b29sPiBtX3Nob3VsZFF1aXQgeyBmYWxzZSB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtp
dC9tZXNzYWdlcy5weQppbmRleCAzMzRiODFjNmQ1ZGM4NTEzOTZlMjE0OTgwOTMyZjJjNjg5MjI5
MDA3Li42MjE1MmIyMjkyMzdmMTAzNTI2ODdmYzBiY2RjN2EzMTI0ODU3ZTgwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTY5MCwxMiArNjkwLDE4IEBAIGRl
ZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgogICAgICAgICAnV2FsbFRpbWUnOiBbJzx3dGYvV2Fs
bFRpbWUuaD4nXSwKICAgICAgICAgJ1N0cmluZyc6IFsnPHd0Zi90ZXh0L1dURlN0cmluZy5oPidd
LAogICAgICAgICAnUEFMOjpTZXNzaW9uSUQnOiBbJzxwYWwvU2Vzc2lvbklELmg+J10sCisgICAg
ICAgICdXZWJDb3JlOjpBcmNEYXRhJzogWyc8V2ViQ29yZS9JbmxpbmVQYXRoRGF0YS5oPiddLAog
ICAgICAgICAnV2ViQ29yZTo6QXV0b3BsYXlFdmVudEZsYWdzJzogWyc8V2ViQ29yZS9BdXRvcGxh
eUV2ZW50Lmg+J10sCisgICAgICAgICdXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEnOiBbJzxXZWJD
b3JlL0lubGluZVBhdGhEYXRhLmg+J10sCisgICAgICAgICdXZWJDb3JlOjpCbGVuZE1vZGUnOiBb
JzxXZWJDb3JlL0dyYXBoaWNzVHlwZXMuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OkJyb3dzaW5n
Q29udGV4dEdyb3VwU3dpdGNoRGVjaXNpb24nOiBbJzxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMu
aD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OkNPRVBEaXNwb3NpdGlvbic6IFsnPFdlYkNvcmUvQ3Jv
c3NPcmlnaW5FbWJlZGRlclBvbGljeS5oPiddLAorICAgICAgICAnV2ViQ29yZTo6Q29tcG9zaXRl
T3BlcmF0b3InOiBbJzxXZWJDb3JlL0dyYXBoaWNzVHlwZXMuaD4nXSwKICAgICAgICAgJ1dlYkNv
cmU6OkNyZWF0ZU5ld0dyb3VwRm9ySGlnaGxpZ2h0JzogWyc8V2ViQ29yZS9BcHBIaWdobGlnaHQu
aD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OkRPTVBhc3RlQWNjZXNzUmVzcG9uc2UnOiBbJzxXZWJD
b3JlL0RPTVBhc3RlQWNjZXNzLmg+J10sCisgICAgICAgICdXZWJDb3JlOjpEYXNoQXJyYXlFbGVt
ZW50JzogWyc8V2ViQ29yZS9EYXNoQXJyYXkuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OkRlc3Rp
bmF0aW9uQ29sb3JTcGFjZSc6IFsnPFdlYkNvcmUvQ29sb3JTcGFjZS5oPiddLAorICAgICAgICAn
V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUnOiBbJzxXZWJDb3JlL0dyYXBoaWNzVHlw
ZXMuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OkRvY3VtZW50T3JXb3JrZXJJZGVudGlmaWVyJzog
Wyc8V2ViQ29yZS9TZXJ2aWNlV29ya2VyVHlwZXMuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OkRy
YWdBcHBsaWNhdGlvbkZsYWdzJzogWyc8V2ViQ29yZS9EcmFnRGF0YS5oPiddLAogICAgICAgICAn
V2ViQ29yZTo6RHJhZ0hhbmRsaW5nTWV0aG9kJzogWyc8V2ViQ29yZS9EcmFnQWN0aW9ucy5oPidd
LApAQCAtNzA2LDkgKzcxMiwxMiBAQCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAg
ICAgJ1dlYkNvcmU6OkZpbGVDaG9vc2VyU2V0dGluZ3MnOiBbJzxXZWJDb3JlL0ZpbGVDaG9vc2Vy
Lmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZSc6IFsnPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+J10sCiAgICAgICAgICdXZWJD
b3JlOjpGb250Q2hhbmdlcyc6IFsnPFdlYkNvcmUvRm9udEF0dHJpYnV0ZUNoYW5nZXMuaD4nXSwK
KyAgICAgICAgJ1dlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlJzogWyc8V2ViQ29yZS9HcmFwaGlj
c1R5cGVzLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpGcmFtZUxvYWRUeXBlJzogWyc8V2ViQ29y
ZS9GcmFtZUxvYWRlclR5cGVzLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpHZW5lcmljQ3VlRGF0
YSc6IFsnPFdlYkNvcmUvSW5iYW5kR2VuZXJpY0N1ZS5oPiddLAogICAgICAgICAnV2ViQ29yZTo6
R3JhbW1hckRldGFpbCc6IFsnPFdlYkNvcmUvVGV4dENoZWNrZXJDbGllbnQuaD4nXSwKKyAgICAg
ICAgJ1dlYkNvcmU6OkdseXBoQnVmZmVyQWR2YW5jZSc6IFsnPFdlYkNvcmUvR2x5cGhCdWZmZXJN
ZW1iZXJzLmg+J10sCisgICAgICAgICdXZWJDb3JlOjpHbHlwaEJ1ZmZlckdseXBoJzogWyc8V2Vi
Q29yZS9HbHlwaEJ1ZmZlck1lbWJlcnMuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6Okhhc0luc2Vj
dXJlQ29udGVudCc6IFsnPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPiddLAogICAgICAgICAn
V2ViQ29yZTo6SGlnaGxpZ2h0UmVxdWVzdE9yaWdpbmF0ZWRJbkFwcCc6IFsnPFdlYkNvcmUvQXBw
SGlnaGxpZ2h0Lmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpIaWdobGlnaHRWaXNpYmlsaXR5Jzog
Wyc8V2ViQ29yZS9IaWdobGlnaHRWaXNpYmlsaXR5Lmg+J10sCkBAIC03MjEsMTAgKzczMCwxNCBA
QCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ1dlYkNvcmU6OktleXByZXNz
Q29tbWFuZCc6IFsnPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPiddLAogICAgICAgICAnV2ViQ29y
ZTo6TGFzdE5hdmlnYXRpb25XYXNBcHBJbml0aWF0ZWQnOiBbJzxXZWJDb3JlL1NlcnZpY2VXb3Jr
ZXJDbGllbnREYXRhLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpMZWdhY3lDRE1TZXNzaW9uQ2xp
ZW50OjpNZWRpYUtleUVycm9yQ29kZSc6IFsnPFdlYkNvcmUvTGVnYWN5Q0RNU2Vzc2lvbi5oPidd
LAorICAgICAgICAnV2ViQ29yZTo6TGluZUNhcCc6IFsnPFdlYkNvcmUvR3JhcGhpY3NUeXBlcy5o
PiddLAorICAgICAgICAnV2ViQ29yZTo6TGluZURhdGEnOiBbJzxXZWJDb3JlL0lubGluZVBhdGhE
YXRhLmg+J10sCisgICAgICAgICdXZWJDb3JlOjpMaW5lSm9pbic6IFsnPFdlYkNvcmUvR3JhcGhp
Y3NUeXBlcy5oPiddLAogICAgICAgICAnV2ViQ29yZTo6TG9ja0JhY2tGb3J3YXJkTGlzdCc6IFsn
PFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPiddLAogICAgICAgICAnV2ViQ29yZTo6TWVkaWFF
bmdpbmVTdXBwb3J0UGFyYW1ldGVycyc6IFsnPFdlYkNvcmUvTWVkaWFQbGF5ZXIuaD4nXSwKICAg
ICAgICAgJ1dlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpIYXNBY3Rpdml0eSc6
IFsnPFdlYkNvcmUvTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXIuaD4nXSwKICAgICAgICAgJ1dl
YkNvcmU6Ok1vdXNlRXZlbnRQb2xpY3knOiBbJzxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+J10s
CisgICAgICAgICdXZWJDb3JlOjpNb3ZlRGF0YSc6IFsnPFdlYkNvcmUvSW5saW5lUGF0aERhdGEu
aD4nXSwKICAgICAgICAgJ1dlYkNvcmU6Ok5ldHdvcmtUcmFuc2FjdGlvbkluZm9ybWF0aW9uJzog
Wyc8V2ViQ29yZS9OZXR3b3JrTG9hZEluZm9ybWF0aW9uLmg+J10sCiAgICAgICAgICdXZWJDb3Jl
OjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YSc6IFsnPFdlYkNvcmUvUGFzdGVib2FyZC5oPiddLAogICAg
ICAgICAnV2ViQ29yZTo6UGFzdGVib2FyZEltYWdlJzogWyc8V2ViQ29yZS9QYXN0ZWJvYXJkLmg+
J10sCkBAIC03NDAsNiArNzUzLDcgQEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUodHlwZSk6CiAgICAg
ICAgICdXZWJDb3JlOjpQb2xpY3lDaGVja0lkZW50aWZpZXInOiBbJzxXZWJDb3JlL0ZyYW1lTG9h
ZGVyVHlwZXMuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbic6IFsn
PFdlYkNvcmUvSW1hZ2VCdWZmZXJCYWNrZW5kLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpQcm9j
ZXNzSWRlbnRpZmllcic6IFsnPFdlYkNvcmUvUHJvY2Vzc0lkZW50aWZpZXIuaD4nXSwKKyAgICAg
ICAgJ1dlYkNvcmU6OlF1YWRDdXJ2ZURhdGEnOiBbJzxXZWJDb3JlL0lubGluZVBhdGhEYXRhLmg+
J10sCiAgICAgICAgICdXZWJDb3JlOjpSZWNlbnRTZWFyY2gnOiBbJzxXZWJDb3JlL1NlYXJjaFBv
cHVwTWVudS5oPiddLAogICAgICAgICAnV2ViQ29yZTo6UmVxdWVzdFN0b3JhZ2VBY2Nlc3NSZXN1
bHQnOiBbJzxXZWJDb3JlL0RvY3VtZW50U3RvcmFnZUFjY2Vzcy5oPiddLAogICAgICAgICAnV2Vi
Q29yZTo6Um91dGVTaGFyaW5nUG9saWN5JzogWyc8V2ViQ29yZS9BdWRpb1Nlc3Npb24uaD4nXSwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4
IGZhYmNlZjZjMjEyNTIzZWYwMWNjODlhNDk4NDYwMDZkOGVhMmRmOTMuLjk4ZmRmNDlkMGI4MmEy
NmYyNzE0MzhkNzg1OWE0MWNlNGZhZmI1ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcApAQCAtMjMxLDE2ICsyMzEsNiBAQCBzdGF0aWMgV0FS
Tl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlVHlwZXNBbmREYXRhKERlY29kZXImIGRlY29kZXIs
IFZlY3RvcjxTdHJpbgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8
QWZmaW5lVHJhbnNmb3JtPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgYWZmaW5lVHJhbnNmb3JtKQotewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8QWZm
aW5lVHJhbnNmb3JtPjo6ZW5jb2RlKGVuY29kZXIsIGFmZmluZVRyYW5zZm9ybSk7Ci19Ci0KLWJv
b2wgQXJndW1lbnRDb2RlcjxBZmZpbmVUcmFuc2Zvcm0+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgQWZmaW5lVHJhbnNmb3JtJiBhZmZpbmVUcmFuc2Zvcm0pCi17Ci0gICAgcmV0dXJuIFNpbXBs
ZUFyZ3VtZW50Q29kZXI8QWZmaW5lVHJhbnNmb3JtPjo6ZGVjb2RlKGRlY29kZXIsIGFmZmluZVRy
YW5zZm9ybSk7Ci19Ci0KIHZvaWQgQXJndW1lbnRDb2RlcjxDYWNoZVF1ZXJ5T3B0aW9ucz46OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDYWNoZVF1ZXJ5T3B0aW9ucyYgb3B0aW9ucykK
IHsKICAgICBlbmNvZGVyIDw8IG9wdGlvbnMuaWdub3JlU2VhcmNoOwpAQCAtNDI1LDYgKzQxNSw3
IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxFdmVudFRyYWNraW5nUmVnaW9ucz46OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyLCBFdmVudFRyYWNraW5nCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIEVuY29kZXI+CiB2b2lkIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtYXRpb25N
YXRyaXg+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zZm9ybWF0aW9uTWF0cml4KQogewogICAgIGVuY29kZXIgPDwgdHJhbnNmb3JtYXRp
b25NYXRyaXgubTExKCk7CkBAIC01MDYsNiArNDk3LDkgQEAgYm9vbCBBcmd1bWVudENvZGVyPFRy
YW5zZm9ybWF0aW9uTWF0cml4Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFRyYW5zZm9ybWF0
aW8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPFRy
YW5zZm9ybWF0aW9uTWF0cml4Pjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXImLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYpOwordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPFRyYW5zZm9y
bWF0aW9uTWF0cml4Pjo6ZW5jb2RlPFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25u
ZWN0aW9uRW5jb2RlciYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisKIHZvaWQgQXJn
dW1lbnRDb2RlcjxMaW5lYXJUaW1pbmdGdW5jdGlvbj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBMaW5lYXJUaW1pbmdGdW5jdGlvbiYgdGltaW5nRnVuY3Rpb24pCiB7CiAgICAgZW5j
b2RlciA8PCB0aW1pbmdGdW5jdGlvbi50eXBlKCk7CkBAIC02MTcsODYgKzYxMSw2IEBAIGJvb2wg
QXJndW1lbnRDb2RlcjxTcHJpbmdUaW1pbmdGdW5jdGlvbj46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBTcHJpbmdUaW1pbmdGCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJndW1lbnRD
b2RlcjxGbG9hdFBvaW50Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEZsb2F0UG9p
bnQmIGZsb2F0UG9pbnQpCi17Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50Pjo6
ZW5jb2RlKGVuY29kZXIsIGZsb2F0UG9pbnQpOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8Rmxv
YXRQb2ludD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBGbG9hdFBvaW50JiBmbG9hdFBvaW50
KQotewotICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQ+OjpkZWNvZGUo
ZGVjb2RlciwgZmxvYXRQb2ludCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8RmxvYXRQb2ludD4gQXJn
dW1lbnRDb2RlcjxGbG9hdFBvaW50Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAg
RmxvYXRQb2ludCBmbG9hdFBvaW50OwotICAgIGlmICghU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9h
dFBvaW50Pjo6ZGVjb2RlKGRlY29kZXIsIGZsb2F0UG9pbnQpKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgIHJldHVybiBmbG9hdFBvaW50OwotfQotCi12b2lkIEFyZ3VtZW50Q29k
ZXI8RmxvYXRQb2ludDNEPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEZsb2F0UG9p
bnQzRCYgZmxvYXRQb2ludCkKLXsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQz
RD46OmVuY29kZShlbmNvZGVyLCBmbG9hdFBvaW50KTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVy
PEZsb2F0UG9pbnQzRD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBGbG9hdFBvaW50M0QmIGZs
b2F0UG9pbnQpCi17Ci0gICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRQb2ludDNE
Pjo6ZGVjb2RlKGRlY29kZXIsIGZsb2F0UG9pbnQpOwotfQotCi0KLXZvaWQgQXJndW1lbnRDb2Rl
cjxGbG9hdFJlY3Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgRmxvYXRSZWN0JiBm
bG9hdFJlY3QpCi17Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFJlY3Q+OjplbmNvZGUo
ZW5jb2RlciwgZmxvYXRSZWN0KTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPEZsb2F0UmVjdD46
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBGbG9hdFJlY3QmIGZsb2F0UmVjdCkKLXsKLSAgICBy
ZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFJlY3Q+OjpkZWNvZGUoZGVjb2RlciwgZmxv
YXRSZWN0KTsKLX0KLQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IEFyZ3VtZW50Q29kZXI8Rmxv
YXRSZWN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgRmxvYXRSZWN0IGZsb2F0
UmVjdDsKLSAgICBpZiAoIVNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRSZWN0Pjo6ZGVjb2RlKGRl
Y29kZXIsIGZsb2F0UmVjdCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcmV0
dXJuIGZsb2F0UmVjdDsKLX0KLQotCi12b2lkIEFyZ3VtZW50Q29kZXI8RmxvYXRCb3hFeHRlbnQ+
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgRmxvYXRCb3hFeHRlbnQmIGZsb2F0Qm94
RXh0ZW50KQotewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRCb3hFeHRlbnQ+OjplbmNv
ZGUoZW5jb2RlciwgZmxvYXRCb3hFeHRlbnQpOwotfQotICAgIAotYm9vbCBBcmd1bWVudENvZGVy
PEZsb2F0Qm94RXh0ZW50Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEZsb2F0Qm94RXh0ZW50
JiBmbG9hdEJveEV4dGVudCkKLXsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9h
dEJveEV4dGVudD46OmRlY29kZShkZWNvZGVyLCBmbG9hdEJveEV4dGVudCk7Ci19Ci0gICAgCi0K
LXZvaWQgQXJndW1lbnRDb2RlcjxGbG9hdFNpemU+OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgRmxvYXRTaXplJiBmbG9hdFNpemUpCi17Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxG
bG9hdFNpemU+OjplbmNvZGUoZW5jb2RlciwgZmxvYXRTaXplKTsKLX0KLQotYm9vbCBBcmd1bWVu
dENvZGVyPEZsb2F0U2l6ZT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBGbG9hdFNpemUmIGZs
b2F0U2l6ZSkKLXsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFNpemU+Ojpk
ZWNvZGUoZGVjb2RlciwgZmxvYXRTaXplKTsKLX0KLQotCi12b2lkIEFyZ3VtZW50Q29kZXI8Rmxv
YXRSb3VuZGVkUmVjdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkUmVjdCkKLXsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0Um91
bmRlZFJlY3Q+OjplbmNvZGUoZW5jb2Rlciwgcm91bmRlZFJlY3QpOwotfQotCi1ib29sIEFyZ3Vt
ZW50Q29kZXI8RmxvYXRSb3VuZGVkUmVjdD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCkKLXsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRD
b2RlcjxGbG9hdFJvdW5kZWRSZWN0Pjo6ZGVjb2RlKGRlY29kZXIsIHJvdW5kZWRSZWN0KTsKLX0K
LQogI2lmIEVOQUJMRShNRVRBX1ZJRVdQT1JUKQogdm9pZCBBcmd1bWVudENvZGVyPFZpZXdwb3J0
QXJndW1lbnRzPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZpZXdwb3J0QXJndW1l
bnRzJiB2aWV3cG9ydEFyZ3VtZW50cykKIHsKQEAgLTcyOCwyNCArNjQyLDcgQEAgYm9vbCBBcmd1
bWVudENvZGVyPFZpZXdwb3J0QXR0cmlidXRlcz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBW
aWV3cG9ydEF0dHJpYnUKICAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxWaWV3cG9ydEF0
dHJpYnV0ZXM+OjpkZWNvZGUoZGVjb2Rlciwgdmlld3BvcnRBdHRyaWJ1dGVzKTsKIH0KIAotdm9p
ZCBBcmd1bWVudENvZGVyPEludFBvaW50Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IEludFBvaW50JiBpbnRQb2ludCkKLXsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPEludFBvaW50
Pjo6ZW5jb2RlKGVuY29kZXIsIGludFBvaW50KTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPElu
dFBvaW50Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEludFBvaW50JiBpbnRQb2ludCkKLXsK
LSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxJbnRQb2ludD46OmRlY29kZShkZWNvZGVy
LCBpbnRQb2ludCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+IEFyZ3Vt
ZW50Q29kZXI8SW50UG9pbnQ+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBJbnRQ
b2ludCBpbnRQb2ludDsKLSAgICBpZiAoIVNpbXBsZUFyZ3VtZW50Q29kZXI8SW50UG9pbnQ+Ojpk
ZWNvZGUoZGVjb2RlciwgaW50UG9pbnQpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
ICAgIHJldHVybiBpbnRQb2ludDsKLX0KLQordGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KIHZv
aWQgQXJndW1lbnRDb2RlcjxJbnRSZWN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IEludFJlY3QmIGludFJlY3QpCiB7CiAgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxJbnRSZWN0Pjo6
ZW5jb2RlKGVuY29kZXIsIGludFJlY3QpOwpAQCAtNzY0LDUwICs2NjEsOCBAQCBzdGQ6Om9wdGlv
bmFsPEludFJlY3Q+IEFyZ3VtZW50Q29kZXI8SW50UmVjdD46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogICAgIHJldHVybiByZWN0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgot
dm9pZCBBcmd1bWVudENvZGVyPEludFNpemU+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgSW50U2l6ZSYgaW50U2l6ZSkKLXsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPEludFNpemU+
OjplbmNvZGUoZW5jb2RlciwgaW50U2l6ZSk7Ci19Ci0KLXRlbXBsYXRlCi12b2lkIEFyZ3VtZW50
Q29kZXI8SW50U2l6ZT46OmVuY29kZTxFbmNvZGVyPihFbmNvZGVyJiwgY29uc3QgSW50U2l6ZSYp
OwotdGVtcGxhdGUKLXZvaWQgQXJndW1lbnRDb2RlcjxJbnRTaXplPjo6ZW5jb2RlPFN0cmVhbUNv
bm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYsIGNvbnN0IEludFNpemUm
KTsKLQotYm9vbCBBcmd1bWVudENvZGVyPEludFNpemU+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgSW50U2l6ZSYgaW50U2l6ZSkKLXsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxJ
bnRTaXplPjo6ZGVjb2RlKGRlY29kZXIsIGludFNpemUpOwotfQotCi1zdGQ6Om9wdGlvbmFsPElu
dFNpemU+IEFyZ3VtZW50Q29kZXI8SW50U2l6ZT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQot
ewotICAgIEludFNpemUgaW50U2l6ZTsKLSAgICBpZiAoIVNpbXBsZUFyZ3VtZW50Q29kZXI8SW50
U2l6ZT46OmRlY29kZShkZWNvZGVyLCBpbnRTaXplKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLSAgICByZXR1cm4gaW50U2l6ZTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPExheW91
dFNpemU+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgTGF5b3V0U2l6ZSYgbGF5b3V0
U2l6ZSkKLXsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPExheW91dFNpemU+OjplbmNvZGUoZW5j
b2RlciwgbGF5b3V0U2l6ZSk7Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxMYXlvdXRTaXplPjo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIExheW91dFNpemUmIGxheW91dFNpemUpCi17Ci0gICAg
cmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8TGF5b3V0U2l6ZT46OmRlY29kZShkZWNvZGVyLCBs
YXlvdXRTaXplKTsKLX0KLQotCi12b2lkIEFyZ3VtZW50Q29kZXI8TGF5b3V0UG9pbnQ+OjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgTGF5b3V0UG9pbnQmIGxheW91dFBvaW50KQotewot
ICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8TGF5b3V0UG9pbnQ+OjplbmNvZGUoZW5jb2RlciwgbGF5
b3V0UG9pbnQpOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8TGF5b3V0UG9pbnQ+OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgTGF5b3V0UG9pbnQmIGxheW91dFBvaW50KQotewotICAgIHJldHVy
biBTaW1wbGVBcmd1bWVudENvZGVyPExheW91dFBvaW50Pjo6ZGVjb2RlKGRlY29kZXIsIGxheW91
dFBvaW50KTsKLX0KK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxJbnRSZWN0Pjo6ZW5jb2Rl
PEVuY29kZXI+KEVuY29kZXImLCBjb25zdCBJbnRSZWN0Jik7Cit0ZW1wbGF0ZSB2b2lkIEFyZ3Vt
ZW50Q29kZXI8SW50UmVjdD46OmVuY29kZTxTdHJlYW1Db25uZWN0aW9uRW5jb2Rlcj4oU3RyZWFt
Q29ubmVjdGlvbkVuY29kZXImLCBjb25zdCBJbnRSZWN0Jik7CiAKIHZvaWQgQXJndW1lbnRDb2Rl
cjxSZWNlbnRTZWFyY2g+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVjZW50U2Vh
cmNoJiByZWNlbnRTZWFyY2gpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1
bWVudENvZGVycy5oCmluZGV4IDU0NTk3NWEwZGYxNTAxYmU4ODEzNTQ5YTkwMWFkZDA3MWJlMDFm
OTYuLjViZjk0ODcxZmQwNmIzMjk1YjZlMzkzNWZmMjkwMDcwZDY4YjFlM2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC0yNiwxMiArMjYsMjQg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0b3BsYXlF
dmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9p
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQzRC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJvdW5kZWRSZWN0Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9GbG9hdFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlM
aXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9JbmRleGVkREIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lucHV0TW9kZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0xheW91dFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9MYXlv
dXRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9MZW5ndGhCb3guaD4KICNpbmNsdWRlIDxXZWJD
b3JlL01lZGlhU2VsZWN0aW9uT3B0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9OYXRpdmVJbWFn
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya0xvYWRNZXRyaWNzLmg+CkBAIC05Niw3ICsx
MDgsNiBAQCB0eXBlZGVmIHN0cnVjdCBfX0NWQnVmZmVyKiBDVlBpeGVsQnVmZmVyUmVmOwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBYnNvbHV0ZVBvc2l0aW9uQ29uc3RyYWludHM7Ci1j
bGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKIGNs
YXNzIEJsb2JQYXJ0OwogY2xhc3MgQ2VydGlmaWNhdGVJbmZvOwpAQCAtMTA5LDIxICsxMjAsMTIg
QEAgY2xhc3MgRHJhZ0RhdGE7CiBjbGFzcyBGaWxlOwogY2xhc3MgRmlsdGVyT3BlcmF0aW9uOwog
Y2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFBv
aW50M0Q7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBGbG9hdFJvdW5kZWRSZWN0OwotY2xhc3Mg
RmxvYXRTaXplOwogY2xhc3MgRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHM7CiBjbGFz
cyBGb250OwogY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIEhUVFBIZWFkZXJNYXA7Ci1j
bGFzcyBJbnRQb2ludDsKIGNsYXNzIEludFJlY3Q7Ci1jbGFzcyBJbnRTaXplOwogY2xhc3MgS2V5
ZnJhbWVWYWx1ZUxpc3Q7Ci1jbGFzcyBMYXlvdXRTaXplOwotY2xhc3MgTGF5b3V0UG9pbnQ7CiBj
bGFzcyBMaW5lYXJUaW1pbmdGdW5jdGlvbjsKIGNsYXNzIE5vdGlmaWNhdGlvbjsKIGNsYXNzIFBh
c3RlYm9hcmRDdXN0b21EYXRhOwpAQCAtMTc0LDkgKzE3Niw3IEBAIHN0cnVjdCBUb3VjaEFjdGlv
bkRhdGE7CiBzdHJ1Y3QgVmVsb2NpdHlEYXRhOwogc3RydWN0IFZpZXdwb3J0QXR0cmlidXRlczsK
IHN0cnVjdCBXaW5kb3dGZWF0dXJlczsKLSAgICAKLXRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBS
ZWN0RWRnZXM7Ci11c2luZyBGbG9hdEJveEV4dGVudCA9IFJlY3RFZGdlczxmbG9hdD47CisKIHVz
aW5nIElEQktleVBhdGggPSBWYXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+OwogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCkBAIC0yMjcsMTAgKzIyNywyNCBAQCBzdHJ1Y3QgUmVjb3JkOwogCiBu
YW1lc3BhY2UgSVBDIHsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpBZmZpbmVUcmFuc2Zvcm0+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNv
bnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpOwotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9S
RVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpOwot
fTsKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
KQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpGbG9hdEJveEV4dGVudCkK
K0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RmxvYXRQb2ludCkKK0RFRklO
RV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RmxvYXRQb2ludDNEKQorREVGSU5FX1NJ
TVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpGbG9hdFJlY3QpCitERUZJTkVfU0lNUExFX0FS
R1VNRU5UX0NPREVSKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QpCitERUZJTkVfU0lNUExFX0FS
R1VNRU5UX0NPREVSKFdlYkNvcmU6OkZsb2F0U2l6ZSkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRf
Q09ERVIoV2ViQ29yZTo6SW50UG9pbnQpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdl
YkNvcmU6OkludFNpemUpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6Okxh
eW91dFNpemUpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkxheW91dFBv
aW50KQorCisjaWYgVVNFKENHKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihDR1JlY3Qp
CitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKENHU2l6ZSkKK0RFRklORV9TSU1QTEVfQVJH
VU1FTlRfQ09ERVIoQ0dQb2ludCkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoQ0dBZmZp
bmVUcmFuc2Zvcm0pCisjZW5kaWYKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpBdHRyaWJ1dGVkU3RyaW5nPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29k
ZXImLCBjb25zdCBXZWJDb3JlOjpBdHRyaWJ1dGVkU3RyaW5nJik7CkBAIC0yNjgsNiArMjgyLDcg
QEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpFdmVudFRyYWNraW5n
UmVnaW9ucz4gewogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+
CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYpOwogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNv
ZGUoRGVjb2RlciYsIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiB9OwpAQCAtMjk5
LDM4ICszMTQsNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNl
cnRpZmljYXRlSW5mbz4gewogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNlcnRp
ZmljYXRlSW5mbz4gZGVjb2RlKERlY29kZXImKTsKIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IEFy
Z3VtZW50Q29kZXI8V2ViQ29yZTo6RmxvYXRQb2ludD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwotICAgIHN0YXRpYyBXQVJO
X1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkZsb2F0UG9pbnQm
KTsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGbG9hdFBvaW50PiBkZWNvZGUo
RGVjb2RlciYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpGbG9hdFBvaW50M0Q+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQzRCYpOwotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4g
Ym9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkZsb2F0UG9pbnQzRCYpOwotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHsKLSAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwot
ICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNv
cmU6OkZsb2F0UmVjdCYpOwotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0
UmVjdD4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0gICAgCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0Qm94RXh0ZW50PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5j
b2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdEJveEV4dGVudCYpOwotICAgIHN0YXRp
YyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkZsb2F0
Qm94RXh0ZW50Jik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OkZsb2F0U2l6ZT4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJik7Ci0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29s
IGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6RmxvYXRTaXplJik7Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q+IHsKLSAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJl
Y3QmKTsKLSAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXIm
LCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0Jik7Ci19OwotCiAjaWYgRU5BQkxFKE1FVEFfVklF
V1BPUlQpCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlZpZXdwb3J0
QXJndW1lbnRzPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJD
b3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpOwpAQCAtMzQ1LDM1ICszMjgsMTMgQEAgdGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXM+IHsKICAg
ICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3Jl
OjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6SW50UG9pbnQ+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7Ci0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JF
VFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6SW50UG9pbnQmKTsKLSAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4gZGVjb2RlKERlY29kZXImKTsKLX07
Ci0KIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6SW50UmVjdD4gewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVu
Y29kZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgc3RhdGljIFdBUk5fVU5VU0VE
X1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkludFJlY3Q+IGRlY29kZShEZWNvZGVyJik7CiB9
OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkludFNpemU+IHsK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgotICAgIHN0YXRpYyB2b2lkIGVuY29kZShF
bmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIHN0YXRpYyBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkludFNpemUmKTsKLSAgICBz
dGF0aWMgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpJbnRTaXplPiBkZWNvZGUoRGVjb2RlciYpOwot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpMYXlvdXRTaXpl
PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpMYXlv
dXRTaXplJik7Ci0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNv
ZGVyJiwgV2ViQ29yZTo6TGF5b3V0U2l6ZSYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJn
dW1lbnRDb2RlcjxXZWJDb3JlOjpMYXlvdXRQb2ludD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6TGF5b3V0UG9pbnQmKTsKLSAgICBzdGF0aWMgV0FS
Tl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpMYXlvdXRQb2lu
dCYpOwotfTsKLQogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpMZW5n
dGg+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6Okxl
bmd0aCYpOwogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2Rl
ciYsIFdlYkNvcmU6Okxlbmd0aCYpOwpAQCAtNDUyLDYgKzQxMyw3IEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RHJhZ0RhdGE+IHsKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oQ09DT0EpCisKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V1RGOjpNYWNo
U2VuZFJpZ2h0PiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXVEY6
Ok1hY2hTZW5kUmlnaHQmKTsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIFdURjo6
TWFjaFNlbmRSaWdodCYmKTsKQEAgLTQ2MywyNiArNDI1LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+IHsKICAgICBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+IGRlY29kZShEZWNvZGVyJik7CiB9
OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPENHUG9pbnQ+IHsKLSAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIENHUG9pbnQpOwotICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPENHUG9pbnQ+IGRlY29kZShEZWNvZGVyJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBB
cmd1bWVudENvZGVyPENHU2l6ZT4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwg
Q0dTaXplKTsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxDR1NpemU+IGRlY29kZShEZWNvZGVy
Jik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPENHUmVjdD4gewotICAg
IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgQ0dSZWN0KTsKLSAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxDR1JlY3Q+IGRlY29kZShEZWNvZGVyJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBBcmd1bWVudENvZGVyPENHQWZmaW5lVHJhbnNmb3JtPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5j
b2RlKEVuY29kZXImLCBDR0FmZmluZVRyYW5zZm9ybSk7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8Q0dBZmZpbmVUcmFuc2Zvcm0+IGRlY29kZShEZWNvZGVyJik7Ci19OwotI2VuZGlmCisjZW5k
aWYgLy8gUExBVEZPUk0oQ09DT0EpCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogdGVtcGxh
dGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpTZWxlY3Rpb25HZW9tZXRyeT4gewpA
QCAtODY4LDYgKzgxMSw1NSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJldGFp
blB0cjxDVlBpeGVsQnVmZmVyUmVmPj4gewogCiAjZW5kaWYKIAorREVGSU5FX1NJTVBMRV9BUkdV
TUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZSkKK0RFRklORV9TSU1QTEVfQVJH
VU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmUpCitERUZJTkVfU0lNUExF
X0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGUpCitERUZJTkVf
U0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGUpCitERUZJ
TkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZSkKK0RF
RklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENUTSkK
K0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNh
dGVuYXRlQ1RNKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50KQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RF
UihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yKQorREVGSU5FX1NJTVBM
RV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29s
b3IpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRTdHJva2VUaGlja25lc3MpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW4pCitERUZJTkVfU0lNUExFX0FSR1VNRU5U
X0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0KQorREVGSU5FX1NJTVBM
RV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3cpCitERUZJ
TkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwKQorREVG
SU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dCkK
K0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBU
b0ltYWdlQnVmZmVyKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKQorREVGSU5FX1NJTVBMRV9BUkdVTUVO
VF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyKQorREVGSU5FX1NJ
TVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdl
KQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d1BhdHRlcm4pCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RF
UihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIpCitERUZJTkVfU0lN
UExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdCkKK0RFRklO
RV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lKQor
REVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcikKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RF
UihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3QpCitERUZJTkVfU0lNUExFX0FSR1VNRU5U
X0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsTGluZSkKK0RFRklORV9TSU1QTEVfQVJH
VU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxBcmMpCitERUZJTkVfU0lNUExF
X0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUXVhZEN1cnZlKQorREVG
SU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEJlemll
ckN1cnZlKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbEVsbGlwc2UpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWEpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NP
REVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0KQorREVGSU5FX1NJTVBMRV9BUkdV
TUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlTGluZSkKK0RFRklORV9TSU1Q
TEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUFyYykKK0RFRklO
RV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVF1YWRD
dXJ2ZSkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlN0cm9rZUJlemllckN1cnZlKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZSkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09E
RVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdCkKK0RFRklORV9TSU1QTEVfQVJHVU1F
TlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybikKK0RFRklO
RV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBh
dHRlcm4pCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpBcHBseURldmljZVNjYWxlRmFjdG9yKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1c2hDb250ZXh0KQorREVGSU5FX1NJTVBMRV9BUkdVTUVO
VF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVy
KQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6TWV0
YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyKQorCiB9IC8vIG5hbWVzcGFjZSBJ
UEMKIAogbmFtZXNwYWNlIFdURiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9t
YWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFj
L1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQppbmRleCA4ZTRkNWYxMzFkODJmMWRlZmUyNmQx
NWFiZmVlMDY0YTNiOTg5MGY4Li42YTQzNDA2NzE0NjNkOTQ3MDcxOTIzMTBiMWY3YmEwYmQwM2E3
NmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1l
bnRDb2RlcnNNYWMubW0KQEAgLTMyMSw3OSArMzIxLDYgQEAgc3RkOjpvcHRpb25hbDxXZWJDb3Jl
OjpLZXlwcmVzc0NvbW1hbmQ+IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5k
PjoKICAgICByZXR1cm4gV1RGTW92ZShjb21tYW5kKTsKIH0KIAotdm9pZCBBcmd1bWVudENvZGVy
PENHUmVjdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDR1JlY3QgcmVjdCkKLXsKLSAgICBl
bmNvZGVyIDw8IHJlY3Qub3JpZ2luIDw8IHJlY3Quc2l6ZTsKLX0KLQotc3RkOjpvcHRpb25hbDxD
R1JlY3Q+IEFyZ3VtZW50Q29kZXI8Q0dSZWN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17
Ci0gICAgc3RkOjpvcHRpb25hbDxDR1BvaW50PiBvcmlnaW47Ci0gICAgZGVjb2RlciA+PiBvcmln
aW47Ci0gICAgaWYgKCFvcmlnaW4pCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBzdGQ6Om9w
dGlvbmFsPENHU2l6ZT4gc2l6ZTsKLSAgICBkZWNvZGVyID4+IHNpemU7Ci0gICAgaWYgKCFzaXpl
KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgcmV0dXJuIENHUmVjdCB7ICpvcmlnaW4sICpz
aXplIH07Ci19Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxDR1NpemU+OjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgQ0dTaXplIHNpemUpCi17Ci0gICAgZW5jb2RlciA8PCBzaXplLndpZHRoIDw8IHNp
emUuaGVpZ2h0OwotfQotCi1zdGQ6Om9wdGlvbmFsPENHU2l6ZT4gQXJndW1lbnRDb2RlcjxDR1Np
emU+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBDR1NpemUgc2l6ZTsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHNpemUud2lkdGgpKQotICAgICAgICByZXR1cm4geyB9OwotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZS5oZWlnaHQpKQotICAgICAgICByZXR1cm4geyB9Owot
ICAgIHJldHVybiBzaXplOwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8Q0dQb2ludD46OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBDR1BvaW50IHBvaW50KQotewotICAgIGVuY29kZXIgPDwgcG9p
bnQueCA8PCBwb2ludC55OwotfQotCi1zdGQ6Om9wdGlvbmFsPENHUG9pbnQ+IEFyZ3VtZW50Q29k
ZXI8Q0dQb2ludD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIENHUG9pbnQgcG9p
bnQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShwb2ludC54KSkKLSAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBvaW50LnkpKQotICAgICAgICByZXR1cm4geyB9
OwotICAgIHJldHVybiBwb2ludDsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPENHQWZmaW5lVHJh
bnNmb3JtPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSkKLXsKLSAgICBlbmNvZGVyIDw8IHRyYW5zZm9ybS5hIDw8IHRyYW5zZm9ybS5iIDw8IHRy
YW5zZm9ybS5jIDw8IHRyYW5zZm9ybS5kIDw8IHRyYW5zZm9ybS50eCA8PCB0cmFuc2Zvcm0udHk7
Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8Q0dBZmZpbmVUcmFuc2Zvcm0+IEFyZ3VtZW50Q29kZXI8Q0dB
ZmZpbmVUcmFuc2Zvcm0+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBDR0FmZmlu
ZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0cmFuc2Zvcm0u
YSkpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0cmFuc2Zv
cm0uYikpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0cmFu
c2Zvcm0uYykpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0
cmFuc2Zvcm0uZCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZSh0cmFuc2Zvcm0udHgpKQotICAgICAgICByZXR1cm4geyB9OwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUodHJhbnNmb3JtLnR5KSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gdHJh
bnNmb3JtOwotfQotCiAjaWYgRU5BQkxFKENPTlRFTlRfRklMVEVSSU5HKQogCiB2b2lkIEFyZ3Vt
ZW50Q29kZXI8V2ViQ29yZTo6Q29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyPjo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxl
ciYgY29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXggMmJlOTZhNjkxNjBmMTZlNmVjYTVmNWIwODY0MzQ0
MzVjNGYyZjkzZi4uYTQ3N2I1MDJlMDlkZTk5OGJhOGEzMmEyOTc0ZmMwZTViYTU0Y2EyOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC05OCw2ICs5
OCw4IEBACiAjaW5jbHVkZSAiQXVkaW9TZXNzaW9uUm91dGluZ0FyYml0cmF0b3JQcm94eS5oIgog
I2VuZGlmCiAKKyNpbmNsdWRlIDxkYmdfY29sb3JzLmg+CisKICNkZWZpbmUgTUVTU0FHRV9DSEVD
Syhhc3NlcnRpb24pIE1FU1NBR0VfQ0hFQ0tfQkFTRShhc3NlcnRpb24sIGNvbm5lY3Rpb24oKSkK
ICNkZWZpbmUgTUVTU0FHRV9DSEVDS19VUkwodXJsKSBNRVNTQUdFX0NIRUNLX0JBU0UoY2hlY2tV
UkxSZWNlaXZlZEZyb21XZWJQcm9jZXNzKHVybCksIGNvbm5lY3Rpb24oKSkKICNkZWZpbmUgTUVT
U0FHRV9DSEVDS19DT01QTEVUSU9OKGFzc2VydGlvbiwgY29tcGxldGlvbikgTUVTU0FHRV9DSEVD
S19DT01QTEVUSU9OX0JBU0UoYXNzZXJ0aW9uLCBjb25uZWN0aW9uKCksIGNvbXBsZXRpb24pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAz
YTExNzJjYmVkMmRjMjBhZDI1MTc2NGUyMmI2MDc1MjQ2NzZjYzI1Li5mMjJmYmRlM2ZlMmE5YzBl
ZDFkMGJjM2E3ZTA4OTAxNDNiZDZhN2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMsNyArMyw3IEBACiAJYXJjaGl2ZVZlcnNpb24g
PSAxOwogCWNsYXNzZXMgPSB7CiAJfTsKLQlvYmplY3RWZXJzaW9uID0gNTI7CisJb2JqZWN0VmVy
c2lvbiA9IDU0OwogCW9iamVjdHMgPSB7CiAKIC8qIEJlZ2luIFBCWEFnZ3JlZ2F0ZVRhcmdldCBz
ZWN0aW9uICovCkBAIC0yMDQ2LDYgKzIwNDYsOCBAQAogCQlGNDQyOTE5NjFGQTU5NDJBMDAyQ0M5
M0UgLyogX1dLQXR0YWNobWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNDQyOTE5NTFGQTU5NDJBMDAyQ0M5M0UgLyogX1dLQXR0YWNo
bWVudEludGVybmFsLmggKi87IH07CiAJCUY0NDgxNTY0MjM4NzgyMDAwMDk4MjY1NyAvKiBXS0Rl
ZmVycmluZ0dlc3R1cmVSZWNvZ25pemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNDQ4MTU2MjIzODc4MjAwMDA5ODI2NTcgLyogV0tEZWZlcnJpbmdH
ZXN0dXJlUmVjb2duaXplci5oICovOyB9OwogCQlGNDRERkVCMjFFOUU3NTJGMDAzOEQxOTYgLyog
V2ViSWNvblV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjQ0REZFQjAxRTlFNzUyRjAwMzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMuaCAq
LzsgfTsKKwkJRjQ1MTdEN0IyNkZCQ0QzOTAwNEM4NDc1IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRNZXNzYWdlc1JlcGxpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY0NTE3RDc5MjZGQkNEMzgwMDRDODQ3NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kTWVzc2FnZXNSZXBsaWVzLmggKi87IH07CisJCUY0NTE3RDdDMjZGQkNEMzkwMDRDODQ3NSAv
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NTE3RDdBMjZGQkNEMzgwMDRDODQ3NSAvKiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMuaCAqLzsgfTsKIAkJRjQ2NjBCQzIyNURFRjA4MTAw
RTg2NTk4IC8qIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NjYwQkMxMjVERUYwODEwMEU4NjU5OCAvKiBQYXN0
ZWJvYXJkQWNjZXNzSW50ZW50LmggKi87IH07CiAJCUY0ODU3MEEzMjY0NEJFQzUwMEMwNUY3MSAv
KiBUaW1lb3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNDg1NzBBMjI2NDRCRUM0MDBDMDVGNzEgLyogVGltZW91dC5oICovOyB9OwogCQlGNDhEMkE4
NTIxNTgzQTdFMDBDNjc1MkIgLyogQXBwS2l0U1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDhEMkE4NDIxNTgzQTAyMDBDNjc1MkIgLyogQXBwS2l0
U1BJLmggKi87IH07CkBAIC02MTE0LDkgKzYxMTYsMTYgQEAKIAkJRjQ0ODE1NjMyMzg3ODIwMDAw
OTgyNjU3IC8qIFdLRGVmZXJyaW5nR2VzdHVyZVJlY29nbml6ZXIubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBXS0RlZmVycmluZ0dlc3R1cmVSZWNvZ25pemVyLm1tOyBwYXRoID0gaW9zL1dLRGVm
ZXJyaW5nR2VzdHVyZVJlY29nbml6ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUY0NERGRUIwMUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJY29uVXRpbGl0aWVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkljb25VdGlsaXRpZXMuaDsgcGF0aCA9IGlvcy9X
ZWJJY29uVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NERGRUIx
MUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJY29uVXRpbGl0aWVzLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViSWNvblV0aWxpdGllcy5tbTsgcGF0aCA9IGlvcy9X
ZWJJY29uVXRpbGl0aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNDUxN0Q3
NzI2RkJDQ0U0MDA0Qzg0NzUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kTWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktp
dDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUY0NTE3RDc5MjZGQkNEMzgwMDRDODQ3NSAvKiBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXNSZXBsaWVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlc1JlcGxpZXMuaDsg
cGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3Nh
Z2VzUmVwbGllcy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQlGNDUx
N0Q3QTI2RkJDRDM4MDA0Qzg0NzUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRN
ZXNzYWdlcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJ
RjQ2NjBCQzEyNURFRjA4MTAwRTg2NTk4IC8qIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGFzdGVib2FyZEFjY2Vzc0ludGVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGNDdBMDUxNjI2ODI3QTA5MDA3RTVDRjIgLyogUXVpY2tMb29rUHJldmlld0Fj
dGl2aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFF1aWNrTG9va1ByZXZpZXdBY3Rpdml0eS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDg1NzBBMjI2NDRCRUM0MDBDMDVGNzEgLyogVGlt
ZW91dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW1lb3V0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0OEJCOEREMjZGOTYzNUQwMDFDMUM0MCAvKiBSZW1v
dGVHcmFwaGljc0NvbnRleHRQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVHcmFwaGljc0Nv
bnRleHRQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNDhCQjhERTI2Rjk2
MzVEMDAxQzFDNDAgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGNDhCQjhERjI2Rjk2MzkyMDAxQzFDNDAgLyogUmVtb3RlR3JhcGhpY3ND
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUdyYXBoaWNzQ29udGV4dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGNDhCQjhFMDI2Rjk2MzkyMDAxQzFDNDAgLyogUmVtb3Rl
R3JhcGhpY3NDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUdyYXBoaWNzQ29u
dGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OEQyQTg0MjE1ODNBMDIw
MEM2NzUyQiAvKiBBcHBLaXRTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwS2l0U1BJLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTZBNDJGMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFn
RHJvcEludGVyYWN0aW9uU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRHJhZ0Ryb3BJbnRlcmFjdGlv
blN0YXRlLmg7IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTZBNDMwMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJv
cEludGVyYWN0aW9uU3RhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBEcmFnRHJvcEludGVy
YWN0aW9uU3RhdGUubW07IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTA1NSw2ICs5MDY0LDggQEAKIAkJCQk3Qjkw
NDE2NjI1NEFGREVCMDA2RUVCOEMgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5oICov
LAogCQkJCTdCOTA0MTY3MjU0QUZFMTcwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5Lm1lc3NhZ2VzLmluICovLAogCQkJCTdCRTcyNjU3MjU3NEY2NzIwMEU4NUQ5OCAvKiBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5RnVuY3Rpb25zR2VuZXJhdGVkLmNwcCAqLywKKwkJ
CQlGNDhCQjhERTI2Rjk2MzVEMDAxQzFDNDAgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHku
Y3BwICovLAorCQkJCUY0OEJCOEREMjZGOTYzNUQwMDFDMUM0MCAvKiBSZW1vdGVHcmFwaGljc0Nv
bnRleHRQcm94eS5oICovLAogCQkJCTcyN0E3RjQ5MjQwOEFFRTYwMDREMjkzMSAvKiBSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmggKi8sCiAJCQkJNTUwNjQwOUQyNDA3MTYwOTAwQUFFMDQ1IC8qIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8sCiAJCQkJNTUwNjQwOUUyNDA3MTYwOTAw
QUFFMDQ1IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovLApAQCAtOTA3Miw2ICs5
MDgzLDggQEAKIAkJCQlGNDA5NENCQzI1NTMwNEFGMDAzRDczRTMgLyogRGlzcGxheUxpc3RSZWFk
ZXJIYW5kbGUuY3BwICovLAogCQkJCUY0MDk0Q0JCMjU1MzA0QUYwMDNENzNFMyAvKiBEaXNwbGF5
TGlzdFJlYWRlckhhbmRsZS5oICovLAogCQkJCTU1QUQwOTQzMjQwOEEwRTYwMERFNEQyRiAvKiBQ
bGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyLmggKi8sCisJCQkJRjQ4QkI4RTAyNkY5NjM5MjAwMUMx
QzQwIC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dC5jcHAgKi8sCisJCQkJRjQ4QkI4REYyNkY5NjM5
MjAwMUMxQzQwIC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dC5oICovLAogCQkJCTdCOTA0MTY5MjU0
QUZFQTcwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAgKi8sCiAJCQkJN0I5
MDQxNkEyNTRBRkVBNzAwNkVFQjhDIC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmggKi8sCiAJ
CQkJN0I5MDQxNjgyNTRBRkVBNzAwNkVFQjhDIC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1l
c3NhZ2VzLmluICovLApAQCAtMTE0NDMsNiArMTE0NTYsOSBAQAogCQkJCUNEODI1MkRBMjVENDkx
NTQwMDg2MkZEOCAvKiBSZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVuZXJQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAgKi8sCiAJCQkJQ0Q4MjUyRDkyNUQ0OTE1NDAwODYyRkQ4IC8qIFJlbW90ZVJlbW90
ZUNvbW1hbmRMaXN0ZW5lclByb3h5TWVzc2FnZXMuaCAqLywKIAkJCQlDRDgyNTJEODI1RDQ5MTUz
MDA4NjJGRDggLyogUmVtb3RlUmVtb3RlQ29tbWFuZExpc3RlbmVyUHJveHlNZXNzYWdlc1JlcGxp
ZXMuaCAqLywKKwkJCQlGNDUxN0Q3NzI2RkJDQ0U0MDA0Qzg0NzUgLyogUmVtb3RlUmVuZGVyaW5n
QmFja2VuZE1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCisJCQkJRjQ1MTdEN0EyNkZCQ0QzODAwNEM4
NDc1IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlcy5oICovLAorCQkJCUY0NTE3RDc5
MjZGQkNEMzgwMDRDODQ3NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXNSZXBsaWVz
LmggKi8sCiAJCQkJMEY1OTQ3QTUxODdCNTE3NjAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQkwRjU5NDdBNjE4N0I1MTc2MDA0
Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlcy5oICovLAogCQkJCTFE
RDJBNjZCMjU2MjAyMUUwMEZGN0I2RiAvKiBSZW1vdGVTb3VyY2VCdWZmZXJQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi8sCkBAIC0xMjU2MSw2ICsxMjU3Nyw4IEBACiAJCQkJMUFDMTMzODYxODU5
MEM0NjAwRjNFQzA1IC8qIFJlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ2MDg4QTAwMjYxRkE4QkMwMEUyNTAwRCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NjA4OEEwMTI2MUZBOEM0MDBFMjUwMEQgLyogUmVt
b3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRjQ1MTdEN0MyNkZCQ0QzOTAwNEM4NDc1IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNz
YWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjQ1MTdEN0IyNkZCQ0QzOTAwNEM4NDc1IC8qIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlc1JlcGxpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUY0MTRDRTJEMjY5REU2RUEwMEJEMjE2QSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTk0NzkwMTg3QjNCM0EwMDQzNzg1NyAvKiBSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1OTQ3QTgxODdCNTE3
NjAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zOWE0MTY5MTAxNGJiZTE1NTM2MmRkYmJiNmM5ZTRmOTg2OGI4YzA4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRQcm94eS5jcHAKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eS5oIgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVHcmFwaGljc0NvbnRleHRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjZTFiMGY0M2U3ODg0MWRiODk3
ZWEwNjI4NDBkYWY1NzY4MDAwZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5LmgKQEAgLTAs
MCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
aAppbmRleCAyN2JjZDAwNTQ1MDk1OGU4MDIxMjMzMGMxZTg5NmUzYzg5MTczNGZiLi5iYWNlMWFi
MmEwMTBkMDZlZDc0NWM5ZWRkNTAyNjgyN2Q0MzM3YzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiRW5jb2Rlci5oIgogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMu
aCIKICNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKICNpbmNsdWRlICJT
aGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+CkBAIC02NSwx
MCArNjYsOCBAQCBwdWJsaWM6CiAKICAgICB+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSgpCiAgICAg
ewotICAgICAgICBpZiAoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IHx8IG1fcmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LT5pc0dQVVByb2Nlc3NDb25uZWN0aW9uQ2xvc2VkKCkpIHsK
LSAgICAgICAgICAgIGNsZWFyRGlzcGxheUxpc3QoKTsKKyAgICAgICAgaWYgKCFtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSB8fCBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+aXNH
UFVQcm9jZXNzQ29ubmVjdGlvbkNsb3NlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9CiAKICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwogICAgICAgICBtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS0+cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5KCkucmVsZWFzZUlt
YWdlQnVmZmVyKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKQEAgLTI2MCwxMyArMjU5
LDEwIEBAIHByb3RlY3RlZDoKICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKCFtX2Ry
YXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuaXNFbXB0eSgpIHx8ICFoYXNQZW5kaW5nRmx1c2go
KSkgeworICAgICAgICBpZiAoIW1fZHJhd2luZ0NvbnRleHQuaXNFbXB0eSgpIHx8ICFoYXNQZW5k
aW5nRmx1c2goKSkgewogICAgICAgICAgICAgbV9zZW50Rmx1c2hJZGVudGlmaWVyID0gV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZsdXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKICAgICAgICAgICAg
IG1fZHJhd2luZ0NvbnRleHQucmVjb3JkZXIoKS5mbHVzaENvbnRleHQobV9zZW50Rmx1c2hJZGVu
dGlmaWVyKTsKICAgICAgICAgfQotCi0gICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LT5zZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKLSAgICAgICAgY2xlYXJE
aXNwbGF5TGlzdCgpOwogICAgIH0KIAogICAgIHZvaWQgcmVjb3JkTmF0aXZlSW1hZ2VVc2UoV2Vi
Q29yZTo6TmF0aXZlSW1hZ2UmIGltYWdlKSBmaW5hbApAQCAtMjg2LDM0ICsyODIsMTcgQEAgcHJv
dGVjdGVkOgogCiAgICAgdm9pZCBjaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyKFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBuZXh0SW1hZ2VCdWZmZXIpIGZpbmFsCiAgICAg
ewotICAgICAgICBib29sIHdhc0VtcHR5ID0gbV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgp
LmlzRW1wdHkoKTsKLSAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpLnRlbXBs
YXRlIGFwcGVuZDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5h
dGlvbkltYWdlQnVmZmVyPihuZXh0SW1hZ2VCdWZmZXIpOwotICAgICAgICBpZiAod2FzRW1wdHkp
Ci0gICAgICAgICAgICBjbGVhckRpc3BsYXlMaXN0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBwcmVw
YXJlVG9BcHBlbmREaXNwbGF5TGlzdEl0ZW1zKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVm
ZmVySGFuZGxlJiYgaGFuZGxlKSBmaW5hbAotICAgIHsKLSAgICAgICAgbV9kcmF3aW5nQ29udGV4
dC5kaXNwbGF5TGlzdCgpLnByZXBhcmVUb0FwcGVuZChXVEZNb3ZlKGhhbmRsZSkpOwotICAgIH0K
LQotICAgIHZvaWQgY2xlYXJEaXNwbGF5TGlzdCgpCi0gICAgewotICAgICAgICBtX2RyYXdpbmdD
b250ZXh0LmRpc3BsYXlMaXN0KCkuY2xlYXIoKTsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCBtZS4KKyAgICAgICAgVU5VU0VEX1BBUkFNKG5leHRJbWFnZUJ1ZmZlcik7CiAgICAgfQogCiAg
ICAgYm9vbCBjYW5BcHBlbmRJdGVtT2ZUeXBlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZSkgZmluYWwKICAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+d2lsbEFwcGVuZEl0ZW0obV9yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lkIGRp
ZEFwcGVuZERhdGEoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUm
IGhhbmRsZSwgc2l6ZV90IG51bWJlck9mQnl0ZXMsIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaWRD
aGFuZ2VJdGVtQnVmZmVyIGRpZENoYW5nZUl0ZW1CdWZmZXIpIGZpbmFsCisgICAgdm9pZCBkaWRB
cHBlbmREYXRhKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlJiwg
c2l6ZV90LCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlkQ2hhbmdlSXRlbUJ1ZmZlcikgZmluYWwK
ICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkp
KQotICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPmRpZEFwcGVuZERh
dGEoaGFuZGxlLCBudW1iZXJPZkJ5dGVzLCBkaWRDaGFuZ2VJdGVtQnVmZmVyLCBtX3JlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgfQogCiAgICAgdm9pZCByZWNvcmRGb250VXNlKFdl
YkNvcmU6OkZvbnQmIGZvbnQpIGZpbmFsCkBAIC0zMjgsMTIgKzMwNyw4IEBAIHByb3RlY3RlZDoK
ICAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5yZW1vdGVSZXNvdXJj
ZUNhY2hlUHJveHkoKS5yZWNvcmRJbWFnZUJ1ZmZlclVzZShpbWFnZUJ1ZmZlcik7CiAgICAgfQog
Ci0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1
ZmZlcihzaXplX3QgY2FwYWNpdHkpIGZpbmFsCisgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1CdWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QpIGZpbmFsCiAgICAgewotICAg
ICAgICBpZiAoTElLRUxZKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKLSAgICAgICAg
ICAgIHJldHVybiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Y3JlYXRlSXRlbUJ1ZmZl
cihjYXBhY2l0eSwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotCi0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAtMzUz
LDYgKzMyOCwzOTYgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gV1RGOjptYWtlVW5pcXVl
PFRocmVhZFNhZmVSZW1vdGVJbWFnZUJ1ZmZlckZsdXNoZXI8QmFja2VuZFR5cGU+PigqdGhpcyk7
CiAgICAgfQogCisgICAgdm9pZCByZWNvcmQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNh
dmUmIGl0ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2Vu
ZERpc3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlU2F2ZShpdGVtKSk7CisgICAg
fQorCisgICAgdm9pZCByZWNvcmQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmUm
IGl0ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2VuZERp
c3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBNZXNz
YWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlUmVzdG9yZShpdGVtKSk7CisgICAg
fQorCisgICAgdm9pZCByZWNvcmQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0
ZSYgaXRlbSkgZmluYWwKKyAgICB7CisgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eSkKKyAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zZW5k
RGlzcGxheUxpc3RJdGVtVG9TdHJlYW0obV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIE1l
c3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpIYW5kbGVUcmFuc2xhdGUoaXRlbSkpOwor
ICAgIH0KKworICAgIHZvaWQgcmVjb3JkKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3Rh
dGUmIGl0ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2Vu
ZERpc3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlUm90YXRlKGl0ZW0pKTsKKyAg
ICB9CisKKyAgICB2b2lkIHJlY29yZChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGUm
IGl0ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2VuZERp
c3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBNZXNz
YWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlU2NhbGUoaXRlbSkpOworICAgIH0K
KworICAgIHZvaWQgcmVjb3JkKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE0mIGl0
ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2VuZERpc3Bs
YXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBNZXNzYWdl
czo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlU2V0Q1RNKGl0ZW0pKTsKKyAgICB9CisK
KyAgICB2b2lkIHJlY29yZChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVD
VE0mIGl0ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2Vu
ZERpc3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlQ29uY2F0ZW5hdGVDVE0oaXRl
bSkpOworICAgIH0KKworICAgIHZvaWQgcmVjb3JkKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRJbmxpbmVGaWxsQ29sb3ImIGl0ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS0+c2VuZERpc3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFuZGxl
U2V0SW5saW5lRmlsbENvbG9yKGl0ZW0pKTsKKyAgICB9CisKKyAgICB2b2lkIHJlY29yZChjb25z
dCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3ImIGl0ZW0pIGZpbmFs
CisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCisgICAg
ICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2VuZERpc3BsYXlMaXN0SXRl
bVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlU2V0SW5saW5lU3Ryb2tlQ29sb3IoaXRlbSkpOworICAg
IH0KKworICAgIHZvaWQgcmVjb3JkKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJv
a2VUaGlja25lc3MmIGl0ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS0+c2VuZERpc3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlU2V0U3Ryb2tl
VGhpY2tuZXNzKGl0ZW0pKTsKKyAgICB9CisKKyAgICB2b2lkIHJlY29yZChjb25zdCBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0U3RhdGUmIGl0ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAo
bV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS0+c2VuZERpc3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFu
ZGxlU2V0U3RhdGUoaXRlbSkpOworICAgIH0KKworICAgIHZvaWQgcmVjb3JkKGNvbnN0IFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwJiBpdGVtKSBmaW5hbAorICAgIHsKKyAgICAgICAg
aWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQorICAgICAgICAgICAgbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHktPnNlbmREaXNwbGF5TGlzdEl0ZW1Ub1N0cmVhbShtX3JlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OkhhbmRsZVNldExpbmVDYXAoaXRlbSkpOworICAgIH0KKworICAgIHZvaWQgcmVjb3JkKGNvbnN0
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCYgaXRlbSkgZmluYWwKKyAgICB7Cisg
ICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAgICAgICAgIG1f
cmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zZW5kRGlzcGxheUxpc3RJdGVtVG9TdHJlYW0o
bV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpIYW5kbGVTZXRMaW5lRGFzaChpdGVtKSk7CisgICAgfQorCisgICAgdm9pZCByZWNv
cmQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luJiBpdGVtKSBmaW5hbAor
ICAgIHsKKyAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQorICAgICAg
ICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnNlbmREaXNwbGF5TGlzdEl0ZW1U
b1N0cmVhbShtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OkhhbmRsZVNldExpbmVKb2luKGl0ZW0pKTsKKyAgICB9CisKKyAgICB2
b2lkIHJlY29yZChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdCYgaXRl
bSkgZmluYWwKKyAgICB7CisgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eSkKKyAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zZW5kRGlzcGxh
eUxpc3RJdGVtVG9TdHJlYW0obV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIE1lc3NhZ2Vz
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpIYW5kbGVTZXRNaXRlckxpbWl0KGl0ZW0pKTsKKyAg
ICB9CisKKyAgICB2b2lkIHJlY29yZChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJT
aGFkb3cmIGl0ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+
c2VuZERpc3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlQ2xlYXJTaGFkb3coaXRl
bSkpOworICAgIH0KKworICAgIHZvaWQgcmVjb3JkKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpDbGlwJiBpdGVtKSBmaW5hbAorICAgIHsKKyAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5KQorICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkt
PnNlbmREaXNwbGF5TGlzdEl0ZW1Ub1N0cmVhbShtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkhhbmRsZUNsaXAoaXRlbSkpOwor
ICAgIH0KKworICAgIHZvaWQgcmVjb3JkKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlw
T3V0JiBpdGVtKSBmaW5hbAorICAgIHsKKyAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5KQorICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnNl
bmREaXNwbGF5TGlzdEl0ZW1Ub1N0cmVhbShtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkhhbmRsZUNsaXBPdXQoaXRlbSkpOwor
ICAgIH0KKworICAgIHZvaWQgcmVjb3JkKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlw
VG9JbWFnZUJ1ZmZlciYgaXRlbSkgZmluYWwKKyAgICB7CisgICAgICAgIGlmIChtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LT5zZW5kRGlzcGxheUxpc3RJdGVtVG9TdHJlYW0obV9yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIsIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpIYW5kbGVDbGlwVG9J
bWFnZUJ1ZmZlcihpdGVtKSk7CisgICAgfQorCisgICAgdm9pZCByZWNvcmQoY29uc3QgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGgmIGl0ZW0pIGZpbmFsCisgICAgeworICAgICAg
ICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCisgICAgICAgICAgICBtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2VuZERpc3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6SGFuZGxlQ2xpcE91dFRvUGF0aChpdGVtKSk7CisgICAgfQorCisgICAgdm9pZCByZWNvcmQo
Y29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoJiBpdGVtKSBmaW5hbAorICAgIHsK
KyAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQorICAgICAgICAgICAg
bV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnNlbmREaXNwbGF5TGlzdEl0ZW1Ub1N0cmVh
bShtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OkhhbmRsZUNsaXBQYXRoKGl0ZW0pKTsKKyAgICB9CisKKyAgICB2b2lkIHJlY29y
ZChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5DbGlwVG9EcmF3aW5nQ29tbWFuZHMm
IGl0ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2VuZERp
c3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBNZXNz
YWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlQmVnaW5DbGlwVG9EcmF3aW5nQ29t
bWFuZHMoaXRlbSkpOworICAgIH0KKworICAgIHZvaWQgcmVjb3JkKGNvbnN0IFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpFbmRDbGlwVG9EcmF3aW5nQ29tbWFuZHMmIGl0ZW0pIGZpbmFsCisgICAgewor
ICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCisgICAgICAgICAgICBt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2VuZERpc3BsYXlMaXN0SXRlbVRvU3RyZWFt
KG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6SGFuZGxlRW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKGl0ZW0pKTsKKyAgICB9CisK
KyAgICB2b2lkIHJlY29yZChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBocyYg
aXRlbSkgZmluYWwKKyAgICB7CisgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSkKKyAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zZW5kRGlz
cGxheUxpc3RJdGVtVG9TdHJlYW0obV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIE1lc3Nh
Z2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpIYW5kbGVEcmF3R2x5cGhzKGl0ZW0pKTsKKyAg
ICB9CisKKyAgICB2b2lkIHJlY29yZChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0lt
YWdlQnVmZmVyJiBpdGVtKSBmaW5hbAorICAgIHsKKyAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KQorICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHktPnNlbmREaXNwbGF5TGlzdEl0ZW1Ub1N0cmVhbShtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkhhbmRsZURyYXdJbWFnZUJ1
ZmZlcihpdGVtKSk7CisgICAgfQorCisgICAgdm9pZCByZWNvcmQoY29uc3QgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZSYgaXRlbSkgZmluYWwKKyAgICB7CisgICAgICAgIGlm
IChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAgICAgICAgIG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LT5zZW5kRGlzcGxheUxpc3RJdGVtVG9TdHJlYW0obV9yZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpI
YW5kbGVEcmF3TmF0aXZlSW1hZ2UoaXRlbSkpOworICAgIH0KKworICAgIHZvaWQgcmVjb3JkKGNv
bnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybiYgaXRlbSkgZmluYWwKKyAgICB7
CisgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAgICAgICAg
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zZW5kRGlzcGxheUxpc3RJdGVtVG9TdHJl
YW0obV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpIYW5kbGVEcmF3UGF0dGVybihpdGVtKSk7CisgICAgfQorCisgICAgdm9pZCBy
ZWNvcmQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIm
IGl0ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2VuZERp
c3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBNZXNz
YWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlQmVnaW5UcmFuc3BhcmVuY3lMYXll
cihpdGVtKSk7CisgICAgfQorCisgICAgdm9pZCByZWNvcmQoY29uc3QgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyJiBpdGVtKSBmaW5hbAorICAgIHsKKyAgICAgICAg
aWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQorICAgICAgICAgICAgbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHktPnNlbmREaXNwbGF5TGlzdEl0ZW1Ub1N0cmVhbShtX3JlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OkhhbmRsZUVuZFRyYW5zcGFyZW5jeUxheWVyKGl0ZW0pKTsKKyAgICB9CisKKyAgICB2b2lkIHJl
Y29yZChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3QmIGl0ZW0pIGZpbmFsCisg
ICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCisgICAgICAg
ICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2VuZERpc3BsYXlMaXN0SXRlbVRv
U3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6SGFuZGxlRHJhd1JlY3QoaXRlbSkpOworICAgIH0KKworICAgIHZvaWQg
cmVjb3JkKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZSYgaXRlbSkgZmluYWwK
KyAgICB7CisgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAg
ICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zZW5kRGlzcGxheUxpc3RJdGVt
VG9TdHJlYW0obV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpIYW5kbGVEcmF3TGluZShpdGVtKSk7CisgICAgfQorCisgICAgdm9p
ZCByZWNvcmQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQmIGl0
ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2VuZERpc3Bs
YXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBNZXNzYWdl
czo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlRHJhd0xpbmVzRm9yVGV4dChpdGVtKSk7
CisgICAgfQorCisgICAgdm9pZCByZWNvcmQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXImIGl0ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAo
bV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS0+c2VuZERpc3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFu
ZGxlRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihpdGVtKSk7CisgICAgfQorCisgICAgdm9pZCBy
ZWNvcmQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlJiBpdGVtKSBmaW5h
bAorICAgIHsKKyAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQorICAg
ICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnNlbmREaXNwbGF5TGlzdEl0
ZW1Ub1N0cmVhbShtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OkhhbmRsZURyYXdFbGxpcHNlKGl0ZW0pKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlY29yZChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGgmIGl0ZW0p
IGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkp
CisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2VuZERpc3BsYXlM
aXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBNZXNzYWdlczo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlRHJhd1BhdGgoaXRlbSkpOworICAgIH0KKwor
ICAgIHZvaWQgcmVjb3JkKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5n
UGF0aCYgaXRlbSkgZmluYWwKKyAgICB7CisgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eSkKKyAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5z
ZW5kRGlzcGxheUxpc3RJdGVtVG9TdHJlYW0obV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIs
IE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpIYW5kbGVEcmF3Rm9jdXNSaW5nUGF0
aChpdGVtKSk7CisgICAgfQorCisgICAgdm9pZCByZWNvcmQoY29uc3QgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0cyYgaXRlbSkgZmluYWwKKyAgICB7CisgICAgICAgIGlm
IChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAgICAgICAgIG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LT5zZW5kRGlzcGxheUxpc3RJdGVtVG9TdHJlYW0obV9yZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpI
YW5kbGVEcmF3Rm9jdXNSaW5nUmVjdHMoaXRlbSkpOworICAgIH0KKworICAgIHZvaWQgcmVjb3Jk
KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdCYgaXRlbSkgZmluYWwKKyAgICB7
CisgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAgICAgICAg
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zZW5kRGlzcGxheUxpc3RJdGVtVG9TdHJl
YW0obV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpIYW5kbGVGaWxsUmVjdChpdGVtKSk7CisgICAgfQorCisgICAgdm9pZCByZWNv
cmQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yJiBpdGVtKSBm
aW5hbAorICAgIHsKKyAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQor
ICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnNlbmREaXNwbGF5TGlz
dEl0ZW1Ub1N0cmVhbShtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkhhbmRsZUZpbGxSZWN0V2l0aENvbG9yKGl0ZW0pKTsKKyAg
ICB9CisKKyAgICB2b2lkIHJlY29yZChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJl
Y3RXaXRoR3JhZGllbnQmIGl0ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS0+c2VuZERpc3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlRmlsbFJl
Y3RXaXRoR3JhZGllbnQoaXRlbSkpOworICAgIH0KKworICAgIHZvaWQgcmVjb3JkKGNvbnN0IFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3QmIGl0ZW0pIGZpbmFsCisgICAg
eworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCisgICAgICAgICAg
ICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2VuZERpc3BsYXlMaXN0SXRlbVRvU3Ry
ZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6SGFuZGxlRmlsbENvbXBvc2l0ZWRSZWN0KGl0ZW0pKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlY29yZChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0
JiBpdGVtKSBmaW5hbAorICAgIHsKKyAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KQorICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnNlbmRE
aXNwbGF5TGlzdEl0ZW1Ub1N0cmVhbShtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgTWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkhhbmRsZUZpbGxSb3VuZGVkUmVjdChpdGVt
KSk7CisgICAgfQorCisgICAgdm9pZCByZWNvcmQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlJiBpdGVtKSBmaW5hbAorICAgIHsKKyAgICAgICAgaWYg
KG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQorICAgICAgICAgICAgbV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHktPnNlbmREaXNwbGF5TGlzdEl0ZW1Ub1N0cmVhbShtX3JlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Okhh
bmRsZUZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGl0ZW0pKTsKKyAgICB9CisKKyAgICB2b2lkIHJl
Y29yZChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbExpbmUmIGl0ZW0pIGZpbmFsCisg
ICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCisgICAgICAg
ICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2VuZERpc3BsYXlMaXN0SXRlbVRv
U3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6SGFuZGxlRmlsbExpbmUoaXRlbSkpOworICAgIH0KKworICAgIHZvaWQg
cmVjb3JkKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQXJjJiBpdGVtKSBmaW5hbAor
ICAgIHsKKyAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQorICAgICAg
ICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnNlbmREaXNwbGF5TGlzdEl0ZW1U
b1N0cmVhbShtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OkhhbmRsZUZpbGxBcmMoaXRlbSkpOworICAgIH0KKworICAgIHZvaWQg
cmVjb3JkKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUXVhZEN1cnZlJiBpdGVtKSBm
aW5hbAorICAgIHsKKyAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQor
ICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnNlbmREaXNwbGF5TGlz
dEl0ZW1Ub1N0cmVhbShtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkhhbmRsZUZpbGxRdWFkQ3VydmUoaXRlbSkpOworICAgIH0K
KworICAgIHZvaWQgcmVjb3JkKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQmV6aWVy
Q3VydmUmIGl0ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+
c2VuZERpc3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlRmlsbEJlemllckN1cnZl
KGl0ZW0pKTsKKyAgICB9CisKKyAgICB2b2lkIHJlY29yZChjb25zdCBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbFBhdGgmIGl0ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS0+c2VuZERpc3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlRmlsbFBh
dGgoaXRlbSkpOworICAgIH0KKworICAgIHZvaWQgcmVjb3JkKGNvbnN0IFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsRWxsaXBzZSYgaXRlbSkgZmluYWwKKyAgICB7CisgICAgICAgIGlmIChtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LT5zZW5kRGlzcGxheUxpc3RJdGVtVG9TdHJlYW0obV9yZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpIYW5kbGVG
aWxsRWxsaXBzZShpdGVtKSk7CisgICAgfQorCisgICAgdm9pZCByZWNvcmQoY29uc3QgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkdldFBpeGVsQnVmZmVyJiBpdGVtKSBmaW5hbAorICAgIHsKKyAgICAg
ICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQorICAgICAgICAgICAgbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnNlbmREaXNwbGF5TGlzdEl0ZW1Ub1N0cmVhbShtX3Jl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OkhhbmRsZUdldFBpeGVsQnVmZmVyKGl0ZW0pKTsKKyAgICB9CisKKyAgICB2b2lkIHJlY29y
ZChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXImIGl0ZW0pIGZpbmFs
CisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCisgICAg
ICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2VuZERpc3BsYXlMaXN0SXRl
bVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlUHV0UGl4ZWxCdWZmZXIoaXRlbSkpOworICAgIH0KKwor
ICAgIHZvaWQgcmVjb3JkKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9y
TWVkaWEmIGl0ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+
c2VuZERpc3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlUGFpbnRGcmFtZUZvck1l
ZGlhKGl0ZW0pKTsKKyAgICB9CisKKyAgICB2b2lkIHJlY29yZChjb25zdCBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U3Ryb2tlUmVjdCYgaXRlbSkgZmluYWwKKyAgICB7CisgICAgICAgIGlmIChtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LT5zZW5kRGlzcGxheUxpc3RJdGVtVG9TdHJlYW0obV9yZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpIYW5kbGVT
dHJva2VSZWN0KGl0ZW0pKTsKKyAgICB9CisKKyAgICB2b2lkIHJlY29yZChjb25zdCBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U3Ryb2tlTGluZSYgaXRlbSkgZmluYWwKKyAgICB7CisgICAgICAgIGlm
IChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAgICAgICAgIG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LT5zZW5kRGlzcGxheUxpc3RJdGVtVG9TdHJlYW0obV9yZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpI
YW5kbGVTdHJva2VMaW5lKGl0ZW0pKTsKKyAgICB9CisKKyAgICB2b2lkIHJlY29yZChjb25zdCBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlQXJjJiBpdGVtKSBmaW5hbAorICAgIHsKKyAgICAg
ICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQorICAgICAgICAgICAgbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnNlbmREaXNwbGF5TGlzdEl0ZW1Ub1N0cmVhbShtX3Jl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OkhhbmRsZVN0cm9rZUFyYyhpdGVtKSk7CisgICAgfQorCisgICAgdm9pZCByZWNvcmQoY29u
c3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVF1YWRDdXJ2ZSYgaXRlbSkgZmluYWwKKyAg
ICB7CisgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAgICAg
ICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zZW5kRGlzcGxheUxpc3RJdGVtVG9T
dHJlYW0obV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIE1lc3NhZ2VzOjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpIYW5kbGVTdHJva2VRdWFkQ3VydmUoaXRlbSkpOworICAgIH0KKworICAg
IHZvaWQgcmVjb3JkKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VCZXppZXJDdXJ2
ZSYgaXRlbSkgZmluYWwKKyAgICB7CisgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eSkKKyAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zZW5k
RGlzcGxheUxpc3RJdGVtVG9TdHJlYW0obV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIE1l
c3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpIYW5kbGVTdHJva2VCZXppZXJDdXJ2ZShp
dGVtKSk7CisgICAgfQorCisgICAgdm9pZCByZWNvcmQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlN0cm9rZVBhdGgmIGl0ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS0+c2VuZERpc3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlU3Ryb2tl
UGF0aChpdGVtKSk7CisgICAgfQorCisgICAgdm9pZCByZWNvcmQoY29uc3QgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlN0cm9rZUVsbGlwc2UmIGl0ZW0pIGZpbmFsCisgICAgeworICAgICAgICBpZiAo
bV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCisgICAgICAgICAgICBtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS0+c2VuZERpc3BsYXlMaXN0SXRlbVRvU3RyZWFtKG1fcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6SGFu
ZGxlU3Ryb2tlRWxsaXBzZShpdGVtKSk7CisgICAgfQorCisgICAgdm9pZCByZWNvcmQoY29uc3Qg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdCYgaXRlbSkgZmluYWwKKyAgICB7CisgICAg
ICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAgICAgICAgIG1fcmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zZW5kRGlzcGxheUxpc3RJdGVtVG9TdHJlYW0obV9y
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpIYW5kbGVDbGVhclJlY3QoaXRlbSkpOworICAgIH0KKworICAgIHZvaWQgcmVjb3JkKGNv
bnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm4mIGl0ZW0pIGZpbmFs
CisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCisgICAg
ICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2VuZERpc3BsYXlMaXN0SXRl
bVRvU3RyZWFtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6SGFuZGxlQXBwbHlTdHJva2VQYXR0ZXJuKGl0ZW0pKTsKKyAgICB9
CisKKyAgICB2b2lkIHJlY29yZChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxs
UGF0dGVybiYgaXRlbSkgZmluYWwKKyAgICB7CisgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eSkKKyAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LT5zZW5kRGlzcGxheUxpc3RJdGVtVG9TdHJlYW0obV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpIYW5kbGVBcHBseUZpbGxQYXR0
ZXJuKGl0ZW0pKTsKKyAgICB9CisKKyAgICB2b2lkIHJlY29yZChjb25zdCBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvciYgaXRlbSkgZmluYWwKKyAgICB7CisgICAg
ICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAgICAgICAgIG1fcmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zZW5kRGlzcGxheUxpc3RJdGVtVG9TdHJlYW0obV9y
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpIYW5kbGVBcHBseURldmljZVNjYWxlRmFjdG9yKGl0ZW0pKTsKKyAgICB9CisKKyAgICB2
b2lkIHJlY29yZChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1c2hDb250ZXh0JiBpdGVt
KSBmaW5hbAorICAgIHsKKyAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
KQorICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnNlbmREaXNwbGF5
TGlzdEl0ZW1Ub1N0cmVhbShtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkhhbmRsZUZsdXNoQ29udGV4dChpdGVtKSk7CisgICAg
fQorCisgICAgdm9pZCByZWNvcmQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Ok1ldGFDb21t
YW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlciYgaXRlbSkgZmluYWwKKyAgICB7CisgICAg
ICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAgICAgICAgIG1fcmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zZW5kRGlzcGxheUxpc3RJdGVtVG9TdHJlYW0obV9y
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpIYW5kbGVNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIoaXRlbSkp
OworICAgIH0KKwogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaElkZW50aWZpZXIgbV9z
ZW50Rmx1c2hJZGVudGlmaWVyOwogICAgIExvY2sgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllckxv
Y2s7CiAgICAgQ29uZGl0aW9uIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXJDaGFuZ2VkQ29uZGl0
aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4IGVjNzkz
NDEwNmIxMWIzNjZjNzg4YzUzYmQ5YjI0MDk3OTY5YmQ5ZDkuLmU2MjdkNTUwZTkxN2QzM2M2ZjJj
MWZmNDI5MzdhZDhmODM0MTdmZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5jcHAKQEAgLTc1LDEwICs3NSwxMiBAQCBHUFVQcm9jZXNzQ29ubmVjdGlvbiYgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjplbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpCiB7CiAg
ICAgaWYgKCFtX2dwdVByb2Nlc3NDb25uZWN0aW9uKSB7CiAgICAgICAgIGF1dG8mIGdwdVByb2Nl
c3NDb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24oKTsKKyAgICAgICAgbV9zdHJlYW1Db25uZWN0aW9uID0gbWFrZVVuaXF1ZTxJUEM6
OlN0cmVhbUNsaWVudENvbm5lY3Rpb24+KGdwdVByb2Nlc3NDb25uZWN0aW9uLmNvbm5lY3Rpb24o
KSwgMSA8PCAyMSk7CiAgICAgICAgIGdwdVByb2Nlc3NDb25uZWN0aW9uLmFkZENsaWVudCgqdGhp
cyk7CiAgICAgICAgIGdwdVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFk
ZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCkudG9VSW50
NjQoKSwgKnRoaXMpOwotICAgICAgICBncHVQcm9jZXNzQ29ubmVjdGlvbi5jb25uZWN0aW9uKCku
c2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5n
QmFja2VuZChtX3BhcmFtZXRlcnMpLCAwLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2Fn
ZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAgICAgIGdwdVByb2Nlc3NDb25uZWN0
aW9uLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKG1fcGFyYW1ldGVycywgbV9zdHJlYW1Db25uZWN0aW9u
LT5zdHJlYW1CdWZmZXIoKSksIDAsIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZl
bldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKICAgICAgICAgbV9ncHVQcm9jZXNzQ29ubmVjdGlv
biA9IG1ha2VXZWFrUHRyKGdwdVByb2Nlc3NDb25uZWN0aW9uKTsKKyAgICAgICAgbWVzc2FnZVNl
bmRlckNvbm5lY3Rpb24oKS0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6RGlkQ3JlYXRlV2FrZVVwU2VtYXBob3JlRm9y
RGlzcGxheUxpc3RTdHJlYW0+KHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIDNfcywgSVBD
OjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOwog
ICAgIH0KICAgICByZXR1cm4gKm1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb247CiB9CkBAIC0xMzMsNyAr
MTM1LDcgQEAgYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndhaXRGb3JEaWRGbHVz
aCgpCiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVSZW1vdGVJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q3JlYXRlSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIubG9n
aWNhbFNpemUoKSwgaW1hZ2VCdWZmZXIucmVuZGVyaW5nTW9kZSgpLCBpbWFnZUJ1ZmZlci5yZXNv
bHV0aW9uU2NhbGUoKSwgaW1hZ2VCdWZmZXIuY29sb3JTcGFjZSgpLCBpbWFnZUJ1ZmZlci5waXhl
bEZvcm1hdCgpLCBpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSksIHJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNz
YWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICBzZW5kVG9TdHJlYW0oTWVzc2Fn
ZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNyZWF0ZUltYWdlQnVmZmVyKGltYWdlQnVmZmVy
LmxvZ2ljYWxTaXplKCksIGltYWdlQnVmZmVyLnJlbmRlcmluZ01vZGUoKSwgaW1hZ2VCdWZmZXIu
cmVzb2x1dGlvblNjYWxlKCksIGltYWdlQnVmZmVyLmNvbG9yU3BhY2UoKSwgaW1hZ2VCdWZmZXIu
cGl4ZWxGb3JtYXQoKSwgaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkp
KTsKIH0KIAogUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQpCkBAIC0xNjMsMzYg
KzE2NSw4IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpCiAKIFNoYXJlZE1lbW9yeSogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpzaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcihzaXpl
X3QgZGF0YVNpemUsIElQQzo6VGltZW91dCB0aW1lb3V0KQogewotICAgIHNlbmREZWZlcnJlZFdh
a2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwotCi0gICAgYm9vbCBuZWVkc1NoYXJlZE1lbW9yeSA9ICFt
X2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5IHx8IGRhdGFTaXplID4gbV9nZXRQaXhlbEJ1ZmZl
clNoYXJlZE1lbW9yeUxlbmd0aDsKLSAgICBib29sIG5lZWRzU2VtYXBob3JlID0gIW1fZ2V0UGl4
ZWxCdWZmZXJTZW1hcGhvcmU7Ci0KLSAgICBpZiAobmVlZHNTaGFyZWRNZW1vcnkpCi0gICAgICAg
IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkgPSBudWxscHRyOwotCi0gICAgU2hhcmVkTWVt
b3J5OjpJUENIYW5kbGUgaGFuZGxlOwotICAgIElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZTsKLQot
ICAgIGlmIChuZWVkc1NoYXJlZE1lbW9yeSAmJiBuZWVkc1NlbWFwaG9yZSkKLSAgICAgICAgc2Vu
ZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9y
eUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKGRhdGFTaXplKSwgTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBp
eGVsQnVmZmVyOjpSZXBseShoYW5kbGUsIHNlbWFwaG9yZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKCksIHRpbWVvdXQsIElQQzo6U2VuZFN5bmNPcHRpb246Ok1haW50YWluT3JkZXJpbmdX
aXRoQXN5bmNNZXNzYWdlcyk7Ci0gICAgZWxzZSBpZiAobmVlZHNTaGFyZWRNZW1vcnkpCi0gICAg
ICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFy
ZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcihkYXRhU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcjo6UmVwbHko
aGFuZGxlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgdGltZW91dCwgSVBDOjpTZW5k
U3luY09wdGlvbjo6TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzKTsKLSAgICBlbHNl
IGlmIChuZWVkc1NlbWFwaG9yZSkKLSAgICAgICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OlNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKCksIE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcjo6UmVwbHko
c2VtYXBob3JlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgdGltZW91dCk7Ci0KLSAg
ICBpZiAoIWhhbmRsZS5oYW5kbGUuaXNOdWxsKCkpIHsKLSAgICAgICAgbV9nZXRQaXhlbEJ1ZmZl
clNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6bWFwKGhhbmRsZS5oYW5kbGUsIFNoYXJlZE1l
bW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwotICAgICAgICBtX2dldFBpeGVsQnVmZmVyU2hh
cmVkTWVtb3J5TGVuZ3RoID0gaGFuZGxlLmRhdGFTaXplOwotICAgIH0KLSAgICBpZiAobmVlZHNT
ZW1hcGhvcmUpCi0gICAgICAgIG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmUgPSBXVEZNb3ZlKHNl
bWFwaG9yZSk7Ci0KLSAgICBpZiAobV9kZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlU
aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX2Rlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1l
bW9yeVRpbWVyLnN0b3AoKTsKLSAgICBtX2Rlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9y
eVRpbWVyLnN0YXJ0T25lU2hvdCg1X3MpOwotCi0gICAgcmV0dXJuIG1fZ2V0UGl4ZWxCdWZmZXJT
aGFyZWRNZW1vcnkuZ2V0KCk7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBtZS4KKyAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAogYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndhaXRG
b3JHZXRQaXhlbEJ1ZmZlclRvQ29tcGxldGUoSVBDOjpUaW1lb3V0IHRpbWVvdXQpCkBAIC0yMDMs
NjggKzE3Nyw1NSBAQCBib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckdl
dFBpeGVsQnVmZmVyVG9Db21wbGV0ZShJUEM6OlRpbWVvdXQgdAogCiB2b2lkIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6ZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KCkKIHsK
LSAgICBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5ID0gbnVsbHB0cjsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpEZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFy
ZWRNZW1vcnkoKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9u
OjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgbWUuCiB9CiAKIFN0cmluZyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OmdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6
Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbiwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcikKIHsKLSAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKLQot
ICAgIFN0cmluZyB1cmxTdHJpbmc7Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OkdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihtaW1lVHlwZSwgcXVhbGl0eSwg
cHJlc2VydmVSZXNvbHV0aW9uLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBNZXNzYWdl
czo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0RGF0YVVSTEZvckltYWdlQnVmZmVyOjpSZXBs
eSh1cmxTdHJpbmcpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCAxX3MpOwotICAgIHJl
dHVybiB1cmxTdHJpbmc7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBtZS4KKyAgICByZXR1cm4g
eyB9OwogfQogCiBWZWN0b3I8dWludDhfdD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpn
ZXREYXRhRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpCiB7Ci0gICAgc2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVl
ZGVkKCk7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBzZW5kU3luYyhNZXNzYWdl
czo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0RGF0YUZvckltYWdlQnVmZmVyKG1pbWVUeXBl
LCBxdWFsaXR5LCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6R2V0RGF0YUZvckltYWdlQnVmZmVyOjpSZXBseShkYXRhKSwgcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgMV9zKTsKLSAgICByZXR1cm4gZGF0YTsKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IG1lLgorICAgIHJldHVybiB7IH07CiB9CiAKIFJlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0U2hhcmVhYmxlQml0
bWFwKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKIHsKLSAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNz
YWdlSWZOZWVkZWQoKTsKLQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAg
ICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6R2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIHByZXNl
cnZlUmVzb2x1dGlvbiksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRTaGFy
ZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcjo6UmVwbHkoaGFuZGxlKSwgcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIoKSwgMV9zKTsKLSAgICBpZiAoaGFuZGxlLmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm4geyB9OwotICAgIEFTU0VSVF9VTlVTRUQoc2VuZFJlc3VsdCwgc2VuZFJlc3VsdCk7Ci0g
ICAgcmV0dXJuIFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7CisgICAgLy8gRklYTUU6
IEltcGxlbWVudCBtZS4KKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6Y2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OkNhY2hlTmF0aXZlSW1hZ2UoaGFuZGxlLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
LCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNo
TWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAgLy8gRklYTUU6IEltcGxl
bWVudCBtZS4KIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNhY2hlRm9u
dChSZWY8V2ViQ29yZTo6Rm9udD4mJiBmb250KQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmNhY2hlRm9udChSZWY8Rm9udD4mJiBmb250KQogewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNhY2hlRm9udChXVEZNb3ZlKGZvbnQpKSwgcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VF
dmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUu
CiB9CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkZWxldGVBbGxGb250cygp
CiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6RGVsZXRlQWxs
Rm9udHMoKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpE
aXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgbWUuCiB9CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpy
ZWxlYXNlUmVtb3RlUmVzb3VyY2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpCiB7Ci0gICAgaWYgKHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciA9PSBtX2N1cnJlbnREZXN0aW5hdGlvbkltYWdlQnVmZmVy
SWRlbnRpZmllcikKLSAgICAgICAgbV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50
aWZpZXIgPSBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpSZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLCB1c2VDb3VudCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9w
dGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IG1lLgogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6ZmluYWxpemVSZW5kZXJpbmdVcGRhdGUoKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKG1fcmVuZGVyaW5n
VXBkYXRlSUQpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246
OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7Ci0gICAgbV9yZW1v
dGVSZXNvdXJjZUNhY2hlUHJveHkuZmluYWxpemVSZW5kZXJpbmdVcGRhdGUoKTsKLSAgICBtX3Jl
bmRlcmluZ1VwZGF0ZUlELmluY3JlbWVudCgpOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUu
Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRGaW5hbGl6ZVJlbmRl
cmluZ1VwZGF0ZShSZW5kZXJpbmdVcGRhdGVJRCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IG1lLgogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGlkQ3JlYXRlSW1h
Z2VCdWZmZXJCYWNrZW5kKEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUsIFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCkBAIC0yODcs
MTY0ICsyNDgsMzggQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRpZEZsdXNo
KERpc3BsYXlMaXN0OjpGbHVzaElkZW50aWZpZXIgZmx1c2hJZGUKICAgICAgICAgaW1hZ2VCdWZm
ZXItPmRpZEZsdXNoKGZsdXNoSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpkaWRGaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShSZW5kZXJpbmdVcGRhdGVJ
RCBkaWRSZW5kZXJpbmdVcGRhdGVJRCkKK1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSBjb25z
dAogewotICAgIEFTU0VSVChkaWRSZW5kZXJpbmdVcGRhdGVJRCA8PSBtX3JlbmRlcmluZ1VwZGF0
ZUlEKTsKLSAgICBtX2RpZFJlbmRlcmluZ1VwZGF0ZUlEID0gc3RkOjptaW4oZGlkUmVuZGVyaW5n
VXBkYXRlSUQsIG1fcmVuZGVyaW5nVXBkYXRlSUQpOworICAgIHJldHVybiBtX3BhcmFtZXRlcnMu
aWRlbnRpZmllcjsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndpbGxB
cHBlbmRJdGVtKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBuZXdEZXN0aW5hdGlvbklkZW50
aWZpZXIpCitSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmVuc3VyZUJhY2tlbmRDcmVhdGVkKCkKIHsKLSAgICBpZiAobV9jdXJyZW50RGVzdGlu
YXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIgPT0gbmV3RGVzdGluYXRpb25JZGVudGlmaWVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byBwcmV2aW91c0Rlc3RpbmF0aW9uQnVmZmVy
SWRlbnRpZmllciA9IHN0ZDo6ZXhjaGFuZ2UobV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZl
cklkZW50aWZpZXIsIG5ld0Rlc3RpbmF0aW9uSWRlbnRpZmllcikpIHsKLSAgICAgICAgaWYgKGF1
dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jYWNoZWRJbWFnZUJ1
ZmZlcigqcHJldmlvdXNEZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpKQotICAgICAgICAgICAg
aW1hZ2VCdWZmZXItPmNoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIobmV3RGVzdGluYXRpb25J
ZGVudGlmaWVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgfQotCi0gICAgYXV0byBoYW5kbGUgPSBtb3N0UmVjZW50bHlVc2VkRGlzcGxheUxp
c3RIYW5kbGUoKTsKLSAgICBpZiAoVU5MSUtFTFkoIWhhbmRsZSkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG8gbmV3RGVzdGluYXRpb24gPSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5j
YWNoZWRJbWFnZUJ1ZmZlcihuZXdEZXN0aW5hdGlvbklkZW50aWZpZXIpOwotICAgIGlmIChVTkxJ
S0VMWSghbmV3RGVzdGluYXRpb24pKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaGFuZGxlLT5tb3ZlV3JpdGFibGVPZmZzZXRU
b1N0YXJ0SWZQb3NzaWJsZSgpOwotICAgIG5ld0Rlc3RpbmF0aW9uLT5wcmVwYXJlVG9BcHBlbmRE
aXNwbGF5TGlzdEl0ZW1zKGhhbmRsZS0+Y3JlYXRlSGFuZGxlKCkpOworICAgIGVuc3VyZUdQVVBy
b2Nlc3NDb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KCk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpzZW5kV2FrZXVwTWVz
c2FnZShjb25zdCBHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cyYgYXJndW1lbnRzKQor
SVBDOjpTdHJlYW1DbGllbnRDb25uZWN0aW9uJiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OnN0cmVhbUNvbm5lY3Rpb24oKQogewotICAgIExPR19XSVRIX1NUUkVBTShTaGFyZWREaXNwbGF5
TGlzdHMsIHN0cmVhbSA8PCAiU2VuZGluZyB3YWtldXA6IEl0ZW1zWyIgPDwgYXJndW1lbnRzLml0
ZW1CdWZmZXJJZGVudGlmaWVyIDw8ICJdID0+IEltYWdlKCIgPDwgYXJndW1lbnRzLmRlc3RpbmF0
aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyIDw8ICIpIGF0ICIgPDwgYXJndW1lbnRzLm9mZnNldCk7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6V2FrZVVwQW5kQXBw
bHlEaXNwbGF5TGlzdChhcmd1bWVudHMpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJ
UEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBs
eSk7CisgICAgZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gKm1fc3Ry
ZWFtQ29ubmVjdGlvbjsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNl
bmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6ZGlkQ3JlYXRlV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxheUxpc3RTdHJlYW0o
SVBDOjpTZW1hcGhvcmUmJiBzZW1hcGhvcmUpCiB7Ci0gICAgYXV0byBhcmd1bWVudHMgPSBzdGQ6
OmV4Y2hhbmdlKG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzLCBzdGQ6Om51bGxvcHQp
OwotICAgIGlmICghYXJndW1lbnRzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZW5kV2FrZXVw
TWVzc2FnZSgqYXJndW1lbnRzKTsKLSAgICBtX3JlbWFpbmluZ0l0ZW1zVG9BcHBlbmRCZWZvcmVT
ZW5kaW5nV2FrZXVwID0gMDsKKyAgICBpZiAobV9zdHJlYW1Db25uZWN0aW9uKQorICAgICAgICBt
X3N0cmVhbUNvbm5lY3Rpb24tPnNldFdha2VVcFNlbWFwaG9yZShXVEZNb3ZlKHNlbWFwaG9yZSkp
OworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRBcHBlbmREYXRhKGNvbnN0IERpc3BsYXlMaXN0
OjpJdGVtQnVmZmVySGFuZGxlJiBoYW5kbGUsIHNpemVfdCBudW1iZXJPZkJ5dGVzLCBEaXNwbGF5
TGlzdDo6RGlkQ2hhbmdlSXRlbUJ1ZmZlciBkaWRDaGFuZ2VJdGVtQnVmZmVyLCBSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb25JbWFnZUJ1ZmZlcikKK3ZvaWQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpzZXRDdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50
aWZpZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGRlc3RpbmF0aW9uSWRl
bnRpZmllcikKIHsKLSAgICBhdXRvKiBzaGFyZWRIYW5kbGUgPSBtX3NoYXJlZERpc3BsYXlMaXN0
SGFuZGxlcy5nZXQoaGFuZGxlLmlkZW50aWZpZXIpOwotICAgIGlmIChVTkxJS0VMWSghc2hhcmVk
SGFuZGxlKSkKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIGJv
b2wgd2FzRW1wdHkgPSBzaGFyZWRIYW5kbGUtPmFkdmFuY2UobnVtYmVyT2ZCeXRlcykgPT0gbnVt
YmVyT2ZCeXRlczsKLSAgICBpZiAoIXdhc0VtcHR5IHx8IGRpZENoYW5nZUl0ZW1CdWZmZXIgPT0g
RGlzcGxheUxpc3Q6OkRpZENoYW5nZUl0ZW1CdWZmZXI6OlllcykgewotICAgICAgICBpZiAobV9k
ZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMpIHsKLSAgICAgICAgICAgIGF1dG8gaW1hZ2VC
dWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jYWNoZWRJbWFnZUJ1ZmZlcihtX2Rl
ZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50cy0+ZGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50
aWZpZXIpOwotICAgICAgICAgICAgaWYgKGltYWdlQnVmZmVyICYmIGltYWdlQnVmZmVyLT5iYWNr
ZW5kKCkgJiYgc2hhcmVkSGFuZGxlLT50cnlUb1Jlc3VtZSh7IG1fZGVmZXJyZWRXYWtldXBNZXNz
YWdlQXJndW1lbnRzLT5vZmZzZXQsIG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzLT5k
ZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpIH0pKSB7Ci0gICAgICAg
ICAgICAgICAgbV9wYXJhbWV0ZXJzLnJlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlLnNpZ25hbCgp
OwotICAgICAgICAgICAgICAgIG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzID0gc3Rk
OjpudWxsb3B0OwotICAgICAgICAgICAgICAgIG1fcmVtYWluaW5nSXRlbXNUb0FwcGVuZEJlZm9y
ZVNlbmRpbmdXYWtldXAgPSAwOwotICAgICAgICAgICAgfSBlbHNlIGlmICghLS1tX3JlbWFpbmlu
Z0l0ZW1zVG9BcHBlbmRCZWZvcmVTZW5kaW5nV2FrZXVwKSB7Ci0gICAgICAgICAgICAgICAgbV9k
ZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMtPnJlYXNvbiA9IEdQVVByb2Nlc3NXYWtldXBS
ZWFzb246Okl0ZW1Db3VudEh5c3RlcmVzaXNFeGNlZWRlZDsKLSAgICAgICAgICAgICAgICBzZW5k
V2FrZXVwTWVzc2FnZSgqc3RkOjpleGNoYW5nZShtX2RlZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3Vt
ZW50cywgc3RkOjpudWxsb3B0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBpZiAo
bV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIgPT0gZGVzdGluYXRpb25J
ZGVudGlmaWVyKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgc2VuZERlZmVycmVkV2Fr
ZXVwTWVzc2FnZUlmTmVlZGVkKCk7Ci0KLSAgICBhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVS
ZXNvdXJjZUNhY2hlUHJveHkuY2FjaGVkSW1hZ2VCdWZmZXIoZGVzdGluYXRpb25JbWFnZUJ1ZmZl
cik7Ci0gICAgYXV0byBvZmZzZXRUb1JlYWQgPSBzaGFyZWRIYW5kbGUtPndyaXRhYmxlT2Zmc2V0
KCkgLSBudW1iZXJPZkJ5dGVzOwotICAgIGlmIChpbWFnZUJ1ZmZlciAmJiBpbWFnZUJ1ZmZlci0+
YmFja2VuZCgpICYmIHNoYXJlZEhhbmRsZS0+dHJ5VG9SZXN1bWUoeyBvZmZzZXRUb1JlYWQsIGRl
c3RpbmF0aW9uSW1hZ2VCdWZmZXIudG9VSW50NjQoKSB9KSkgewotICAgICAgICBtX3BhcmFtZXRl
cnMucmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmUuc2lnbmFsKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBJbnN0ZWFkIG9mIHNlbmRpbmcgdGhlIHdha2V1cCBtZXNzYWdlIGlt
bWVkaWF0ZWx5LCB3YWl0IGZvciBzb21lIGFkZGl0aW9uYWwgZGF0YS4gVGhpcyBnaXZlcyB0aGUK
LSAgICAvLyB3ZWIgcHJvY2VzcyBhICJoZWFkIHN0YXJ0IiwgZGVjcmVhc2luZyB0aGUgbGlrZWxp
aG9vZCB0aGF0IHRoZSBHUFUgcHJvY2VzcyB3aWxsIGVuY291bnRlciBmcmVxdWVudAotICAgIC8v
IHdha2V1cHMgd2hlbiBwcm9jZXNzaW5nIGEgbGFyZ2UgYW1vdW50IG9mIGRpc3BsYXkgbGlzdCBp
dGVtcy4KLSAgICBjb25zdGV4cHIgdW5zaWduZWQgaXRlbUNvdW50SHlzdGVyZXNpc0JlZm9yZVNl
bmRpbmdXYWtldXAgPSA1MTI7Ci0KLSAgICBtX3JlbWFpbmluZ0l0ZW1zVG9BcHBlbmRCZWZvcmVT
ZW5kaW5nV2FrZXVwID0gaXRlbUNvdW50SHlzdGVyZXNpc0JlZm9yZVNlbmRpbmdXYWtldXA7Ci0g
ICAgbV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMgPSB7eyBoYW5kbGUuaWRlbnRpZmll
ciwgb2Zmc2V0VG9SZWFkLCBkZXN0aW5hdGlvbkltYWdlQnVmZmVyIH19OwotfQotCi1SZWZQdHI8
RGlzcGxheUxpc3RXcml0ZXJIYW5kbGU+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bW9z
dFJlY2VudGx5VXNlZERpc3BsYXlMaXN0SGFuZGxlKCkKLXsKLSAgICBpZiAoVU5MSUtFTFkobV9p
ZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVzLmlzRW1wdHkoKSkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgcmV0dXJuIG1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzLmdldChtX2lk
ZW50aWZpZXJzT2ZSZXVzYWJsZUhhbmRsZXMuZmlyc3QoKSk7Ci19Ci0KLVJlZlB0cjxEaXNwbGF5
TGlzdFdyaXRlckhhbmRsZT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmaW5kUmV1c2Fi
bGVEaXNwbGF5TGlzdEhhbmRsZShzaXplX3QgY2FwYWNpdHkpCi17Ci0gICAgYXV0byBtb3N0UmVj
ZW50bHlVc2VkSGFuZGxlID0gbW9zdFJlY2VudGx5VXNlZERpc3BsYXlMaXN0SGFuZGxlKCk7Ci0g
ICAgaWYgKFVOTElLRUxZKCFtb3N0UmVjZW50bHlVc2VkSGFuZGxlKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBtb3N0UmVjZW50bHlVc2VkSGFuZGxlLT5tb3ZlV3JpdGFibGVPZmZz
ZXRUb1N0YXJ0SWZQb3NzaWJsZSgpOwotICAgIGlmIChtb3N0UmVjZW50bHlVc2VkSGFuZGxlLT5h
dmFpbGFibGVDYXBhY2l0eSgpID49IGNhcGFjaXR5KQotICAgICAgICByZXR1cm4gbW9zdFJlY2Vu
dGx5VXNlZEhhbmRsZTsKLQotICAgIG1faWRlbnRpZmllcnNPZlJldXNhYmxlSGFuZGxlcy5hcHBl
bmQobV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVzLnRha2VGaXJzdCgpKTsKLQotICAgIGF1
dG8gbGVhc3RSZWNlbnRseVVzZWRJZGVudGlmaWVyID0gbV9pZGVudGlmaWVyc09mUmV1c2FibGVI
YW5kbGVzLmZpcnN0KCk7Ci0gICAgaWYgKGxlYXN0UmVjZW50bHlVc2VkSWRlbnRpZmllciAhPSBt
b3N0UmVjZW50bHlVc2VkSGFuZGxlLT5pZGVudGlmaWVyKCkpIHsKLSAgICAgICAgUmVmUHRyIGhh
bmRsZSA9IG1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzLmdldChsZWFzdFJlY2VudGx5VXNlZElk
ZW50aWZpZXIpOwotICAgICAgICBpZiAoaGFuZGxlLT5tb3ZlV3JpdGFibGVPZmZzZXRUb1N0YXJ0
SWZQb3NzaWJsZSgpICYmIGhhbmRsZS0+YXZhaWxhYmxlQ2FwYWNpdHkoKSA+PSBjYXBhY2l0eSkK
LSAgICAgICAgICAgIHJldHVybiBoYW5kbGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7
Ci19Ci0KLURpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6Y3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QgY2FwYWNpdHksIFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpCi17Ci0gICAgaWYgKGF1
dG8gaGFuZGxlID0gZmluZFJldXNhYmxlRGlzcGxheUxpc3RIYW5kbGUoY2FwYWNpdHkpKSB7Ci0g
ICAgICAgIExPR19XSVRIX1NUUkVBTShTaGFyZWREaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiUmV1
c2luZyBJdGVtc1siIDw8IGhhbmRsZS0+aWRlbnRpZmllcigpIDw8ICJdID0+IEltYWdlKCIgPDwg
ZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyIDw8ICIpIChyZW1haW5pbmcgY2FwYWNpdHk6ICIg
PDwgaGFuZGxlLT5hdmFpbGFibGVDYXBhY2l0eSgpIDw8ICIpIik7Ci0gICAgICAgIHJldHVybiBo
YW5kbGUtPmNyZWF0ZUhhbmRsZSgpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGRlZmF1bHRTaGFyZWRJdGVtQnVmZmVyU2l6ZSA9IDEgPDwgMTY7Ci0gICAgc3RhdGljX2Fz
c2VydChkZWZhdWx0U2hhcmVkSXRlbUJ1ZmZlclNpemUgPiBTaGFyZWREaXNwbGF5TGlzdEhhbmRs
ZTo6aGVhZGVyU2l6ZSgpKTsKLQotICAgIGF1dG8gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5
OjphbGxvY2F0ZShzdGQ6Om1heChkZWZhdWx0U2hhcmVkSXRlbUJ1ZmZlclNpemUsIGNhcGFjaXR5
ICsgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmhlYWRlclNpemUoKSkpOwotICAgIGlmICghc2hh
cmVkTWVtb3J5KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgU2hhcmVkTWVtb3J5OjpIYW5k
bGUgc2hhcmVkTWVtb3J5SGFuZGxlOwotICAgIHNoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKHNo
YXJlZE1lbW9yeUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkV3JpdGUpOwot
Ci0gICAgYXV0byBpZGVudGlmaWVyID0gRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVy
OjpnZW5lcmF0ZSgpOwotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OkRpZENyZWF0ZVNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKGlkZW50aWZpZXIsIHsgV1RGTW92ZShz
aGFyZWRNZW1vcnlIYW5kbGUpLCBzaGFyZWRNZW1vcnktPnNpemUoKSB9LCBkZXN0aW5hdGlvbkJ1
ZmZlcklkZW50aWZpZXIpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRP
cHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7Ci0KLSAg
ICBhdXRvIG5ld0hhbmRsZSA9IERpc3BsYXlMaXN0V3JpdGVySGFuZGxlOjpjcmVhdGUoaWRlbnRp
Zmllciwgc2hhcmVkTWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpOwotICAgIFJFTEVBU0VfQVNTRVJU
KG5ld0hhbmRsZSwgIlRoZXJlIG11c3QgYmUgZW5vdWdoIHNwYWNlIHRvIGNyZWF0ZSB0aGUgaGFu
ZGxlLiIpOwotICAgIGF1dG8gZGlzcGxheUxpc3RIYW5kbGUgPSBuZXdIYW5kbGUtPmNyZWF0ZUhh
bmRsZSgpOwotCi0gICAgbV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVzLnByZXBlbmQoaWRl
bnRpZmllcik7Ci0gICAgbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXMuc2V0KGlkZW50aWZpZXIs
IFdURk1vdmUobmV3SGFuZGxlKSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2hhcmVkRGlzcGxh
eUxpc3RzLCBzdHJlYW0gPDwgIkFsbG9jYXRlZCBJdGVtc1siIDw8IGlkZW50aWZpZXIgPDwgIl0g
PT4gSW1hZ2UoIiA8PCBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIgPDwgIikiKTsKLSAgICBy
ZXR1cm4gZGlzcGxheUxpc3RIYW5kbGU7Ci19Ci0KLVJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIo
KSBjb25zdAotewotICAgIHJldHVybiBtX3BhcmFtZXRlcnMuaWRlbnRpZmllcjsKLX0KLQotUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjplbnN1
cmVCYWNrZW5kQ3JlYXRlZCgpCi17Ci0gICAgZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsK
LSAgICByZXR1cm4gcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKTsKKyAgICBtX2N1cnJlbnRE
ZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllciA9IGRlc3RpbmF0aW9uSWRlbnRpZmllcjsK
KyAgICBzZW5kVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkhhbmRs
ZU1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcihkZXN0aW5hdGlvbklkZW50
aWZpZXIpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuaAppbmRleCA4N2FlNTIyY2JiYjI4MWZjNGE4ODA3NjViOTlmNGM5MDI1
NmE5ZDI1Li5lOWIzYWM4NmQyZDdhZjZjMDQwMTc5ZmRjOTc2MWQ4YjRmOTgyN2M3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTM0LDkgKzM0LDExIEBACiAjaW5j
bHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2lu
Y2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMuaCIKKyNpbmNs
dWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMuaCIKICNpbmNsdWRlICJSZW1vdGVS
ZXNvdXJjZUNhY2hlUHJveHkuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ci5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ1VwZGF0ZUlELmgiCisjaW5jbHVkZSAiU3RyZWFtQ2xp
ZW50Q29ubmVjdGlvbi5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvVGltZXIuaD4KQEAgLTc3LDExICs3OSw2IEBAIHB1YmxpYzoKICAgICB1c2luZyBXZWFr
VmFsdWVUeXBlID0gR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OkNsaWVudDo6V2Vha1ZhbHVlVHlwZTsK
IAogICAgIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSYgcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5
KCkgeyByZXR1cm4gbV9yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk7IH0KLSAgICBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSBjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCBjYXBh
Y2l0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGRlc3RpbmF0aW9uQnVm
ZmVySWRlbnRpZmllcik7Ci0KLSAgICB2b2lkIGRpZEFwcGVuZERhdGEoY29uc3QgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUmLCBzaXplX3QgbnVtYmVyT2ZCeXRlcywgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpZENoYW5nZUl0ZW1CdWZmZXIsIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkltYWdlQnVmZmVyKTsKLSAgICB2b2lkIHdp
bGxBcHBlbmRJdGVtKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0gICAg
dm9pZCBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKIAogICAgIFNoYXJlZE1l
bW9yeSogc2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIoc2l6ZV90IGRhdGFTaXplLCBJUEM6
OlRpbWVvdXQpOwogICAgIGJvb2wgd2FpdEZvckdldFBpeGVsQnVmZmVyVG9Db21wbGV0ZShJUEM6
OlRpbWVvdXQpOwpAQCAtMTI0LDEzICsxMjEsMzEgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0dQ
VVByb2Nlc3NDb25uZWN0aW9uQ2xvc2VkKCkgY29uc3QgeyByZXR1cm4gIW1fZ3B1UHJvY2Vzc0Nv
bm5lY3Rpb247IH0KIAorICAgIHZvaWQgZGlkQ3JlYXRlV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxh
eUxpc3RTdHJlYW0oSVBDOjpTZW1hcGhvcmUmJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIGJvb2wgc2VuZERpc3BsYXlMaXN0SXRlbVRvU3RyZWFtKFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbklkZW50aWZpZXIsIFQmJiBtZXNzYWdlKQor
ICAgIHsKKyAgICAgICAgc2V0Q3VycmVudERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVy
KGRlc3RpbmF0aW9uSWRlbnRpZmllcik7CisgICAgICAgIHJldHVybiBzZW5kVG9TdHJlYW0oV1RG
TW92ZShtZXNzYWdlKSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eShXZWJQYWdlJik7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIGJvb2wgc2VuZFRvU3RyZWFtKFQmJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0cmVhbUNvbm5lY3Rpb24oKS5zZW5kKFdURk1vdmUobWVzc2FnZSksIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKCksIFNlY29uZHM6OmluZmluaXR5KCkpOworICAgIH0KKworICAgIHZv
aWQgc2V0Q3VycmVudERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyKFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisKICAgICAvLyBHUFVQcm9jZXNzQ29ubmVjdGlv
bjo6Q2xpZW50CiAgICAgdm9pZCBncHVQcm9jZXNzQ29ubmVjdGlvbkRpZENsb3NlKEdQVVByb2Nl
c3NDb25uZWN0aW9uJikgZmluYWw7CiAKICAgICBHUFVQcm9jZXNzQ29ubmVjdGlvbiYgZW5zdXJl
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKKyAgICBJUEM6OlN0cmVhbUNsaWVudENvbm5lY3Rpb24m
IHN0cmVhbUNvbm5lY3Rpb24oKTsKIAogICAgIC8vIE1lc3NhZ2VzIHRvIGJlIHJlY2VpdmVkLgog
ICAgIHZvaWQgZGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKEltYWdlQnVmZmVyQmFja2VuZEhh
bmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKQEAgLTE0Miw2ICsx
NTcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZW5kV2FrZXVwTWVzc2FnZShjb25zdCBHUFVQ
cm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cyYpOwogCisgICAgc3RkOjp1bmlxdWVfcHRyPElQ
Qzo6U3RyZWFtQ2xpZW50Q29ubmVjdGlvbj4gbV9zdHJlYW1Db25uZWN0aW9uOwogICAgIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwogICAgIFdl
YWtQdHI8R1BVUHJvY2Vzc0Nvbm5lY3Rpb24+IG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb247CiAgICAg
UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5IG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5IHsgKnRo
aXMgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2Fn
ZXMuaW4KaW5kZXggNDY3ODMwODlkMzYyNWQ5ZTM0Y2E2YWRhYzE4ZDYxZDgwYzBkNzg4ZS4uYjk0
YWY3NmVkZDBhZmY2ODYxYjgyZThjZDdiMzk0NGY0N2ZkMjEyNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KQEAgLTI2LDYgKzI2LDcg
QEAgbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IE5vdFJlZkNvdW50ZWQg
ewogICAgIERpZENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChXZWJLaXQ6OkltYWdlQnVmZmVyQmFj
a2VuZEhhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiAgICAgRGlkRmx1c2goV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiAgICAgRGlk
RmluYWxpemVSZW5kZXJpbmdVcGRhdGUoV2ViS2l0OjpSZW5kZXJpbmdVcGRhdGVJRCBkaWRSZW5k
ZXJpbmdVcGRhdGVJRCkKKyAgICBEaWRDcmVhdGVXYWtlVXBTZW1hcGhvcmVGb3JEaXNwbGF5TGlz
dFN0cmVhbShJUEM6OlNlbWFwaG9yZSB3YWtlVXBTZW1hcGhvcmUpOwogfQogCiAjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439939</attachid>
            <date>2021-10-01 17:17:13 -0700</date>
            <delta_ts>2021-10-03 16:30:58 -0700</delta_ts>
            <desc>WIP - supports cached images</desc>
            <filename>bug-230860-20211001171712.patch</filename>
            <type>text/plain</type>
            <size>331933</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMDQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDE4N2YxMzMzNDMzNDI3NTdhMmNiYTE1
NTU1Mzg5ZDU1ODU0NjU5Mi4uZGRkZDc2YmQ0NDBlNzFhZmFjOTJmYzE4YTJlMTBlMDg4MzM5ZTU3
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMjI4MCw3ICsyMjgwLDYgQEAKIAkJNzIxNDQzMzQyMjNFQzkxNjAwRjEyRkY3IC8q
IFNWR1Byb3BlcnR5T3duZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU1RUU1MzYwMjIzQjJBMjEwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eU93bmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxQjQ5
NzQyNTEyQkEzQjAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIxQjQ5NzAyNTEyQUMwNDAwRkU5RDNC
IC8qIEltYWdlQml0bWFwQmFja2luZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTcyMjgzRjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50
aW5nT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzI0MkFDOTcy
NTc1OEZFMTAwNUE5Q0YxIC8qIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjQyQUM5NTI1NzU4RkUwMDA1
QTlDRjEgLyogRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRDMzMjFBM0E4QjIzMDBGNUYxM0Mg
LyogSlNFWFRCbGVuZE1pbk1heC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzI0RUQzMzAxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXgu
aCAqLzsgfTsKIAkJNzI0RUU1NTAxREM4MEQ3RjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURD
N0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFj
dGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3Rh
dGVDaGFuZ2VPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0xMDQ0MCw3ICsxMDQzOSw2IEBACiAJCTcyMUI0OTZGMjUxMkFDMDQwMEZF
OUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VC
aXRtYXBCYWNraW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxQjQ5NzAy
NTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bWFnZUJpdG1hcEJhY2tpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIyQTgx
NUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBbmltYXRpb25GcmFtZVJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzI0
MkFDOTUyNTc1OEZFMDAwNUE5Q0YxIC8qIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEz
QyAvKiBFWFRCbGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBFWFRCbGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
NEVEMzJBMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MjRFRDMyQjFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MTAzLDcgKzE4MTAxLDYgQEAKIAkJCQkxQ0FGNTZERTI1MzAy
NDVBMDAxN0I0NzIgLyogRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAg
Ki8sCiAJCQkJNTVDMEEyOTUyM0ZFMkNFMDAwRjJDQjkzIC8qIERpc3BsYXlMaXN0RHJhd2luZ0Nv
bnRleHQuY3BwICovLAogCQkJCTcyRUEwOUY5MjNGQ0NDNkEwMDg1MDRBNSAvKiBEaXNwbGF5TGlz
dERyYXdpbmdDb250ZXh0LmggKi8sCi0JCQkJNzI0MkFDOTUyNTc1OEZFMDAwNUE5Q0YxIC8qIERp
c3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLmggKi8sCiAJCQkJNzJFQTA5RjcyM0ZDQ0IzRDAwODUw
NEE1IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLywKIAkJCQlGNDIyQjhCNjI1M0Y3MDY1
MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcCAqLywKIAkJCQlGNDIyQjhCNTI1
M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmggKi8sCkBAIC0zMjE4NSw3
ICszMjE4Miw2IEBACiAJCQkJMEZFNUZCRDMxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0FGNTZEQjI1MzAxQUM4MDAxN0I0NzIgLyogRGlzcGxh
eUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1QUQwOTQwMjQw
ODk2NDAwMERFNEQyRiAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggaW4gSGVhZGVycyAq
LywKLQkJCQk3MjQyQUM5NzI1NzU4RkUxMDA1QTlDRjEgLyogRGlzcGxheUxpc3RGbHVzaElkZW50
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1QUQwOTNFMjQwODk2MzUwMERFNEQyRiAvKiBE
aXNwbGF5TGlzdEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNEQ0MEJDOTI1NTQ2
M0JGMDA3MjEzNDkgLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQ0U4RDEyNzI2MTg1QzBFMDBGQzNBRUYgLyogRGlzcGxheUxpc3RJdGVtQnVmZmVySWRlbnRp
Zmllci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuY3BwCmluZGV4IDRjYzJiMzY3NjRjYWI0Nzc4MjQ3MmViMWY5MTgxMDIyNWQ1NWQ2NWYuLjU2
NDEzOWQyMTY1ZDI0OTY3OWJmYzc5NWE2Mjc5NmU0OTA4OTdjNWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC04MzMsNDIgKzgzMyw2IEBAIHZvaWQgSFRN
TENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcoYm9vbCB1c2VzRGlzcGxh
eUxpc3REcmF3aW5nKQogICAgIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9IHVzZXNEaXNwbGF5
TGlzdERyYXdpbmc7CiB9CiAKLXZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFRyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCi17Ci0gICAgbV90cmFj
a3NEaXNwbGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5OwotCi0gICAgaWYg
KCFidWZmZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgYnVmZmVyID0gKnRoaXMt
PmJ1ZmZlcigpOwotICAgIGlmIChidWZmZXIuZHJhd2luZ0NvbnRleHQoKSkKLSAgICAgICAgYnVm
ZmVyLmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkpOwotfQotCi1TdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OmRpc3Bs
YXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKLXsKLSAg
ICBpZiAoIWJ1ZmZlcigpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBhdXRvJiBi
dWZmZXIgPSAqdGhpcy0+YnVmZmVyKCk7Ci0gICAgaWYgKGJ1ZmZlci5kcmF3aW5nQ29udGV4dCgp
KQotICAgICAgICByZXR1cm4gYnVmZmVyLmRyYXdpbmdDb250ZXh0KCktPmRpc3BsYXlMaXN0KCku
YXNUZXh0KGZsYWdzKTsKLQotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEhUTUxD
YW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0
RmxhZ3MgZmxhZ3MpIGNvbnN0Ci17Ci0gICAgaWYgKCFidWZmZXIoKSkKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotCi0gICAgYXV0byYgYnVmZmVyID0gKnRoaXMtPmJ1ZmZlcigpOwotICAgIGlm
IChidWZmZXIuZHJhd2luZ0NvbnRleHQoKSAmJiBidWZmZXIuZHJhd2luZ0NvbnRleHQoKS0+cmVw
bGF5ZWREaXNwbGF5TGlzdCgpKQotICAgICAgICByZXR1cm4gYnVmZmVyLmRyYXdpbmdDb250ZXh0
KCktPnJlcGxheWVkRGlzcGxheUxpc3QoKS0+YXNUZXh0KGZsYWdzKTsKLQotICAgIHJldHVybiBT
dHJpbmcoKTsKLX0KLQogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIo
KSBjb25zdAogewogICAgIEFTU0VSVCghaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkpOwpAQCAtOTEw
LDkgKzg3NCw2IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkg
Y29uc3QKIAogICAgIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBy
ZW5kZXJpbmdNb2RlLCB1c2VEaXNwbGF5TGlzdCwgUmVuZGVyaW5nUHVycG9zZTo6Q2FudmFzLCAx
LCBjb2xvclNwYWNlLCBwaXhlbEZvcm1hdCwgaG9zdFdpbmRvdykpOwogCi0gICAgaWYgKGJ1ZmZl
cigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQotICAgICAgICBidWZmZXIoKS0+ZHJh
d2luZ0NvbnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5
TGlzdFJlcGxheSk7Ci0KICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQog
ICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkpIHsKICAgICAgICAgLy8gUmVj
YWxjdWxhdGUgY29tcG9zaXRpbmcgcmVxdWlyZW1lbnRzIGlmIGFjY2VsZXJhdGlvbiBzdGF0ZSBj
aGFuZ2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCmluZGV4IGZmNTIx
OWRkNTU0NmRlZGFkYTE3YTU3NWU4Zjg3ZTM0YWJmNTBiODMuLjJiMDUwOWRjYjA2NzhjZDcwNTY5
OTk5YzhhMWI0OTkzMjA0OGM5YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmgKQEAgLTEyMCw5ICsxMjAsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzaG91bGRBY2NlbGVy
YXRlKHVuc2lnbmVkIGFyZWEpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRV
c2VzRGlzcGxheUxpc3REcmF3aW5nKGJvb2wpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IGRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncykgY29uc3Q7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIHJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0
OjpBc1RleHRGbGFncykgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogT25seSBzb21lIGNhbnZhcyBy
ZW5kZXJpbmcgY29udGV4dHMgbmVlZCBhbiBJbWFnZUJ1ZmZlci4KICAgICAvLyBJdCB3b3VsZCBi
ZSBiZXR0ZXIgdG8gaGF2ZSB0aGUgY29udGV4dHMgb3duIHRoZSBidWZmZXJzLgpAQCAtMTgzLDcg
KzE4MCw2IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWZQdHI8SW1hZ2U+IG1fY29waWVkSW1h
Z2U7IC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSBmb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSB0
byBjb3B5IHRoZSBpbWFnZSBidWZmZXIgdG8gcmVuZGVyIChhbmQgZm9yIENTU0NhbnZhc1ZhbHVl
KS4KIAogICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nOwot
ICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07CiAKICAgICBib29s
IG1faWdub3JlUmVzZXQgeyBmYWxzZSB9OwogICAgIC8vIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVy
IG1lYW5zIHdlIHRyaWVkIHRvIG1hbGxvYyB0aGUgYnVmZmVyLiBXZSBkaWRuJ3QgbmVjZXNzYXJp
bHkgZ2V0IGl0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAppbmRleCA4OTQ2ZWIyMDg0NTFjOGJiYjk0MGFiNDE1MDc5ZWE4MTZlOWI1
OWFlLi5hMGM0Y2ExNmI0NWYyYzVkYjQyMGVjZTE1Njc0MzgyYmY3YWQ5Y2JmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAt
MTY0LDEwICsxNjQsMTAgQEAgc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKICAgICBXRUJD
T1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIH5H
cmFwaGljc0NvbnRleHRTdGF0ZSgpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRl
eHRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwogICAgIFdFQkNPUkVfRVhQT1JU
IEdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwogCi0gICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYp
OworICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRvcj0oY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgb3BlcmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwogCiAgICAgZW51
bSBDaGFuZ2UgOiB1aW50MzJfdCB7CkBAIC0yNDMsOSArMjQzLDkgQEAgc3RydWN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlIHsKICAgICB7CiAgICAgfQogCi0gICAgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlc0Zyb21TdGF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZXNGcm9tU3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmKSBjb25zdDsKIAotICAgIHZvaWQgYWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFjY3VtdWxhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CiAgICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKICAgICAKICAgICB2b2lkIGR1bXAoV1RGOjpU
ZXh0U3RyZWFtJikgY29uc3Q7CkBAIC0yNTYsMTIgKzI1NiwxMSBAQCBzdHJ1Y3QgR3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2UgewogCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpU
ZXh0U3RyZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKIAotY2xhc3Mg
R3JhcGhpY3NDb250ZXh0IHsKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3JhcGhpY3NDb250ZXh0KTsgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6ICAgCi0KLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0Nv
bnRleHQoKSA9IGRlZmF1bHQ7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+R3JhcGhpY3ND
b250ZXh0KCk7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OworICAg
IHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dCgpOwogCiAjaWYgVVNFKERJUkVDVDJEKQogICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dERpcmVjdDJECkBAIC0y
NjksNyArMjY4LDcgQEAgcHVibGljOgogICAgICAgICBDUFVNZW1vcnksCiAgICAgICAgIEdQVU1l
bW9yeQogICAgIH07Ci0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOworICAgIEdyYXBo
aWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCosIEJpdG1hcFJlbmRlcmluZ0NvbnRl
eHRUeXBlKTsKICNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yODksMjUgKzI4OCwyNSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkgeyBtX3N0YXRlLnN0cm9r
ZVN0eWxlID0gc3R5bGU7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VTdHlsZUNoYW5nZSk7IH0KICAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlU3R5bGU7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIHNldFN0cm9rZUNv
bG9yKGNvbnN0IENvbG9yJik7CiAgICAgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5zdHJva2VDb2xvcjsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKKyAgICB2b2lkIHNldFN0cm9rZVBh
dHRlcm4oUmVmPFBhdHRlcm4+JiYpOwogICAgIFBhdHRlcm4qIHN0cm9rZVBhdHRlcm4oKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mID0geyB9KTsKKyAgICB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFk
aWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIHN0
cm9rZUdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQo
KTsgfQogCiAgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkgeyBtX3N0YXRl
LmZpbGxSdWxlID0gZmlsbFJ1bGU7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7IH0KICAgICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGU7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBzZXRGaWxsQ29sb3IoY29uc3Qg
Q29sb3ImKTsKICAgICBjb25zdCBDb2xvciYgZmlsbENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5maWxsQ29sb3I7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbFBhdHRl
cm4oUmVmPFBhdHRlcm4+JiYpOworICAgIHZvaWQgc2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRlcm4+
JiYpOwogICAgIFBhdHRlcm4qIGZpbGxQYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5m
aWxsUGF0dGVybi5nZXQoKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsR3Jh
ZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKKyAg
ICB2b2lkIHNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgPSB7IH0pOwogICAgIEdyYWRpZW50KiBmaWxsR3JhZGllbnQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQoKTsgfQogCiAgICAgdm9pZCBzZXRTaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7IG1fc3RhdGUuc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBzaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgdXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
Q2hhbmdlKTsgfQpAQCAtMzMwLDcgKzMyOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFscGhh
KGZsb2F0IGFscGhhKSB7IG1fc3RhdGUuYWxwaGEgPSBhbHBoYTsgdXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKTsgfQogICAgIGZsb2F0IGFscGhh
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hbHBoYTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9
IEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwogICAgIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
Y29tcG9zaXRlT3BlcmF0b3I7IH0KICAgICBCbGVuZE1vZGUgYmxlbmRNb2RlT3BlcmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7IH0KIApAQCAtMzQwLDkgKzMzOSw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFn
cyBtb2RlKSB7IG1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gbW9kZTsgdXBkYXRlU3RhdGUobV9z
dGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSk7IH0KICAg
ICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnRleHREcmF3aW5nTW9kZTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRT
aGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImLCBTaGFkb3dS
YWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGNsZWFyU2hhZG93KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBn
ZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYpIGNvbnN0OworICAgIHZvaWQgc2V0
U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiwgU2hhZG93
UmFkaXVzTW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgIHZpcnR1YWwgdm9p
ZCBjbGVhclNoYWRvdygpOworICAgIGJvb2wgZ2V0U2hhZG93KEZsb2F0U2l6ZSYsIGZsb2F0Jiwg
Q29sb3ImKSBjb25zdDsKIAogICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuc2hhZG93Q29sb3IuaXNWaXNpYmxlKCk7IH0KICAgICBib29sIGhhc1NoYWRv
dygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5zaGFkb3dC
bHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZz
ZXQuaGVpZ2h0KCkpOyB9CkBAIC0zNTcsOCArMzU2LDggQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBzYXZlKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJl
c3RvcmUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2F2ZSgpOworICAgIHZpcnR1YWwgdm9pZCByZXN0
b3JlKCk7CiAgICAgCiAgICAgdW5zaWduZWQgc3RhY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
dGFjay5zaXplKCk7IH0KIApAQCAtMzg0LDcgKzM4Myw3IEBAIHB1YmxpYzoKICAgICAgICAgUm91
bmRPcmlnaW5BbmREaW1lbnNpb25zCiAgICAgfTsKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxs
U2lkZXMpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9Q
aXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJv
a2VXaWR0aCwgU3Ryb2tlU3R5bGUpOworICAgIHN0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVs
Qm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdp
ZHRoLCBTdHJva2VTdHlsZSk7CiAKICAgICAvLyBTaGFwZXMKIApAQCAtMzk2LDExICszOTUsMTEg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgRmxvYXRQb2ludCYpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRy
YXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29s
b3IsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdSYWlz
ZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNv
bnN0IENvbG9yJiBzaGFkb3dDb2xvcik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29u
c3QgUGF0aCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikg
PSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRo
Jik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIHsgZmlsbEVsbGlw
c2VBc1BhdGgoZWxsaXBzZSk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIGVsbGlwc2UpIHsgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsgfQpA
QCAtNDA4LDEwICs0MDcsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9w
ZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgdmlydHVhbCB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKICAgICB2aXJ0dWFsIHZvaWQgZmls
bFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9
IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6
Ok5vcm1hbCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5kZWRS
ZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9IEJs
ZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVS
ZWN0LCBjb25zdCBDb2xvciYpOwogCiAgICAgdmlydHVhbCB2b2lkIGNsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmKSA9IDA7CiAKQEAgLTQyNCw2MSArNDIzLDYyIEBAIHB1YmxpYzoKIAogICAgIC8v
IEltYWdlcywgUGF0dGVybnMsIGFuZCBNZWRpYQogCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZSog
bGFzdE5hdGl2ZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0TmF0aXZlSW1hZ2UuZ2V0KCk7
IH0KICAgICB2aXJ0dWFsIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3Qg
RmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJ
bWFnZSYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IElt
YWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgdmlydHVhbCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRp
b24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJv
bUltYWdlIH0pOworICAgIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIHZpcnR1YWwgSW1hZ2VE
cmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNp
emUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdS
ZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0
b3IsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZElt
YWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2lu
dCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCBJ
bWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxl
U2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7CisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOworICAgIHZpcnR1YWwgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0
IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1
ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICB2b2lkIGRyYXdDb25zdW1p
bmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwg
dm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0g
MDsKIAogI2lmIEVOQUJMRShWSURFTykKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwogI2VuZGlmCiAKICAgICAvLyBDbGlwcGlu
ZwogCiAgICAgdmlydHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0
JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBh
dGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxv
YXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0Jik7CiAKICAgICBlbnVtIGNsYXNzIENsaXBUb0RyYXdpbmdDb21t
YW5kc1Jlc3VsdCA6IGJvb2wgeyBTdWNjZXNzLCBGYWlsZWRUb0NyZWF0ZUltYWdlQnVmZmVyIH07
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQg
Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+
JiYpOworICAgIHZpcnR1YWwgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdp
bmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKTsKIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3Q7CisgICAg
dmlydHVhbCBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdDsKIAogICAgIC8vIFRleHQKIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0g
MCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50
JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpu
dWxsb3B0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0JpZGlUZXh0KGNv
bnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250
Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFp
bnRJZkZvbnROb3RSZWFkeSk7CisgICAgdmlydHVhbCBGbG9hdFNpemUgZHJhd1RleHQoY29uc3Qg
Rm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVk
IGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwg
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOworICAgIHZpcnR1YWwg
dm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29u
c3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBG
b250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIEZsb2F0UmVjdCBjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJl
Y3QmLCBib29sIHByaW50aW5nKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJh
d0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSk7CisgICAgRmxvYXRSZWN0
IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJp
bnRpbmcpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0
JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9
IFNvbGlkU3Ryb2tlKTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlk
U3Ryb2tlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
Y29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpID0gMDsKIAogICAgIC8v
IFRyYW5zcGFyZW5jeSBMYXllcnMKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIHZpcnR1YWwgdm9pZCBi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOworICAgIHZpcnR1YWwgdm9pZCBl
bmRUcmFuc3BhcmVuY3lMYXllcigpOwogICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkg
Y29uc3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApICYmIHN1cHBvcnRz
VHJhbnNwYXJlbmN5TGF5ZXJzKCk7IH0KIAogICAgIC8vIEZvY3VzIFJpbmdzCkBAIC01MDksOCAr
NTA5LDggQEAgcHVibGljOgogICAgIC8vIFRoaXMgZnVuY3Rpb24gYXBwbGllcyB0aGUgZGV2aWNl
IHNjYWxlIGZhY3RvciB0byB0aGUgY29udGV4dCwgbWFraW5nIHRoZSBjb250ZXh0IGNhcGFibGUg
b2YKICAgICAvLyBhY3RpbmcgYXMgYSBiYXNlLWxldmVsIGNvbnRleHQgZm9yIGEgSGlEUEkgZW52
aXJvbm1lbnQuCiAgICAgdmlydHVhbCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQg
ZmFjdG9yKSB7IHNjYWxlKGZhY3Rvcik7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUg
c2NhbGVGYWN0b3IoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVG
YWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCkgY29uc3Q7CisgICAgRmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29uc3Q7Cisg
ICAgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OwogCiAgICAgLy8gTGlua3MKIApA
QCAtNTQxLDEyICs1NDEsMTIgQEAgcHVibGljOgogI2lmIFVTRShESVJFQ1QyRCkKICAgICBHcmFw
aGljc0NvbnRleHQoSERDLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiosIFJFQ1QsIGJvb2wgaGFzQWxw
aGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgogCi0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIElEMkQxRmFjdG9yeSogc3lzdGVtRmFjdG9yeSgpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdldCogZGVmYXVsdFJlbmRlclRhcmdldCgpOworICAg
IHN0YXRpYyBJRDJEMUZhY3RvcnkqIHN5c3RlbUZhY3RvcnkoKTsKKyAgICBzdGF0aWMgSUQyRDFS
ZW5kZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYmVnaW5EcmF3KCk7CisgICAgdm9pZCBiZWdpbkRyYXcoKTsKICAgICBEMkQxX0NPTE9S
X0YgY29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImKSBjb25zdDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGVuZERyYXcoKTsKKyAgICB2b2lkIGVuZERyYXcoKTsKICAgICB2b2lkIGZs
dXNoKCk7CiAKICAgICBJRDJEMUJydXNoKiBzb2xpZFN0cm9rZUJydXNoKCkgY29uc3Q7CkBAIC01
NzMsNiArNTczLDcgQEAgcHJvdGVjdGVkOgogICAgIFZlY3RvcjxGbG9hdFBvaW50PiBjZW50ZXJM
aW5lQW5kQ3V0T2ZmQ29ybmVycyhib29sIGlzVmVydGljYWxMaW5lLCBmbG9hdCBjb3JuZXJXaWR0
aCwgRmxvYXRQb2ludCBwb2ludDEsIEZsb2F0UG9pbnQgcG9pbnQyKSBjb25zdDsKIAogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CisgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBtX2xh
c3ROYXRpdmVJbWFnZTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0U3Rh
dGUsIDE+IG1fc3RhY2s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1R5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1R5cGVzLmgKaW5kZXggNGQyMDRlOTdlNWM1NDRkNzc2YmZhN2YzMGFhY2MxYjdjNDYz
ZTBlMC4uMjQwZDRmYzU2MTc5YmM4NDg5NTRiMzUxNDBhNzk3YmI5NWE4NTUyNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaApAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgIldpbmRSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFp
dHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVu
dGlmaWVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogY2xhc3MgVGV4dFN0cmVhbTsKQEAgLTEyNyw2
ICsxMjgsOSBAQCBTdHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUpOwogYm9v
bCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKIGJv
b2wgcGFyc2VDb21wb3NpdGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6
OkNvbXBvc2l0ZU9wZXJhdG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlJik7CiAKK2VudW0gRmx1c2hJ
ZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBGbHVzaElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlm
aWVyPEZsdXNoSWRlbnRpZmllclR5cGU+OworCiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6QmxlbmRNb2RlKTsKIFdF
QkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0m
LCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvcik7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2luZFJ1bGUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggYjFlOGQzYjA0
YWIyNjA1MTMyODg2YTBhODAzMDUwOGExMzE2MTI4MC4uMDdkZWEzNDc0ZjkwZWUxNWY4ZDVkNDU0
MzY2ZGJmZDk1YzhlZDljNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5j
bHVkZSAiRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5
cGVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCiAjaW5jbHVkZSAiUmVuZGVy
aW5nTW9kZS5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oIgpAQCAt
NzYsMTQgKzc2LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0KCkgPSAwOwog
Ci0gICAgdmlydHVhbCBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQqIGRyYXdpbmdDb250ZXh0
KCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBkcmF3
aW5nQ29udGV4dCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2aXJ0dWFsIGJvb2wgcHJlZmVy
c1ByZXBhcmF0aW9uRm9yRGlzcGxheSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2
b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZmx1c2hEcmF3
aW5nQ29udGV4dEFzeW5jKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZsdXNoKERpc3BsYXlM
aXN0OjpGbHVzaElkZW50aWZpZXIpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGNoYW5nZURlc3Rp
bmF0aW9uSW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgcHJlcGFyZVRvQXBwZW5kRGlzcGxheUxpc3RJdGVtcyhEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlckhhbmRsZSYmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmx1c2goRmx1c2hJ
ZGVudGlmaWVyKSB7IH0KIAogICAgIHZpcnR1YWwgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0ID0gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcAppbmRleCBiNjU2ZjEzNjgxNjI0N2E0NmFjZGNkYTU5OWJiNmQ0MWRkODA5
M2E5Li4zMTJmMDhhZTMyNTg1NDk1MjdjNjU0ODQ1Mjg3MWVkNjI0MGEwNDY2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwCkBAIC0yMzcsNiArMjM3LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cmVz
dG9yZSgpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJ
bWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQogeworICAgIG1fbGFzdE5hdGl2ZUltYWdlID0gJm5hdGl2
ZUltYWdlOworCiAgICAgYXV0byBpbWFnZSA9IG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKTsK
ICAgICBhdXRvIGltYWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgaW1hZ2VTaXplIH07CiAgICAg
YXV0byBub3JtYWxpemVkU3JjUmVjdCA9IG5vcm1hbGl6ZVJlY3Qoc3JjUmVjdCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0LmNwcAppbmRleCBmYWQ2YTY5NTAwN2E5NjY0NWMyNzExZDhmMDkxMGVhODU2
NDNmNTI4Li43ODBjMmIyZjMxZjRjYTBjMjY1MzA2NDczOWFkYTYzNWU0MTE0NDg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5jcHAKQEAgLTE4MCwxMSArMTgwLDYgQEAgdm9pZCBEaXNwbGF5TGlz
dDo6c2V0SXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQoSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQqIGNs
aWVudCkKICAgICBpdGVtQnVmZmVyKCkuc2V0Q2xpZW50KGNsaWVudCk7CiB9CiAKLXZvaWQgRGlz
cGxheUxpc3Q6OnByZXBhcmVUb0FwcGVuZChJdGVtQnVmZmVySGFuZGxlJiYgaGFuZGxlKQotewot
ICAgIGl0ZW1CdWZmZXIoKS5wcmVwYXJlVG9BcHBlbmQoV1RGTW92ZShoYW5kbGUpKTsKLX0KLQog
dm9pZCBEaXNwbGF5TGlzdDo6Zm9yRWFjaEl0ZW1CdWZmZXIoRnVuY3Rpb248dm9pZChjb25zdCBJ
dGVtQnVmZmVySGFuZGxlJik+JiYgbWFwRnVuY3Rpb24pIGNvbnN0CiB7CiAgICAgaWYgKG1faXRl
bXMpCkBAIC0yMTQsOCArMjA5LDYgQEAgdm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEl0ZW1IYW5k
bGUgaXRlbSkKICAgICAgICAgcmV0dXJuIGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4oaXRlbS5nZXQ8
Q29uY2F0ZW5hdGVDVE0+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKICAgICAgICAg
cmV0dXJuIGFwcGVuZDxTZXRDVE0+KGl0ZW0uZ2V0PFNldENUTT4oKSk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgotICAgICAgICByZXR1cm4gYXBwZW5kPFNldElu
bGluZUZpbGxHcmFkaWVudD4oaXRlbS5nZXQ8U2V0SW5saW5lRmlsbEdyYWRpZW50PigpKTsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHJldHVybiBhcHBl
bmQ8U2V0SW5saW5lRmlsbENvbG9yPihpdGVtLmdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCkpOwog
ICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgpAQCAtMzAwLDEwICsyOTMs
NiBAQCB2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRlbUhhbmRsZSBpdGVtKQogICAgICAgICBy
ZXR1cm4gYXBwZW5kPEZpbGxFbGxpcHNlPihpdGVtLmdldDxGaWxsRWxsaXBzZT4oKSk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6Rmx1c2hDb250ZXh0OgogICAgICAgICByZXR1cm4gYXBwZW5kPEZsdXNo
Q29udGV4dD4oaXRlbS5nZXQ8Rmx1c2hDb250ZXh0PigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpN
ZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI6Ci0gICAgICAgIHJldHVybiBh
cHBlbmQ8TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyPihpdGVtLmdldDxN
ZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI+KCkpOwotICAgIGNhc2UgSXRl
bVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuIGFwcGVu
ZDxNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI+KGl0ZW0uZ2V0PE1ldGFDb21tYW5kQ2hhbmdl
SXRlbUJ1ZmZlcj4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CiAgICAg
ICAgIHJldHVybiBhcHBlbmQ8R2V0UGl4ZWxCdWZmZXI+KGl0ZW0uZ2V0PEdldFBpeGVsQnVmZmVy
PigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlcjoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0LmgKaW5kZXggMjI2ODRkYzM5OGUxZWY1MmMxYmQ5NjZmZjQ1MDM3MjM3ZGNmMmFlZi4uNDZj
Njg3ZjkwNDcxNjBjNDY4NTkzNmFkZDVkZmU3NzU5NWIzYWE2YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0LmgKQEAgLTc5LDcgKzc5LDYgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRJdGVtQnVmZmVyUmVhZGluZ0NsaWVudChJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCopOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQoSXRlbUJ1
ZmZlcldyaXRpbmdDbGllbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHByZXBhcmVUb0Fw
cGVuZChJdGVtQnVmZmVySGFuZGxlJiYpOwogCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2Y3ODE2OGViYjdmYzczN2I5YjRhNmNmOGQ1MzcyOWY1
YTA2MGVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEZs
dXNoSWRlbnRpZmllci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgRGlzcGxheUxpc3QgewotCi1lbnVtIEZs
dXNoSWRlbnRpZmllclR5cGUgeyB9OwotdXNpbmcgRmx1c2hJZGVudGlmaWVyID0gT2JqZWN0SWRl
bnRpZmllcjxGbHVzaElkZW50aWZpZXJUeXBlPjsKLQotfSAvLyBEaXNwbGF5TGlzdAotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIuaAppbmRleCA4MWI5MjQ3NGUyNGVjZDIzNmYyMjA3NzRlZDFjYmNmODQ2OWYzMjc4Li4wYjM1
YWY1NDBjMTRkY2JkYmY3YmVjNjljYWZkNjA2YjMyZTU1ZjBmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9kcmF3aW5nQ29udGV4dC5jb250ZXh0KCk7CiAgICAgfQogCi0gICAgRHJh
d2luZ0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUgeyByZXR1cm4gJm1fZHJhd2lu
Z0NvbnRleHQ7IH0KKyAgICBHcmFwaGljc0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgb3ZlcnJp
ZGUgeyByZXR1cm4gJm1fZHJhd2luZ0NvbnRleHQuY29udGV4dCgpOyB9CiAKICAgICB2b2lkIGZs
dXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZm
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKaW5kZXggMTM1NGJkYmVkZDYxMTZjMjA5ZmI1NGE2M2Ux
OTQyMjUzY2IzYTU4YS4uNDVmZGQzM2IxM2NkMjkxZGRiYmRkM2FmMTdhZWU4ZDIwODQ2Yjg1MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKQEAgLTY2LDkg
KzY2LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgogICAgICAgICBnZXQ8U2V0Q1RNPigpLmFwcGx5
KGNvbnRleHQpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
RmlsbEdyYWRpZW50OgotICAgICAgICBnZXQ8U2V0SW5saW5lRmlsbEdyYWRpZW50PigpLmFwcGx5
KGNvbnRleHQpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
RmlsbENvbG9yOgogICAgICAgICBnZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpLmFwcGx5KGNvbnRl
eHQpOwogICAgICAgICByZXR1cm47CkBAIC0xOTQsOSArMTkxLDYgQEAgdm9pZCBJdGVtSGFuZGxl
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6Rmx1
c2hDb250ZXh0OgogICAgICAgICBnZXQ8Rmx1c2hDb250ZXh0PigpLmFwcGx5KGNvbnRleHQpOwog
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0
aW5hdGlvbkltYWdlQnVmZmVyOgotICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdl
SXRlbUJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkdldFBpeGVs
QnVmZmVyOgogICAgIGNhc2UgSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgogICAgICAgICAvLyBT
aG91bGQgYWxyZWFkeSBiZSBoYW5kbGVkIGJ5IHRoZSBkZWxlZ2F0ZS4KQEAgLTM5NSwxMiArMzg5
LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpGbHVz
aENvbnRleHQ6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPEZsdXNoQ29udGV4dD46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
SXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcjoKLSAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8TWV0YUNvbW1h
bmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyOgotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxNZXRhQ29tbWFu
ZENoYW5nZUl0ZW1CdWZmZXI+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICNpZiBFTkFCTEUo
VklERU8pCiAgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgogICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxQYWludEZyYW1lRm9y
TWVkaWE+Ojp2YWx1ZSk7CkBAIC00MjQsOSArNDEyLDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0
cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldElubGluZUZpbGxD
b2xvcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElu
bGluZUZpbGxHcmFkaWVudDoKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8U2V0SW5saW5lRmlsbEdyYWRpZW50Pjo6dmFsdWUpOwotICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CiAgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldElubGluZVN0
cm9rZUNvbG9yPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47CkBAIC01OTYsMTAgKzU4MSw2IEBA
IGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUg
ZGVzdGluYXRpb24pIGNvbnN0CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxGaWxsUmVjdD4oaXRl
bU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZsdXNoQ29udGV4dDoKICAgICAg
ICAgcmV0dXJuIGNvcHlJbnRvPEZsdXNoQ29udGV4dD4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAg
IGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcjoK
LSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFn
ZUJ1ZmZlcj4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21t
YW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPE1ldGFDb21tYW5k
Q2hhbmdlSXRlbUJ1ZmZlcj4oaXRlbU9mZnNldCwgKnRoaXMpOwogI2lmIEVOQUJMRShWSURFTykK
ICAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CiAgICAgICAgIHJldHVybiBj
b3B5SW50bzxQYWludEZyYW1lRm9yTWVkaWE+KGl0ZW1PZmZzZXQsICp0aGlzKTsKQEAgLTYxNiw4
ICs1OTcsNiBAQCBib29sIEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJ
dGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBjb25zdAogICAgICAgICByZXR1cm4gY29weUludG88U2V0
Q1RNPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmls
bENvbG9yOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0SW5saW5lRmlsbENvbG9yPihpdGVt
T2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50
OgotICAgICAgICByZXR1cm4gY29weUludG88U2V0SW5saW5lRmlsbEdyYWRpZW50PihpdGVtT2Zm
c2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CiAg
ICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRJbmxpbmVTdHJva2VDb2xvcj4oaXRlbU9mZnNldCwg
KnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6CkBAIC03MzEsMjIgKzcxMCwx
OCBAQCB2b2lkIEl0ZW1CdWZmZXI6OnNocmlua1RvRml0KCkKICAgICBtX2FsbG9jYXRlZEJ1ZmZl
cnMuc2hyaW5rVG9GaXQoKTsKIH0KIAotRGlkQ2hhbmdlSXRlbUJ1ZmZlciBJdGVtQnVmZmVyOjpz
d2FwV3JpdGFibGVCdWZmZXJJZk5lZWRlZChzaXplX3QgbnVtYmVyT2ZCeXRlcykKK3ZvaWQgSXRl
bUJ1ZmZlcjo6c3dhcFdyaXRhYmxlQnVmZmVySWZOZWVkZWQoc2l6ZV90IG51bWJlck9mQnl0ZXMp
CiB7Ci0gICAgYXV0byBzaXplRm9yQnVmZmVyU3dpdGNoSXRlbSA9IHBhZGRlZFNpemVPZlR5cGVB
bmRJdGVtSW5CeXRlcyhJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyKTsKLSAg
ICBpZiAobV93cml0dGVuTnVtYmVyT2ZCeXRlcyArIG51bWJlck9mQnl0ZXMgKyBzaXplRm9yQnVm
ZmVyU3dpdGNoSXRlbSA8PSBtX3dyaXRhYmxlQnVmZmVyLmNhcGFjaXR5KQotICAgICAgICByZXR1
cm4gRGlkQ2hhbmdlSXRlbUJ1ZmZlcjo6Tm87Ci0KLSAgICBhdXRvIG5leHRCdWZmZXIgPSBjcmVh
dGVJdGVtQnVmZmVyKG51bWJlck9mQnl0ZXMgKyBzaXplRm9yQnVmZmVyU3dpdGNoSXRlbSk7Ci0g
ICAgYm9vbCBoYWRQcmV2aW91c0J1ZmZlciA9IG1fd3JpdGFibGVCdWZmZXIgJiYgbV93cml0YWJs
ZUJ1ZmZlci5pZGVudGlmaWVyICE9IG5leHRCdWZmZXIuaWRlbnRpZmllcjsKLSAgICBpZiAoaGFk
UHJldmlvdXNCdWZmZXIpIHsKLSAgICAgICAgdW5jaGVja2VkQXBwZW5kPE1ldGFDb21tYW5kQ2hh
bmdlSXRlbUJ1ZmZlcj4oRGlkQ2hhbmdlSXRlbUJ1ZmZlcjo6Tm8sIG5leHRCdWZmZXIuaWRlbnRp
Zmllcik7CisgICAgaWYgKG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgKyBudW1iZXJPZkJ5dGVzIDw9
IG1fd3JpdGFibGVCdWZmZXIuY2FwYWNpdHkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8g
bmV4dEJ1ZmZlciA9IGNyZWF0ZUl0ZW1CdWZmZXIobnVtYmVyT2ZCeXRlcyk7CisgICAgaWYgKG1f
d3JpdGFibGVCdWZmZXIgJiYgbV93cml0YWJsZUJ1ZmZlci5pZGVudGlmaWVyICE9IG5leHRCdWZm
ZXIuaWRlbnRpZmllcikgewogICAgICAgICBtX3dyaXRhYmxlQnVmZmVyLmNhcGFjaXR5ID0gbV93
cml0dGVuTnVtYmVyT2ZCeXRlczsKICAgICAgICAgbV9yZWFkT25seUJ1ZmZlcnMuYXBwZW5kKG1f
d3JpdGFibGVCdWZmZXIpOwogICAgIH0KICAgICBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzID0gMDsK
ICAgICBtX3dyaXRhYmxlQnVmZmVyID0gV1RGTW92ZShuZXh0QnVmZmVyKTsKLSAgICByZXR1cm4g
aGFkUHJldmlvdXNCdWZmZXIgPyBEaWRDaGFuZ2VJdGVtQnVmZmVyOjpZZXMgOiBEaWRDaGFuZ2VJ
dGVtQnVmZmVyOjpObzsKIH0KIAogdm9pZCBJdGVtQnVmZmVyOjphcHBlbmQoY29uc3QgRGlzcGxh
eUxpc3RJdGVtJiB0ZW1wb3JhcnlJdGVtKQpAQCAtNzY1LDcgKzc0MCw3IEBAIHZvaWQgSXRlbUJ1
ZmZlcjo6YXBwZW5kKGNvbnN0IERpc3BsYXlMaXN0SXRlbSYgdGVtcG9yYXJ5SXRlbSkKICAgICB9
KTsKICAgICBhdXRvIGFkZGl0aW9uYWxDYXBhY2l0eUZvckVuY29kZWRJdGVtID0gMiAqIHNpemVv
Zih1aW50NjRfdCkgKyByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdub2YodWludDY0X3QpLCBkYXRh
TGVuZ3RoKTsKIAotICAgIGF1dG8gYnVmZmVyQ2hhbmdlZCA9IHN3YXBXcml0YWJsZUJ1ZmZlcklm
TmVlZGVkKGFkZGl0aW9uYWxDYXBhY2l0eUZvckVuY29kZWRJdGVtKTsKKyAgICBzd2FwV3JpdGFi
bGVCdWZmZXJJZk5lZWRlZChhZGRpdGlvbmFsQ2FwYWNpdHlGb3JFbmNvZGVkSXRlbSk7CiAKICAg
ICBtX3dyaXRhYmxlQnVmZmVyLmRhdGFbbV93cml0dGVuTnVtYmVyT2ZCeXRlc10gPSBzdGF0aWNf
Y2FzdDx1aW50OF90PihkaXNwbGF5TGlzdEl0ZW1UeXBlKHRlbXBvcmFyeUl0ZW0pKTsKICAgICBy
ZWludGVycHJldF9jYXN0PHVpbnQ2NF90Kj4obV93cml0YWJsZUJ1ZmZlci5kYXRhICsgbV93cml0
dGVuTnVtYmVyT2ZCeXRlcylbMV0gPSBkYXRhTGVuZ3RoOwpAQCAtNzc2LDIwICs3NTEsMTIgQEAg
dm9pZCBJdGVtQnVmZmVyOjphcHBlbmQoY29uc3QgRGlzcGxheUxpc3RJdGVtJiB0ZW1wb3JhcnlJ
dGVtKQogICAgIGVsc2UKICAgICAgICAgb3V0T2ZMaW5lSXRlbS0+Y29weVRvKGxvY2F0aW9uLCBk
YXRhTGVuZ3RoKTsKIAotICAgIGRpZEFwcGVuZERhdGEoYWRkaXRpb25hbENhcGFjaXR5Rm9yRW5j
b2RlZEl0ZW0sIGJ1ZmZlckNoYW5nZWQpOworICAgIGRpZEFwcGVuZERhdGEoYWRkaXRpb25hbENh
cGFjaXR5Rm9yRW5jb2RlZEl0ZW0pOwogfQogCi12b2lkIEl0ZW1CdWZmZXI6OmRpZEFwcGVuZERh
dGEoc2l6ZV90IG51bWJlck9mQnl0ZXMsIERpZENoYW5nZUl0ZW1CdWZmZXIgZGlkQ2hhbmdlSXRl
bUJ1ZmZlcikKK3ZvaWQgSXRlbUJ1ZmZlcjo6ZGlkQXBwZW5kRGF0YShzaXplX3QgbnVtYmVyT2ZC
eXRlcykKIHsKICAgICBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzICs9IG51bWJlck9mQnl0ZXM7Ci0g
ICAgaWYgKG1fd3JpdGluZ0NsaWVudCkKLSAgICAgICAgbV93cml0aW5nQ2xpZW50LT5kaWRBcHBl
bmREYXRhKG1fd3JpdGFibGVCdWZmZXIsIG51bWJlck9mQnl0ZXMsIGRpZENoYW5nZUl0ZW1CdWZm
ZXIpOwotfQotCi12b2lkIEl0ZW1CdWZmZXI6OnByZXBhcmVUb0FwcGVuZChJdGVtQnVmZmVySGFu
ZGxlJiYgaGFuZGxlKQotewotICAgIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgPSAwOwotICAgIG1f
cmVhZE9ubHlCdWZmZXJzLmFwcGVuZChzdGQ6OmV4Y2hhbmdlKG1fd3JpdGFibGVCdWZmZXIsIFdU
Rk1vdmUoaGFuZGxlKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oCmluZGV4IGM4NzMxOTgyZWY4MzkzMWJi
YWUzMWI3ODY1MGFjMGRhMjBhMDVmYzUuLjQ1MmM4YzlkOTc3MGZhZTBhYjlkNjBjNDRiZjhhMTBl
NTlmNzRiNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgKQEAg
LTg0LDggKzg0LDYgQEAgc3RydWN0IEl0ZW1IYW5kbGUgewogCiBib29sIHNhZmVDb3B5KEl0ZW1I
YW5kbGUgZGVzdGluYXRpb24sIGNvbnN0IERpc3BsYXlMaXN0SXRlbSYgc291cmNlKTsKIAotZW51
bSBjbGFzcyBEaWRDaGFuZ2VJdGVtQnVmZmVyIDogYm9vbCB7IE5vLCBZZXMgfTsKLQogY2xhc3Mg
SXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkl0ZW1CdWZm
ZXJXcml0aW5nQ2xpZW50KCkKQEAgLTExMCwxMSArMTA4LDYgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBlbmNvZGVJdGVtSW5saW5lKGNvbnN0IERpc3BsYXlMaXN0SXRlbSYsIHVpbnQ4X3Qq
KSBjb25zdAogICAgIHsKICAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQXBwZW5kRGF0YShj
b25zdCBJdGVtQnVmZmVySGFuZGxlJiwgc2l6ZV90IG51bWJlck9mQnl0ZXMsIERpZENoYW5nZUl0
ZW1CdWZmZXIpCi0gICAgewotICAgICAgICBVTlVTRURfUEFSQU0obnVtYmVyT2ZCeXRlcyk7Ci0g
ICAgfQogfTsKIAogY2xhc3MgSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQgewpAQCAtMTgzLDI4ICsx
NzYsMjYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAg
ICAgYXV0byBidWZmZXJDaGFuZ2VkID0gc3dhcFdyaXRhYmxlQnVmZmVySWZOZWVkZWQocGFkZGVk
U2l6ZU9mVHlwZUFuZEl0ZW1JbkJ5dGVzKFQ6Oml0ZW1UeXBlKSk7Ci0KLSAgICAgICAgdW5jaGVj
a2VkQXBwZW5kPFQ+KGJ1ZmZlckNoYW5nZWQsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7
CisgICAgICAgIHN3YXBXcml0YWJsZUJ1ZmZlcklmTmVlZGVkKHBhZGRlZFNpemVPZlR5cGVBbmRJ
dGVtSW5CeXRlcyhUOjppdGVtVHlwZSkpOworICAgICAgICB1bmNoZWNrZWRBcHBlbmQ8VD4oc3Rk
Ojpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKICAgICB9CiAKICAgICB2b2lkIHNldENsaWVudChJ
dGVtQnVmZmVyV3JpdGluZ0NsaWVudCogY2xpZW50KSB7IG1fd3JpdGluZ0NsaWVudCA9IGNsaWVu
dDsgfQogICAgIHZvaWQgc2V0Q2xpZW50KEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50KiBjbGllbnQp
IHsgbV9yZWFkaW5nQ2xpZW50ID0gY2xpZW50OyB9Ci0gICAgdm9pZCBwcmVwYXJlVG9BcHBlbmQo
SXRlbUJ1ZmZlckhhbmRsZSYmKTsKIAogcHJpdmF0ZToKICAgICBjb25zdCBJdGVtQnVmZmVySGFu
ZGxlcyYgcmVhZE9ubHlCdWZmZXJzKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkT25seUJ1ZmZlcnM7
IH0KICAgICB2b2lkIGZvckVhY2hJdGVtQnVmZmVyKEZ1bmN0aW9uPHZvaWQoY29uc3QgSXRlbUJ1
ZmZlckhhbmRsZSYpPiYmKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpZEFwcGVu
ZERhdGEoc2l6ZV90IG51bWJlck9mQnl0ZXMsIERpZENoYW5nZUl0ZW1CdWZmZXIpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZGlkQXBwZW5kRGF0YShzaXplX3QgbnVtYmVyT2ZCeXRlcyk7CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCBEaWRDaGFuZ2VJdGVtQnVmZmVyIHN3YXBXcml0YWJsZUJ1ZmZl
cklmTmVlZGVkKHNpemVfdCBudW1iZXJPZkJ5dGVzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHN3YXBXcml0YWJsZUJ1ZmZlcklmTmVlZGVkKHNpemVfdCBudW1iZXJPZkJ5dGVzKTsKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGFwcGVuZChjb25zdCBEaXNwbGF5TGlzdEl0ZW0mKTsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdzPiB2b2lkIHVuY2hlY2tlZEFwcGVuZChE
aWRDaGFuZ2VJdGVtQnVmZmVyIGRpZENoYW5nZUl0ZW1CdWZmZXIsIEFyZ3MmJi4uLiBhcmdzKQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzLi4uIEFyZ3M+IHZvaWQgdW5jaGVja2VkQXBw
ZW5kKEFyZ3MmJi4uLiBhcmdzKQogICAgIHsKICAgICAgICAgYXV0byogc3RhcnRPZkl0ZW0gPSAm
bV93cml0YWJsZUJ1ZmZlci5kYXRhW21fd3JpdHRlbk51bWJlck9mQnl0ZXNdOwogICAgICAgICBz
dGFydE9mSXRlbVswXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFQ6Oml0ZW1UeXBlKTsKICAgICAg
ICAgbmV3IChzdGFydE9mSXRlbSArIHNpemVvZih1aW50NjRfdCkpIFQoc3RkOjpmb3J3YXJkPEFy
Z3M+KGFyZ3MpLi4uKTsKLSAgICAgICAgZGlkQXBwZW5kRGF0YShwYWRkZWRTaXplT2ZUeXBlQW5k
SXRlbUluQnl0ZXMoVDo6aXRlbVR5cGUpLCBkaWRDaGFuZ2VJdGVtQnVmZmVyKTsKKyAgICAgICAg
ZGlkQXBwZW5kRGF0YShwYWRkZWRTaXplT2ZUeXBlQW5kSXRlbUluQnl0ZXMoVDo6aXRlbVR5cGUp
KTsKICAgICB9CiAKICAgICBJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCogbV9yZWFkaW5nQ2xpZW50
IHsgbnVsbHB0ciB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCmlu
ZGV4IDk4YTE2ZDI1ZmExYjVhNGM1MmIwZjczYTRmOWY1MzJhZWJmYWI3MGMuLjU2YWVlNjI3MzI0
NzBjYzA5OWRkYTg5M2RmMWI2NjdhOTRhYTdjOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtVHlwZS5jcHAKQEAgLTQ4LDggKzQ4LDYgQEAgc3RhdGljIHNpemVfdCBzaXplT2ZJ
dGVtSW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4gc2l6ZW9mKENvbmNhdGVu
YXRlQ1RNKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06CiAgICAgICAgIHJldHVybiBzaXpl
b2YoU2V0Q1RNKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Ci0g
ICAgICAgIHJldHVybiBzaXplb2YoU2V0SW5saW5lRmlsbEdyYWRpZW50KTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHJldHVybiBzaXplb2YoU2V0SW5s
aW5lRmlsbENvbG9yKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoK
QEAgLTEzNCwxMCArMTMyLDYgQEAgc3RhdGljIHNpemVfdCBzaXplT2ZJdGVtSW5CeXRlcyhJdGVt
VHlwZSB0eXBlKQogICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxFbGxpcHNlKTsKICAgICBjYXNl
IEl0ZW1UeXBlOjpGbHVzaENvbnRleHQ6CiAgICAgICAgIHJldHVybiBzaXplb2YoRmx1c2hDb250
ZXh0KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1h
Z2VCdWZmZXI6Ci0gICAgICAgIHJldHVybiBzaXplb2YoTWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5h
dGlvbkltYWdlQnVmZmVyKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0
ZW1CdWZmZXI6Ci0gICAgICAgIHJldHVybiBzaXplb2YoTWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVm
ZmVyKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjoKICAgICAgICAgcmV0dXJu
IHNpemVvZihHZXRQaXhlbEJ1ZmZlcik7CiAgICAgY2FzZSBJdGVtVHlwZTo6UHV0UGl4ZWxCdWZm
ZXI6CkBAIC0yMDIsMTUgKzE5NiwxMiBAQCBib29sIGlzRHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlw
ZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpFbmRDbGlwVG9EcmF3aW5nQ29tbWFuZHM6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6Rmx1c2hDb250
ZXh0OgotICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFn
ZUJ1ZmZlcjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6
CiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKICAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6
CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKICAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmls
bENvbG9yOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKICAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lQ2FwOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgpAQCAtMzQ2LDggKzMz
Nyw2IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAjZW5kaWYKICAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpGbHVzaENvbnRleHQ6Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVy
OgotICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKICNpZiBF
TkFCTEUoVklERU8pCiAgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgogI2Vu
ZGlmCkBAIC0zNTcsNyArMzQ2LDYgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkK
ICAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgotICAgIGNhc2UgSXRlbVR5cGU6
OlNldElubGluZUZpbGxHcmFkaWVudDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJv
a2VDb2xvcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgogICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVKb2luOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKaW5k
ZXggNmI5MWEyN2I3NTY1N2JhYzU2YzIzNTc3MDJjNmVjNDMwYWMxOTZmMi4uODA4NDRlOGI5ZGYw
NTVlNWExNmMzNjdjZTJiZjI5MGE5M2NlNjM3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtVHlwZS5oCkBAIC0zNiw3ICszNiw2IEBAIGVudW0gY2xhc3MgSXRlbVR5cGUgOiB1aW50
OF90IHsKICAgICBTY2FsZSwKICAgICBDb25jYXRlbmF0ZUNUTSwKICAgICBTZXRDVE0sCi0gICAg
U2V0SW5saW5lRmlsbEdyYWRpZW50LAogICAgIFNldElubGluZUZpbGxDb2xvciwKICAgICBTZXRJ
bmxpbmVTdHJva2VDb2xvciwKICAgICBTZXRTdHJva2VUaGlja25lc3MsCkBAIC04MCw4ICs3OSw2
IEBAIGVudW0gY2xhc3MgSXRlbVR5cGUgOiB1aW50OF90IHsKICAgICBGaWxsUGF0aCwKICAgICBG
aWxsRWxsaXBzZSwKICAgICBGbHVzaENvbnRleHQsCi0gICAgTWV0YUNvbW1hbmRDaGFuZ2VEZXN0
aW5hdGlvbkltYWdlQnVmZmVyLAotICAgIE1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlciwKICAg
ICBHZXRQaXhlbEJ1ZmZlciwKICAgICBQdXRQaXhlbEJ1ZmZlciwKICNpZiBFTkFCTEUoVklERU8p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKaW5kZXggNzljOTZhZWNkMmUxZDc0
ZDE3NjZmMmQ3YWQ4ZjZmZDRlMzQxYjg3MS4uNzJmYzZkMWE3MzQ0NjE0MjVmMGNlNTY3ZjZiODBj
MDQ3MjJjMGFhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtMTE0
LDgzICsxMTQsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgQ29uY2F0ZW5hdGVDVE0mIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1TZXRJ
bmxpbmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudChjb25zdCBHcmFkaWVudCYg
Z3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSkK
LSAgICA6IG1fZGF0YShncmFkaWVudC5kYXRhKCkpCi0gICAgLCBtX2dyYWRpZW50U3BhY2VUcmFu
c2Zvcm0oZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSkKLSAgICAsIG1fc3ByZWFkTWV0aG9kKGdyYWRp
ZW50LnNwcmVhZE1ldGhvZCgpKQotICAgICwgbV9jb2xvclN0b3BDb3VudChzdGF0aWNfY2FzdDx1
aW50OF90PihncmFkaWVudC5zdG9wcygpLnNpemUoKSkpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQo
bV9jb2xvclN0b3BDb3VudCA8PSBtYXhDb2xvclN0b3BDb3VudCk7Ci0gICAgZm9yICh1aW50OF90
IGkgPSAwOyBpIDwgbV9jb2xvclN0b3BDb3VudDsgKytpKSB7Ci0gICAgICAgIG1fb2Zmc2V0c1tp
XSA9IGdyYWRpZW50LnN0b3BzKClbaV0ub2Zmc2V0OwotICAgICAgICBtX2NvbG9yc1tpXSA9ICpn
cmFkaWVudC5zdG9wcygpW2ldLmNvbG9yLnRyeUdldEFzU1JHQkFCeXRlcygpOwotICAgIH0KLX0K
LQotU2V0SW5saW5lRmlsbEdyYWRpZW50OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQoZmxvYXQgb2Zm
c2V0c1ttYXhDb2xvclN0b3BDb3VudF0sIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yc1ttYXhDb2xvclN0
b3BDb3VudF0sIGNvbnN0IEdyYWRpZW50OjpEYXRhJiBkYXRhLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0sIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1l
dGhvZCwgdWludDhfdCBjb2xvclN0b3BDb3VudCkKLSAgICA6IG1fZGF0YShkYXRhKQotICAgICwg
bV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtKGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pCi0gICAgLCBt
X3NwcmVhZE1ldGhvZChzcHJlYWRNZXRob2QpCi0gICAgLCBtX2NvbG9yU3RvcENvdW50KGNvbG9y
U3RvcENvdW50KQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1fY29sb3JTdG9wQ291bnQgPD0gbWF4
Q29sb3JTdG9wQ291bnQpOwotICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG1fY29sb3JTdG9w
Q291bnQ7ICsraSkgewotICAgICAgICBtX29mZnNldHNbaV0gPSBvZmZzZXRzW2ldOwotICAgICAg
ICBtX2NvbG9yc1tpXSA9IGNvbG9yc1tpXTsKLSAgICB9Ci19Ci0KLVNldElubGluZUZpbGxHcmFk
aWVudDo6U2V0SW5saW5lRmlsbEdyYWRpZW50KGNvbnN0IFNldElubGluZUZpbGxHcmFkaWVudCYg
b3RoZXIpCi17Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8R3JhZGllbnQ6OlJhZGlh
bERhdGE+KG90aGVyLm1fZGF0YSkgfHwgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxHcmFkaWVudDo6
TGluZWFyRGF0YT4ob3RoZXIubV9kYXRhKSB8fCBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEdyYWRp
ZW50OjpDb25pY0RhdGE+KG90aGVyLm1fZGF0YSkpIHsKLSAgICAgICAgbV9kYXRhID0gb3RoZXIu
bV9kYXRhOwotICAgICAgICBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBvdGhlci5tX2dyYWRp
ZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgICAgIG1fc3ByZWFkTWV0aG9kID0gb3RoZXIubV9zcHJl
YWRNZXRob2Q7Ci0gICAgICAgIG1fY29sb3JTdG9wQ291bnQgPSBvdGhlci5tX2NvbG9yU3RvcENv
dW50OwotICAgICAgICBpZiAobV9jb2xvclN0b3BDb3VudCA+IG1heENvbG9yU3RvcENvdW50KQot
ICAgICAgICAgICAgbV9jb2xvclN0b3BDb3VudCA9IDA7Ci0gICAgICAgIGZvciAodWludDhfdCBp
ID0gMDsgaSA8IG1fY29sb3JTdG9wQ291bnQ7ICsraSkgewotICAgICAgICAgICAgbV9vZmZzZXRz
W2ldID0gb3RoZXIubV9vZmZzZXRzW2ldOwotICAgICAgICAgICAgbV9jb2xvcnNbaV0gPSBvdGhl
ci5tX2NvbG9yc1tpXTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBtX2lzVmFsaWQg
PSBmYWxzZTsKLX0KLQotUmVmPEdyYWRpZW50PiBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmdyYWRp
ZW50KCkgY29uc3QKLXsKLSAgICBhdXRvIGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFk
aWVudDo6RGF0YShtX2RhdGEpKTsKLSAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBtX2NvbG9y
U3RvcENvdW50OyArK2kpCi0gICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyBtX29mZnNl
dHNbaV0sIENvbG9yKG1fY29sb3JzW2ldKSB9KTsKLSAgICBncmFkaWVudC0+c2V0U3ByZWFkTWV0
aG9kKG1fc3ByZWFkTWV0aG9kKTsKLSAgICByZXR1cm4gZ3JhZGllbnQ7Ci19Ci0KLXZvaWQgU2V0
SW5saW5lRmlsbEdyYWRpZW50OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
Ci17Ci0gICAgaWYgKG1fY29sb3JTdG9wQ291bnQgPD0gbWF4Q29sb3JTdG9wQ291bnQpCi0gICAg
ICAgIGNvbnRleHQuc2V0RmlsbEdyYWRpZW50KGdyYWRpZW50KCksIG1fZ3JhZGllbnRTcGFjZVRy
YW5zZm9ybSk7Ci19Ci0KLWJvb2wgU2V0SW5saW5lRmlsbEdyYWRpZW50Ojppc0lubGluZShjb25z
dCBHcmFkaWVudCYgZ3JhZGllbnQpCi17Ci0gICAgaWYgKGdyYWRpZW50LnN0b3BzKCkuc2l6ZSgp
ID4gU2V0SW5saW5lRmlsbEdyYWRpZW50OjptYXhDb2xvclN0b3BDb3VudCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgZm9yIChhdXRvJiBjb2xvclN0b3AgOiBncmFkaWVudC5zdG9wcygp
KSB7Ci0gICAgICAgIGlmICghY29sb3JTdG9wLmNvbG9yLnRyeUdldEFzU1JHQkFCeXRlcygpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0
SW5saW5lRmlsbEdyYWRpZW50JikKLXsKLSAgICAvLyBGSVhNRTogRHVtcCBncmFkaWVudCBkYXRh
LgotICAgIHJldHVybiB0czsKLX0KLQogdm9pZCBTZXRJbmxpbmVGaWxsQ29sb3I6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldEZpbGxDb2xv
cihjb2xvcigpKTsKQEAgLTExMTEsMTggKzEwMzQsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmx1c2hDb250ZXh0JiBpdGVtKQogICAgIHJl
dHVybiB0czsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IE1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlciYgaXRlbSkKLXsKLSAgICB0cy5k
dW1wUHJvcGVydHkoImlkZW50aWZpZXIiLCBpdGVtLmlkZW50aWZpZXIoKSk7Ci0gICAgcmV0dXJu
IHRzOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgTWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyJiBpdGVtKQotewot
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiaWRlbnRpZmllciIsIGl0ZW0uaWRlbnRpZmllcigpKTsKLSAg
ICByZXR1cm4gdHM7Ci19Ci0KIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBJdGVtVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpAQCAtMTEzMyw3
ICsxMDQ0LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6IHRzIDw8ICJzY2FsZSI7
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTTogdHMgPDwgInNldC1jdG0iOyBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTogdHMgPDwgImNvbmNhdGVudGF0
ZS1jdG0iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6
IHRzIDw8ICJzZXQtaW5saW5lLWZpbGwtZ3JhZGllbnQiOyBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6IHRzIDw8ICJzZXQtaW5saW5lLWZpbGwtY29sb3IiOyBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjogdHMgPDwgInNl
dC1pbmxpbmUtc3Ryb2tlLWNvbG9yIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ry
b2tlVGhpY2tuZXNzOiB0cyA8PCAic2V0LXN0cm9rZS10aGlja25lc3MiOyBicmVhazsKQEAgLTEx
NzYsOCArMTA4Niw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOiB0cyA8PCAi
ZmlsbC1wYXRoIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6IHRzIDw8
ICJmaWxsLWVsbGlwc2UiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGbHVzaENvbnRleHQ6
IHRzIDw8ICJmbHVzaC1jb250ZXh0IjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNv
bW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyOiB0cyA8PCAibWV0YS1jb21tYW5kLWNo
YW5nZS1kZXN0aW5hdGlvbi1pbWFnZS1idWZmZXIiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6IHRzIDw8ICJtZXRhLWNvbW1hbmQtY2hhbmdl
LWl0ZW0tYnVmZmVyIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6
IHRzIDw8ICJnZXQtcGl4ZWwtYnVmZmVyIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6UHV0
UGl4ZWxCdWZmZXI6IHRzIDw8ICJwdXQtcGl4ZWwtYnVmZmVyIjsgYnJlYWs7CiAjaWYgRU5BQkxF
KFZJREVPKQpAQCAtMTIyNSw5ICsxMTMzLDYgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVu
YXRlQ1RNOgogICAgICAgICB0cyA8PCBpdGVtLmdldDxDb25jYXRlbmF0ZUNUTT4oKTsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgotICAg
ICAgICB0cyA8PCBpdGVtLmdldDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCk7Ci0gICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgdHMg
PDwgaXRlbS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpOwogICAgICAgICBicmVhazsKQEAgLTEz
NTAsMTIgKzEyNTUsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJ
dGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlwZTo6Rmx1c2hDb250ZXh0OgogICAgICAg
ICB0cyA8PCBpdGVtLmdldDxGbHVzaENvbnRleHQ+KCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcjoKLSAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVm
ZmVyPigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENo
YW5nZUl0ZW1CdWZmZXI6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PE1ldGFDb21tYW5kQ2hhbmdl
SXRlbUJ1ZmZlcj4oKTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4
ZWxCdWZmZXI6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEdldFBpeGVsQnVmZmVyPigpOwogICAg
ICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCmluZGV4IGE0M2QxM2Y2
Y2JjM2QyMGNiMmNkODFkMGE0YWEzM2I1YjI2NGI5ZGQuLjhkMDk1ODExZmFlYjMzYjdhMzFmNjY3
ZmEwMzQwZTVkZGQyZDY5ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAt
MjYsNyArMjYsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxp
Y2F0aW9uLmgiCi0jaW5jbHVkZSAiRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIuaCIKICNpbmNs
dWRlICJEaXNwbGF5TGlzdEl0ZW1CdWZmZXJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiRGlzcGxh
eUxpc3RJdGVtVHlwZS5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKQEAgLTcyLDcg
KzcxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7
CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiB9OwogCiBjbGFzcyBS
ZXN0b3JlIHsKQEAgLTgxLDcgKzgwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gZmFsc2U7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiB9OwogCiBjbGFzcyBUcmFuc2xhdGUgewpAQCAtOTAsNiArODksNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAorICAgIFRyYW5zbGF0ZSgp
ID0gZGVmYXVsdDsKICAgICBUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKICAgICAgICAgOiBt
X3goeCkKICAgICAgICAgLCBtX3koeSkKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGljOgogICAgIGZs
b2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KICAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1
cm4gbV95OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKIHBy
aXZhdGU6CiAgICAgZmxvYXQgbV94IHsgMCB9OwpAQCAtMTEyLDYgKzExMiw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCisgICAgUm90YXRlKCkg
PSBkZWZhdWx0OwogICAgIFJvdGF0ZShmbG9hdCBhbmdsZSkKICAgICAgICAgOiBtX2FuZ2xlKGFu
Z2xlKQogICAgIHsKQEAgLTExOSw3ICsxMjAsNyBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCBhbmds
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGU7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBmbG9hdCBtX2FuZ2xlIHsgMCB9OyAvLyBJ
biByYWRpYW5zLgpAQCAtMTMxLDYgKzEzMiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCisgICAgU2NhbGUoKSA9IGRlZmF1bHQ7CiAgICAgU2Nh
bGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogICAgICAgICA6IG1fc2l6ZShzaXplKQogICAgIHsK
QEAgLTEzOCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGbG9hdFNpemUmIGFtb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEZsb2F0U2l6ZSBtX3NpemU7CkBAIC0xNTAs
NiArMTUyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFs
c2U7CiAKKyAgICBTZXRDVE0oKSA9IGRlZmF1bHQ7CiAgICAgU2V0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQogICAgICAgICA6IG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKICAg
ICB7CkBAIC0xNTcsNyArMTYwLDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQogCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEFmZmluZVRy
YW5zZm9ybSBtX3RyYW5zZm9ybTsKQEAgLTE2OSw2ICsxNzIsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAorICAgIENvbmNhdGVuYXRlQ1RNKCkg
PSBkZWZhdWx0OwogICAgIENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKQogICAgICAgICA6IG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKICAgICB7CkBAIC0xNzYs
NTIgKzE4MCwyNiBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAKLSAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1f
dHJhbnNmb3JtOwogfTsKIAotY2xhc3MgU2V0SW5saW5lRmlsbEdyYWRpZW50IHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldElu
bGluZUZpbGxHcmFkaWVudDsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBtYXhDb2xvclN0b3BDb3VudCA9IDQ7Ci0K
LSAgICBTZXRJbmxpbmVGaWxsR3JhZGllbnQoY29uc3QgR3JhZGllbnQmLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgIFdFQkNPUkVfRVhQT1JUIFNl
dElubGluZUZpbGxHcmFkaWVudChmbG9hdCBvZmZzZXRzW21heENvbG9yU3RvcENvdW50XSwgU1JH
QkE8dWludDhfdD4gY29sb3JzW21heENvbG9yU3RvcENvdW50XSwgY29uc3QgR3JhZGllbnQ6OkRh
dGEmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0sIEdyYWRp
ZW50U3ByZWFkTWV0aG9kLCB1aW50OF90IGNvbG9yU3RvcENvdW50KTsKLSAgICBTZXRJbmxpbmVG
aWxsR3JhZGllbnQoY29uc3QgU2V0SW5saW5lRmlsbEdyYWRpZW50Jik7Ci0gICAgYm9vbCBpc1Zh
bGlkKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9Ci0KLSAgICBzdGF0aWMgYm9vbCBpc0lu
bGluZShjb25zdCBHcmFkaWVudCYpOwotICAgIFJlZjxHcmFkaWVudD4gZ3JhZGllbnQoKSBjb25z
dDsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6
Ci0gICAgZmxvYXQgbV9vZmZzZXRzW21heENvbG9yU3RvcENvdW50XTsKLSAgICBTUkdCQTx1aW50
OF90PiBtX2NvbG9yc1ttYXhDb2xvclN0b3BDb3VudF07Ci0gICAgR3JhZGllbnQ6OkRhdGEgbV9k
YXRhOwotICAgIEFmZmluZVRyYW5zZm9ybSBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAg
R3JhZGllbnRTcHJlYWRNZXRob2QgbV9zcHJlYWRNZXRob2QgeyBHcmFkaWVudFNwcmVhZE1ldGhv
ZDo6UGFkIH07Ci0gICAgdWludDhfdCBtX2NvbG9yU3RvcENvdW50IHsgMCB9OwotICAgIGJvb2wg
bV9pc1ZhbGlkIHsgdHJ1ZSB9OwotfTsKLQogY2xhc3MgU2V0SW5saW5lRmlsbENvbG9yIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6
OlNldElubGluZUZpbGxDb2xvcjsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOwogCisgICAgU2V0SW5saW5lRmlsbENvbG9yKCkgPSBkZWZhdWx0OwogICAgIFNldElubGlu
ZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvckRhdGEpCiAgICAgICAgIDogbV9jb2xvckRh
dGEoY29sb3JEYXRhKQogICAgIHsKICAgICB9CiAKICAgICBDb2xvciBjb2xvcigpIGNvbnN0IHsg
cmV0dXJuIHsgbV9jb2xvckRhdGEgfTsgfQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTUkdCQTx1aW50OF90PiBtX2NvbG9yRGF0YTsKQEAg
LTIzMyw2ICsyMTEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSBmYWxzZTsKIAorICAgIFNldElubGluZVN0cm9rZUNvbG9yKCkgPSBkZWZhdWx0OwogICAgIFNl
dElubGluZVN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yRGF0YSkKICAgICAgICAgOiBt
X2NvbG9yRGF0YShjb2xvckRhdGEpCiAgICAgewpAQCAtMjQwLDcgKzIxOSw3IEBAIHB1YmxpYzoK
IAogICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4geyBtX2NvbG9yRGF0YSB9OyB9CiAK
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAg
U1JHQkE8dWludDhfdD4gbV9jb2xvckRhdGE7CkBAIC0yNTIsNiArMjMxLDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKKyAgICBTZXRTdHJva2VU
aGlja25lc3MoKSA9IGRlZmF1bHQ7CiAgICAgU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNr
bmVzcykKICAgICAgICAgOiBtX3RoaWNrbmVzcyh0aGlja25lc3MpCiAgICAgewpAQCAtMjU5LDcg
KzIzOSw3IEBAIHB1YmxpYzoKIAogICAgIGZsb2F0IHRoaWNrbmVzcygpIGNvbnN0IHsgcmV0dXJu
IG1fdGhpY2tuZXNzOyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CiAKIHByaXZhdGU6CiAgICAgZmxvYXQgbV90aGlja25lc3MgeyAwIH07CkBAIC0yODIsNyArMjYy
LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpv
cHRpb25hbDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiwgTmF0aXZlSW1hZ2UqIHN0cm9rZVBhdHRlcm5JbWFnZSwgTmF0aXZlSW1h
Z2UqIGZpbGxQYXR0ZXJuSW1hZ2UpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiwgTmF0aXZlSW1hZ2UqIHN0cm9rZVBhdHRlcm5JbWFnZSwgTmF0aXZlSW1h
Z2UqIGZpbGxQYXR0ZXJuSW1hZ2UpOwogCiBwcml2YXRlOgogICAgIHN0cnVjdCBQYXR0ZXJuRGF0
YSB7CkBAIC01OTksNiArNTc5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gZmFsc2U7CiAKKyAgICBTZXRMaW5lQ2FwKCkgPSBkZWZhdWx0OwogICAgIFNldExp
bmVDYXAoTGluZUNhcCBsaW5lQ2FwKQogICAgICAgICA6IG1fbGluZUNhcChsaW5lQ2FwKQogICAg
IHsKQEAgLTYwNiwxMCArNTg3LDEwIEBAIHB1YmxpYzoKIAogICAgIExpbmVDYXAgbGluZUNhcCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGluZUNhcDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIExpbmVDYXAgbV9saW5lQ2FwOworICAgIExp
bmVDYXAgbV9saW5lQ2FwIHsgTGluZUNhcDo6QnV0dCB9OwogfTsKIAogY2xhc3MgU2V0TGluZURh
c2ggewpAQCAtNjI3LDcgKzYwOCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBEYXNoQXJyYXkmIGRh
c2hBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaEFycmF5OyB9CiAgICAgZmxvYXQgZGFzaE9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaE9mZnNldDsgfQogCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFNldExpbmVEYXNoPiBkZWNvZGUoRGVjb2RlciYpOwpAQCAtNjY2
LDYgKzY0Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOwogCisgICAgU2V0TGluZUpvaW4oKSA9IGRlZmF1bHQ7CiAgICAgU2V0TGluZUpvaW4oTGlu
ZUpvaW4gbGluZUpvaW4pCiAgICAgICAgIDogbV9saW5lSm9pbihsaW5lSm9pbikKICAgICB7CkBA
IC02NzMsMTAgKzY1NSwxMCBAQCBwdWJsaWM6CiAKICAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNv
bnN0IHsgcmV0dXJuIG1fbGluZUpvaW47IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBMaW5lSm9pbiBtX2xpbmVKb2luOworICAgIExp
bmVKb2luIG1fbGluZUpvaW4geyBMaW5lSm9pbjo6TWl0ZXIgfTsKIH07CiAKIGNsYXNzIFNldE1p
dGVyTGltaXQgewpAQCAtNjg1LDYgKzY2Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCisgICAgU2V0TWl0ZXJMaW1pdCgpID0gZGVmYXVsdDsK
ICAgICBTZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCiAgICAgICAgIDogbV9taXRlckxp
bWl0KG1pdGVyTGltaXQpCiAgICAgewpAQCAtNjkyLDEwICs2NzUsMTAgQEAgcHVibGljOgogCiAg
ICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQogCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIGZs
b2F0IG1fbWl0ZXJMaW1pdDsKKyAgICBmbG9hdCBtX21pdGVyTGltaXQgeyAwIH07CiB9OwogCiBj
bGFzcyBDbGVhclNoYWRvdyB7CkBAIC03MDQsNyArNjg3LDggQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OworICAgIENsZWFyU2hhZG93KCkgPSBkZWZhdWx0OworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiB9OwogCiAvLyBG
SVhNRTogdHJlYXQgYXMgZHJhd2luZyBpdGVtPwpAQCAtNzE0LDYgKzY5OCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCisgICAgQ2xpcCgpID0g
ZGVmYXVsdDsKICAgICBDbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgOiBtX3Jl
Y3QocmVjdCkKICAgICB7CkBAIC03MjEsNyArNzA2LDcgQEAgcHVibGljOgogCiAgICAgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1f
cmVjdDsKQEAgLTczMyw2ICs3MTgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJh
d2luZ0l0ZW0gPSBmYWxzZTsKIAorICAgIENsaXBPdXQoKSA9IGRlZmF1bHQ7CiAgICAgQ2xpcE91
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewpA
QCAtNzQwLDcgKzcyNiw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CkBAIC03NTIsNiAr
NzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7
CiAKKyAgICBDbGlwVG9JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKICAgICBDbGlwVG9JbWFnZUJ1
ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKICAgICAgICAgOiBtX2ltYWdlQnVmZmVy
SWRlbnRpZmllcihpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCiAgICAgICAgICwgbV9kZXN0aW5hdGlv
blJlY3QoZGVzdGluYXRpb25SZWN0KQpAQCAtNzYyLDkgKzc0OSw5IEBAIHB1YmxpYzoKICAgICBG
bG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJl
Y3Q7IH0KICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlQnVmZmVySWRl
bnRpZmllci5pc1ZhbGlkKCk7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jiwg
V2ViQ29yZTo6SW1hZ2VCdWZmZXImKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkltYWdlQnVmZmVyJikgY29uc3Q7CiAKLSAg
ICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OworICAgIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyOwpAQCAtNzkyLDcgKzc3OSw3
IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0
aW9uYWw8Q2xpcE91dFRvUGF0aD4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBQYXRoIG1fcGF0aDsKQEAg
LTgzNiw3ICs4MjMsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0aDsgfQogICAgIFdpbmRSdWxlIHdpbmRSdWxlKCkgY29uc3QgeyByZXR1cm4g
bV93aW5kUnVsZTsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owog
CiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENsaXBQ
YXRoPiBkZWNvZGUoRGVjb2RlciYpOwpAQCAtOTI2LDYgKzkxMyw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCisgICAgRW5kQ2xpcFRvRHJhd2lu
Z0NvbW1hbmRzKCkgPSBkZWZhdWx0OwogICAgIEVuZENsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogICAgICAgICA6IG1fZGVzdGluYXRpb24oZGVzdGlu
YXRpb24pCiAgICAgewpAQCAtOTU0LDcgKzk0Miw3IEBAIHB1YmxpYzoKICAgICBEcmF3R2x5cGhz
KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBG
b250U21vb3RoaW5nTW9kZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0dseXBocyhSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiYsIFZl
Y3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4mJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKTsKIAotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRm9udCYpIGNvbnN0OworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRm9udCYpIGNvbnN0Owog
CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQpA
QCAtMTAyNiw2ICsxMDE0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJ
dGVtID0gdHJ1ZTsKIAorICAgIERyYXdJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKICAgICBEcmF3
SW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRp
ZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKICAgICAgICAgOiBtX2ltYWdl
QnVmZmVySWRlbnRpZmllcihpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCiAgICAgICAgICwgbV9kZXN0
aW5hdGlvblJlY3QoZGVzdFJlY3QpCkBAIC0xMDQxLDkgKzEwMzAsOSBAQCBwdWJsaWM6CiAgICAg
Ly8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdG8gdmFsaWRhdGUgSW1hZ2VQYWludGluZ09wdGlvbnMu
CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZp
ZXIuaXNWYWxpZCgpOyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYsIFdlYkNv
cmU6OkltYWdlQnVmZmVyJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIGNvbnN0OwogCi0gICAgTk9f
UkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
KyAgICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGds
b2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQpAQCAtMTA2MSw2ICsxMDUwLDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAorICAgIERyYXdO
YXRpdmVJbWFnZSgpID0gZGVmYXVsdDsKICAgICBEcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiAgICAgICAgIDogbV9pbWFnZUlk
ZW50aWZpZXIoaW1hZ2VJZGVudGlmaWVyKQogICAgICAgICAsIG1faW1hZ2VTaXplKGltYWdlU2l6
ZSkKQEAgLTEwNzYsOCArMTA2Niw4IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogV2UgbWlnaHQg
d2FudCB0byB2YWxpZGF0ZSBJbWFnZVBhaW50aW5nT3B0aW9ucy4KICAgICBib29sIGlzVmFsaWQo
KSBjb25zdCB7IHJldHVybiBtX2ltYWdlSWRlbnRpZmllci5pc1ZhbGlkKCk7IH0KIAotICAgIE5P
X1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmLCBOYXRpdmVJbWFnZSYpIGNvbnN0Owor
ICAgIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmLCBOYXRpdmVJbWFnZSYpIGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25hbDxG
bG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQog
ICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQpAQCAtMTA5Niw2ICsx
MDg2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsK
IAorICAgIERyYXdQYXR0ZXJuKCkgPSBkZWZhdWx0OwogICAgIFdFQkNPUkVfRVhQT1JUIERyYXdQ
YXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7
CiAKICAgICBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyKCkgY29u
c3QgeyByZXR1cm4gbV9pbWFnZUlkZW50aWZpZXI7IH0KQEAgLTExMDgsOCArMTA5OSw4IEBAIHB1
YmxpYzoKICAgICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byB2YWxpZGF0ZSBJbWFnZVBhaW50
aW5nT3B0aW9ucy4KICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlSWRl
bnRpZmllci5pc1ZhbGlkKCk7IH0KIAotICAgIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmLCBOYXRpdmVJbWFnZSYpIGNvbnN0OworICAgIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJU
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmLCBOYXRpdmVJbWFnZSYp
IGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rl
c3RpbmF0aW9uOyB9CkBAIC0xMTMxLDYgKzExMjIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOyAvLyBJcyBkcmF3aW5nIGl0ZW0gYmVjYXVzZSB0aGUg
c2l6ZSBvZiB0aGUgdHJhbnNwYXJlbmN5IGxheWVyIGlzIGltcGxpY2l0bHkgdGhlIGNsaXAgYm91
bmRzLgogCisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcigpID0gZGVmYXVsdDsKICAgICBCZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiAgICAgICAgIDogbV9vcGFjaXR5KG9w
YWNpdHkpCiAgICAgewpAQCAtMTEzOCwxMyArMTEzMCwxMyBAQCBwdWJsaWM6CiAKICAgICBmbG9h
dCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CiAKLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gc3RkOjpu
dWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogCiBwcml2YXRlOgotICAgIGZsb2F0IG1fb3Bh
Y2l0eTsKKyAgICBmbG9hdCBtX29wYWNpdHkgeyAwIH07CiB9OwogCiBjbGFzcyBFbmRUcmFuc3Bh
cmVuY3lMYXllciB7CkBAIC0xMTUzLDcgKzExNDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAg
IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBz
dGQ6Om51bGxvcHQ7IH0KQEAgLTExNjUsNiArMTE1Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKKyAgICBEcmF3UmVjdCgpID0gZGVmYXVsdDsK
ICAgICBEcmF3UmVjdChGbG9hdFJlY3QgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogICAg
ICAgICA6IG1fcmVjdChyZWN0KQogICAgICAgICAsIG1fYm9yZGVyVGhpY2tuZXNzKGJvcmRlclRo
aWNrbmVzcykKQEAgLTExNzQsNyArMTE2Nyw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFJlY3QgcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGZsb2F0IGJvcmRlclRoaWNrbmVzcygp
IGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyVGhpY2tuZXNzOyB9CiAKLSAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xv
YmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdDsgfQpAQCAtMTE5MCw2ICsxMTgzLDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAorICAgIERyYXdMaW5lKCkgPSBkZWZh
dWx0OwogICAgIERyYXdMaW5lKEZsb2F0UG9pbnQgcG9pbnQxLCBGbG9hdFBvaW50IHBvaW50MikK
ICAgICAgICAgOiBtX3BvaW50MShwb2ludDEpCiAgICAgICAgICwgbV9wb2ludDIocG9pbnQyKQpA
QCAtMTE5OSw3ICsxMTkzLDcgQEAgcHVibGljOgogICAgIEZsb2F0UG9pbnQgcG9pbnQxKCkgY29u
c3QgeyByZXR1cm4gbV9wb2ludDE7IH0KICAgICBGbG9hdFBvaW50IHBvaW50MigpIGNvbnN0IHsg
cmV0dXJuIG1fcG9pbnQyOyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwpAQCAtMTIyNiw3ICsxMjIw
LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNQcmludGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcHJp
bnRpbmc7IH0KICAgICBib29sIGRvdWJsZUxpbmVzKCkgY29uc3QgeyByZXR1cm4gbV9kb3VibGVM
aW5lczsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAg
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKQEAgLTEyOTgsNiArMTI5Miw3IEBAIHB1Ymxp
YzoKIAogICAgIHVzaW5nIFVuZGVybHlpbmdEb2N1bWVudE1hcmtlckxpbmVTdHlsZVR5cGUgPSBz
dGQ6OnVuZGVybHlpbmdfdHlwZTxEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZT46OnR5cGU7
CiAKKyAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKCkgPSBkZWZhdWx0OwogICAgIERyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSYgc3R5bGUpCiAgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgICAg
ICwgbV9zdHlsZU1vZGUoc3RhdGljX2Nhc3Q8VW5kZXJseWluZ0RvY3VtZW50TWFya2VyTGluZVN0
eWxlVHlwZT4oc3R5bGUubW9kZSkpCkBAIC0xMzE2LDcgKzEzMTEsNyBAQCBwdWJsaWM6CiAKICAg
ICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKQEAgLTEzMzMsNiArMTMyOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKKyAgICBEcmF3RWxsaXBzZSgpID0gZGVmYXVsdDsKICAg
ICBEcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIDogbV9yZWN0KHJl
Y3QpCiAgICAgewpAQCAtMTM0MCw3ICsxMzM2LDcgQEAgcHVibGljOgogCiAgICAgRmxvYXRSZWN0
IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxC
b3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0OyB9CkBAIC0xMzcwLDcgKzEzNjYsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERyYXdQYXRoPiBkZWNvZGUo
RGVjb2RlciYpOwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAg
ICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5k
aW5nUmVjdCgpOyB9CkBAIC0xNDI2LDcgKzE0MjIsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERyYXdGb2N1c1JpbmdQYXRoPiBk
ZWNvZGUoRGVjb2RlciYpOwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwogCiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKQEAgLTE0ODYsNyArMTQ4Miw3
IEBAIHB1YmxpYzoKICAgICBmbG9hdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsg
fQogICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7
IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CkBAIC0xNTQyLDYgKzE1MzgsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCisgICAgRmlsbFJlY3QoKSA9IGRlZmF1
bHQ7CiAgICAgRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICA6IG1fcmVj
dChyZWN0KQogICAgIHsKQEAgLTE1NDksNyArMTU0Niw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KQEAgLTE1NzMsNyArMTU3MCw3IEBAIHB1YmxpYzoK
ICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGNvbnN0
IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CkBAIC0xNjIwLDcgKzE2MTcsNyBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAg
Y29uc3QgR3JhZGllbnQmIGdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9ncmFkaWVudC5nZXQo
KTsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAgc3Rk
OjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KQEAgLTE2NzQsNyAr
MTY3MSw3IEBAIHB1YmxpYzoKICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRv
cigpIGNvbnN0IHsgcmV0dXJuIG1fb3A7IH0KICAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9ibGVuZE1vZGU7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMo
KSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4g
bV9yZWN0OyB9CkBAIC0xNzQ0LDcgKzE3NDEsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZpbGxSb3VuZGVkUmVjdD4gZGVjb2Rl
KERlY29kZXImKTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAog
ICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVy
biBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0LnJlY3QoKTsg
fQpAQCAtMTgwNCw3ICsxODAxLDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4gZGVjb2Rl
KERlY29kZXImKTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAog
ICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVy
biBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CkBAIC0x
ODUyLDEzICsxODQ5LDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IHRydWU7CiAKKyAgICBGaWxsTGluZSgpID0gZGVmYXVsdDsKICAgICBGaWxsTGluZShjb25z
dCBMaW5lRGF0YSYgbGluZURhdGEpCiAgICAgICAgIDogbV9saW5lRGF0YShsaW5lRGF0YSkKICAg
ICB7CiAgICAgfQogCiAgICAgUGF0aCBwYXRoKCkgY29uc3QgeyByZXR1cm4gUGF0aDo6ZnJvbSh7
bV9saW5lRGF0YX0pOyB9Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owog
ICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVy
biBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gcGF0aCgpLmZhc3RCb3Vu
ZGluZ1JlY3QoKTsgfQogCkBAIC0xODcyLDEzICsxODcwLDE0IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKKyAgICBGaWxsQXJjKCkgPSBkZWZhdWx0
OwogICAgIEZpbGxBcmMoY29uc3QgQXJjRGF0YSYgYXJjRGF0YSkKICAgICAgICAgOiBtX2FyY0Rh
dGEoYXJjRGF0YSkKICAgICB7CiAgICAgfQogCiAgICAgUGF0aCBwYXRoKCkgY29uc3QgeyByZXR1
cm4gUGF0aDo6ZnJvbSh7bV9hcmNEYXRhfSk7IH0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBw
YXRoKCkuZmFzdEJvdW5kaW5nUmVjdCgpOyB9CiAKQEAgLTE4OTIsMTMgKzE4OTEsMTQgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAorICAgIEZpbGxR
dWFkQ3VydmUoKSA9IGRlZmF1bHQ7CiAgICAgRmlsbFF1YWRDdXJ2ZShjb25zdCBRdWFkQ3VydmVE
YXRhJiBxdWFkQ3VydmVEYXRhKQogICAgICAgICA6IG1fcXVhZEN1cnZlRGF0YShxdWFkQ3VydmVE
YXRhKQogICAgIHsKICAgICB9CiAKICAgICBQYXRoIHBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRo
Ojpmcm9tKHttX3F1YWRDdXJ2ZURhdGF9KTsgfQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIHBh
dGgoKS5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KIApAQCAtMTkxMiwxMyArMTkxMiwxNCBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCisgICAgRmlsbEJl
emllckN1cnZlKCkgPSBkZWZhdWx0OwogICAgIEZpbGxCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJD
dXJ2ZURhdGEmIGJlemllckN1cnZlRGF0YSkKICAgICAgICAgOiBtX2JlemllckN1cnZlRGF0YShi
ZXppZXJDdXJ2ZURhdGEpCiAgICAgewogICAgIH0KIAogICAgIFBhdGggcGF0aCgpIGNvbnN0IHsg
cmV0dXJuIFBhdGg6OmZyb20oe21fYmV6aWVyQ3VydmVEYXRhfSk7IH0KLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGds
b2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCB7IHJldHVybiBwYXRoKCkuZmFzdEJvdW5kaW5nUmVjdCgpOyB9CiAKQEAgLTE5NDksNyArMTk1
MCw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6
b3B0aW9uYWw8RmlsbFBhdGg+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xv
YmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IHsgcmV0dXJuIG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KQEAgLTE5ODEsNiArMTk4Miw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1
ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKKyAg
ICBGaWxsRWxsaXBzZSgpID0gZGVmYXVsdDsKICAgICBGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiAgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewpAQCAtMTk4OCw3ICsxOTkw
LDcgQEAgcHVibGljOgogCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6
Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CkBAIC0yMTI1LDE0
ICsyMTI3LDE1IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRy
dWU7CiAKLSAgICBQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQYWludEZyYW1lRm9yTWVkaWEo
KSA9IGRlZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlh
UGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CiAKICAgICBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogICAg
IE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVu
dGlmaWVyOyB9CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZp
ZXIuaXNWYWxpZCgpOyB9CiAKLSAgICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIFdF
QkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBz
dGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHsgbV9kZXN0aW5hdGlvbiB9OyB9
CkBAIC0yMTQ5LDYgKzIxNTIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSB0cnVlOwogCisgICAgU3Ryb2tlUmVjdCgpID0gZGVmYXVsdDsKICAgICBTdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICA6IG1f
cmVjdChyZWN0KQogICAgICAgICAsIG1fbGluZVdpZHRoKGxpbmVXaWR0aCkKQEAgLTIxNTgsNyAr
MjE2Miw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdDsgfQogICAgIGZsb2F0IGxpbmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVdpZHRo
OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpu
dWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwpAQCAtMjE3NCw2ICsyMTc4LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAorICAgIFN0cm9rZUxpbmUo
KSA9IGRlZmF1bHQ7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgU3Ryb2tlTGlu
ZShjb25zdCBMaW5lRGF0YSYgbGluZURhdGEpCiAgICAgICAgIDogbV9zdGFydChsaW5lRGF0YS5z
dGFydCkKQEAgLTIxOTAsNyArMjE5NSw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFBvaW50IHN0YXJ0
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQogICAgIEZsb2F0UG9pbnQgZW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9lbmQ7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7
IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CkBAIC0yMjA4LDEzICsyMjEz
LDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0g
dHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAK
KyAgICBTdHJva2VBcmMoKSA9IGRlZmF1bHQ7CiAgICAgU3Ryb2tlQXJjKGNvbnN0IEFyY0RhdGEm
IGFyY0RhdGEpCiAgICAgICAgIDogbV9hcmNEYXRhKGFyY0RhdGEpCiAgICAgewogICAgIH0KIAog
ICAgIFBhdGggcGF0aCgpIGNvbnN0IHsgcmV0dXJuIFBhdGg6OmZyb20oe21fYXJjRGF0YX0pOyB9
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7
IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAKQEAgLTIyMjgsMTMgKzIyMzQsMTQgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAorICAgIFN0cm9rZVF1YWRDdXJ2
ZSgpID0gZGVmYXVsdDsKICAgICBTdHJva2VRdWFkQ3VydmUoY29uc3QgUXVhZEN1cnZlRGF0YSYg
cXVhZEN1cnZlRGF0YSkKICAgICAgICAgOiBtX3F1YWRDdXJ2ZURhdGEocXVhZEN1cnZlRGF0YSkK
ICAgICB7CiAgICAgfQogCiAgICAgUGF0aCBwYXRoKCkgY29uc3QgeyByZXR1cm4gUGF0aDo6ZnJv
bSh7bV9xdWFkQ3VydmVEYXRhfSk7IH0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIApAQCAtMjI0OCwxMyAr
MjI1NSwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRl
bSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVl
OwogCisgICAgU3Ryb2tlQmV6aWVyQ3VydmUoKSA9IGRlZmF1bHQ7CiAgICAgU3Ryb2tlQmV6aWVy
Q3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJiBiZXppZXJDdXJ2ZURhdGEpCiAgICAgICAgIDog
bV9iZXppZXJDdXJ2ZURhdGEoYmV6aWVyQ3VydmVEYXRhKQogICAgIHsKICAgICB9CiAKICAgICBQ
YXRoIHBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRoOjpmcm9tKHttX2JlemllckN1cnZlRGF0YX0p
OyB9Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIHN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxv
cHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKQEAgLTIyODUsNyArMjI5Myw3IEBAIHB1YmxpYzoKICAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8U3Ryb2tlUGF0
aD4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CkBAIC0yMzE3LDYgKzIz
MjUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwog
CisgICAgU3Ryb2tlRWxsaXBzZSgpID0gZGVmYXVsdDsKICAgICBTdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICB7CkBAIC0yMzI0
LDcgKzIzMzMsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CkBAIC0yMzM5LDYgKzIz
NDgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwog
CisgICAgQ2xlYXJSZWN0KCkgPSBkZWZhdWx0OwogICAgIENsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiAgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewpAQCAtMjM0Niw3ICsyMzU2
LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9yZWN0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAK
ICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQpAQCAt
MjM2Myw3ICsyMzczLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gZmFsc2U7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiB9Owog
CiBjbGFzcyBBcHBseUZpbGxQYXR0ZXJuIHsKQEAgLTIzNzIsNyArMjM4Miw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogfTsKIAogI2VuZGlmCkBAIC0yMzgzLDYgKzIzOTMs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRy
dWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAor
ICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoKSA9IGRlZmF1bHQ7CiAgICAgQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKICAgICAgICAgOiBtX3NjYWxlRmFjdG9yKHNj
YWxlRmFjdG9yKQogICAgIHsKQEAgLTIzOTAsNyArMjQwMSw3IEBAIHB1YmxpYzoKIAogICAgIGZs
b2F0IHNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQogCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGZsb2F0
IG1fc2NhbGVGYWN0b3IgeyAxIH07CkBAIC0yNDAyLDcgKzI0MTMsOCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIGV4cGxpY2l0IEZsdXNo
Q29udGV4dChGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikKKyAgICBGbHVzaENvbnRleHQoKSA9
IGRlZmF1bHQ7CisgICAgRmx1c2hDb250ZXh0KEZsdXNoSWRlbnRpZmllciBpZGVudGlmaWVyKQog
ICAgICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgIHsKICAgICB9CkBAIC0yNDEw
LDUwICsyNDIyLDEyIEBAIHB1YmxpYzoKICAgICBGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcigp
IGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0
IHsgcmV0dXJuIG1faWRlbnRpZmllci5pc1ZhbGlkKCk7IH0KIAotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBGbHVzaElkZW50aWZpZXIgbV9p
ZGVudGlmaWVyOwogfTsKIAotLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJlZmFjdG9yZWQgc28g
dGhhdCB0aGUgY29tbWFuZCB0byAic3dpdGNoIHRvIHRoZSBuZXh0IGl0ZW0gYnVmZmVyIgotLy8g
aXMgbm90IGl0c2VsZiBhIGRpc3BsYXkgbGlzdCBpdGVtLgotY2xhc3MgTWV0YUNvbW1hbmRDaGFu
Z2VJdGVtQnVmZmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgTWV0YUNvbW1h
bmRDaGFuZ2VJdGVtQnVmZmVyKEl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIpCi0gICAg
ICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgewotICAgIH0KLQotICAgIEl0ZW1C
dWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7
IH0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXIuaXNWYWxp
ZCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgSXRlbUJ1ZmZlcklkZW50aWZpZXIgbV9pZGVudGlmaWVy
OwotfTsKLQotY2xhc3MgTWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5
cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcjsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgTWV0YUNvbW1hbmRD
aGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBp
ZGVudGlmaWVyKQotICAgICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0
IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIG1faWRlbnRpZmllci5pc1ZhbGlkKCk7IH0KLQotcHJpdmF0ZToKLSAgICBSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwotfTsKLQogdXNpbmcgRGlzcGxheUxpc3RJ
dGVtID0gVmFyaWFudAogICAgIDwgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcgogICAgICwgQmVnaW5D
bGlwVG9EcmF3aW5nQ29tbWFuZHMKQEAgLTI0OTAsOCArMjQ2NCw2IEBAIHVzaW5nIERpc3BsYXlM
aXN0SXRlbSA9IFZhcmlhbnQKICAgICAsIEZpbGxSb3VuZGVkUmVjdAogICAgICwgRmx1c2hDb250
ZXh0CiAgICAgLCBHZXRQaXhlbEJ1ZmZlcgotICAgICwgTWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5h
dGlvbkltYWdlQnVmZmVyCi0gICAgLCBNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXIKICAgICAs
IFB1dFBpeGVsQnVmZmVyCiAgICAgLCBSZXN0b3JlCiAgICAgLCBSb3RhdGUKQEAgLTI0OTksNyAr
MjQ3MSw2IEBAIHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IFZhcmlhbnQKICAgICAsIFNjYWxlCiAg
ICAgLCBTZXRDVE0KICAgICAsIFNldElubGluZUZpbGxDb2xvcgotICAgICwgU2V0SW5saW5lRmls
bEdyYWRpZW50CiAgICAgLCBTZXRJbmxpbmVTdHJva2VDb2xvcgogICAgICwgU2V0TGluZUNhcAog
ICAgICwgU2V0TGluZURhc2gKQEAgLTI1NTMsNyArMjUyNCw2IEBAIHRlbXBsYXRlPD4gc3RydWN0
IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlPiB7CiAgICAgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTY2FsZSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlNldENUTSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkNvbmNhdGVuYXRlQ1RNLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbEdyYWRpZW50LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U2V0SW5saW5lRmlsbENvbG9yLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U2V0SW5saW5lU3Ryb2tlQ29sb3IsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpTZXRTdHJva2VUaGlja25lc3MsCkBAIC0yNTk3LDggKzI1NjcsNiBAQCB0ZW1wbGF0ZTw+IHN0
cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZT4gewogICAgIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFBhdGgsCiAgICAgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsRWxsaXBzZSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkZsdXNoQ29udGV4dCwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlciwKLSAgICBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlciwK
ICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyLAogICAg
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXIsCiAjaWYgRU5B
QkxFKFZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4
IDFlNDcyMTdlMDc0Y2U1ODdiY2FmZmNmZWFiNGMzMTAwYmRhMTVjYTQuLmRlOWY2Zjk0ZDJmZGU4
YjQ0ZTFlNDg5ZjI4ODE2YmJkMjkwNjgxZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5jcHAKQEAgLTgyLDcgKzgyLDYgQEAgc3RhdGljIGJvb2wgY29udGFpbnNPbmx5
SW5saW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGEK
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSwKICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLAogICAgICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlLAotICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlLAogICAgIH07CiAKICAgICBpZiAoY2hhbmdl
RmxhZ3MgIT0gKGNoYW5nZUZsYWdzICYgaW5saW5lU3RhdGVDaGFuZ2VGbGFncykpCkBAIC05NCwx
MCArOTMsNiBAQCBzdGF0aWMgYm9vbCBjb250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNoYQogICAgIGlmIChjaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSAmJiAhY2hhbmdl
cy5tX3N0YXRlLmZpbGxDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpCi0gICAgICAgICYmICghY2hhbmdlcy5tX3N0YXRlLmZp
bGxHcmFkaWVudCB8fCAhU2V0SW5saW5lRmlsbEdyYWRpZW50Ojppc0lubGluZSgqY2hhbmdlcy5t
X3N0YXRlLmZpbGxHcmFkaWVudCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMTI3LDkgKzEyMiw2IEBAIHZvaWQgUmVjb3JkZXI6OmFwcGVuZFN0
YXRlQ2hhbmdlSXRlbShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywK
IAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bENvbG9yQ2hhbmdlKSkKICAgICAgICAgYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4oKmNoYW5n
ZXMubV9zdGF0ZS5maWxsQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpOwotCi0gICAgaWYgKGNo
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFu
Z2UpKQotICAgICAgICBhcHBlbmQ8U2V0SW5saW5lRmlsbEdyYWRpZW50PigqY2hhbmdlcy5tX3N0
YXRlLmZpbGxHcmFkaWVudCwgY2hhbmdlcy5tX3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNm
b3JtKTsKIH0KIAogYm9vbCBSZWNvcmRlcjo6Y2FuQXBwZW5kSXRlbU9mVHlwZShJdGVtVHlwZSB0
eXBlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCmluZGV4
IGNkM2QxMGQyNzc1NTU5ZTk5Mzg1MGQ0MmM1MjEyZGM3NzU1MjQ5MjEuLjU4YzFjMDRmNjNjZTE0
NjIwOWMwZDg3YWQ2NjMwMDY0MGVkYTMxYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZXBsYXllci5jcHAKQEAgLTIyNiwxMyArMjI2LDYgQEAgUmVwbGF5UmVzdWx0IFJlcGxheWVy
OjpyZXBsYXkoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgYm9vbCB0cmFja1JlcGxheUxp
c3QKIAogICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgImFw
cGx5aW5nICIgPDwgaSsrIDw8ICIgIiA8PCBpdGVtKTsKIAotICAgICAgICBpZiAoaXRlbS5pczxN
ZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI+KCkpIHsKLSAgICAgICAgICAg
IHJlc3VsdC5udW1iZXJPZkJ5dGVzUmVhZCArPSBpdGVtU2l6ZUluQnVmZmVyOwotICAgICAgICAg
ICAgcmVzdWx0LnJlYXNvbkZvclN0b3BwaW5nID0gU3RvcFJlcGxheVJlYXNvbjo6Q2hhbmdlRGVz
dGluYXRpb25JbWFnZUJ1ZmZlcjsKLSAgICAgICAgICAgIHJlc3VsdC5uZXh0RGVzdGluYXRpb25J
bWFnZUJ1ZmZlciA9IGl0ZW0uZ2V0PE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1
ZmZlcj4oKS5pZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCiAg
ICAgICAgIGlmIChhdXRvIFtyZWFzb25Gb3JTdG9wcGluZywgbWlzc2luZ0NhY2hlZFJlc291cmNl
SWRlbnRpZmllcl0gPSBhcHBseUl0ZW0oaXRlbSk7IHJlYXNvbkZvclN0b3BwaW5nKSB7CiAgICAg
ICAgICAgICByZXN1bHQucmVhc29uRm9yU3RvcHBpbmcgPSAqcmVhc29uRm9yU3RvcHBpbmc7CiAg
ICAgICAgICAgICByZXN1bHQubWlzc2luZ0NhY2hlZFJlc291cmNlSWRlbnRpZmllciA9IFdURk1v
dmUobWlzc2luZ0NhY2hlZFJlc291cmNlSWRlbnRpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAKaW5kZXggMjkyZTBjNmYyNmM4OTY4NmQwODdkNDMzMDA3YjI1NGFlZDVhYzIw
ZC4uYjdhOTEzYzNkN2ZjN2UwYTMxOWIxZjliODBmMWMyNjc4MGQ4ODE4OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMzExMiwxMSArMzExMiw2IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IEludGVybmFsczo6c2V0RWxlbWVudFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KEVsZW1l
bnQmIGVsZW1lbnQsCiAgICAgaWYgKCFlbGVtZW50LnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgIGlmIChpczxIVE1MQ2Fu
dmFzRWxlbWVudD4oZWxlbWVudCkpIHsKLSAgICAgICAgZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1l
bnQ+KGVsZW1lbnQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGlzVHJhY2tpbmdSZXBsYXkp
OwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQogICAgIGlmICghZWxlbWVudC5yZW5kZXJl
cigpLT5oYXNMYXllcigpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vz
c0Vycm9yIH07CiAKQEAgLTMxNDMsOSArMzEzOCw2IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50
ZXJuYWxzOjpkaXNwbGF5TGlzdEZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgdW5zaWduZWQK
ICAgICBpZiAoZmxhZ3MgJiBESVNQTEFZX0xJU1RfSU5DTFVERVNfUExBVEZPUk1fT1BFUkFUSU9O
UykKICAgICAgICAgZGlzcGxheUxpc3RGbGFncyB8PSBEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZzo6
SW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnM7CiAKLSAgICBpZiAoaXM8SFRNTENhbnZhc0VsZW1l
bnQ+KGVsZW1lbnQpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+
KGVsZW1lbnQpLmRpc3BsYXlMaXN0QXNUZXh0KGRpc3BsYXlMaXN0RmxhZ3MpOwotCiAgICAgaWYg
KCFlbGVtZW50LnJlbmRlcmVyKCktPmhhc0xheWVyKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIApAQCAtMzE3MSw5ICszMTYzLDYgQEAgRXhjZXB0
aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6OnJlcGxheURpc3BsYXlMaXN0Rm9yRWxlbWVudChFbGVt
ZW50JiBlbGVtZW50LCB1bnMKICAgICBpZiAoZmxhZ3MgJiBESVNQTEFZX0xJU1RfSU5DTFVERVNf
UExBVEZPUk1fT1BFUkFUSU9OUykKICAgICAgICAgZGlzcGxheUxpc3RGbGFncyB8PSBEaXNwbGF5
TGlzdDo6QXNUZXh0RmxhZzo6SW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnM7CiAKLSAgICBpZiAo
aXM8SFRNTENhbnZhc0VsZW1lbnQ+KGVsZW1lbnQpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8
SFRNTENhbnZhc0VsZW1lbnQ+KGVsZW1lbnQpLnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KGRpc3Bs
YXlMaXN0RmxhZ3MpOwotCiAgICAgaWYgKCFlbGVtZW50LnJlbmRlcmVyKCktPmhhc0xheWVyKCkp
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4IDc0ZmZh
MzUyZTlkZTAwY2I4NjZmOTAyYzZlYWJkZWFhZGE2OWNmODYuLmVlMWE4ZjQ4NDE0MTk5ZWIyZjdi
YmQ4MjVlZjQyZTE1NTIzZWIyYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNv
dXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2Vz
LWlucHV0LnhjZmlsZWxpc3QKQEAgLTIwLDYgKzIwLDcgQEAgJChKQVZBU0NSSVBUQ09SRV9QUklW
QVRFX0hFQURFUlNfRElSKS9tb2RlbHMucHkKICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFE
RVJTX0RJUikveHhkLnBsCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvR1BVUHJv
Y2Vzcy5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVHcmFwaGljc0NvbnRleHQubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9E
SVIpL0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5p
bgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tYWMvY29tLmFwcGxlLldlYktpdC5HUFVQcm9j
ZXNzLnNiLmluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1
dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxl
bGlzdAppbmRleCBmNGY4YWMyNTdkMTU1ZTFmZTZmNjE2N2FlNDNjOWNlNTc1YTFlYmU5Li5mMGE2
MjBjMjA3NjI2ZjE1ZjYzMTY2NDJkYTkyMzQwZTdlOWViNmRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJL
aXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKQEAgLTIwOSw2ICsyMDksOSBAQCAk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTE1lc3NhZ2VzUmVwbAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHlNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5TWVzc2FnZXNS
ZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dE1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUdyYXBoaWNzQ29udGV4dE1lc3NhZ2VzUmVwbGllcy5o
CiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVHcmFw
aGljc0NvbnRleHRNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZURlY29kZXJBVkZNYW5hZ2VyTWVzc2FnZVJl
Y2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
UmVtb3RlSW1hZ2VEZWNvZGVyQVZGTWFuYWdlck1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlRGVjb2RlckFWRk1hbmFnZXJN
ZXNzYWdlc1JlcGxpZXMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNl
cy5tYWtlIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGMzMTQ3NDZj
MmNlODA1ZmZkYjk5MDI5MWRiODY3YjI5ZmQyYmVhMTIuLmU1NjdjMzYzNzIzZDE3OThmODc2MzVm
Y2U4NDNhY2Q5YWNjY2VhMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJj
ZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTI0OCw2
ICsyNDgsNyBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKIAlQbHVnaW5Qcm9jZXNzL1BsdWdpblBy
b2Nlc3MgXAogCUdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBcCiAJR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kIFwKKwlHUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dCBcCiAJR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVH
cmFwaGljc0NvbnRleHRHTCBcCiAJR1BVUHJvY2Vzcy93ZWJydGMvTGliV2ViUlRDQ29kZWNzUHJv
eHkgXAogCUdQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1h
bmFnZXIgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDJhOWIwMDlhYTFjYjI3M2JjMzNiYTk5OWZkNTAzMWQz
NmU3NTIxNTQuLmZjNjllYmM2ZDAxNWQ0YzIwNDlmYzcwMDZmYWQ2MWU2MTY2NDUzNzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAKQEAgLTQ2NSwxMCArNDY1LDEwIEBAIFJlbW90ZUltYWdlRGVjb2RlckFWRlByb3h5
JiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjppbWFnZURlY29kZXJBVkZQcm94eSgpCiB9CiAj
ZW5kaWYKIAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGVSZW5kZXJpbmdC
YWNrZW5kKFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJiBjcmVhdGlv
blBhcmFtZXRlcnMpCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRl
cmluZ0JhY2tlbmQoUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmIGNy
ZWF0aW9uUGFyYW1ldGVycywgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiYgc3RyZWFtQnVm
ZmVyKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWFw
LmVuc3VyZShjcmVhdGlvblBhcmFtZXRlcnMuaWRlbnRpZmllciwgWyZdKCkgewotICAgICAgICBy
ZXR1cm4gSVBDOjpTY29wZWRBY3RpdmVNZXNzYWdlUmVjZWl2ZVF1ZXVlIHsgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKGNyZWF0aW9uUGFyYW1ldGVycykpIH07
CisgICAgICAgIHJldHVybiBJUEM6OlNjb3BlZEFjdGl2ZU1lc3NhZ2VSZWNlaXZlUXVldWUgeyBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoY3JlYXRpb25QYXJh
bWV0ZXJzKSwgV1RGTW92ZShzdHJlYW1CdWZmZXIpKSB9OwogICAgIH0pOwogICAgIEFTU0VSVF9V
TlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCBi
ODgyYWEwOTA3Mzc3NmRjOGI4ZGY2OTdkZjAyMTBjYjU4OWFlZDNiLi42ZjBlZTY1N2QyMzQzNjQy
YTJjNmI1MWU0NTg1MTQ3OThjNjdiZWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTE3OCw3ICsxNzgsNyBAQCBw
cml2YXRlOgogICAgIFJlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyJiBtZWRpYVJlY29yZGVyTWFu
YWdlcigpOwogI2VuZGlmCiAKLSAgICB2b2lkIGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmKTsKKyAgICB2b2lkIGNyZWF0ZVJl
bmRlcmluZ0JhY2tlbmQoUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYm
LCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJik7CiAgICAgdm9pZCByZWxlYXNlUmVuZGVy
aW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiAKICNpZiBFTkFCTEUoV0VC
R0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IGZlNDhjYTIwYmEwODk1YWI4YWY3
NGU5NjI2NzRlZjFiM2RkZTg3ZmQuLmMxYmY4MDE5Y2VhYjQxZjc5YTZmNWFkZWUxZmE4NjE2ZTIw
NWViMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0yMyw3ICsyMyw3IEBACiAj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiBtZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKLSAgICB2b2lkIENyZWF0ZVJlbmRlcmluZ0Jh
Y2tlbmQoc3RydWN0IFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1l
dGVycyBjcmVhdGlvblBhcmFtZXRlcnMpCisgICAgdm9pZCBDcmVhdGVSZW5kZXJpbmdCYWNrZW5k
KHN0cnVjdCBXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMg
Y3JlYXRpb25QYXJhbWV0ZXJzLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXIgc3RyZWFtQnVm
ZmVyKQogICAgIHZvaWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKICNpZiBFTkFCTEUo
V0VCR0wpCiAgICAgdm9pZCBDcmVhdGVHcmFwaGljc0NvbnRleHRHTChzdHJ1Y3QgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIFdlYktpdDo6R3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyIGdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgV2ViS2l0OjpS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciwgSVBD
OjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyIHN0cmVhbSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9jb2NvYS9HUFVQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvY29jb2EvR1BVUHJvY2Vzc0NvY29hLm1tCmluZGV4IDJmOWNhMTg3ZjMwMmU3MjUz
YzA2ZjkzZDQ2NmY4MTNkZTg3MDMzZTMuLjlhOTFhZDJlNzg2NTVmNjhhYjZhZmYyNTIzYjQ4YWEw
YjM0YWVlZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9jb2NvYS9HUFVQ
cm9jZXNzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2NvY29hL0dQVVBy
b2Nlc3NDb2NvYS5tbQpAQCAtNTEsMTAgKzUxLDcgQEAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4g
R1BVUHJvY2Vzczo6YWRkaXRpb25hbFN0YXRlRm9yRGlhZ25vc3RpY1JlcG9ydCgpIGNvbnN0CiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGF1dG8gc3RhdGVJbmZvID0g
YWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6YmFj
a2VuZE1hcC5zaXplKCldKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgaWRlbnRpZmllckFuZEJh
Y2tlbmQgOiBiYWNrZW5kTWFwKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgW2JhY2tlbmRJZGVu
dGlmaWVyLCBiYWNrZW5kXSA9IGlkZW50aWZpZXJBbmRCYWNrZW5kOwotICAgICAgICAgICAgICAg
IFtzdGF0ZUluZm8gc2V0T2JqZWN0OkAobmFtZShiYWNrZW5kLT5sYXN0S25vd25TdGF0ZSgpKSkg
Zm9yS2V5OmJhY2tlbmRJZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKV07Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICAvLyBGSVhNRTogQWRkIHNvbWUgZGlhZ25vc3RpYyBzdGF0ZS4KICAgICAg
ICAgICAgIFt3ZWJQcm9jZXNzQ29ubmVjdGlvbkluZm8gc2V0T2JqZWN0OnN0YXRlSW5mby5nZXQo
KSBmb3JLZXk6d2ViUHJvY2Vzc0lkZW50aWZpZXIubG9nZ2luZ1N0cmluZygpXTsKICAgICAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvRGlzcGxh
eUxpc3RSZWFkZXJIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L0Rpc3BsYXlMaXN0UmVhZGVySGFuZGxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZmRmZjM4OGE5MTc5YzJjYTczMDk2YmQ5MjU1Yjk3YjZkYmU5MDEzMy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJEaXNwbGF5TGlzdFJlYWRlckhhbmRsZS5oIgotCi0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0
aG1ldGljLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Ci0KLXN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBEaXNwbGF5TGlzdFJlYWRlckhhbmRsZTo6YWR2YW5j
ZShzaXplX3QgYW1vdW50KQotewotICAgIGF1dG8gcHJldmlvdXNVbnJlYWRCeXRlcyA9IGhlYWRl
cigpLnVucmVhZEJ5dGVzLmV4Y2hhbmdlU3ViKGFtb3VudCk7Ci0gICAgaWYgKFVOTElLRUxZKHBy
ZXZpb3VzVW5yZWFkQnl0ZXMgPCBhbW91bnQpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotICAgIHJldHVybiBwcmV2aW91c1VucmVhZEJ5dGVzIC0gYW1vdW50OwotfQotCi1zdGQ6OnVu
aXF1ZV9wdHI8RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0PiBEaXNwbGF5TGlzdFJlYWRlckhhbmRs
ZTo6ZGlzcGxheUxpc3RGb3JSZWFkaW5nKHNpemVfdCBvZmZzZXQsIHNpemVfdCBjYXBhY2l0eSwg
RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50JiBjbGllbnQpIGNvbnN0Ci17Ci0g
ICAgYXV0byBjaGVja2VkRXh0ZW50ID0gY2hlY2tlZFN1bTxzaXplX3Q+KG9mZnNldCwgY2FwYWNp
dHkpOwotICAgIGlmIChVTkxJS0VMWShjaGVja2VkRXh0ZW50Lmhhc092ZXJmbG93ZWQoKSB8fCBj
aGVja2VkRXh0ZW50ID4gc2hhcmVkTWVtb3J5KCkuc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBhdXRvIGRpc3BsYXlMaXN0ID0gbWFrZVVuaXF1ZTxEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3Q+KERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlcyB7eyBpZGVudGlmaWVy
KCksIGRhdGEoKSArIG9mZnNldCwgY2FwYWNpdHkgfX0pOwotICAgIGRpc3BsYXlMaXN0LT5zZXRJ
dGVtQnVmZmVyUmVhZGluZ0NsaWVudCgmY2xpZW50KTsKLSAgICByZXR1cm4gZGlzcGxheUxpc3Q7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL0Rpc3BsYXlMaXN0UmVhZGVySGFuZGxlLmggYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg1YjM4ZDdlOTkyOWNkY2Q1NGYwNWQzZDFmNTBjMTFi
ZDU2Yjg3My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgiCi0jaW5jbHVkZSA8d3Rm
L0V4cGVjdGVkLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNsYXNzIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlIDogcHVibGljIFNoYXJlZERp
c3BsYXlMaXN0SGFuZGxlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEaXNwbGF5TGlzdFJl
YWRlckhhbmRsZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHN0YXRp
YyBSZWZQdHI8RGlzcGxheUxpc3RSZWFkZXJIYW5kbGU+IGNyZWF0ZShXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllciwgUmVmPFNoYXJlZE1lbW9yeT4m
JiBzaGFyZWRNZW1vcnkpCi0gICAgewotICAgICAgICBpZiAoc2hhcmVkTWVtb3J5LT5zaXplKCkg
PD0gaGVhZGVyU2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUoaWRlbnRpZmllciwgV1RG
TW92ZShzaGFyZWRNZW1vcnkpKSk7Ci0gICAgfQotCi0gICAgc3RkOjpvcHRpb25hbDxzaXplX3Q+
IGFkdmFuY2Uoc2l6ZV90IGFtb3VudCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdD4gZGlzcGxheUxpc3RGb3JSZWFkaW5nKHNpemVfdCBvZmZz
ZXQsIHNpemVfdCBjYXBhY2l0eSwgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJSZWFk
aW5nQ2xpZW50JikgY29uc3Q7Ci0KLSAgICB2b2lkIHN0YXJ0V2FpdGluZygpCi0gICAgewotICAg
ICAgICBoZWFkZXIoKS53YWl0aW5nU3RhdHVzLnN0b3JlKHN0YXRpY19jYXN0PFNoYXJlZERpc3Bs
YXlMaXN0SGFuZGxlOjpXYWl0aW5nU3RhdHVzU3RvcmFnZVR5cGU+KFNoYXJlZERpc3BsYXlMaXN0
SGFuZGxlOjpXYWl0aW5nU3RhdHVzOjpXYWl0aW5nKSk7Ci0gICAgfQotCi0gICAgZW51bSBjbGFz
cyBTdG9wV2FpdGluZ0ZhaWx1cmVSZWFzb24gOiB1aW50OF90IHsgSW52YWxpZFdhaXRpbmdTdGF0
dXMgfTsKLSAgICBFeHBlY3RlZDxzdGQ6Om9wdGlvbmFsPFNoYXJlZERpc3BsYXlMaXN0SGFuZGxl
OjpSZXN1bWVSZWFkaW5nSW5mb3JtYXRpb24+LCBTdG9wV2FpdGluZ0ZhaWx1cmVSZWFzb24+IHN0
b3BXYWl0aW5nKCkKLSAgICB7Ci0gICAgICAgIGF1dG8mIGhlYWRlciA9IHRoaXMtPmhlYWRlcigp
OwotICAgICAgICBhdXRvIHByZXZpb3VzU3RhdHVzID0gaGVhZGVyLndhaXRpbmdTdGF0dXMuZXhj
aGFuZ2Uoc3RhdGljX2Nhc3Q8U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OldhaXRpbmdTdGF0dXNT
dG9yYWdlVHlwZT4oU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OldhaXRpbmdTdGF0dXM6Ok5vdFdh
aXRpbmcpKTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkRW51bTxTaGFyZWREaXNwbGF5TGlzdEhhbmRs
ZTo6V2FpdGluZ1N0YXR1cz4ocHJldmlvdXNTdGF0dXMpKQotICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKFN0b3BXYWl0aW5nRmFpbHVyZVJlYXNvbjo6SW52YWxpZFdhaXRpbmdTdGF0
dXMpOwotCi0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6
V2FpdGluZ1N0YXR1cz4ocHJldmlvdXNTdGF0dXMpID09IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxl
OjpXYWl0aW5nU3RhdHVzOjpSZXN1bWluZykKLSAgICAgICAgICAgIHJldHVybiB7IGhlYWRlci5y
ZXN1bWVSZWFkaW5nSW5mbyB9OwotCi0gICAgICAgIHJldHVybiB7IHN0ZDo6bnVsbG9wdCB9Owot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBEaXNwbGF5TGlzdFJlYWRlckhhbmRsZShXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllciwgUmVmPFNoYXJlZE1l
bW9yeT4mJiBzaGFyZWRNZW1vcnkpCi0gICAgICAgIDogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUo
aWRlbnRpZmllciwgV1RGTW92ZShzaGFyZWRNZW1vcnkpKQotICAgIHsKLSAgICB9Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjVh
N2QwZDkyMDFjMjM1Y2Y2MTYxMmZhYmJjN2NiMDc0NDlkNGFlMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHQu
Y3BwCkBAIC0wLDAgKzEsNDA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZW1vdGVHcmFwaGljc0NvbnRleHQ6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dChJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQmIHJlbmRlcmluZ0JhY2tlbmQpCisgICAgOiBtX2ltYWdlQnVmZmVyKGltYWdlQnVm
ZmVyKQorICAgICwgbV9yZW5kZXJpbmdCYWNrZW5kKHJlbmRlcmluZ0JhY2tlbmQpCit7Cit9CisK
K1JlbW90ZVJlc291cmNlQ2FjaGUmIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6cmVzb3VyY2VDYWNo
ZSgpCit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZC0+cmVtb3RlUmVzb3VyY2VDYWNo
ZSgpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6c2F2ZShEaXNwbGF5TGlzdDo6
U2F2ZSYmIGl0ZW0pCit7CisgICAgaXRlbS5hcHBseShtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCkp
OworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZShEaXNwbGF5TGlzdDo6
UmVzdG9yZSYmIGl0ZW0pCit7CisgICAgaXRlbS5hcHBseShtX2ltYWdlQnVmZmVyLT5jb250ZXh0
KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKERpc3BsYXlM
aXN0OjpUcmFuc2xhdGUmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkobV9pbWFnZUJ1ZmZlci0+
Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShEaXNw
bGF5TGlzdDo6Um90YXRlJiYgaXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KG1faW1hZ2VCdWZmZXIt
PmNvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpzY2FsZShEaXNw
bGF5TGlzdDo6U2NhbGUmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkobV9pbWFnZUJ1ZmZlci0+
Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OnNldENUTShEaXNw
bGF5TGlzdDo6U2V0Q1RNJiYgaXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KG1faW1hZ2VCdWZmZXIt
PmNvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRlbmF0
ZUNUTShEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE0mJiBpdGVtKQoreworICAgIGl0ZW0uYXBw
bHkobV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHQ6OnNldElubGluZUZpbGxDb2xvcihEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9y
JiYgaXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9
CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpzZXRJbmxpbmVTdHJva2VDb2xvcihEaXNw
bGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3ImJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHko
bV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRl
eHQ6OnNldFN0cm9rZVRoaWNrbmVzcyhEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNzJiYg
aXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9CisK
K3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpzZXRTdGF0ZShEaXNwbGF5TGlzdDo6U2V0U3Rh
dGUmJiBpdGVtKQoreworICAgIGF1dG8gc3Ryb2tlUGF0dGVybkltYWdlSWRlbnRpZmllciA9IGl0
ZW0uc3Ryb2tlUGF0dGVybkltYWdlSWRlbnRpZmllcigpOworICAgIFJlZlB0cjxOYXRpdmVJbWFn
ZT4gc3Ryb2tlUGF0dGVybkltYWdlOworICAgIGlmIChzdHJva2VQYXR0ZXJuSW1hZ2VJZGVudGlm
aWVyKQorICAgICAgICBzdHJva2VQYXR0ZXJuSW1hZ2UgPSByZXNvdXJjZUNhY2hlKCkuY2FjaGVk
TmF0aXZlSW1hZ2Uoc3Ryb2tlUGF0dGVybkltYWdlSWRlbnRpZmllcik7CisKKyAgICBhdXRvIGZp
bGxQYXR0ZXJuSW1hZ2VJZGVudGlmaWVyID0gaXRlbS5maWxsUGF0dGVybkltYWdlSWRlbnRpZmll
cigpOworICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gZmlsbFBhdHRlcm5JbWFnZTsKKyAgICBpZiAo
ZmlsbFBhdHRlcm5JbWFnZUlkZW50aWZpZXIpCisgICAgICAgIGZpbGxQYXR0ZXJuSW1hZ2UgPSBy
ZXNvdXJjZUNhY2hlKCkuY2FjaGVkTmF0aXZlSW1hZ2UoZmlsbFBhdHRlcm5JbWFnZUlkZW50aWZp
ZXIpOworCisgICAgaXRlbS5hcHBseShtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCksIHN0cm9rZVBh
dHRlcm5JbWFnZS5nZXQoKSwgZmlsbFBhdHRlcm5JbWFnZS5nZXQoKSk7CisKKyAgICBpZiAoc3Ry
b2tlUGF0dGVybkltYWdlKQorICAgICAgICByZXNvdXJjZUNhY2hlKCkucmVjb3JkUmVzb3VyY2VV
c2Uoc3Ryb2tlUGF0dGVybkltYWdlSWRlbnRpZmllcik7CisKKyAgICBpZiAoZmlsbFBhdHRlcm5J
bWFnZSkKKyAgICAgICAgcmVzb3VyY2VDYWNoZSgpLnJlY29yZFJlc291cmNlVXNlKGZpbGxQYXR0
ZXJuSW1hZ2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVDYXAoRGlzcGxheUxpc3Q6OlNldExpbmVDYXAmJiBpdGVtKQoreworICAgIGl0ZW0uYXBw
bHkobV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHQ6OnNldExpbmVEYXNoKERpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCYmIGl0ZW0pCit7Cisg
ICAgaXRlbS5hcHBseShtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oRGlzcGxheUxpc3Q6OlNldExpbmVKb2luJiYg
aXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9CisK
K3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KERpc3BsYXlMaXN0OjpT
ZXRNaXRlckxpbWl0JiYgaXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KG1faW1hZ2VCdWZmZXItPmNv
bnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdyhE
aXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3cmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkobV9pbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmNs
aXAoRGlzcGxheUxpc3Q6OkNsaXAmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkobV9pbWFnZUJ1
ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmNsaXBP
dXQoRGlzcGxheUxpc3Q6OkNsaXBPdXQmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkobV9pbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmNs
aXBUb0ltYWdlQnVmZmVyKERpc3BsYXlMaXN0OjpDbGlwVG9JbWFnZUJ1ZmZlciYmIGl0ZW0pCit7
CisgICAgaXRlbS5hcHBseShtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJl
bW90ZUdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFRvUGF0aChEaXNwbGF5TGlzdDo6Q2xpcE91dFRv
UGF0aCYmIGl0ZW0pCit7CisgICAgaXRlbS5hcHBseShtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCkp
OworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoRGlzcGxheUxpc3Q6
OkNsaXBQYXRoJiYgaXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KG1faW1hZ2VCdWZmZXItPmNvbnRl
eHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpiZWdpbkNsaXBUb0RyYXdp
bmdDb21tYW5kcyhEaXNwbGF5TGlzdDo6QmVnaW5DbGlwVG9EcmF3aW5nQ29tbWFuZHMmJiBpdGVt
KQoreworICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgeWV0LgorICAgIFVOVVNFRF9QQVJB
TShpdGVtKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmVuZENsaXBUb0RyYXdp
bmdDb21tYW5kcyhEaXNwbGF5TGlzdDo6RW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzJiYgaXRlbSkK
K3sKKyAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkIHlldC4KKyAgICBVTlVTRURfUEFSQU0o
aXRlbSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKERpc3Bs
YXlMaXN0OjpEcmF3R2x5cGhzJiYgaXRlbSkKK3sKKyAgICAvLyBGSVhNRTogTm90IGltcGxlbWVu
dGVkIHlldC4KKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoRGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlciYm
IGl0ZW0pCit7CisgICAgYXV0byBpbWFnZUJ1ZmZlcklkZW50aWZpZXIgPSBpdGVtLmltYWdlQnVm
ZmVySWRlbnRpZmllcigpOworICAgIGF1dG8qIGltYWdlQnVmZmVyID0gcmVzb3VyY2VDYWNoZSgp
LmNhY2hlZEltYWdlQnVmZmVyKGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgaWYgKCFpbWFn
ZUJ1ZmZlcikgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGl0ZW0uYXBwbHkobV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpLCAqaW1h
Z2VCdWZmZXIpOworICAgIHJlc291cmNlQ2FjaGUoKS5yZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1
ZmZlcklkZW50aWZpZXIpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6ZHJhd05h
dGl2ZUltYWdlKERpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2UmJiBpdGVtKQoreworICAgIGF1
dG8gaW1hZ2VJZGVudGlmaWVyID0gaXRlbS5pbWFnZUlkZW50aWZpZXIoKTsKKyAgICBhdXRvKiBp
bWFnZSA9IHJlc291cmNlQ2FjaGUoKS5jYWNoZWROYXRpdmVJbWFnZShpbWFnZUlkZW50aWZpZXIp
OworICAgIGlmICghaW1hZ2UpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpdGVtLmFwcGx5KG1faW1hZ2VCdWZmZXItPmNvbnRl
eHQoKSwgKmltYWdlKTsKKyAgICByZXNvdXJjZUNhY2hlKCkucmVjb3JkUmVzb3VyY2VVc2UoaW1h
Z2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0
ZXJuKERpc3BsYXlMaXN0OjpEcmF3UGF0dGVybiYmIGl0ZW0pCit7CisgICAgYXV0byBpbWFnZUlk
ZW50aWZpZXIgPSBpdGVtLmltYWdlSWRlbnRpZmllcigpOworICAgIGF1dG8qIGltYWdlID0gcmVz
b3VyY2VDYWNoZSgpLmNhY2hlZE5hdGl2ZUltYWdlKGltYWdlSWRlbnRpZmllcik7CisgICAgaWYg
KCFpbWFnZSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGl0ZW0uYXBwbHkobV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpLCAqaW1h
Z2UpOworICAgIHJlc291cmNlQ2FjaGUoKS5yZWNvcmRSZXNvdXJjZVVzZShpbWFnZUlkZW50aWZp
ZXIpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lM
YXllcihEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllciYmIGl0ZW0pCit7CisgICAg
aXRlbS5hcHBseShtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoRGlzcGxheUxpc3Q6OkVuZFRyYW5z
cGFyZW5jeUxheWVyJiYgaXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KG1faW1hZ2VCdWZmZXItPmNv
bnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChEaXNw
bGF5TGlzdDo6RHJhd1JlY3QmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkobV9pbWFnZUJ1ZmZl
ci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
KERpc3BsYXlMaXN0OjpEcmF3TGluZSYmIGl0ZW0pCit7CisgICAgaXRlbS5hcHBseShtX2ltYWdl
QnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVzRm9yVGV4dChEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCYmIGl0ZW0pCit7Cisg
ICAgaXRlbS5hcHBseShtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihEaXNwbGF5TGlzdDo6
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlciYmIGl0ZW0pCit7CisgICAgaXRlbS5hcHBseShtX2lt
YWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6
ZHJhd0VsbGlwc2UoRGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlJiYgaXRlbSkKK3sKKyAgICBpdGVt
LmFwcGx5KG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0aChEaXNwbGF5TGlzdDo6RHJhd1BhdGgmJiBpdGVtKQoreworICAg
IGl0ZW0uYXBwbHkobV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVH
cmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmdQYXRoKERpc3BsYXlMaXN0OjpEcmF3Rm9jdXNS
aW5nUGF0aCYmIGl0ZW0pCit7CisgICAgaXRlbS5hcHBseShtX2ltYWdlQnVmZmVyLT5jb250ZXh0
KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZ1JlY3Rz
KERpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHMmJiBpdGVtKQoreworICAgIGl0ZW0uYXBw
bHkobV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KERpc3BsYXlMaXN0OjpGaWxsUmVjdCYmIGl0ZW0pCit7CisgICAgaXRl
bS5hcHBseShtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBo
aWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoQ29sb3IoRGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENv
bG9yJiYgaXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7
Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhHcmFkaWVudChE
aXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQmJiBpdGVtKQoreworICAgIGl0ZW0uYXBw
bHkobV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHQ6OmZpbGxDb21wb3NpdGVkUmVjdChEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0
JiYgaXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9
CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoRGlzcGxheUxp
c3Q6OkZpbGxSb3VuZGVkUmVjdCYmIGl0ZW0pCit7CisgICAgaXRlbS5hcHBseShtX2ltYWdlQnVm
ZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoRGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlJiYg
aXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9CisK
K3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpmaWxsTGluZShEaXNwbGF5TGlzdDo6RmlsbExp
bmUmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkobV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsK
K30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmZpbGxBcmMoRGlzcGxheUxpc3Q6OkZp
bGxBcmMmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkobV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgp
KTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmZpbGxRdWFkQ3VydmUoRGlzcGxh
eUxpc3Q6OkZpbGxRdWFkQ3VydmUmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkobV9pbWFnZUJ1
ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmZpbGxC
ZXppZXJDdXJ2ZShEaXNwbGF5TGlzdDo6RmlsbEJlemllckN1cnZlJiYgaXRlbSkKK3sKKyAgICBp
dGVtLmFwcGx5KG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aChEaXNwbGF5TGlzdDo6RmlsbFBhdGgmJiBpdGVtKQorewor
ICAgIGl0ZW0uYXBwbHkobV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKERpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZSYm
IGl0ZW0pCit7CisgICAgaXRlbS5hcHBseShtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQor
Cit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Z2V0UGl4ZWxCdWZmZXIoRGlzcGxheUxpc3Q6
OkdldFBpeGVsQnVmZmVyJiYgaXRlbSkKK3sKKyAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVk
IHlldC4KKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0OjpwdXRQaXhlbEJ1ZmZlcihEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXImJiBpdGVt
KQoreworICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgeWV0LgorICAgIFVOVVNFRF9QQVJB
TShpdGVtKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JN
ZWRpYShEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhJiYgaXRlbSkKK3sKKyAgICBpdGVt
LmFwcGx5KG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VSZWN0KERpc3BsYXlMaXN0OjpTdHJva2VSZWN0JiYgaXRlbSkKK3sK
KyAgICBpdGVtLmFwcGx5KG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0OjpzdHJva2VMaW5lKERpc3BsYXlMaXN0OjpTdHJva2VMaW5lJiYg
aXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9CisK
K3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoRGlzcGxheUxpc3Q6OlN0cm9r
ZUFyYyYmIGl0ZW0pCit7CisgICAgaXRlbS5hcHBseShtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCkp
OworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUXVhZEN1cnZlKERpc3Bs
YXlMaXN0OjpTdHJva2VRdWFkQ3VydmUmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkobV9pbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZUJlemllckN1cnZlKERpc3BsYXlMaXN0OjpTdHJva2VCZXppZXJDdXJ2ZSYmIGl0ZW0pCit7
CisgICAgaXRlbS5hcHBseShtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQorCit2b2lkIFJl
bW90ZUdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aCYm
IGl0ZW0pCit7CisgICAgaXRlbS5hcHBseShtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworfQor
Cit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZShEaXNwbGF5TGlzdDo6
U3Ryb2tlRWxsaXBzZSYmIGl0ZW0pCit7CisgICAgaXRlbS5hcHBseShtX2ltYWdlQnVmZmVyLT5j
b250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KERp
c3BsYXlMaXN0OjpDbGVhclJlY3QmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkobV9pbWFnZUJ1
ZmZlci0+Y29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmFwcGx5
U3Ryb2tlUGF0dGVybihEaXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuJiYgaXRlbSkKK3sK
KyAgICBpdGVtLmFwcGx5KG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKERpc3BsYXlMaXN0OjpBcHBseUZp
bGxQYXR0ZXJuJiYgaXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KG1faW1hZ2VCdWZmZXItPmNvbnRl
eHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxl
RmFjdG9yKERpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yJiYgaXRlbSkKK3sKKyAg
ICBpdGVtLmFwcGx5KG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0OjpmbHVzaENvbnRleHQoRGlzcGxheUxpc3Q6OkZsdXNoQ29udGV4dCYm
IGl0ZW0pCit7CisgICAgbV9pbWFnZUJ1ZmZlci0+Zmx1c2hDb250ZXh0KCk7CisgICAgbV9yZW5k
ZXJpbmdCYWNrZW5kLT5kaWRGbHVzaChpdGVtLmlkZW50aWZpZXIoKSwgbV9pbWFnZUJ1ZmZlci0+
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVH
cmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVHcmFwaGljc0NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kODBlZTRjYTIxZWU1MGI4NGNiMTdhY2Fj
Y2Y3MmY3Zjg2OGEyYWYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dC5oCkBAIC0wLDAgKzEsMTIyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEZWNvZGVyLmgiCisjaW5jbHVk
ZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgorI2luY2x1ZGUgIlN0cmVhbU1lc3NhZ2VSZWNl
aXZlci5oIgorI2luY2x1ZGUgIlN0cmVhbVNlcnZlckNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlUmVzb3VyY2VDYWNoZTsKKworY2xh
c3MgUmVtb3RlR3JhcGhpY3NDb250ZXh0IDogcHVibGljIElQQzo6U3RyZWFtTWVzc2FnZVJlY2Vp
dmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlbW90ZUdyYXBoaWNzQ29udGV4dD4gY3Jl
YXRlKFdlYkNvcmU6OkltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZCYgcmVuZGVyaW5nQmFja2VuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFJlbW90ZUdyYXBoaWNzQ29udGV4dChpbWFnZUJ1ZmZlciwgcmVuZGVyaW5nQmFja2VuZCkp
OworICAgIH0KKworICAgIHZvaWQgc2F2ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZSYmKTsK
KyAgICB2b2lkIHJlc3RvcmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmUmJik7CisgICAg
dm9pZCB0cmFuc2xhdGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZSYmKTsKKyAgICB2
b2lkIHJvdGF0ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlJiYpOworICAgIHZvaWQgc2Nh
bGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlJiYpOworICAgIHZvaWQgc2V0Q1RNKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRDVE0mJik7CisgICAgdm9pZCBjb25jYXRlbmF0ZUNUTShXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE0mJik7CisgICAgdm9pZCBzZXRJbmxpbmVG
aWxsQ29sb3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvciYmKTsKKyAg
ICB2b2lkIHNldElubGluZVN0cm9rZUNvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxp
bmVTdHJva2VDb2xvciYmKTsKKyAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNzJiYpOworICAgIHZvaWQgc2V0U3RhdGUoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlJiYpOworICAgIHZvaWQgc2V0TGluZUNhcChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcCYmKTsKKyAgICB2b2lkIHNldExpbmVEYXNoKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCYmKTsKKyAgICB2b2lkIHNldExpbmVKb2lu
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbiYmKTsKKyAgICB2b2lkIHNldE1pdGVy
TGltaXQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQmJik7CisgICAgdm9pZCBj
bGVhclNoYWRvdyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3cmJik7CisgICAgdm9p
ZCBjbGlwKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwJiYpOworICAgIHZvaWQgY2xpcE91dChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dCYmKTsKKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVm
ZmVyKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9JbWFnZUJ1ZmZlciYmKTsKKyAgICB2b2lk
IGNsaXBPdXRUb1BhdGgoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGgmJik7Cisg
ICAgdm9pZCBjbGlwUGF0aChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGgmJik7CisgICAg
dm9pZCBiZWdpbkNsaXBUb0RyYXdpbmdDb21tYW5kcyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVn
aW5DbGlwVG9EcmF3aW5nQ29tbWFuZHMmJik7CisgICAgdm9pZCBlbmRDbGlwVG9EcmF3aW5nQ29t
bWFuZHMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZENsaXBUb0RyYXdpbmdDb21tYW5kcyYmKTsK
KyAgICB2b2lkIGRyYXdHbHlwaHMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHMmJik7
CisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFn
ZUJ1ZmZlciYmKTsKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd05hdGl2ZUltYWdlJiYpOworICAgIHZvaWQgZHJhd1BhdHRlcm4oV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdQYXR0ZXJuJiYpOworICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXll
cihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllciYmKTsKKyAgICB2
b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpFbmRUcmFuc3Bh
cmVuY3lMYXllciYmKTsKKyAgICB2b2lkIGRyYXdSZWN0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3UmVjdCYmKTsKKyAgICB2b2lkIGRyYXdMaW5lKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
TGluZSYmKTsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdMaW5lc0ZvclRleHQmJik7CisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyJiYpOworICAg
IHZvaWQgZHJhd0VsbGlwc2UoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlJiYpOwor
ICAgIHZvaWQgZHJhd1BhdGgoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoJiYpOworICAg
IHZvaWQgZHJhd0ZvY3VzUmluZ1BhdGgoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1Jp
bmdQYXRoJiYpOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZ1JlY3RzKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHMmJik7CisgICAgdm9pZCBmaWxsUmVjdChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3QmJik7CisgICAgdm9pZCBmaWxsUmVjdFdpdGhDb2xvcihXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3ImJik7CisgICAgdm9pZCBmaWxsUmVj
dFdpdGhHcmFkaWVudChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQm
Jik7CisgICAgdm9pZCBmaWxsQ29tcG9zaXRlZFJlY3QoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxDb21wb3NpdGVkUmVjdCYmKTsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0JiYpOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlJiYp
OworICAgIHZvaWQgZmlsbExpbmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxMaW5lJiYpOwor
ICAgIHZvaWQgZmlsbEFyYyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEFyYyYmKTsKKyAgICB2
b2lkIGZpbGxRdWFkQ3VydmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxRdWFkQ3VydmUmJik7
CisgICAgdm9pZCBmaWxsQmV6aWVyQ3VydmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxCZXpp
ZXJDdXJ2ZSYmKTsKKyAgICB2b2lkIGZpbGxQYXRoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxs
UGF0aCYmKTsKKyAgICB2b2lkIGZpbGxFbGxpcHNlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxs
RWxsaXBzZSYmKTsKKyAgICB2b2lkIGdldFBpeGVsQnVmZmVyKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpHZXRQaXhlbEJ1ZmZlciYmKTsKKyAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpQdXRQaXhlbEJ1ZmZlciYmKTsKKyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRp
YShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhJiYpOworICAgIHZvaWQg
c3Ryb2tlUmVjdChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdCYmKTsKKyAgICB2b2lk
IHN0cm9rZUxpbmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUxpbmUmJik7CisgICAgdm9p
ZCBzdHJva2VBcmMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUFyYyYmKTsKKyAgICB2b2lk
IHN0cm9rZVF1YWRDdXJ2ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUXVhZEN1cnZlJiYp
OworICAgIHZvaWQgc3Ryb2tlQmV6aWVyQ3VydmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9r
ZUJlemllckN1cnZlJiYpOworICAgIHZvaWQgc3Ryb2tlUGF0aChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U3Ryb2tlUGF0aCYmKTsKKyAgICB2b2lkIHN0cm9rZUVsbGlwc2UoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlN0cm9rZUVsbGlwc2UmJik7CisgICAgdm9pZCBjbGVhclJlY3QoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsZWFyUmVjdCYmKTsKKyAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybihXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuJiYpOworICAgIHZvaWQgYXBwbHlG
aWxsUGF0dGVybihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybiYmKTsKKyAg
ICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5
RGV2aWNlU2NhbGVGYWN0b3ImJik7CisgICAgdm9pZCBmbHVzaENvbnRleHQoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZsdXNoQ29udGV4dCYmKTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVHcmFwaGlj
c0NvbnRleHQoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJik7
CisKKyAgICBSZW1vdGVSZXNvdXJjZUNhY2hlJiByZXNvdXJjZUNhY2hlKCk7CisKKyAgICB2b2lk
IGRpZFJlY2VpdmVTdHJlYW1NZXNzYWdlKElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbkJhc2Um
LCBJUEM6OkRlY29kZXImKSBmaW5hbDsKKworICAgIFJlZjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4g
bV9pbWFnZUJ1ZmZlcjsKKyAgICBSZWY8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4gbV9yZW5kZXJp
bmdCYWNrZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0Lm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dC5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mODZhMDJkZDYzOTM5OWYxYzkzN2IyYjk4
NTJkMmUyZGJlYTA3YTg2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dC5tZXNzYWdlcy5pbgpAQCAtMCwwICsx
LDkyIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisj
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZUdyYXBoaWNzQ29udGV4dCBOb3RS
ZWZDb3VudGVkIFN0cmVhbSB7CisgICAgU2F2ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZSBp
dGVtKQorICAgIFJlc3RvcmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmUgaXRlbSkKKyAg
ICBUcmFuc2xhdGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZSBpdGVtKQorICAgIFJv
dGF0ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlIGl0ZW0pCisgICAgU2NhbGUoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNjYWxlIGl0ZW0pCisgICAgU2V0Q1RNKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRDVE0gaXRlbSkKKyAgICBDb25jYXRlbmF0ZUNUTShXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q29uY2F0ZW5hdGVDVE0gaXRlbSkKKyAgICBTZXRJbmxpbmVGaWxsQ29sb3IoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvciBpdGVtKQorICAgIFNldElubGluZVN0cm9r
ZUNvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvciBpdGVtKQor
ICAgIFNldFN0cm9rZVRoaWNrbmVzcyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhp
Y2tuZXNzIGl0ZW0pCisgICAgU2V0U3RhdGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRl
IGl0ZW0pCisgICAgU2V0TGluZUNhcChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcCBp
dGVtKQorICAgIFNldExpbmVEYXNoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCBp
dGVtKQorICAgIFNldExpbmVKb2luKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbiBp
dGVtKQorICAgIFNldE1pdGVyTGltaXQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGlt
aXQgaXRlbSkKKyAgICBDbGVhclNoYWRvdyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFk
b3cgaXRlbSkKKyAgICBDbGlwKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwIGl0ZW0pCisgICAg
Q2xpcE91dChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dCBpdGVtKQorICAgIENsaXBUb0lt
YWdlQnVmZmVyKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9JbWFnZUJ1ZmZlciBpdGVtKQor
ICAgIENsaXBPdXRUb1BhdGgoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGggaXRl
bSkKKyAgICBDbGlwUGF0aChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGggaXRlbSkKKyAg
ICBCZWdpbkNsaXBUb0RyYXdpbmdDb21tYW5kcyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5D
bGlwVG9EcmF3aW5nQ29tbWFuZHMgaXRlbSkKKyAgICBFbmRDbGlwVG9EcmF3aW5nQ29tbWFuZHMo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZENsaXBUb0RyYXdpbmdDb21tYW5kcyBpdGVtKQorICAg
IERyYXdHbHlwaHMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHMgaXRlbSkKKyAgICBE
cmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlciBpdGVt
KQorICAgIERyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUlt
YWdlIGl0ZW0pCisgICAgRHJhd1BhdHRlcm4oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0
ZXJuIGl0ZW0pCisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllciBpdGVtKQorICAgIEVuZFRyYW5zcGFyZW5jeUxheWVy
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllciBpdGVtKQorICAgIERy
YXdSZWN0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdCBpdGVtKQorICAgIERyYXdMaW5l
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZSBpdGVtKQorICAgIERyYXdMaW5lc0ZvclRl
eHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgaXRlbSkKKyAgICBEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyIGl0ZW0pCisgICAgRHJhd0VsbGlwc2UoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdFbGxpcHNlIGl0ZW0pCisgICAgRHJhd1BhdGgoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdQYXRoIGl0ZW0pCisgICAgRHJhd0ZvY3VzUmluZ1BhdGgoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdGb2N1c1JpbmdQYXRoIGl0ZW0pCisgICAgRHJhd0ZvY3VzUmluZ1JlY3RzKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHMgaXRlbSkKKyAgICBGaWxsUmVjdChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3QgaXRlbSkKKyAgICBGaWxsUmVjdFdpdGhDb2xvcihX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3IgaXRlbSkKKyAgICBGaWxsUmVj
dFdpdGhHcmFkaWVudChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQg
aXRlbSkKKyAgICBGaWxsQ29tcG9zaXRlZFJlY3QoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxD
b21wb3NpdGVkUmVjdCBpdGVtKQorICAgIEZpbGxSb3VuZGVkUmVjdChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbFJvdW5kZWRSZWN0IGl0ZW0pCisgICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIGl0ZW0pCisgICAg
RmlsbExpbmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxMaW5lIGl0ZW0pCisgICAgRmlsbEFy
YyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEFyYyBpdGVtKQorICAgIEZpbGxRdWFkQ3VydmUo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxRdWFkQ3VydmUgaXRlbSkKKyAgICBGaWxsQmV6aWVy
Q3VydmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxCZXppZXJDdXJ2ZSBpdGVtKQorICAgIEZp
bGxQYXRoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aCBpdGVtKQorICAgIEZpbGxFbGxp
cHNlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZSBpdGVtKQorICAgIEdldFBpeGVs
QnVmZmVyKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRQaXhlbEJ1ZmZlciBpdGVtKQorICAgIFB1
dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRQaXhlbEJ1ZmZlciBpdGVtKQor
ICAgIFBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZv
ck1lZGlhIGl0ZW0pCisgICAgU3Ryb2tlUmVjdChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tl
UmVjdCBpdGVtKQorICAgIFN0cm9rZUxpbmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUxp
bmUgaXRlbSkKKyAgICBTdHJva2VBcmMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUFyYyBp
dGVtKQorICAgIFN0cm9rZVF1YWRDdXJ2ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUXVh
ZEN1cnZlIGl0ZW0pCisgICAgU3Ryb2tlQmV6aWVyQ3VydmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlN0cm9rZUJlemllckN1cnZlIGl0ZW0pCisgICAgU3Ryb2tlUGF0aChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U3Ryb2tlUGF0aCBpdGVtKQorICAgIFN0cm9rZUVsbGlwc2UoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlN0cm9rZUVsbGlwc2UgaXRlbSkKKyAgICBDbGVhclJlY3QoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsZWFyUmVjdCBpdGVtKQorICAgIEFwcGx5U3Ryb2tlUGF0dGVybihXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuIGl0ZW0pCisgICAgQXBwbHlGaWxsUGF0dGVy
bihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybiBpdGVtKQorICAgIEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IgaXRlbSkKKyAgICBGbHVzaENvbnRleHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNo
Q29udGV4dCBpdGVtKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTC5jcHAKaW5kZXggZjJhNWUwMmQzYzc3MDBiNzljZjdkMzFlMDM2OWJlYTMz
MzU2N2IzZC4uMTdkOGQzYTk1YjUzN2FmOTkxNmY2YzM2ZDdhMTFlNTQ2MjQ2ZDQwMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0wuY3BwCkBAIC02NCw3ICs2NCw3IEBAIFJlZjxSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTD4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmNyZWF0ZShHUFVDb25uZWN0aW9u
VG9XZWJQCiAKIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TChHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBH
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIgZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiByZW5kZXJpbmdCYWNrZW5kLCBJUEM6OlN0cmVhbUNvbm5l
Y3Rpb25CdWZmZXImJiBzdHJlYW0pCiAgICAgOiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mo
bWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCi0gICAgLCBtX3N0cmVhbUNv
bm5lY3Rpb24oSVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uPFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMPjo6Y3JlYXRlKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY29ubmVjdGlvbigpLCBXVEZN
b3ZlKHN0cmVhbSksIHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkpKQor
ICAgICwgbV9zdHJlYW1Db25uZWN0aW9uKElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbjo6Y3Jl
YXRlKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY29ubmVjdGlvbigpLCBXVEZNb3ZlKHN0cmVh
bSksIHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkpKQogICAgICwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIoZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKQog
ICAgICwgbV9yZW5kZXJpbmdCYWNrZW5kKHJlbmRlcmluZ0JhY2tlbmQpCiAgICAgLCBtX3JlbmRl
cmluZ1Jlc291cmNlc1JlcXVlc3QoU2NvcGVkV2ViR0xSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0
OjphY3F1aXJlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oCmluZGV4IDEzZTQ3ZmJiOWM4OTcwZjVk
MzA0NWE2ZmY3ZTBjODdjZjIzNzUwZDEuLmY4ZWVhMWI0YjMwZmRlZjU4NmY4YWE2MDBiZGMwYTRi
YTFkOWM3MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlNjb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2Vz
UmVxdWVzdC5oIgorI2luY2x1ZGUgIlN0cmVhbU1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUg
IlN0cmVhbVNlcnZlckNvbm5lY3Rpb24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0V4dGVuc2lvbnNH
TC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaD4KQEAgLTU4
LDE1ICs1OSwxNCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIC8vIEdQVSBwcm9jZXNzIHNpZGUgaW1w
bGVtZW50YXRpb24gb2YgdGhhdCByZWNlaXZlcyBtZXNzYWdlcyBhYm91dCBHcmFwaGljc0NvbnRl
eHRHTCBjYWxscwogLy8gYW5kIGlzc3VlcyByZWFsIEdyYXBoaWNzQ29udGV4dEdMIGNhbGxzIGJh
c2VkIG9uIHRoZSByZWNlaXZlZCBtZXNzYWdlcy4KIC8vIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBs
YXJnZWx5IGdlbmVyYXRlZCBieSBydW5uaW5nIFRvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtZ3B1cC13
ZWJnbC4KLWNsYXNzIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMPiwgcHJpdmF0ZSBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTDo6Q2xpZW50IHsKK2NsYXNzIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMIDog
cHJpdmF0ZSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6Q2xpZW50LCBwdWJsaWMgSVBDOjpT
dHJlYW1NZXNzYWdlUmVjZWl2ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+IGNyZWF0ZShHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzJiYsIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZCYsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmKTsKICAgICB+UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0woKSBvdmVycmlkZTsKICAgICB2b2lkIHN0b3BMaXN0ZW5pbmdGb3JJUEMoUmVmPFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMPiYmIHJlZkZyb21Db25uZWN0aW9uKTsKIAotICAgIC8vIElQ
Qzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4gdGVtcGxh
dGUgY29udHJhY3QgaW1wbGVtZW50YXRpb24uCi0gICAgdm9pZCBkaWRSZWNlaXZlU3RyZWFtTWVz
c2FnZShJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlJiwgSVBDOjpEZWNvZGVyJik7Cisg
ICAgdm9pZCBkaWRSZWNlaXZlU3RyZWFtTWVzc2FnZShJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rp
b25CYXNlJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZv
aWQgZGlzcGxheVdhc1JlY29uZmlndXJlZCgpOwogI2VuZGlmCkBAIC0xMDgsNyArMTA4LDcgQEAg
cHJvdGVjdGVkOgogICAgIHZvaWQgcGFpbnRQaXhlbEJ1ZmZlclRvSW1hZ2VCdWZmZXIoc3RkOjpv
cHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4mJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiAgICAgV2Vha1B0
cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7
Ci0gICAgUmVmUHRyPElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbjxSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTD4+IG1fc3RyZWFtQ29ubmVjdGlvbjsKKyAgICBSZWZQdHI8SVBDOjpTdHJlYW1TZXJ2
ZXJDb25uZWN0aW9uPiBtX3N0cmVhbUNvbm5lY3Rpb247CiAgICAgUmVmUHRyPFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMPiBtX2NvbnRleHQgV1RGX0dVQVJERURfQllfTE9DSyhtX3N0
cmVhbVRocmVhZCk7CiAgICAgR3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyIG1fZ3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyOwogICAgIFJlZjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kPiBtX3Jl
bmRlcmluZ0JhY2tlbmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCmluZGV4IGNiM2Y4ZTgzNWQwYzgwYTdhNTI3NjlhNGQ2
MjA3ZDc4YTU4ODRiNDIuLjk5MGY4ZjE1NDgzMzVhZDBjNjFlNTlmN2JmMWZjZGQwYTdmYjJjMTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFn
ZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJ
bWFnZUJ1ZmZlci5oCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiRGVjb2Rlci5oIgogI2lu
Y2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSAiUmVtb3RlR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUmVtb3RlR3Jh
cGhpY3NDb250ZXh0TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbmNyZXRlSW1hZ2VC
dWZmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CkBAIC01NCwxMiArNTYsMTYgQEAgcHVibGljOgogICAg
ICAgICA6IEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyKHBhcmFtZXRlcnMsIFdURk1vdmUoYmFja2Vu
ZCksIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKICAgICAgICAgLCBtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQocmVtb3RlUmVuZGVyaW5nQmFja2VuZCkKICAgICAgICAgLCBtX3JlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgICAg
ICwgbV9jb250ZXh0KFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCByZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kKSkKICAgICB7CisgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5zdHJlYW1Db25uZWN0aW9uKCkuc3RhcnRSZWNlaXZpbmdNZXNzYWdlcyhtX2NvbnRleHQuZ2V0
KCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLnRvVUludDY0KCkpOwogICAgICAgICBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuZGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKG1fYmFja2Vu
ZC0+Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKCksIHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcik7CiAgICAgfQogCiAgICAgflJlbW90ZUltYWdlQnVmZmVyKCkKICAgICB7CisgICAg
ICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5zdHJlYW1Db25uZWN0aW9uKCkuc3RvcFJlY2Vp
dmluZ01lc3NhZ2VzKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIudG9VSW50NjQoKSk7CisK
ICAgICAgICAgLy8gVW53aW5kIHRoZSBjb250ZXh0J3Mgc3RhdGUgc3RhY2sgYmVmb3JlIGRlc3Ry
dWN0aW9uLCBzaW5jZSBjYWxscyB0byByZXN0b3JlIG1heSBub3QgaGF2ZQogICAgICAgICAvLyBi
ZWVuIGZsdXNoZWQgeWV0LCBvciB0aGUgd2ViIHByb2Nlc3MgbWF5IGhhdmUgdGVybWluYXRlZC4K
ICAgICAgICAgd2hpbGUgKGNvbnRleHQoKS5zdGFja1NpemUoKSkKQEAgLTc3LDQxICs4Myw5IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ7CiAKLSAgICBib29sIGFwcGx5KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0
ZW0sIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIGlm
IChpdGVtLmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRQaXhlbEJ1ZmZlcj4oKSkgewotICAg
ICAgICAgICAgYXV0byYgZ2V0UGl4ZWxCdWZmZXJJdGVtID0gaXRlbS5nZXQ8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkdldFBpeGVsQnVmZmVyPigpOwotICAgICAgICAgICAgYXV0byBwaXhlbEJ1ZmZl
ciA9IEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpnZXRQaXhlbEJ1ZmZlcihnZXRQaXhlbEJ1ZmZl
ckl0ZW0ub3V0cHV0Rm9ybWF0KCksIGdldFBpeGVsQnVmZmVySXRlbS5zcmNSZWN0KCkpOwotICAg
ICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLnBvcHVsYXRlR2V0UGl4ZWxCdWZmZXJT
aGFyZWRNZW1vcnkoV1RGTW92ZShwaXhlbEJ1ZmZlcikpOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXRlbS5pczxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UHV0UGl4ZWxCdWZmZXI+KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHB1dFBpeGVsQnVmZmVy
SXRlbSA9IGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRQaXhlbEJ1ZmZlcj4oKTsK
LSAgICAgICAgICAgIHB1dFBpeGVsQnVmZmVyKHB1dFBpeGVsQnVmZmVySXRlbS5waXhlbEJ1ZmZl
cigpLCBwdXRQaXhlbEJ1ZmZlckl0ZW0uc3JjUmVjdCgpLCBwdXRQaXhlbEJ1ZmZlckl0ZW0uZGVz
dFBvaW50KCksIHB1dFBpeGVsQnVmZmVySXRlbS5kZXN0Rm9ybWF0KCkpOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXRlbS5pczxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Rmx1c2hDb250ZXh0PigpKSB7Ci0gICAgICAgICAgICBCYXNlQ29uY3JldGVJ
bWFnZUJ1ZmZlcjo6Zmx1c2hDb250ZXh0KCk7Ci0gICAgICAgICAgICBhdXRvIGlkZW50aWZpZXIg
PSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1c2hDb250ZXh0PigpLmlkZW50aWZp
ZXIoKTsKLSAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShTaGFyZWREaXNwbGF5TGlzdHMsIHN0
cmVhbSA8PCAiQWNrbm93bGVkZ2luZyBGbHVzaHsiIDw8IGlkZW50aWZpZXIgPDwgIn0gaW4gSW1h
Z2UoIiA8PCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciA8PCAiKSIpOwotICAgICAgICAg
ICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmRpZEZsdXNoKGlkZW50aWZpZXIsIG1fcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Ok1ldGFDb21t
YW5kQ2hhbmdlSXRlbUJ1ZmZlcj4oKSkgewotICAgICAgICAgICAgYXV0byBuZXh0QnVmZmVySWRl
bnRpZmllciA9IGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpNZXRhQ29tbWFuZENoYW5n
ZUl0ZW1CdWZmZXI+KCkuaWRlbnRpZmllcigpOwotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFN
KFNoYXJlZERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJTd2l0Y2hpbmcgdG8gSXRlbXNbIiA8PCBu
ZXh0QnVmZmVySWRlbnRpZmllciA8PCAiXSIpOwotICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLnNldE5leHRJdGVtQnVmZmVyVG9SZWFkKG5leHRCdWZmZXJJZGVudGlmaWVyLCBt
X3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuYXBw
bHlNZWRpYUl0ZW0oaXRlbSwgY29udGV4dCk7Ci0gICAgfQotCiAgICAgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZCYgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwogICAgIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKKyAgICBS
ZWY8UmVtb3RlR3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAppbmRleCBhYTk0NTY0MTQ5ZDA4ZTQ4OTYz
NDdkOTRmMDM5NDYxNTQ3MjliZjczLi5mZjRkM2JhOThiMDM4MDY1OWVjZjMyMTgzYTM5ZGI0NGMz
YWMxNzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKLSNpbmNsdWRlICJEaXNwbGF5TGlzdFJlYWRlckhhbmRs
ZS5oIgogI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKICNpbmNsdWRlICJM
b2dnaW5nLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlci5oIgpAQCAtNzIs
NDYgKzcxLDQ0IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCi1SZWY8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJiBjcmVhdGlvblBh
cmFtZXRlcnMpCitSZWY8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4gUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJiBjcmVh
dGlvblBhcmFtZXRlcnMsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmIHN0cmVhbUJ1ZmZl
cikKIHsKLSAgICBhdXRvIGluc3RhbmNlID0gYWRvcHRSZWYoKm5ldyBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdURk1vdmUoY3JlYXRpb25QYXJhbWV0
ZXJzKSkpOworICAgIGF1dG8gaW5zdGFuY2UgPSBhZG9wdFJlZigqbmV3IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgV1RGTW92ZShjcmVhdGlvblBhcmFt
ZXRlcnMpLCBXVEZNb3ZlKHN0cmVhbUJ1ZmZlcikpKTsKICAgICBpbnN0YW5jZS0+c3RhcnRMaXN0
ZW5pbmdGb3JJUEMoKTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKLVJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0
aW9uUGFyYW1ldGVycyYmIGNyZWF0aW9uUGFyYW1ldGVycykKLSAgICA6IG1fd29ya1F1ZXVlKFdv
cmtRdWV1ZTo6Y3JlYXRlKCJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHdvcmsgcXVldWUiLCBXb3Jr
UXVldWU6OlR5cGU6OlNlcmlhbCwgV29ya1F1ZXVlOjpRT1M6OlVzZXJJbnRlcmFjdGl2ZSkpCitS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJiBjcmVhdGlvblBhcmFtZXRlcnMsIElQQzo6U3Ry
ZWFtQ29ubmVjdGlvbkJ1ZmZlciYmIHN0cmVhbUJ1ZmZlcikKKyAgICA6IG1fd29ya1F1ZXVlKCJS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHdvcmsgcXVldWUiKQorICAgICwgbV9zdHJlYW1Db25uZWN0
aW9uKElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbjo6Y3JlYXRlKGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY29ubmVjdGlvbigpLCBXVEZNb3ZlKHN0cmVhbUJ1ZmZlciksIG1fd29ya1F1ZXVl
KSkKICAgICAsIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyhncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzKQogICAgICwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcihjcmVhdGlvblBhcmFt
ZXRlcnMuaWRlbnRpZmllcikKLSAgICAsIG1fcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmUoV1RG
TW92ZShjcmVhdGlvblBhcmFtZXRlcnMucmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmUpKQogewog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpEaWRDcmVhdGVXYWtlVXBTZW1hcGhvcmVGb3JEaXNwbGF5
TGlzdFN0cmVhbShtX3dvcmtRdWV1ZS53YWtlVXBTZW1hcGhvcmUoKSksIG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpOwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnN0YXJ0
TGlzdGVuaW5nRm9ySVBDKCkKIHsKLSAgICBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNv
bm5lY3Rpb24oKS5hZGRXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93b3JrUXVldWUsIHRoaXMs
IG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7CisgICAgbV9zdHJlYW1D
b25uZWN0aW9uLT5zdGFydFJlY2VpdmluZ01lc3NhZ2VzKCp0aGlzLCBNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyLnRvVUludDY0KCkpOwogfQogCiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp+
UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHdlIGRlc3Ryb3kg
dGhlIFJlc291cmNlQ2FjaGUgb24gdGhlIFdvcmtRdWV1ZSBzaW5jZSBpdCBnZXRzIHBvcHVsYXRl
ZCBvbiB0aGUgV29ya1F1ZXVlLgogICAgIC8vIE1ha2Ugc3VyZSByZW5kZXJpbmcgcmVzb3VyY2Ug
cmVxdWVzdCBpcyByZWxlYXNlZCBhZnRlciBkZXN0cm95aW5nIHRoZSBjYWNoZS4KLSAgICBtX3dv
cmtRdWV1ZS0+ZGlzcGF0Y2goW3JlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QgPSBXVEZNb3ZlKG1f
cmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdCksIHJlbW90ZVJlc291cmNlQ2FjaGUgPSBXVEZNb3Zl
KG1fcmVtb3RlUmVzb3VyY2VDYWNoZSldIHsgfSk7CisgICAgZGlzcGF0Y2goW3JlbmRlcmluZ1Jl
c291cmNlc1JlcXVlc3QgPSBXVEZNb3ZlKG1fcmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdCksIHJl
bW90ZVJlc291cmNlQ2FjaGUgPSBXVEZNb3ZlKG1fcmVtb3RlUmVzb3VyY2VDYWNoZSldIHsgfSk7
CiB9CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c3RvcExpc3RlbmluZ0ZvcklQQygp
CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIC8vIFRoZSBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kIGRlc3RydWN0b3Igd29uJ3QgYmUgY2FsbGVkIHVudGlsIGRpc2Nvbm5l
Y3QoKSBpcyBjYWxsZWQgYW5kIHdlIHVucmVnaXN0ZXIgb3Vyc2VsdmVzIGFzIGEgV29ya1F1ZXVl
TWVzc2FnZVJlY2VpdmVyIGJlY2F1c2UKLSAgICAvLyB0aGUgSVBDOjpDb25uZWN0aW9uIHJlZnMg
aXRzIFdvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlcnMuCi0gICAgbV9ncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLT5jb25uZWN0aW9uKCkucmVtb3ZlV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7CisgICAgbV9zdHJlYW1Db25uZWN0
aW9uLT5zdG9wUmVjZWl2aW5nTWVzc2FnZXMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50
b1VJbnQ2NCgpKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaXNwYXRjaChG
dW5jdGlvbjx2b2lkKCk+JiYgdGFzaykKIHsKLSAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2goV1RG
TW92ZSh0YXNrKSk7CisgICAgbV93b3JrUXVldWUuZGlzcGF0Y2goV1RGTW92ZSh0YXNrKSk7CiB9
CiAKIElQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRl
ckNvbm5lY3Rpb24oKSBjb25zdApAQCAtMTI0LDMwICsxMjEsMTIgQEAgdWludDY0X3QgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAogICAg
IHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCk7CiB9CiAKLWJv
b2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6YXBwbHlNZWRpYUl0ZW0oRGlzcGxheUxpc3Q6Okl0
ZW1IYW5kbGUgaXRlbSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKCFpdGVtLmlzPERpc3BsYXlMaXN0OjpQYWlu
dEZyYW1lRm9yTWVkaWE+KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8mIG1l
ZGlhSXRlbSA9IGl0ZW0uZ2V0PERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE+KCk7Ci0g
ICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFsmLCBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
ID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBtZWRpYVBsYXllcklkZW50aWZpZXIgPSBt
ZWRpYUl0ZW0uaWRlbnRpZmllcigpXSB7Ci0gICAgICAgIGF1dG8gcGxheWVyID0gZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2Vzcy0+cmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5tZWRpYVBs
YXllcihtZWRpYVBsYXllcklkZW50aWZpZXIpOwotICAgICAgICBpZiAoIXBsYXllcikKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgLy8gSXQgaXMgY3VycmVudGx5IG5vdCBzYWZlIHRvIGNh
bGwgcGFpbnRGcmFtZUZvck1lZGlhKCkgb2ZmIHRoZSBtYWluIHRocmVhZC4KLSAgICAgICAgY29u
dGV4dC5wYWludEZyYW1lRm9yTWVkaWEoKnBsYXllciwgbWVkaWFJdGVtLmRlc3RpbmF0aW9uKCkp
OwotICAgIH0pOwotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmRpZENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUgaGFuZGxlLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6RGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKFdURk1vdmUoaGFuZGxlKSwgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiB9
CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkRmx1c2goRGlzcGxheUxpc3Q6OkZs
dXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OmRpZEZsdXNoKEZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiB7CiAgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpEaWRGbHVzaChmbHVzaElk
ZW50aWZpZXIsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIpOwogfQpAQCAtMTc5LDE5NiArMTU4LDYgQEAgdm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBSZW4KIAogICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZUltYWdlQnVmZmVyKCppbWFn
ZUJ1ZmZlcik7CiAgICAgdXBkYXRlUmVuZGVyaW5nUmVzb3VyY2VSZXF1ZXN0KCk7Ci0KLSAgICBp
ZiAobV9wZW5kaW5nV2FrZXVwSW5mbyAmJiBtX3BlbmRpbmdXYWtldXBJbmZvLT5zaG91bGRQZXJm
b3JtV2FrZXVwKGltYWdlQnVmZmVyUmVzb3VyY2VJZGVudGlmaWVyKSkKLSAgICAgICAgd2FrZVVw
QW5kQXBwbHlEaXNwbGF5TGlzdChzdGQ6OmV4Y2hhbmdlKG1fcGVuZGluZ1dha2V1cEluZm8sIHN0
ZDo6bnVsbG9wdCktPmFyZ3VtZW50cyk7Ci19Ci0KLVJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJl
cGxheWVyRGVsZWdhdGU6OlJlcGxheWVyRGVsZWdhdGUoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGRl
c3RpbmF0aW9uLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiByZW1vdGVSZW5kZXJpbmdCYWNrZW5k
KQotICAgIDogbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLSAgICAsIG1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZChyZW1vdGVSZW5kZXJpbmdCYWNrZW5kKQotewotfQotCi1ib29sIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OmFwcGx5KFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtSGFuZGxlIGl0ZW0sIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3ND
b250ZXh0KQotewotICAgIGF1dG8gYXBwbHkgPSBbJl0oYXV0byYmIGRlc3RpbmF0aW9uKSB7Ci0g
ICAgICAgIHJldHVybiBkZXN0aW5hdGlvbi5hcHBseShpdGVtLCBncmFwaGljc0NvbnRleHQpOwot
ICAgIH07Ci0KLSAgICBpZiAobV9kZXN0aW5hdGlvbi5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVy
aW5nTW9kZTo6QWNjZWxlcmF0ZWQpCi0gICAgICAgIHJldHVybiBhcHBseShzdGF0aWNfY2FzdDxB
Y2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyJj4obV9kZXN0aW5hdGlvbikpOwotICAgIHJldHVy
biBhcHBseShzdGF0aWNfY2FzdDxVbmFjY2VsZXJhdGVkUmVtb3RlSW1hZ2VCdWZmZXImPihtX2Rl
c3RpbmF0aW9uKSk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJE
ZWxlZ2F0ZTo6ZGlkQ3JlYXRlTWFza0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiBp
bWFnZUJ1ZmZlcikKLXsKLSAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZGlkQ3JlYXRlTWFz
a0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyKTsKLX0KLQotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpSZXBsYXllckRlbGVnYXRlOjpkaWRSZXNldE1hc2tJbWFnZUJ1ZmZlcigpCi17Ci0gICAg
bV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmRpZFJlc2V0TWFza0ltYWdlQnVmZmVyKCk7Ci19Ci0K
LXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6cmVjb3JkUmVz
b3VyY2VVc2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcikKLXsKLSAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQucmVtb3RlUmVzb3VyY2VD
YWNoZSgpLnJlY29yZFJlc291cmNlVXNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci19
Ci0KLURpc3BsYXlMaXN0OjpSZXBsYXlSZXN1bHQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c3Vi
bWl0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIEltYWdlQnVm
ZmVyJiBkZXN0aW5hdGlvbikKLXsKLSAgICBpZiAoZGlzcGxheUxpc3QuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4geyB9OwotCi0gICAgUmVwbGF5ZXJEZWxlZ2F0ZSByZXBsYXllckRlbGVnYXRl
KGRlc3RpbmF0aW9uLCAqdGhpcyk7Ci0KLSAgICByZXR1cm4gV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlcGxheWVyIHsKLSAgICAgICAgZGVzdGluYXRpb24uY29udGV4dCgpLAotICAgICAgICBkaXNw
bGF5TGlzdCwKLSAgICAgICAgJnJlbW90ZVJlc291cmNlQ2FjaGUoKS5pbWFnZUJ1ZmZlcnMoKSwK
LSAgICAgICAgJnJlbW90ZVJlc291cmNlQ2FjaGUoKS5uYXRpdmVJbWFnZXMoKSwKLSAgICAgICAg
JnJlbW90ZVJlc291cmNlQ2FjaGUoKS5mb250cygpLAotICAgICAgICBtX2N1cnJlbnRNYXNrSW1h
Z2VCdWZmZXIuZ2V0KCksCi0gICAgICAgICZyZXBsYXllckRlbGVnYXRlCi0gICAgfS5yZXBsYXko
KTsKLX0KLQotUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpuZXh0
RGVzdGluYXRpb25JbWFnZUJ1ZmZlckFmdGVyQXBwbHlpbmdEaXNwbGF5TGlzdHMoSW1hZ2VCdWZm
ZXImIGluaXRpYWxEZXN0aW5hdGlvbiwgc2l6ZV90IGluaXRpYWxPZmZzZXQsIERpc3BsYXlMaXN0
UmVhZGVySGFuZGxlJiBoYW5kbGUsIEdQVVByb2Nlc3NXYWtldXBSZWFzb24gcmVhc29uKQotewot
ICAgIFJlZlB0ciBkZXN0aW5hdGlvbiB7ICZpbml0aWFsRGVzdGluYXRpb24gfTsKLSAgICBSZWYg
aGFuZGxlUHJvdGVjdG9yIHsgaGFuZGxlIH07Ci0KLSAgICBhdXRvIG9mZnNldCA9IGluaXRpYWxP
ZmZzZXQ7Ci0gICAgc2l6ZV90IHNpemVUb1JlYWQgPSAwOwotICAgIGRvIHsKLSAgICAgICAgc2l6
ZVRvUmVhZCA9IGhhbmRsZS51bnJlYWRCeXRlcygpOwotICAgIH0gd2hpbGUgKCFzaXplVG9SZWFk
KTsKLQotICAgIHdoaWxlIChkZXN0aW5hdGlvbikgewotICAgICAgICBhdXRvIGRpc3BsYXlMaXN0
ID0gaGFuZGxlLmRpc3BsYXlMaXN0Rm9yUmVhZGluZyhvZmZzZXQsIHNpemVUb1JlYWQsICp0aGlz
KTsKLSAgICAgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRShkaXNwbGF5TGlzdCwg
bnVsbHB0ciwgIkZhaWxlZCB0byBtYXAgZGlzcGxheSBsaXN0IGZyb20gc2hhcmVkIG1lbW9yeSIp
OwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgICAgICBhdXRvIHN0YXJ0VGltZSA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOwotI2VuZGlmCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gc3VibWl0KCpkaXNw
bGF5TGlzdCwgKmRlc3RpbmF0aW9uKTsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNoYXJlZERp
c3BsYXlMaXN0cywgc3RyZWFtIDw8ICJSZWFkIFsiIDw8IG9mZnNldCA8PCAiLCAiIDw8IG9mZnNl
dCArIHJlc3VsdC5udW1iZXJPZkJ5dGVzUmVhZCA8PCAiXTsgSXRlbXNbIiA8PCBoYW5kbGUuaWRl
bnRpZmllcigpIDw8ICJdID0+IEltYWdlKCIgPDwgZGVzdGluYXRpb24tPnJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcigpIDw8ICIpIGluICIgPDwgTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFy
dFRpbWUpOwotICAgICAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKHJlc3VsdC5y
ZWFzb25Gb3JTdG9wcGluZyAhPSBEaXNwbGF5TGlzdDo6U3RvcFJlcGxheVJlYXNvbjo6SW52YWxp
ZEl0ZW1PckV4dGVudCwgbnVsbHB0ciwgIkRldGVjdGVkIGludmFsaWQgZGlzcGxheSBsaXN0IGl0
ZW0gb3IgZXh0ZW50Iik7Ci0gICAgICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUo
cmVzdWx0LnJlYXNvbkZvclN0b3BwaW5nICE9IERpc3BsYXlMaXN0OjpTdG9wUmVwbGF5UmVhc29u
OjpPdXRPZk1lbW9yeSwgbnVsbHB0ciwgIkNvdW5kIG5vdCBhbGxvY2F0ZSBtZW1vcnkiKTsKLQot
ICAgICAgICBhdXRvIGFkdmFuY2VSZXN1bHQgPSBoYW5kbGUuYWR2YW5jZShyZXN1bHQubnVtYmVy
T2ZCeXRlc1JlYWQpOwotICAgICAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKGFk
dmFuY2VSZXN1bHQsIG51bGxwdHIsICJGYWlsZWQgdG8gYWR2YW5jZSBkaXNwbGF5IGxpc3QgcmVh
ZGVyIGhhbmRsZSIpOwotICAgICAgICBzaXplVG9SZWFkID0gKmFkdmFuY2VSZXN1bHQ7Ci0KLSAg
ICAgICAgQ2hlY2tlZFNpemUgY2hlY2tlZE9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgY2hlY2tl
ZE9mZnNldCArPSByZXN1bHQubnVtYmVyT2ZCeXRlc1JlYWQ7Ci0gICAgICAgIE1FU1NBR0VfQ0hF
Q0tfV0lUSF9SRVRVUk5fVkFMVUUoIWNoZWNrZWRPZmZzZXQuaGFzT3ZlcmZsb3dlZCgpLCBudWxs
cHRyLCAiT3ZlcmZsb3dlZCB3aGVuIGFkdmFuY2luZyBzaGFyZWQgZGlzcGxheSBsaXN0IGhhbmRs
ZSBvZmZzZXQiKTsKLQotICAgICAgICBvZmZzZXQgPSBjaGVja2VkT2Zmc2V0OwotICAgICAgICBN
RVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKG9mZnNldCA8PSBoYW5kbGUuc2hhcmVkTWVt
b3J5KCkuc2l6ZSgpLCBudWxscHRyLCAiT3V0LW9mLWJvdW5kcyBvZmZzZXQgaW50byBzaGFyZWQg
ZGlzcGxheSBsaXN0IGhhbmRsZSIpOwotCi0gICAgICAgIGlmIChyZXN1bHQucmVhc29uRm9yU3Rv
cHBpbmcgPT0gRGlzcGxheUxpc3Q6OlN0b3BSZXBsYXlSZWFzb246OkNoYW5nZURlc3RpbmF0aW9u
SW1hZ2VCdWZmZXIpIHsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gbV9yZW1vdGVSZXNvdXJj
ZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVyKCpyZXN1bHQubmV4dERlc3RpbmF0aW9uSW1hZ2VCdWZm
ZXIpOwotICAgICAgICAgICAgaWYgKCFkZXN0aW5hdGlvbikgewotICAgICAgICAgICAgICAgIEFT
U0VSVCghbV9wZW5kaW5nV2FrZXVwSW5mbyk7Ci0gICAgICAgICAgICAgICAgbV9wZW5kaW5nV2Fr
ZXVwSW5mbyA9IHt7Ci0gICAgICAgICAgICAgICAgICAgIHsgaGFuZGxlLmlkZW50aWZpZXIoKSwg
b2Zmc2V0LCAqcmVzdWx0Lm5leHREZXN0aW5hdGlvbkltYWdlQnVmZmVyLCByZWFzb24gfSwKLSAg
ICAgICAgICAgICAgICAgICAgc3RkOjpudWxsb3B0LAotICAgICAgICAgICAgICAgICAgICBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kU3RhdGU6OldhaXRpbmdGb3JEZXN0aW5hdGlvbkltYWdlQnVmZmVy
Ci0gICAgICAgICAgICAgICAgfX07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAocmVzdWx0LnJlYXNvbkZvclN0b3BwaW5nID09IERpc3BsYXlMaXN0OjpTdG9wUmVwbGF5
UmVhc29uOjpNaXNzaW5nQ2FjaGVkUmVzb3VyY2UpIHsKLSAgICAgICAgICAgIG1fcGVuZGluZ1dh
a2V1cEluZm8gPSB7ewotICAgICAgICAgICAgICAgIHsgaGFuZGxlLmlkZW50aWZpZXIoKSwgb2Zm
c2V0LCBkZXN0aW5hdGlvbi0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIHJlYXNvbiB9
LAotICAgICAgICAgICAgICAgIHJlc3VsdC5taXNzaW5nQ2FjaGVkUmVzb3VyY2VJZGVudGlmaWVy
LAotICAgICAgICAgICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZTo6V2FpdGluZ0Zv
ckNhY2hlZFJlc291cmNlCi0gICAgICAgICAgICB9fTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChtX3BlbmRpbmdXYWtldXBJbmZvKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYg
KCFzaXplVG9SZWFkKSB7Ci0gICAgICAgICAgICBpZiAocmVhc29uICE9IEdQVVByb2Nlc3NXYWtl
dXBSZWFzb246Okl0ZW1Db3VudEh5c3RlcmVzaXNFeGNlZWRlZCkKLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgaGFuZGxlLnN0YXJ0V2FpdGluZygpOwotICAgICAgICAgICAg
bV9yZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZS53YWl0Rm9yKDMwX3VzKTsKLQotICAgICAgICAg
ICAgYXV0byBzdG9wV2FpdGluZ1Jlc3VsdCA9IGhhbmRsZS5zdG9wV2FpdGluZygpOwotICAgICAg
ICAgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRShzdG9wV2FpdGluZ1Jlc3VsdCwg
bnVsbHB0ciwgIkludmFsaWQgd2FpdGluZyBzdGF0dXMgZGV0ZWN0ZWQgd2hlbiByZXN1bWluZyBk
aXNwbGF5IGxpc3QgcHJvY2Vzc2luZyIpOwotCi0gICAgICAgICAgICBhdXRvIHJlc3VtZVJlYWRp
bmdJbmZvID0gc3RvcFdhaXRpbmdSZXN1bHQudmFsdWUoKTsKLSAgICAgICAgICAgIGlmICghcmVz
dW1lUmVhZGluZ0luZm8pCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHNp
emVUb1JlYWQgPSBoYW5kbGUudW5yZWFkQnl0ZXMoKTsKLSAgICAgICAgICAgIE1FU1NBR0VfQ0hF
Q0tfV0lUSF9SRVRVUk5fVkFMVUUoc2l6ZVRvUmVhZCwgbnVsbHB0ciwgIk5vIHVucmVhZCBieXRl
cyB3aGVuIHJlc3VtaW5nIGRpc3BsYXkgbGlzdCBwcm9jZXNzaW5nIik7Ci0KLSAgICAgICAgICAg
IGF1dG8gbmV3RGVzdGluYXRpb25JZGVudGlmaWVyID0gbWFrZU9iamVjdElkZW50aWZpZXI8UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyVHlwZT4ocmVzdW1lUmVhZGluZ0luZm8tPmRlc3RpbmF0
aW9uKTsKLSAgICAgICAgICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUobmV3RGVz
dGluYXRpb25JZGVudGlmaWVyLmlzVmFsaWQoKSwgbnVsbHB0ciwgIkludmFsaWQgaW1hZ2UgYnVm
ZmVyIGRlc3RpbmF0aW9uIHdoZW4gcmVzdW1pbmcgZGlzcGxheSBsaXN0IHByb2Nlc3NpbmciKTsK
LQotICAgICAgICAgICAgZGVzdGluYXRpb24gPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVk
SW1hZ2VCdWZmZXIobmV3RGVzdGluYXRpb25JZGVudGlmaWVyKTsKLSAgICAgICAgICAgIE1FU1NB
R0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUoZGVzdGluYXRpb24sIG51bGxwdHIsICJNaXNzaW5n
IGltYWdlIGJ1ZmZlciBkZXN0aW5hdGlvbiB3aGVuIHJlc3VtaW5nIGRpc3BsYXkgbGlzdCBwcm9j
ZXNzaW5nIik7Ci0KLSAgICAgICAgICAgIG9mZnNldCA9IHJlc3VtZVJlYWRpbmdJbmZvLT5vZmZz
ZXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZGVzdGluYXRpb247Ci19Ci0KLXZv
aWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6d2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChjb25z
dCBHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cyYgYXJndW1lbnRzKQotewotICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgVHJhY2VTY29wZSB0cmFjaW5nU2NvcGUo
V2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdFN0YXJ0LCBXYWtlVXBBbmRBcHBseURpc3BsYXlMaXN0
RW5kKTsKLQotICAgIHVwZGF0ZUxhc3RLbm93blN0YXRlKFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRT
dGF0ZTo6QmVnYW5SZXBsYXlpbmdEaXNwbGF5TGlzdCk7Ci0KLSAgICBSZWZQdHIgZGVzdGluYXRp
b25JbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihh
cmd1bWVudHMuZGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIpOwotICAgIE1FU1NBR0Vf
Q0hFQ0soZGVzdGluYXRpb25JbWFnZUJ1ZmZlciwgIk1pc3NpbmcgZGVzdGluYXRpb24gaW1hZ2Ug
YnVmZmVyIik7Ci0KLSAgICBhdXRvIGluaXRpYWxIYW5kbGUgPSBtX3NoYXJlZERpc3BsYXlMaXN0
SGFuZGxlcy5nZXQoYXJndW1lbnRzLml0ZW1CdWZmZXJJZGVudGlmaWVyKTsKLSAgICBNRVNTQUdF
X0NIRUNLKGluaXRpYWxIYW5kbGUsICJNaXNzaW5nIGluaXRpYWwgc2hhcmVkIGRpc3BsYXkgbGlz
dCBoYW5kbGUiKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShTaGFyZWREaXNwbGF5TGlzdHMsIHN0
cmVhbSA8PCAiV2FraW5nIHVwIHRvIEl0ZW1zWyIgPDwgYXJndW1lbnRzLml0ZW1CdWZmZXJJZGVu
dGlmaWVyIDw8ICJdID0+IEltYWdlKCIgPDwgYXJndW1lbnRzLmRlc3RpbmF0aW9uSW1hZ2VCdWZm
ZXJJZGVudGlmaWVyIDw8ICIpIGF0ICIgPDwgYXJndW1lbnRzLm9mZnNldCk7Ci0gICAgZGVzdGlu
YXRpb25JbWFnZUJ1ZmZlciA9IG5leHREZXN0aW5hdGlvbkltYWdlQnVmZmVyQWZ0ZXJBcHBseWlu
Z0Rpc3BsYXlMaXN0cygqZGVzdGluYXRpb25JbWFnZUJ1ZmZlciwgYXJndW1lbnRzLm9mZnNldCwg
KmluaXRpYWxIYW5kbGUsIGFyZ3VtZW50cy5yZWFzb24pOwotCi0gICAgLy8gRklYTUU6IEFsbCB0
aGUgY2FsbGVycyBwYXNzIG1fcGVuZGluZ1dha2V1cEluZm8uYXJndW1lbnRzIHNvIHRoZSBib2R5
IG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGp1c3QgYmUgdGhpcyBsb29wLgotICAgIHdoaWxlIChk
ZXN0aW5hdGlvbkltYWdlQnVmZmVyICYmIG1fcGVuZGluZ1dha2V1cEluZm8pIHsKLSAgICAgICAg
aWYgKG1fcGVuZGluZ1dha2V1cEluZm8tPm1pc3NpbmdDYWNoZWRSZXNvdXJjZUlkZW50aWZpZXIp
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBhdXRvIG5leHRIYW5kbGUgPSBtX3NoYXJl
ZERpc3BsYXlMaXN0SGFuZGxlcy5nZXQobV9wZW5kaW5nV2FrZXVwSW5mby0+YXJndW1lbnRzLml0
ZW1CdWZmZXJJZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKCFuZXh0SGFuZGxlKSB7Ci0gICAgICAg
ICAgICAvLyBJZiB0aGUgaGFuZGxlIGlkZW50aWZpZXIgaXMgY3VycmVudGx5IHVua25vd24sIHdh
aXQgdW50aWwgdGhlIEdQVSBwcm9jZXNzIHJlY2VpdmVzIGFuCi0gICAgICAgICAgICAvLyBJUEMg
bWVzc2FnZSB3aXRoIGEgc2hhcmVkIG1lbW9yeSBoYW5kbGUgdG8gdGhlIG5leHQgaXRlbSBidWZm
ZXIuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE90aGVyd2lz
ZSwgY29udGludWUgcmVhZGluZyB0aGUgbmV4dCBkaXNwbGF5IGxpc3QgaXRlbSBidWZmZXIgZnJv
bSB0aGUgc3RhcnQuCi0gICAgICAgIGF1dG8gYXJndW1lbnRzID0gc3RkOjpleGNoYW5nZShtX3Bl
bmRpbmdXYWtldXBJbmZvLCBzdGQ6Om51bGxvcHQpLT5hcmd1bWVudHM7Ci0gICAgICAgIGRlc3Rp
bmF0aW9uSW1hZ2VCdWZmZXIgPSBuZXh0RGVzdGluYXRpb25JbWFnZUJ1ZmZlckFmdGVyQXBwbHlp
bmdEaXNwbGF5TGlzdHMoKmRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsIGFyZ3VtZW50cy5vZmZzZXQs
ICpuZXh0SGFuZGxlLCBhcmd1bWVudHMucmVhc29uKTsKLSAgICB9Ci0gICAgTE9HX1dJVEhfU1RS
RUFNKFNoYXJlZERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJHb2luZyBiYWNrIHRvIHNsZWVwLiIp
OwotCi0gICAgaWYgKG1fcGVuZGluZ1dha2V1cEluZm8pCi0gICAgICAgIHVwZGF0ZUxhc3RLbm93
blN0YXRlKG1fcGVuZGluZ1dha2V1cEluZm8tPnN0YXRlKTsKLSAgICBlbHNlCi0gICAgICAgIHVw
ZGF0ZUxhc3RLbm93blN0YXRlKFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZTo6RmluaXNoZWRS
ZXBsYXlpbmdEaXNwbGF5TGlzdCk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
c2V0TmV4dEl0ZW1CdWZmZXJUb1JlYWQoRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVy
IGlkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5h
dGlvbklkZW50aWZpZXIpCi17Ci0gICAgbV9wZW5kaW5nV2FrZXVwSW5mbyA9IHt7Ci0gICAgICAg
IHsgaWRlbnRpZmllciwgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmhlYWRlclNpemUoKSwgZGVz
dGluYXRpb25JZGVudGlmaWVyLCBHUFVQcm9jZXNzV2FrZXVwUmVhc29uOjpVbnNwZWNpZmllZCB9
LAotICAgICAgICBzdGQ6Om51bGxvcHQsCi0gICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRT
dGF0ZTo6V2FpdGluZ0Zvckl0ZW1CdWZmZXIKLSAgICB9fTsKIH0KIAogc3RkOjpvcHRpb25hbDxT
aGFyZWRNZW1vcnk6OklQQ0hhbmRsZT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hh
cmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXJIZWxwZXIoc2l6ZV90IGJ5dGVDb3VudCkKQEAgLTQ5
MSwxOSArMjgwLDEyIEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y2FjaGVOYXRpdmVJ
bWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZU5hdGl2ZUltYWdlKCppbWFnZSk7Ci0K
LSAgICBpZiAobV9wZW5kaW5nV2FrZXVwSW5mbyAmJiBtX3BlbmRpbmdXYWtldXBJbmZvLT5zaG91
bGRQZXJmb3JtV2FrZXVwKG5hdGl2ZUltYWdlUmVzb3VyY2VJZGVudGlmaWVyKSkKLSAgICAgICAg
d2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChzdGQ6OmV4Y2hhbmdlKG1fcGVuZGluZ1dha2V1cElu
Zm8sIHN0ZDo6bnVsbG9wdCktPmFyZ3VtZW50cyk7CiB9CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6Y2FjaGVGb250KFJlZjxGb250PiYmIGZvbnQpCiB7CiAgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIGZvbnRSZXNvdXJjZUlkZW50aWZpZXIgPSBmb250
LT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKICAgICBtX3JlbW90ZVJlc291cmNlQ2Fj
aGUuY2FjaGVGb250KFdURk1vdmUoZm9udCkpOwotICAgIGlmIChtX3BlbmRpbmdXYWtldXBJbmZv
ICYmIG1fcGVuZGluZ1dha2V1cEluZm8tPnNob3VsZFBlcmZvcm1XYWtldXAoZm9udFJlc291cmNl
SWRlbnRpZmllcikpCi0gICAgICAgIHdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3Qoc3RkOjpleGNo
YW5nZShtX3BlbmRpbmdXYWtldXBJbmZvLCBzdGQ6Om51bGxvcHQpLT5hcmd1bWVudHMpOwogfQog
CiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRlbGV0ZUFsbEZvbnRzKCkKQEAgLTUyMiwz
MSArMzA0LDkgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpyZWxlYXNlUmVtb3RlUmVz
b3VyY2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHIKIAogdm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpmaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShSZW5kZXJpbmdVcGRhdGVJRCByZW5k
ZXJpbmdVcGRhdGVJRCkKIHsKLSAgICBhdXRvIHNob3VsZFBlcmZvcm1XYWtldXAgPSBbJl0oY29u
c3QgR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMmIGFyZ3VtZW50cykgewotICAgICAg
ICByZXR1cm4gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVyKGFyZ3VtZW50
cy5kZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllcikgJiYgbV9zaGFyZWREaXNwbGF5TGlz
dEhhbmRsZXMuY29udGFpbnMoYXJndW1lbnRzLml0ZW1CdWZmZXJJZGVudGlmaWVyKTsKLSAgICB9
OwotCi0gICAgaWYgKG1fcGVuZGluZ1dha2V1cEluZm8gJiYgc2hvdWxkUGVyZm9ybVdha2V1cCht
X3BlbmRpbmdXYWtldXBJbmZvLT5hcmd1bWVudHMpKQotICAgICAgICB3YWtlVXBBbmRBcHBseURp
c3BsYXlMaXN0KHN0ZDo6ZXhjaGFuZ2UobV9wZW5kaW5nV2FrZXVwSW5mbywgc3RkOjpudWxsb3B0
KS0+YXJndW1lbnRzKTsKLQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6RGlkRmluYWxpemVSZW5kZXJpbmdVcGRhdGUocmVuZGVyaW5nVXBkYXRlSUQpLCBt
X3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpkaWRDcmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShEaXNwbGF5TGlzdDo6SXRl
bUJ1ZmZlcklkZW50aWZpZXIgaXRlbUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IFNoYXJlZE1lbW9y
eTo6SVBDSGFuZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5h
dGlvbkJ1ZmZlcklkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
Ci0gICAgTUVTU0FHRV9DSEVDSyghbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXMuY29udGFpbnMo
aXRlbUJ1ZmZlcklkZW50aWZpZXIpLCAiRHVwbGljYXRlIHNoYXJlZCBkaXNwbGF5IGxpc3QgaGFu
ZGxlIik7Ci0KLSAgICBpZiAoYXV0byBzaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6Om1hcCho
YW5kbGUuaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRXcml0ZSkpIHsKLSAg
ICAgICAgYXV0byBoYW5kbGUgPSBEaXNwbGF5TGlzdFJlYWRlckhhbmRsZTo6Y3JlYXRlKGl0ZW1C
dWZmZXJJZGVudGlmaWVyLCBzaGFyZWRNZW1vcnkucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAg
IE1FU1NBR0VfQ0hFQ0soaGFuZGxlLCAiVGhlcmUgbXVzdCBiZSBlbm91Z2ggc3BhY2UgdG8gY3Jl
YXRlIHRoZSBoYW5kbGUuIik7Ci0gICAgICAgIG1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzLnNl
dChpdGVtQnVmZmVySWRlbnRpZmllciwgaGFuZGxlKTsKLSAgICB9Ci0KLSAgICBpZiAobV9wZW5k
aW5nV2FrZXVwSW5mbyAmJiBtX3BlbmRpbmdXYWtldXBJbmZvLT5zaG91bGRQZXJmb3JtV2FrZXVw
KGl0ZW1CdWZmZXJJZGVudGlmaWVyKSkKLSAgICAgICAgd2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlz
dChzdGQ6OmV4Y2hhbmdlKG1fcGVuZGluZ1dha2V1cEluZm8sIHN0ZDo6bnVsbG9wdCktPmFyZ3Vt
ZW50cyk7Ci19Ci0KIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkQ3JlYXRlTWFza0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKQEAgLTU2MSwxMTQgKzMyMSw2IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6ZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIoKQogICAgIG1fY3VycmVudE1hc2tJbWFn
ZUJ1ZmZlciA9IG51bGxwdHI7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8RGlzcGxheUxpc3Q6Okl0ZW1I
YW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVSTiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkZWNvZGVJ
dGVtKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgsIERpc3BsYXlMaXN0OjpJdGVt
VHlwZSB0eXBlLCB1aW50OF90KiBoYW5kbGVMb2NhdGlvbikKLXsKLSAgICAvKiBUaGlzIG5lZWRz
IHRvIG1hdGNoICgxKSBpc0lubGluZUl0ZW0oKSBpbiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcCwg
KDIpIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6OmVuY29kZUl0ZW0oKSwKLSAgICAgKiBhbmQgKDMp
IGFsbCB0aGUgInN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0icyBpbnNpZGUgdGhl
IGluZGl2aWR1YWwgaXRlbSBjbGFzc2VzLgotICAgICAqIFNlZSB0aGUgY29tbWVudCBhdCB0aGUg
dG9wIG9mIERpc3BsYXlMaXN0SXRlbXMuaCBmb3Igd2h5LiAqLwotCi0gICAgc3dpdGNoICh0eXBl
KSB7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkJlZ2luQ2xpcFRvRHJhd2luZ0Nv
bW1hbmRzOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpCZWdp
bkNsaXBUb0RyYXdpbmdDb21tYW5kcz4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0g
ICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6Ci0gICAgICAgIHJl
dHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg+KGRhdGEsIGxl
bmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpD
bGlwUGF0aDoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6Q2xp
cFBhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFu
ZENyZWF0ZTxEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg+KGRhdGEsIGxlbmd0aCwgaGFu
ZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3Rm9jdXNS
aW5nUmVjdHM6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkRy
YXdGb2N1c1JpbmdSZWN0cz4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2Fz
ZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdHbHlwaHM6Ci0gICAgICAgIHJldHVybiBkZWNv
ZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM+KGRhdGEsIGxlbmd0aCwgaGFuZGxl
TG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TGluZXNGb3JU
ZXh0OgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpEcmF3TGlu
ZXNGb3JUZXh0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVh
dGU8RGlzcGxheUxpc3Q6OkRyYXdQYXRoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsK
LSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAg
ICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJl
Y3Q+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpGaWxsUGF0aDoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNw
bGF5TGlzdDo6RmlsbFBhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNh
c2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKLSAgICAgICAgcmV0
dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3I+KGRhdGEs
IGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxE
aXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9j
YXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZToKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAg
IGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Ci0gICAgICAgIHJl
dHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdD4oZGF0YSwg
bGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkdldFBpeGVsQnVmZmVyOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlM
aXN0OjpHZXRQaXhlbEJ1ZmZlcj4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAg
Y2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgotICAgICAgICByZXR1
cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpQdXRQaXhlbEJ1ZmZlcj4oZGF0YSwgbGVu
Z3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNl
dExpbmVEYXNoOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpT
ZXRMaW5lRGFzaD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlNldFN0YXRlOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3Jl
YXRlPERpc3BsYXlMaXN0OjpTZXRTdGF0ZT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7
Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIHJl
dHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg+KGRhdGEsIGxlbmd0
aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBs
eURldmljZVNjYWxlRmFjdG9yOgotI2lmIFVTRShDRykKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgotI2VuZGlmCi0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkNsZWFyUmVjdDoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJT
aGFkb3c6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXA6Ci0gICAgY2FzZSBE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBPdXQ6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpFbmRDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpE
cmF3RWxsaXBzZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ltYWdlQnVm
ZmVyOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6Ci0g
ICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgotICAgIGNhc2UgRGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6RHJhd1JlY3Q6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkVuZFRyYW5z
cGFyZW5jeUxheWVyOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsRWxsaXBz
ZToKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RmlsbExpbmU6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxB
cmM6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxRdWFkQ3VydmU6Ci0gICAg
Y2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxCZXppZXJDdXJ2ZToKLSNlbmRpZgotICAg
IGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdDoKLSAgICBjYXNlIERpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6Rmx1c2hDb250ZXh0OgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI6Ci0gICAgY2FzZSBE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKLSNpZiBF
TkFCTEUoVklERU8pCi0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlBhaW50RnJhbWVG
b3JNZWRpYToKLSNlbmRpZgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSZXN0b3Jl
OgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgY2FzZSBEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlNhdmU6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OlNjYWxlOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgY2Fz
ZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKLSAgICBjYXNlIERp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgotICAgIGNhc2UgRGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKLSAgICBjYXNlIERpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6U2V0TGluZUpvaW46Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldE1p
dGVyTGltaXQ6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldFN0cm9rZVRoaWNr
bmVzczoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSNp
ZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6U3Ryb2tlQXJjOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VRdWFk
Q3VydmU6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZUJlemllckN1cnZl
OgotI2VuZGlmCi0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVJlY3Q6Ci0g
ICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZUxpbmU6Ci0gICAgY2FzZSBEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0KIHZvaWQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6dXBkYXRlUmVuZGVyaW5nUmVzb3VyY2VSZXF1ZXN0KCkKIHsKICAgICBi
b29sIGhhc0FjdGl2ZURyYXdhYmxlcyA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5oYXNBY3RpdmVE
cmF3YWJsZXMoKTsKQEAgLTY4NSwxOCArMzM3LDYgQEAgYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjphbGxvd3NFeGl0VW5kZXJNZW1vcnlQcmVzc3VyZSgpIGNvbnN0CiAgICAgcmV0dXJuICFt
X3JlbW90ZVJlc291cmNlQ2FjaGUuaGFzQWN0aXZlRHJhd2FibGVzKCk7CiB9CiAKLVJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRTdGF0ZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpsYXN0S25vd25TdGF0
ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICByZXR1cm4g
bV9sYXN0S25vd25TdGF0ZS5sb2FkKCk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6dXBkYXRlTGFzdEtub3duU3RhdGUoUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlIHN0YXRl
KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG1fbGFzdEtub3duU3Rh
dGUuc3RvcmVSZWxheGVkKHN0YXRlKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNl
bmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCA3ZDgw
YjcyNTg2Mzk0ZTU1ZWNjY2M5YmY3M2Y5NWVmYjBjYzk0MDUwLi4xNmEzYmJjMWZjMzNkZGFhNzYz
MGI4Y2Y3MDEyMzhhMDk1MzM4OTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTI4LDE2ICsy
OCwxNyBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24u
aCIKLSNpbmNsdWRlICJHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cy5oIgogI2luY2x1
ZGUgIklQQ1NlbWFwaG9yZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5o
IgogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIu
aCIKLSNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGUuaCIKICNpbmNsdWRlICJS
ZW1vdGVSZXNvdXJjZUNhY2hlLmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdVcGRhdGVJRC5oIgogI2luY2x1ZGUgIlNjb3BlZFJl
bmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuaCIKKyNpbmNsdWRlICJTdHJlYW1Db25uZWN0aW9uV29y
a1F1ZXVlLmgiCisjaW5jbHVkZSAiU3RyZWFtTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAi
U3RyZWFtU2VydmVyQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rp
c3BsYXlMaXN0SXRlbXMuaD4KQEAgLTQ2LDExICs0Nyw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKLWNsYXNzIERpc3BsYXlMaXN0OwotY2xhc3Mg
SXRlbTsKLX0KLQogY2xhc3MgRGVzdGluYXRpb25Db2xvclNwYWNlOwogY2xhc3MgRmxvYXRTaXpl
OwogY2xhc3MgTmF0aXZlSW1hZ2U7CkBAIC02MSwzMCArNTcsMjIgQEAgZW51bSBjbGFzcyBSZW5k
ZXJpbmdNb2RlIDogYm9vbDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIERpc3BsYXlM
aXN0UmVhZGVySGFuZGxlOwogY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKIHN0cnVj
dCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzOwogCi1jbGFzcyBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kCi0gICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgotICAg
ICwgcHVibGljIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyCi0gICAg
LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50IHsK
K2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRl
ciwgcHVibGljIElQQzo6U3RyZWFtTWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLQotICAgIHN0
YXRpYyBSZWY8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MmLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzJiYpOwor
ICAgIHN0YXRpYyBSZWY8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MmLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJz
JiYsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmKTsKICAgICB2aXJ0dWFsIH5SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kKCk7CiAgICAgdm9pZCBzdG9wTGlzdGVuaW5nRm9ySVBDKCk7CiAKICAg
ICBSZW1vdGVSZXNvdXJjZUNhY2hlJiByZW1vdGVSZXNvdXJjZUNhY2hlKCkgeyByZXR1cm4gbV9y
ZW1vdGVSZXNvdXJjZUNhY2hlOyB9CiAKLSAgICAvLyBSZW5kZXJpbmcgb3BlcmF0aW9ucy4KLSAg
ICBib29sIGFwcGx5TWVkaWFJdGVtKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVTdHJlYW1NZXNz
YWdlKElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbkJhc2UmLCBJUEM6OkRlY29kZXImKSBmaW5h
bDsKIAogICAgIC8vIE1lc3NhZ2VzIHRvIGJlIHNlbnQuCiAgICAgdm9pZCBkaWRDcmVhdGVJbWFn
ZUJ1ZmZlckJhY2tlbmQoSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZvaWQgZGlkRmx1c2goV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKTsKLQotICAgIHZvaWQgc2V0TmV4dEl0ZW1CdWZmZXJUb1JlYWQoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgZGVzdGluYXRpb24pOworICAgIHZvaWQgZGlkRmx1c2goV2ViQ29yZTo6Rmx1c2hJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogCiAgICAg
dm9pZCBkaWRDcmVhdGVNYXNrSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKTsKICAg
ICB2b2lkIGRpZFJlc2V0TWFza0ltYWdlQnVmZmVyKCk7CkBAIC05Niw0NSArODQsMjEgQEAgcHVi
bGljOgogICAgIC8vIFJ1bnMgRnVuY3Rpb24gaW4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB0YXNr
IHF1ZXVlLgogICAgIHZvaWQgZGlzcGF0Y2goRnVuY3Rpb248dm9pZCgpPiYmKTsKIAotICAgIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZSBsYXN0S25vd25TdGF0ZSgpIGNvbnN0OworICAgIElQ
Qzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbiYgc3RyZWFtQ29ubmVjdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyZWFtQ29ubmVjdGlvbi5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJik7CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZChHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0
aW9uUGFyYW1ldGVycyYmLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJik7CiAgICAgdm9p
ZCBzdGFydExpc3RlbmluZ0ZvcklQQygpOwogCi0gICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUhhbmRsZT4gV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZUl0ZW0oY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCwgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlLCB1aW50OF90KiBoYW5kbGVMb2NhdGlvbikgb3ZlcnJpZGU7Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1IYW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVBbmRDcmVhdGUoY29uc3QgdWludDhf
dCogZGF0YSwgc2l6ZV90IGxlbmd0aCwgdWludDhfdCogaGFuZGxlTG9jYXRpb24pCi0gICAgewot
ICAgICAgICBpZiAoYXV0byBpdGVtID0gSVBDOjpEZWNvZGVyOjpkZWNvZGVTaW5nbGVPYmplY3Q8
VD4oZGF0YSwgbGVuZ3RoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFdlYktpdDIgc2hvdWxk
IG5vdCBuZWVkIHRvIGtub3cgdGhhdCB0aGUgZmlyc3QgOCBieXRlcyBhdCB0aGUgaGFuZGxlIGFy
ZSByZXNlcnZlZCBmb3IgdGhlIHR5cGUuCi0gICAgICAgICAgICAvLyBOZWVkIHRvIGZpZ3VyZSBv
dXQgYSB3YXkgdG8ga2VlcCB0aGlzIGtub3dsZWRnZSB3aXRoaW4gZGlzcGxheSBsaXN0IGNvZGUg
aW4gV2ViQ29yZS4KLSAgICAgICAgICAgIG5ldyAoaGFuZGxlTG9jYXRpb24gKyBzaXplb2YodWlu
dDY0X3QpKSBUKFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgICAgIHJldHVybiB7eyBoYW5kbGVM
b2NhdGlvbiB9fTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAg
IH0KLQotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXlSZXN1bHQgc3VibWl0KGNvbnN0
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIFdlYkNvcmU6OkltYWdlQnVmZmVy
JiBkZXN0aW5hdGlvbik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBuZXh0RGVz
dGluYXRpb25JbWFnZUJ1ZmZlckFmdGVyQXBwbHlpbmdEaXNwbGF5TGlzdHMoV2ViQ29yZTo6SW1h
Z2VCdWZmZXImIGluaXRpYWxEZXN0aW5hdGlvbiwgc2l6ZV90IGluaXRpYWxPZmZzZXQsIERpc3Bs
YXlMaXN0UmVhZGVySGFuZGxlJiwgR1BVUHJvY2Vzc1dha2V1cFJlYXNvbik7Ci0KICAgICBzdGQ6
Om9wdGlvbmFsPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiB1cGRhdGVTaGFyZWRNZW1vcnlGb3JH
ZXRQaXhlbEJ1ZmZlckhlbHBlcihzaXplX3QgYnl0ZUNvdW50KTsKICAgICB2b2lkIHVwZGF0ZVJl
bmRlcmluZ1Jlc291cmNlUmVxdWVzdCgpOwogCi0gICAgdm9pZCB1cGRhdGVMYXN0S25vd25TdGF0
ZShSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGUpOwotCiAgICAgLy8gSVBDOjpNZXNzYWdlU2Vu
ZGVyLgogICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25z
dCBvdmVycmlkZTsKICAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKLSAgICB2b2lkIGRp
ZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRl
OwotICAgIGJvb2wgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYsIFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+Jikgb3ZlcnJpZGU7Ci0KICAgICAvLyBN
ZXNzYWdlcyB0byBiZSByZWNlaXZlZC4KICAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNw
YWNlJiwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcik7Ci0gICAgdm9pZCB3YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0KGNvbnN0IEdQVVBy
b2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzJik7CiAgICAgdm9pZCB1cGRhdGVTaGFyZWRNZW1v
cnlGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKT4mJik7CiAgICAgdm9pZCBzZW1h
cGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6
U2VtYXBob3JlJik+JiYpOwogICAgIHZvaWQgdXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jl
Rm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiwgY29uc3QgSVBDOjpTZW1hcGhvcmUm
KT4mJik7CkBAIC0xNDcsNTEgKzExMSwxNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVsZXRlQWxs
Rm9udHMoKTsKICAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KTsKICAgICB2b2lkIGZpbmFs
aXplUmVuZGVyaW5nVXBkYXRlKFJlbmRlcmluZ1VwZGF0ZUlEKTsKLSAgICB2b2lkIGRpZENyZWF0
ZVNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVy
SWRlbnRpZmllciwgY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmLCBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKTsKLQot
ICAgIGNsYXNzIFJlcGxheWVyRGVsZWdhdGUgOiBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlcGxheWVyOjpEZWxlZ2F0ZSB7Ci0gICAgcHVibGljOgotICAgICAgICBSZXBsYXllckRlbGVn
YXRlKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYpOwotCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgYm9vbCBhcHBseShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUhhbmRsZSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JikgZmluYWw7Ci0gICAgICAgIHZvaWQg
ZGlkQ3JlYXRlTWFza0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJikgZmluYWw7Ci0g
ICAgICAgIHZvaWQgZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIoKSBmaW5hbDsKLSAgICAgICAgdm9p
ZCByZWNvcmRSZXNvdXJjZVVzZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
IGZpbmFsOwotCi0gICAgICAgIFdlYkNvcmU6OkltYWdlQnVmZmVyJiBtX2Rlc3RpbmF0aW9uOwot
ICAgICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7
Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQZW5kaW5nV2FrZXVwSW5mb3JtYXRpb24gewotICAgICAg
ICBHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cyBhcmd1bWVudHM7Ci0gICAgICAgIHN0
ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBtaXNzaW5n
Q2FjaGVkUmVzb3VyY2VJZGVudGlmaWVyOwotICAgICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
U3RhdGUgc3RhdGUgeyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGU6OkluaXRpYWxpemVkIH07
Ci0KLSAgICAgICAgYm9vbCBzaG91bGRQZXJmb3JtV2FrZXVwKFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBpZGVudGlmaWVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gYXJndW1lbnRzLmRlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyID09IGlk
ZW50aWZpZXIKLSAgICAgICAgICAgICAgICB8fCBtaXNzaW5nQ2FjaGVkUmVzb3VyY2VJZGVudGlm
aWVyID09IGlkZW50aWZpZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHNob3VsZFBlcmZv
cm1XYWtldXAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50
aWZpZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHMuaXRl
bUJ1ZmZlcklkZW50aWZpZXIgPT0gaWRlbnRpZmllcjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICBSZWY8V29ya1F1ZXVlPiBtX3dvcmtRdWV1ZTsKKworICAgIElQQzo6U3RyZWFtQ29ubmVjdGlv
bldvcmtRdWV1ZSBtX3dvcmtRdWV1ZTsKKyAgICBSZWY8SVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0
aW9uPiBtX3N0cmVhbUNvbm5lY3Rpb247CiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZSBtX3JlbW90
ZVJlc291cmNlQ2FjaGU7CiAgICAgUmVmPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKICAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBt
X3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOwotICAgIEhhc2hNYXA8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBSZWZQdHI8RGlzcGxheUxpc3RSZWFkZXJIYW5k
bGU+PiBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlczsKLSAgICBzdGQ6Om9wdGlvbmFsPFBlbmRp
bmdXYWtldXBJbmZvcm1hdGlvbj4gbV9wZW5kaW5nV2FrZXVwSW5mbzsKLSAgICBJUEM6OlNlbWFw
aG9yZSBtX3Jlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlOwogICAgIElQQzo6U2VtYXBob3JlIG1f
Z2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmU7CiAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9nZXRQ
aXhlbEJ1ZmZlclNoYXJlZE1lbW9yeTsKICAgICBTY29wZWRSZW5kZXJpbmdSZXNvdXJjZXNSZXF1
ZXN0IG1fcmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdDsKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1h
Z2VCdWZmZXI+IG1fY3VycmVudE1hc2tJbWFnZUJ1ZmZlcjsKLSAgICBBdG9taWM8UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFN0YXRlPiBtX2xhc3RLbm93blN0YXRlIHsgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFN0YXRlOjpJbml0aWFsaXplZCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IDFlZjU2ZGNjOTc2Mjc0
ZTM1NmFiMjJiNGVhNGU3MWJjZmFjMGIwZGYuLjc0Mjg5NTQ1NmU0NTc2ZGViYWZlMjE1MmU5YzEx
ZmViMmJkMjAxMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBA
IC0yMiwyMCArMjIsMTEgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMg
LT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB7CittZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kIE5vdFJlZkNvdW50ZWQgU3RyZWFtIHsKICAgICBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJD
b3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9y
U3BhY2UgY29sb3JTcGFjZSwgZW51bTp1aW50OF90IFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVs
Rm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKQotICAgIFdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3Qoc3RydWN0IFdl
YktpdDo6R1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMgYXJndW1lbnRzKQotICAgIFVw
ZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCkgLT4g
KFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cwotICAg
IFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKCkgLT4gKElQQzo6U2VtYXBob3JlIHNlbWFwaG9y
ZSkgU3luY2hyb25vdXMKLSAgICBVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQ
aXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6
SVBDSGFuZGxlIGhhbmRsZSwgSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cwot
ICAgIERlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpCi0gICAgR2V0RGF0YVVSTEZv
ckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKSAtPiAoU3RyaW5nIHVybFN0cmluZykgU3luY2hyb25vdXMKLSAgICBH
ZXREYXRhRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rvcjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91
cwotICAgIEdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgZW51bTp1aW50OF90IFdlYkNvcmU6OlBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIC0+IChXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKLSAgICBDYWNoZU5hdGl2ZUltYWdl
KFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQotICAgIENh
Y2hlRm9udChJUEM6OkZvbnRSZWZlcmVuY2UgZm9udCkKKyAgICBDYWNoZU5hdGl2ZUltYWdlKFdl
YktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSBOb3RTdHJlYW1F
bmNvZGFibGUKKyAgICBDYWNoZUZvbnQoSVBDOjpGb250UmVmZXJlbmNlIGZvbnQpIE5vdFN0cmVh
bUVuY29kYWJsZQogICAgIERlbGV0ZUFsbEZvbnRzKCkKLSAgICBEaWRDcmVhdGVTaGFyZWREaXNw
bGF5TGlzdEhhbmRsZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIg
aWRlbnRpZmllciwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUsIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZp
ZXIpCiAgICAgUmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50
KQogICAgIEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKFdlYktpdDo6UmVuZGVyaW5nVXBkYXRlSUQg
cmVuZGVyaW5nVXBkYXRlSUQpCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycy5oIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRD
cmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCA0NGEyNzgyNjUyYThmZWIxM2Q1ZDRjYTc1NTEwMWYw
ZjNlYmVkZThjLi5jMjQ1NWQ2YzBmZGM3MTExNjVmNWMzYTA5YWVmZTFjNzUxNTM2ZjY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZENyZWF0aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzLmgKQEAg
LTM2LDEzICszNiwxMiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RydWN0IFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyIGlkZW50aWZpZXI7Ci0gICAgSVBDOjpTZW1hcGhvcmUgcmVzdW1lRGlzcGxheUxpc3RT
ZW1hcGhvcmU7CiAgICAgV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlUHJveHlJRDsKICAgICBX
ZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQ7CiAKICAgICB2b2lkIGVuY29kZShJUEM6OkVu
Y29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgewotICAgICAgICBlbmNvZGVyIDw8IGlkZW50aWZp
ZXIgPDwgcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmUgPDwgcGFnZVByb3h5SUQgPDwgcGFnZUlE
OworICAgICAgICBlbmNvZGVyIDw8IGlkZW50aWZpZXIgPDwgcGFnZVByb3h5SUQgPDwgcGFnZUlE
OwogICAgIH0KIAogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRDcmVhdGlvblBhcmFtZXRlcnM+IGRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpCkBAIC01
MiwxMSArNTEsNiBAQCBzdHJ1Y3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1l
dGVycyB7CiAgICAgICAgIGlmICghaWRlbnRpZmllcikKICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiAKLSAgICAgICAgc3RkOjpvcHRpb25hbDxJUEM6OlNlbWFwaG9yZT4gcmVzdW1l
RGlzcGxheUxpc3RTZW1hcGhvcmU7Ci0gICAgICAgIGRlY29kZXIgPj4gcmVzdW1lRGlzcGxheUxp
c3RTZW1hcGhvcmU7Ci0gICAgICAgIGlmICghcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmUpCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8
V2ViUGFnZVByb3h5SWRlbnRpZmllcj4gcGFnZVByb3h5SUQ7CiAgICAgICAgIGRlY29kZXIgPj4g
cGFnZVByb3h5SUQ7CiAgICAgICAgIGlmICghcGFnZVByb3h5SUQpCkBAIC02Nyw3ICs2MSw3IEBA
IHN0cnVjdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICAg
ICAgaWYgKCFwYWdlSUQpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAg
ICAgIHJldHVybiB7eyAqaWRlbnRpZmllciwgV1RGTW92ZSgqcmVzdW1lRGlzcGxheUxpc3RTZW1h
cGhvcmUpLCAqcGFnZVByb3h5SUQsICpwYWdlSUQgfX07CisgICAgICAgIHJldHVybiB7eyAqaWRl
bnRpZmllciwgKnBhZ2VQcm94eUlELCAqcGFnZUlEIH19OwogICAgIH0KIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kU3RhdGUuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kU3RhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE0Yzg3
YzhkZDViNTU0NDE5OTJmYTUxNzRiZjA4ZGZkNjJhMjE3Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1lbnVtIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRTdGF0ZSA6IHVpbnQ4X3QgewotICAgIEluaXRpYWxpemVkLAotICAgIEJlZ2FuUmVwbGF5
aW5nRGlzcGxheUxpc3QsCi0gICAgRmluaXNoZWRSZXBsYXlpbmdEaXNwbGF5TGlzdCwKLSAgICBX
YWl0aW5nRm9yQ2FjaGVkUmVzb3VyY2UsCi0gICAgV2FpdGluZ0Zvckl0ZW1CdWZmZXIsCi0gICAg
V2FpdGluZ0ZvckRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsCi19OwotCi1BTFdBWVNfSU5MSU5FIGNv
bnN0IGNoYXIqIG5hbWUoUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlIHN0YXRlKQotewotICAg
IHN3aXRjaCAoc3RhdGUpIHsKLSAgICBjYXNlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZTo6
SW5pdGlhbGl6ZWQ6Ci0gICAgICAgIHJldHVybiAiSW5pdGlhbGl6ZWQiOwotICAgIGNhc2UgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpCZWdhblJlcGxheWluZ0Rpc3BsYXlMaXN0OgotICAg
ICAgICByZXR1cm4gIkJlZ2FuUmVwbGF5aW5nRGlzcGxheUxpc3QiOwotICAgIGNhc2UgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFN0YXRlOjpGaW5pc2hlZFJlcGxheWluZ0Rpc3BsYXlMaXN0OgotICAg
ICAgICByZXR1cm4gIkZpbmlzaGVkUmVwbGF5aW5nRGlzcGxheUxpc3QiOwotICAgIGNhc2UgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpXYWl0aW5nRm9yQ2FjaGVkUmVzb3VyY2U6Ci0gICAg
ICAgIHJldHVybiAiV2FpdGluZ0ZvckNhY2hlZFJlc291cmNlIjsKLSAgICBjYXNlIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRTdGF0ZTo6V2FpdGluZ0Zvckl0ZW1CdWZmZXI6Ci0gICAgICAgIHJldHVy
biAiV2FpdGluZ0Zvckl0ZW1CdWZmZXIiOwotICAgIGNhc2UgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFN0YXRlOjpXYWl0aW5nRm9yRGVzdGluYXRpb25JbWFnZUJ1ZmZlcjoKLSAgICAgICAgcmV0dXJu
ICJXYWl0aW5nRm9yRGVzdGluYXRpb25JbWFnZUJ1ZmZlciI7Ci0gICAgfQotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAiSW52YWxpZCI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuY3BwIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuY3Bw
CmluZGV4IDUyMzlmMTRkYjIyMDEwZDg5Njg0MmVkZTgyMDMyYTNiOGVhMzFmOTAuLjFkNTk3MmQ2
M2VkOWJjODhmODkyZjYxMjkxNjA5M2FmYjliYzllMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5jcHAKQEAg
LTQ5LDcgKzQ5LDcgQEAgdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZUltYWdlQnVmZmVy
KFJlZjxJbWFnZUJ1ZmZlcj4mJiBpbWFnZUJ1ZmZlcikKICAgICBlbnN1cmVSZXNvdXJjZVVzZUNv
dW50ZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKIH0KIAotSW1hZ2VCdWZmZXIqIFJl
bW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlZEltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCitJbWFnZUJ1ZmZlciogUmVtb3Rl
UmVzb3VyY2VDYWNoZTo6Y2FjaGVkSW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgY29uc3QKIHsKICAgICByZXR1cm4gbV9p
bWFnZUJ1ZmZlcnMuZ2V0KHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiB9CkBAIC02Myw2
ICs2MywxMSBAQCB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlTmF0aXZlSW1hZ2UoUmVm
PE5hdGl2ZUltYWdlPiYmIGltYWdlKQogICAgIGVuc3VyZVJlc291cmNlVXNlQ291bnRlcihyZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCitOYXRpdmVJbWFnZSogUmVtb3RlUmVzb3Vy
Y2VDYWNoZTo6Y2FjaGVkTmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uYXRpdmVJ
bWFnZXMuZ2V0KHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Cit9CisKIHZvaWQgUmVtb3Rl
UmVzb3VyY2VDYWNoZTo6Y2FjaGVGb250KFJlZjxGb250PiYmIGZvbnQpCiB7CiAgICAgYXV0byBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPSBmb250LT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIoKTsKQEAgLTcxLDYgKzc2LDExIEBAIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2Fj
aGVGb250KFJlZjxGb250PiYmIGZvbnQpCiAgICAgZW5zdXJlUmVzb3VyY2VVc2VDb3VudGVyKHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiB9CiAKK0ZvbnQqIFJlbW90ZVJlc291cmNlQ2Fj
aGU6OmNhY2hlZEZvbnQoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250cy5nZXQocmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKTsKK30KKwogdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlOjplbnN1
cmVSZXNvdXJjZVVzZUNvdW50ZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcikKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1fcmVzb3VyY2VVc2VD
b3VudGVycy5hZGQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBSZXNvdXJjZVVzZUNvdW50
ZXIgeyB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZXNvdXJjZUNhY2hlLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlUmVzb3VyY2VDYWNoZS5oCmluZGV4IGNhYmMyNTYzZmRhZGE4MjlmZWJkYTM3MjU2NjYz
YjJkOWI3YzQxYWMuLjBlNDA3MDkyYmI0MDFiZGViNmM0YWNkODNlMzRiYWY5Y2IzODllZGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJj
ZUNhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
c291cmNlQ2FjaGUuaApAQCAtNDMsOSArNDMsMTEgQEAgcHVibGljOgogICAgIFJlbW90ZVJlc291
cmNlQ2FjaGUoUmVtb3RlUmVzb3VyY2VDYWNoZSYmKTsKIAogICAgIHZvaWQgY2FjaGVJbWFnZUJ1
ZmZlcihSZWY8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+JiYpOwotICAgIFdlYkNvcmU6OkltYWdlQnVm
ZmVyKiBjYWNoZWRJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpOworICAgIFdlYkNvcmU6OkltYWdlQnVmZmVyKiBjYWNoZWRJbWFnZUJ1ZmZlcihXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIGNvbnN0OwogICAgIHZvaWQgY2FjaGVOYXRp
dmVJbWFnZShSZWY8V2ViQ29yZTo6TmF0aXZlSW1hZ2U+JiYpOworICAgIFdlYkNvcmU6Ok5hdGl2
ZUltYWdlKiBjYWNoZWROYXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpIGNvbnN0OwogICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250PiYmKTsK
KyAgICBXZWJDb3JlOjpGb250KiBjYWNoZWRGb250KFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikgY29uc3Q7CiAgICAgdm9pZCBkZWxldGVBbGxGb250cygpOwogICAgIGJvb2wg
cmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgdWludDY0X3QgdXNlQ291bnQpOwogICAgIHZvaWQgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9Bcmd1bWVudENvZGVycy5oCmluZGV4IGI3OWI1NThiZjQyZDM2NTM2OTk5ZWRjMTMxOWM3
NjBiNmQ3OTRhZmMuLmZiN2I2ODczMDgyZTk2ZTFjMzljYTc2ZWRhMzNlYWFiMTk1MWM3NjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKKysr
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaApAQCAtNTIsNyAr
NTIsNyBAQCBuYW1lc3BhY2UgSVBDIHsKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsgXAogICAg
ICAgICB9IFwKICAgICB9OyBcCi0gICAgdGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPFR5cGU+
OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIGNvbnN0IFR5cGUmKTsgXAorICAgIHRlbXBsYXRl
IHZvaWQgQXJndW1lbnRDb2RlcjxUeXBlLCB2b2lkPjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXIm
LCBjb25zdCBUeXBlJik7IFwKICAgICB0ZW1wbGF0ZSBib29sIEFyZ3VtZW50Q29kZXI8VHlwZT46
OmRlY29kZTxEZWNvZGVyPihEZWNvZGVyJiwgVHlwZSYpOyBcCiAgICAgdGVtcGxhdGUgc3RkOjpv
cHRpb25hbDxUeXBlPiBBcmd1bWVudENvZGVyPFR5cGU+OjpkZWNvZGU8RGVjb2Rlcj4oRGVjb2Rl
ciYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1DbGll
bnRDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNsaWVu
dENvbm5lY3Rpb24uY3BwCmluZGV4IGM3OTFhZGQ0ZTAxYTI5ZTc1MmRjMmVkYTViYzBmMWVmNWJl
Zjk5NGIuLjk4OWVlMmVmZTlmNTAxYzM0ZDg4MWFjODkxZGZiNjVjZjUyODNjMjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNsaWVudENvbm5lY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNsaWVudENvbm5lY3Rpb24u
Y3BwCkBAIC01MCw0ICs1MCwzMCBAQCB2b2lkIFN0cmVhbUNsaWVudENvbm5lY3Rpb246Ondha2VV
cFNlcnZlcigpCiAgICAgICAgIG1fd2FrZVVwU2VtYXBob3JlLT5zaWduYWwoKTsKIH0KIAordm9p
ZCBTdHJlYW1DbGllbnRDb25uZWN0aW9uOjpkZWZlcnJlZFdha2VVcFNlcnZlcigpCit7CisgICAg
aWYgKHdha2VVcE1lc3NhZ2VIeXN0ZXJlc2lzKQorICAgICAgICBtX3JlbWFpbmluZ01lc3NhZ2VD
b3VudEJlZm9yZVNlbmRpbmdXYWtlVXAgPSB3YWtlVXBNZXNzYWdlSHlzdGVyZXNpczsKKyAgICBl
bHNlCisgICAgICAgIHdha2VVcFNlcnZlcigpOworfQorCit2b2lkIFN0cmVhbUNsaWVudENvbm5l
Y3Rpb246OmRlY3JlbWVudFJlbWFpbmluZ01lc3NhZ2VDb3VudEJlZm9yZVNlbmRpbmdXYWtlVXAo
KQoreworICAgIGlmICghbV9yZW1haW5pbmdNZXNzYWdlQ291bnRCZWZvcmVTZW5kaW5nV2FrZVVw
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIS0tbV9yZW1haW5pbmdNZXNzYWdlQ291bnRC
ZWZvcmVTZW5kaW5nV2FrZVVwKQorICAgICAgICB3YWtlVXBTZXJ2ZXIoKTsKK30KKwordm9pZCBT
dHJlYW1DbGllbnRDb25uZWN0aW9uOjpzZW5kRGVmZXJyZWRXYWtlVXBNZXNzYWdlKCkKK3sKKyAg
ICBpZiAoIW1fcmVtYWluaW5nTWVzc2FnZUNvdW50QmVmb3JlU2VuZGluZ1dha2VVcCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgd2FrZVVwU2VydmVyKCk7CisgICAgbV9yZW1haW5pbmdNZXNzYWdl
Q291bnRCZWZvcmVTZW5kaW5nV2FrZVVwID0gMDsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29ubmVjdGlvbi5oIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29ubmVjdGlvbi5oCmluZGV4IDNlMmMyNGFj
OTQ3N2U4NGUwYmEzNzExNDY0ODI3YmFhZThlMzlkMjUuLjg3NjAzNmIxYjEwNzcxOWQ0ZTA1NGZl
MDFmNjEyODY4ZWE2MDQxNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L1N0cmVhbUNsaWVudENvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9TdHJlYW1DbGllbnRDb25uZWN0aW9uLmgKQEAgLTQ3LDYgKzQ3LDcgQEAgbmFtZXNwYWNlIElQ
QyB7CiAvLwogLy8gVGhlIFN0cmVhbUNsaWVudENvbm5lY3Rpb24gdHJ1c3RzIHRoZSBTdHJlYW1T
ZXJ2ZXJDb25uZWN0aW9uLgogY2xhc3MgU3RyZWFtQ2xpZW50Q29ubmVjdGlvbiBmaW5hbCB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3Ry
ZWFtQ2xpZW50Q29ubmVjdGlvbik7CiBwdWJsaWM6CiAgICAgU3RyZWFtQ2xpZW50Q29ubmVjdGlv
bihDb25uZWN0aW9uJiwgc2l6ZV90IGJ1ZmZlclNpemUpOwpAQCAtNTQsNiArNTUsOCBAQCBwdWJs
aWM6CiAgICAgU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYgc3RyZWFtQnVmZmVyKCkgeyByZXR1cm4g
bV9idWZmZXI7IH0KICAgICB2b2lkIHNldFdha2VVcFNlbWFwaG9yZShJUEM6OlNlbWFwaG9yZSYm
KTsKIAorICAgIHZvaWQgc2VuZERlZmVycmVkV2FrZVVwTWVzc2FnZSgpOworCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gYm9vbCBzZW5kKFQmJiBtZXNzYWdlLCBPYmplY3RJ
ZGVudGlmaWVyPFU+IGRlc3RpbmF0aW9uSUQsIFRpbWVvdXQpOwogCiAgICAgdXNpbmcgU2VuZFN5
bmNSZXN1bHQgPSBDb25uZWN0aW9uOjpTZW5kU3luY1Jlc3VsdDsKQEAgLTY1LDYgKzY4LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgdWludDhfdCogZGF0YTsKICAgICAgICAgc2l6ZV90IHNpemU7CiAg
ICAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHdha2VVcE1lc3NhZ2VIeXN0ZXJl
c2lzID0gMjU2OwogICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1pbmltdW1NZXNzYWdlU2l6
ZSA9IFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyOjptaW5pbXVtTWVzc2FnZVNpemU7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgbWVzc2FnZUFsaWdubWVudCA9IFN0cmVhbUNvbm5lY3Rpb25F
bmNvZGVyOjptZXNzYWdlQWxpZ25tZW50OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC04
Myw2ICs4Nyw4IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBXYWtlVXBTZXJ2ZXIgcmVsZWFzZShz
aXplX3Qgd3JpdGVTaXplKTsKICAgICB2b2lkIHdha2VVcFNlcnZlcigpOworICAgIHZvaWQgZGVm
ZXJyZWRXYWtlVXBTZXJ2ZXIoKTsKKyAgICB2b2lkIGRlY3JlbWVudFJlbWFpbmluZ01lc3NhZ2VD
b3VudEJlZm9yZVNlbmRpbmdXYWtlVXAoKTsKIAogICAgIFNwYW4gYWxpZ25lZFNwYW4oc2l6ZV90
IG9mZnNldCwgc2l6ZV90IGxpbWl0KTsKICAgICBzaXplX3Qgc2l6ZShzaXplX3Qgb2Zmc2V0LCBz
aXplX3QgbGltaXQpOwpAQCAtMTAzLDYgKzEwOSw3IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1f
Y2xpZW50T2Zmc2V0IHsgMCB9OwogICAgIFN0cmVhbUNvbm5lY3Rpb25CdWZmZXIgbV9idWZmZXI7
CiAgICAgc3RkOjpvcHRpb25hbDxTZW1hcGhvcmU+IG1fd2FrZVVwU2VtYXBob3JlOworICAgIHVu
c2lnbmVkIG1fcmVtYWluaW5nTWVzc2FnZUNvdW50QmVmb3JlU2VuZGluZ1dha2VVcCB7IDAgfTsK
IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CkBAIC0xMzEsNyArMTM4LDkg
QEAgYm9vbCBTdHJlYW1DbGllbnRDb25uZWN0aW9uOjp0cnlTZW5kU3RyZWFtKFQmIG1lc3NhZ2Us
IFNwYW4mIHNwYW4pCiAgICAgaWYgKG1lc3NhZ2VFbmNvZGVyIDw8IG1lc3NhZ2UuYXJndW1lbnRz
KCkpIHsKICAgICAgICAgYXV0byB3YWtldXBSZXN1bHQgPSByZWxlYXNlKG1lc3NhZ2VFbmNvZGVy
LnNpemUoKSk7CiAgICAgICAgIGlmICh3YWtldXBSZXN1bHQgPT0gU3RyZWFtQ2xpZW50Q29ubmVj
dGlvbjo6V2FrZVVwU2VydmVyOjpZZXMpCi0gICAgICAgICAgICB3YWtlVXBTZXJ2ZXIoKTsKKyAg
ICAgICAgICAgIGRlZmVycmVkV2FrZVVwU2VydmVyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGRlY3JlbWVudFJlbWFpbmluZ01lc3NhZ2VDb3VudEJlZm9yZVNlbmRpbmdXYWtlVXAoKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTE3Miw2
ICsxODEsOCBAQCBzdGQ6Om9wdGlvbmFsPFN0cmVhbUNsaWVudENvbm5lY3Rpb246OlNlbmRTeW5j
UmVzdWx0PiBTdHJlYW1DbGllbnRDb25uZWN0aW9uOjp0cgogCiAgICAgICAgIGlmICh3YWtldXBS
ZXN1bHQgPT0gU3RyZWFtQ2xpZW50Q29ubmVjdGlvbjo6V2FrZVVwU2VydmVyOjpZZXMpCiAgICAg
ICAgICAgICB3YWtlVXBTZXJ2ZXIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2VuZERl
ZmVycmVkV2FrZVVwTWVzc2FnZSgpOwogICAgICAgICBpZiBjb25zdGV4cHIoVDo6aXNSZXBseVN0
cmVhbUVuY29kYWJsZSkgewogICAgICAgICAgICAgYXV0byByZXBseVNwYW4gPSB0cnlBY3F1aXJl
QWxsKHRpbWVvdXQpOwogICAgICAgICAgICAgaWYgKCFyZXBseVNwYW4pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1NZXNzYWdlUmVjZWl2ZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbU1lc3NhZ2VSZWNlaXZlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmRjNzJmNjEyZDA5Yjg2MmQyNjdiN2FmNmUyNTZjYTYyZWY2Mjk4N2EKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1NZXNzYWdlUmVjZWl2ZXIuaApA
QCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3
dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgSVBDIHsKKworY2xhc3MgU3RyZWFtU2VydmVyQ29u
bmVjdGlvbkJhc2U7CitjbGFzcyBEZWNvZGVyOworCitjbGFzcyBTdHJlYW1NZXNzYWdlUmVjZWl2
ZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U3RyZWFtTWVzc2FnZVJlY2VpdmVyPiB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+U3RyZWFtTWVzc2FnZVJlY2VpdmVyKCkgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVN0cmVhbU1lc3NhZ2UoU3RyZWFtU2VydmVyQ29ubmVj
dGlvbkJhc2UmLCBEZWNvZGVyJikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24u
Y3BwCmluZGV4IDY5NzEyMDk1ZDk2ZGQ3MzAyNTkyNTQ1ODI4Y2U1YzIyMTVmZTExNzMuLmFmZGZk
YjAwZjNkOWE4NTdkZDA5NDU5ZWFjYjJmMWEzYzFhYjQzYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24uY3BwCkBAIC0xNDEs
NCArMTQxLDE0MiBAQCBzaXplX3QgU3RyZWFtU2VydmVyQ29ubmVjdGlvbkJhc2U6OmNsYW1wZWRM
aW1pdChTZXJ2ZXJMaW1pdCBzZXJ2ZXJMaW1pdCkgY29uc3QKICAgICByZXR1cm4gc3RkOjptaW4o
bGltaXQsIGRhdGFTaXplKCkgLSAxKTsKIH0KIAordm9pZCBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9u
OjpzdGFydFJlY2VpdmluZ01lc3NhZ2VzKFN0cmVhbU1lc3NhZ2VSZWNlaXZlciYgcmVjZWl2ZXIs
IFJlY2VpdmVyTmFtZSByZWNlaXZlck5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQpCit7Cisg
ICAgeworICAgICAgICBhdXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHJlY2VpdmVyTmFtZSksIGRlc3RpbmF0aW9uSUQpOworICAgICAgICBMb2NrZXIgbG9ja2Vy
IHsgbV9yZWNlaXZlcnNMb2NrIH07CisgICAgICAgIEFTU0VSVCghbV9yZWNlaXZlcnMuY29udGFp
bnMoa2V5KSk7CisgICAgICAgIG1fcmVjZWl2ZXJzLmFkZChrZXksIHJlY2VpdmVyKTsKKyAgICB9
CisgICAgU3RyZWFtU2VydmVyQ29ubmVjdGlvbkJhc2U6OnN0YXJ0UmVjZWl2aW5nTWVzc2FnZXNJ
bXBsKHJlY2VpdmVyTmFtZSwgZGVzdGluYXRpb25JRCk7Cit9CisKK3ZvaWQgU3RyZWFtU2VydmVy
Q29ubmVjdGlvbjo6c3RvcFJlY2VpdmluZ01lc3NhZ2VzKFJlY2VpdmVyTmFtZSByZWNlaXZlck5h
bWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQpCit7CisgICAgU3RyZWFtU2VydmVyQ29ubmVjdGlv
bkJhc2U6OnN0b3BSZWNlaXZpbmdNZXNzYWdlc0ltcGwocmVjZWl2ZXJOYW1lLCBkZXN0aW5hdGlv
bklEKTsKKyAgICBhdXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHJlY2VpdmVyTmFtZSksIGRlc3RpbmF0aW9uSUQpOworICAgIExvY2tlciBsb2NrZXIgeyBtX3Jl
Y2VpdmVyc0xvY2sgfTsKKyAgICBBU1NFUlQobV9yZWNlaXZlcnMuY29udGFpbnMoa2V5KSk7Cisg
ICAgbV9yZWNlaXZlcnMucmVtb3ZlKGtleSk7Cit9CisKK1N0cmVhbVNlcnZlckNvbm5lY3Rpb25C
YXNlOjpEaXNwYXRjaFJlc3VsdCBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uOjpkaXNwYXRjaFN0cmVh
bU1lc3NhZ2VzKHNpemVfdCBtZXNzYWdlTGltaXQpCit7CisgICAgUmVmUHRyPFN0cmVhbU1lc3Nh
Z2VSZWNlaXZlcj4gY3VycmVudFJlY2VpdmVyOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgV1RG
Ojppc1ZhbGlkKFJlY2VpdmVyTmFtZSkuCisgICAgdWludDhfdCBjdXJyZW50UmVjZWl2ZXJOYW1l
ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oUmVjZWl2ZXJOYW1lOjpJbnZhbGlkKTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbWVzc2FnZUxpbWl0OyArK2kpIHsKKyAgICAgICAgYXV0byBz
cGFuID0gdHJ5QWNxdWlyZSgpOworICAgICAgICBpZiAoIXNwYW4pCisgICAgICAgICAgICByZXR1
cm4gRGlzcGF0Y2hSZXN1bHQ6Okhhc05vTWVzc2FnZXM7CisgICAgICAgIElQQzo6RGVjb2RlciBk
ZWNvZGVyIHsgc3Bhbi0+ZGF0YSwgc3Bhbi0+c2l6ZSwgbV9jdXJyZW50RGVzdGluYXRpb25JRCB9
OworICAgICAgICBpZiAoIWRlY29kZXIuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBtX2Nvbm5l
Y3Rpb24tPmRpc3BhdGNoRGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKGRlY29kZXIubWVzc2FnZU5h
bWUoKSk7CisgICAgICAgICAgICByZXR1cm4gRGlzcGF0Y2hSZXN1bHQ6Okhhc05vTWVzc2FnZXM7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdl
TmFtZTo6U2V0U3RyZWFtRGVzdGluYXRpb25JRCkgeworICAgICAgICAgICAgaWYgKCFwcm9jZXNz
U2V0U3RyZWFtRGVzdGluYXRpb25JRChXVEZNb3ZlKGRlY29kZXIpLCBjdXJyZW50UmVjZWl2ZXIp
KQorICAgICAgICAgICAgICAgIHJldHVybiBEaXNwYXRjaFJlc3VsdDo6SGFzTm9NZXNzYWdlczsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChkZWNvZGVyLm1l
c3NhZ2VOYW1lKCkgPT0gTWVzc2FnZU5hbWU6OlByb2Nlc3NPdXRPZlN0cmVhbU1lc3NhZ2UpIHsK
KyAgICAgICAgICAgIGlmICghZGlzcGF0Y2hPdXRPZlN0cmVhbU1lc3NhZ2UoV1RGTW92ZShkZWNv
ZGVyKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIERpc3BhdGNoUmVzdWx0OjpIYXNOb01lc3Nh
Z2VzOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN1cnJl
bnRSZWNlaXZlck5hbWUgIT0gc3RhdGljX2Nhc3Q8dWludDhfdD4oZGVjb2Rlci5tZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkpKSB7CisgICAgICAgICAgICBjdXJyZW50UmVjZWl2ZXJOYW1lID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4oZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkpOworICAgICAgICAg
ICAgY3VycmVudFJlY2VpdmVyID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWN1
cnJlbnRSZWNlaXZlcikgeworICAgICAgICAgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihz
dGF0aWNfY2FzdDx1aW50OF90PihjdXJyZW50UmVjZWl2ZXJOYW1lKSwgbV9jdXJyZW50RGVzdGlu
YXRpb25JRCk7CisgICAgICAgICAgICBpZiAoIVJlY2VpdmVyc01hcDo6aXNWYWxpZEtleShrZXkp
KSB7CisgICAgICAgICAgICAgICAgbV9jb25uZWN0aW9uLT5kaXNwYXRjaERpZFJlY2VpdmVJbnZh
bGlkTWVzc2FnZShkZWNvZGVyLm1lc3NhZ2VOYW1lKCkpOworICAgICAgICAgICAgICAgIHJldHVy
biBEaXNwYXRjaFJlc3VsdDo6SGFzTm9NZXNzYWdlczsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIExvY2tlciBsb2NrZXIgeyBtX3JlY2VpdmVyc0xvY2sgfTsKKyAgICAgICAgICAgIGN1cnJl
bnRSZWNlaXZlciA9IG1fcmVjZWl2ZXJzLmdldChrZXkpOworICAgICAgICB9CisgICAgICAgIGlm
ICghY3VycmVudFJlY2VpdmVyKSB7CisgICAgICAgICAgICAvLyBWYWxpZCBzY2VuYXJpbyBpcyB3
aGVuIHJlY2VpdmVyIGhhcyBiZWVuIHJlbW92ZWQsIGJ1dCB0aGVyZSBhcmUgbWVzc2FnZXMgZm9y
IGl0IGluIHRoZSBidWZmZXIuCisgICAgICAgICAgICAvLyBGSVhNRTogU2luY2Ugd2UgZG8gbm90
IGhhdmUgYSByZWNlaXZlciwgd2UgZG9uJ3Qga25vdyBob3cgdG8gZGVjb2RlIHRoZSBtZXNzYWdl
LgorICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBtdXN0IHRpbWVvdXQgZXZlcnkgcmVjZWl2
ZXIgaW4gdGhlIHN0cmVhbSBjb25uZWN0aW9uLgorICAgICAgICAgICAgLy8gQ3VycmVudGx5IHdl
IGFzc2VydCB0aGF0IHRoZSByZWNlaXZlcnMgYXJlIGVtcHR5LCBhcyB3ZSBvbmx5IGhhdmUgdXAg
dG8gb25lIHJlY2VpdmVyIGluCisgICAgICAgICAgICAvLyBhIHN0cmVhbSBjb25uZWN0aW9uIHVu
dGlsIHBvc3NpYmlsaXR5IG9mIHNraXBwaW5nIGlzIGltcGxlbWVudGVkIHByb3Blcmx5LgorICAg
ICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fcmVjZWl2ZXJzTG9jayB9OworICAgICAgICAgICAg
QVNTRVJUKG1fcmVjZWl2ZXJzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICByZXR1cm4gRGlzcGF0
Y2hSZXN1bHQ6Okhhc05vTWVzc2FnZXM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFkaXNwYXRj
aFN0cmVhbU1lc3NhZ2UoV1RGTW92ZShkZWNvZGVyKSwgKmN1cnJlbnRSZWNlaXZlcikpCisgICAg
ICAgICAgICByZXR1cm4gRGlzcGF0Y2hSZXN1bHQ6Okhhc05vTWVzc2FnZXM7CisgICAgfQorICAg
IHJldHVybiBEaXNwYXRjaFJlc3VsdDo6SGFzTW9yZU1lc3NhZ2VzOworfQorCitib29sIFN0cmVh
bVNlcnZlckNvbm5lY3Rpb246OnByb2Nlc3NTZXRTdHJlYW1EZXN0aW5hdGlvbklEKERlY29kZXIm
JiBkZWNvZGVyLCBSZWZQdHI8U3RyZWFtTWVzc2FnZVJlY2VpdmVyPiYgY3VycmVudFJlY2VpdmVy
KQoreworICAgIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQgPSAwOworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoZGVzdGluYXRpb25JRCkpIHsKKyAgICAgICAgbV9jb25uZWN0aW9uLT5kaXNwYXRjaERp
ZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShkZWNvZGVyLm1lc3NhZ2VOYW1lKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChtX2N1cnJlbnREZXN0aW5hdGlvbklEICE9IGRl
c3RpbmF0aW9uSUQpIHsKKyAgICAgICAgbV9jdXJyZW50RGVzdGluYXRpb25JRCA9IGRlc3RpbmF0
aW9uSUQ7CisgICAgICAgIGN1cnJlbnRSZWNlaXZlciA9IG51bGxwdHI7CisgICAgfQorICAgIHJl
bGVhc2UoZGVjb2Rlci5jdXJyZW50QnVmZmVyUG9zaXRpb24oKSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgU3RyZWFtU2VydmVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTdHJlYW1NZXNzYWdl
KERlY29kZXImJiBkZWNvZGVyLCBTdHJlYW1NZXNzYWdlUmVjZWl2ZXImIHJlY2VpdmVyKQorewor
ICAgIEFTU0VSVCghbV9pc0Rpc3BhdGNoaW5nU3RyZWFtTWVzc2FnZSk7CisgICAgbV9pc0Rpc3Bh
dGNoaW5nU3RyZWFtTWVzc2FnZSA9IHRydWU7CisgICAgcmVjZWl2ZXIuZGlkUmVjZWl2ZVN0cmVh
bU1lc3NhZ2UoKnRoaXMsIGRlY29kZXIpOworICAgIG1faXNEaXNwYXRjaGluZ1N0cmVhbU1lc3Nh
Z2UgPSBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuaXNWYWxpZCgpKSB7CisgICAgICAgIG1fY29u
bmVjdGlvbi0+ZGlzcGF0Y2hEaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoZGVjb2Rlci5tZXNzYWdl
TmFtZSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoZGVjb2Rlci5p
c1N5bmNNZXNzYWdlKCkpCisgICAgICAgIHJlbGVhc2VBbGwoKTsKKyAgICBlbHNlCisgICAgICAg
IHJlbGVhc2UoZGVjb2Rlci5jdXJyZW50QnVmZmVyUG9zaXRpb24oKSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgU3RyZWFtU2VydmVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hPdXRPZlN0cmVh
bU1lc3NhZ2UoRGVjb2RlciYmIGRlY29kZXIpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPERlY29k
ZXI+IG1lc3NhZ2U7CisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9vdXRPZlN0cmVh
bU1lc3NhZ2VzTG9jayB9OworICAgICAgICBpZiAobV9vdXRPZlN0cmVhbU1lc3NhZ2VzLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbWVzc2FnZSA9IG1fb3V0
T2ZTdHJlYW1NZXNzYWdlcy50YWtlRmlyc3QoKTsKKyAgICB9CisgICAgaWYgKCFtZXNzYWdlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8U3RyZWFtTWVzc2FnZVJlY2VpdmVy
PiByZWNlaXZlcjsKKyAgICB7CisgICAgICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIoc3Rh
dGljX2Nhc3Q8dWludDhfdD4obWVzc2FnZS0+bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSwgbWVzc2Fn
ZS0+ZGVzdGluYXRpb25JRCgpKTsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fcmVjZWl2ZXJz
TG9jayB9OworICAgICAgICByZWNlaXZlciA9IG1fcmVjZWl2ZXJzLmdldChrZXkpOworICAgIH0K
KyAgICBpZiAocmVjZWl2ZXIpIHsKKyAgICAgICAgcmVjZWl2ZXItPmRpZFJlY2VpdmVTdHJlYW1N
ZXNzYWdlKCp0aGlzLCAqbWVzc2FnZSk7CisgICAgICAgIGlmICghbWVzc2FnZS0+aXNWYWxpZCgp
KSB7CisgICAgICAgICAgICBtX2Nvbm5lY3Rpb24tPmRpc3BhdGNoRGlkUmVjZWl2ZUludmFsaWRN
ZXNzYWdlKG1lc3NhZ2UtPm1lc3NhZ2VOYW1lKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorICAgIC8vIElmIHJlY2VpdmVyIGRvZXMgbm90IGV4aXN0IGlm
IGl0IGhhcyBiZWVuIHJlbW92ZWQgYnV0IG1lc3NhZ2VzIGFyZSBzdGlsbCBwZW5kaW5nIHRvIGJl
CisgICAgLy8gcHJvY2Vzc2VkLiBJdCdzIG9rIHRvIHNraXAgc3VjaCBtZXNzYWdlcy4KKyAgICAv
LyBGSVhNRTogTm90ZSwgY29ycmVzcG9uZGluZyBza2lwIGlzIG5vdCBwb3NzaWJsZSBhdCB0aGUg
bW9tZW50IGZvciBzdHJlYW0gbWVzc2FnZXMuCisgICAgcmVsZWFzZShkZWNvZGVyLmN1cnJlbnRC
dWZmZXJQb3NpdGlvbigpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5oIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5oCmluZGV4IGM5
YzliYjc1OWRhM2M4Yzc4MTc2N2FiZDNkYTNmNmRlMDhjMjVlZTUuLjNjNGFlMGQ4Yzc3YjI5OWY0
N2YwN2E0YTc1YjBhZjVhYzk0MjI4YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJNZXNzYWdlTmFtZXMuaCIKICNpbmNsdWRlICJTdHJlYW1Db25uZWN0aW9uQnVmZmVyLmgi
CiAjaW5jbHVkZSAiU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaCIKKyNpbmNsdWRlICJTdHJlYW1N
ZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYv
TG9jay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KQEAgLTEzMSw3ICsxMzIsNiBAQCB2
b2lkIFN0cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlOjpzZW5kU3luY1JlcGx5KENvbm5lY3Rpb246
OlN5bmNSZXF1ZXN0SUQgc3luY1JlcQogLy8gICB2b2lkIGRpZFJlY2VpdmVTdHJlYW1NZXNzYWdl
KFN0cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlJiwgRGVjb2RlciYpOwogLy8KIC8vIFRoZSBTdHJl
YW1TZXJ2ZXJDb25uZWN0aW9uIGRvZXMgbm90IHRydXN0IHRoZSBTdHJlYW1DbGllbnRDb25uZWN0
aW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgUmVjZWl2ZXI+CiBjbGFzcyBTdHJlYW1TZXJ2ZXJDb25u
ZWN0aW9uIGZpbmFsIDogcHVibGljIFN0cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPFN0cmVhbVNlcnZlckNvbm5lY3Rpb24+IGNyZWF0ZShDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiYgc3RyZWFtQnVmZmVyLCBT
dHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlJiB3b3JrUXVldWUpCkBAIC0xNDAsNyArMTQwLDcgQEAg
cHVibGljOgogICAgIH0KICAgICB+U3RyZWFtU2VydmVyQ29ubmVjdGlvbigpIGZpbmFsID0gZGVm
YXVsdDsKIAotICAgIHZvaWQgc3RhcnRSZWNlaXZpbmdNZXNzYWdlcyhSZWNlaXZlciYsIFJlY2Vp
dmVyTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCk7CisgICAgdm9pZCBzdGFydFJlY2Vpdmlu
Z01lc3NhZ2VzKFN0cmVhbU1lc3NhZ2VSZWNlaXZlciYsIFJlY2VpdmVyTmFtZSwgdWludDY0X3Qg
ZGVzdGluYXRpb25JRCk7CiAgICAgLy8gU3RvcHMgdGhlIG1lc3NhZ2UgcmVjZWlwdC4gTm90ZTog
YWxyZWFkeSByZWNlaXZlZCBtZXNzYWdlcyBtaWdodCBzdGlsbCBiZSBkZWxpdmVyZWQuCiAgICAg
dm9pZCBzdG9wUmVjZWl2aW5nTWVzc2FnZXMoUmVjZWl2ZXJOYW1lLCB1aW50NjRfdCBkZXN0aW5h
dGlvbklEKTsKIApAQCAtMTUyLDE1NyArMTUyLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIDogU3Ry
ZWFtU2VydmVyQ29ubmVjdGlvbkJhc2UoY29ubmVjdGlvbiwgV1RGTW92ZShzdHJlYW1CdWZmZXIp
LCB3b3JrUXVldWUpCiAgICAgewogICAgIH0KLSAgICBib29sIHByb2Nlc3NTZXRTdHJlYW1EZXN0
aW5hdGlvbklEKERlY29kZXImJiwgUmVmUHRyPFJlY2VpdmVyPiYgY3VycmVudFJlY2VpdmVyKTsK
LSAgICBib29sIGRpc3BhdGNoU3RyZWFtTWVzc2FnZShEZWNvZGVyJiYsIFJlY2VpdmVyJik7Cisg
ICAgYm9vbCBwcm9jZXNzU2V0U3RyZWFtRGVzdGluYXRpb25JRChEZWNvZGVyJiYsIFJlZlB0cjxT
dHJlYW1NZXNzYWdlUmVjZWl2ZXI+JiBjdXJyZW50UmVjZWl2ZXIpOworICAgIGJvb2wgZGlzcGF0
Y2hTdHJlYW1NZXNzYWdlKERlY29kZXImJiwgU3RyZWFtTWVzc2FnZVJlY2VpdmVyJik7CiAgICAg
Ym9vbCBkaXNwYXRjaE91dE9mU3RyZWFtTWVzc2FnZShEZWNvZGVyJiYpOwogICAgIExvY2sgbV9y
ZWNlaXZlcnNMb2NrOwotICAgIHVzaW5nIFJlY2VpdmVyc01hcCA9IEhhc2hNYXA8c3RkOjpwYWly
PHVpbnQ4X3QsIHVpbnQ2NF90PiwgUmVmPFJlY2VpdmVyPj47CisgICAgdXNpbmcgUmVjZWl2ZXJz
TWFwID0gSGFzaE1hcDxzdGQ6OnBhaXI8dWludDhfdCwgdWludDY0X3Q+LCBSZWY8U3RyZWFtTWVz
c2FnZVJlY2VpdmVyPj47CiAgICAgUmVjZWl2ZXJzTWFwIG1fcmVjZWl2ZXJzIFdURl9HVUFSREVE
X0JZX0xPQ0sobV9yZWNlaXZlcnNMb2NrKTsKICAgICB1aW50NjRfdCBtX2N1cnJlbnREZXN0aW5h
dGlvbklEIHsgMCB9OwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgUmVjZWl2ZXI+Ci12b2lkIFN0
cmVhbVNlcnZlckNvbm5lY3Rpb248UmVjZWl2ZXI+OjpzdGFydFJlY2VpdmluZ01lc3NhZ2VzKFJl
Y2VpdmVyJiByZWNlaXZlciwgUmVjZWl2ZXJOYW1lIHJlY2VpdmVyTmFtZSwgdWludDY0X3QgZGVz
dGluYXRpb25JRCkKLXsKLSAgICB7Ci0gICAgICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIo
c3RhdGljX2Nhc3Q8dWludDhfdD4ocmVjZWl2ZXJOYW1lKSwgZGVzdGluYXRpb25JRCk7Ci0gICAg
ICAgIExvY2tlciBsb2NrZXIgeyBtX3JlY2VpdmVyc0xvY2sgfTsKLSAgICAgICAgQVNTRVJUKCFt
X3JlY2VpdmVycy5jb250YWlucyhrZXkpKTsKLSAgICAgICAgbV9yZWNlaXZlcnMuYWRkKGtleSwg
cmVjZWl2ZXIpOwotICAgIH0KLSAgICBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZTo6c3RhcnRS
ZWNlaXZpbmdNZXNzYWdlc0ltcGwocmVjZWl2ZXJOYW1lLCBkZXN0aW5hdGlvbklEKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgUmVjZWl2ZXI+Ci12b2lkIFN0cmVhbVNlcnZlckNvbm5lY3Rpb248
UmVjZWl2ZXI+OjpzdG9wUmVjZWl2aW5nTWVzc2FnZXMoUmVjZWl2ZXJOYW1lIHJlY2VpdmVyTmFt
ZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCkKLXsKLSAgICBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9u
QmFzZTo6c3RvcFJlY2VpdmluZ01lc3NhZ2VzSW1wbChyZWNlaXZlck5hbWUsIGRlc3RpbmF0aW9u
SUQpOwotICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8dWludDhfdD4o
cmVjZWl2ZXJOYW1lKSwgZGVzdGluYXRpb25JRCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IG1fcmVj
ZWl2ZXJzTG9jayB9OwotICAgIEFTU0VSVChtX3JlY2VpdmVycy5jb250YWlucyhrZXkpKTsKLSAg
ICBtX3JlY2VpdmVycy5yZW1vdmUoa2V5KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgUmVjZWl2
ZXI+Ci1TdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZTo6RGlzcGF0Y2hSZXN1bHQgU3RyZWFtU2Vy
dmVyQ29ubmVjdGlvbjxSZWNlaXZlcj46OmRpc3BhdGNoU3RyZWFtTWVzc2FnZXMoc2l6ZV90IG1l
c3NhZ2VMaW1pdCkKLXsKLSAgICBSZWZQdHI8UmVjZWl2ZXI+IGN1cnJlbnRSZWNlaXZlcjsKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IFdURjo6aXNWYWxpZChSZWNlaXZlck5hbWUpLgotICAgIHVp
bnQ4X3QgY3VycmVudFJlY2VpdmVyTmFtZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFJlY2VpdmVy
TmFtZTo6SW52YWxpZCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1lc3NhZ2VMaW1p
dDsgKytpKSB7Ci0gICAgICAgIGF1dG8gc3BhbiA9IHRyeUFjcXVpcmUoKTsKLSAgICAgICAgaWYg
KCFzcGFuKQotICAgICAgICAgICAgcmV0dXJuIERpc3BhdGNoUmVzdWx0OjpIYXNOb01lc3NhZ2Vz
OwotICAgICAgICBJUEM6OkRlY29kZXIgZGVjb2RlciB7IHNwYW4tPmRhdGEsIHNwYW4tPnNpemUs
IG1fY3VycmVudERlc3RpbmF0aW9uSUQgfTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmlzVmFsaWQo
KSkgewotICAgICAgICAgICAgbV9jb25uZWN0aW9uLT5kaXNwYXRjaERpZFJlY2VpdmVJbnZhbGlk
TWVzc2FnZShkZWNvZGVyLm1lc3NhZ2VOYW1lKCkpOwotICAgICAgICAgICAgcmV0dXJuIERpc3Bh
dGNoUmVzdWx0OjpIYXNOb01lc3NhZ2VzOwotICAgICAgICB9Ci0gICAgICAgIGlmIChkZWNvZGVy
Lm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZU5hbWU6OlNldFN0cmVhbURlc3RpbmF0aW9uSUQpIHsK
LSAgICAgICAgICAgIGlmICghcHJvY2Vzc1NldFN0cmVhbURlc3RpbmF0aW9uSUQoV1RGTW92ZShk
ZWNvZGVyKSwgY3VycmVudFJlY2VpdmVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gRGlzcGF0
Y2hSZXN1bHQ6Okhhc05vTWVzc2FnZXM7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VOYW1lOjpQcm9j
ZXNzT3V0T2ZTdHJlYW1NZXNzYWdlKSB7Ci0gICAgICAgICAgICBpZiAoIWRpc3BhdGNoT3V0T2ZT
dHJlYW1NZXNzYWdlKFdURk1vdmUoZGVjb2RlcikpKQotICAgICAgICAgICAgICAgIHJldHVybiBE
aXNwYXRjaFJlc3VsdDo6SGFzTm9NZXNzYWdlczsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChjdXJyZW50UmVjZWl2ZXJOYW1lICE9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpKSkgewotICAgICAgICAgICAgY3Vy
cmVudFJlY2VpdmVyTmFtZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGRlY29kZXIubWVzc2FnZVJl
Y2VpdmVyTmFtZSgpKTsKLSAgICAgICAgICAgIGN1cnJlbnRSZWNlaXZlciA9IG51bGxwdHI7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKCFjdXJyZW50UmVjZWl2ZXIpIHsKLSAgICAgICAgICAgIGF1
dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8dWludDhfdD4oY3VycmVudFJlY2Vp
dmVyTmFtZSksIG1fY3VycmVudERlc3RpbmF0aW9uSUQpOwotICAgICAgICAgICAgaWYgKCFSZWNl
aXZlcnNNYXA6OmlzVmFsaWRLZXkoa2V5KSkgewotICAgICAgICAgICAgICAgIG1fY29ubmVjdGlv
bi0+ZGlzcGF0Y2hEaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoZGVjb2Rlci5tZXNzYWdlTmFtZSgp
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gRGlzcGF0Y2hSZXN1bHQ6Okhhc05vTWVzc2FnZXM7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9yZWNlaXZlcnNM
b2NrIH07Ci0gICAgICAgICAgICBjdXJyZW50UmVjZWl2ZXIgPSBtX3JlY2VpdmVycy5nZXQoa2V5
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWN1cnJlbnRSZWNlaXZlcikgewotICAgICAgICAg
ICAgLy8gVmFsaWQgc2NlbmFyaW8gaXMgd2hlbiByZWNlaXZlciBoYXMgYmVlbiByZW1vdmVkLCBi
dXQgdGhlcmUgYXJlIG1lc3NhZ2VzIGZvciBpdCBpbiB0aGUgYnVmZmVyLgotICAgICAgICAgICAg
Ly8gRklYTUU6IFNpbmNlIHdlIGRvIG5vdCBoYXZlIGEgcmVjZWl2ZXIsIHdlIGRvbid0IGtub3cg
aG93IHRvIGRlY29kZSB0aGUgbWVzc2FnZS4KLSAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ug
bXVzdCB0aW1lb3V0IGV2ZXJ5IHJlY2VpdmVyIGluIHRoZSBzdHJlYW0gY29ubmVjdGlvbi4KLSAg
ICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBhc3NlcnQgdGhhdCB0aGUgcmVjZWl2ZXJzIGFyZSBl
bXB0eSwgYXMgd2Ugb25seSBoYXZlIHVwIHRvIG9uZSByZWNlaXZlciBpbgotICAgICAgICAgICAg
Ly8gYSBzdHJlYW0gY29ubmVjdGlvbiB1bnRpbCBwb3NzaWJpbGl0eSBvZiBza2lwcGluZyBpcyBp
bXBsZW1lbnRlZCBwcm9wZXJseS4KLSAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3JlY2Vp
dmVyc0xvY2sgfTsKLSAgICAgICAgICAgIEFTU0VSVChtX3JlY2VpdmVycy5pc0VtcHR5KCkpOwot
ICAgICAgICAgICAgcmV0dXJuIERpc3BhdGNoUmVzdWx0OjpIYXNOb01lc3NhZ2VzOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICghZGlzcGF0Y2hTdHJlYW1NZXNzYWdlKFdURk1vdmUoZGVjb2Rlciks
ICpjdXJyZW50UmVjZWl2ZXIpKQotICAgICAgICAgICAgcmV0dXJuIERpc3BhdGNoUmVzdWx0OjpI
YXNOb01lc3NhZ2VzOwotICAgIH0KLSAgICByZXR1cm4gRGlzcGF0Y2hSZXN1bHQ6Okhhc01vcmVN
ZXNzYWdlczsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgUmVjZWl2ZXI+Ci1ib29sIFN0cmVhbVNl
cnZlckNvbm5lY3Rpb248UmVjZWl2ZXI+Ojpwcm9jZXNzU2V0U3RyZWFtRGVzdGluYXRpb25JRChE
ZWNvZGVyJiYgZGVjb2RlciwgUmVmUHRyPFJlY2VpdmVyPiYgY3VycmVudFJlY2VpdmVyKQotewot
ICAgIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQgPSAwOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
ZGVzdGluYXRpb25JRCkpIHsKLSAgICAgICAgbV9jb25uZWN0aW9uLT5kaXNwYXRjaERpZFJlY2Vp
dmVJbnZhbGlkTWVzc2FnZShkZWNvZGVyLm1lc3NhZ2VOYW1lKCkpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIGlmIChtX2N1cnJlbnREZXN0aW5hdGlvbklEICE9IGRlc3RpbmF0
aW9uSUQpIHsKLSAgICAgICAgbV9jdXJyZW50RGVzdGluYXRpb25JRCA9IGRlc3RpbmF0aW9uSUQ7
Ci0gICAgICAgIGN1cnJlbnRSZWNlaXZlciA9IG51bGxwdHI7Ci0gICAgfQotICAgIHJlbGVhc2Uo
ZGVjb2Rlci5jdXJyZW50QnVmZmVyUG9zaXRpb24oKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFJlY2VpdmVyPgotYm9vbCBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9u
PFJlY2VpdmVyPjo6ZGlzcGF0Y2hTdHJlYW1NZXNzYWdlKERlY29kZXImJiBkZWNvZGVyLCBSZWNl
aXZlciYgcmVjZWl2ZXIpCi17Ci0gICAgQVNTRVJUKCFtX2lzRGlzcGF0Y2hpbmdTdHJlYW1NZXNz
YWdlKTsKLSAgICBtX2lzRGlzcGF0Y2hpbmdTdHJlYW1NZXNzYWdlID0gdHJ1ZTsKLSAgICByZWNl
aXZlci5kaWRSZWNlaXZlU3RyZWFtTWVzc2FnZSgqdGhpcywgZGVjb2Rlcik7Ci0gICAgbV9pc0Rp
c3BhdGNoaW5nU3RyZWFtTWVzc2FnZSA9IGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgbV9jb25uZWN0aW9uLT5kaXNwYXRjaERpZFJlY2VpdmVJbnZhbGlkTWVz
c2FnZShkZWNvZGVyLm1lc3NhZ2VOYW1lKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIGlmIChkZWNvZGVyLmlzU3luY01lc3NhZ2UoKSkKLSAgICAgICAgcmVsZWFzZUFsbCgp
OwotICAgIGVsc2UKLSAgICAgICAgcmVsZWFzZShkZWNvZGVyLmN1cnJlbnRCdWZmZXJQb3NpdGlv
bigpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgUmVjZWl2ZXI+
Ci1ib29sIFN0cmVhbVNlcnZlckNvbm5lY3Rpb248UmVjZWl2ZXI+OjpkaXNwYXRjaE91dE9mU3Ry
ZWFtTWVzc2FnZShEZWNvZGVyJiYgZGVjb2RlcikKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVj
b2Rlcj4gbWVzc2FnZTsKLSAgICB7Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyBtX291dE9mU3Ry
ZWFtTWVzc2FnZXNMb2NrIH07Ci0gICAgICAgIGlmIChtX291dE9mU3RyZWFtTWVzc2FnZXMuaXNF
bXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtZXNzYWdlID0gbV9v
dXRPZlN0cmVhbU1lc3NhZ2VzLnRha2VGaXJzdCgpOwotICAgIH0KLSAgICBpZiAoIW1lc3NhZ2Up
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxSZWNlaXZlcj4gcmVjZWl2ZXI7
Ci0gICAgewotICAgICAgICBhdXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KG1lc3NhZ2UtPm1lc3NhZ2VSZWNlaXZlck5hbWUoKSksIG1lc3NhZ2UtPmRlc3RpbmF0
aW9uSUQoKSk7Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3JlY2VpdmVyc0xvY2sgfTsKLSAg
ICAgICAgcmVjZWl2ZXIgPSBtX3JlY2VpdmVycy5nZXQoa2V5KTsKLSAgICB9Ci0gICAgaWYgKHJl
Y2VpdmVyKSB7Ci0gICAgICAgIHJlY2VpdmVyLT5kaWRSZWNlaXZlU3RyZWFtTWVzc2FnZSgqdGhp
cywgKm1lc3NhZ2UpOwotICAgICAgICBpZiAoIW1lc3NhZ2UtPmlzVmFsaWQoKSkgewotICAgICAg
ICAgICAgbV9jb25uZWN0aW9uLT5kaXNwYXRjaERpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShtZXNz
YWdlLT5tZXNzYWdlTmFtZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgIH0KLSAgICAvLyBJZiByZWNlaXZlciBkb2VzIG5vdCBleGlzdCBpZiBpdCBoYXMgYmVl
biByZW1vdmVkIGJ1dCBtZXNzYWdlcyBhcmUgc3RpbGwgcGVuZGluZyB0byBiZQotICAgIC8vIHBy
b2Nlc3NlZC4gSXQncyBvayB0byBza2lwIHN1Y2ggbWVzc2FnZXMuCi0gICAgLy8gRklYTUU6IE5v
dGUsIGNvcnJlc3BvbmRpbmcgc2tpcCBpcyBub3QgcG9zc2libGUgYXQgdGhlIG1vbWVudCBmb3Ig
c3RyZWFtIG1lc3NhZ2VzLgotICAgIHJlbGVhc2UoZGVjb2Rlci5jdXJyZW50QnVmZmVyUG9zaXRp
b24oKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL1RpbWVvdXQuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1Rp
bWVvdXQuaAppbmRleCBhODk5ODk3MTc3NzNhOWUyZTQ3YTMzYTlmY2JhYTEwYmU4NTkyZTM3Li5l
NmVmOWZhNzFlODQwZTEzMGU0Yzk2N2U5ZGZjY2QyMzJkZDM5NzFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9UaW1lb3V0LmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvVGltZW91dC5oCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBJUEMgewogY2xh
c3MgVGltZW91dCB7CiBwdWJsaWM6CiAgICAgVGltZW91dChTZWNvbmRzIHRpbWVEZWx0YSkKLSAg
ICAgICAgOiBtX2RlYWRsaW5lKE1vbm90b25pY1RpbWU6Om5vdygpICsgdGltZURlbHRhKQorICAg
ICAgICA6IG1fZGVhZGxpbmUoc3RkOjppc2luZih0aW1lRGVsdGEpID8gTW9ub3RvbmljVGltZTo6
aW5maW5pdHkoKSA6IE1vbm90b25pY1RpbWU6Om5vdygpICsgdGltZURlbHRhKQogICAgIHsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMu
cHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IDMzNGI4
MWM2ZDVkYzg1MTM5NmUyMTQ5ODA5MzJmMmM2ODkyMjkwMDcuLjllYTgwNjliZmQ4ZDBkYTQwYjhl
NDE3MTBjNWE4N2ZkMWFiNjJjMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93
ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNz
YWdlcy5weQpAQCAtMTk1LDcgKzE5NSw3IEBAIGRlZiBtZXNzYWdlX3RvX3N0cnVjdF9kZWNsYXJh
dGlvbihyZWNlaXZlciwgbWVzc2FnZSk6CiAgICAgcmVzdWx0LmFwcGVuZCgncHVibGljOlxuJykK
ICAgICByZXN1bHQuYXBwZW5kKCcgICAgdXNpbmcgQXJndW1lbnRzID0gJXM7XG4nICUgYXJndW1l
bnRzX3R5cGUobWVzc2FnZSkpCiAgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQotICAgIHJlc3VsdC5h
cHBlbmQoJyAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpN
ZXNzYWdlTmFtZTo6JXNfJXM7IH1cbicgJSAocmVjZWl2ZXIubmFtZSwgbWVzc2FnZS5uYW1lKSkK
KyAgICByZXN1bHQuYXBwZW5kKCcgICAgc3RhdGljIGNvbnN0ZXhwciBJUEM6Ok1lc3NhZ2VOYW1l
IG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjolc18lczsgfVxuJyAlIChyZWNlaXZl
ci5uYW1lLCBtZXNzYWdlLm5hbWUpKQogICAgIHJlc3VsdC5hcHBlbmQoJyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNTeW5jID0gJXM7XG4nICUgKCdmYWxzZScsICd0cnVlJylbbWVzc2FnZS5y
ZXBseV9wYXJhbWV0ZXJzIGlzIG5vdCBOb25lIGFuZCBub3QgbWVzc2FnZS5oYXNfYXR0cmlidXRl
KEFTWU5DX0FUVFJJQlVURSldKQogICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoU1RSRUFN
X0FUVFJJQlVURSk6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNTdHJlYW1FbmNvZGFibGUgPSAlcztcbicgJSAoJ3RydWUnLCAnZmFsc2UnKVttZXNz
YWdlLmhhc19hdHRyaWJ1dGUoTk9UX1NUUkVBTV9FTkNPREFCTEVfQVRUUklCVVRFKV0pCkBAIC0y
NzUsNyArMjc1LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQo
KToKICAgICAgICAgJ1dlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZScsCiAgICAgICAgICdX
ZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0RvbWFpbicsCiAgICAgICAgICdXZWJDb3JlOjpEaWN0
YXRpb25Db250ZXh0JywKLSAgICAgICAgJ1dlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaElkZW50
aWZpZXInLAorICAgICAgICAnV2ViQ29yZTo6Rmx1c2hJZGVudGlmaWVyJywKICAgICAgICAgJ1dl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJD
b3JlOjpEb2N1bWVudElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RG9jdW1lbnRPcldv
cmtlcklkZW50aWZpZXInLApAQCAtNjgxLDcgKzY4MSw3IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBl
KHR5cGUpOgogICAgICAgICAnSW5zcGVjdG9yOjpFeHRlbnNpb25FcnJvcic6IFsnIkluc3BlY3Rv
ckV4dGVuc2lvblR5cGVzLmgiJ10sCiAgICAgICAgICdJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5l
bDo6Q29ubmVjdGlvblR5cGUnOiBbJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwuaD4nXSwKICAgICAgICAgJ0luc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSc6IFsn
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldC5oPiddLAotICAgICAgICAnV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZsdXNoSWRlbnRpZmllcic6IFsnPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4n
XSwKKyAgICAgICAgJ1dlYkNvcmU6OkZsdXNoSWRlbnRpZmllcic6IFsnPFdlYkNvcmUvR3JhcGhp
Y3NUeXBlcy5oPiddLAogICAgICAgICAnV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJ
ZGVudGlmaWVyJzogWyc8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPiddLAogICAgICAgICAnTWVkaWFU
aW1lJzogWyc8d3RmL01lZGlhVGltZS5oPiddLAogICAgICAgICAnTW9ub3RvbmljVGltZSc6IFsn
PHd0Zi9Nb25vdG9uaWNUaW1lLmg+J10sCkBAIC02OTAsMTIgKzY5MCwxOCBAQCBkZWYgaGVhZGVy
c19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ1dhbGxUaW1lJzogWyc8d3RmL1dhbGxUaW1lLmg+
J10sCiAgICAgICAgICdTdHJpbmcnOiBbJzx3dGYvdGV4dC9XVEZTdHJpbmcuaD4nXSwKICAgICAg
ICAgJ1BBTDo6U2Vzc2lvbklEJzogWyc8cGFsL1Nlc3Npb25JRC5oPiddLAorICAgICAgICAnV2Vi
Q29yZTo6QXJjRGF0YSc6IFsnPFdlYkNvcmUvSW5saW5lUGF0aERhdGEuaD4nXSwKICAgICAgICAg
J1dlYkNvcmU6OkF1dG9wbGF5RXZlbnRGbGFncyc6IFsnPFdlYkNvcmUvQXV0b3BsYXlFdmVudC5o
PiddLAorICAgICAgICAnV2ViQ29yZTo6QmV6aWVyQ3VydmVEYXRhJzogWyc8V2ViQ29yZS9Jbmxp
bmVQYXRoRGF0YS5oPiddLAorICAgICAgICAnV2ViQ29yZTo6QmxlbmRNb2RlJzogWyc8V2ViQ29y
ZS9HcmFwaGljc1R5cGVzLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpCcm93c2luZ0NvbnRleHRH
cm91cFN3aXRjaERlY2lzaW9uJzogWyc8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+J10sCiAg
ICAgICAgICdXZWJDb3JlOjpDT0VQRGlzcG9zaXRpb24nOiBbJzxXZWJDb3JlL0Nyb3NzT3JpZ2lu
RW1iZWRkZXJQb2xpY3kuaD4nXSwKKyAgICAgICAgJ1dlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9y
JzogWyc8V2ViQ29yZS9HcmFwaGljc1R5cGVzLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpDcmVh
dGVOZXdHcm91cEZvckhpZ2hsaWdodCc6IFsnPFdlYkNvcmUvQXBwSGlnaGxpZ2h0Lmg+J10sCiAg
ICAgICAgICdXZWJDb3JlOjpET01QYXN0ZUFjY2Vzc1Jlc3BvbnNlJzogWyc8V2ViQ29yZS9ET01Q
YXN0ZUFjY2Vzcy5oPiddLAorICAgICAgICAnV2ViQ29yZTo6RGFzaEFycmF5RWxlbWVudCc6IFsn
PFdlYkNvcmUvRGFzaEFycmF5Lmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpEZXN0aW5hdGlvbkNv
bG9yU3BhY2UnOiBbJzxXZWJDb3JlL0NvbG9yU3BhY2UuaD4nXSwKKyAgICAgICAgJ1dlYkNvcmU6
OkRvY3VtZW50TWFya2VyTGluZVN0eWxlJzogWyc8V2ViQ29yZS9HcmFwaGljc1R5cGVzLmg+J10s
CiAgICAgICAgICdXZWJDb3JlOjpEb2N1bWVudE9yV29ya2VySWRlbnRpZmllcic6IFsnPFdlYkNv
cmUvU2VydmljZVdvcmtlclR5cGVzLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpEcmFnQXBwbGlj
YXRpb25GbGFncyc6IFsnPFdlYkNvcmUvRHJhZ0RhdGEuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6
OkRyYWdIYW5kbGluZ01ldGhvZCc6IFsnPFdlYkNvcmUvRHJhZ0FjdGlvbnMuaD4nXSwKQEAgLTcw
Niw5ICs3MTIsMTIgQEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUodHlwZSk6CiAgICAgICAgICdXZWJD
b3JlOjpGaWxlQ2hvb3NlclNldHRpbmdzJzogWyc8V2ViQ29yZS9GaWxlQ2hvb3Nlci5oPiddLAog
ICAgICAgICAnV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUnOiBbJzxX
ZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPiddLAogICAgICAgICAnV2ViQ29yZTo6Rm9u
dENoYW5nZXMnOiBbJzxXZWJDb3JlL0ZvbnRBdHRyaWJ1dGVDaGFuZ2VzLmg+J10sCisgICAgICAg
ICdXZWJDb3JlOjpGb250U21vb3RoaW5nTW9kZSc6IFsnPFdlYkNvcmUvR3JhcGhpY3NUeXBlcy5o
PiddLAogICAgICAgICAnV2ViQ29yZTo6RnJhbWVMb2FkVHlwZSc6IFsnPFdlYkNvcmUvRnJhbWVM
b2FkZXJUeXBlcy5oPiddLAogICAgICAgICAnV2ViQ29yZTo6R2VuZXJpY0N1ZURhdGEnOiBbJzxX
ZWJDb3JlL0luYmFuZEdlbmVyaWNDdWUuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OkdyYW1tYXJE
ZXRhaWwnOiBbJzxXZWJDb3JlL1RleHRDaGVja2VyQ2xpZW50Lmg+J10sCisgICAgICAgICdXZWJD
b3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2UnOiBbJzxXZWJDb3JlL0dseXBoQnVmZmVyTWVtYmVycy5o
PiddLAorICAgICAgICAnV2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlwaCc6IFsnPFdlYkNvcmUvR2x5
cGhCdWZmZXJNZW1iZXJzLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpIYXNJbnNlY3VyZUNvbnRl
bnQnOiBbJzxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6
OkhpZ2hsaWdodFJlcXVlc3RPcmlnaW5hdGVkSW5BcHAnOiBbJzxXZWJDb3JlL0FwcEhpZ2hsaWdo
dC5oPiddLAogICAgICAgICAnV2ViQ29yZTo6SGlnaGxpZ2h0VmlzaWJpbGl0eSc6IFsnPFdlYkNv
cmUvSGlnaGxpZ2h0VmlzaWJpbGl0eS5oPiddLApAQCAtNzIxLDEwICs3MzAsMTQgQEAgZGVmIGhl
YWRlcnNfZm9yX3R5cGUodHlwZSk6CiAgICAgICAgICdXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQn
OiBbJzxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6Okxhc3RO
YXZpZ2F0aW9uV2FzQXBwSW5pdGlhdGVkJzogWyc8V2ViQ29yZS9TZXJ2aWNlV29ya2VyQ2xpZW50
RGF0YS5oPiddLAogICAgICAgICAnV2ViQ29yZTo6TGVnYWN5Q0RNU2Vzc2lvbkNsaWVudDo6TWVk
aWFLZXlFcnJvckNvZGUnOiBbJzxXZWJDb3JlL0xlZ2FjeUNETVNlc3Npb24uaD4nXSwKKyAgICAg
ICAgJ1dlYkNvcmU6OkxpbmVDYXAnOiBbJzxXZWJDb3JlL0dyYXBoaWNzVHlwZXMuaD4nXSwKKyAg
ICAgICAgJ1dlYkNvcmU6OkxpbmVEYXRhJzogWyc8V2ViQ29yZS9JbmxpbmVQYXRoRGF0YS5oPidd
LAorICAgICAgICAnV2ViQ29yZTo6TGluZUpvaW4nOiBbJzxXZWJDb3JlL0dyYXBoaWNzVHlwZXMu
aD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OkxvY2tCYWNrRm9yd2FyZExpc3QnOiBbJzxXZWJDb3Jl
L0ZyYW1lTG9hZGVyVHlwZXMuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6Ok1lZGlhRW5naW5lU3Vw
cG9ydFBhcmFtZXRlcnMnOiBbJzxXZWJDb3JlL01lZGlhUGxheWVyLmg+J10sCiAgICAgICAgICdX
ZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcjo6SGFzQWN0aXZpdHknOiBbJzxXZWJD
b3JlL01lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpN
b3VzZUV2ZW50UG9saWN5JzogWyc8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPiddLAorICAgICAg
ICAnV2ViQ29yZTo6TW92ZURhdGEnOiBbJzxXZWJDb3JlL0lubGluZVBhdGhEYXRhLmg+J10sCiAg
ICAgICAgICdXZWJDb3JlOjpOZXR3b3JrVHJhbnNhY3Rpb25JbmZvcm1hdGlvbic6IFsnPFdlYkNv
cmUvTmV0d29ya0xvYWRJbmZvcm1hdGlvbi5oPiddLAogICAgICAgICAnV2ViQ29yZTo6UGFzdGVi
b2FyZEN1c3RvbURhdGEnOiBbJzxXZWJDb3JlL1Bhc3RlYm9hcmQuaD4nXSwKICAgICAgICAgJ1dl
YkNvcmU6OlBhc3RlYm9hcmRJbWFnZSc6IFsnPFdlYkNvcmUvUGFzdGVib2FyZC5oPiddLApAQCAt
NzQwLDYgKzc1Myw3IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgogICAgICAgICAnV2Vi
Q29yZTo6UG9saWN5Q2hlY2tJZGVudGlmaWVyJzogWyc8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVz
Lmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24nOiBbJzxXZWJDb3Jl
L0ltYWdlQnVmZmVyQmFja2VuZC5oPiddLAogICAgICAgICAnV2ViQ29yZTo6UHJvY2Vzc0lkZW50
aWZpZXInOiBbJzxXZWJDb3JlL1Byb2Nlc3NJZGVudGlmaWVyLmg+J10sCisgICAgICAgICdXZWJD
b3JlOjpRdWFkQ3VydmVEYXRhJzogWyc8V2ViQ29yZS9JbmxpbmVQYXRoRGF0YS5oPiddLAogICAg
ICAgICAnV2ViQ29yZTo6UmVjZW50U2VhcmNoJzogWyc8V2ViQ29yZS9TZWFyY2hQb3B1cE1lbnUu
aD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OlJlcXVlc3RTdG9yYWdlQWNjZXNzUmVzdWx0JzogWyc8
V2ViQ29yZS9Eb2N1bWVudFN0b3JhZ2VBY2Nlc3MuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OlJv
dXRlU2hhcmluZ1BvbGljeSc6IFsnPFdlYkNvcmUvQXVkaW9TZXNzaW9uLmg+J10sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggY2I2YWZhYmIxNTVlNGIxMGQ3M2Y0OTBlNmM2OTYxZTYyZmRlYTBi
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlNo
YXJlZE1lbW9yeS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KLSNpbmNsdWRl
IDx3dGYvQXRvbWljcy5oPgotI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi0vLyBUaGlzIGlzIGEgc2tlbGV0b24gb25seSB1c2VkIGJ5IHRoZSBEaXNw
bGF5TGlzdFdyaXRlckhhbmRsZSAmIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlIHN1YmNsYXNzZXMu
Ci1jbGFzcyBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJl
ZERpc3BsYXlMaXN0SGFuZGxlPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U2hhcmVkRGlzcGxh
eUxpc3RIYW5kbGUoKSA9IGRlZmF1bHQ7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBo
ZWFkZXJTaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByb3VuZFVwVG9NdWx0aXBsZU9mPGFs
aWdub2Yoc3RkOjptYXhfYWxpZ25fdCk+KHNpemVvZihEaXNwbGF5TGlzdFNoYXJlZE1lbW9yeUhl
YWRlcikpOwotICAgIH0KLQotICAgIFNoYXJlZE1lbW9yeSYgc2hhcmVkTWVtb3J5KCkgeyByZXR1
cm4gbV9zaGFyZWRNZW1vcnkuZ2V0KCk7IH0KLSAgICBjb25zdCBTaGFyZWRNZW1vcnkmIHNoYXJl
ZE1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkTWVtb3J5LmdldCgpOyB9Ci0KLSAgICBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllcigpIGNv
bnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQotICAgIHVpbnQ4X3QqIGRhdGEoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Kj4oc2hhcmVkTWVtb3J5KCkuZGF0YSgpKTsgfQot
Ci0gICAgdWludDY0X3QgdW5yZWFkQnl0ZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGhlYWRl
cigpLnVucmVhZEJ5dGVzLmxvYWQoKTsKLSAgICB9Ci0KLSAgICBlbnVtIGNsYXNzIFdhaXRpbmdT
dGF0dXMgOiB1aW50OF90IHsKLSAgICAgICAgTm90V2FpdGluZywKLSAgICAgICAgV2FpdGluZywK
LSAgICAgICAgUmVzdW1pbmcKLSAgICB9OwotICAgIHVzaW5nIFdhaXRpbmdTdGF0dXNTdG9yYWdl
VHlwZSA9IHN0ZDo6dW5kZXJseWluZ190eXBlX3Q8V2FpdGluZ1N0YXR1cz47Ci0KLSAgICBzdHJ1
Y3QgUmVzdW1lUmVhZGluZ0luZm9ybWF0aW9uIHsKLSAgICAgICAgdWludDY0X3Qgb2Zmc2V0Owot
ICAgICAgICB1aW50NjRfdCBkZXN0aW5hdGlvbjsKLSAgICB9OwotCi1wcm90ZWN0ZWQ6Ci0gICAg
U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJ
ZGVudGlmaWVyIGlkZW50aWZpZXIsIFJlZjxTaGFyZWRNZW1vcnk+JiYgc2hhcmVkTWVtb3J5KQot
ICAgICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQotICAgICAgICAsIG1fc2hhcmVkTWVt
b3J5KFdURk1vdmUoc2hhcmVkTWVtb3J5KSkKLSAgICB7Ci0gICAgfQotCi0gICAgc3RydWN0IERp
c3BsYXlMaXN0U2hhcmVkTWVtb3J5SGVhZGVyIHsKLSAgICAgICAgRGlzcGxheUxpc3RTaGFyZWRN
ZW1vcnlIZWFkZXIoKSA9IGRlbGV0ZTsKLSAgICAgICAgfkRpc3BsYXlMaXN0U2hhcmVkTWVtb3J5
SGVhZGVyKCkgPSBkZWxldGU7Ci0KLSAgICAgICAgQXRvbWljPHVpbnQ2NF90PiB1bnJlYWRCeXRl
czsKLSAgICAgICAgUmVzdW1lUmVhZGluZ0luZm9ybWF0aW9uIHJlc3VtZVJlYWRpbmdJbmZvOwot
ICAgICAgICBBdG9taWM8V2FpdGluZ1N0YXR1c1N0b3JhZ2VUeXBlPiB3YWl0aW5nU3RhdHVzOwot
ICAgIH07Ci0KLSAgICBjb25zdCBEaXNwbGF5TGlzdFNoYXJlZE1lbW9yeUhlYWRlciYgaGVhZGVy
KCkgY29uc3QgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRGlzcGxheUxpc3RTaGFy
ZWRNZW1vcnlIZWFkZXIqPihkYXRhKCkpOyB9Ci0gICAgRGlzcGxheUxpc3RTaGFyZWRNZW1vcnlI
ZWFkZXImIGhlYWRlcigpIHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0U2hh
cmVkTWVtb3J5SGVhZGVyKj4oZGF0YSgpKTsgfQotCi1wcml2YXRlOgotICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBtX2lkZW50aWZpZXI7Ci0gICAgUmVmPFNo
YXJlZE1lbW9yeT4gbV9zaGFyZWRNZW1vcnk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViS2l0
OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6V2FpdGluZ1N0YXR1cz4gewotICAgIHVzaW5nIHZh
bHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgICAgIFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5k
bGU6OldhaXRpbmdTdGF0dXMsCi0gICAgICAgIFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5k
bGU6OldhaXRpbmdTdGF0dXM6Ok5vdFdhaXRpbmcsCi0gICAgICAgIFdlYktpdDo6U2hhcmVkRGlz
cGxheUxpc3RIYW5kbGU6OldhaXRpbmdTdGF0dXM6OldhaXRpbmcsCi0gICAgICAgIFdlYktpdDo6
U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OldhaXRpbmdTdGF0dXM6OlJlc3VtaW5nCi0gICAgPjsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5jcHAKaW5kZXggOWIwZjA1ZmEyMjZkNDI3MjY4MDFkNjVjMGM1OGVi
NDFiZTcwNGY3Zi4uOThmZGY0OWQwYjgyYTI2ZjI3MTQzOGQ3ODU5YTQxY2U0ZmFmYjVmMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCkBAIC01
OSw3ICs1OSw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9JREJHZXRSZXN1bHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU0RPTUV4Y2Vw
dGlvbkhhbmRsaW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9MZW5ndGguaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0xlbmd0aEJveC5oPgpAQCAtNDE2LDYgKzQxNSw3IEBAIGJvb2wgQXJndW1lbnRDb2Rl
cjxFdmVudFRyYWNraW5nUmVnaW9ucz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBFdmVudFRy
YWNraW5nCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+
CiB2b2lkIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+OjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybWF0aW9uTWF0
cml4KQogewogICAgIGVuY29kZXIgPDwgdHJhbnNmb3JtYXRpb25NYXRyaXgubTExKCk7CkBAIC00
OTcsNiArNDk3LDkgQEAgYm9vbCBBcmd1bWVudENvZGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFRyYW5zZm9ybWF0aW8KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6
ZW5jb2RlPEVuY29kZXI+KEVuY29kZXImLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwor
dGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZW5jb2Rl
PFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisKIHZvaWQgQXJndW1lbnRDb2RlcjxMaW5lYXJUaW1p
bmdGdW5jdGlvbj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBMaW5lYXJUaW1pbmdG
dW5jdGlvbiYgdGltaW5nRnVuY3Rpb24pCiB7CiAgICAgZW5jb2RlciA8PCB0aW1pbmdGdW5jdGlv
bi50eXBlKCk7CkBAIC02MzksNiArNjQyLDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPFZpZXdwb3J0
QXR0cmlidXRlcz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWaWV3cG9ydEF0dHJpYnUKICAg
ICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxWaWV3cG9ydEF0dHJpYnV0ZXM+OjpkZWNvZGUo
ZGVjb2Rlciwgdmlld3BvcnRBdHRyaWJ1dGVzKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRW5j
b2Rlcj4KIHZvaWQgQXJndW1lbnRDb2RlcjxJbnRSZWN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IEludFJlY3QmIGludFJlY3QpCiB7CiAgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxJ
bnRSZWN0Pjo6ZW5jb2RlKGVuY29kZXIsIGludFJlY3QpOwpAQCAtNjU3LDYgKzY2MSw5IEBAIHN0
ZDo6b3B0aW9uYWw8SW50UmVjdD4gQXJndW1lbnRDb2RlcjxJbnRSZWN0Pjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKK3RlbXBsYXRlIHZvaWQgQXJndW1l
bnRDb2RlcjxJbnRSZWN0Pjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXImLCBjb25zdCBJbnRSZWN0
Jik7Cit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8SW50UmVjdD46OmVuY29kZTxTdHJlYW1D
b25uZWN0aW9uRW5jb2Rlcj4oU3RyZWFtQ29ubmVjdGlvbkVuY29kZXImLCBjb25zdCBJbnRSZWN0
Jik7CisKIHZvaWQgQXJndW1lbnRDb2RlcjxSZWNlbnRTZWFyY2g+OjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgUmVjZW50U2VhcmNoJiByZWNlbnRTZWFyY2gpCiB7CiAgICAgZW5jb2Rl
ciA8PCByZWNlbnRTZWFyY2guc3RyaW5nIDw8IHJlY2VudFNlYXJjaC50aW1lOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAppbmRleCA2NTU5NzUwNWFiMzM5
OGI5ODdkMGI3NWEzMzdmNTQyZDIxNDQ4OTQyLi5jOWJlMDY2ZDAxNmYzODQzMWNkZTA2M2E0ODYy
NjY1OTI4ZTgzNDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJvdW5kZWRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GbG9hdFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbmRleGVk
REIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lucHV0TW9kZS5oPgpAQCAtMjgxLDYgKzI4Miw3IEBA
IHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RXZlbnRUcmFja2luZ1Jl
Z2lvbnM+IHsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXg+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgog
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3Jt
YXRpb25NYXRyaXgmKTsKICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2Rl
KERlY29kZXImLCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogfTsKQEAgLTMyNyw2
ICszMjksNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlZpZXdw
b3J0QXR0cmlidXRlcz4gewogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpJbnRSZWN0PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAg
ICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3Jl
OjpJbnRSZWN0Jik7CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6SW50UmVjdD4g
ZGVjb2RlKERlY29kZXImKTsKQEAgLTgwOCw2ICs4MTEsNTIgQEAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4+IHsKIAogI2VuZGlmCiAK
K0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmUp
CitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0
b3JlKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
VHJhbnNsYXRlKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Um90YXRlKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2NhbGUpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRDVE0pCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTSkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09E
RVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcikKK0RFRklORV9TSU1Q
TEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNv
bG9yKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0U3Ryb2tlVGhpY2tuZXNzKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcCkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luKQorREVGSU5FX1NJTVBMRV9BUkdVTUVO
VF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdCkKK0RFRklORV9TSU1Q
TEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93KQorREVG
SU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcCkKK0RF
RklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQp
CitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlw
VG9JbWFnZUJ1ZmZlcikKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkVuZENsaXBUb0RyYXdpbmdDb21tYW5kcykKK0RFRklORV9TSU1QTEVfQVJHVU1F
TlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcikKK0RFRklORV9T
SU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFn
ZSkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdQYXR0ZXJuKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcikKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09E
RVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyKQorREVGSU5FX1NJ
TVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3QpCitERUZJ
TkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZSkK
K0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZSkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09E
RVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0KQorREVGSU5FX1NJTVBMRV9BUkdVTUVO
VF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbExpbmUpCitERUZJTkVfU0lNUExFX0FS
R1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQXJjKQorREVGSU5FX1NJTVBM
RV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFF1YWRDdXJ2ZSkKK0RF
RklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxCZXpp
ZXJDdXJ2ZSkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxFbGxpcHNlKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9D
T0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdCkKK0RFRklORV9TSU1QTEVfQVJH
VU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUxpbmUpCitERUZJTkVfU0lN
UExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VBcmMpCitERUZJ
TkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VRdWFk
Q3VydmUpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTdHJva2VCZXppZXJDdXJ2ZSkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2UpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NP
REVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3QpCitERUZJTkVfU0lNUExFX0FSR1VN
RU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm4pCitERUZJ
TkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQ
YXR0ZXJuKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNoQ29udGV4dCkKKwogfSAvLyBuYW1lc3BhY2UgSVBD
CiAKIG5hbWVzcGFjZSBXVEYgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4
dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggZDllMmU4ZmZlZWM2YzhiOTVjZmQx
MzlhMGYwZmFmMGM5NTRlM2Q3Ny4uNzU5MjgxMjMzOGM5MzBjMzllYTMyNGY5ZmMxZWFjNWQxMGVj
ZTk3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXMudHh0CkBAIC0yNCw4ICsyNCw4IEBACiBHUFVQcm9jZXNzL0dQVVByb2Nl
c3MuY3BwCiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCiBHUFVQcm9j
ZXNzL0dQVVByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCi1HUFVQcm9jZXNzL2dyYXBoaWNz
L0Rpc3BsYXlMaXN0UmVhZGVySGFuZGxlLmNwcAogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcAorR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHQuY3BwCiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNw
cAogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmNwcAogR1BVUHJvY2Vz
cy9ncmFwaGljcy9TY29wZWRSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmNwcApAQCAtNjA3LDEw
ICs2MDcsMTAgQEAgV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9NZWRpYURldmljZVNhbmRib3hFeHRl
bnNpb25zLmNwcAogV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXIuY3BwCiAKIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNw
cAotV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvRGlzcGxheUxpc3RXcml0ZXJIYW5kbGUuY3BwCiBX
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQu
Y3BwCiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
RnVuY3Rpb25zR2VuZXJhdGVkLmNwcAogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eS5jcHAKK1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dFByb3h5LmNwcAogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcAogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVz
b3VyY2VDYWNoZVByb3h5LmNwcAogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvQXVkaW9UcmFja1ByaXZh
dGVSZW1vdGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMTFlNzI5Njg0ZTRhMmFkZjBi
NWNiODkzYWQ2NzkxZDkwMDU4MjYwNS4uN2UyM2FiNDQ4ODQwMmE5NDY1NWJiNmQ0YWQxMzcyYmNl
NDZiZmIwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBi
L1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtNzMwLDYgKzczMCw3IEBAIFJlbW90
ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5lck1lc3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90ZUF1ZGlvU2Vz
c2lvbk1lc3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90ZUF1ZGlvU2Vzc2lvblByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcAogUmVtb3RlQXVkaW9Tb3VyY2VQcm92aWRlck1hbmFnZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwCitSZW1vdGVHcmFwaGljc0NvbnRleHRNZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVJ
bWFnZURlY29kZXJBVkZQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90ZUltYWdlRGVjb2Rl
ckFWRk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVNZWRpYVJlY29yZGVyTWVzc2Fn
ZVJlY2VpdmVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggM2ExMTcyY2JlZDJkYzIwYWQyNTE3NjRlMjJiNjA3NTI0Njc2Y2MyNS4u
ZDI4NmFjMmRmOWQyYWYyYTk5MDY4Mzg2MjNkMDNhYzYyYTUwMTQ5NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zLDcgKzMsNyBAQAog
CWFyY2hpdmVWZXJzaW9uID0gMTsKIAljbGFzc2VzID0gewogCX07Ci0Jb2JqZWN0VmVyc2lvbiA9
IDUyOworCW9iamVjdFZlcnNpb24gPSA1NDsKIAlvYmplY3RzID0gewogCiAvKiBCZWdpbiBQQlhB
Z2dyZWdhdGVUYXJnZXQgc2VjdGlvbiAqLwpAQCAtMjAyOSwxMSArMjAyOSw4IEBACiAJCUU1QkVG
NjgyMjEzMEM0ODAwMEYzMTExMSAvKiBXZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25JT1Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1QkVGNjgw
MjEzMEM0N0YwMEYzMTExMSAvKiBXZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25JT1MuaCAq
LzsgfTsKIAkJRTVDQjA3REMyMEUxNjc4RjAwMjJDMTgzIC8qIFdLRm9ybUNvbG9yQ29udHJvbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTVDQjA3REEy
MEUxNjc4RjAwMjJDMTgzIC8qIFdLRm9ybUNvbG9yQ29udHJvbC5oICovOyB9OwogCQlFRDgyQTdG
MjEyOEM2RkFGMDA0NDc3QjMgLyogV0tCdW5kbGVQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyMkYwRkYxMjg5RkNEOTAwODVFNzRG
IC8qIFdLQnVuZGxlUGFnZU92ZXJsYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQlGNDA5NENCRDI1NTMwNTNEMDAzRDczRTMgLyogRGlzcGxheUxp
c3RSZWFkZXJIYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY0MDk0Q0JCMjU1MzA0QUYwMDNENzNFMyAvKiBEaXNwbGF5TGlzdFJlYWRlckhhbmRs
ZS5oICovOyB9OwotCQlGNDA5NENCRTI1NTMwNTQwMDAzRDczRTMgLyogRGlzcGxheUxpc3RXcml0
ZXJIYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0MDk0Q0I5MjU1MzA0N0UwMDNENzNFMyAvKiBEaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5oICov
OyB9OwogCQlGNDA5QkExODFFNkU2NEJDMDA5REEyOEUgLyogV0tEcmFnRGVzdGluYXRpb25BY3Rp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MDlC
QTE3MUU2RTY0QjMwMDlEQTI4RSAvKiBXS0RyYWdEZXN0aW5hdGlvbkFjdGlvbi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0MEJCQjQxMjU3RkY0
NkUwMDY3NDYzQSAvKiBHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQwQkJCNDAyNTdGRjQ2RTAw
Njc0NjNBIC8qIEdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzLmggKi87IH07Ci0JCUY0
MTRDRTJEMjY5REU2RUEwMEJEMjE2QSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MTRDRTJDMjY5
REU2RUEwMEJEMjE2QSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGUuaCAqLzsgfTsKIAkJ
RjQyRDYzNDEyMkEwRUZERjAwRDJGQjNBIC8qIFdlYkF1dG9jb3JyZWN0aW9uRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQyRDYzM0YyMkEwRUZE
MzAwRDJGQjNBIC8qIFdlYkF1dG9jb3JyZWN0aW9uRGF0YS5oICovOyB9OwogCQlGNDMwRTk0MjIy
NDczMzVGMDA1RkUwNTMgLyogV2Vic2l0ZU1ldGFWaWV3cG9ydFBvbGljeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQzMEU5NDEyMjQ3MzJBOTAwNUZF
MDUzIC8qIFdlYnNpdGVNZXRhVmlld3BvcnRQb2xpY3kuaCAqLzsgfTsKIAkJRjQzMEU5NDQyMjQ3
M0RGRjAwNUZFMDUzIC8qIFdlYkNvbnRlbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDMwRTk0MzIyNDczREI4MDA1RkUwNTMgLyogV2ViQ29u
dGVudE1vZGUuaCAqLzsgfTsKQEAgLTIwNDYsMTMgKzIwNDMsMTYgQEAKIAkJRjQ0MjkxOTYxRkE1
OTQyQTAwMkNDOTNFIC8qIF9XS0F0dGFjaG1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ0MjkxOTUxRkE1OTQyQTAwMkNDOTNFIC8q
IF9XS0F0dGFjaG1lbnRJbnRlcm5hbC5oICovOyB9OwogCQlGNDQ4MTU2NDIzODc4MjAwMDA5ODI2
NTcgLyogV0tEZWZlcnJpbmdHZXN0dXJlUmVjb2duaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ0ODE1NjIyMzg3ODIwMDAwOTgyNjU3IC8qIFdL
RGVmZXJyaW5nR2VzdHVyZVJlY29nbml6ZXIuaCAqLzsgfTsKIAkJRjQ0REZFQjIxRTlFNzUyRjAw
MzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY0NERGRUIwMUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJY29uVXRp
bGl0aWVzLmggKi87IH07CisJCUY0NTE3RDdCMjZGQkNEMzkwMDRDODQ3NSAvKiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kTWVzc2FnZXNSZXBsaWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNDUxN0Q3OTI2RkJDRDM4MDA0Qzg0NzUgLyogUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZE1lc3NhZ2VzUmVwbGllcy5oICovOyB9OworCQlGNDUxN0Q3QzI2RkJDRDM5
MDA0Qzg0NzUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDUxN0Q3QTI2RkJDRDM4MDA0Qzg0
NzUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmggKi87IH07CisJCUY0NTFDMEZF
MjcwM0IyNjMwMDJCQTAzQiAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ4QkI4REQyNkY5NjM1RDAw
MUMxQzQwIC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5LmggKi87IH07CiAJCUY0NjYwQkMy
MjVERUYwODEwMEU4NjU5OCAvKiBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDY2MEJDMTI1REVGMDgxMDBFODY1
OTggLyogUGFzdGVib2FyZEFjY2Vzc0ludGVudC5oICovOyB9OwogCQlGNDg1NzBBMzI2NDRCRUM1
MDBDMDVGNzEgLyogVGltZW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjQ4NTcwQTIyNjQ0QkVDNDAwQzA1RjcxIC8qIFRpbWVvdXQuaCAqLzsgfTsK
IAkJRjQ4RDJBODUyMTU4M0E3RTAwQzY3NTJCIC8qIEFwcEtpdFNQSS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ4RDJBODQyMTU4M0EwMjAwQzY3NTJC
IC8qIEFwcEtpdFNQSS5oICovOyB9OworCQlGNDkyRkI2MDI3MDYxNDlBMDA1NUU0RDEgLyogU3Ry
ZWFtTWVzc2FnZVJlY2VpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNDkyRkI1RjI3MDYxNDk5MDA1NUU0RDEgLyogU3RyZWFtTWVzc2FnZVJlY2Vp
dmVyLmggKi87IH07CiAJCUY0OTZBNDMxMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVy
YWN0aW9uU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY0OTZBNDJGMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUu
aCAqLzsgfTsKIAkJRjQ5NzRFNzYyNjVFQ0JCQzAwQjQ5QjhDIC8qIFdLUmV2ZWFsSXRlbVByZXNl
bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ0
NkVERUYyNjVFQjJCMDAwMzFEQThGIC8qIFdLUmV2ZWFsSXRlbVByZXNlbnRlci5oICovOyB9Owog
CQlGNDk3NUNGMjI2MjRCODBBMDAzQzYyNkUgLyogV0tRdWlja0xvb2tQcmV2aWV3Q29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ5NzVD
RjEyNjI0QjgwQTAwM0M2MjZFIC8qIFdLUXVpY2tMb29rUHJldmlld0NvbnRyb2xsZXIuaCAqLzsg
fTsKLQkJRjRBNkQ2QkMyNTRDQTNFOTAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEE2RDZC
QjI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCAqLzsgfTsKIAkJ
RjRCQTMzRjIyNTc1N0U4OTAwMEEzQ0U4IC8qIFdLSW1hZ2VBbmFseXNpc0dlc3R1cmVSZWNvZ25p
emVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEJB
MzNGMDI1NzU3RTg5MDAwQTNDRTggLyogV0tJbWFnZUFuYWx5c2lzR2VzdHVyZVJlY29nbml6ZXIu
aCAqLzsgfTsKIAkJRjRDQjA5RTUyMjVENUEwOTAwODkxNDg3IC8qIFdlYnNpdGVNZWRpYVNvdXJj
ZVBvbGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjRDQjA5RTQyMjVENUEwMzAwODkxNDg3IC8qIFdlYnNpdGVNZWRpYVNvdXJjZVBvbGljeS5oICov
OyB9OwogCQlGNENGMUU5RDI1RTQwRENDMDAwRjlENzMgLyogR2VzdHVyZVJlY29nbml6ZXJDb25z
aXN0ZW5jeUVuZm9yY2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNENGMUU5QjI1RTQwRENDMDAwRjlENzMgLyogR2VzdHVyZVJlY29nbml6ZXJDb25z
aXN0ZW5jeUVuZm9yY2VyLmggKi87IH07CkBAIC02MDg0LDE1ICs2MDg0LDEwIEBACiAJCUVDQTY4
MEQzMUU2OTA0QjUwMDczMUQyMCAvKiBFeHRyYVByaXZhdGVTeW1ib2xzRm9yVEFQSS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRyYVByaXZhdGVTeW1ib2xzRm9yVEFQSS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQ0JGQzFEQjFFNkE0RDY2MDAwMzAwQzcg
LyogRXh0cmFQdWJsaWNTeW1ib2xzRm9yVEFQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRyYVB1Ymxp
Y1N5bWJvbHNGb3JUQVBJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYwMzY5Nzg3
MTVGNEJGMDUwMEMzQTgwRSAvKiBXZWJDb2xvclBpY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb2xvclBpY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUY0MDk0Q0I5MjU1MzA0N0UwMDNENzNFMyAvKiBEaXNwbGF5TGlzdFdyaXRl
ckhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGNDA5NENCQTI1NTMwNDdFMDAzRDczRTMgLyogRGlz
cGxheUxpc3RXcml0ZXJIYW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheUxpc3RX
cml0ZXJIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGNDA5NENCQjI1
NTMwNEFGMDAzRDczRTMgLyogRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRjQwOTRDQkMyNTUzMDRBRjAwM0Q3M0UzIC8qIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlMaXN0UmVhZGVySGFuZGxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQwOUJBMTcxRTZFNjRCMzAwOURBMjhFIC8qIFdLRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdL
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0
MEJCQjQwMjU3RkY0NkUwMDY3NDYzQSAvKiBHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDBEMUI2ODIyMEJEQzBGMDBCNDlBMDEgLyog
V2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkF1dG9jb3JyZWN0
aW9uQ29udGV4dC5oOyBwYXRoID0gaW9zL1dlYkF1dG9jb3JyZWN0aW9uQ29udGV4dC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDEwNTY2MTIxMzA2OTlBMDA5MjI4MUQgLyogQVBJ
QXR0YWNobWVudENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQVBJQXR0YWNobWVudENv
Y29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGNDE0Q0UyQzI2OURFNkVBMDBC
RDIxNkEgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGNDJENjMzRjIyQTBFRkQzMDBEMkZCM0EgLyogV2ViQXV0b2NvcnJlY3Rpb25EYXRhLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkF1dG9jb3JyZWN0aW9uRGF0YS5oOyBw
YXRoID0gaW9zL1dlYkF1dG9jb3JyZWN0aW9uRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGNDJENjM0MDIyQTBFRkQzMDBEMkZCM0EgLyogV2ViQXV0b2NvcnJlY3Rpb25EYXRh
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViQXV0b2NvcnJl
Y3Rpb25EYXRhLm1tOyBwYXRoID0gaW9zL1dlYkF1dG9jb3JyZWN0aW9uRGF0YS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQzMEU5NDEyMjQ3MzJBOTAwNUZFMDUzIC8qIFdlYnNp
dGVNZXRhVmlld3BvcnRQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0ZU1ldGFWaWV3cG9y
dFBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjExNCwxNSArNjEwOSwy
MyBAQAogCQlGNDQ4MTU2MzIzODc4MjAwMDA5ODI2NTcgLyogV0tEZWZlcnJpbmdHZXN0dXJlUmVj
b2duaXplci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLRGVmZXJyaW5nR2VzdHVyZVJlY29n
bml6ZXIubW07IHBhdGggPSBpb3MvV0tEZWZlcnJpbmdHZXN0dXJlUmVjb2duaXplci5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ0REZFQjAxRTlFNzUyRjAwMzhEMTk2IC8qIFdl
Ykljb25VdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViSWNv
blV0aWxpdGllcy5oOyBwYXRoID0gaW9zL1dlYkljb25VdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRjQ0REZFQjExRTlFNzUyRjAwMzhEMTk2IC8qIFdlYkljb25VdGls
aXRpZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJJY29u
VXRpbGl0aWVzLm1tOyBwYXRoID0gaW9zL1dlYkljb25VdGlsaXRpZXMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUY0NTE3RDc3MjZGQkNDRTQwMDRDODQ3NSAvKiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlUmVjZWl2ZXIuY3BwOyBw
YXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2Fn
ZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJRjQ1
MTdENzkyNkZCQ0QzODAwNEM4NDc1IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlc1Jl
cGxpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVtb3RlUmVuZGVyaW5n
QmFja2VuZE1lc3NhZ2VzUmVwbGllcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXNSZXBsaWVzLmg7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CisJCUY0NTE3RDdBMjZGQkNEMzgwMDRDODQ3NSAvKiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmg7IHBhdGggPSBEZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0g
QlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQlGNDUxQzEwMDI3MDNEODUzMDAyQkEwM0IgLyogUmVt
b3RlR3JhcGhpY3NDb250ZXh0Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZUdyYXBoaWNzQ29udGV4
dC5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ2NjBCQzEyNURF
RjA4MTAwRTg2NTk4IC8qIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGFzdGVib2FyZEFjY2Vzc0ludGVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
NDdBMDUxNjI2ODI3QTA5MDA3RTVDRjIgLyogUXVpY2tMb29rUHJldmlld0FjdGl2aXR5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFF1aWNrTG9va1ByZXZpZXdBY3Rpdml0eS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGNDg1NzBBMjI2NDRCRUM0MDBDMDVGNzEgLyogVGltZW91dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW1lb3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUY0OEJCOEREMjZGOTYzNUQwMDFDMUM0MCAvKiBSZW1vdGVHcmFwaGljc0Nv
bnRleHRQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNDhCQjhERTI2Rjk2MzVEMDAxQzFDNDAg
LyogUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVt
b3RlR3JhcGhpY3NDb250ZXh0UHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGNDhCQjhERjI2Rjk2MzkyMDAxQzFDNDAgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbW90ZUdyYXBoaWNzQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGNDhCQjhFMDI2Rjk2MzkyMDAxQzFDNDAgLyogUmVtb3RlR3JhcGhpY3NDb250
ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUdyYXBoaWNzQ29udGV4dC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OEQyQTg0MjE1ODNBMDIwMEM2NzUyQiAvKiBB
cHBLaXRTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwS2l0U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUY0OTJGQjVGMjcwNjE0OTkwMDU1RTREMSAvKiBTdHJlYW1NZXNzYWdlUmVj
ZWl2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyZWFtTWVzc2FnZVJl
Y2VpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTZBNDJGMUY1OEEyNzIw
MDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRHJh
Z0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTZBNDMwMUY1OEEyNzIwMDRD
MTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW07IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFj
dGlvblN0YXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDk3NUNGMTI2MjRC
ODBBMDAzQzYyNkUgLyogV0tRdWlja0xvb2tQcmV2aWV3Q29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXS1F1aWNrTG9va1ByZXZpZXdDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUY0OTc1Q0YzMjYyNEI5MTgwMDNDNjI2RSAvKiBXS1F1aWNrTG9va1ByZXZpZXdD
b250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tRdWlja0xvb2tQcmV2aWV3Q29u
dHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjRBNkQ2QkIyNTRDQTNF
OTAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNo
YXJlZERpc3BsYXlMaXN0SGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0
QTdDRTg0MjY2N0VCNEUwMDIyODY4NSAvKiBUZXh0UmVjb2duaXRpb25VcGRhdGVSZXN1bHQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGV4dFJlY29nbml0aW9uVXBkYXRlUmVzdWx0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUY0QUM2NTVFMjJBMzE0MEUwMEEwNTYwNyAvKiBXZWJQcmVmZXJl
bmNlc0RlZmF1bHRWYWx1ZXNJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBXZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJT1MubW07IHBhdGggPSBpb3MvV2Vi
UHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGNEIzNzhEMDIxRERCQkFCMDA5NUEzNzggLyogV2ViVW5kb1N0ZXBJRC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJVbmRvU3RlcElELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02
OTQ5LDcgKzY5NTIsNiBAQAogCQkJCTFBNjQyMEUzMTJEQ0UyRkYwMENBQUUyQyAvKiBTaGFyZWFi
bGVCaXRtYXAuaCAqLywKIAkJCQk1MTIxNzQ1RTE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxl
UmVzb3VyY2UuY3BwICovLAogCQkJCTUxMjE3NDVGMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFi
bGVSZXNvdXJjZS5oICovLAotCQkJCUY0QTZENkJCMjU0Q0EzRTkwMEI2NUZBQSAvKiBTaGFyZWRE
aXNwbGF5TGlzdEhhbmRsZS5oICovLAogCQkJCTgzMTNGN0VBMUY3REFFMDQwMEI5NDRFQiAvKiBT
aGFyZWRTdHJpbmdIYXNoU3RvcmUuY3BwICovLAogCQkJCTgzMTNGN0U5MUY3REFFMDMwMEI5NDRF
QiAvKiBTaGFyZWRTdHJpbmdIYXNoU3RvcmUuaCAqLywKIAkJCQk4MzEzRjdFODFGN0RBRTAzMDBC
OTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmNwcCAqLywKQEAgLTczMzYsNiArNzMzOCw3
IEBACiAJCQkJN0I3MzEyMzkyNUNDODUyNTAwM0IyNzk2IC8qIFN0cmVhbUNvbm5lY3Rpb25FbmNv
ZGVyLmggKi8sCiAJCQkJN0I3MzEyMzIyNUNDODUyMzAwM0IyNzk2IC8qIFN0cmVhbUNvbm5lY3Rp
b25Xb3JrUXVldWUuY3BwICovLAogCQkJCTdCNzMxMjM1MjVDQzg1MjQwMDNCMjc5NiAvKiBTdHJl
YW1Db25uZWN0aW9uV29ya1F1ZXVlLmggKi8sCisJCQkJRjQ5MkZCNUYyNzA2MTQ5OTAwNTVFNEQx
IC8qIFN0cmVhbU1lc3NhZ2VSZWNlaXZlci5oICovLAogCQkJCTdCNzMxMjM3MjVDQzg1MjQwMDNC
Mjc5NiAvKiBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmNwcCAqLywKIAkJCQk3QjczMTIzODI1Q0M4
NTI0MDAzQjI3OTYgLyogU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5oICovLAogCQkJCTFBRTAwRDY5
MTgzMjdDMTIwMDA4N0RENyAvKiBTdHJpbmdSZWZlcmVuY2UuY3BwICovLApAQCAtOTA0Myw4ICs5
MDQ2LDYgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNzI3QTdG
MzMyNDA3ODUyNzAwNEQyOTMxIC8qIGNvY29hICovLAotCQkJCUY0MDk0Q0JBMjU1MzA0N0UwMDNE
NzNFMyAvKiBEaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5jcHAgKi8sCi0JCQkJRjQwOTRDQjkyNTUz
MDQ3RTAwM0Q3M0UzIC8qIERpc3BsYXlMaXN0V3JpdGVySGFuZGxlLmggKi8sCiAJCQkJN0I2NEMw
QjYyNTRDNUMyNTAwMDZCNEFGIC8qIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllci5oICovLAog
CQkJCTcyN0E3RjM5MjQwNzg4RjEwMDREMjkzMSAvKiBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUu
aCAqLywKIAkJCQk3MjdBN0YzNzI0MDc4OEYwMDA0RDI5MzEgLyogSW1hZ2VCdWZmZXJTaGFyZWFi
bGVCaXRtYXBCYWNrZW5kLmNwcCAqLywKQEAgLTkwNTUsNiArOTA1Niw4IEBACiAJCQkJN0I5MDQx
NjYyNTRBRkRFQjAwNkVFQjhDIC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuaCAqLywK
IAkJCQk3QjkwNDE2NzI1NEFGRTE3MDA2RUVCOEMgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eS5tZXNzYWdlcy5pbiAqLywKIAkJCQk3QkU3MjY1NzI1NzRGNjcyMDBFODVEOTggLyogUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUZ1bmN0aW9uc0dlbmVyYXRlZC5jcHAgKi8sCisJCQkJ
RjQ4QkI4REUyNkY5NjM1RDAwMUMxQzQwIC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5LmNw
cCAqLywKKwkJCQlGNDhCQjhERDI2Rjk2MzVEMDAxQzFDNDAgLyogUmVtb3RlR3JhcGhpY3NDb250
ZXh0UHJveHkuaCAqLywKIAkJCQk3MjdBN0Y0OTI0MDhBRUU2MDA0RDI5MzEgLyogUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5oICovLAogCQkJCTU1MDY0MDlEMjQwNzE2MDkwMEFBRTA0NSAvKiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwICovLAogCQkJCTU1MDY0MDlFMjQwNzE2MDkwMEFB
RTA0NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLywKQEAgLTkwNjksOSArOTA3
MiwxMCBAQAogCQk1NTA2NDBBMTI0MDcxQTI5MDBBQUUwNDUgLyogZ3JhcGhpY3MgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUY0MDk0Q0JDMjU1MzA0QUYw
MDNENzNFMyAvKiBEaXNwbGF5TGlzdFJlYWRlckhhbmRsZS5jcHAgKi8sCi0JCQkJRjQwOTRDQkIy
NTUzMDRBRjAwM0Q3M0UzIC8qIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlLmggKi8sCiAJCQkJNTVB
RDA5NDMyNDA4QTBFNjAwREU0RDJGIC8qIFBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXIuaCAqLywK
KwkJCQlGNDhCQjhFMDI2Rjk2MzkyMDAxQzFDNDAgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0LmNw
cCAqLywKKwkJCQlGNDhCQjhERjI2Rjk2MzkyMDAxQzFDNDAgLyogUmVtb3RlR3JhcGhpY3NDb250
ZXh0LmggKi8sCisJCQkJRjQ1MUMxMDAyNzAzRDg1MzAwMkJBMDNCIC8qIFJlbW90ZUdyYXBoaWNz
Q29udGV4dC5tZXNzYWdlcy5pbiAqLywKIAkJCQk3QjkwNDE2OTI1NEFGRUE3MDA2RUVCOEMgLyog
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwICovLAogCQkJCTdCOTA0MTZBMjU0QUZFQTcwMDZF
RUI4QyAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oICovLAogCQkJCTdCOTA0MTY4MjU0QUZF
QTcwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTC5tZXNzYWdlcy5pbiAqLywKQEAg
LTkwODIsNyArOTA4Niw2IEBACiAJCQkJNTUwNjQwQTMyNDA3MUE2MTAwQUFFMDQ1IC8qIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLywKIAkJCQk1NTA2NDBBNDI0MDcxQzIxMDBBQUUwNDUgLyog
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiAqLywKIAkJCQk0NjA4ODlGRjI2MUZB
OEE5MDBFMjUwMEQgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycy5o
ICovLAotCQkJCUY0MTRDRTJDMjY5REU2RUEwMEJEMjE2QSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kU3RhdGUuaCAqLywKIAkJCQk3MjZENTZERDI1M0E2NDgxMDAwMkVGOTAgLyogUmVtb3RlUmVz
b3VyY2VDYWNoZS5jcHAgKi8sCiAJCQkJNzI2RDU2REUyNTNBNjQ4MTAwMDJFRjkwIC8qIFJlbW90
ZVJlc291cmNlQ2FjaGUuaCAqLywKIAkJCQk3QkNGNzBDQTI2MTQ5MzVFMDBFNEZCNzAgLyogU2Nv
cGVkUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5jcHAgKi8sCkBAIC0xMTQ0Myw2ICsxMTQ0Niw5
IEBACiAJCQkJQ0Q4MjUyREEyNUQ0OTE1NDAwODYyRkQ4IC8qIFJlbW90ZVJlbW90ZUNvbW1hbmRM
aXN0ZW5lclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQlDRDgyNTJEOTI1RDQ5MTU0
MDA4NjJGRDggLyogUmVtb3RlUmVtb3RlQ29tbWFuZExpc3RlbmVyUHJveHlNZXNzYWdlcy5oICov
LAogCQkJCUNEODI1MkQ4MjVENDkxNTMwMDg2MkZEOCAvKiBSZW1vdGVSZW1vdGVDb21tYW5kTGlz
dGVuZXJQcm94eU1lc3NhZ2VzUmVwbGllcy5oICovLAorCQkJCUY0NTE3RDc3MjZGQkNDRTQwMDRD
ODQ3NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKKwkJ
CQlGNDUxN0Q3QTI2RkJDRDM4MDA0Qzg0NzUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3Nh
Z2VzLmggKi8sCisJCQkJRjQ1MTdENzkyNkZCQ0QzODAwNEM4NDc1IC8qIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRNZXNzYWdlc1JlcGxpZXMuaCAqLywKIAkJCQkwRjU5NDdBNTE4N0I1MTc2MDA0Mzc4
NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAog
CQkJCTBGNTk0N0E2MTg3QjUxNzYwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
ck1lc3NhZ2VzLmggKi8sCiAJCQkJMUREMkE2NkIyNTYyMDIxRTAwRkY3QjZGIC8qIFJlbW90ZVNv
dXJjZUJ1ZmZlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKQEAgLTEyMjIyLDggKzEyMjI4
LDYgQEAKIAkJCQk4Mzg5MUI2QzFBNjhDMzBCMDAzMEYzODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUMxODE3MzYxMjA1ODQyNDcwMERGREE2NSAvKiBE
aXNwbGF5TGluay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxODlDQUMyNDc0OUYyRjAwRTU4RDgx
IC8qIERpc3BsYXlMaW5rT2JzZXJ2ZXJJRC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRjQwOTRDQkQy
NTUzMDUzRDAwM0Q3M0UzIC8qIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlLmggaW4gSGVhZGVycyAq
LywKLQkJCQlGNDA5NENCRTI1NTMwNTQwMDAzRDczRTMgLyogRGlzcGxheUxpc3RXcml0ZXJIYW5k
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMTQyNzAyMUMyM0Y4NEMwMEQ0MTE4MyAvKiBEb3du
bG9hZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxNDI3MDUxQzIzRjg0QzAwRDQxMTgzIC8qIERv
d25sb2FkSUQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMTQyNzA3MUMyM0Y4NEMwMEQ0MTE4MyAv
KiBEb3dubG9hZE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTI1MzMsNiArMTI1MzcsNyBA
QAogCQkJCUNEQUMyMEI0MjNGQjU4RjIwMDIxREVFMyAvKiBSZW1vdGVDRE1JbnN0YW5jZVByb3h5
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREFDMjBDQTIzRkMyRjc1MDAyMURFRTMgLyogUmVtb3Rl
Q0RNSW5zdGFuY2VTZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREFDMjBDOTIzRkMyRjc1
MDAyMURFRTMgLyogUmVtb3RlQ0RNSW5zdGFuY2VTZXNzaW9uSWRlbnRpZmllci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRjQ1MUMwRkUyNzAzQjI2MzAwMkJBMDNCIC8qIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dFByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDQ3QjU2RDE4MTA3MTRFMDAzQTNBRUUg
LyogUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEREY3MzE1
MThFOTUwNjAwMDRGNUE2NiAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTFBQjE2QUVBMTY0QjNBODgwMDI5MEQ2MiAvKiBSZW1vdGVMYXll
clRyZWVDb250ZXh0LmggaW4gSGVhZGVycyAqLywKQEAgLTEyNTYxLDcgKzEyNTY2LDggQEAKIAkJ
CQkxQUMxMzM4NjE4NTkwQzQ2MDBGM0VDMDUgLyogUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDYwODhBMDAyNjFGQThCQzAwRTI1MDBEIC8qIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2MDg4QTAxMjYxRkE4QzQw
MEUyNTAwRCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzLmggaW4g
SGVhZGVycyAqLywKLQkJCQlGNDE0Q0UyRDI2OURFNkVBMDBCRDIxNkEgLyogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGNDUxN0Q3QzI2RkJDRDM5MDA0
Qzg0NzUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywK
KwkJCQlGNDUxN0Q3QjI2RkJDRDM5MDA0Qzg0NzUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1l
c3NhZ2VzUmVwbGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1OTQ3OTAxODdCM0IzQTAwNDM3
ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjU5NDdBODE4N0I1MTc2MDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNz
YWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1OTQ3OUIxODdCM0I2MDAwNDM3ODU3IC8qIFJl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAtMTI2MDIs
NyArMTI2MDgsNiBAQAogCQkJCTUxMjE3NDYxMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVS
ZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4MzQ5NDIyNEVGNDY3ODAwQkRDOUE4IC8q
IFNoYXJlZEJ1ZmZlckNvcHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEQzE4RkY2RUYyQTMxMzBD
MTMwMTc2NyAvKiBTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKLQkJ
CQlGNEE2RDZCQzI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBMjRCRUQ1MTIwODk0RDEwMEZCQjA1OSAvKiBTaGFyZWRNZW1v
cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUNENEI0RDlEMUU3NjVFMDAwMEQyNzA5MiAvKiBTaGFy
ZWRSaW5nQnVmZmVyU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODMxM0Y3RUMxRjdEQUUw
ODAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hTdG9yZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
MjYzNyw2ICsxMjY0Miw3IEBACiAJCQkJN0I3MzEyM0EyNUNDODUyNTAwM0IyNzk2IC8qIFN0cmVh
bUNvbm5lY3Rpb25CdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCNzMxMjQyMjVDQzg1MjUw
MDNCMjc5NiAvKiBTdHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0I3MzEyM0UyNUNDODUyNTAwM0IyNzk2IC8qIFN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuaCBp
biBIZWFkZXJzICovLAorCQkJCUY0OTJGQjYwMjcwNjE0OUEwMDU1RTREMSAvKiBTdHJlYW1NZXNz
YWdlUmVjZWl2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCNzMxMjQxMjVDQzg1MjUwMDNCMjc5
NiAvKiBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUwMEQ2
QzE4MzI3QzEyMDAwODdERDcgLyogU3RyaW5nUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyOTZCRDg1RDE1MDE5QkMzMDA3MUY0MjQgLyogU3RyaW5nVXRpbGl0aWVzLmggaW4gSGVhZGVy
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
RGlzcGxheUxpc3RXcml0ZXJIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9EaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDI4MTk4NzdmNGRlYWQ1NDFlOWY0MjMwNTM3Njc5MzNkYzRjY2QxY2MuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9EaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkRpc3BsYXlMaXN0V3JpdGVySGFuZGxlLmgiCi0KLSNpbmNsdWRlIDx3
dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKLQotc2l6ZV90IERpc3BsYXlMaXN0V3JpdGVySGFuZGxlOjphZHZhbmNl
KHNpemVfdCBhbW91bnQpCi17Ci0gICAgbV93cml0YWJsZU9mZnNldCA9IENoZWNrZWRTaXplIHsg
bV93cml0YWJsZU9mZnNldCB9ICsgYW1vdW50OwotICAgIHJldHVybiBDaGVja2VkU2l6ZSB7IGhl
YWRlcigpLnVucmVhZEJ5dGVzLmV4Y2hhbmdlQWRkKGFtb3VudCkgfSArIGFtb3VudDsKLX0KLQot
c2l6ZV90IERpc3BsYXlMaXN0V3JpdGVySGFuZGxlOjphdmFpbGFibGVDYXBhY2l0eSgpIGNvbnN0
Ci17Ci0gICAgaWYgKFVOTElLRUxZKHNoYXJlZE1lbW9yeSgpLnNpemUoKSA8IHdyaXRhYmxlT2Zm
c2V0KCkpKQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgcmV0
dXJuIHNoYXJlZE1lbW9yeSgpLnNpemUoKSAtIHdyaXRhYmxlT2Zmc2V0KCk7Ci19Ci0KLURpc3Bs
YXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlIERpc3BsYXlMaXN0V3JpdGVySGFuZGxlOjpjcmVhdGVI
YW5kbGUoKSBjb25zdAotewotICAgIHJldHVybiB7Ci0gICAgICAgIGlkZW50aWZpZXIoKSwKLSAg
ICAgICAgZGF0YSgpICsgd3JpdGFibGVPZmZzZXQoKSwKLSAgICAgICAgYXZhaWxhYmxlQ2FwYWNp
dHkoKQotICAgIH07Ci19Ci0KLWJvb2wgRGlzcGxheUxpc3RXcml0ZXJIYW5kbGU6Om1vdmVXcml0
YWJsZU9mZnNldFRvU3RhcnRJZlBvc3NpYmxlKCkKLXsKLSAgICBpZiAobV93cml0YWJsZU9mZnNl
dCA8PSBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6aGVhZGVyU2l6ZSgpKSB7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fd3JpdGFibGVPZmZzZXQgPT0gU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6
OmhlYWRlclNpemUoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICh1
bnJlYWRCeXRlcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3dyaXRhYmxlT2Zm
c2V0ID0gU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmhlYWRlclNpemUoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0Rpc3BsYXlMaXN0V3JpdGVySGFuZGxlLmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0Rpc3BsYXlMaXN0V3JpdGVySGFu
ZGxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiMWUzZTAwYWY4NDQwMjg4ZWVh
ZmZkNTAzMTViNjliZTE4YmFlM2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9EaXNwbGF5
TGlzdFdyaXRlckhhbmRsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUu
aCIKLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgRGlzcGxheUxpc3RXcml0ZXJIYW5kbGUgOiBwdWJsaWMgU2hhcmVkRGlzcGxheUxpc3RI
YW5kbGUgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERpc3BsYXlMaXN0V3JpdGVySGFuZGxl
KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxE
aXNwbGF5TGlzdFdyaXRlckhhbmRsZT4gY3JlYXRlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
QnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyLCBSZWY8U2hhcmVkTWVtb3J5PiYmIHNoYXJlZE1l
bW9yeSkKLSAgICB7Ci0gICAgICAgIGlmIChzaGFyZWRNZW1vcnktPnNpemUoKSA8PSBoZWFkZXJT
aXplKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBEaXNwbGF5TGlzdFdyaXRlckhhbmRsZShpZGVudGlmaWVyLCBXVEZNb3ZlKHNoYXJl
ZE1lbW9yeSkpKTsKLSAgICB9Ci0KLSAgICBzaXplX3Qgd3JpdGFibGVPZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX3dyaXRhYmxlT2Zmc2V0OyB9Ci0gICAgc2l6ZV90IGF2YWlsYWJsZUNhcGFjaXR5
KCkgY29uc3Q7Ci0KLSAgICBib29sIG1vdmVXcml0YWJsZU9mZnNldFRvU3RhcnRJZlBvc3NpYmxl
KCk7Ci0KLSAgICBzaXplX3QgYWR2YW5jZShzaXplX3QgYW1vdW50KTsKLSAgICBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSBjcmVhdGVIYW5kbGUoKSBjb25zdDsKLQotICAg
IGJvb2wgdHJ5VG9SZXN1bWUoU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OlJlc3VtZVJlYWRpbmdJ
bmZvcm1hdGlvbiYmIGluZm8pCi0gICAgewotICAgICAgICBhdXRvJiBoZWFkZXIgPSB0aGlzLT5o
ZWFkZXIoKTsKLSAgICAgICAgaGVhZGVyLnJlc3VtZVJlYWRpbmdJbmZvID0gV1RGTW92ZShpbmZv
KTsKLSAgICAgICAgcmV0dXJuIGhlYWRlci53YWl0aW5nU3RhdHVzLmNvbXBhcmVFeGNoYW5nZVdl
YWsoCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6V2Fp
dGluZ1N0YXR1c1N0b3JhZ2VUeXBlPihTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6V2FpdGluZ1N0
YXR1czo6V2FpdGluZyksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxTaGFyZWREaXNwbGF5TGlz
dEhhbmRsZTo6V2FpdGluZ1N0YXR1c1N0b3JhZ2VUeXBlPihTaGFyZWREaXNwbGF5TGlzdEhhbmRs
ZTo6V2FpdGluZ1N0YXR1czo6UmVzdW1pbmcpCi0gICAgICAgICk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIERpc3BsYXlMaXN0V3JpdGVySGFuZGxlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
QnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyLCBSZWY8U2hhcmVkTWVtb3J5PiYmIHNoYXJlZE1l
bW9yeSkKLSAgICAgICAgOiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShpZGVudGlmaWVyLCBXVEZN
b3ZlKHNoYXJlZE1lbW9yeSkpCi0gICAgICAgICwgbV93cml0YWJsZU9mZnNldChTaGFyZWREaXNw
bGF5TGlzdEhhbmRsZTo6aGVhZGVyU2l6ZSgpKQotICAgIHsKLSAgICB9Ci0KLSAgICBzaXplX3Qg
bV93cml0YWJsZU9mZnNldCB7IDAgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YjViNjk5YTRj
NDk2Mzk3Y2ZhN2RkNzMwZWEzYWIwNTU1NGY4YTBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRQcm94
eS5jcHAKQEAgLTAsMCArMSw2MzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlR3JhcGhp
Y3NDb250ZXh0UHJveHkuaCIKKworI2luY2x1ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dE1lc3Nh
Z2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxh
eUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFQbGF5
ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlbW90ZUdyYXBoaWNz
Q29udGV4dFByb3h5OjpSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eShJbWFnZUJ1ZmZlciYgaW1h
Z2VCdWZmZXIsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSYgcmVuZGVyaW5nQmFja2VuZCwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRp
YWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pCisgICAgOiBtX2Rlc3Rp
bmF0aW9uQnVmZmVySWRlbnRpZmllcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIoKSkKKyAgICAsIG1faW1hZ2VCdWZmZXIobWFrZVdlYWtQdHIoaW1hZ2VCdWZmZXIpKQor
ICAgICwgbV9yZW5kZXJpbmdCYWNrZW5kKG1ha2VXZWFrUHRyKHJlbmRlcmluZ0JhY2tlbmQpKQor
ICAgICwgbV9pc05lc3RlZChmYWxzZSkKK3sKKyAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHsgc3Rh
dGUsIGluaXRpYWxDVE0sIGluaXRpYWxDbGlwIH0pOworfQorCitSZW1vdGVHcmFwaGljc0NvbnRl
eHRQcm94eTo6UmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHkoUmVtb3RlR3JhcGhpY3NDb250ZXh0
UHJveHkmIHBhcmVudCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBG
bG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0p
CisgICAgOiBtX2Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcihwYXJlbnQubV9kZXN0aW5hdGlv
bkJ1ZmZlcklkZW50aWZpZXIpCisgICAgLCBtX2ltYWdlQnVmZmVyKHBhcmVudC5tX2ltYWdlQnVm
ZmVyKQorICAgICwgbV9yZW5kZXJpbmdCYWNrZW5kKHBhcmVudC5tX3JlbmRlcmluZ0JhY2tlbmQp
CisgICAgLCBtX2lzTmVzdGVkKHRydWUpCit7CisgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZCh7IHN0
YXRlLCBpbml0aWFsQ1RNLCBpbml0aWFsQ2xpcCB9KTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRQcm94eTo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKK3sKKyAgICBpZiAoVU5MSUtF
TFkoIW1fcmVuZGVyaW5nQmFja2VuZCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6R2V0UGl4ZWxCdWZmZXIoeyBvdXRwdXRGb3Jt
YXQsIHNvdXJjZVJlY3QgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5
OjpwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEZvcm1hdCkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFj
a2VuZCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dDo6UHV0UGl4ZWxCdWZmZXIoeyBwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBv
aW50LCBkZXN0Rm9ybWF0IH0pKTsKK30KKworc3RhdGljIGJvb2wgY29udGFpbnNPbmx5SW5saW5l
U3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKK3sKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
IGlubGluZVN0YXRlQ2hhbmdlRmxhZ3MgeworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLAorICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlQ29sb3JDaGFuZ2UsCisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JD
aGFuZ2UsCisgICAgfTsKKworICAgIGlmIChjaGFuZ2VGbGFncyAhPSAoY2hhbmdlRmxhZ3MgJiBp
bmxpbmVTdGF0ZUNoYW5nZUZsYWdzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNo
YW5nZSkgJiYgIWNoYW5nZXMubV9zdGF0ZS5zdHJva2VDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpICYmICFjaGFuZ2VzLm1fc3Rh
dGUuZmlsbENvbG9yLnRyeUdldEFzU1JHQkFCeXRlcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94
eTo6cmVjb3JkTmF0aXZlSW1hZ2VVc2UoTmF0aXZlSW1hZ2UmIGltYWdlKQoreworICAgIGlmIChV
TkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9y
ZW5kZXJpbmdCYWNrZW5kLT5yZWNvcmROYXRpdmVJbWFnZVVzZShpbWFnZSk7Cit9CisKK3ZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCit7CisgICAgaWYgKCFjb250YWluc09ubHlJ
bmxpbmVTdGF0ZUNoYW5nZXMoY2hhbmdlcywgY2hhbmdlRmxhZ3MpKSB7CisgICAgICAgIGlmIChh
dXRvIHBhdHRlcm4gPSBjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlUGF0dGVybikKKyAgICAgICAgICAg
IHJlY29yZE5hdGl2ZUltYWdlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgpKTsKKyAgICAgICAgaWYg
KGF1dG8gcGF0dGVybiA9IGNoYW5nZXMubV9zdGF0ZS5maWxsUGF0dGVybikKKyAgICAgICAgICAg
IHJlY29yZE5hdGl2ZUltYWdlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgpKTsKKyAgICAgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpTZXRTdGF0ZSh7IGNoYW5nZXMubV9z
dGF0ZSwgY2hhbmdlRmxhZ3MgfSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNo
YW5nZSkpCisgICAgICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6U2V0
SW5saW5lU3Ryb2tlQ29sb3IoeyAqY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLnRyeUdldEFz
U1JHQkFCeXRlcygpIH0pKTsKKworICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKKyAgICAgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpTZXRTdHJva2VUaGlja25lc3MoeyBjaGFuZ2Vz
Lm1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzIH0pKTsKKworICAgIGlmIChjaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKKyAgICAgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpTZXRJbmxpbmVGaWxsQ29sb3IoeyAq
Y2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSB9KSk7Cit9CisK
K3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlm
TmVjZXNzYXJ5KCkKK3sKKyAgICBhdXRvJiBzdGF0ZUNoYW5nZXMgPSBjdXJyZW50U3RhdGUoKS5z
dGF0ZUNoYW5nZTsKKyAgICBhdXRvIGNoYW5nZXNGcm9tTGFzdFN0YXRlID0gc3RhdGVDaGFuZ2Vz
LmNoYW5nZXNGcm9tU3RhdGUoY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0ZSk7CisgICAg
aWYgKCFjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXBwZW5k
U3RhdGVDaGFuZ2VJdGVtKHN0YXRlQ2hhbmdlcywgY2hhbmdlc0Zyb21MYXN0U3RhdGUpOworICAg
IHN0YXRlQ2hhbmdlcy5tX2NoYW5nZUZsYWdzID0geyB9OworICAgIGN1cnJlbnRTdGF0ZSgpLmxh
c3REcmF3aW5nU3RhdGUgPSBzdGF0ZUNoYW5nZXMubV9zdGF0ZTsKK30KKwordm9pZCBSZW1vdGVH
cmFwaGljc0NvbnRleHRQcm94eTo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykK
K3sKKyAgICBjdXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZS5hY2N1bXVsYXRlKHN0YXRlLCBmbGFn
cyk7Cit9CisKK2Jvb2wgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmNhbkRyYXdJbWFnZUJ1
ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcmVuZGVyaW5nQmFja2VuZC0+aXNDYWNoZWQoaW1hZ2VCdWZmZXIpOworfQorCitSZW5kZXJp
bmdNb2RlIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpyZW5kZXJpbmdNb2RlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci0+cmVuZGVyaW5nTW9kZSgpOworfQorCit2b2lk
IFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkK
K3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OlNldExpbmVDYXAo
eyBsaW5lQ2FwIH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6c2V0
TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCit7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpTZXRMaW5lRGFzaCh7
IGRhc2hBcnJheSwgZGFzaE9mZnNldCB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0UHJveHk6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQoreworICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6U2V0TGluZUpvaW4oeyBsaW5lSm9pbiB9KSk7
Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OnNldE1pdGVyTGltaXQoZmxv
YXQgbWl0ZXJMaW1pdCkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHQ6OlNldE1pdGVyTGltaXQoeyBtaXRlckxpbWl0IH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRQcm94eTo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMs
IHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNt
b290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBs
ZW1lbnQgc3VwcG9ydCBmb3IgcmVjb3JkaW5nIERyYXdHbHlwaHMuCisgICAgVU5VU0VEX1BBUkFN
KGZvbnQpOworICAgIFVOVVNFRF9QQVJBTShnbHlwaHMpOworICAgIFVOVVNFRF9QQVJBTShhZHZh
bmNlcyk7CisgICAgVU5VU0VEX1BBUkFNKG51bUdseXBocyk7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXJ0UG9pbnQpOworICAgIFVOVVNFRF9QQVJBTShzbW9vdGhpbmdNb2RlKTsKK30KKwordm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6YXBwZW5kRHJhd0dseXBoc0l0ZW1XaXRoQ2FjaGVk
Rm9udChjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBG
bG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkK
K3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIG1fcmVuZGVy
aW5nQmFja2VuZC0+cmVjb3JkRm9udFVzZShjb25zdF9jYXN0PEZvbnQmPihmb250KSk7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpEcmF3R2x5cGhzKHsgZm9udCwg
Z2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2RlIH0pKTsK
K30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
K3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIGlmICghY2Fu
RHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6
OmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+cmVjb3Jk
SW1hZ2VCdWZmZXJVc2UoaW1hZ2VCdWZmZXIpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dDo6RHJhd0ltYWdlQnVmZmVyKHsgaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zIH0pKTsKK30KKwor
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUlt
YWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KTsKKyAgICByZWNvcmROYXRpdmVJbWFnZVVzZShpbWFnZSk7CisgICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpEcmF3TmF0aXZlSW1hZ2UoeyBpbWFnZS5yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9u
cyB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmRyYXdQYXR0ZXJu
KE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICByZWNv
cmROYXRpdmVJbWFnZVVzZShpbWFnZSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0OjpEcmF3UGF0dGVybih7IGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cigpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHNwYWNpbmcsIG9wdGlvbnMgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dFByb3h5OjpzYXZlKCkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHQ6OlNhdmUoeyB9KSk7CisgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChtX3N0YXRlU3RhY2subGFz
dCgpLmNsb25lRm9yU2F2ZSgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94
eTo6cmVzdG9yZSgpCit7CisgICAgaWYgKCFtX3N0YXRlU3RhY2suc2l6ZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6UmVzdG9yZSh7IH0pKTsKK30KKwordm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHRQcm94eTo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit7Cisg
ICAgY3VycmVudFN0YXRlKCkudHJhbnNsYXRlKHgsIHkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dDo6VHJhbnNsYXRlKHsgeCwgeSB9KSk7Cit9CisKK3ZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKK3sK
KyAgICBjdXJyZW50U3RhdGUoKS5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOworICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Um90YXRlKHsgYW5nbGVJblJhZGlhbnMgfSkp
OworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpzY2FsZShjb25zdCBGbG9h
dFNpemUmIHNpemUpCit7CisgICAgY3VycmVudFN0YXRlKCkuc2NhbGUoc2l6ZSk7CisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpTY2FsZSh7IHNpemUgfSkpOworfQor
Cit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7CisgICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50aXR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGN1cnJlbnRTdGF0ZSgpLmNvbmNhdENUTSh0cmFuc2Zv
cm0pOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Q29uY2F0ZW5h
dGVDVE0oeyB0cmFuc2Zvcm0gfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFBy
b3h5OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7CisgICAgY3Vy
cmVudFN0YXRlKCkuc2V0Q1RNKHRyYW5zZm9ybSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0OjpTZXRDVE0oeyB0cmFuc2Zvcm0gfSkpOworfQorCitBZmZpbmVUcmFu
c2Zvcm0gUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmdldENUTShHcmFwaGljc0NvbnRleHQ6
OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogUmVzcGVjdCB0aGUg
Z2l2ZW4gdmFsdWUgb2YgSW5jbHVkZURldmljZVNjYWxlLgorICAgIHJldHVybiBjdXJyZW50U3Rh
dGUoKS5jdG07Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0
ZW1JZk5lY2Vzc2FyeSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcih7IG9wYWNpdHkgfSkpOworICAgIG1fc3RhdGVTdGFj
ay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3QoKS5jbG9uZUZvclRyYW5zcGFyZW5jeUxheWVyKCkp
OworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjplbmRUcmFuc3BhcmVuY3lM
YXllcigpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkVuZFRyYW5zcGFyZW5jeUxheWVy
KHsgIH0pKTsKKyAgICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGJvcmRlclRoaWNrbmVzcykKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6RHJhd1Jl
Y3QoeyByZWN0LCBib3JkZXJUaGlja25lc3MgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNz
Q29udGV4dFByb3h5OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MikKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2Fy
eSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6RHJhd0xpbmUo
eyBwb2ludDEsIHBvaW50MiB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJv
eHk6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMsIFN0cm9rZVN0eWxlKQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNz
YXJ5KCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpEcmF3TGlu
ZXNGb3JUZXh0KHsgRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywg
d2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBo
aWNzQ29udGV4dFByb3h5OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit7CisgICAgYXBwZW5kU3Rh
dGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHQ6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoeyByZWN0LCBzdHlsZSB9KSk7
Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmRyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2Fy
eSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6RHJhd0VsbGlw
c2UoeyByZWN0IH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZHJh
d1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5l
Y2Vzc2FyeSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6RHJh
d1BhdGgoeyBwYXRoIH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkRyYXdG
b2N1c1JpbmdQYXRoKHsgcGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IgfSkpOworfQorCit2b2lk
IFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpEcmF3Rm9jdXNSaW5nUmVjdHMo
eyByZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IgfSkpOworfQorCisjaWYgUExBVEZPUk0oTUFD
KQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpkcmF3Rm9jdXNSaW5nKGNvbnN0
IFBhdGgmLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQor
Cit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkZpbGxSZWN0KHsgcmVjdCB9
KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGFwcGVuZFN0YXRl
Q2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0OjpGaWxsUmVjdFdpdGhDb2xvcih7IHJlY3QsIGNvbG9yIH0pKTsKK30KKwordm9p
ZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZO
ZWNlc3NhcnkoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkZp
bGxSZWN0V2l0aEdyYWRpZW50KHsgcmVjdCwgZ3JhZGllbnQgfSkpOworfQorCit2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkZpbGxDb21wb3NpdGVkUmVjdCh7IHJl
Y3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlIH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRQcm94eTo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3sKKyAgICBhcHBlbmRT
dGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dDo6RmlsbFJvdW5kZWRSZWN0KHsgcmVjdCwgY29sb3IsIGJsZW5kTW9kZSB9
KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgYXBwZW5kU3RhdGVD
aGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHQ6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHsgcmVjdCwgcm91bmRlZEhvbGVSZWN0
LCBjb2xvciB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmZpbGxQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBpZiAocGF0aC5oYXNJ
bmxpbmVEYXRhKCkpIHsKKyAgICAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0YTxMaW5lRGF0YT4o
KSkKKyAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Rmls
bExpbmUoeyBwYXRoLmlubGluZURhdGE8TGluZURhdGE+KCkgfSkpOworICAgICAgICBlbHNlIGlm
IChwYXRoLmhhc0lubGluZURhdGE8QXJjRGF0YT4oKSkKKyAgICAgICAgICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6RmlsbEFyYyh7IHBhdGguaW5saW5lRGF0YTxBcmNE
YXRhPigpIH0pKTsKKyAgICAgICAgZWxzZSBpZiAocGF0aC5oYXNJbmxpbmVEYXRhPFF1YWRDdXJ2
ZURhdGE+KCkpCisgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHQ6OkZpbGxRdWFkQ3VydmUoeyBwYXRoLmlubGluZURhdGE8UXVhZEN1cnZlRGF0YT4oKSB9KSk7
CisgICAgICAgIGVsc2UgaWYgKHBhdGguaGFzSW5saW5lRGF0YTxCZXppZXJDdXJ2ZURhdGE+KCkp
CisgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkZpbGxC
ZXppZXJDdXJ2ZSh7IHBhdGguaW5saW5lRGF0YTxCZXppZXJDdXJ2ZURhdGE+KCkgfSkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQor
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6RmlsbFBhdGgoeyBwYXRo
IH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZmlsbEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVj
ZXNzYXJ5KCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpGaWxs
RWxsaXBzZSh7IHJlY3QgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5
OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorewor
ICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpTdHJva2VSZWN0KHsgcmVjdCwgbGluZVdpZHRoIH0p
KTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6c3Ryb2tlUGF0aChjb25z
dCBQYXRoJiBwYXRoKQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0
YSgpKSB7CisgICAgICAgIGlmIChwYXRoLmhhc0lubGluZURhdGE8TGluZURhdGE+KCkpCisgICAg
ICAgICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OlN0cm9rZUxpbmUo
eyBwYXRoLmlubGluZURhdGE8TGluZURhdGE+KCkgfSkpOworICAgICAgICBlbHNlIGlmIChwYXRo
Lmhhc0lubGluZURhdGE8QXJjRGF0YT4oKSkKKyAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dDo6U3Ryb2tlQXJjKHsgcGF0aC5pbmxpbmVEYXRhPEFyY0RhdGE+
KCkgfSkpOworICAgICAgICBlbHNlIGlmIChwYXRoLmhhc0lubGluZURhdGE8UXVhZEN1cnZlRGF0
YT4oKSkKKyAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6
U3Ryb2tlUXVhZEN1cnZlKHsgcGF0aC5pbmxpbmVEYXRhPFF1YWRDdXJ2ZURhdGE+KCkgfSkpOwor
ICAgICAgICBlbHNlIGlmIChwYXRoLmhhc0lubGluZURhdGE8QmV6aWVyQ3VydmVEYXRhPigpKQor
ICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpTdHJva2VC
ZXppZXJDdXJ2ZSh7IHBhdGguaW5saW5lRGF0YTxCZXppZXJDdXJ2ZURhdGE+KCkgfSkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQor
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6U3Ryb2tlUGF0aCh7IHBh
dGggfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpzdHJva2VFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1J
Zk5lY2Vzc2FyeSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6
U3Ryb2tlRWxsaXBzZSh7IHJlY3QgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dFByb3h5OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGFwcGVuZFN0
YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0OjpDbGVhclJlY3QoeyByZWN0IH0pKTsKK30KKworI2lmIFVTRShDRykKKwor
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKK3sK
KyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6QXBwbHlTdHJva2VQYXR0ZXJuKHsgfSkpOworfQor
Cit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjphcHBseUZpbGxQYXR0ZXJuKCkKK3sK
KyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6QXBwbHlGaWxsUGF0dGVybih7IH0pKTsKK30KKwor
I2VuZGlmIC8vIFVTRShDRykKKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6Y2xp
cChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgY3VycmVudFN0YXRlKCkuY2xpcEJvdW5k
cy5pbnRlcnNlY3QocmVjdCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0OjpDbGlwKHsgcmVjdCB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJv
eHk6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Q2xpcE91dCh7IHJlY3QgfSkpOworfQorCit2b2lkIFJl
bW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpDbGlwT3V0VG9QYXRoKHsg
cGF0aCB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmNsaXBQYXRo
KGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQoreworICAgIGN1cnJlbnRTdGF0
ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkNsaXBQYXRoKHsgcGF0aCwgd2lu
ZFJ1bGUgfSkpOworfQorCitJbnRSZWN0IFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpjbGlw
Qm91bmRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjdXJyZW50U3Rh
dGUoKS5jbGlwQm91bmRzKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6
Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0KQoreworICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+cmVjb3JkSW1hZ2VCdWZm
ZXJVc2UoaW1hZ2VCdWZmZXIpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dDo6Q2xpcFRvSW1hZ2VCdWZmZXIoeyBpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIoKSwgZGVzdFJlY3QgfSkpOworfQorCitHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0Ry
YXdpbmdDb21tYW5kc1Jlc3VsdCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6Y2xpcFRvRHJh
d2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQm
KT4mJiBkcmF3aW5nRnVuY3Rpb24pCit7CisgICAgYXV0byBpbml0aWFsQ2xpcCA9IEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIGRlc3RpbmF0aW9uLnNpemUoKSk7CisKKyAgICAvLyBUaGUgaW5pdGlh
bCBDVE0gbWF0Y2hlcyBJbWFnZUJ1ZmZlcidzIGluaXRpYWwgQ1RNLgorICAgIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVk
ZURldmljZVNjYWxlKTsKKyAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3IodHJhbnNmb3JtLnhTY2Fs
ZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOworICAgIGF1dG8gc2NhbGVkU2l6ZSA9IGV4cGFuZGVk
SW50U2l6ZShkZXN0aW5hdGlvbi5zaXplKCkgKiBzY2FsZUZhY3Rvcik7CisgICAgQWZmaW5lVHJh
bnNmb3JtIGluaXRpYWxDVE07CisgICAgaW5pdGlhbENUTS5zY2FsZSgxLCAtMSk7CisgICAgaW5p
dGlhbENUTS50cmFuc2xhdGUoMCwgLXNjYWxlZFNpemUuaGVpZ2h0KCkpOworICAgIGluaXRpYWxD
VE0uc2NhbGUoc2NhbGVkU2l6ZSAvIGRlc3RpbmF0aW9uLnNpemUoKSk7CisKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkJlZ2luQ2xpcFRvRHJhd2luZ0NvbW1hbmRz
KHsgZGVzdGluYXRpb24sIGNvbG9yU3BhY2UgfSkpOworICAgIHsKKyAgICAgICAgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0UHJveHkgbmVzdGVkQ29udGV4dCgqdGhpcywgR3JhcGhpY3NDb250ZXh0U3Rh
dGUoKSwgaW5pdGlhbENsaXAsIGluaXRpYWxDVE0pOworICAgICAgICBkcmF3aW5nRnVuY3Rpb24o
bmVzdGVkQ29udGV4dCk7CisgICAgfQorICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dDo6RW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKHsgZGVzdGluYXRpb24gfSkpOworCisg
ICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdDo6U3VjY2VzczsKK30KKworI2lm
IEVOQUJMRShWSURFTykKKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6cGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24pCit7CisgICAgaWYgKCFwbGF5ZXIuaWRlbnRpZmllcigpKSB7CisgICAgICAgIEdyYXBo
aWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChwbGF5ZXIuaWRlbnRpZmllcigpKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OlBhaW50RnJhbWVGb3JNZWRp
YSh7IHBsYXllciwgZGVzdGluYXRpb24gfSkpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVP
KQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjphcHBseURldmljZVNjYWxlRmFj
dG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQoreworICAgIC8vIEZJWE1FOiB0aGlzIGNoYW5n
ZXMgdGhlIGJhc2VDVE0sIHdoaWNoIHdpbGwgaW52YWxpZGF0ZSBhbGwgb2Ygb3VyIGNhY2hlZCBl
eHRlbnRzLgorICAgIC8vIEFzc2VydCB0aGF0IGl0J3Mgb25seSBjYWxsZWQgZWFybHkgb24/Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpBcHBseURldmljZVNjYWxl
RmFjdG9yKHsgZGV2aWNlU2NhbGVGYWN0b3IgfSkpOworfQorCitGbG9hdFJlY3QgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0UHJveHk6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKK3sKKyAgICBXVEZMb2dBbHdheXMo
IkdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscygpIGlzIG5vdCB5ZXQgY29tcGF0
aWJsZSB3aXRoIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5LiIpOworICAgIHJldHVybiByZWN0
OworfQorCisvLyBGSVhNRTogc2hhcmUgd2l0aCBTaGFkb3dEYXRhCitzdGF0aWMgaW5saW5lIGZs
b2F0IHNoYWRvd1BhaW50aW5nRXh0ZW50KGZsb2F0IGJsdXJSYWRpdXMpCit7CisgICAgLy8gQmx1
cnJpbmcgdXNlcyBhIEdhdXNzaWFuIGZ1bmN0aW9uIHdob3NlIHN0ZC4gZGV2aWF0aW9uIGlzIG1f
cmFkaXVzLzIsIGFuZCB3aGljaCBpbiB0aGVvcnkKKyAgICAvLyBleHRlbmRzIHRvIGluZmluaXR5
LiBJbiA4LWJpdCBjb250ZXh0cywgaG93ZXZlciwgcm91bmRpbmcgY2F1c2VzIHRoZSBlZmZlY3Qg
dG8gYmVjb21lCisgICAgLy8gdW5kZXRlY3RhYmxlIGF0IGFyb3VuZCAxLjR4IHRoZSByYWRpdXMu
CisgICAgY29uc3QgZmxvYXQgcmFkaXVzRXh0ZW50TXVsdGlwbGllciA9IDEuNDsKKyAgICByZXR1
cm4gY2VpbGYoYmx1clJhZGl1cyAqIHJhZGl1c0V4dGVudE11bHRpcGxpZXIpOworfQorCitGbG9h
dFJlY3QgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyhj
b25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IGJvdW5kcyA9IHJl
Y3Q7CisgICAgY29uc3QgQ29udGV4dFN0YXRlJiBzdGF0ZSA9IGN1cnJlbnRTdGF0ZSgpOworCisg
ICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKKyAgICBmbG9hdCBzaGFkb3dSYWRpdXM7CisgICAg
Q29sb3Igc2hhZG93Q29sb3I7CisgICAgaWYgKGdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRv
d1JhZGl1cywgc2hhZG93Q29sb3IpKSB7CisgICAgICAgIEZsb2F0UmVjdCBzaGFkb3dFeHRlbnQg
PSBib3VuZHM7CisgICAgICAgIHNoYWRvd0V4dGVudC5tb3ZlKHNoYWRvd09mZnNldCk7CisgICAg
ICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KHNoYWRvd1JhZGl1
cykpOworICAgICAgICBib3VuZHMudW5pdGUoc2hhZG93RXh0ZW50KTsKKyAgICB9CisKKyAgICBG
bG9hdFJlY3QgY2xpcHBlZEV4dGVudCA9IGludGVyc2VjdGlvbihzdGF0ZS5jbGlwQm91bmRzLCBi
b3VuZHMpOworICAgIHJldHVybiBzdGF0ZS5jdG0ubWFwUmVjdChjbGlwcGVkRXh0ZW50KTsKK30K
KworY29uc3QgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OkNvbnRleHRTdGF0ZSYgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0UHJveHk6OmN1cnJlbnRTdGF0ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KG1fc3RhdGVTdGFjay5zaXplKCkpOworICAgIHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgpOwor
fQorCitSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6Q29udGV4dFN0YXRlJiBSZW1vdGVHcmFw
aGljc0NvbnRleHRQcm94eTo6Y3VycmVudFN0YXRlKCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZVN0
YWNrLnNpemUoKSk7CisgICAgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCk7Cit9CisKK2NvbnN0
IEFmZmluZVRyYW5zZm9ybSYgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmN0bSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmN0bTsKK30KKwordm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRQcm94eTo6Zmx1c2hDb250ZXh0KFdlYkNvcmU6OkZsdXNoSWRlbnRpZmllciBp
ZGVudGlmaWVyKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6
Rmx1c2hDb250ZXh0KHsgaWRlbnRpZmllciB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0UHJveHk6OkNvbnRleHRTdGF0ZTo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit7
CisgICAgY3RtLnRyYW5zbGF0ZSh4LCB5KTsKKyAgICBjbGlwQm91bmRzLm1vdmUoLXgsIC15KTsK
K30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6Q29udGV4dFN0YXRlOjpyb3Rh
dGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCit7CisgICAgZG91YmxlIGFuZ2xlSW5EZWdyZWVzID0g
cmFkMmRlZyhzdGF0aWNfY2FzdDxkb3VibGU+KGFuZ2xlSW5SYWRpYW5zKSk7CisgICAgY3RtLnJv
dGF0ZShhbmdsZUluRGVncmVlcyk7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gcm90YXRpb247Cisg
ICAgcm90YXRpb24ucm90YXRlKGFuZ2xlSW5EZWdyZWVzKTsKKworICAgIGlmIChzdGQ6Om9wdGlv
bmFsPEFmZmluZVRyYW5zZm9ybT4gaW52ZXJzZSA9IHJvdGF0aW9uLmludmVyc2UoKSkKKyAgICAg
ICAgY2xpcEJvdW5kcyA9IGludmVyc2UudmFsdWUoKS5tYXBSZWN0KGNsaXBCb3VuZHMpOworfQor
Cit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpDb250ZXh0U3RhdGU6OnNjYWxlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBjdG0uc2NhbGUoc2l6ZSk7CisgICAgY2xpcEJv
dW5kcy5zY2FsZSgxIC8gc2l6ZS53aWR0aCgpLCAxIC8gc2l6ZS5oZWlnaHQoKSk7Cit9CisKK3Zv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OkNvbnRleHRTdGF0ZTo6c2V0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQoreworICAgIHN0ZDo6b3B0aW9uYWw8QWZmaW5lVHJh
bnNmb3JtPiBpbnZlcnNlVHJhbnNmb3JtRm9yQ2xpcEJvdW5kczsKKyAgICBpZiAoYXV0byBvcmln
aW5hbENUTUludmVyc2UgPSBjdG0uaW52ZXJzZSgpKQorICAgICAgICBpbnZlcnNlVHJhbnNmb3Jt
Rm9yQ2xpcEJvdW5kcyA9IG9yaWdpbmFsQ1RNSW52ZXJzZS0+bXVsdGlwbHkobWF0cml4KS5pbnZl
cnNlKCk7CisKKyAgICBjdG0gPSBtYXRyaXg7CisKKyAgICBpZiAoaW52ZXJzZVRyYW5zZm9ybUZv
ckNsaXBCb3VuZHMpCisgICAgICAgIGNsaXBCb3VuZHMgPSBpbnZlcnNlVHJhbnNmb3JtRm9yQ2xp
cEJvdW5kcy0+bWFwUmVjdChjbGlwQm91bmRzKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRQcm94eTo6Q29udGV4dFN0YXRlOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBtYXRyaXgpCit7CisgICAgY3RtICo9IG1hdHJpeDsKKworICAgIGlmIChzdGQ6Om9wdGlvbmFs
PEFmZmluZVRyYW5zZm9ybT4gaW52ZXJzZSA9IG1hdHJpeC5pbnZlcnNlKCkpCisgICAgICAgIGNs
aXBCb3VuZHMgPSBpbnZlcnNlLnZhbHVlKCkubWFwUmVjdChjbGlwQm91bmRzKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmUyNDNhZDg5NGYwMTIyOWM3NzdiMTI3MDI3ZTA5MmFhZDZkMzljZDIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZUdyYXBoaWNzQ29udGV4dFByb3h5LmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQ
dHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTsKKworY2xhc3MgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHkgOiBwdWJsaWMgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBSZW1vdGVHcmFwaGljc0NvbnRl
eHRQcm94eShXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eSYsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJik7
CisgICAgflJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5KCkgeyB9CisKKyAgICB2b2lkIGdldFBp
eGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNvdXJjZVJlY3QpOworICAgIHZvaWQgcHV0UGl4ZWxC
dWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOworCisgICAgdm9pZCByZXNldE5lZWRz
Rmx1c2goKSB7IG1fbmVlZHNGbHVzaCA9IGZhbHNlOyB9CisgICAgYm9vbCBuZWVkc0ZsdXNoKCkg
Y29uc3QgeyByZXR1cm4gbV9uZWVkc0ZsdXNoOyB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dChX
ZWJDb3JlOjpGbHVzaElkZW50aWZpZXIpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgdm9pZCBzZW5kKFQmJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgbV9uZWVk
c0ZsdXNoID0gdHJ1ZTsKKyAgICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zZW5kVG9TdHJlYW0o
V1RGTW92ZShtZXNzYWdlKSwgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOworICAgIH0K
KworICAgIGZyaWVuZCBjbGFzcyBEcmF3R2x5cGhzUmVjb3JkZXI7CisgICAgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0UHJveHkoUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHkmIHBhcmVudCwgY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGluaXRpYWxDbGlwLCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0p
OworCisgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBm
YWxzZTsgfQorICAgIC8vIEZJWE1FOiBNYXliZSByZW1vdmUgdGhpcz8KKyAgICBib29sIGNhbkRy
YXdJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIGNvbnN0OworICAgIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBudWxscHRyOyB9CisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
KCkgY29uc3QgZmluYWw7CisKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICB2b2lk
IHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWwgeyB9CisgICAgYm9vbCBpc0NBTGF5ZXJD
b250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNldElzQWNj
ZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQorI2VuZGlmCisKKyAgICB2b2lkIGZpbGxS
b3VuZGVkUmVjdEltcGwoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJikgZmluYWwgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZvaWQg
ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGJvb2wsIGJvb2wsIFdl
YkNvcmU6OlN0cm9rZVN0eWxlKSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisKKyAg
ICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlJiwg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOwor
CisgICAgdm9pZCBzZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApIGZpbmFsOworICAgIHZvaWQg
c2V0TGluZURhc2goY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkg
ZmluYWw7CisgICAgdm9pZCBzZXRMaW5lSm9pbihXZWJDb3JlOjpMaW5lSm9pbikgZmluYWw7Cisg
ICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKKworICAgIHZvaWQgZmlsbFJlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOworICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6R3JhZGll
bnQmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYs
IGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNv
cmU6OkJsZW5kTW9kZSkgZmluYWw7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6
QmxlbmRNb2RlKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmIHJv
dW5kZWRIb2xlUmVjdCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZp
bGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxFbGxpcHNl
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOworICAgIHZv
aWQgc3Ryb2tlUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7CisgICAgdm9pZCBzdHJv
a2VFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xl
YXJSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworCisjaWYgVVNFKENHKSB8
fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKKyAg
ICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBkcmF3
R2x5cGhzKGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckds
eXBoKiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgV2ViQ29yZTo6Rm9u
dFNtb290aGluZ01vZGUpIGZpbmFsOworCisgICAgdm9pZCBhcHBlbmREcmF3R2x5cGhzSXRlbVdp
dGhDYWNoZWRGb250KGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1
ZmZlckdseXBoKiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQg
Y291bnQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBXZWJDb3JlOjpG
b250U21vb3RoaW5nTW9kZSk7CisKKyAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJ
bWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6Ok5hdGl2
ZUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lk
IGRyYXdQYXR0ZXJuKFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBm
aW5hbDsKKworICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JikgZmluYWw7CisgICAg
dm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0
aGlja25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5n
LCBib29sIGRvdWJsZUxpbmVzLCBXZWJDb3JlOjpTdHJva2VTdHlsZSkgZmluYWw7CisgICAgdm9p
ZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdFbGxp
cHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBkcmF3UGF0
aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7CisKKyAgICB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgV2ViQ29yZTo6UGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJikgZmluYWw7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
V2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRy
YXdGb2N1c1JpbmcoY29uc3QgV2ViQ29yZTo6UGF0aCYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29s
JiBuZWVkc1JlZHJhdywgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRy
YXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBkb3VibGUgdGlt
ZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7
CisjZW5kaWYKKworICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9yZSgpIGZp
bmFsOworCisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisgICAg
dm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFsOworICAgIHZvaWQgc2NhbGUo
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgZmluYWw7CisgICAgdm9pZCBjb25jYXRDVE0oY29u
c3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgdm9pZCBzZXRDVE0oY29u
c3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgV2ViQ29yZTo6QWZmaW5l
VHJhbnNmb3JtIGdldENUTShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VT
Y2FsZSkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQgb3BhY2l0eSkgZmluYWw7CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFs
OworCisgICAgdm9pZCBjbGlwKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworICAg
IHZvaWQgY2xpcE91dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lk
IGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOworICAgIHZvaWQgY2xpcFBhdGgo
Y29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBmaW5hbDsKKyAgICBXZWJD
b3JlOjpJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGNsaXBUb0lt
YWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JikgZmluYWw7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29t
bWFuZHNSZXN1bHQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1
bmN0aW9uPHZvaWQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik+JiYpIGZpbmFsOworCisjaWYg
RU5BQkxFKFZJREVPKQorICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlh
UGxheWVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Cisj
ZW5kaWYKKworICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisK
KyAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgZmluYWw7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpdGVtTmVl
ZHNTdGF0ZSgpCisgICAgeworICAgICAgICBpZiAoVDo6aXNEcmF3aW5nSXRlbSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworCisjaWYgVVNFKENHKQorICAgICAgICBpZiAoVDo6aXRlbVR5cGUg
PT0gV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuIHx8IFQ6
Oml0ZW1UeXBlID09IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlTdHJva2VQ
YXR0ZXJuKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCByZWNvcmROYXRpdmVJbWFnZVVzZShXZWJDb3Jl
OjpOYXRpdmVJbWFnZSYpOworCisgICAgdm9pZCBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOworICAgIHZvaWQgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MpOworCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGV4dGVudEZyb21M
b2NhbEJvdW5kcyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBjb25zdDsKKworICAgIGNvbnN0
IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgY3RtKCkgY29uc3Q7CisKKyAgICBzdHJ1Y3QgQ29u
dGV4dFN0YXRlIHsKKyAgICAgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGN0bTsKKyAgICAg
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNsaXBCb3VuZHM7CisgICAgICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlOworICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZSBsYXN0RHJhd2luZ1N0YXRlOworCisgICAgICAgIENvbnRleHRTdGF0
ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGNsaXApCisgICAgICAgICAgICA6IGN0bSh0cmFuc2Zvcm0pCisgICAgICAgICAgICAsIGNsaXBC
b3VuZHMoY2xpcCkKKyAgICAgICAgICAgICwgbGFzdERyYXdpbmdTdGF0ZShzdGF0ZSkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgQ29udGV4dFN0YXRlIGNsb25lRm9yU2F2ZSgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIENvbnRleHRTdGF0ZSBzdGF0ZShsYXN0RHJhd2lu
Z1N0YXRlLCBjdG0sIGNsaXBCb3VuZHMpOworICAgICAgICAgICAgc3RhdGUuc3RhdGVDaGFuZ2Ug
PSBzdGF0ZUNoYW5nZTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIENvbnRleHRTdGF0ZSBjbG9uZUZvclRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgYXV0byBzdGF0ZSA9IGNsb25lRm9yU2F2ZSgpOworICAgICAg
ICAgICAgc3RhdGUubGFzdERyYXdpbmdTdGF0ZS5hbHBoYSA9IDE7CisgICAgICAgICAgICByZXR1
cm4gc3RhdGU7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBm
bG9hdCB5KTsKKyAgICAgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpOworICAg
ICAgICB2b2lkIHNjYWxlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOworICAgICAgICB2b2lk
IGNvbmNhdENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICAgICAgdm9p
ZCBzZXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJik7CisgICAgfTsKKworICAg
IGNvbnN0IENvbnRleHRTdGF0ZSYgY3VycmVudFN0YXRlKCkgY29uc3Q7CisgICAgQ29udGV4dFN0
YXRlJiBjdXJyZW50U3RhdGUoKTsKKworICAgIFZlY3RvcjxDb250ZXh0U3RhdGUsIDQ+IG1fc3Rh
dGVTdGFjazsKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgbV9kZXN0
aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXI7CisgICAgV2Vha1B0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFn
ZUJ1ZmZlcjsKKyAgICBXZWFrUHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gbV9yZW5k
ZXJpbmdCYWNrZW5kOworICAgIC8vIEZJWE1FOiBgRHJhd0dseXBoc1JlY29yZGVyYCBuZWVkcyB0
byBiZSByZWltcGxlbWVudGVkIHRvIHdvcmsgd2l0aCBSZW1vdGVHcmFwaGljc0NvbnRleHQuCisg
ICAgYm9vbCBtX2lzTmVzdGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fbmVlZHNGbHVzaCB7IGZh
bHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmgKaW5kZXggMjdiY2QwMDU0NTA5NThlODAyMTIzMzBjMWU4OTZlM2M4OTE3MzRmYi4uNWFj
YzdjZjg0OWU2NTkyN2M2OTg4OWM5MDBmNjNjY2U0Mjg3MjIyMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5LmgKQEAgLTI5LDEzICsyOSwxMyBAQAogCiAjaW5jbHVkZSAiRW5jb2Rlci5oIgog
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94
eS5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlcy5oIgogI2luY2x1
ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgogI2luY2x1ZGUgIlNoYXJlZE1lbW9y
eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29uY3JldGVJbWFnZUJ1ZmZlci5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Rp
c3BsYXlMaXN0UmVwbGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnku
aD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KQEAg
LTQ3LDE0ICs0NywyMyBAQCBjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwogdGVtcGxhdGU8
dHlwZW5hbWUgQmFja2VuZFR5cGU+IGNsYXNzIFRocmVhZFNhZmVSZW1vdGVJbWFnZUJ1ZmZlckZs
dXNoZXI7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgotY2xhc3MgUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SW1hZ2VCdWZmZXI8
QmFja2VuZFR5cGU+LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpEZWxl
Z2F0ZSwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyV3JpdGluZ0NsaWVu
dCB7Ci0gICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OwotICAgIHVzaW5nIEJhc2VEaXNwbGF5
TGlzdEltYWdlQnVmZmVyOjptX2JhY2tlbmQ7Ci0gICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1h
Z2VCdWZmZXI6Om1fZHJhd2luZ0NvbnRleHQ7Ci0gICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1h
Z2VCdWZmZXI6Om1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOwotICAgIHVzaW5nIEJhc2VE
aXNwbGF5TGlzdEltYWdlQnVmZmVyOjpyZXNvbHV0aW9uU2NhbGU7CitjbGFzcyBSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5IDogcHVibGljIFdlYkNvcmU6OkNvbmNyZXRlSW1hZ2VCdWZmZXI8QmFja2Vu
ZFR5cGU+IHsKKyAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OkNv
bmNyZXRlSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworICAgIHVzaW5nIEJhc2VDb25jcmV0ZUlt
YWdlQnVmZmVyOjptX2JhY2tlbmQ7CisgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6
Om1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOworICAgIHVzaW5nIEJhc2VDb25jcmV0ZUlt
YWdlQnVmZmVyOjpyZXNvbHV0aW9uU2NhbGU7CiAKIHB1YmxpYzoKKyAgICBzdGF0aWMgYXV0byBj
cmVhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgV2Vi
Q29yZTo6UGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIGNvbnN0IFdlYkNvcmU6Okhvc3RXaW5kb3cq
IGhvc3RXaW5kb3cpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZUNvbmNyZXRlSW1hZ2VCdWZm
ZXI6OnRlbXBsYXRlIGNyZWF0ZTxJbWFnZUJ1ZmZlcj4oc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBwaXhlbEZvcm1hdCwgaG9zdFdpbmRvdyk7CisgICAgfQorCisgICAgc3RhdGlj
IGF1dG8gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VD
b25jcmV0ZUltYWdlQnVmZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8SW1hZ2VCdWZmZXI+KHNpemUsIGNv
bnRleHQpOworICAgIH0KKwogICAgIHN0YXRpYyBSZWZQdHI8UmVtb3RlSW1hZ2VCdWZmZXJQcm94
eT4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2Us
IFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkmIHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKICAgICB7CiAgICAgICAgIGF1dG8g
cGFyYW1ldGVycyA9IFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6UGFyYW1ldGVycyB7IHNp
emUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcGl4ZWxGb3JtYXQgfTsKQEAgLTY2LDcg
Kzc1LDcgQEAgcHVibGljOgogICAgIH5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCkKICAgICB7CiAg
ICAgICAgIGlmICghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgfHwgbV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHktPmlzR1BVUHJvY2Vzc0Nvbm5lY3Rpb25DbG9zZWQoKSkgewotICAg
ICAgICAgICAgY2xlYXJEaXNwbGF5TGlzdCgpOworICAgICAgICAgICAgbV9kcmF3aW5nQ29udGV4
dC5yZXNldE5lZWRzRmx1c2goKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBA
IC04MCw5ICs4OSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y3JlYXRl
SW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKCk7CiAgICAgfQogCi0gICAgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZsdXNoSWRlbnRpZmllciBsYXN0U2VudEZsdXNoSWRlbnRpZmllcigpIGNvbnN0IHsg
cmV0dXJuIG1fc2VudEZsdXNoSWRlbnRpZmllcjsgfQorICAgIFdlYkNvcmU6OkZsdXNoSWRlbnRp
ZmllciBsYXN0U2VudEZsdXNoSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VudEZsdXNo
SWRlbnRpZmllcjsgfQogCi0gICAgdm9pZCB3YWl0Rm9yRGlkRmx1c2hPblNlY29uZGFyeVRocmVh
ZChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1c2hJZGVudGlmaWVyIHRhcmdldEZsdXNoSWRlbnRp
ZmllcikKKyAgICB2b2lkIHdhaXRGb3JEaWRGbHVzaE9uU2Vjb25kYXJ5VGhyZWFkKFdlYkNvcmU6
OkZsdXNoSWRlbnRpZmllciB0YXJnZXRGbHVzaElkZW50aWZpZXIpCiAgICAgewogICAgICAgICBB
U1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CiAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3JlY2Vp
dmVkRmx1c2hJZGVudGlmaWVyTG9jayB9OwpAQCAtOTgsMTkgKzEwNywxNCBAQCBwdWJsaWM6CiAK
IHByb3RlY3RlZDoKICAgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KGNvbnN0IFdlYkNvcmU6Oklt
YWdlQnVmZmVyQmFja2VuZDo6UGFyYW1ldGVycyYgcGFyYW1ldGVycywgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5JiByZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCi0gICAgICAgIDogQmFz
ZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIocGFyYW1ldGVycywgdGhpcykKKyAgICAgICAgOiBCYXNl
Q29uY3JldGVJbWFnZUJ1ZmZlcihwYXJhbWV0ZXJzKQogICAgICAgICAsIG1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KG1ha2VXZWFrUHRyKHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkp
CisgICAgICAgICwgbV9kcmF3aW5nQ29udGV4dCgqdGhpcywgcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LCB7IH0sIHsgeyB9LCBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemUo
KSB9LCBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6YmFzZVRyYW5zZm9ybSgpKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKICAgICAgICAgbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpLmNh
Y2hlSW1hZ2VCdWZmZXIoKnRoaXMpOwotCi0gICAgICAgIG1fZHJhd2luZ0NvbnRleHQuZGlzcGxh
eUxpc3QoKS5zZXRJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCh0aGlzKTsKLSAgICAgICAgbV9kcmF3
aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpLnNldEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50KG51bGxw
dHIpOwotICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuc2V0VHJhY2tzRHJh
d2luZ0l0ZW1FeHRlbnRzKGZhbHNlKTsKICAgICB9CiAKLSAgICBXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBCYXNlRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlcjo6cmVuZGVyaW5nTW9kZSgpOyB9Ci0KICAgICAvLyBJdCBpcyBzYWZlIHRvIGFj
Y2VzcyBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyIGZyb20gdGhlIG1haW4gdGhyZWFkIHdpdGhv
dXQgbG9ja2luZyBzaW5jZSBpdAogICAgIC8vIG9ubHkgZ2V0cyBtb2RpZmllZCBvbiB0aGUgbWFp
biB0aHJlYWQuCiAgICAgYm9vbCBoYXNQZW5kaW5nRmx1c2goKSBjb25zdCBXVEZfSUdOT1JFU19U
SFJFQURfU0FGRVRZX0FOQUxZU0lTCkBAIC0xMTksNyArMTIzLDcgQEAgcHJvdGVjdGVkOgogICAg
ICAgICByZXR1cm4gbV9zZW50Rmx1c2hJZGVudGlmaWVyICE9IG1fcmVjZWl2ZWRGbHVzaElkZW50
aWZpZXI7CiAgICAgfQogCi0gICAgdm9pZCBkaWRGbHVzaChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikgZmluYWwKKyAgICB2b2lkIGRpZEZsdXNo
KFdlYkNvcmU6OkZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpIGZpbmFsCiAgICAgewog
ICAgICAgICBBU1NFUlQoaXNNYWluUnVuTG9vcCgpKTsKICAgICAgICAgTG9ja2VyIGxvY2tlciB7
IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXJMb2NrIH07CkBAIC0yMTksNyArMjIzLDcgQEAgcHJv
dGVjdGVkOgogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgICAgICBhdXRv
JiBtdXRhYmxlVGhpcyA9IGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSY+KCp0aGlz
KTsKLSAgICAgICAgbXV0YWJsZVRoaXMubV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLmdldFBp
eGVsQnVmZmVyKGRlc3RpbmF0aW9uRm9ybWF0LCBzcmNSZWN0KTsKKyAgICAgICAgbXV0YWJsZVRo
aXMubV9kcmF3aW5nQ29udGV4dC5nZXRQaXhlbEJ1ZmZlcihkZXN0aW5hdGlvbkZvcm1hdCwgc3Jj
UmVjdCk7CiAgICAgICAgIG11dGFibGVUaGlzLmZsdXNoRHJhd2luZ0NvbnRleHRBc3luYygpOwog
CiAgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+d2FpdEZvckdldFBp
eGVsQnVmZmVyVG9Db21wbGV0ZSh0aW1lb3V0KSkKQEAgLTIyOSwxMiArMjMzLDMxIEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgcmV0dXJuIHBpeGVsQnVmZmVyOwogICAgIH0KIAorICAgIHZvaWQgY2xl
YXJCYWNrZW5kKCkgZmluYWwKKyAgICB7CisgICAgICAgIG1fZHJhd2luZ0NvbnRleHQucmVzZXRO
ZWVkc0ZsdXNoKCk7CisgICAgICAgIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpjbGVhckJhY2tl
bmQoKTsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBj
b25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VC
dWZmZXJQcm94eSo+KHRoaXMpLT5tX2RyYXdpbmdDb250ZXh0OworICAgIH0KKworICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSBmaW5hbAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICZtX2RyYXdpbmdDb250ZXh0OworICAgIH0KKwogICAgIHZvaWQgcHV0UGl4ZWxC
dWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50
ID0geyB9LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQgPSBXZWJD
b3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBmaW5hbAogICAgIHsK
KyAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCisg
ICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgLy8gVGhlIG1hdGggaW5zaWRlIFBpeGVsQnVm
ZmVyOjpjcmVhdGUoKSBkb2Vzbid0IGFncmVlIHdpdGggdGhlIG1hdGggaW5zaWRlIEltYWdlQnVm
ZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoKSBhYm91dCBob3cgbV9yZXNvbHV0aW9uU2NhbGUg
aW50ZXJhY3RzIHdpdGggdGhlIGRhdGEgaW4gdGhlIEltYWdlQnVmZmVyLgogICAgICAgICAvLyBU
aGlzIG1lYW5zIHRoYXQgcHV0UGl4ZWxCdWZmZXIoKSBpcyBvbmx5IGNhbGxlZCB3aGVuIHJlc29s
dXRpb25TY2FsZSgpID09IDEuCiAgICAgICAgIEFTU0VSVChyZXNvbHV0aW9uU2NhbGUoKSA9PSAx
KTsKLSAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLnB1dFBpeGVsQnVmZmVyKHBp
eGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQpOworICAgICAgICBtX2Ry
YXdpbmdDb250ZXh0LnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9p
bnQsIGRlc3RGb3JtYXQpOwogICAgIH0KIAogICAgIGJvb2wgcHJlZmVyc1ByZXBhcmF0aW9uRm9y
RGlzcGxheSgpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KQEAgLTI2MCwxMDQgKzI4Myw0NCBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmICghbV9kcmF3aW5nQ29u
dGV4dC5kaXNwbGF5TGlzdCgpLmlzRW1wdHkoKSB8fCAhaGFzUGVuZGluZ0ZsdXNoKCkpIHsKLSAg
ICAgICAgICAgIG1fc2VudEZsdXNoSWRlbnRpZmllciA9IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
bHVzaElkZW50aWZpZXI6OmdlbmVyYXRlKCk7Ci0gICAgICAgICAgICBtX2RyYXdpbmdDb250ZXh0
LnJlY29yZGVyKCkuZmx1c2hDb250ZXh0KG1fc2VudEZsdXNoSWRlbnRpZmllcik7CisgICAgICAg
IGlmIChtX2RyYXdpbmdDb250ZXh0Lm5lZWRzRmx1c2goKSB8fCAhaGFzUGVuZGluZ0ZsdXNoKCkp
IHsKKyAgICAgICAgICAgIG1fc2VudEZsdXNoSWRlbnRpZmllciA9IFdlYkNvcmU6OkZsdXNoSWRl
bnRpZmllcjo6Z2VuZXJhdGUoKTsKKyAgICAgICAgICAgIG1fZHJhd2luZ0NvbnRleHQuZmx1c2hD
b250ZXh0KG1fc2VudEZsdXNoSWRlbnRpZmllcik7CiAgICAgICAgIH0KIAotICAgICAgICBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVl
ZGVkKCk7Ci0gICAgICAgIGNsZWFyRGlzcGxheUxpc3QoKTsKKyAgICAgICAgbV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHktPnNlbmREZWZlcnJlZFdha2VVcE1lc3NhZ2VJZk5lZWRlZCgpOwor
ICAgICAgICBtX2RyYXdpbmdDb250ZXh0LnJlc2V0TmVlZHNGbHVzaCgpOwogICAgIH0KIAotICAg
IHZvaWQgcmVjb3JkTmF0aXZlSW1hZ2VVc2UoV2ViQ29yZTo6TmF0aXZlSW1hZ2UmIGltYWdlKSBm
aW5hbAorICAgIHZvaWQgcmVjb3JkTmF0aXZlSW1hZ2VVc2UoV2ViQ29yZTo6TmF0aXZlSW1hZ2Um
IGltYWdlKQogICAgIHsKICAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
KQogICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbW90ZVJlc291
cmNlQ2FjaGVQcm94eSgpLnJlY29yZE5hdGl2ZUltYWdlVXNlKGltYWdlKTsKICAgICB9CiAKLSAg
ICBib29sIGlzQ2FjaGVkSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGlt
YWdlQnVmZmVyKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgaWYgKCFtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0
byBjYWNoZWRJbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5yZW1v
dGVSZXNvdXJjZUNhY2hlUHJveHkoKS5jYWNoZWRJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5yZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgIEFTU0VSVCghY2FjaGVkSW1hZ2VC
dWZmZXIgfHwgY2FjaGVkSW1hZ2VCdWZmZXIgPT0gJmltYWdlQnVmZmVyKTsKLSAgICAgICAgcmV0
dXJuIGNhY2hlZEltYWdlQnVmZmVyOwotICAgIH0KLQotICAgIHZvaWQgY2hhbmdlRGVzdGluYXRp
b25JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgbmV4dElt
YWdlQnVmZmVyKSBmaW5hbAotICAgIHsKLSAgICAgICAgYm9vbCB3YXNFbXB0eSA9IG1fZHJhd2lu
Z0NvbnRleHQuZGlzcGxheUxpc3QoKS5pc0VtcHR5KCk7Ci0gICAgICAgIG1fZHJhd2luZ0NvbnRl
eHQuZGlzcGxheUxpc3QoKS50ZW1wbGF0ZSBhcHBlbmQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Ok1l
dGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcj4obmV4dEltYWdlQnVmZmVyKTsK
LSAgICAgICAgaWYgKHdhc0VtcHR5KQotICAgICAgICAgICAgY2xlYXJEaXNwbGF5TGlzdCgpOwot
ICAgIH0KLQotICAgIHZvaWQgcHJlcGFyZVRvQXBwZW5kRGlzcGxheUxpc3RJdGVtcyhXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSYmIGhhbmRsZSkgZmluYWwKLSAgICB7Ci0g
ICAgICAgIG1fZHJhd2luZ0NvbnRleHQuZGlzcGxheUxpc3QoKS5wcmVwYXJlVG9BcHBlbmQoV1RG
TW92ZShoYW5kbGUpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyRGlzcGxheUxpc3QoKQotICAg
IHsKLSAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpLmNsZWFyKCk7Ci0gICAg
fQotCi0gICAgYm9vbCBjYW5BcHBlbmRJdGVtT2ZUeXBlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZSkgZmluYWwKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+d2lsbEFwcGVuZEl0ZW0obV9yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2
b2lkIGRpZEFwcGVuZERhdGEoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJI
YW5kbGUmIGhhbmRsZSwgc2l6ZV90IG51bWJlck9mQnl0ZXMsIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaWRDaGFuZ2VJdGVtQnVmZmVyIGRpZENoYW5nZUl0ZW1CdWZmZXIpIGZpbmFsCi0gICAgewot
ICAgICAgICBpZiAoTElLRUxZKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKLSAgICAg
ICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5kaWRBcHBlbmREYXRhKGhhbmRs
ZSwgbnVtYmVyT2ZCeXRlcywgZGlkQ2hhbmdlSXRlbUJ1ZmZlciwgbV9yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpOwotICAgIH0KLQotICAgIHZvaWQgcmVjb3JkRm9udFVzZShXZWJDb3JlOjpG
b250JiBmb250KSBmaW5hbAorICAgIHZvaWQgcmVjb3JkRm9udFVzZShXZWJDb3JlOjpGb250JiBm
b250KQogICAgIHsKICAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQog
ICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbW90ZVJlc291cmNl
Q2FjaGVQcm94eSgpLnJlY29yZEZvbnRVc2UoZm9udCk7CiAgICAgfQogCi0gICAgdm9pZCByZWNv
cmRJbWFnZUJ1ZmZlclVzZShXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpIGZpbmFs
CisgICAgdm9pZCByZWNvcmRJbWFnZUJ1ZmZlclVzZShXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgaW1h
Z2VCdWZmZXIpCiAgICAgewogICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkpCiAgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVtb3RlUmVz
b3VyY2VDYWNoZVByb3h5KCkucmVjb3JkSW1hZ2VCdWZmZXJVc2UoaW1hZ2VCdWZmZXIpOwogICAg
IH0KIAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlIGNyZWF0ZUl0
ZW1CdWZmZXIoc2l6ZV90IGNhcGFjaXR5KSBmaW5hbAotICAgIHsKLSAgICAgICAgaWYgKExJS0VM
WShtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCi0gICAgICAgICAgICByZXR1cm4gbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPmNyZWF0ZUl0ZW1CdWZmZXIoY2FwYWNpdHksIG1f
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8V2ViQ29yZTo6
U2hhcmVkQnVmZmVyPiBlbmNvZGVJdGVtT3V0T2ZMaW5lKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEaXNwbGF5TGlzdEl0ZW0mIGl0ZW0pIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICBy
ZXR1cm4gV1RGOjp2aXNpdChbXShjb25zdCBhdXRvJiBkaXNwbGF5TGlzdEl0ZW0pIC0+IFJlZlB0
cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IHsKLSAgICAgICAgICAgIHVzaW5nIERpc3BsYXlMaXN0
SXRlbVR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKGRp
c3BsYXlMaXN0SXRlbSk+Ojp0eXBlOwotICAgICAgICAgICAgaWYgY29uc3RleHByICghRGlzcGxh
eUxpc3RJdGVtVHlwZTo6aXNJbmxpbmVJdGVtKQotICAgICAgICAgICAgICAgIHJldHVybiBJUEM6
OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxEaXNwbGF5TGlzdEl0ZW1UeXBlPihkaXNwbGF5
TGlzdEl0ZW0pOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9LCBpdGVtKTsKLSAgICB9Ci0KICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6VGhyZWFkU2FmZUltYWdlQnVmZmVyRmx1c2hlcj4g
Y3JlYXRlRmx1c2hlcigpIGZpbmFsCiAgICAgewogICAgICAgICByZXR1cm4gV1RGOjptYWtlVW5p
cXVlPFRocmVhZFNhZmVSZW1vdGVJbWFnZUJ1ZmZlckZsdXNoZXI8QmFja2VuZFR5cGU+PigqdGhp
cyk7CiAgICAgfQogCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNoSWRlbnRpZmllciBt
X3NlbnRGbHVzaElkZW50aWZpZXI7CisgICAgV2ViQ29yZTo6Rmx1c2hJZGVudGlmaWVyIG1fc2Vu
dEZsdXNoSWRlbnRpZmllcjsKICAgICBMb2NrIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXJMb2Nr
OwogICAgIENvbmRpdGlvbiBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyQ2hhbmdlZENvbmRpdGlv
bjsKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1c2hJZGVudGlmaWVyIG1fcmVjZWl2ZWRG
bHVzaElkZW50aWZpZXIgV1RGX0dVQVJERURfQllfTE9DSyhtX3JlY2VpdmVkRmx1c2hJZGVudGlm
aWVyTG9jayk7IC8vIE9ubHkgbW9kaWZpZWQgb24gdGhlIG1haW4gdGhyZWFkIGJ1dCBtYXkgZ2V0
IHF1ZXJpZWQgb24gYSBzZWNvbmRhcnkgdGhyZWFkLgorICAgIFdlYkNvcmU6OkZsdXNoSWRlbnRp
ZmllciBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyIFdURl9HVUFSREVEX0JZX0xPQ0sobV9yZWNl
aXZlZEZsdXNoSWRlbnRpZmllckxvY2spOyAvLyBPbmx5IG1vZGlmaWVkIG9uIHRoZSBtYWluIHRo
cmVhZCBidXQgbWF5IGdldCBxdWVyaWVkIG9uIGEgc2Vjb25kYXJ5IHRocmVhZC4KICAgICBXZWFr
UHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk7CisgICAgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHkgbV9kcmF3aW5nQ29udGV4dDsK
IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgpAQCAtMzc3LDcgKzM0MCw3IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBSZWY8UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTxCYWNr
ZW5kVHlwZT4+IG1faW1hZ2VCdWZmZXI7Ci0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNo
SWRlbnRpZmllciBtX3RhcmdldEZsdXNoSWRlbnRpZmllcjsKKyAgICBXZWJDb3JlOjpGbHVzaElk
ZW50aWZpZXIgbV90YXJnZXRGbHVzaElkZW50aWZpZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCBlYzc5
MzQxMDZiMTFiMzY2Yzc4OGM1M2JkOWIyNDA5Nzk2OWJkOWQ5Li5hZDFhNzdjMGY4ODVmMjIwNWVk
YjY4M2JlMmQ5NTVmYzY4NzY5ZTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAK
LSNpbmNsdWRlICJEaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5oIgogI2luY2x1ZGUgIkdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCkBAIC01Miw3ICs1MSw2IEBAIHN0ZDo6dW5p
cXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6Y3JlYXRlCiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eShXZWJQYWdlJiB3ZWJQYWdlKQogICAgIDogbV9wYXJhbWV0ZXJzIHsK
ICAgICAgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI6OmdlbmVyYXRlKCksCi0gICAgICAg
IElQQzo6U2VtYXBob3JlIHsgfSwKICAgICAgICAgd2ViUGFnZS53ZWJQYWdlUHJveHlJZGVudGlm
aWVyKCksCiAgICAgICAgIHdlYlBhZ2UuaWRlbnRpZmllcigpCiAgICAgfQpAQCAtNzcsNyArNzUs
OCBAQCBHUFVQcm9jZXNzQ29ubmVjdGlvbiYgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpl
bnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpCiAgICAgICAgIGF1dG8mIGdwdVByb2Nlc3NDb25u
ZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24oKTsKICAgICAgICAgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24uYWRkQ2xpZW50KCp0aGlzKTsKICAg
ICAgICAgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKS50b1VJbnQ2NCgpLCAq
dGhpcyk7Ci0gICAgICAgIGdwdVByb2Nlc3NDb25uZWN0aW9uLmNvbm5lY3Rpb24oKS5zZW5kKE1l
c3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVSZW5kZXJpbmdCYWNrZW5k
KG1fcGFyYW1ldGVycyksIDAsIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldo
ZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICAgICAgbV9zdHJlYW1Db25uZWN0aW9uID0gbWFr
ZVVuaXF1ZTxJUEM6OlN0cmVhbUNsaWVudENvbm5lY3Rpb24+KGdwdVByb2Nlc3NDb25uZWN0aW9u
LmNvbm5lY3Rpb24oKSwgMSA8PCAyMSk7CisgICAgICAgIGdwdVByb2Nlc3NDb25uZWN0aW9uLmNv
bm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVh
dGVSZW5kZXJpbmdCYWNrZW5kKG1fcGFyYW1ldGVycywgbV9zdHJlYW1Db25uZWN0aW9uLT5zdHJl
YW1CdWZmZXIoKSksIDAsIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5X
YWl0aW5nRm9yU3luY1JlcGx5KTsKICAgICAgICAgbV9ncHVQcm9jZXNzQ29ubmVjdGlvbiA9IG1h
a2VXZWFrUHRyKGdwdVByb2Nlc3NDb25uZWN0aW9uKTsKICAgICB9CiAgICAgcmV0dXJuICptX2dw
dVByb2Nlc3NDb25uZWN0aW9uOwpAQCAtOTEsMTIgKzkwLDYgQEAgdm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6OmdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UoR1BVUHJvY2Vzc0Nv
bm5lY3QKIAogICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LnJlbW90ZVJlc291cmNlQ2Fj
aGVXYXNEZXN0cm95ZWQoKTsKIAotICAgIG1faWRlbnRpZmllcnNPZlJldXNhYmxlSGFuZGxlcy5j
bGVhcigpOwotICAgIG1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzLmNsZWFyKCk7Ci0gICAgbV9j
dXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIgPSBzdGQ6Om51bGxvcHQ7Ci0g
ICAgbV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMgPSBzdGQ6Om51bGxvcHQ7Ci0gICAg
bV9yZW1haW5pbmdJdGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dha2V1cCA9IDA7Ci0KICAgICBp
ZiAobV9kZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlUaW1lci5pc0FjdGl2ZSgpKQog
ICAgICAgICBtX2Rlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeVRpbWVyLnN0b3AoKTsK
ICAgICBtX2dldFBpeGVsQnVmZmVyU2VtYXBob3JlID0gc3RkOjpudWxsb3B0OwpAQCAtMTE5LDYg
KzExMiw3IEBAIHVpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNl
bmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAogCiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OkRpZFJlY2VpdmVCYWNrZW5kQ3JlYXRpb25SZXN1bHQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5Ojp3YWl0Rm9yRGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCkKIHsKKyAgICBzZW5kRGVm
ZXJyZWRXYWtlVXBNZXNzYWdlSWZOZWVkZWQoKTsKICAgICBSZWZQdHIgY29ubmVjdGlvbiA9IG1l
c3NhZ2VTZW5kZXJDb25uZWN0aW9uKCk7CiAgICAgaWYgKCFjb25uZWN0aW9uLT53YWl0Rm9yQW5k
RGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjpEaWRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQ+KHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KCksIDFfcywgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2Fn
ZUFycml2ZXMpKQogICAgICAgICByZXR1cm4gRGlkUmVjZWl2ZUJhY2tlbmRDcmVhdGlvblJlc3Vs
dDo6VGltZW91dE9ySVBDRmFpbHVyZTsKQEAgLTEyNywxMyArMTIxLDE1IEBAIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6RGlkUmVjZWl2ZUJhY2tlbmRDcmVhdGlvblJlc3VsdCBSZW1vdGVS
ZW5kZXJpbmdCYWNrCiAKIGJvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp3YWl0Rm9y
RGlkRmx1c2goKQogeworICAgIHNlbmREZWZlcnJlZFdha2VVcE1lc3NhZ2VJZk5lZWRlZCgpOwog
ICAgIFJlZlB0ciBjb25uZWN0aW9uID0gbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKTsKICAgICBy
ZXR1cm4gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6RGlkRmx1c2g+KHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKCksIDFfcywgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZT
eW5jTWVzc2FnZUFycml2ZXMpOwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6Y3JlYXRlUmVtb3RlSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQogewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNyZWF0ZUltYWdlQnVm
ZmVyKGltYWdlQnVmZmVyLmxvZ2ljYWxTaXplKCksIGltYWdlQnVmZmVyLnJlbmRlcmluZ01vZGUo
KSwgaW1hZ2VCdWZmZXIucmVzb2x1dGlvblNjYWxlKCksIGltYWdlQnVmZmVyLmNvbG9yU3BhY2Uo
KSwgaW1hZ2VCdWZmZXIucGl4ZWxGb3JtYXQoKSwgaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKCkpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRP
cHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAg
c2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDcmVhdGVJbWFn
ZUJ1ZmZlcihpbWFnZUJ1ZmZlci5sb2dpY2FsU2l6ZSgpLCBpbWFnZUJ1ZmZlci5yZW5kZXJpbmdN
b2RlKCksIGltYWdlQnVmZmVyLnJlc29sdXRpb25TY2FsZSgpLCBpbWFnZUJ1ZmZlci5jb2xvclNw
YWNlKCksIGltYWdlQnVmZmVyLnBpeGVsRm9ybWF0KCksIGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcigpKSk7CisgICAgc2VuZERlZmVycmVkV2FrZVVwTWVzc2FnZUlmTmVl
ZGVkKCk7CiB9CiAKIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0KQpAQCAtMTYz
LDM2ICsxNTksOSBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaQogCiBTaGFyZWRNZW1vcnkqIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6c2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIo
c2l6ZV90IGRhdGFTaXplLCBJUEM6OlRpbWVvdXQgdGltZW91dCkKIHsKLSAgICBzZW5kRGVmZXJy
ZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKLQotICAgIGJvb2wgbmVlZHNTaGFyZWRNZW1vcnkg
PSAhbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSB8fCBkYXRhU2l6ZSA+IG1fZ2V0UGl4ZWxC
dWZmZXJTaGFyZWRNZW1vcnlMZW5ndGg7Ci0gICAgYm9vbCBuZWVkc1NlbWFwaG9yZSA9ICFtX2dl
dFBpeGVsQnVmZmVyU2VtYXBob3JlOwotCi0gICAgaWYgKG5lZWRzU2hhcmVkTWVtb3J5KQotICAg
ICAgICBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5ID0gbnVsbHB0cjsKLQotICAgIFNoYXJl
ZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZTsKLSAgICBJUEM6OlNlbWFwaG9yZSBzZW1hcGhvcmU7
Ci0KLSAgICBpZiAobmVlZHNTaGFyZWRNZW1vcnkgJiYgbmVlZHNTZW1hcGhvcmUpCi0gICAgICAg
IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRN
ZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcihkYXRhU2l6ZSksIE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JH
ZXRQaXhlbEJ1ZmZlcjo6UmVwbHkoaGFuZGxlLCBzZW1hcGhvcmUpLCByZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcigpLCB0aW1lb3V0LCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpNYWludGFpbk9yZGVy
aW5nV2l0aEFzeW5jTWVzc2FnZXMpOwotICAgIGVsc2UgaWYgKG5lZWRzU2hhcmVkTWVtb3J5KQot
ICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRl
U2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIoZGF0YVNpemUpLCBNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXI6OlJl
cGx5KGhhbmRsZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIHRpbWVvdXQsIElQQzo6
U2VuZFN5bmNPcHRpb246Ok1haW50YWluT3JkZXJpbmdXaXRoQXN5bmNNZXNzYWdlcyk7Ci0gICAg
ZWxzZSBpZiAobmVlZHNTZW1hcGhvcmUpCi0gICAgICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcigpLCBNZXNzYWdl
czo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6U2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXI6OlJl
cGx5KHNlbWFwaG9yZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIHRpbWVvdXQpOwot
Ci0gICAgaWYgKCFoYW5kbGUuaGFuZGxlLmlzTnVsbCgpKSB7Ci0gICAgICAgIG1fZ2V0UGl4ZWxC
dWZmZXJTaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6Om1hcChoYW5kbGUuaGFuZGxlLCBTaGFy
ZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLSAgICAgICAgbV9nZXRQaXhlbEJ1ZmZl
clNoYXJlZE1lbW9yeUxlbmd0aCA9IGhhbmRsZS5kYXRhU2l6ZTsKLSAgICB9Ci0gICAgaWYgKG5l
ZWRzU2VtYXBob3JlKQotICAgICAgICBtX2dldFBpeGVsQnVmZmVyU2VtYXBob3JlID0gV1RGTW92
ZShzZW1hcGhvcmUpOwotCi0gICAgaWYgKG1fZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVt
b3J5VGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9kZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFy
ZWRNZW1vcnlUaW1lci5zdG9wKCk7Ci0gICAgbV9kZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRN
ZW1vcnlUaW1lci5zdGFydE9uZVNob3QoNV9zKTsKLQotICAgIHJldHVybiBtX2dldFBpeGVsQnVm
ZmVyU2hhcmVkTWVtb3J5LmdldCgpOworICAgIHNlbmREZWZlcnJlZFdha2VVcE1lc3NhZ2VJZk5l
ZWRlZCgpOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUuCisgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKIGJvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp3YWl0Rm9yR2V0UGl4ZWxC
dWZmZXJUb0NvbXBsZXRlKElQQzo6VGltZW91dCB0aW1lb3V0KQpAQCAtMjAzLDY2ICsxNzIsNTgg
QEAgYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndhaXRGb3JHZXRQaXhlbEJ1ZmZl
clRvQ29tcGxldGUoSVBDOjpUaW1lb3V0IHQKIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpCiB7Ci0gICAgbV9nZXRQ
aXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSA9IG51bGxwdHI7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6RGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KCks
IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hN
ZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IG1lLgogfQogCiBTdHJpbmcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXREYXRh
VVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxk
b3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24sIFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiB7
Ci0gICAgc2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7Ci0KLSAgICBTdHJpbmcg
dXJsU3RyaW5nOwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpHZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVz
b2x1dGlvbiwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OkdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcjo6UmVwbHkodXJsU3RyaW5n
KSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgMV9zKTsKLSAgICByZXR1cm4gdXJsU3Ry
aW5nOworICAgIHNlbmREZWZlcnJlZFdha2VVcE1lc3NhZ2VJZk5lZWRlZCgpOworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgbWUuCisgICAgcmV0dXJuIHsgfTsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewotICAg
IHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwotCi0gICAgVmVjdG9yPHVpbnQ4
X3Q+IGRhdGE7Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OkdldERhdGFGb3JJbWFnZUJ1ZmZlcihtaW1lVHlwZSwgcXVhbGl0eSwgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldERhdGFG
b3JJbWFnZUJ1ZmZlcjo6UmVwbHkoZGF0YSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCks
IDFfcyk7Ci0gICAgcmV0dXJuIGRhdGE7CisgICAgc2VuZERlZmVycmVkV2FrZVVwTWVzc2FnZUlm
TmVlZGVkKCk7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBtZS4KKyAgICByZXR1cm4geyB9Owog
fQogCiBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OmdldFNoYXJlYWJsZUJpdG1hcChSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZm
ZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCiB7Ci0gICAgc2VuZERl
ZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7Ci0KLSAgICBTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSBoYW5kbGU7Ci0gICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyKGlt
YWdlQnVmZmVyLCBwcmVzZXJ2ZVJlc29sdXRpb24pLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6R2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXI6OlJlcGx5KGhhbmRsZSks
IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIDFfcyk7Ci0gICAgaWYgKGhhbmRsZS5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBBU1NFUlRfVU5VU0VEKHNlbmRSZXN1bHQs
IHNlbmRSZXN1bHQpOwotICAgIHJldHVybiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUp
OworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUuCisgICAgc2VuZERlZmVycmVkV2FrZVVwTWVz
c2FnZUlmTmVlZGVkKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6OmNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpI
YW5kbGUmIGhhbmRsZSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpDYWNoZU5hdGl2ZUltYWdlKGhhbmRsZSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRj
aE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIHNlbmRUb1N0cmVhbShN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q2FjaGVOYXRpdmVJbWFnZShoYW5kbGUs
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpOworICAgIHNlbmREZWZlcnJlZFdha2VVcE1l
c3NhZ2VJZk5lZWRlZCgpOwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
Y2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250PiYmIGZvbnQpCit2b2lkIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6Y2FjaGVGb250KFJlZjxGb250PiYmIGZvbnQpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q2FjaGVGb250KFdURk1vdmUoZm9udCkp
LCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNo
TWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAgc2VuZFRvU3RyZWFtKE1l
c3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDYWNoZUZvbnQoV1RGTW92ZShmb250KSkp
OworICAgIHNlbmREZWZlcnJlZFdha2VVcE1lc3NhZ2VJZk5lZWRlZCgpOwogfQogCiB2b2lkIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGVsZXRlQWxsRm9udHMoKQogewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRlbGV0ZUFsbEZvbnRzKCksIHJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdl
RXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICBzZW5kVG9TdHJlYW0oTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRlbGV0ZUFsbEZvbnRzKCkpOworICAgIHNlbmREZWZl
cnJlZFdha2VVcE1lc3NhZ2VJZk5lZWRlZCgpOwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KQogewot
ICAgIGlmIChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPT0gbV9jdXJyZW50RGVzdGluYXRp
b25JbWFnZUJ1ZmZlcklkZW50aWZpZXIpCi0gICAgICAgIG1fY3VycmVudERlc3RpbmF0aW9uSW1h
Z2VCdWZmZXJJZGVudGlmaWVyID0gc3RkOjpudWxsb3B0OwotCi0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciwgdXNlQ291bnQpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigp
LCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNS
ZXBseSk7CisgICAgc2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpSZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1c2VD
b3VudCkpOworICAgIHNlbmREZWZlcnJlZFdha2VVcE1lc3NhZ2VJZk5lZWRlZCgpOwogfQogCiB2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZmluYWxpemVSZW5kZXJpbmdVcGRhdGUo
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkZpbmFsaXpl
UmVuZGVyaW5nVXBkYXRlKG1fcmVuZGVyaW5nVXBkYXRlSUQpLCByZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGlu
Z0ZvclN5bmNSZXBseSk7CisgICAgc2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpGaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShtX3JlbmRlcmluZ1VwZGF0ZUlEKSk7
CisgICAgc2VuZERlZmVycmVkV2FrZVVwTWVzc2FnZUlmTmVlZGVkKCk7CiAgICAgbV9yZW1vdGVS
ZXNvdXJjZUNhY2hlUHJveHkuZmluYWxpemVSZW5kZXJpbmdVcGRhdGUoKTsKICAgICBtX3JlbmRl
cmluZ1VwZGF0ZUlELmluY3JlbWVudCgpOwogfQpAQCAtMjgxLDE3MCArMjQyLDc2IEBAIHZvaWQg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQo
SW1hZ2VCdWZmZXJCYWNrZW5kCiAgICAgICAgIGltYWdlQnVmZmVyLT5zZXRCYWNrZW5kKEFjY2Vs
ZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kOjpjcmVhdGUoaW1hZ2VCdWZmZXItPnBh
cmFtZXRlcnMoKSwgV1RGTW92ZShoYW5kbGUpKSk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpkaWRGbHVzaChEaXNwbGF5TGlzdDo6Rmx1c2hJZGVudGlmaWVyIGZsdXNo
SWRlbnRpZmllciwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRGbHVzaChG
bHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewogICAgIGlmIChhdXRvIGltYWdlQnVm
ZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY2FjaGVkSW1hZ2VCdWZmZXIocmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKSkKICAgICAgICAgaW1hZ2VCdWZmZXItPmRpZEZsdXNoKGZs
dXNoSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpk
aWRGaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShSZW5kZXJpbmdVcGRhdGVJRCBkaWRSZW5kZXJpbmdV
cGRhdGVJRCkKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRGaW5hbGl6ZVJl
bmRlcmluZ1VwZGF0ZShSZW5kZXJpbmdVcGRhdGVJRCByZW5kZXJpbmdVcGRhdGVJRCkKIHsKLSAg
ICBBU1NFUlQoZGlkUmVuZGVyaW5nVXBkYXRlSUQgPD0gbV9yZW5kZXJpbmdVcGRhdGVJRCk7Ci0g
ICAgbV9kaWRSZW5kZXJpbmdVcGRhdGVJRCA9IHN0ZDo6bWluKGRpZFJlbmRlcmluZ1VwZGF0ZUlE
LCBtX3JlbmRlcmluZ1VwZGF0ZUlEKTsKKyAgICBBU1NFUlQocmVuZGVyaW5nVXBkYXRlSUQgPD0g
bV9yZW5kZXJpbmdVcGRhdGVJRCk7CisgICAgbV9kaWRSZW5kZXJpbmdVcGRhdGVJRCA9IHN0ZDo6
bWluKHJlbmRlcmluZ1VwZGF0ZUlELCBtX3JlbmRlcmluZ1VwZGF0ZUlEKTsKIH0KIAotdm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndpbGxBcHBlbmRJdGVtKFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciBuZXdEZXN0aW5hdGlvbklkZW50aWZpZXIpCitSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllciBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKCkgY29uc3QKIHsKLSAgICBpZiAobV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1
ZmZlcklkZW50aWZpZXIgPT0gbmV3RGVzdGluYXRpb25JZGVudGlmaWVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoYXV0byBwcmV2aW91c0Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllciA9
IHN0ZDo6ZXhjaGFuZ2UobV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIs
IG5ld0Rlc3RpbmF0aW9uSWRlbnRpZmllcikpIHsKLSAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZm
ZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jYWNoZWRJbWFnZUJ1ZmZlcigqcHJldmlv
dXNEZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpKQotICAgICAgICAgICAgaW1hZ2VCdWZmZXIt
PmNoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIobmV3RGVzdGluYXRpb25JZGVudGlmaWVyKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQot
Ci0gICAgYXV0byBoYW5kbGUgPSBtb3N0UmVjZW50bHlVc2VkRGlzcGxheUxpc3RIYW5kbGUoKTsK
LSAgICBpZiAoVU5MSUtFTFkoIWhhbmRsZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8g
bmV3RGVzdGluYXRpb24gPSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jYWNoZWRJbWFnZUJ1
ZmZlcihuZXdEZXN0aW5hdGlvbklkZW50aWZpZXIpOwotICAgIGlmIChVTkxJS0VMWSghbmV3RGVz
dGluYXRpb24pKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaGFuZGxlLT5tb3ZlV3JpdGFibGVPZmZzZXRUb1N0YXJ0SWZQb3Nz
aWJsZSgpOwotICAgIG5ld0Rlc3RpbmF0aW9uLT5wcmVwYXJlVG9BcHBlbmREaXNwbGF5TGlzdEl0
ZW1zKGhhbmRsZS0+Y3JlYXRlSGFuZGxlKCkpOworICAgIHJldHVybiBtX3BhcmFtZXRlcnMuaWRl
bnRpZmllcjsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNlbmRXYWtl
dXBNZXNzYWdlKGNvbnN0IEdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzJiBhcmd1bWVu
dHMpCitSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OmVuc3VyZUJhY2tlbmRDcmVhdGVkKCkKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2hhcmVk
RGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlNlbmRpbmcgd2FrZXVwOiBJdGVtc1siIDw8IGFyZ3Vt
ZW50cy5pdGVtQnVmZmVySWRlbnRpZmllciA8PCAiXSA9PiBJbWFnZSgiIDw8IGFyZ3VtZW50cy5k
ZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllciA8PCAiKSBhdCAiIDw8IGFyZ3VtZW50cy5v
ZmZzZXQpOwotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Oldha2VV
cEFuZEFwcGx5RGlzcGxheUxpc3QoYXJndW1lbnRzKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JT
eW5jUmVwbHkpOworICAgIGVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCk7CisgICAgcmV0dXJu
IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKQorSVBDOjpT
dHJlYW1DbGllbnRDb25uZWN0aW9uJiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnN0cmVh
bUNvbm5lY3Rpb24oKQogewotICAgIGF1dG8gYXJndW1lbnRzID0gc3RkOjpleGNoYW5nZShtX2Rl
ZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50cywgc3RkOjpudWxsb3B0KTsKLSAgICBpZiAoIWFy
Z3VtZW50cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2VuZFdha2V1cE1lc3NhZ2UoKmFyZ3Vt
ZW50cyk7Ci0gICAgbV9yZW1haW5pbmdJdGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dha2V1cCA9
IDA7Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRBcHBlbmREYXRh
KGNvbnN0IERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlJiBoYW5kbGUsIHNpemVfdCBudW1i
ZXJPZkJ5dGVzLCBEaXNwbGF5TGlzdDo6RGlkQ2hhbmdlSXRlbUJ1ZmZlciBkaWRDaGFuZ2VJdGVt
QnVmZmVyLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb25JbWFnZUJ1ZmZl
cikKLXsKLSAgICBhdXRvKiBzaGFyZWRIYW5kbGUgPSBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxl
cy5nZXQoaGFuZGxlLmlkZW50aWZpZXIpOwotICAgIGlmIChVTkxJS0VMWSghc2hhcmVkSGFuZGxl
KSkKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIGJvb2wgd2Fz
RW1wdHkgPSBzaGFyZWRIYW5kbGUtPmFkdmFuY2UobnVtYmVyT2ZCeXRlcykgPT0gbnVtYmVyT2ZC
eXRlczsKLSAgICBpZiAoIXdhc0VtcHR5IHx8IGRpZENoYW5nZUl0ZW1CdWZmZXIgPT0gRGlzcGxh
eUxpc3Q6OkRpZENoYW5nZUl0ZW1CdWZmZXI6OlllcykgewotICAgICAgICBpZiAobV9kZWZlcnJl
ZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMpIHsKLSAgICAgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIg
PSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jYWNoZWRJbWFnZUJ1ZmZlcihtX2RlZmVycmVk
V2FrZXVwTWVzc2FnZUFyZ3VtZW50cy0+ZGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIp
OwotICAgICAgICAgICAgaWYgKGltYWdlQnVmZmVyICYmIGltYWdlQnVmZmVyLT5iYWNrZW5kKCkg
JiYgc2hhcmVkSGFuZGxlLT50cnlUb1Jlc3VtZSh7IG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJn
dW1lbnRzLT5vZmZzZXQsIG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzLT5kZXN0aW5h
dGlvbkltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpIH0pKSB7Ci0gICAgICAgICAgICAg
ICAgbV9wYXJhbWV0ZXJzLnJlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlLnNpZ25hbCgpOwotICAg
ICAgICAgICAgICAgIG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzID0gc3RkOjpudWxs
b3B0OwotICAgICAgICAgICAgICAgIG1fcmVtYWluaW5nSXRlbXNUb0FwcGVuZEJlZm9yZVNlbmRp
bmdXYWtldXAgPSAwOwotICAgICAgICAgICAgfSBlbHNlIGlmICghLS1tX3JlbWFpbmluZ0l0ZW1z
VG9BcHBlbmRCZWZvcmVTZW5kaW5nV2FrZXVwKSB7Ci0gICAgICAgICAgICAgICAgbV9kZWZlcnJl
ZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMtPnJlYXNvbiA9IEdQVVByb2Nlc3NXYWtldXBSZWFzb246
Okl0ZW1Db3VudEh5c3RlcmVzaXNFeGNlZWRlZDsKLSAgICAgICAgICAgICAgICBzZW5kV2FrZXVw
TWVzc2FnZSgqc3RkOjpleGNoYW5nZShtX2RlZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50cywg
c3RkOjpudWxsb3B0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwotCi0g
ICAgYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNhY2hlZElt
YWdlQnVmZmVyKGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIpOwotICAgIGF1dG8gb2Zmc2V0VG9SZWFk
ID0gc2hhcmVkSGFuZGxlLT53cml0YWJsZU9mZnNldCgpIC0gbnVtYmVyT2ZCeXRlczsKLSAgICBp
ZiAoaW1hZ2VCdWZmZXIgJiYgaW1hZ2VCdWZmZXItPmJhY2tlbmQoKSAmJiBzaGFyZWRIYW5kbGUt
PnRyeVRvUmVzdW1lKHsgb2Zmc2V0VG9SZWFkLCBkZXN0aW5hdGlvbkltYWdlQnVmZmVyLnRvVUlu
dDY0KCkgfSkpIHsKLSAgICAgICAgbV9wYXJhbWV0ZXJzLnJlc3VtZURpc3BsYXlMaXN0U2VtYXBo
b3JlLnNpZ25hbCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSW5zdGVhZCBv
ZiBzZW5kaW5nIHRoZSB3YWtldXAgbWVzc2FnZSBpbW1lZGlhdGVseSwgd2FpdCBmb3Igc29tZSBh
ZGRpdGlvbmFsIGRhdGEuIFRoaXMgZ2l2ZXMgdGhlCi0gICAgLy8gd2ViIHByb2Nlc3MgYSAiaGVh
ZCBzdGFydCIsIGRlY3JlYXNpbmcgdGhlIGxpa2VsaWhvb2QgdGhhdCB0aGUgR1BVIHByb2Nlc3Mg
d2lsbCBlbmNvdW50ZXIgZnJlcXVlbnQKLSAgICAvLyB3YWtldXBzIHdoZW4gcHJvY2Vzc2luZyBh
IGxhcmdlIGFtb3VudCBvZiBkaXNwbGF5IGxpc3QgaXRlbXMuCi0gICAgY29uc3RleHByIHVuc2ln
bmVkIGl0ZW1Db3VudEh5c3RlcmVzaXNCZWZvcmVTZW5kaW5nV2FrZXVwID0gNTEyOwotCi0gICAg
bV9yZW1haW5pbmdJdGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dha2V1cCA9IGl0ZW1Db3VudEh5
c3RlcmVzaXNCZWZvcmVTZW5kaW5nV2FrZXVwOwotICAgIG1fZGVmZXJyZWRXYWtldXBNZXNzYWdl
QXJndW1lbnRzID0ge3sgaGFuZGxlLmlkZW50aWZpZXIsIG9mZnNldFRvUmVhZCwgZGVzdGluYXRp
b25JbWFnZUJ1ZmZlciB9fTsKKyAgICBlbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpOworICAg
IGlmICghbV9kaWRDcmVhdGVXYWtlVXBTZW1hcGhvcmVGb3JEaXNwbGF5TGlzdFN0cmVhbSkKKyAg
ICAgICAgbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKS0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRp
YXRlbHk8TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6RGlkQ3JlYXRlV2Fr
ZVVwU2VtYXBob3JlRm9yRGlzcGxheUxpc3RTdHJlYW0+KHJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKCksIFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0
V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKKyAgICByZXR1cm4gKm1fc3RyZWFtQ29ubmVj
dGlvbjsKIH0KIAotUmVmUHRyPERpc3BsYXlMaXN0V3JpdGVySGFuZGxlPiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6Om1vc3RSZWNlbnRseVVzZWREaXNwbGF5TGlzdEhhbmRsZSgpCit2b2lk
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6c2VuZERlZmVycmVkV2FrZVVwTWVzc2FnZUlm
TmVlZGVkKCkKIHsKLSAgICBpZiAoVU5MSUtFTFkobV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5k
bGVzLmlzRW1wdHkoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIG1f
c2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzLmdldChtX2lkZW50aWZpZXJzT2ZSZXVzYWJsZUhhbmRs
ZXMuZmlyc3QoKSk7CisgICAgaWYgKG1fc3RyZWFtQ29ubmVjdGlvbikKKyAgICAgICAgbV9zdHJl
YW1Db25uZWN0aW9uLT5zZW5kRGVmZXJyZWRXYWtlVXBNZXNzYWdlKCk7CiB9CiAKLVJlZlB0cjxE
aXNwbGF5TGlzdFdyaXRlckhhbmRsZT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmaW5k
UmV1c2FibGVEaXNwbGF5TGlzdEhhbmRsZShzaXplX3QgY2FwYWNpdHkpCit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6ZGlkQ3JlYXRlV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxheUxp
c3RTdHJlYW0oSVBDOjpTZW1hcGhvcmUmJiBzZW1hcGhvcmUpCiB7Ci0gICAgYXV0byBtb3N0UmVj
ZW50bHlVc2VkSGFuZGxlID0gbW9zdFJlY2VudGx5VXNlZERpc3BsYXlMaXN0SGFuZGxlKCk7Ci0g
ICAgaWYgKFVOTElLRUxZKCFtb3N0UmVjZW50bHlVc2VkSGFuZGxlKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBtb3N0UmVjZW50bHlVc2VkSGFuZGxlLT5tb3ZlV3JpdGFibGVPZmZz
ZXRUb1N0YXJ0SWZQb3NzaWJsZSgpOwotICAgIGlmIChtb3N0UmVjZW50bHlVc2VkSGFuZGxlLT5h
dmFpbGFibGVDYXBhY2l0eSgpID49IGNhcGFjaXR5KQotICAgICAgICByZXR1cm4gbW9zdFJlY2Vu
dGx5VXNlZEhhbmRsZTsKLQotICAgIG1faWRlbnRpZmllcnNPZlJldXNhYmxlSGFuZGxlcy5hcHBl
bmQobV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVzLnRha2VGaXJzdCgpKTsKLQotICAgIGF1
dG8gbGVhc3RSZWNlbnRseVVzZWRJZGVudGlmaWVyID0gbV9pZGVudGlmaWVyc09mUmV1c2FibGVI
YW5kbGVzLmZpcnN0KCk7Ci0gICAgaWYgKGxlYXN0UmVjZW50bHlVc2VkSWRlbnRpZmllciAhPSBt
b3N0UmVjZW50bHlVc2VkSGFuZGxlLT5pZGVudGlmaWVyKCkpIHsKLSAgICAgICAgUmVmUHRyIGhh
bmRsZSA9IG1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzLmdldChsZWFzdFJlY2VudGx5VXNlZElk
ZW50aWZpZXIpOwotICAgICAgICBpZiAoaGFuZGxlLT5tb3ZlV3JpdGFibGVPZmZzZXRUb1N0YXJ0
SWZQb3NzaWJsZSgpICYmIGhhbmRsZS0+YXZhaWxhYmxlQ2FwYWNpdHkoKSA+PSBjYXBhY2l0eSkK
LSAgICAgICAgICAgIHJldHVybiBoYW5kbGU7CisgICAgaWYgKCFtX3N0cmVhbUNvbm5lY3Rpb24p
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBtX3N0cmVhbUNvbm5lY3Rpb24tPnNldFdha2VV
cFNlbWFwaG9yZShXVEZNb3ZlKHNlbWFwaG9yZSkpOworICAgIG1fZGlkQ3JlYXRlV2FrZVVwU2Vt
YXBob3JlRm9yRGlzcGxheUxpc3RTdHJlYW0gPSB0cnVlOwogfQogCi1EaXNwbGF5TGlzdDo6SXRl
bUJ1ZmZlckhhbmRsZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUl0ZW1CdWZm
ZXIoc2l6ZV90IGNhcGFjaXR5LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRp
b25CdWZmZXJJZGVudGlmaWVyKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJl
Y29yZE5hdGl2ZUltYWdlVXNlKE5hdGl2ZUltYWdlJiBpbWFnZSkKIHsKLSAgICBpZiAoYXV0byBo
YW5kbGUgPSBmaW5kUmV1c2FibGVEaXNwbGF5TGlzdEhhbmRsZShjYXBhY2l0eSkpIHsKLSAgICAg
ICAgTE9HX1dJVEhfU1RSRUFNKFNoYXJlZERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJSZXVzaW5n
IEl0ZW1zWyIgPDwgaGFuZGxlLT5pZGVudGlmaWVyKCkgPDwgIl0gPT4gSW1hZ2UoIiA8PCBkZXN0
aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIgPDwgIikgKHJlbWFpbmluZyBjYXBhY2l0eTogIiA8PCBo
YW5kbGUtPmF2YWlsYWJsZUNhcGFjaXR5KCkgPDwgIikiKTsKLSAgICAgICAgcmV0dXJuIGhhbmRs
ZS0+Y3JlYXRlSGFuZGxlKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
ZGVmYXVsdFNoYXJlZEl0ZW1CdWZmZXJTaXplID0gMSA8PCAxNjsKLSAgICBzdGF0aWNfYXNzZXJ0
KGRlZmF1bHRTaGFyZWRJdGVtQnVmZmVyU2l6ZSA+IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpo
ZWFkZXJTaXplKCkpOwotCi0gICAgYXV0byBzaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFs
bG9jYXRlKHN0ZDo6bWF4KGRlZmF1bHRTaGFyZWRJdGVtQnVmZmVyU2l6ZSwgY2FwYWNpdHkgKyBT
aGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6aGVhZGVyU2l6ZSgpKSk7Ci0gICAgaWYgKCFzaGFyZWRN
ZW1vcnkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBz
aGFyZWRNZW1vcnlIYW5kbGU7Ci0gICAgc2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUoc2hhcmVk
TWVtb3J5SGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRXcml0ZSk7Ci0KLSAg
ICBhdXRvIGlkZW50aWZpZXIgPSBEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXI6Omdl
bmVyYXRlKCk7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6RGlk
Q3JlYXRlU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoaWRlbnRpZmllciwgeyBXVEZNb3ZlKHNoYXJl
ZE1lbW9yeUhhbmRsZSksIHNoYXJlZE1lbW9yeS0+c2l6ZSgpIH0sIGRlc3RpbmF0aW9uQnVmZmVy
SWRlbnRpZmllciksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlv
bjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKLQotICAgIGF1
dG8gbmV3SGFuZGxlID0gRGlzcGxheUxpc3RXcml0ZXJIYW5kbGU6OmNyZWF0ZShpZGVudGlmaWVy
LCBzaGFyZWRNZW1vcnkucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobmV3
SGFuZGxlLCAiVGhlcmUgbXVzdCBiZSBlbm91Z2ggc3BhY2UgdG8gY3JlYXRlIHRoZSBoYW5kbGUu
Iik7Ci0gICAgYXV0byBkaXNwbGF5TGlzdEhhbmRsZSA9IG5ld0hhbmRsZS0+Y3JlYXRlSGFuZGxl
KCk7Ci0KLSAgICBtX2lkZW50aWZpZXJzT2ZSZXVzYWJsZUhhbmRsZXMucHJlcGVuZChpZGVudGlm
aWVyKTsKLSAgICBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlcy5zZXQoaWRlbnRpZmllciwgV1RG
TW92ZShuZXdIYW5kbGUpKTsKKyAgICBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5yZWNvcmRO
YXRpdmVJbWFnZVVzZShpbWFnZSk7Cit9CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2hhcmVkRGlz
cGxheUxpc3RzLCBzdHJlYW0gPDwgIkFsbG9jYXRlZCBJdGVtc1siIDw8IGlkZW50aWZpZXIgPDwg
Il0gPT4gSW1hZ2UoIiA8PCBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIgPDwgIikiKTsKLSAg
ICByZXR1cm4gZGlzcGxheUxpc3RIYW5kbGU7Cit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6cmVjb3JkRm9udFVzZShGb250JiBmb250KQoreworICAgIG1fcmVtb3RlUmVzb3VyY2VD
YWNoZVByb3h5LnJlY29yZEZvbnRVc2UoZm9udCk7CiB9CiAKLVJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIoKSBjb25zdAordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlY29yZElt
YWdlQnVmZmVyVXNlKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikKIHsKLSAgICByZXR1cm4gbV9w
YXJhbWV0ZXJzLmlkZW50aWZpZXI7CisgICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkucmVj
b3JkSW1hZ2VCdWZmZXJVc2UoaW1hZ2VCdWZmZXIpOwogfQogCi1SZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmVuc3VyZUJhY2tlbmRDcmVhdGVk
KCkKK2Jvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojppc0NhY2hlZChjb25zdCBJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpIGNvbnN0CiB7Ci0gICAgZW5zdXJlR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24oKTsKLSAgICByZXR1cm4gcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKTsKKyAgICBp
ZiAoYXV0byBjYWNoZWRJbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNh
Y2hlZEltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigp
KSkgeworICAgICAgICBBU1NFUlQoY2FjaGVkSW1hZ2VCdWZmZXIgPT0gJmltYWdlQnVmZmVyKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApp
bmRleCA4N2FlNTIyY2JiYjI4MWZjNGE4ODA3NjViOTlmNGM5MDI1NmE5ZDI1Li45ODRmMGVmNzlj
ZDNmNzcxMjU0M2JlODYwNzkzODA3ODQxYzE2MTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmgKQEAgLTMzLDExICszMywxMyBAQAogI2luY2x1ZGUgIkltYWdlQnVmZmVy
QmFja2VuZEhhbmRsZS5oIgogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUg
Ik1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRNZXNzYWdl
cy5oIgogI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMu
aCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMuaCIKICNpbmNsdWRl
ICJSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ1VwZGF0ZUlELmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgorI2luY2x1ZGUgIlN0cmVhbUNsaWVudENvbm5lY3Rpb24u
aCIKICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KQEAgLTQ1LDEx
ICs0Nyw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotbmFtZXNwYWNlIERpc3BsYXlMaXN0
IHsKLWNsYXNzIERpc3BsYXlMaXN0OwotY2xhc3MgSXRlbTsKLX0KLQogY2xhc3MgRGVzdGluYXRp
b25Db2xvclNwYWNlOwogY2xhc3MgRmxvYXRTaXplOwogY2xhc3MgUGl4ZWxCdWZmZXI7CkBAIC02
MSwxMyArNTgsMTMgQEAgZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIDogYm9vbDsKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLWNsYXNzIERpc3BsYXlMaXN0V3JpdGVySGFuZGxlOwogY2xhc3MgV2Vi
UGFnZTsKIAogY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5CiAgICAgOiBwdWJsaWMg
SVBDOjpNZXNzYWdlU2VuZGVyCiAgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyCi0g
ICAgLCBwdWJsaWMgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OkNsaWVudCB7CisgICAgLCBwdWJsaWMg
R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OkNsaWVudAorICAgICwgcHVibGljIFJlZkNvdW50ZWQ8UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IGNyZWF0ZShXZWJQYWdlJik7CiAK
QEAgLTc3LDE3ICs3NCwxMyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgV2Vha1ZhbHVlVHlwZSA9IEdQ
VVByb2Nlc3NDb25uZWN0aW9uOjpDbGllbnQ6OldlYWtWYWx1ZVR5cGU7CiAKICAgICBSZW1vdGVS
ZXNvdXJjZUNhY2hlUHJveHkmIHJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpIHsgcmV0dXJuIG1f
cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OyB9Ci0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1CdWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QgY2FwYWNpdHksIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIp
OwotCi0gICAgdm9pZCBkaWRBcHBlbmREYXRhKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVySGFuZGxlJiwgc2l6ZV90IG51bWJlck9mQnl0ZXMsIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEaWRDaGFuZ2VJdGVtQnVmZmVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgZGVzdGluYXRpb25JbWFnZUJ1ZmZlcik7Ci0gICAgdm9pZCB3aWxsQXBwZW5kSXRlbShX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZvaWQgc2VuZERlZmVy
cmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7CiAKICAgICBTaGFyZWRNZW1vcnkqIHNoYXJlZE1l
bW9yeUZvckdldFBpeGVsQnVmZmVyKHNpemVfdCBkYXRhU2l6ZSwgSVBDOjpUaW1lb3V0KTsKICAg
ICBib29sIHdhaXRGb3JHZXRQaXhlbEJ1ZmZlclRvQ29tcGxldGUoSVBDOjpUaW1lb3V0KTsKICAg
ICB2b2lkIGRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpOwogCiAgICAgdm9pZCBj
cmVhdGVSZW1vdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpOworICAgIGJvb2wg
aXNDYWNoZWQoY29uc3QgV2ViQ29yZTo6SW1hZ2VCdWZmZXImKSBjb25zdDsKICAgICAgICAgCiAg
ICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgogICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNl
bmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKQEAgLTEwMCw3ICs5Myw2IEBAIHB1Ymxp
YzoKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNv
bnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgY29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgV2Vi
Q29yZTo6UGl4ZWxGb3JtYXQpOwogICAgIFN0cmluZyBnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdl
YkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKTsKICAgICBWZWN0b3I8dWludDhfdD4gZ2V0RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpGbHVzaElkZW50aWZpZXIgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpOwogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGdldFNoYXJlYWJsZUJpdG1h
cChXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlByZXNlcnZl
UmVzb2x1dGlvbik7CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAg
ICB2b2lkIGNhY2hlRm9udChSZWY8V2ViQ29yZTo6Rm9udD4mJik7CkBAIC0xMjQsOSArMTE2LDMw
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNHUFVQcm9jZXNzQ29ubmVjdGlvbkNsb3NlZCgpIGNv
bnN0IHsgcmV0dXJuICFtX2dwdVByb2Nlc3NDb25uZWN0aW9uOyB9CiAKKyAgICB2b2lkIGRpZENy
ZWF0ZVdha2VVcFNlbWFwaG9yZUZvckRpc3BsYXlMaXN0U3RyZWFtKElQQzo6U2VtYXBob3JlJiYp
OworICAgIHZvaWQgc2VuZERlZmVycmVkV2FrZVVwTWVzc2FnZUlmTmVlZGVkKCk7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorICAgIHZvaWQgc2VuZFRvU3RyZWFtKFQm
JiBtZXNzYWdlLCBPYmplY3RJZGVudGlmaWVyPFU+IGlkZW50aWZpZXIpCisgICAgeworICAgICAg
ICBzdHJlYW1Db25uZWN0aW9uKCkuc2VuZChXVEZNb3ZlKG1lc3NhZ2UpLCBpZGVudGlmaWVyLCBT
ZWNvbmRzOjppbmZpbml0eSgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIHZvaWQgc2VuZFRvU3RyZWFtKFQmJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgc2VuZFRv
U3RyZWFtKFdURk1vdmUobWVzc2FnZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCkpOwor
ICAgIH0KKworICAgIHZvaWQgcmVjb3JkTmF0aXZlSW1hZ2VVc2UoV2ViQ29yZTo6TmF0aXZlSW1h
Z2UmKTsKKyAgICB2b2lkIHJlY29yZEZvbnRVc2UoV2ViQ29yZTo6Rm9udCYpOworICAgIHZvaWQg
cmVjb3JkSW1hZ2VCdWZmZXJVc2UoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKTsKKwogcHJpdmF0ZToK
ICAgICBleHBsaWNpdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoV2ViUGFnZSYpOwogCisg
ICAgSVBDOjpTdHJlYW1DbGllbnRDb25uZWN0aW9uJiBzdHJlYW1Db25uZWN0aW9uKCk7CisKICAg
ICAvLyBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBncHVQcm9jZXNzQ29u
bmVjdGlvbkRpZENsb3NlKEdQVVByb2Nlc3NDb25uZWN0aW9uJikgZmluYWw7CiAKQEAgLTEzNCwy
NCArMTQ3LDE0IEBAIHByaXZhdGU6CiAKICAgICAvLyBNZXNzYWdlcyB0byBiZSByZWNlaXZlZC4K
ICAgICB2b2lkIGRpZENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChJbWFnZUJ1ZmZlckJhY2tlbmRI
YW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0gICAgdm9pZCBk
aWRGbHVzaChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZvaWQgZGlkRmluYWxpemVSZW5kZXJp
bmdVcGRhdGUoUmVuZGVyaW5nVXBkYXRlSUQgZGlkUmVuZGVyaW5nVXBkYXRlSUQpOwotCi0gICAg
UmVmUHRyPERpc3BsYXlMaXN0V3JpdGVySGFuZGxlPiBtb3N0UmVjZW50bHlVc2VkRGlzcGxheUxp
c3RIYW5kbGUoKTsKLSAgICBSZWZQdHI8RGlzcGxheUxpc3RXcml0ZXJIYW5kbGU+IGZpbmRSZXVz
YWJsZURpc3BsYXlMaXN0SGFuZGxlKHNpemVfdCBjYXBhY2l0eSk7Ci0KLSAgICB2b2lkIHNlbmRX
YWtldXBNZXNzYWdlKGNvbnN0IEdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzJik7Cisg
ICAgdm9pZCBkaWRGbHVzaChXZWJDb3JlOjpGbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgdm9pZCBkaWRGaW5hbGl6ZVJlbmRlcmluZ1Vw
ZGF0ZShSZW5kZXJpbmdVcGRhdGVJRCk7CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpTdHJl
YW1DbGllbnRDb25uZWN0aW9uPiBtX3N0cmVhbUNvbm5lY3Rpb247CiAgICAgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7CiAgICAgV2Vha1B0cjxH
UFVQcm9jZXNzQ29ubmVjdGlvbj4gbV9ncHVQcm9jZXNzQ29ubmVjdGlvbjsKICAgICBSZW1vdGVS
ZXNvdXJjZUNhY2hlUHJveHkgbV9yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkgeyAqdGhpcyB9Owog
Ci0gICAgSGFzaE1hcDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIs
IFJlZlB0cjxEaXNwbGF5TGlzdFdyaXRlckhhbmRsZT4+IG1fc2hhcmVkRGlzcGxheUxpc3RIYW5k
bGVzOwotICAgIERlcXVlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmll
cj4gbV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVzOwotICAgIHN0ZDo6b3B0aW9uYWw8V2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBtX2N1cnJlbnREZXN0aW5hdGlvbklt
YWdlQnVmZmVySWRlbnRpZmllcjsKLSAgICBzdGQ6Om9wdGlvbmFsPEdQVVByb2Nlc3NXYWtldXBN
ZXNzYWdlQXJndW1lbnRzPiBtX2RlZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50czsKLSAgICB1
bnNpZ25lZCBtX3JlbWFpbmluZ0l0ZW1zVG9BcHBlbmRCZWZvcmVTZW5kaW5nV2FrZXVwIHsgMCB9
OwotCiAgICAgc3RkOjpvcHRpb25hbDxJUEM6OlNlbWFwaG9yZT4gbV9nZXRQaXhlbEJ1ZmZlclNl
bWFwaG9yZTsKICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtX2dldFBpeGVsQnVmZmVyU2hhcmVk
TWVtb3J5OwogICAgIHVpbnQ2NF90IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlMZW5ndGgg
eyAwIH07CkBAIC0xNTksNiArMTYyLDggQEAgcHJpdmF0ZToKIAogICAgIFJlbmRlcmluZ1VwZGF0
ZUlEIG1fcmVuZGVyaW5nVXBkYXRlSUQ7CiAgICAgUmVuZGVyaW5nVXBkYXRlSUQgbV9kaWRSZW5k
ZXJpbmdVcGRhdGVJRDsKKworICAgIGJvb2wgbV9kaWRDcmVhdGVXYWtlVXBTZW1hcGhvcmVGb3JE
aXNwbGF5TGlzdFN0cmVhbSB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4K
aW5kZXggNDY3ODMwODlkMzYyNWQ5ZTM0Y2E2YWRhYzE4ZDYxZDgwYzBkNzg4ZS4uYTczNjVjNjUx
ZDQ3MTFjMmNhNzlkYjg5MTlmN2QwODM4Nzc2ZjIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVz
c2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KQEAgLTI0LDggKzI0LDkgQEAKIAog
bWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IE5vdFJlZkNvdW50ZWQgewog
ICAgIERpZENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChXZWJLaXQ6OkltYWdlQnVmZmVyQmFja2Vu
ZEhhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAgRGlkRmx1c2goV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgRGlkRmx1
c2goV2ViQ29yZTo6Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKICAg
ICBEaWRGaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShXZWJLaXQ6OlJlbmRlcmluZ1VwZGF0ZUlEIGRp
ZFJlbmRlcmluZ1VwZGF0ZUlEKQorICAgIERpZENyZWF0ZVdha2VVcFNlbWFwaG9yZUZvckRpc3Bs
YXlMaXN0U3RyZWFtKElQQzo6U2VtYXBob3JlIHdha2VVcFNlbWFwaG9yZSkKIH0KIAogI2VuZGlm
IC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNw
cAppbmRleCBjMDM3NDFjZTlkYTRiOTY5MzY3NWYyYmFiODZjNzllOTYxNDk2YjM5Li40MTE3MDRk
NzM1MTA1ZmI1MWNhOTU1MjU4ZWVlYjg5NzkzYWM0NTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJj
ZUNhY2hlUHJveHkuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNo
ZVByb3h5OjpjYWNoZUltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZl
CiAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKIH0K
IAotSW1hZ2VCdWZmZXIqIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6Y2FjaGVkSW1hZ2VCdWZm
ZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikKK0ltYWdlQnVmZmVyKiBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmNhY2hlZEltYWdlQnVm
ZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJzLmdldChyZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpLmltYWdlQnVmZmVyLmdldCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VD
YWNoZVByb3h5LmgKaW5kZXggYjllNzcyZmJjYzI3OGUzMjA0NmM3MmRlZjg4N2E5MzU1YjVkZjQ5
Yi4uMzM3NzRjYzI0Zjk4NDYyNDU1ZTMxNzljYjg0NDM4NWFjYTMwYThlOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hl
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlc291cmNlQ2FjaGVQcm94eS5oCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB+UmVt
b3RlUmVzb3VyY2VDYWNoZVByb3h5KCk7CiAKICAgICB2b2lkIGNhY2hlSW1hZ2VCdWZmZXIoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXImKTsKLSAgICBXZWJDb3JlOjpJbWFnZUJ1ZmZlciogY2FjaGVkSW1h
Z2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICBXZWJD
b3JlOjpJbWFnZUJ1ZmZlciogY2FjaGVkSW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKSBjb25zdDsKICAgICB2b2lkIHJlbGVhc2VJbWFnZUJ1ZmZlcihXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogCiAgICAgdm9pZCByZWNvcmROYXRp
dmVJbWFnZVVzZShXZWJDb3JlOjpOYXRpdmVJbWFnZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAppbmRleCAwZjExODM4NTE4Y2I5
MDg5ZWM1ZWNjZmFhYzMzNWUyMDFhNmMzNmY2Li4wNTNiMDA5MjJiNzNmNjFjN2U1MGI2MjBmNmI3
Yzc0NzI5MTY4NmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9JUENUZXN0aW5nQVBJLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9JUENUZXN0aW5nQVBJLmNwcApAQCAtNzc2LDEwICs3NzYsOCBAQCBzdGF0aWMgYm9vbCBlbmNv
ZGVSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzKElQQzo6RW5jb2RlciYg
ZW5jb2RlcgogICAgIGlmICghcGFnZUlEKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBh
dXRvIHNlbWFwaG9yZSA9IHNlbWFwaG9yZU9iamVjdC0+ZXhjaGFuZ2UoKTsKLSAgICBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnMgeyAqaWRlbnRpZmll
ciwgV1RGTW92ZShzZW1hcGhvcmUpLCAqcGFnZVByb3h5SUQsICpwYWdlSUQgfTsKKyAgICBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnMgeyAqaWRlbnRp
ZmllciwgKnBhZ2VQcm94eUlELCAqcGFnZUlEIH07CiAgICAgZW5jb2RlciA8PCBwYXJhbWV0ZXJz
OwotICAgIHNlbWFwaG9yZU9iamVjdC0+ZXhjaGFuZ2UoV1RGTW92ZShwYXJhbWV0ZXJzLnJlc3Vt
ZURpc3BsYXlMaXN0U2VtYXBob3JlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9EaXNwbGF5TGlzdFRl
c3RzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9EaXNwbGF5TGlzdFRl
c3RzLmNwcAppbmRleCA1YTE2MGFlNmZiZTEwYjY1YzkyZDFiZGE2YWZkMmJiZWQ2OTliYzA2Li4y
YzdmMTliNGNkMzBmYjI0NTgxNzE2MzEzMzAxMWExNmQwODllODFkIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRGlzcGxheUxpc3RUZXN0cy5jcHAKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Rpc3BsYXlMaXN0VGVzdHMuY3BwCkBA
IC0xMjIsOCArMTIyLDYgQEAgVEVTVChEaXNwbGF5TGlzdFRlc3RzLCBBcHBlbmRJdGVtcykKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgY2FzZSBJdGVtVHlw
ZTo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyOgotICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgIG9ic2VydmVkVW5leHBlY3RlZEl0ZW0gPSB0cnVl
OwogICAgICAgICAgICAgYnJlYWs7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440023</attachid>
            <date>2021-10-03 16:30:59 -0700</date>
            <delta_ts>2021-10-04 18:10:39 -0700</delta_ts>
            <desc>WIP - clip to mask, get|putImageData, draw glyphs, paint media</desc>
            <filename>bug-230860-20211003163058.patch</filename>
            <type>text/plain</type>
            <size>368075</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNDQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzIzNmQ3YTQ0N2EzYWE1MjExNjY2MGFm
MWQxYWZhZWZlNTM5NjQzMC4uMWE4Y2ViYzIwNzg4NjBhZDI5NTFjNjc4NjgyODRiYTVkNjc5MTgy
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMjI4Niw3ICsyMjg2LDYgQEAKIAkJNzIxNDQzMzQyMjNFQzkxNjAwRjEyRkY3IC8q
IFNWR1Byb3BlcnR5T3duZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU1RUU1MzYwMjIzQjJBMjEwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eU93bmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxQjQ5
NzQyNTEyQkEzQjAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIxQjQ5NzAyNTEyQUMwNDAwRkU5RDNC
IC8qIEltYWdlQml0bWFwQmFja2luZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTcyMjgzRjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50
aW5nT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzI0MkFDOTcy
NTc1OEZFMTAwNUE5Q0YxIC8qIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjQyQUM5NTI1NzU4RkUwMDA1
QTlDRjEgLyogRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRDMzMjFBM0E4QjIzMDBGNUYxM0Mg
LyogSlNFWFRCbGVuZE1pbk1heC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzI0RUQzMzAxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXgu
aCAqLzsgfTsKIAkJNzI0RUU1NTAxREM4MEQ3RjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURD
N0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFj
dGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3Rh
dGVDaGFuZ2VPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0xMDQ3OCw3ICsxMDQ3Nyw2IEBACiAJCTcyMUI0OTZGMjUxMkFDMDQwMEZF
OUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VC
aXRtYXBCYWNraW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxQjQ5NzAy
NTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bWFnZUJpdG1hcEJhY2tpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIyQTgx
NUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBbmltYXRpb25GcmFtZVJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzI0
MkFDOTUyNTc1OEZFMDAwNUE5Q0YxIC8qIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEz
QyAvKiBFWFRCbGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBFWFRCbGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
NEVEMzJBMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MjRFRDMyQjFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MTU3LDcgKzE4MTU1LDYgQEAKIAkJCQkwRkU1RkJDQjFDM0RE
NTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCAqLywKIAkJCQk1NUMwQTI5NTIzRkUyQ0UwMDBG
MkNCOTMgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAgKi8sCiAJCQkJNzJFQTA5Rjky
M0ZDQ0M2QTAwODUwNEE1IC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLywKLQkJCQk3
MjQyQUM5NTI1NzU4RkUwMDA1QTlDRjEgLyogRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIuaCAq
LywKIAkJCQk3MkVBMDlGNzIzRkNDQjNEMDA4NTA0QTUgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZl
ci5oICovLAogCQkJCUY0MjJCOEI2MjUzRjcwNjUwMDRFNzdFOCAvKiBEaXNwbGF5TGlzdEl0ZW1C
dWZmZXIuY3BwICovLAogCQkJCUY0MjJCOEI1MjUzRjcwNjUwMDRFNzdFOCAvKiBEaXNwbGF5TGlz
dEl0ZW1CdWZmZXIuaCAqLywKQEAgLTMyMjg5LDcgKzMyMjg2LDYgQEAKIAkJCQk3RURBQUZDOTE5
QTJDQ0RDMDAzNERGRDEgLyogRGlza0NhY2hlTW9uaXRvckNvY29hLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkU1RkJEMzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTU1QUQwOTQwMjQwODk2NDAwMERFNEQyRiAvKiBEaXNwbGF5TGlzdERyYXdpbmdD
b250ZXh0LmggaW4gSGVhZGVycyAqLywKLQkJCQk3MjQyQUM5NzI1NzU4RkUxMDA1QTlDRjEgLyog
RGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1QUQwOTNF
MjQwODk2MzUwMERFNEQyRiAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGNEQ0MEJDOTI1NTQ2M0JGMDA3MjEzNDkgLyogRGlzcGxheUxpc3RJdGVtQnVmZmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0U4RDEyNzI2MTg1QzBFMDBGQzNBRUYgLyogRGlzcGxh
eUxpc3RJdGVtQnVmZmVySWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IDYyOTdhMGRkMjY4OGJiNWY3ODlhOTQ3
ODM2ZGYxZGFmNmRiYzQyM2MuLjQ2ZmI4OWZiMGE1YjZiOGU2YmE1MmQ2ZGI2OTc1YzQ2YWVlYzhk
NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC04NDAs
NDIgKzg0MCw2IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNwbGF5TGlzdERy
YXdpbmcoYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nKQogICAgIG1fdXNlc0Rpc3BsYXlMaXN0
RHJhd2luZyA9IHVzZXNEaXNwbGF5TGlzdERyYXdpbmc7CiB9CiAKLXZvaWQgSFRNTENhbnZhc0Vs
ZW1lbnQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RS
ZXBsYXkpCi17Ci0gICAgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5OwotCi0gICAgaWYgKCFidWZmZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byYgYnVmZmVyID0gKnRoaXMtPmJ1ZmZlcigpOwotICAgIGlmIChidWZmZXIuZHJhd2luZ0Nv
bnRleHQoKSkKLSAgICAgICAgYnVmZmVyLmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOwotfQotCi1TdHJpbmcgSFRN
TENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFn
cyBmbGFncykgY29uc3QKLXsKLSAgICBpZiAoIWJ1ZmZlcigpKQotICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0KLSAgICBhdXRvJiBidWZmZXIgPSAqdGhpcy0+YnVmZmVyKCk7Ci0gICAgaWYgKGJ1
ZmZlci5kcmF3aW5nQ29udGV4dCgpKQotICAgICAgICByZXR1cm4gYnVmZmVyLmRyYXdpbmdDb250
ZXh0KCktPmRpc3BsYXlMaXN0KCkuYXNUZXh0KGZsYWdzKTsKLQotICAgIHJldHVybiBTdHJpbmco
KTsKLX0KLQotU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4
dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0Ci17Ci0gICAgaWYgKCFidWZm
ZXIoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgYXV0byYgYnVmZmVyID0gKnRo
aXMtPmJ1ZmZlcigpOwotICAgIGlmIChidWZmZXIuZHJhd2luZ0NvbnRleHQoKSAmJiBidWZmZXIu
ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5ZWREaXNwbGF5TGlzdCgpKQotICAgICAgICByZXR1cm4g
YnVmZmVyLmRyYXdpbmdDb250ZXh0KCktPnJlcGxheWVkRGlzcGxheUxpc3QoKS0+YXNUZXh0KGZs
YWdzKTsKLQotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQogdm9pZCBIVE1MQ2FudmFzRWxlbWVu
dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogewogICAgIEFTU0VSVCghaGFzQ3JlYXRlZElt
YWdlQnVmZmVyKCkpOwpAQCAtOTE3LDkgKzg4MSw2IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKIAogICAgIHNldEltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJpbmdNb2RlLCB1c2VEaXNwbGF5TGlzdCwgUmVuZGVy
aW5nUHVycG9zZTo6Q2FudmFzLCAxLCBjb2xvclNwYWNlLCBwaXhlbEZvcm1hdCwgaG9zdFdpbmRv
dykpOwogCi0gICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQot
ICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RS
ZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7Ci0KICNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQogICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJk
KCkpIHsKICAgICAgICAgLy8gUmVjYWxjdWxhdGUgY29tcG9zaXRpbmcgcmVxdWlyZW1lbnRzIGlm
IGFjY2VsZXJhdGlvbiBzdGF0ZSBjaGFuZ2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5oCmluZGV4IGZmNTIxOWRkNTU0NmRlZGFkYTE3YTU3NWU4Zjg3ZTM0YWJmNTBiODMu
LjJiMDUwOWRjYjA2NzhjZDcwNTY5OTk5YzhhMWI0OTkzMjA0OGM5YTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKQEAgLTEyMCw5ICsxMjAsNiBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBzaG91bGRBY2NlbGVyYXRlKHVuc2lnbmVkIGFyZWEpIGNvbnN0OwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKGJvb2wpOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIGRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1Rl
eHRGbGFncykgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHJlcGxheURpc3BsYXlM
aXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncykgY29uc3Q7CiAKICAgICAvLyBGSVhN
RTogT25seSBzb21lIGNhbnZhcyByZW5kZXJpbmcgY29udGV4dHMgbmVlZCBhbiBJbWFnZUJ1ZmZl
ci4KICAgICAvLyBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gaGF2ZSB0aGUgY29udGV4dHMgb3duIHRo
ZSBidWZmZXJzLgpAQCAtMTgzLDcgKzE4MCw2IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWZQ
dHI8SW1hZ2U+IG1fY29waWVkSW1hZ2U7IC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSBmb3Ig
cGxhdGZvcm1zIHRoYXQgaGF2ZSB0byBjb3B5IHRoZSBpbWFnZSBidWZmZXIgdG8gcmVuZGVyIChh
bmQgZm9yIENTU0NhbnZhc1ZhbHVlKS4KIAogICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gbV91c2Vz
RGlzcGxheUxpc3REcmF3aW5nOwotICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7
IGZhbHNlIH07CiAKICAgICBib29sIG1faWdub3JlUmVzZXQgeyBmYWxzZSB9OwogICAgIC8vIG1f
aGFzQ3JlYXRlZEltYWdlQnVmZmVyIG1lYW5zIHdlIHRyaWVkIHRvIG1hbGxvYyB0aGUgYnVmZmVy
LiBXZSBkaWRuJ3QgbmVjZXNzYXJpbHkgZ2V0IGl0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaAppbmRleCAxZDBlODc5MGRh
MzVjMDgxYTgwYmVmMWIxZTcxYTNiN2Q5ZjUxMzdjLi4wOWJlNTExMjYwMzg3MThmYjQ3ZmU1Njg0
NzRiYjhiMjI2NGVmZjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaApAQCAtNTUsOSArNTUsOSBAQCBjbGFzcyBEcmF3
R2x5cGhzUmVjb3JkZXIgewogcHVibGljOgogICAgIGVudW0gY2xhc3MgRGVjb25zdHJ1Y3REcmF3
R2x5cGhzIDogYm9vbCB7IE5vLCBZZXMgfTsKICAgICBlbnVtIGNsYXNzIERlcml2ZUZvbnRGcm9t
Q29udGV4dCA6IGJvb2wgeyBObywgWWVzIH07Ci0gICAgZXhwbGljaXQgRHJhd0dseXBoc1JlY29y
ZGVyKEdyYXBoaWNzQ29udGV4dCYsIERlY29uc3RydWN0RHJhd0dseXBocyA9IERlY29uc3RydWN0
RHJhd0dseXBoczo6Tm8sIERlcml2ZUZvbnRGcm9tQ29udGV4dCA9IERlcml2ZUZvbnRGcm9tQ29u
dGV4dDo6Tm8pOworICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IERyYXdHbHlwaHNSZWNvcmRl
cihHcmFwaGljc0NvbnRleHQmLCBEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBEZWNvbnN0cnVjdERy
YXdHbHlwaHM6Ok5vLCBEZXJpdmVGb250RnJvbUNvbnRleHQgPSBEZXJpdmVGb250RnJvbUNvbnRl
eHQ6Ok5vKTsKIAotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhC
dWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBo
cywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CiAK
ICNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0oV0lOKQogICAgIHZvaWQgZHJhd05hdGl2
ZVRleHQoQ1RGb250UmVmLCBDR0Zsb2F0IGZvbnRTaXplLCBDVExpbmVSZWYsIENHUmVjdCBsaW5l
UmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCmluZGV4IGU4Nzk5ZTZiMTEyOWVmMjMzZjM3M2EwZThlYjIxNGQ0MjBlOGUyM2Yu
LjJhNWViNzE1ZDZmZjJmZjE0ZjFjNTg3M2I1MDc1OTAzMTA3ZDU3YTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0xNjQs
MTAgKzE2NCwxMCBAQCBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgewogICAgIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkdyYXBo
aWNzQ29udGV4dFN0YXRlKCk7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgR3Jh
cGhpY3NDb250ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7CiAKLSAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBvcGVyYXRvcj0oR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7CiAKICAgICBlbnVtIENo
YW5nZSA6IHVpbnQzMl90IHsKQEAgLTI0Myw5ICsyNDMsOSBAQCBzdHJ1Y3QgR3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2UgewogICAgIHsKICAgICB9CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlc0Zyb21TdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYpIGNvbnN0OwogCi0gICAgdm9pZCBhY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgYWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKICAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIAogICAgIHZvaWQgZHVtcChXVEY6OlRleHRT
dHJlYW0mKSBjb25zdDsKQEAgLTI1NiwxMiArMjU2LDExIEBAIHN0cnVjdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZUNoYW5nZSB7CiAKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwogCi1jbGFzcyBHcmFw
aGljc0NvbnRleHQgeworY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0IHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHQpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzogICAKLQotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4
dCgpID0gZGVmYXVsdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5HcmFwaGljc0NvbnRl
eHQoKTsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHQoKSA9IGRlZmF1bHQ7CisgICAgdmly
dHVhbCB+R3JhcGhpY3NDb250ZXh0KCk7CiAKICNpZiBVU0UoRElSRUNUMkQpCiAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIG1vdmUgdG8gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQKQEAgLTI2OSw3
ICsyNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIENQVU1lbW9yeSwKICAgICAgICAgR1BVTWVtb3J5
CiAgICAgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqLCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSk7CisgICAgR3JhcGhpY3ND
b250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5
cGUpOwogI2VuZGlmCiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI4OSwyNSArMjg4LDI1IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1fc3RhdGUuc3Ryb2tlU3R5
bGUgPSBzdHlsZTsgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVN0eWxlQ2hhbmdlKTsgfQogICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5zdHJva2VTdHlsZTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYpOworICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3Io
Y29uc3QgQ29sb3ImKTsKICAgICBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnN0cm9rZUNvbG9yOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYpOworICAgIHZvaWQgc2V0U3Ryb2tlUGF0dGVy
bihSZWY8UGF0dGVybj4mJik7CiAgICAgUGF0dGVybiogc3Ryb2tlUGF0dGVybigpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKTsgfQogCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgPSB7IH0pOworICAgIHZvaWQgc2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50
PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKICAgICBHcmFkaWVudCogc3Ryb2tl
R3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpOyB9
CiAKICAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxlKSB7IG1fc3RhdGUuZmls
bFJ1bGUgPSBmaWxsUnVsZTsgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkZpbGxSdWxlQ2hhbmdlKTsgfQogICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5maWxsUnVsZTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRG
aWxsQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBDb2xv
ciYpOwogICAgIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LmZpbGxDb2xvcjsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsUGF0dGVybihS
ZWY8UGF0dGVybj4mJik7CisgICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJik7
CiAgICAgUGF0dGVybiogZmlsbFBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxQ
YXR0ZXJuLmdldCgpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxHcmFkaWVu
dChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOworICAgIHZv
aWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIGZpbGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOyB9CiAKICAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsgbV9zdGF0ZS5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyA9IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFu
Z2UpOyB9CkBAIC0zMzAsNyArMzI5LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWxwaGEoZmxv
YXQgYWxwaGEpIHsgbV9zdGF0ZS5hbHBoYSA9IGFscGhhOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpOyB9CiAgICAgZmxvYXQgYWxwaGEoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxl
bmRNb2RlOjpOb3JtYWwpOworICAgIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7CiAgICAgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5jb21w
b3NpdGVPcGVyYXRvcjsgfQogICAgIEJsZW5kTW9kZSBibGVuZE1vZGVPcGVyYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLmJsZW5kTW9kZTsgfQogCkBAIC0zNDAsOSArMzM5LDkgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1v
ZGUpIHsgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOyB1cGRhdGVTdGF0ZShtX3N0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKTsgfQogICAgIFRl
eHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUudGV4dERyYXdpbmdNb2RlOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNoYWRv
dyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYsIFNoYWRvd1JhZGl1
c01vZGUgPSBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgY2xlYXJTaGFkb3coKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGdldFNo
YWRvdyhGbG9hdFNpemUmLCBmbG9hdCYsIENvbG9yJikgY29uc3Q7CisgICAgdm9pZCBzZXRTaGFk
b3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImLCBTaGFkb3dSYWRp
dXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgdmlydHVhbCB2b2lkIGNs
ZWFyU2hhZG93KCk7CisgICAgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xv
ciYpIGNvbnN0OwogCiAgICAgYm9vbCBoYXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5zaGFkb3dDb2xvci5pc1Zpc2libGUoKTsgfQogICAgIGJvb2wgaGFzU2hhZG93KCkg
Y29uc3QgeyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIChtX3N0YXRlLnNoYWRvd0JsdXIg
fHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC5o
ZWlnaHQoKSk7IH0KQEAgLTM1Nyw4ICszNTYsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIHNhdmUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVzdG9y
ZSgpOworICAgIHZpcnR1YWwgdm9pZCBzYXZlKCk7CisgICAgdmlydHVhbCB2b2lkIHJlc3RvcmUo
KTsKICAgICAKICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNr
LnNpemUoKTsgfQogCkBAIC0zODQsNyArMzgzLDcgQEAgcHVibGljOgogICAgICAgICBSb3VuZE9y
aWdpbkFuZERpbWVuc2lvbnMKICAgICB9OwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRl
cykgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVs
Qm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdp
ZHRoLCBTdHJva2VTdHlsZSk7CisgICAgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3Vu
ZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgs
IFN0cm9rZVN0eWxlKTsKIAogICAgIC8vIFNoYXBlcwogCkBAIC0zOTYsMTEgKzM5NSwxMSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50JikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1Jh
aXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwg
Y29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JhaXNlZEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3Qg
Q29sb3ImIHNoYWRvd0NvbG9yKTsKIAogICAgIHZpcnR1YWwgdm9pZCBmaWxsUGF0aChjb25zdCBQ
YXRoJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpOwogCiAgICAgdmlydHVhbCB2
b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgeyBmaWxsRWxsaXBzZUFz
UGF0aChlbGxpcHNlKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgZWxsaXBzZSkgeyBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9CkBAIC00
MDgsMTAgKzQwNywxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwogICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91
bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9y
bWFsKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhv
bGVSZWN0LCBjb25zdCBDb2xvciYpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlID0gQmxlbmRN
b2RlOjpOb3JtYWwpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3Qs
IGNvbnN0IENvbG9yJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpID0gMDsKIApAQCAtNDI0LDY2ICs0MjMsNjcgQEAgcHVibGljOgogCiAgICAgLy8gSW1h
Z2VzLCBQYXR0ZXJucywgYW5kIE1lZGlhCiAKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlKiBsYXN0
TmF0aXZlSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2xhc3ROYXRpdmVJbWFnZS5nZXQoKTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdl
JiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VP
cmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1h
Z2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICB2aXJ0dWFsIEltYWdlRHJh
d1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1h
Z2UgfSk7CisgICAgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgdmlydHVhbCBJbWFnZURyYXdS
ZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1h
Z2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3Vs
dCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3Rvciwg
SW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7CisgICAgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2Uo
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBz
b3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICB2aXJ0dWFsIEltYWdl
RHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2Fs
ZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KTsKKyAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgfSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxv
YXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRy
PEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVy
KFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZvaWQgZHJhd0NvbnN1bWluZ0lt
YWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwog
CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBwYWlu
dEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CiAjZW5kaWYKIAogICAgIC8vIENsaXBwaW5nCiAK
ICAgICB2aXJ0dWFsIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpID0gMDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYs
IFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBj
b25zdCBGbG9hdFJlY3QmKTsKIAogICAgIGVudW0gY2xhc3MgQ2xpcFRvRHJhd2luZ0NvbW1hbmRz
UmVzdWx0IDogYm9vbCB7IFN1Y2Nlc3MsIEZhaWxlZFRvQ3JlYXRlSW1hZ2VCdWZmZXIgfTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBjbGlw
VG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJik7
CisgICAgdmlydHVhbCBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRvRHJhd2luZ0Nv
bW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpOwogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0OwogCiAgICAgLy8gVGV4dAogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUm
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVm
ZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMs
IGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29u
c3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1
bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxv
cHQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3QmlkaVRleHQoY29uc3Qg
Rm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNj
YWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElm
Rm9udE5vdFJlYWR5KTsKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJv
bSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0Vt
cGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRv
bVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCk7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBG
bG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRD
YXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOwogCiAgICAgdmlydHVhbCB2b2lkIGRy
YXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBm
b250U21vb3RoaW5nTW9kZSkKICAgICB7CiAgICAgICAgIGRyYXdHbHlwaHMoZm9udCwgZ2x5cGhz
LCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogICAgIH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdCBjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9y
VGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50aW5nKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9r
ZSk7CisgICAgRmxvYXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZs
b2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZUZvclRl
eHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZh
bHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNo
QXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBT
dHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUpID0gMDsKIAogICAgIC8vIFRyYW5zcGFyZW5jeSBMYXllcnMKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOwor
ICAgIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwor
ICAgIHZpcnR1YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOwogICAgIGJvb2wgaXNJblRy
YW5zcGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3Vu
dCA+IDApICYmIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCk7IH0KIAogICAgIC8vIEZvY3Vz
IFJpbmdzCkBAIC01MTQsOCArNTE0LDggQEAgcHVibGljOgogICAgIC8vIFRoaXMgZnVuY3Rpb24g
YXBwbGllcyB0aGUgZGV2aWNlIHNjYWxlIGZhY3RvciB0byB0aGUgY29udGV4dCwgbWFraW5nIHRo
ZSBjb250ZXh0IGNhcGFibGUgb2YKICAgICAvLyBhY3RpbmcgYXMgYSBiYXNlLWxldmVsIGNvbnRl
eHQgZm9yIGEgSGlEUEkgZW52aXJvbm1lbnQuCiAgICAgdmlydHVhbCB2b2lkIGFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSB7IHNjYWxlKGZhY3Rvcik7IH0KLSAgICBXRUJDT1JF
X0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3IoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9S
VCBGbG9hdFNpemUgc2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7CisgICAgRmxvYXRTaXplIHNjYWxl
RmFjdG9yKCkgY29uc3Q7CisgICAgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0Owog
CiAgICAgLy8gTGlua3MKIApAQCAtNTQ2LDEyICs1NDYsMTIgQEAgcHVibGljOgogI2lmIFVTRShE
SVJFQ1QyRCkKICAgICBHcmFwaGljc0NvbnRleHQoSERDLCBJRDJEMURDUmVuZGVyVGFyZ2V0Kios
IFJFQ1QsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxRmFjdG9yeSogc3lzdGVtRmFjdG9yeSgp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdldCogZGVmYXVsdFJl
bmRlclRhcmdldCgpOworICAgIHN0YXRpYyBJRDJEMUZhY3RvcnkqIHN5c3RlbUZhY3RvcnkoKTsK
KyAgICBzdGF0aWMgSUQyRDFSZW5kZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5EcmF3KCk7CisgICAgdm9pZCBiZWdpbkRyYXco
KTsKICAgICBEMkQxX0NPTE9SX0YgY29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImKSBj
b25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZERyYXcoKTsKKyAgICB2b2lkIGVuZERy
YXcoKTsKICAgICB2b2lkIGZsdXNoKCk7CiAKICAgICBJRDJEMUJydXNoKiBzb2xpZFN0cm9rZUJy
dXNoKCkgY29uc3Q7CkBAIC01NzgsNiArNTc4LDcgQEAgcHJvdGVjdGVkOgogICAgIFZlY3RvcjxG
bG9hdFBvaW50PiBjZW50ZXJMaW5lQW5kQ3V0T2ZmQ29ybmVycyhib29sIGlzVmVydGljYWxMaW5l
LCBmbG9hdCBjb3JuZXJXaWR0aCwgRmxvYXRQb2ludCBwb2ludDEsIEZsb2F0UG9pbnQgcG9pbnQy
KSBjb25zdDsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CisgICAgUmVmUHRy
PE5hdGl2ZUltYWdlPiBtX2xhc3ROYXRpdmVJbWFnZTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8
R3JhcGhpY3NDb250ZXh0U3RhdGUsIDE+IG1fc3RhY2s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKaW5kZXggNGQyMDRlOTdlNWM1NDRkNzc2
YmZhN2YzMGFhY2MxYjdjNDYzZTBlMC4uMjQwZDRmYzU2MTc5YmM4NDg5NTRiMzUxNDBhNzk3YmI5
NWE4NTUyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NUeXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzVHlwZXMuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIldpbmRSdWxlLmgiCiAjaW5j
bHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1
ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogY2xhc3MgVGV4
dFN0cmVhbTsKQEAgLTEyNyw2ICsxMjgsOSBAQCBTdHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3Jl
OjpCbGVuZE1vZGUpOwogYm9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3Jl
OjpCbGVuZE1vZGUmKTsKIGJvb2wgcGFyc2VDb21wb3NpdGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0
IFN0cmluZyYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yJiwgV2ViQ29yZTo6QmxlbmRNb2Rl
Jik7CiAKK2VudW0gRmx1c2hJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBGbHVzaElkZW50aWZp
ZXIgPSBPYmplY3RJZGVudGlmaWVyPEZsdXNoSWRlbnRpZmllclR5cGU+OworCiBXRUJDT1JFX0VY
UE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29y
ZTo6QmxlbmRNb2RlKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChXVEY6OlRleHRTdHJlYW0mLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvcik7CiBXRUJDT1JF
X0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2lu
ZFJ1bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgKaW5kZXggYjFlOGQzYjA0YWIyNjA1MTMyODg2YTBhODAzMDUwOGExMzE2MTI4MC4uNTU3NDRl
MjcyODRkYTRmNjVjNmZiNDA1YzVhNWM4ZGU0M2EyOGVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNw
cmFnbWEgb25jZQogCi0jaW5jbHVkZSAiRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgi
CiAjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllci5oIgpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBDcmVhdGUg
YW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCwgd2l0aCBzdWl0YWJs
ZSByZXNvbHV0aW9uIGZvciBkcmF3aW5nIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRo
aXMgY29udGV4dC4KICAgICBzdGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRp
YmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwotICAg
IHN0YXRpYyBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgUmVmUHRy
PEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0Jik7CiAKICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hl
biBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBt
YXNrZXIgb3IgY2xpcHBlci4KQEAgLTc2LDE0ICs3NiwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IGZsdXNoQ29udGV4dCgpID0gMDsKIAotICAgIHZpcnR1YWwgRGlzcGxheUxpc3Q6OkRyYXdpbmdD
b250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFs
IEdyYXBoaWNzQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSB7IHJldHVybiBudWxscHRyOyB9CiAg
ICAgdmlydHVhbCBib29sIHByZWZlcnNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKSB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgeyB9CiAgICAg
dmlydHVhbCB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHRBc3luYygpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBkaWRGbHVzaChEaXNwbGF5TGlzdDo6Rmx1c2hJZGVudGlmaWVyKSB7IH0KLQotICAgIHZp
cnR1YWwgdm9pZCBjaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb0FwcGVuZERpc3BsYXlM
aXN0SXRlbXMoRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUmJikgeyB9CisgICAgdmlydHVh
bCB2b2lkIGRpZEZsdXNoKEZsdXNoSWRlbnRpZmllcikgeyB9CiAKICAgICB2aXJ0dWFsIEludFNp
emUgbG9naWNhbFNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUoKSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggYjY1NmYxMzY4MTYyNDdh
NDZhY2RjZGE1OTliYjZkNDFkZDgwOTNhOS4uMzEyZjA4YWUzMjU4NTQ5NTI3YzY1NDg0NTI4NzFl
ZDYyNDBhMDQ2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtMjM3LDYgKzIzNyw4IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OnJlc3RvcmUoKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpk
cmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKKyAgICBtX2xh
c3ROYXRpdmVJbWFnZSA9ICZuYXRpdmVJbWFnZTsKKwogICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJ
bWFnZS5wbGF0Zm9ybUltYWdlKCk7CiAgICAgYXV0byBpbWFnZVJlY3QgPSBGbG9hdFJlY3QgeyB7
IH0sIGltYWdlU2l6ZSB9OwogICAgIGF1dG8gbm9ybWFsaXplZFNyY1JlY3QgPSBub3JtYWxpemVS
ZWN0KHNyY1JlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKaW5kZXggZmFkNmE2OTUwMDdh
OTY2NDVjMjcxMWQ4ZjA5MTBlYTg1NjQzZjUyOC4uNzgwYzJiMmYzMWY0Y2EwYzI2NTMwNjQ3Mzlh
ZGE2MzVlNDExNDQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC0xODAsMTEgKzE4
MCw2IEBAIHZvaWQgRGlzcGxheUxpc3Q6OnNldEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50KEl0ZW1C
dWZmZXJXcml0aW5nQ2xpZW50KiBjbGllbnQpCiAgICAgaXRlbUJ1ZmZlcigpLnNldENsaWVudChj
bGllbnQpOwogfQogCi12b2lkIERpc3BsYXlMaXN0OjpwcmVwYXJlVG9BcHBlbmQoSXRlbUJ1ZmZl
ckhhbmRsZSYmIGhhbmRsZSkKLXsKLSAgICBpdGVtQnVmZmVyKCkucHJlcGFyZVRvQXBwZW5kKFdU
Rk1vdmUoaGFuZGxlKSk7Ci19Ci0KIHZvaWQgRGlzcGxheUxpc3Q6OmZvckVhY2hJdGVtQnVmZmVy
KEZ1bmN0aW9uPHZvaWQoY29uc3QgSXRlbUJ1ZmZlckhhbmRsZSYpPiYmIG1hcEZ1bmN0aW9uKSBj
b25zdAogewogICAgIGlmIChtX2l0ZW1zKQpAQCAtMjE0LDggKzIwOSw2IEBAIHZvaWQgRGlzcGxh
eUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIHJldHVybiBhcHBlbmQ8Q29u
Y2F0ZW5hdGVDVE0+KGl0ZW0uZ2V0PENvbmNhdGVuYXRlQ1RNPigpKTsKICAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRDVE06CiAgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0Q1RNPihpdGVtLmdldDxTZXRD
VE0+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKLSAgICAg
ICAgcmV0dXJuIGFwcGVuZDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KGl0ZW0uZ2V0PFNldElubGlu
ZUZpbGxHcmFkaWVudD4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9y
OgogICAgICAgICByZXR1cm4gYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4oaXRlbS5nZXQ8U2V0
SW5saW5lRmlsbENvbG9yPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VD
b2xvcjoKQEAgLTMwMCwxMCArMjkzLDYgQEAgdm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEl0ZW1I
YW5kbGUgaXRlbSkKICAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsRWxsaXBzZT4oaXRlbS5nZXQ8
RmlsbEVsbGlwc2U+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZsdXNoQ29udGV4dDoKICAgICAg
ICAgcmV0dXJuIGFwcGVuZDxGbHVzaENvbnRleHQ+KGl0ZW0uZ2V0PEZsdXNoQ29udGV4dD4oKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVm
ZmVyOgotICAgICAgICByZXR1cm4gYXBwZW5kPE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25J
bWFnZUJ1ZmZlcj4oaXRlbS5nZXQ8TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVm
ZmVyPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6
Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyPihpdGVt
LmdldDxNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6
OkdldFBpeGVsQnVmZmVyOgogICAgICAgICByZXR1cm4gYXBwZW5kPEdldFBpeGVsQnVmZmVyPihp
dGVtLmdldDxHZXRQaXhlbEJ1ZmZlcj4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6UHV0UGl4ZWxC
dWZmZXI6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmluZGV4IDIyNjg0ZGMzOThlMWVmNTJjMWJkOTY2
ZmY0NTAzNzIzN2RjZjJhZWYuLjQ2YzY4N2Y5MDQ3MTYwYzQ2ODU5MzZhZGQ1ZGZlNzc1OTViM2Fh
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCkBAIC03OSw3ICs3OSw2IEBAIHB1YmxpYzoKIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQoSXRlbUJ1
ZmZlclJlYWRpbmdDbGllbnQqKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEl0ZW1CdWZm
ZXJXcml0aW5nQ2xpZW50KEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50Kik7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBwcmVwYXJlVG9BcHBlbmQoSXRlbUJ1ZmZlckhhbmRsZSYmKTsKIAogICAgIHZv
aWQgc2hyaW5rVG9GaXQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RGbHVz
aElkZW50aWZpZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNmNzgxNjhlYmI3
ZmM3MzdiOWI0YTZjZjhkNTM3MjlmNWEwNjBlYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9P
YmplY3RJZGVudGlmaWVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIERp
c3BsYXlMaXN0IHsKLQotZW51bSBGbHVzaElkZW50aWZpZXJUeXBlIHsgfTsKLXVzaW5nIEZsdXNo
SWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8Rmx1c2hJZGVudGlmaWVyVHlwZT47Ci0KLX0g
Ly8gRGlzcGxheUxpc3QKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKaW5kZXggODFiOTI0NzRlMjRlY2QyMzZmMjIwNzc0
ZWQxY2JjZjg0NjlmMzI3OC4uMGIzNWFmNTQwYzE0ZGNiZGJmN2JlYzY5Y2FmZDYwNmIzMmU1NWYw
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCkBAIC03OSw3
ICs3OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZHJhd2luZ0NvbnRleHQuY29udGV4
dCgpOwogICAgIH0KIAotICAgIERyYXdpbmdDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIG92ZXJy
aWRlIHsgcmV0dXJuICZtX2RyYXdpbmdDb250ZXh0OyB9CisgICAgR3JhcGhpY3NDb250ZXh0KiBk
cmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlIHsgcmV0dXJuICZtX2RyYXdpbmdDb250ZXh0LmNvbnRl
eHQoKTsgfQogCiAgICAgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKICAgICB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCmluZGV4IDEzNTRi
ZGJlZGQ2MTE2YzIwOWZiNTRhNjNlMTk0MjI1M2NiM2E1OGEuLjQ1ZmRkMzNiMTNjZDI5MWRkYmJk
ZDNhZjE3YWVlOGQyMDg0NmI4NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1CdWZmZXIuY3BwCkBAIC02Niw5ICs2Niw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKICAgICAg
ICAgZ2V0PFNldENUTT4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKLSAgICAgICAgZ2V0PFNldElubGlu
ZUZpbGxHcmFkaWVudD4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgZ2V0PFNldElubGluZUZp
bGxDb2xvcj4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTk0LDkgKzE5
MSw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQog
ICAgIGNhc2UgSXRlbVR5cGU6OkZsdXNoQ29udGV4dDoKICAgICAgICAgZ2V0PEZsdXNoQ29udGV4
dD4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6
Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcjoKLSAgICBjYXNlIEl0ZW1U
eXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6Ci0gICAgICAgIHJldHVybjsKICAgICBj
YXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQaXhl
bEJ1ZmZlcjoKICAgICAgICAgLy8gU2hvdWxkIGFscmVhZHkgYmUgaGFuZGxlZCBieSB0aGUgZGVs
ZWdhdGUuCkBAIC0zOTUsMTIgKzM4OSw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAg
ICAgY2FzZSBJdGVtVHlwZTo6Rmx1c2hDb250ZXh0OgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxGbHVzaENvbnRleHQ+Ojp2YWx1ZSk7CiAgICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0
aW9uSW1hZ2VCdWZmZXI6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcj46OnZh
bHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hh
bmdlSXRlbUJ1ZmZlcjoKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyPjo6dmFsdWUpOwotICAgICAg
ICByZXR1cm47CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJh
bWVGb3JNZWRpYToKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8UGFpbnRGcmFtZUZvck1lZGlhPjo6dmFsdWUpOwpAQCAtNDI0LDkgKzQxMiw2IEBA
IHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
RmlsbENvbG9yOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxTZXRJbmxpbmVGaWxsQ29sb3I+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldElubGluZUZpbGxHcmFkaWVu
dD46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGlu
ZVN0cm9rZUNvbG9yOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxTZXRJbmxpbmVTdHJva2VDb2xvcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtNTk2LDEwICs1ODEsNiBAQCBib29sIEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBl
IGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBjb25zdAogICAgICAgICByZXR1cm4g
Y29weUludG88RmlsbFJlY3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBl
OjpGbHVzaENvbnRleHQ6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxGbHVzaENvbnRleHQ+KGl0
ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZURl
c3RpbmF0aW9uSW1hZ2VCdWZmZXI6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxNZXRhQ29tbWFu
ZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6Ci0gICAgICAgIHJldHVy
biBjb3B5SW50bzxNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI+KGl0ZW1PZmZzZXQsICp0aGlz
KTsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1l
ZGlhOgogICAgICAgICByZXR1cm4gY29weUludG88UGFpbnRGcmFtZUZvck1lZGlhPihpdGVtT2Zm
c2V0LCAqdGhpcyk7CkBAIC02MTYsOCArNTk3LDYgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29w
eShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAg
ICAgcmV0dXJuIGNvcHlJbnRvPFNldENUTT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2Ug
SXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNl
dElubGluZUZpbGxDb2xvcj4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6
OlNldElubGluZUZpbGxHcmFkaWVudDoKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldElubGlu
ZUZpbGxHcmFkaWVudD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNl
dElubGluZVN0cm9rZUNvbG9yOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0SW5saW5lU3Ry
b2tlQ29sb3I+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Q2FwOgpAQCAtNzMxLDIyICs3MTAsMTggQEAgdm9pZCBJdGVtQnVmZmVyOjpzaHJpbmtUb0ZpdCgp
CiAgICAgbV9hbGxvY2F0ZWRCdWZmZXJzLnNocmlua1RvRml0KCk7CiB9CiAKLURpZENoYW5nZUl0
ZW1CdWZmZXIgSXRlbUJ1ZmZlcjo6c3dhcFdyaXRhYmxlQnVmZmVySWZOZWVkZWQoc2l6ZV90IG51
bWJlck9mQnl0ZXMpCit2b2lkIEl0ZW1CdWZmZXI6OnN3YXBXcml0YWJsZUJ1ZmZlcklmTmVlZGVk
KHNpemVfdCBudW1iZXJPZkJ5dGVzKQogewotICAgIGF1dG8gc2l6ZUZvckJ1ZmZlclN3aXRjaEl0
ZW0gPSBwYWRkZWRTaXplT2ZUeXBlQW5kSXRlbUluQnl0ZXMoSXRlbVR5cGU6Ok1ldGFDb21tYW5k
Q2hhbmdlSXRlbUJ1ZmZlcik7Ci0gICAgaWYgKG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgKyBudW1i
ZXJPZkJ5dGVzICsgc2l6ZUZvckJ1ZmZlclN3aXRjaEl0ZW0gPD0gbV93cml0YWJsZUJ1ZmZlci5j
YXBhY2l0eSkKLSAgICAgICAgcmV0dXJuIERpZENoYW5nZUl0ZW1CdWZmZXI6Ok5vOwotCi0gICAg
YXV0byBuZXh0QnVmZmVyID0gY3JlYXRlSXRlbUJ1ZmZlcihudW1iZXJPZkJ5dGVzICsgc2l6ZUZv
ckJ1ZmZlclN3aXRjaEl0ZW0pOwotICAgIGJvb2wgaGFkUHJldmlvdXNCdWZmZXIgPSBtX3dyaXRh
YmxlQnVmZmVyICYmIG1fd3JpdGFibGVCdWZmZXIuaWRlbnRpZmllciAhPSBuZXh0QnVmZmVyLmlk
ZW50aWZpZXI7Ci0gICAgaWYgKGhhZFByZXZpb3VzQnVmZmVyKSB7Ci0gICAgICAgIHVuY2hlY2tl
ZEFwcGVuZDxNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI+KERpZENoYW5nZUl0ZW1CdWZmZXI6
Ok5vLCBuZXh0QnVmZmVyLmlkZW50aWZpZXIpOworICAgIGlmIChtX3dyaXR0ZW5OdW1iZXJPZkJ5
dGVzICsgbnVtYmVyT2ZCeXRlcyA8PSBtX3dyaXRhYmxlQnVmZmVyLmNhcGFjaXR5KQorICAgICAg
ICByZXR1cm47CisKKyAgICBhdXRvIG5leHRCdWZmZXIgPSBjcmVhdGVJdGVtQnVmZmVyKG51bWJl
ck9mQnl0ZXMpOworICAgIGlmIChtX3dyaXRhYmxlQnVmZmVyICYmIG1fd3JpdGFibGVCdWZmZXIu
aWRlbnRpZmllciAhPSBuZXh0QnVmZmVyLmlkZW50aWZpZXIpIHsKICAgICAgICAgbV93cml0YWJs
ZUJ1ZmZlci5jYXBhY2l0eSA9IG1fd3JpdHRlbk51bWJlck9mQnl0ZXM7CiAgICAgICAgIG1fcmVh
ZE9ubHlCdWZmZXJzLmFwcGVuZChtX3dyaXRhYmxlQnVmZmVyKTsKICAgICB9CiAgICAgbV93cml0
dGVuTnVtYmVyT2ZCeXRlcyA9IDA7CiAgICAgbV93cml0YWJsZUJ1ZmZlciA9IFdURk1vdmUobmV4
dEJ1ZmZlcik7Ci0gICAgcmV0dXJuIGhhZFByZXZpb3VzQnVmZmVyID8gRGlkQ2hhbmdlSXRlbUJ1
ZmZlcjo6WWVzIDogRGlkQ2hhbmdlSXRlbUJ1ZmZlcjo6Tm87CiB9CiAKIHZvaWQgSXRlbUJ1ZmZl
cjo6YXBwZW5kKGNvbnN0IERpc3BsYXlMaXN0SXRlbSYgdGVtcG9yYXJ5SXRlbSkKQEAgLTc2NSw3
ICs3NDAsNyBAQCB2b2lkIEl0ZW1CdWZmZXI6OmFwcGVuZChjb25zdCBEaXNwbGF5TGlzdEl0ZW0m
IHRlbXBvcmFyeUl0ZW0pCiAgICAgfSk7CiAgICAgYXV0byBhZGRpdGlvbmFsQ2FwYWNpdHlGb3JF
bmNvZGVkSXRlbSA9IDIgKiBzaXplb2YodWludDY0X3QpICsgcm91bmRVcFRvTXVsdGlwbGVPZihh
bGlnbm9mKHVpbnQ2NF90KSwgZGF0YUxlbmd0aCk7CiAKLSAgICBhdXRvIGJ1ZmZlckNoYW5nZWQg
PSBzd2FwV3JpdGFibGVCdWZmZXJJZk5lZWRlZChhZGRpdGlvbmFsQ2FwYWNpdHlGb3JFbmNvZGVk
SXRlbSk7CisgICAgc3dhcFdyaXRhYmxlQnVmZmVySWZOZWVkZWQoYWRkaXRpb25hbENhcGFjaXR5
Rm9yRW5jb2RlZEl0ZW0pOwogCiAgICAgbV93cml0YWJsZUJ1ZmZlci5kYXRhW21fd3JpdHRlbk51
bWJlck9mQnl0ZXNdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oZGlzcGxheUxpc3RJdGVtVHlwZSh0
ZW1wb3JhcnlJdGVtKSk7CiAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCo+KG1fd3JpdGFi
bGVCdWZmZXIuZGF0YSArIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMpWzFdID0gZGF0YUxlbmd0aDsK
QEAgLTc3NiwyMCArNzUxLDEyIEBAIHZvaWQgSXRlbUJ1ZmZlcjo6YXBwZW5kKGNvbnN0IERpc3Bs
YXlMaXN0SXRlbSYgdGVtcG9yYXJ5SXRlbSkKICAgICBlbHNlCiAgICAgICAgIG91dE9mTGluZUl0
ZW0tPmNvcHlUbyhsb2NhdGlvbiwgZGF0YUxlbmd0aCk7CiAKLSAgICBkaWRBcHBlbmREYXRhKGFk
ZGl0aW9uYWxDYXBhY2l0eUZvckVuY29kZWRJdGVtLCBidWZmZXJDaGFuZ2VkKTsKKyAgICBkaWRB
cHBlbmREYXRhKGFkZGl0aW9uYWxDYXBhY2l0eUZvckVuY29kZWRJdGVtKTsKIH0KIAotdm9pZCBJ
dGVtQnVmZmVyOjpkaWRBcHBlbmREYXRhKHNpemVfdCBudW1iZXJPZkJ5dGVzLCBEaWRDaGFuZ2VJ
dGVtQnVmZmVyIGRpZENoYW5nZUl0ZW1CdWZmZXIpCit2b2lkIEl0ZW1CdWZmZXI6OmRpZEFwcGVu
ZERhdGEoc2l6ZV90IG51bWJlck9mQnl0ZXMpCiB7CiAgICAgbV93cml0dGVuTnVtYmVyT2ZCeXRl
cyArPSBudW1iZXJPZkJ5dGVzOwotICAgIGlmIChtX3dyaXRpbmdDbGllbnQpCi0gICAgICAgIG1f
d3JpdGluZ0NsaWVudC0+ZGlkQXBwZW5kRGF0YShtX3dyaXRhYmxlQnVmZmVyLCBudW1iZXJPZkJ5
dGVzLCBkaWRDaGFuZ2VJdGVtQnVmZmVyKTsKLX0KLQotdm9pZCBJdGVtQnVmZmVyOjpwcmVwYXJl
VG9BcHBlbmQoSXRlbUJ1ZmZlckhhbmRsZSYmIGhhbmRsZSkKLXsKLSAgICBtX3dyaXR0ZW5OdW1i
ZXJPZkJ5dGVzID0gMDsKLSAgICBtX3JlYWRPbmx5QnVmZmVycy5hcHBlbmQoc3RkOjpleGNoYW5n
ZShtX3dyaXRhYmxlQnVmZmVyLCBXVEZNb3ZlKGhhbmRsZSkpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaApp
bmRleCBjODczMTk4MmVmODM5MzFiYmFlMzFiNzg2NTBhYzBkYTIwYTA1ZmM1Li40NTJjOGM5ZDk3
NzBmYWUwYWI5ZDYwYzQ0YmY4YTEwZTU5Zjc0YjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbUJ1ZmZlci5oCkBAIC04NCw4ICs4NCw2IEBAIHN0cnVjdCBJdGVtSGFuZGxlIHsK
IAogYm9vbCBzYWZlQ29weShJdGVtSGFuZGxlIGRlc3RpbmF0aW9uLCBjb25zdCBEaXNwbGF5TGlz
dEl0ZW0mIHNvdXJjZSk7CiAKLWVudW0gY2xhc3MgRGlkQ2hhbmdlSXRlbUJ1ZmZlciA6IGJvb2wg
eyBObywgWWVzIH07Ci0KIGNsYXNzIEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50IHsKIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5JdGVtQnVmZmVyV3JpdGluZ0NsaWVudCgpCkBAIC0xMTAsMTEgKzEwOCw2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlSXRlbUlubGluZShjb25zdCBEaXNw
bGF5TGlzdEl0ZW0mLCB1aW50OF90KikgY29uc3QKICAgICB7CiAgICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIGRpZEFwcGVuZERhdGEoY29uc3QgSXRlbUJ1ZmZlckhhbmRsZSYsIHNpemVfdCBudW1i
ZXJPZkJ5dGVzLCBEaWRDaGFuZ2VJdGVtQnVmZmVyKQotICAgIHsKLSAgICAgICAgVU5VU0VEX1BB
UkFNKG51bWJlck9mQnl0ZXMpOwotICAgIH0KIH07CiAKIGNsYXNzIEl0ZW1CdWZmZXJSZWFkaW5n
Q2xpZW50IHsKQEAgLTE4MywyOCArMTc2LDI2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gYnVmZmVyQ2hhbmdlZCA9IHN3YXBXcml0YWJs
ZUJ1ZmZlcklmTmVlZGVkKHBhZGRlZFNpemVPZlR5cGVBbmRJdGVtSW5CeXRlcyhUOjppdGVtVHlw
ZSkpOwotCi0gICAgICAgIHVuY2hlY2tlZEFwcGVuZDxUPihidWZmZXJDaGFuZ2VkLCBzdGQ6OmZv
cndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICBzd2FwV3JpdGFibGVCdWZmZXJJZk5lZWRl
ZChwYWRkZWRTaXplT2ZUeXBlQW5kSXRlbUluQnl0ZXMoVDo6aXRlbVR5cGUpKTsKKyAgICAgICAg
dW5jaGVja2VkQXBwZW5kPFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiAgICAgfQog
CiAgICAgdm9pZCBzZXRDbGllbnQoSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQqIGNsaWVudCkgeyBt
X3dyaXRpbmdDbGllbnQgPSBjbGllbnQ7IH0KICAgICB2b2lkIHNldENsaWVudChJdGVtQnVmZmVy
UmVhZGluZ0NsaWVudCogY2xpZW50KSB7IG1fcmVhZGluZ0NsaWVudCA9IGNsaWVudDsgfQotICAg
IHZvaWQgcHJlcGFyZVRvQXBwZW5kKEl0ZW1CdWZmZXJIYW5kbGUmJik7CiAKIHByaXZhdGU6CiAg
ICAgY29uc3QgSXRlbUJ1ZmZlckhhbmRsZXMmIHJlYWRPbmx5QnVmZmVycygpIGNvbnN0IHsgcmV0
dXJuIG1fcmVhZE9ubHlCdWZmZXJzOyB9CiAgICAgdm9pZCBmb3JFYWNoSXRlbUJ1ZmZlcihGdW5j
dGlvbjx2b2lkKGNvbnN0IEl0ZW1CdWZmZXJIYW5kbGUmKT4mJikgY29uc3Q7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkaWRBcHBlbmREYXRhKHNpemVfdCBudW1iZXJPZkJ5dGVzLCBEaWRDaGFu
Z2VJdGVtQnVmZmVyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpZEFwcGVuZERhdGEoc2l6
ZV90IG51bWJlck9mQnl0ZXMpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgRGlkQ2hhbmdlSXRlbUJ1
ZmZlciBzd2FwV3JpdGFibGVCdWZmZXJJZk5lZWRlZChzaXplX3QgbnVtYmVyT2ZCeXRlcyk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzd2FwV3JpdGFibGVCdWZmZXJJZk5lZWRlZChzaXplX3Qg
bnVtYmVyT2ZCeXRlcyk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBlbmQoY29uc3QgRGlz
cGxheUxpc3RJdGVtJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgY2xhc3MuLi4gQXJncz4g
dm9pZCB1bmNoZWNrZWRBcHBlbmQoRGlkQ2hhbmdlSXRlbUJ1ZmZlciBkaWRDaGFuZ2VJdGVtQnVm
ZmVyLCBBcmdzJiYuLi4gYXJncykKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcy4uLiBB
cmdzPiB2b2lkIHVuY2hlY2tlZEFwcGVuZChBcmdzJiYuLi4gYXJncykKICAgICB7CiAgICAgICAg
IGF1dG8qIHN0YXJ0T2ZJdGVtID0gJm1fd3JpdGFibGVCdWZmZXIuZGF0YVttX3dyaXR0ZW5OdW1i
ZXJPZkJ5dGVzXTsKICAgICAgICAgc3RhcnRPZkl0ZW1bMF0gPSBzdGF0aWNfY2FzdDx1aW50OF90
PihUOjppdGVtVHlwZSk7CiAgICAgICAgIG5ldyAoc3RhcnRPZkl0ZW0gKyBzaXplb2YodWludDY0
X3QpKSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgICAgIGRpZEFwcGVuZERh
dGEocGFkZGVkU2l6ZU9mVHlwZUFuZEl0ZW1JbkJ5dGVzKFQ6Oml0ZW1UeXBlKSwgZGlkQ2hhbmdl
SXRlbUJ1ZmZlcik7CisgICAgICAgIGRpZEFwcGVuZERhdGEocGFkZGVkU2l6ZU9mVHlwZUFuZEl0
ZW1JbkJ5dGVzKFQ6Oml0ZW1UeXBlKSk7CiAgICAgfQogCiAgICAgSXRlbUJ1ZmZlclJlYWRpbmdD
bGllbnQqIG1fcmVhZGluZ0NsaWVudCB7IG51bGxwdHIgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1UeXBlLmNwcAppbmRleCA5OGExNmQyNWZhMWI1YTRjNTJiMGY3M2E0ZjlmNTMy
YWViZmFiNzBjLi41NmFlZTYyNzMyNDcwY2MwOTlkZGE4OTNkZjFiNjY3YTk0YWE3YzkyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCkBAIC00OCw4ICs0OCw2IEBA
IHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlwZSkKICAgICAgICAg
cmV0dXJuIHNpemVvZihDb25jYXRlbmF0ZUNUTSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RN
OgogICAgICAgICByZXR1cm4gc2l6ZW9mKFNldENUTSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbEdyYWRpZW50OgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldElubGluZUZpbGxH
cmFkaWVudCk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAg
ICByZXR1cm4gc2l6ZW9mKFNldElubGluZUZpbGxDb2xvcik7CiAgICAgY2FzZSBJdGVtVHlwZTo6
U2V0SW5saW5lU3Ryb2tlQ29sb3I6CkBAIC0xMzQsMTAgKzEzMiw2IEBAIHN0YXRpYyBzaXplX3Qg
c2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlwZSkKICAgICAgICAgcmV0dXJuIHNpemVvZihG
aWxsRWxsaXBzZSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Rmx1c2hDb250ZXh0OgogICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEZsdXNoQ29udGV4dCk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1h
bmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyOgotICAgICAgICByZXR1cm4gc2l6ZW9mKE1l
dGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcik7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyOgotICAgICAgICByZXR1cm4gc2l6ZW9mKE1l
dGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcik7CiAgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxC
dWZmZXI6CiAgICAgICAgIHJldHVybiBzaXplb2YoR2V0UGl4ZWxCdWZmZXIpOwogICAgIGNhc2Ug
SXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgpAQCAtMjAyLDE1ICsxOTYsMTIgQEAgYm9vbCBpc0Ry
YXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6RW5kQ2xpcFRvRHJh
d2luZ0NvbW1hbmRzOgogICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgogICAgIGNh
c2UgSXRlbVR5cGU6OkZsdXNoQ29udGV4dDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFu
ZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI6Ci0gICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNv
bW1hbmRDaGFuZ2VJdGVtQnVmZmVyOgogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAg
Y2FzZSBJdGVtVHlwZTo6Um90YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U2NhbGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgogICAgIGNhc2Ug
SXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxp
bmVGaWxsR3JhZGllbnQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6
CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lRGFzaDoKQEAgLTM0Niw4ICszMzcsNiBAQCBib29sIGlzSW5saW5lSXRlbShJdGVtVHlwZSB0
eXBlKQogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6CiAgICAgY2FzZSBJdGVt
VHlwZTo6Rmx1c2hDb250ZXh0OgotICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdl
RGVzdGluYXRpb25JbWFnZUJ1ZmZlcjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENo
YW5nZUl0ZW1CdWZmZXI6CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGNhc2UgSXRlbVR5cGU6OlBh
aW50RnJhbWVGb3JNZWRpYToKICNlbmRpZgpAQCAtMzU3LDcgKzM0Niw2IEBAIGJvb2wgaXNJbmxp
bmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0Q1RNOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xv
cjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZUNhcDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1U
eXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtVHlwZS5oCmluZGV4IDZiOTFhMjdiNzU2NTdiYWM1NmMyMzU3NzAyYzZlYzQz
MGFjMTk2ZjIuLjgwODQ0ZThiOWRmMDU1ZTVhMTZjMzY3Y2UyYmYyOTBhOTNjZTYzNzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1UeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaApAQCAtMzYsNyArMzYsNiBAQCBlbnVt
IGNsYXNzIEl0ZW1UeXBlIDogdWludDhfdCB7CiAgICAgU2NhbGUsCiAgICAgQ29uY2F0ZW5hdGVD
VE0sCiAgICAgU2V0Q1RNLAotICAgIFNldElubGluZUZpbGxHcmFkaWVudCwKICAgICBTZXRJbmxp
bmVGaWxsQ29sb3IsCiAgICAgU2V0SW5saW5lU3Ryb2tlQ29sb3IsCiAgICAgU2V0U3Ryb2tlVGhp
Y2tuZXNzLApAQCAtODAsOCArNzksNiBAQCBlbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWludDhfdCB7
CiAgICAgRmlsbFBhdGgsCiAgICAgRmlsbEVsbGlwc2UsCiAgICAgRmx1c2hDb250ZXh0LAotICAg
IE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlciwKLSAgICBNZXRhQ29tbWFu
ZENoYW5nZUl0ZW1CdWZmZXIsCiAgICAgR2V0UGl4ZWxCdWZmZXIsCiAgICAgUHV0UGl4ZWxCdWZm
ZXIsCiAjaWYgRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3Bw
CmluZGV4IDc5Yzk2YWVjZDJlMWQ3NGQxNzY2ZjJkN2FkOGY2ZmQ0ZTM0MWI4NzEuLjcyZmM2ZDFh
NzM0NDYxNDI1ZjBjZTU2N2Y2YjgwYzA0NzIyYzBhYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5jcHAKQEAgLTExNCw4MyArMTE0LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbmNhdGVuYXRlQ1RNJiBpdGVtKQogICAg
IHJldHVybiB0czsKIH0KIAotU2V0SW5saW5lRmlsbEdyYWRpZW50OjpTZXRJbmxpbmVGaWxsR3Jh
ZGllbnQoY29uc3QgR3JhZGllbnQmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0pCi0gICAgOiBtX2RhdGEoZ3JhZGllbnQuZGF0YSgpKQotICAg
ICwgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtKGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pCi0gICAg
LCBtX3NwcmVhZE1ldGhvZChncmFkaWVudC5zcHJlYWRNZXRob2QoKSkKLSAgICAsIG1fY29sb3JT
dG9wQ291bnQoc3RhdGljX2Nhc3Q8dWludDhfdD4oZ3JhZGllbnQuc3RvcHMoKS5zaXplKCkpKQot
ewotICAgIFJFTEVBU0VfQVNTRVJUKG1fY29sb3JTdG9wQ291bnQgPD0gbWF4Q29sb3JTdG9wQ291
bnQpOwotICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG1fY29sb3JTdG9wQ291bnQ7ICsraSkg
ewotICAgICAgICBtX29mZnNldHNbaV0gPSBncmFkaWVudC5zdG9wcygpW2ldLm9mZnNldDsKLSAg
ICAgICAgbV9jb2xvcnNbaV0gPSAqZ3JhZGllbnQuc3RvcHMoKVtpXS5jb2xvci50cnlHZXRBc1NS
R0JBQnl0ZXMoKTsKLSAgICB9Ci19Ci0KLVNldElubGluZUZpbGxHcmFkaWVudDo6U2V0SW5saW5l
RmlsbEdyYWRpZW50KGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRdLCBTUkdCQTx1aW50
OF90PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdLCBjb25zdCBHcmFkaWVudDo6RGF0YSYgZGF0
YSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtLCBHcmFkaWVu
dFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QsIHVpbnQ4X3QgY29sb3JTdG9wQ291bnQpCi0gICAg
OiBtX2RhdGEoZGF0YSkKLSAgICAsIG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybShncmFkaWVudFNw
YWNlVHJhbnNmb3JtKQotICAgICwgbV9zcHJlYWRNZXRob2Qoc3ByZWFkTWV0aG9kKQotICAgICwg
bV9jb2xvclN0b3BDb3VudChjb2xvclN0b3BDb3VudCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCht
X2NvbG9yU3RvcENvdW50IDw9IG1heENvbG9yU3RvcENvdW50KTsKLSAgICBmb3IgKHVpbnQ4X3Qg
aSA9IDA7IGkgPCBtX2NvbG9yU3RvcENvdW50OyArK2kpIHsKLSAgICAgICAgbV9vZmZzZXRzW2ld
ID0gb2Zmc2V0c1tpXTsKLSAgICAgICAgbV9jb2xvcnNbaV0gPSBjb2xvcnNbaV07Ci0gICAgfQot
fQotCi1TZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudChjb25zdCBT
ZXRJbmxpbmVGaWxsR3JhZGllbnQmIG90aGVyKQotewotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPEdyYWRpZW50OjpSYWRpYWxEYXRhPihvdGhlci5tX2RhdGEpIHx8IFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8R3JhZGllbnQ6OkxpbmVhckRhdGE+KG90aGVyLm1fZGF0YSkgfHwgV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxHcmFkaWVudDo6Q29uaWNEYXRhPihvdGhlci5tX2RhdGEpKSB7Ci0g
ICAgICAgIG1fZGF0YSA9IG90aGVyLm1fZGF0YTsKLSAgICAgICAgbV9ncmFkaWVudFNwYWNlVHJh
bnNmb3JtID0gb3RoZXIubV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgICAgICBtX3NwcmVh
ZE1ldGhvZCA9IG90aGVyLm1fc3ByZWFkTWV0aG9kOwotICAgICAgICBtX2NvbG9yU3RvcENvdW50
ID0gb3RoZXIubV9jb2xvclN0b3BDb3VudDsKLSAgICAgICAgaWYgKG1fY29sb3JTdG9wQ291bnQg
PiBtYXhDb2xvclN0b3BDb3VudCkKLSAgICAgICAgICAgIG1fY29sb3JTdG9wQ291bnQgPSAwOwot
ICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBtX2NvbG9yU3RvcENvdW50OyArK2kpIHsK
LSAgICAgICAgICAgIG1fb2Zmc2V0c1tpXSA9IG90aGVyLm1fb2Zmc2V0c1tpXTsKLSAgICAgICAg
ICAgIG1fY29sb3JzW2ldID0gb3RoZXIubV9jb2xvcnNbaV07Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UKLSAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci19Ci0KLVJlZjxHcmFkaWVudD4gU2V0SW5s
aW5lRmlsbEdyYWRpZW50OjpncmFkaWVudCgpIGNvbnN0Ci17Ci0gICAgYXV0byBncmFkaWVudCA9
IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkRhdGEobV9kYXRhKSk7Ci0gICAgZm9yICh1aW50
OF90IGkgPSAwOyBpIDwgbV9jb2xvclN0b3BDb3VudDsgKytpKQotICAgICAgICBncmFkaWVudC0+
YWRkQ29sb3JTdG9wKHsgbV9vZmZzZXRzW2ldLCBDb2xvcihtX2NvbG9yc1tpXSkgfSk7Ci0gICAg
Z3JhZGllbnQtPnNldFNwcmVhZE1ldGhvZChtX3NwcmVhZE1ldGhvZCk7Ci0gICAgcmV0dXJuIGdy
YWRpZW50OwotfQotCi12b2lkIFNldElubGluZUZpbGxHcmFkaWVudDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGlmIChtX2NvbG9yU3RvcENvdW50IDw9IG1h
eENvbG9yU3RvcENvdW50KQotICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudChncmFkaWVu
dCgpLCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotfQotCi1ib29sIFNldElubGluZUZpbGxH
cmFkaWVudDo6aXNJbmxpbmUoY29uc3QgR3JhZGllbnQmIGdyYWRpZW50KQotewotICAgIGlmIChn
cmFkaWVudC5zdG9wcygpLnNpemUoKSA+IFNldElubGluZUZpbGxHcmFkaWVudDo6bWF4Q29sb3JT
dG9wQ291bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAoYXV0byYgY29sb3JT
dG9wIDogZ3JhZGllbnQuc3RvcHMoKSkgewotICAgICAgICBpZiAoIWNvbG9yU3RvcC5jb2xvci50
cnlHZXRBc1NSR0JBQnl0ZXMoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFNldElubGluZUZpbGxHcmFkaWVudCYpCi17Ci0gICAgLy8gRklY
TUU6IER1bXAgZ3JhZGllbnQgZGF0YS4KLSAgICByZXR1cm4gdHM7Ci19Ci0KIHZvaWQgU2V0SW5s
aW5lRmlsbENvbG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAg
ICAgY29udGV4dC5zZXRGaWxsQ29sb3IoY29sb3IoKSk7CkBAIC0xMTExLDE4ICsxMDM0LDYgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZsdXNo
Q29udGV4dCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZm
ZXImIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJpZGVudGlmaWVyIiwgaXRlbS5pZGVu
dGlmaWVyKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25J
bWFnZUJ1ZmZlciYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImlkZW50aWZpZXIiLCBp
dGVtLmlkZW50aWZpZXIoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCiBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbVR5cGUgdHlwZSkKIHsKICAgICBzd2l0
Y2ggKHR5cGUpIHsKQEAgLTExMzMsNyArMTA0NCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6
OlNjYWxlOiB0cyA8PCAic2NhbGUiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06
IHRzIDw8ICJzZXQtY3RtIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVD
VE06IHRzIDw8ICJjb25jYXRlbnRhdGUtY3RtIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0SW5saW5lRmlsbEdyYWRpZW50OiB0cyA8PCAic2V0LWlubGluZS1maWxsLWdyYWRpZW50Ijsg
YnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOiB0cyA8PCAic2V0
LWlubGluZS1maWxsLWNvbG9yIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
U3Ryb2tlQ29sb3I6IHRzIDw8ICJzZXQtaW5saW5lLXN0cm9rZS1jb2xvciI7IGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczogdHMgPDwgInNldC1zdHJva2UtdGhp
Y2tuZXNzIjsgYnJlYWs7CkBAIC0xMTc2LDggKzEwODYsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUGF0aDogdHMgPDwgImZpbGwtcGF0aCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxFbGxpcHNlOiB0cyA8PCAiZmlsbC1lbGxpcHNlIjsgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6Rmx1c2hDb250ZXh0OiB0cyA8PCAiZmx1c2gtY29udGV4dCI7IGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcjog
dHMgPDwgIm1ldGEtY29tbWFuZC1jaGFuZ2UtZGVzdGluYXRpb24taW1hZ2UtYnVmZmVyIjsgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyOiB0cyA8
PCAibWV0YS1jb21tYW5kLWNoYW5nZS1pdGVtLWJ1ZmZlciI7IGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OkdldFBpeGVsQnVmZmVyOiB0cyA8PCAiZ2V0LXBpeGVsLWJ1ZmZlciI7IGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOiB0cyA8PCAicHV0LXBpeGVsLWJ1ZmZl
ciI7IGJyZWFrOwogI2lmIEVOQUJMRShWSURFTykKQEAgLTEyMjUsOSArMTEzMyw2IEBAIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAgICBj
YXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q29u
Y2F0ZW5hdGVDVE0+KCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElu
bGluZUZpbGxHcmFkaWVudDoKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0SW5saW5lRmlsbEdy
YWRpZW50PigpOwotICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVG
aWxsQ29sb3I6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldElubGluZUZpbGxDb2xvcj4oKTsK
ICAgICAgICAgYnJlYWs7CkBAIC0xMzUwLDEyICsxMjU1LDYgQEAgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIGNhc2UgSXRlbVR5cGU6
OkZsdXNoQ29udGV4dDoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Rmx1c2hDb250ZXh0PigpOwog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZURlc3Rp
bmF0aW9uSW1hZ2VCdWZmZXI6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PE1ldGFDb21tYW5kQ2hh
bmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcj4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyOgotICAgICAgICB0cyA8PCBpdGVt
LmdldDxNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI+KCk7Ci0gICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyOgogICAgICAgICB0cyA8PCBpdGVtLmdldDxH
ZXRQaXhlbEJ1ZmZlcj4oKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuaAppbmRleCBhNDNkMTNmNmNiYzNkMjBjYjJjZDgxZDBhNGFhMzNiNWIyNjRiOWRkLi41
YjJiY2RiMDE4MTQ0Y2ZiZjNmZGQwMTNmZDA5ZjRkMzgzMjg1ZDdjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgotI2luY2x1ZGUgIkRpc3BsYXlMaXN0Rmx1
c2hJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtQnVmZmVySWRlbnRpZmll
ci5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbVR5cGUuaCIKICNpbmNsdWRlICJGbG9hdFJv
dW5kZWRSZWN0LmgiCkBAIC03Miw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OwogfTsKIAogY2xhc3MgUmVzdG9yZSB7CkBAIC04MSw3ICs4MCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogfTsKIAogY2xhc3MgVHJhbnNsYXRlIHsKQEAgLTkw
LDYgKzg5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFs
c2U7CiAKKyAgICBUcmFuc2xhdGUoKSA9IGRlZmF1bHQ7CiAgICAgVHJhbnNsYXRlKGZsb2F0IHgs
IGZsb2F0IHkpCiAgICAgICAgIDogbV94KHgpCiAgICAgICAgICwgbV95KHkpCkBAIC05OSw3ICs5
OSw3IEBAIHB1YmxpYzoKICAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9CiAgICAg
ZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGZsb2F0IG1feCB7IDAgfTsKQEAgLTEx
Miw2ICsxMTIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBm
YWxzZTsKIAorICAgIFJvdGF0ZSgpID0gZGVmYXVsdDsKICAgICBSb3RhdGUoZmxvYXQgYW5nbGUp
CiAgICAgICAgIDogbV9hbmdsZShhbmdsZSkKICAgICB7CkBAIC0xMTksNyArMTIwLDcgQEAgcHVi
bGljOgogCiAgICAgZmxvYXQgYW5nbGUoKSBjb25zdCB7IHJldHVybiBtX2FuZ2xlOyB9CiAKLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZmxv
YXQgbV9hbmdsZSB7IDAgfTsgLy8gSW4gcmFkaWFucy4KQEAgLTEzMSw2ICsxMzIsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAorICAgIFNjYWxl
KCkgPSBkZWZhdWx0OwogICAgIFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKICAgICAgICAg
OiBtX3NpemUoc2l6ZSkKICAgICB7CkBAIC0xMzgsNyArMTQwLDcgQEAgcHVibGljOgogCiAgICAg
Y29uc3QgRmxvYXRTaXplJiBhbW91bnQoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBGbG9h
dFNpemUgbV9zaXplOwpAQCAtMTUwLDYgKzE1Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCisgICAgU2V0Q1RNKCkgPSBkZWZhdWx0OwogICAg
IFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICAgICAgOiBtX3Ry
YW5zZm9ybSh0cmFuc2Zvcm0pCiAgICAgewpAQCAtMTU3LDcgKzE2MCw3IEBAIHB1YmxpYzoKIAog
ICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90
cmFuc2Zvcm07IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAog
cHJpdmF0ZToKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07CkBAIC0xNjksNiArMTcy
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAK
KyAgICBDb25jYXRlbmF0ZUNUTSgpID0gZGVmYXVsdDsKICAgICBDb25jYXRlbmF0ZUNUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICAgICAgOiBtX3RyYW5zZm9ybSh0cmFu
c2Zvcm0pCiAgICAgewpAQCAtMTc2LDUyICsxODAsMjYgQEAgcHVibGljOgogCiAgICAgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsg
fQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgog
ICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKIH07CiAKLWNsYXNzIFNldElubGluZUZp
bGxHcmFkaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgbWF4
Q29sb3JTdG9wQ291bnQgPSA0OwotCi0gICAgU2V0SW5saW5lRmlsbEdyYWRpZW50KGNvbnN0IEdy
YWRpZW50JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBTZXRJbmxpbmVGaWxsR3JhZGllbnQoZmxvYXQgb2Zmc2V0c1tt
YXhDb2xvclN0b3BDb3VudF0sIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yc1ttYXhDb2xvclN0b3BDb3Vu
dF0sIGNvbnN0IEdyYWRpZW50OjpEYXRhJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVu
dFNwYWNlVHJhbnNmb3JtLCBHcmFkaWVudFNwcmVhZE1ldGhvZCwgdWludDhfdCBjb2xvclN0b3BD
b3VudCk7Ci0gICAgU2V0SW5saW5lRmlsbEdyYWRpZW50KGNvbnN0IFNldElubGluZUZpbGxHcmFk
aWVudCYpOwotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZDsgfQot
Ci0gICAgc3RhdGljIGJvb2wgaXNJbmxpbmUoY29uc3QgR3JhZGllbnQmKTsKLSAgICBSZWY8R3Jh
ZGllbnQ+IGdyYWRpZW50KCkgY29uc3Q7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1fb2Zmc2V0c1ttYXhDb2xvclN0b3BD
b3VudF07Ci0gICAgU1JHQkE8dWludDhfdD4gbV9jb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdOwot
ICAgIEdyYWRpZW50OjpEYXRhIG1fZGF0YTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9ncmFkaWVu
dFNwYWNlVHJhbnNmb3JtOwotICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIG1fc3ByZWFkTWV0aG9k
IHsgR3JhZGllbnRTcHJlYWRNZXRob2Q6OlBhZCB9OwotICAgIHVpbnQ4X3QgbV9jb2xvclN0b3BD
b3VudCB7IDAgfTsKLSAgICBib29sIG1faXNWYWxpZCB7IHRydWUgfTsKLX07Ci0KIGNsYXNzIFNl
dElubGluZUZpbGxDb2xvciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAorICAgIFNldElubGluZUZpbGxDb2xvcigpID0g
ZGVmYXVsdDsKICAgICBTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3JEYXRh
KQogICAgICAgICA6IG1fY29sb3JEYXRhKGNvbG9yRGF0YSkKICAgICB7CiAgICAgfQogCiAgICAg
Q29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiB7IG1fY29sb3JEYXRhIH07IH0KLSAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU1JHQkE8dWlu
dDhfdD4gbV9jb2xvckRhdGE7CkBAIC0yMzMsNiArMjExLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKKyAgICBTZXRJbmxpbmVTdHJva2VDb2xv
cigpID0gZGVmYXVsdDsKICAgICBTZXRJbmxpbmVTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PiBj
b2xvckRhdGEpCiAgICAgICAgIDogbV9jb2xvckRhdGEoY29sb3JEYXRhKQogICAgIHsKQEAgLTI0
MCw3ICsyMTksNyBAQCBwdWJsaWM6CiAKICAgICBDb2xvciBjb2xvcigpIGNvbnN0IHsgcmV0dXJu
IHsgbV9jb2xvckRhdGEgfTsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogCiBwcml2YXRlOgogICAgIFNSR0JBPHVpbnQ4X3Q+IG1fY29sb3JEYXRhOwpAQCAtMjUy
LDYgKzIzMSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOwogCisgICAgU2V0U3Ryb2tlVGhpY2tuZXNzKCkgPSBkZWZhdWx0OwogICAgIFNldFN0cm9r
ZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiAgICAgICAgIDogbV90aGlja25lc3ModGhpY2tu
ZXNzKQogICAgIHsKQEAgLTI1OSw3ICsyMzksNyBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCB0aGlj
a25lc3MoKSBjb25zdCB7IHJldHVybiBtX3RoaWNrbmVzczsgfQogCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGZsb2F0IG1fdGhpY2tuZXNz
IHsgMCB9OwpAQCAtMjgyLDcgKzI2Miw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8U2V0U3RhdGU+IGRlY29kZShEZWNvZGVyJik7
CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYsIE5hdGl2ZUltYWdlKiBzdHJva2VQ
YXR0ZXJuSW1hZ2UsIE5hdGl2ZUltYWdlKiBmaWxsUGF0dGVybkltYWdlKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYsIE5hdGl2ZUltYWdlKiBzdHJva2VQ
YXR0ZXJuSW1hZ2UsIE5hdGl2ZUltYWdlKiBmaWxsUGF0dGVybkltYWdlKTsKIAogcHJpdmF0ZToK
ICAgICBzdHJ1Y3QgUGF0dGVybkRhdGEgewpAQCAtNTk5LDYgKzU3OSw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCisgICAgU2V0TGluZUNhcCgp
ID0gZGVmYXVsdDsKICAgICBTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKICAgICAgICAgOiBt
X2xpbmVDYXAobGluZUNhcCkKICAgICB7CkBAIC02MDYsMTAgKzU4NywxMCBAQCBwdWJsaWM6CiAK
ICAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDYXA7IH0KIAotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBMaW5l
Q2FwIG1fbGluZUNhcDsKKyAgICBMaW5lQ2FwIG1fbGluZUNhcCB7IExpbmVDYXA6OkJ1dHQgfTsK
IH07CiAKIGNsYXNzIFNldExpbmVEYXNoIHsKQEAgLTYyNyw3ICs2MDgsNyBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2Rhc2hBcnJh
eTsgfQogICAgIGZsb2F0IGRhc2hPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Rhc2hPZmZzZXQ7
IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTZXRMaW5lRGFzaD4gZGVj
b2RlKERlY29kZXImKTsKQEAgLTY2Niw2ICs2NDcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAorICAgIFNldExpbmVKb2luKCkgPSBkZWZhdWx0
OwogICAgIFNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQogICAgICAgICA6IG1fbGluZUpv
aW4obGluZUpvaW4pCiAgICAgewpAQCAtNjczLDEwICs2NTUsMTAgQEAgcHVibGljOgogCiAgICAg
TGluZUpvaW4gbGluZUpvaW4oKSBjb25zdCB7IHJldHVybiBtX2xpbmVKb2luOyB9CiAKLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgTGluZUpv
aW4gbV9saW5lSm9pbjsKKyAgICBMaW5lSm9pbiBtX2xpbmVKb2luIHsgTGluZUpvaW46Ok1pdGVy
IH07CiB9OwogCiBjbGFzcyBTZXRNaXRlckxpbWl0IHsKQEAgLTY4NSw2ICs2NjcsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAorICAgIFNldE1p
dGVyTGltaXQoKSA9IGRlZmF1bHQ7CiAgICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0
KQogICAgICAgICA6IG1fbWl0ZXJMaW1pdChtaXRlckxpbWl0KQogICAgIHsKQEAgLTY5MiwxMCAr
Njc1LDEwIEBAIHB1YmxpYzoKIAogICAgIGZsb2F0IG1pdGVyTGltaXQoKSBjb25zdCB7IHJldHVy
biBtX21pdGVyTGltaXQ7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAogcHJpdmF0ZToKLSAgICBmbG9hdCBtX21pdGVyTGltaXQ7CisgICAgZmxvYXQgbV9taXRl
ckxpbWl0IHsgMCB9OwogfTsKIAogY2xhc3MgQ2xlYXJTaGFkb3cgewpAQCAtNzA0LDcgKzY4Nyw4
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1
ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBDbGVhclNoYWRvdygp
ID0gZGVmYXVsdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogfTsKIAogLy8gRklYTUU6IHRyZWF0IGFzIGRyYXdpbmcgaXRlbT8KQEAgLTcx
NCw2ICs2OTgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBm
YWxzZTsKIAorICAgIENsaXAoKSA9IGRlZmF1bHQ7CiAgICAgQ2xpcChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiAgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewpAQCAtNzIxLDcgKzcwNiw3IEBA
IHB1YmxpYzoKIAogICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2
YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CkBAIC03MzMsNiArNzE4LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKKyAgICBDbGlwT3V0KCkg
PSBkZWZhdWx0OwogICAgIENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICA6
IG1fcmVjdChyZWN0KQogICAgIHsKQEAgLTc0MCw3ICs3MjYsNyBAQCBwdWJsaWM6CiAKICAgICBj
b25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBGbG9hdFJl
Y3QgbV9yZWN0OwpAQCAtNzUyLDYgKzczOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCisgICAgQ2xpcFRvSW1hZ2VCdWZmZXIoKSA9IGRlZmF1
bHQ7CiAgICAgQ2xpcFRvSW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlt
YWdlQnVmZmVySWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiAg
ICAgICAgIDogbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQog
ICAgICAgICAsIG1fZGVzdGluYXRpb25SZWN0KGRlc3RpbmF0aW9uUmVjdCkKQEAgLTc2Miw5ICs3
NDksOSBAQCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIuaXNWYWxpZCgpOyB9CiAKLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkltYWdlQnVmZmVyJikgY29uc3Q7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpJbWFn
ZUJ1ZmZlciYpIGNvbnN0OwogCi0gICAgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCBX
RUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2
YXRlOgogICAgIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBtX2ltYWdlQnVmZmVySWRlbnRp
ZmllcjsKQEAgLTc5Miw3ICs3NzksNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENsaXBPdXRUb1BhdGg+IGRlY29kZShEZWNvZGVy
Jik7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6
CiAgICAgUGF0aCBtX3BhdGg7CkBAIC04MzYsNyArODIzLDcgQEAgcHVibGljOgogICAgIGNvbnN0
IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KICAgICBXaW5kUnVsZSB3aW5k
UnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZFJ1bGU7IH0KIAotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgc3RkOjpvcHRpb25hbDxDbGlwUGF0aD4gZGVjb2RlKERlY29kZXImKTsKQEAgLTkyNiw2ICs5
MTMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsK
IAorICAgIEVuZENsaXBUb0RyYXdpbmdDb21tYW5kcygpID0gZGVmYXVsdDsKICAgICBFbmRDbGlw
VG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKICAgICAgICAg
OiBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQogICAgIHsKQEAgLTk1MSwxMCArOTM5LDEwIEBA
IHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9u
YWw8RHJhd0dseXBocz4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIERyYXdHbHlwaHMoY29uc3Qg
Rm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2Uq
LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9v
dGhpbmdNb2RlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWdu
ZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9k
ZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0dseXBocyhSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIsIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiYsIFZlY3RvcjxHbHlwaEJ1ZmZl
ckFkdmFuY2UsIDEyOD4mJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRQb2ludCYgbG9j
YWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRm9udCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRm9udCYpIGNvbnN0OwogCiAgICAgc3RkOjpvcHRp
b25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQpAQCAtMTAyNiw2ICsxMDE0
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAor
ICAgIERyYXdJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKICAgICBEcmF3SW1hZ2VCdWZmZXIoUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllciwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKICAgICAgICAgOiBtX2ltYWdlQnVmZmVySWRlbnRpZmll
cihpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCiAgICAgICAgICwgbV9kZXN0aW5hdGlvblJlY3QoZGVz
dFJlY3QpCkBAIC0xMDQxLDkgKzEwMzAsOSBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFdlIG1p
Z2h0IHdhbnQgdG8gdmFsaWRhdGUgSW1hZ2VQYWludGluZ09wdGlvbnMuCiAgICAgYm9vbCBpc1Zh
bGlkKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIuaXNWYWxpZCgpOyB9
CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkltYWdlQnVmZmVy
JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
LCBXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIGNvbnN0OwogCi0gICAgTk9fUkVUVVJOX0RVRV9UT19B
U1NFUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBOT19SRVRVUk5f
RFVFX1RPX0FTU0VSVCBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rl
c3RpbmF0aW9uUmVjdDsgfQpAQCAtMTA2MSw2ICsxMDUwLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAorICAgIERyYXdOYXRpdmVJbWFnZSgpID0g
ZGVmYXVsdDsKICAgICBEcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCiAgICAgICAgIDogbV9pbWFnZUlkZW50aWZpZXIoaW1hZ2VJ
ZGVudGlmaWVyKQogICAgICAgICAsIG1faW1hZ2VTaXplKGltYWdlU2l6ZSkKQEAgLTEwNzYsOCAr
MTA2Niw4IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byB2YWxpZGF0
ZSBJbWFnZVBhaW50aW5nT3B0aW9ucy4KICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVy
biBtX2ltYWdlSWRlbnRpZmllci5pc1ZhbGlkKCk7IH0KIAotICAgIE5PX1JFVFVSTl9EVUVfVE9f
QVNTRVJUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmLCBOYXRpdmVJbWFnZSYpIGNvbnN0OworICAgIE5PX1JFVFVSTl9E
VUVfVE9fQVNTRVJUIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmLCBO
YXRpdmVJbWFnZSYpIGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2Jh
bEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQpAQCAtMTA5Niw2ICsxMDg2LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAorICAgIERyYXdQYXR0
ZXJuKCkgPSBkZWZhdWx0OwogICAgIFdFQkNPUkVfRVhQT1JUIERyYXdQYXR0ZXJuKFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9p
bWFnZUlkZW50aWZpZXI7IH0KQEAgLTExMDgsOCArMTA5OSw4IEBAIHB1YmxpYzoKICAgICAvLyBG
SVhNRTogV2UgbWlnaHQgd2FudCB0byB2YWxpZGF0ZSBJbWFnZVBhaW50aW5nT3B0aW9ucy4KICAg
ICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlSWRlbnRpZmllci5pc1ZhbGlk
KCk7IH0KIAotICAgIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmLCBOYXRpdmVJ
bWFnZSYpIGNvbnN0OworICAgIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmLCBOYXRpdmVJbWFnZSYpIGNvbnN0OwogCiAgICAg
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CkBA
IC0xMTMxLDYgKzExMjIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSB0cnVlOyAvLyBJcyBkcmF3aW5nIGl0ZW0gYmVjYXVzZSB0aGUgc2l6ZSBvZiB0aGUgdHJh
bnNwYXJlbmN5IGxheWVyIGlzIGltcGxpY2l0bHkgdGhlIGNsaXAgYm91bmRzLgogCisgICAgQmVn
aW5UcmFuc3BhcmVuY3lMYXllcigpID0gZGVmYXVsdDsKICAgICBCZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpCiAgICAgICAgIDogbV9vcGFjaXR5KG9wYWNpdHkpCiAgICAgewpA
QCAtMTEzOCwxMyArMTEzMCwxMyBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCBvcGFjaXR5KCkgY29u
c3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAg
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsgfQogCiBwcml2YXRlOgotICAgIGZsb2F0IG1fb3BhY2l0eTsKKyAgICBmbG9h
dCBtX29wYWNpdHkgeyAwIH07CiB9OwogCiBjbGFzcyBFbmRUcmFuc3BhcmVuY3lMYXllciB7CkBA
IC0xMTUzLDcgKzExNDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSB0cnVlOwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAg
ICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0K
QEAgLTExNjUsNiArMTE1Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IHRydWU7CiAKKyAgICBEcmF3UmVjdCgpID0gZGVmYXVsdDsKICAgICBEcmF3UmVjdChG
bG9hdFJlY3QgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogICAgICAgICA6IG1fcmVjdChy
ZWN0KQogICAgICAgICAsIG1fYm9yZGVyVGhpY2tuZXNzKGJvcmRlclRoaWNrbmVzcykKQEAgLTEx
NzQsNyArMTE2Nyw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdDsgfQogICAgIGZsb2F0IGJvcmRlclRoaWNrbmVzcygpIGNvbnN0IHsgcmV0dXJu
IG1fYm9yZGVyVGhpY2tuZXNzOyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQpAQCAtMTE5MCw2ICsxMTgzLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gdHJ1ZTsKIAorICAgIERyYXdMaW5lKCkgPSBkZWZhdWx0OwogICAgIERyYXdM
aW5lKEZsb2F0UG9pbnQgcG9pbnQxLCBGbG9hdFBvaW50IHBvaW50MikKICAgICAgICAgOiBtX3Bv
aW50MShwb2ludDEpCiAgICAgICAgICwgbV9wb2ludDIocG9pbnQyKQpAQCAtMTE5OSw3ICsxMTkz
LDcgQEAgcHVibGljOgogICAgIEZsb2F0UG9pbnQgcG9pbnQxKCkgY29uc3QgeyByZXR1cm4gbV9w
b2ludDE7IH0KICAgICBGbG9hdFBvaW50IHBvaW50MigpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQy
OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpu
dWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwpAQCAtMTIyNiw3ICsxMjIwLDcgQEAgcHVibGljOgog
ICAgIGJvb2wgaXNQcmludGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRpbmc7IH0KICAgICBi
b29sIGRvdWJsZUxpbmVzKCkgY29uc3QgeyByZXR1cm4gbV9kb3VibGVMaW5lczsgfQogCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25hbDxG
bG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQog
ICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKQEAgLTEyOTgsNiArMTI5Miw3IEBAIHB1YmxpYzoKIAogICAgIHVzaW5n
IFVuZGVybHlpbmdEb2N1bWVudE1hcmtlckxpbmVTdHlsZVR5cGUgPSBzdGQ6OnVuZGVybHlpbmdf
dHlwZTxEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZT46OnR5cGU7CiAKKyAgICBEcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKCkgPSBkZWZhdWx0OwogICAgIERyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSYgc3R5bGUpCiAgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgICAgICwgbV9zdHlsZU1vZGUo
c3RhdGljX2Nhc3Q8VW5kZXJseWluZ0RvY3VtZW50TWFya2VyTGluZVN0eWxlVHlwZT4oc3R5bGUu
bW9kZSkpCkBAIC0xMzE2LDcgKzEzMTEsNyBAQCBwdWJsaWM6CiAKICAgICBGbG9hdFJlY3QgcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKQEAgLTEz
MzMsNiArMTMyOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IHRydWU7CiAKKyAgICBEcmF3RWxsaXBzZSgpID0gZGVmYXVsdDsKICAgICBEcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewpAQCAt
MTM0MCw3ICsxMzM2LDcgQEAgcHVibGljOgogCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7
IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9
CkBAIC0xMzcwLDcgKzEzNjYsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERyYXdQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25h
bDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsg
fQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOyB9CkBA
IC0xNDI2LDcgKzE0MjIsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERyYXdGb2N1c1JpbmdQYXRoPiBkZWNvZGUoRGVjb2RlciYp
OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAgc3RkOjpv
cHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKQEAgLTE0ODYsNyArMTQ4Miw3IEBAIHB1YmxpYzoKICAg
ICBmbG9hdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQogICAgIGNvbnN0IENv
bG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBn
bG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CkBAIC0xNTQyLDYgKzE1MzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJh
d2luZ0l0ZW0gPSB0cnVlOwogCisgICAgRmlsbFJlY3QoKSA9IGRlZmF1bHQ7CiAgICAgRmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsK
QEAgLTE1NDksNyArMTU0Niw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVy
biBtX3JlY3Q7IH0KQEAgLTE1NzMsNyArMTU3MCw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFJlY3Qg
cmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGNvbnN0IENvbG9yJiBjb2xvcigp
IGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMo
KSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4g
bV9yZWN0OyB9CkBAIC0xNjIwLDcgKzE2MTcsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgRmxvYXRS
ZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgY29uc3QgR3JhZGllbnQm
IGdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9ncmFkaWVudC5nZXQoKTsgfQogCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAg
IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KQEAgLTE2NzQsNyArMTY3MSw3IEBAIHB1Ymxp
YzoKICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcigpIGNvbnN0IHsgcmV0
dXJuIG1fb3A7IH0KICAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9i
bGVuZE1vZGU7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAog
ICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVy
biBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CkBAIC0x
NzQ0LDcgKzE3NDEsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPEZpbGxSb3VuZGVkUmVjdD4gZGVjb2RlKERlY29kZXImKTsKIAot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7
IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0LnJlY3QoKTsgfQpAQCAtMTgwNCw3ICsx
ODAxLDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4gZGVjb2RlKERlY29kZXImKTsKIAot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7
IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CkBAIC0xODUyLDEzICsxODQ5LDE0
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1
ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKKyAg
ICBGaWxsTGluZSgpID0gZGVmYXVsdDsKICAgICBGaWxsTGluZShjb25zdCBMaW5lRGF0YSYgbGlu
ZURhdGEpCiAgICAgICAgIDogbV9saW5lRGF0YShsaW5lRGF0YSkKICAgICB7CiAgICAgfQogCiAg
ICAgUGF0aCBwYXRoKCkgY29uc3QgeyByZXR1cm4gUGF0aDo6ZnJvbSh7bV9saW5lRGF0YX0pOyB9
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7
IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gcGF0aCgpLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQog
CkBAIC0xODcyLDEzICsxODcwLDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CiAKKyAgICBGaWxsQXJjKCkgPSBkZWZhdWx0OwogICAgIEZpbGxBcmMo
Y29uc3QgQXJjRGF0YSYgYXJjRGF0YSkKICAgICAgICAgOiBtX2FyY0RhdGEoYXJjRGF0YSkKICAg
ICB7CiAgICAgfQogCiAgICAgUGF0aCBwYXRoKCkgY29uc3QgeyByZXR1cm4gUGF0aDo6ZnJvbSh7
bV9hcmNEYXRhfSk7IH0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAg
ICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBwYXRoKCkuZmFzdEJvdW5k
aW5nUmVjdCgpOyB9CiAKQEAgLTE4OTIsMTMgKzE4OTEsMTQgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAorICAgIEZpbGxRdWFkQ3VydmUoKSA9IGRl
ZmF1bHQ7CiAgICAgRmlsbFF1YWRDdXJ2ZShjb25zdCBRdWFkQ3VydmVEYXRhJiBxdWFkQ3VydmVE
YXRhKQogICAgICAgICA6IG1fcXVhZEN1cnZlRGF0YShxdWFkQ3VydmVEYXRhKQogICAgIHsKICAg
ICB9CiAKICAgICBQYXRoIHBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRoOjpmcm9tKHttX3F1YWRD
dXJ2ZURhdGF9KTsgfQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKICAg
ICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4g
c3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIHBhdGgoKS5mYXN0Qm91bmRp
bmdSZWN0KCk7IH0KIApAQCAtMTkxMiwxMyArMTkxMiwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCisgICAgRmlsbEJlemllckN1cnZlKCkgPSBk
ZWZhdWx0OwogICAgIEZpbGxCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmIGJlemll
ckN1cnZlRGF0YSkKICAgICAgICAgOiBtX2JlemllckN1cnZlRGF0YShiZXppZXJDdXJ2ZURhdGEp
CiAgICAgewogICAgIH0KIAogICAgIFBhdGggcGF0aCgpIGNvbnN0IHsgcmV0dXJuIFBhdGg6OmZy
b20oe21fYmV6aWVyQ3VydmVEYXRhfSk7IH0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBwYXRo
KCkuZmFzdEJvdW5kaW5nUmVjdCgpOyB9CiAKQEAgLTE5NDksNyArMTk1MCw3IEBAIHB1YmxpYzoK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsbFBh
dGg+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcGF0
aC5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KQEAgLTE5ODEsNiArMTk4Miw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKKyAgICBGaWxsRWxsaXBzZSgp
ID0gZGVmYXVsdDsKICAgICBGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAg
ICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewpAQCAtMTk4OCw3ICsxOTkwLDcgQEAgcHVibGljOgog
CiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAg
ICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CkBAIC0yMTI1LDE0ICsyMTI3LDE1IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBQYWlu
dEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQYWludEZyYW1lRm9yTWVkaWEoKSA9IGRlZmF1bHQ7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CiAKICAgICBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogICAgIE1lZGlhUGxheWVySWRl
bnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAKICAg
ICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXIuaXNWYWxpZCgpOyB9
CiAKLSAgICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OworICAgIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1
cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIHsgbV9kZXN0aW5hdGlvbiB9OyB9CkBAIC0yMTQ5LDYgKzIx
NTIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwog
CisgICAgU3Ryb2tlUmVjdCgpID0gZGVmYXVsdDsKICAgICBTdHJva2VSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICA6IG1fcmVjdChyZWN0KQogICAg
ICAgICAsIG1fbGluZVdpZHRoKGxpbmVXaWR0aCkKQEAgLTIxNTgsNyArMjE2Miw3IEBAIHB1Ymxp
YzoKICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGZs
b2F0IGxpbmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVdpZHRoOyB9CiAKLSAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0
UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAg
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwpAQCAtMjE3NCw2ICsyMTc4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAorICAgIFN0cm9rZUxpbmUoKSA9IGRlZmF1bHQ7CiAj
aWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgU3Ryb2tlTGluZShjb25zdCBMaW5lRGF0
YSYgbGluZURhdGEpCiAgICAgICAgIDogbV9zdGFydChsaW5lRGF0YS5zdGFydCkKQEAgLTIxOTAs
NyArMjE5NSw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFBvaW50IHN0YXJ0KCkgY29uc3QgeyByZXR1
cm4gbV9zdGFydDsgfQogICAgIEZsb2F0UG9pbnQgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7
IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0ZDo6
b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51
bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CkBAIC0yMjA4LDEzICsyMjEzLDE0IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKKyAgICBTdHJva2VBcmMo
KSA9IGRlZmF1bHQ7CiAgICAgU3Ryb2tlQXJjKGNvbnN0IEFyY0RhdGEmIGFyY0RhdGEpCiAgICAg
ICAgIDogbV9hcmNEYXRhKGFyY0RhdGEpCiAgICAgewogICAgIH0KIAogICAgIFBhdGggcGF0aCgp
IGNvbnN0IHsgcmV0dXJuIFBhdGg6OmZyb20oe21fYXJjRGF0YX0pOyB9Ci0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBn
bG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKQEAgLTIyMjgsMTMgKzIyMzQsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAorICAgIFN0cm9rZVF1YWRDdXJ2ZSgpID0gZGVmYXVsdDsK
ICAgICBTdHJva2VRdWFkQ3VydmUoY29uc3QgUXVhZEN1cnZlRGF0YSYgcXVhZEN1cnZlRGF0YSkK
ICAgICAgICAgOiBtX3F1YWRDdXJ2ZURhdGEocXVhZEN1cnZlRGF0YSkKICAgICB7CiAgICAgfQog
CiAgICAgUGF0aCBwYXRoKCkgY29uc3QgeyByZXR1cm4gUGF0aDo6ZnJvbSh7bV9xdWFkQ3VydmVE
YXRhfSk7IH0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAgICAgc3Rk
OjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIApAQCAtMjI0OCwxMyArMjI1NSwxNCBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCisgICAgU3Ryb2tl
QmV6aWVyQ3VydmUoKSA9IGRlZmF1bHQ7CiAgICAgU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgQmV6
aWVyQ3VydmVEYXRhJiBiZXppZXJDdXJ2ZURhdGEpCiAgICAgICAgIDogbV9iZXppZXJDdXJ2ZURh
dGEoYmV6aWVyQ3VydmVEYXRhKQogICAgIHsKICAgICB9CiAKICAgICBQYXRoIHBhdGgoKSBjb25z
dCB7IHJldHVybiBQYXRoOjpmcm9tKHttX2JlemllckN1cnZlRGF0YX0pOyB9Ci0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKQEAgLTIyODUsNyArMjI5Myw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8U3Ryb2tlUGF0aD4gZGVjb2RlKERlY29k
ZXImKTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6
Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CkBAIC0yMzE3LDYgKzIzMjUsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCisgICAgU3Ryb2tlRWxs
aXBzZSgpID0gZGVmYXVsdDsKICAgICBTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKICAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICB7CkBAIC0yMzI0LDcgKzIzMzMsNyBAQCBw
dWJsaWM6CiAKICAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6
Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CkBAIC0yMzM5LDYgKzIzNDgsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCisgICAgQ2xlYXJSZWN0
KCkgPSBkZWZhdWx0OwogICAgIENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAg
ICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewpAQCAtMjM0Niw3ICsyMzU2LDcgQEAgcHVibGljOgog
CiAgICAgY29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAK
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlv
bmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0
OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQpAQCAtMjM2Myw3ICsyMzczLDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVl
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiB9OwogCiBjbGFzcyBBcHBseUZp
bGxQYXR0ZXJuIHsKQEAgLTIzNzIsNyArMjM4Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogfTsKIAogI2VuZGlmCkBAIC0yMzgzLDYgKzIzOTMsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAorICAgIEFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoKSA9IGRlZmF1bHQ7CiAgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBzY2FsZUZhY3RvcikKICAgICAgICAgOiBtX3NjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKQogICAg
IHsKQEAgLTIzOTAsNyArMjQwMSw3IEBAIHB1YmxpYzoKIAogICAgIGZsb2F0IHNjYWxlRmFjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQogCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGZsb2F0IG1fc2NhbGVGYWN0b3Ig
eyAxIH07CkBAIC0yNDAyLDcgKzI0MTMsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIGV4cGxpY2l0IEZsdXNoQ29udGV4dChGbHVzaElk
ZW50aWZpZXIgaWRlbnRpZmllcikKKyAgICBGbHVzaENvbnRleHQoKSA9IGRlZmF1bHQ7CisgICAg
Rmx1c2hDb250ZXh0KEZsdXNoSWRlbnRpZmllciBpZGVudGlmaWVyKQogICAgICAgICA6IG1faWRl
bnRpZmllcihpZGVudGlmaWVyKQogICAgIHsKICAgICB9CkBAIC0yNDEwLDUwICsyNDIyLDEyIEBA
IHB1YmxpYzoKICAgICBGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJu
IG1faWRlbnRpZmllcjsgfQogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWRl
bnRpZmllci5pc1ZhbGlkKCk7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKIAogcHJpdmF0ZToKICAgICBGbHVzaElkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogfTsK
IAotLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJlZmFjdG9yZWQgc28gdGhhdCB0aGUgY29tbWFu
ZCB0byAic3dpdGNoIHRvIHRoZSBuZXh0IGl0ZW0gYnVmZmVyIgotLy8gaXMgbm90IGl0c2VsZiBh
IGRpc3BsYXkgbGlzdCBpdGVtLgotY2xhc3MgTWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5
cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgTWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVm
ZmVyKEl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIpCi0gICAgICAgIDogbV9pZGVudGlm
aWVyKGlkZW50aWZpZXIpCi0gICAgewotICAgIH0KLQotICAgIEl0ZW1CdWZmZXJJZGVudGlmaWVy
IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLSAgICBib29sIGlz
VmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXIuaXNWYWxpZCgpOyB9Ci0KLXByaXZh
dGU6Ci0gICAgSXRlbUJ1ZmZlcklkZW50aWZpZXIgbV9pZGVudGlmaWVyOwotfTsKLQotY2xhc3Mg
TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6Ok1ldGFDb21tYW5k
Q2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcjsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgTWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlv
bkltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpZGVudGlmaWVyKQotICAg
ICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRl
bnRpZmllcjsgfQotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmll
ci5pc1ZhbGlkKCk7IH0KLQotcHJpdmF0ZToKLSAgICBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOwotfTsKLQogdXNpbmcgRGlzcGxheUxpc3RJdGVtID0gVmFyaWFudAog
ICAgIDwgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcgogICAgICwgQmVnaW5DbGlwVG9EcmF3aW5nQ29t
bWFuZHMKQEAgLTI0OTAsOCArMjQ2NCw2IEBAIHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IFZhcmlh
bnQKICAgICAsIEZpbGxSb3VuZGVkUmVjdAogICAgICwgRmx1c2hDb250ZXh0CiAgICAgLCBHZXRQ
aXhlbEJ1ZmZlcgotICAgICwgTWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVy
Ci0gICAgLCBNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXIKICAgICAsIFB1dFBpeGVsQnVmZmVy
CiAgICAgLCBSZXN0b3JlCiAgICAgLCBSb3RhdGUKQEAgLTI0OTksNyArMjQ3MSw2IEBAIHVzaW5n
IERpc3BsYXlMaXN0SXRlbSA9IFZhcmlhbnQKICAgICAsIFNjYWxlCiAgICAgLCBTZXRDVE0KICAg
ICAsIFNldElubGluZUZpbGxDb2xvcgotICAgICwgU2V0SW5saW5lRmlsbEdyYWRpZW50CiAgICAg
LCBTZXRJbmxpbmVTdHJva2VDb2xvcgogICAgICwgU2V0TGluZUNhcAogICAgICwgU2V0TGluZURh
c2gKQEAgLTI1NTMsNyArMjUyNCw2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlPiB7CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTY2FsZSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNl
dENUTSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RN
LAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRp
ZW50LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENv
bG9yLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tl
Q29sb3IsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdHJva2VUaGlj
a25lc3MsCkBAIC0yNTk3LDggKzI1NjcsNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZT4gewogICAgIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RmlsbFBhdGgsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpGaWxsRWxsaXBzZSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZs
dXNoQ29udGV4dCwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6Ok1ldGFDb21t
YW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlciwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlciwKICAgICBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyLAogICAgIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXIsCiAjaWYgRU5BQkxFKFZJREVPKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGY5YmYxOTFlZTYzODlm
MDFkOWI1YTIxMDI1M2NkMDBiMDMwMTg1NDAuLjU0NTYxNGQwYTEzOWY2NzI2OTJiNTU4YWI4ZDEx
Njc1ZThiMDU4ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAK
QEAgLTgyLDcgKzgyLDYgQEAgc3RhdGljIGJvb2wgY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFu
Z2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGEKICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSwKICAgICAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLAogICAgICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6RmlsbENvbG9yQ2hhbmdlLAotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bEdyYWRpZW50Q2hhbmdlLAogICAgIH07CiAKICAgICBpZiAoY2hhbmdlRmxhZ3MgIT0gKGNoYW5n
ZUZsYWdzICYgaW5saW5lU3RhdGVDaGFuZ2VGbGFncykpCkBAIC05NCwxMCArOTMsNiBAQCBzdGF0
aWMgYm9vbCBjb250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2UmIGNoYQogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLmZpbGxD
b2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGll
bnRDaGFuZ2UpCi0gICAgICAgICYmICghY2hhbmdlcy5tX3N0YXRlLmZpbGxHcmFkaWVudCB8fCAh
U2V0SW5saW5lRmlsbEdyYWRpZW50Ojppc0lubGluZSgqY2hhbmdlcy5tX3N0YXRlLmZpbGxHcmFk
aWVudCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMTI3LDkgKzEyMiw2IEBAIHZvaWQgUmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywKIAogICAgIGlmIChjaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkK
ICAgICAgICAgYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4oKmNoYW5nZXMubV9zdGF0ZS5maWxs
Q29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKQotICAgICAgICBh
cHBlbmQ8U2V0SW5saW5lRmlsbEdyYWRpZW50PigqY2hhbmdlcy5tX3N0YXRlLmZpbGxHcmFkaWVu
dCwgY2hhbmdlcy5tX3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKIH0KIAogYm9v
bCBSZWNvcmRlcjo6Y2FuQXBwZW5kSXRlbU9mVHlwZShJdGVtVHlwZSB0eXBlKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggYTVhZDM2NmQ0ZGNkOTlkODQz
ZTBiYmEwNjk1ZWQ3ZDI0NTM3MmJiZS4uMDBiZWRmZWM4MzllYWQxNzkyMTgxMjYxYzZhMWQyNzUw
NDI2ZDdmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC0xMjIs
NyArMTIyLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0
IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9u
dFNtb290aGluZ01vZGUpIGZpbmFsOwotICAgIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChj
b25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9u
dFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBG
b250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSos
IHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290
aGluZ01vZGUpIGZpbmFsOwogCiAgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1h
Z2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKICAgICB2b2lkIGRy
YXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZXBsYXllci5jcHAKaW5kZXggY2QzZDEwZDI3NzU1NTllOTkzODUwZDQyYzUyMTJkYzc3NTUy
NDkyMS4uNThjMWMwNGY2M2NlMTQ2MjA5YzBkODdhZDY2MzAwNjQwZWRhMzFjNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVwbGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcApAQCAtMjI2LDEzICsyMjYsNiBAQCBS
ZXBsYXlSZXN1bHQgUmVwbGF5ZXI6OnJlcGxheShjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlw
LCBib29sIHRyYWNrUmVwbGF5TGlzdAogCiAgICAgICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5
TGlzdHMsIHN0cmVhbSA8PCAiYXBwbHlpbmcgIiA8PCBpKysgPDwgIiAiIDw8IGl0ZW0pOwogCi0g
ICAgICAgIGlmIChpdGVtLmlzPE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZl
cj4oKSkgewotICAgICAgICAgICAgcmVzdWx0Lm51bWJlck9mQnl0ZXNSZWFkICs9IGl0ZW1TaXpl
SW5CdWZmZXI7Ci0gICAgICAgICAgICByZXN1bHQucmVhc29uRm9yU3RvcHBpbmcgPSBTdG9wUmVw
bGF5UmVhc29uOjpDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyOwotICAgICAgICAgICAgcmVz
dWx0Lm5leHREZXN0aW5hdGlvbkltYWdlQnVmZmVyID0gaXRlbS5nZXQ8TWV0YUNvbW1hbmRDaGFu
Z2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyPigpLmlkZW50aWZpZXIoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0KICAgICAgICAgaWYgKGF1dG8gW3JlYXNvbkZvclN0b3BwaW5nLCBt
aXNzaW5nQ2FjaGVkUmVzb3VyY2VJZGVudGlmaWVyXSA9IGFwcGx5SXRlbShpdGVtKTsgcmVhc29u
Rm9yU3RvcHBpbmcpIHsKICAgICAgICAgICAgIHJlc3VsdC5yZWFzb25Gb3JTdG9wcGluZyA9ICpy
ZWFzb25Gb3JTdG9wcGluZzsKICAgICAgICAgICAgIHJlc3VsdC5taXNzaW5nQ2FjaGVkUmVzb3Vy
Y2VJZGVudGlmaWVyID0gV1RGTW92ZShtaXNzaW5nQ2FjaGVkUmVzb3VyY2VJZGVudGlmaWVyKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCAyMzViODIyYTc1Mjc0M2IxN2U3
ZTMyYTk4YTgzZTZkYjYzOTk4NThlLi4wNWM2MjYzMTk5MjQxY2UzZDI0MDNkMzMyMGVmZDBlM2Ix
NGQwMmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0zMTEyLDExICsz
MTEyLDYgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzZXRFbGVtZW50VHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkoRWxlbWVudCYgZWxlbWVudCwKICAgICBpZiAoIWVsZW1lbnQucmVuZGVy
ZXIoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9Owog
Ci0gICAgaWYgKGlzPEhUTUxDYW52YXNFbGVtZW50PihlbGVtZW50KSkgewotICAgICAgICBkb3du
Y2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oZWxlbWVudCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkoaXNUcmFja2luZ1JlcGxheSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCiAgICAg
aWYgKCFlbGVtZW50LnJlbmRlcmVyKCktPmhhc0xheWVyKCkpCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIApAQCAtMzE0Myw5ICszMTM4LDYgQEAgRXhj
ZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6OmRpc3BsYXlMaXN0Rm9yRWxlbWVudChFbGVtZW50
JiBlbGVtZW50LCB1bnNpZ25lZAogICAgIGlmIChmbGFncyAmIERJU1BMQVlfTElTVF9JTkNMVURF
U19QTEFURk9STV9PUEVSQVRJT05TKQogICAgICAgICBkaXNwbGF5TGlzdEZsYWdzIHw9IERpc3Bs
YXlMaXN0OjpBc1RleHRGbGFnOjpJbmNsdWRlc1BsYXRmb3JtT3BlcmF0aW9uczsKIAotICAgIGlm
IChpczxIVE1MQ2FudmFzRWxlbWVudD4oZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBkb3duY2Fz
dDxIVE1MQ2FudmFzRWxlbWVudD4oZWxlbWVudCkuZGlzcGxheUxpc3RBc1RleHQoZGlzcGxheUxp
c3RGbGFncyk7Ci0KICAgICBpZiAoIWVsZW1lbnQucmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSkKICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCkBAIC0zMTcx
LDkgKzMxNjMsNiBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFsczo6cmVwbGF5RGlzcGxh
eUxpc3RGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIHVucwogICAgIGlmIChmbGFncyAmIERJ
U1BMQVlfTElTVF9JTkNMVURFU19QTEFURk9STV9PUEVSQVRJT05TKQogICAgICAgICBkaXNwbGF5
TGlzdEZsYWdzIHw9IERpc3BsYXlMaXN0OjpBc1RleHRGbGFnOjpJbmNsdWRlc1BsYXRmb3JtT3Bl
cmF0aW9uczsKIAotICAgIGlmIChpczxIVE1MQ2FudmFzRWxlbWVudD4oZWxlbWVudCkpCi0gICAg
ICAgIHJldHVybiBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oZWxlbWVudCkucmVwbGF5RGlz
cGxheUxpc3RBc1RleHQoZGlzcGxheUxpc3RGbGFncyk7Ci0KICAgICBpZiAoIWVsZW1lbnQucmVu
ZGVyZXIoKS0+aGFzTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRB
Y2Nlc3NFcnJvciB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2Vz
LWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3QKaW5kZXggNzRmZmEzNTJlOWRlMDBjYjg2NmY5MDJjNmVhYmRlYWFkYTY5Y2Y4Ni4u
ZWUxYThmNDg0MTQxOTllYjJmN2JiZDgyNWVmNDJlMTU1MjNlYjJiNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9X
ZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMjAsNiArMjAsNyBAQCAk
KEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL21vZGVscy5weQogJChKQVZBU0NS
SVBUQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS94eGQucGwKICQoUFJPSkVDVF9ESVIpL0dQVVBy
b2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJ
UikvR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dC5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5tZXNz
YWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21hYy9jb20u
YXBwbGUuV2ViS2l0LkdQVVByb2Nlc3Muc2IuaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
RGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRT
b3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IGY0ZjhhYzI1N2QxNTVlMWZlNmY2MTY3YWU0
M2M5Y2U1NzVhMWViZTkuLmYwYTYyMGMyMDc2MjZmMTVmNjMxNjY0MmRhOTIzNDBlN2U5ZWI2ZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxp
c3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApA
QCAtMjA5LDYgKzIwOSw5IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMTWVzc2FnZXNSZXBsCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eU1lc3NhZ2VzLmgKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHlNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlR3JhcGhpY3NDb250ZXh0TWVzc2FnZXMuaAorJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlR3JhcGhpY3NDb250
ZXh0TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZUdyYXBoaWNzQ29udGV4dE1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlRGVjb2Rl
ckFWRk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZURlY29kZXJBVkZNYW5hZ2VyTWVzc2FnZXMu
aAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1h
Z2VEZWNvZGVyQVZGTWFuYWdlck1lc3NhZ2VzUmVwbGllcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKaW5kZXggYzMxNDc0NmMyY2U4MDVmZmRiOTkwMjkxZGI4NjdiMjlmZDJiZWExMi4uZTU2
N2MzNjM3MjNkMTc5OGY4NzYzNWZjZTg0M2FjZDlhY2NjZWEwMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNv
dXJjZXMubWFrZQpAQCAtMjQ4LDYgKzI0OCw3IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogCVBs
dWdpblByb2Nlc3MvUGx1Z2luUHJvY2VzcyBcCiAJR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzIFwKIAlHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQg
XAorCUdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0IFwKIAlHUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMIFwKIAlHUFVQcm9jZXNzL3dlYnJ0
Yy9MaWJXZWJSVENDb2RlY3NQcm94eSBcCiAJR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxl
QnVmZmVyRGlzcGxheUxheWVyTWFuYWdlciBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5kZXggODVjYTg4ZjdhOTgy
NDYyNjJjMzFhN2ZiNDE3Nzk5NTA1M2U0OWNlZS4uNjY5OTkwYmVjOTc4NjY4YmVmYzNjYmM5Mzcw
YTgyNWJjZDcxNTJlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtNDc0LDEwICs0NzQsMTAgQEAgUmVtb3Rl
SW1hZ2VEZWNvZGVyQVZGUHJveHkmIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmltYWdlRGVj
b2RlckFWRlByb3h5KCkKIH0KICNlbmRpZgogCi12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9u
UGFyYW1ldGVycyYmIGNyZWF0aW9uUGFyYW1ldGVycykKK3ZvaWQgR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3Jl
YXRpb25QYXJhbWV0ZXJzJiYgY3JlYXRpb25QYXJhbWV0ZXJzLCBJUEM6OlN0cmVhbUNvbm5lY3Rp
b25CdWZmZXImJiBzdHJlYW1CdWZmZXIpCiB7CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRNYXAuZW5zdXJlKGNyZWF0aW9uUGFyYW1ldGVycy5pZGVudGlmaWVy
LCBbJl0oKSB7Ci0gICAgICAgIHJldHVybiBJUEM6OlNjb3BlZEFjdGl2ZU1lc3NhZ2VSZWNlaXZl
UXVldWUgeyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoY3Jl
YXRpb25QYXJhbWV0ZXJzKSkgfTsKKyAgICAgICAgcmV0dXJuIElQQzo6U2NvcGVkQWN0aXZlTWVz
c2FnZVJlY2VpdmVRdWV1ZSB7IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgqdGhpcywg
V1RGTW92ZShjcmVhdGlvblBhcmFtZXRlcnMpLCBXVEZNb3ZlKHN0cmVhbUJ1ZmZlcikpIH07CiAg
ICAgfSk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oCmluZGV4IDA1YTUwNWZlZTMyOTM3OGIxMzBhOWM5OTczMjYwNmJlMjBiNDg3
YzguLjgwZDIxZGVkZWJlZWFhMTNiZDA4MzU1NWY2Y2ZjYzZjMTFmMmI3ZGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApA
QCAtMTc4LDcgKzE3OCw3IEBAIHByaXZhdGU6CiAgICAgUmVtb3RlTWVkaWFSZWNvcmRlck1hbmFn
ZXImIG1lZGlhUmVjb3JkZXJNYW5hZ2VyKCk7CiAjZW5kaWYKIAotICAgIHZvaWQgY3JlYXRlUmVu
ZGVyaW5nQmFja2VuZChSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzJiYp
OworICAgIHZvaWQgY3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
Q3JlYXRpb25QYXJhbWV0ZXJzJiYsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmKTsKICAg
ICB2b2lkIHJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KTsKIAogI2lmIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXgg
ZmU0OGNhMjBiYTA4OTVhYjhhZjc0ZTk2MjY3NGVmMWIzZGRlODdmZC4uYzFiZjgwMTljZWFiNDFm
NzlhNmY1YWRlZTFmYTg2MTZlMjA1ZWIwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4K
QEAgLTIzLDcgKzIzLDcgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKIG1lc3NhZ2VzIC0+
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgV2FudHNEaXNwYXRjaE1lc3NhZ2UgewotICAgIHZv
aWQgQ3JlYXRlUmVuZGVyaW5nQmFja2VuZChzdHJ1Y3QgV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzIGNyZWF0aW9uUGFyYW1ldGVycykKKyAgICB2b2lkIENy
ZWF0ZVJlbmRlcmluZ0JhY2tlbmQoc3RydWN0IFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZENyZWF0aW9uUGFyYW1ldGVycyBjcmVhdGlvblBhcmFtZXRlcnMsIElQQzo6U3RyZWFtQ29ubmVj
dGlvbkJ1ZmZlciBzdHJlYW1CdWZmZXIpCiAgICAgdm9pZCBSZWxlYXNlUmVuZGVyaW5nQmFja2Vu
ZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKQogI2lmIEVOQUJMRShXRUJHTCkKICAgICB2b2lkIENyZWF0ZUdyYXBoaWNzQ29udGV4
dEdMKHN0cnVjdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRl
cywgV2ViS2l0OjpHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIgZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyLCBXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXIgc3RyZWFtKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2NvY29hL0dQVVByb2Nlc3NDb2NvYS5t
bSBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9jb2NvYS9HUFVQcm9jZXNzQ29jb2EubW0KaW5k
ZXggMmY5Y2ExODdmMzAyZTcyNTNjMDZmOTNkNDY2ZjgxM2RlODcwMzNlMy4uOWE5MWFkMmU3ODY1
NWY2OGFiNmFmZjI1MjNiNDhhYTBiMzRhZWVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2NvY29hL0dQVVByb2Nlc3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvY29jb2EvR1BVUHJvY2Vzc0NvY29hLm1tCkBAIC01MSwxMCArNTEsNyBAQCBSZXRh
aW5QdHI8TlNEaWN0aW9uYXJ5PiBHUFVQcm9jZXNzOjphZGRpdGlvbmFsU3RhdGVGb3JEaWFnbm9z
dGljUmVwb3J0KCkgY29uc3QKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAg
ICAgYXV0byBzdGF0ZUluZm8gPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10g
aW5pdFdpdGhDYXBhY2l0eTpiYWNrZW5kTWFwLnNpemUoKV0pOwotICAgICAgICAgICAgZm9yIChh
dXRvJiBpZGVudGlmaWVyQW5kQmFja2VuZCA6IGJhY2tlbmRNYXApIHsKLSAgICAgICAgICAgICAg
ICBhdXRvJiBbYmFja2VuZElkZW50aWZpZXIsIGJhY2tlbmRdID0gaWRlbnRpZmllckFuZEJhY2tl
bmQ7Ci0gICAgICAgICAgICAgICAgW3N0YXRlSW5mbyBzZXRPYmplY3Q6QChuYW1lKGJhY2tlbmQt
Pmxhc3RLbm93blN0YXRlKCkpKSBmb3JLZXk6YmFja2VuZElkZW50aWZpZXIubG9nZ2luZ1N0cmlu
ZygpXTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc29tZSBkaWFn
bm9zdGljIHN0YXRlLgogICAgICAgICAgICAgW3dlYlByb2Nlc3NDb25uZWN0aW9uSW5mbyBzZXRP
YmplY3Q6c3RhdGVJbmZvLmdldCgpIGZvcktleTp3ZWJQcm9jZXNzSWRlbnRpZmllci5sb2dnaW5n
U3RyaW5nKCldOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9EaXNwbGF5TGlzdFJlYWRlckhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGZmMzg4YTkxNzljMmNhNzMwOTZiZDkyNTViOTdiNmRi
ZTkwMTMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9EaXNwbGF5TGlzdFJlYWRlckhhbmRsZS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVhZGVySGFuZGxlLmgiCi0KLSNpbmNs
dWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotc3RkOjpvcHRpb25hbDxzaXplX3Q+IERpc3BsYXlMaXN0
UmVhZGVySGFuZGxlOjphZHZhbmNlKHNpemVfdCBhbW91bnQpCi17Ci0gICAgYXV0byBwcmV2aW91
c1VucmVhZEJ5dGVzID0gaGVhZGVyKCkudW5yZWFkQnl0ZXMuZXhjaGFuZ2VTdWIoYW1vdW50KTsK
LSAgICBpZiAoVU5MSUtFTFkocHJldmlvdXNVbnJlYWRCeXRlcyA8IGFtb3VudCkpCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHByZXZpb3VzVW5yZWFkQnl0ZXMgLSBh
bW91bnQ7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q+IERp
c3BsYXlMaXN0UmVhZGVySGFuZGxlOjpkaXNwbGF5TGlzdEZvclJlYWRpbmcoc2l6ZV90IG9mZnNl
dCwgc2l6ZV90IGNhcGFjaXR5LCBEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQm
IGNsaWVudCkgY29uc3QKLXsKLSAgICBhdXRvIGNoZWNrZWRFeHRlbnQgPSBjaGVja2VkU3VtPHNp
emVfdD4ob2Zmc2V0LCBjYXBhY2l0eSk7Ci0gICAgaWYgKFVOTElLRUxZKGNoZWNrZWRFeHRlbnQu
aGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRFeHRlbnQgPiBzaGFyZWRNZW1vcnkoKS5zaXplKCkp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZGlzcGxheUxpc3QgPSBtYWtl
VW5pcXVlPERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdD4oRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJI
YW5kbGVzIHt7IGlkZW50aWZpZXIoKSwgZGF0YSgpICsgb2Zmc2V0LCBjYXBhY2l0eSB9fSk7Ci0g
ICAgZGlzcGxheUxpc3QtPnNldEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50KCZjbGllbnQpOwotICAg
IHJldHVybiBkaXNwbGF5TGlzdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvRGlzcGxheUxpc3RSZWFkZXJI
YW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9EaXNwbGF5TGlzdFJl
YWRlckhhbmRsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODViMzhkN2U5OTI5
Y2RjZDU0ZjA1ZDNkMWY1MGMxMWJkNTZiODczLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9EaXNw
bGF5TGlzdFJlYWRlckhhbmRsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU2hhcmVkRGlzcGxheUxpc3RIYW5k
bGUuaCIKLSNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgRGlzcGxheUxpc3RSZWFkZXJIYW5k
bGUgOiBwdWJsaWMgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKERpc3BsYXlMaXN0UmVhZGVySGFuZGxlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxEaXNwbGF5TGlzdFJlYWRlckhhbmRsZT4gY3Jl
YXRlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVy
LCBSZWY8U2hhcmVkTWVtb3J5PiYmIHNoYXJlZE1lbW9yeSkKLSAgICB7Ci0gICAgICAgIGlmIChz
aGFyZWRNZW1vcnktPnNpemUoKSA8PSBoZWFkZXJTaXplKCkpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaXNwbGF5TGlzdFJlYWRlckhh
bmRsZShpZGVudGlmaWVyLCBXVEZNb3ZlKHNoYXJlZE1lbW9yeSkpKTsKLSAgICB9Ci0KLSAgICBz
dGQ6Om9wdGlvbmFsPHNpemVfdD4gYWR2YW5jZShzaXplX3QgYW1vdW50KTsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0PiBkaXNwbGF5TGlzdEZv
clJlYWRpbmcoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGNhcGFjaXR5LCBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQmKSBjb25zdDsKLQotICAgIHZvaWQgc3RhcnRX
YWl0aW5nKCkKLSAgICB7Ci0gICAgICAgIGhlYWRlcigpLndhaXRpbmdTdGF0dXMuc3RvcmUoc3Rh
dGljX2Nhc3Q8U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OldhaXRpbmdTdGF0dXNTdG9yYWdlVHlw
ZT4oU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OldhaXRpbmdTdGF0dXM6OldhaXRpbmcpKTsKLSAg
ICB9Ci0KLSAgICBlbnVtIGNsYXNzIFN0b3BXYWl0aW5nRmFpbHVyZVJlYXNvbiA6IHVpbnQ4X3Qg
eyBJbnZhbGlkV2FpdGluZ1N0YXR1cyB9OwotICAgIEV4cGVjdGVkPHN0ZDo6b3B0aW9uYWw8U2hh
cmVkRGlzcGxheUxpc3RIYW5kbGU6OlJlc3VtZVJlYWRpbmdJbmZvcm1hdGlvbj4sIFN0b3BXYWl0
aW5nRmFpbHVyZVJlYXNvbj4gc3RvcFdhaXRpbmcoKQotICAgIHsKLSAgICAgICAgYXV0byYgaGVh
ZGVyID0gdGhpcy0+aGVhZGVyKCk7Ci0gICAgICAgIGF1dG8gcHJldmlvdXNTdGF0dXMgPSBoZWFk
ZXIud2FpdGluZ1N0YXR1cy5leGNoYW5nZShzdGF0aWNfY2FzdDxTaGFyZWREaXNwbGF5TGlzdEhh
bmRsZTo6V2FpdGluZ1N0YXR1c1N0b3JhZ2VUeXBlPihTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6
V2FpdGluZ1N0YXR1czo6Tm90V2FpdGluZykpOwotICAgICAgICBpZiAoIWlzVmFsaWRFbnVtPFNo
YXJlZERpc3BsYXlMaXN0SGFuZGxlOjpXYWl0aW5nU3RhdHVzPihwcmV2aW91c1N0YXR1cykpCi0g
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcFdhaXRpbmdGYWlsdXJlUmVhc29u
OjpJbnZhbGlkV2FpdGluZ1N0YXR1cyk7Ci0KLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PFNoYXJl
ZERpc3BsYXlMaXN0SGFuZGxlOjpXYWl0aW5nU3RhdHVzPihwcmV2aW91c1N0YXR1cykgPT0gU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGU6OldhaXRpbmdTdGF0dXM6OlJlc3VtaW5nKQotICAgICAgICAg
ICAgcmV0dXJuIHsgaGVhZGVyLnJlc3VtZVJlYWRpbmdJbmZvIH07Ci0KLSAgICAgICAgcmV0dXJu
IHsgc3RkOjpudWxsb3B0IH07Ci0gICAgfQotCi1wcml2YXRlOgotICAgIERpc3BsYXlMaXN0UmVh
ZGVySGFuZGxlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVu
dGlmaWVyLCBSZWY8U2hhcmVkTWVtb3J5PiYmIHNoYXJlZE1lbW9yeSkKLSAgICAgICAgOiBTaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZShpZGVudGlmaWVyLCBXVEZNb3ZlKHNoYXJlZE1lbW9yeSkpCi0g
ICAgewotICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jZTdhYWU3M2YxOWIxODJlMWNjOGZjZjJjOTYzY2RkMTY2NGI3Mzky
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTAsMCArMSw0MjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlR3JhcGhpY3NDb250ZXh0LmgiCisK
K25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlbW90ZUdy
YXBoaWNzQ29udGV4dDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0KEltYWdlQnVmZmVyJiBpbWFnZUJ1
ZmZlciwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgcmVuZGVyaW5nQmFja2VuZCkKKyAgICA6IG1f
aW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpCisgICAgLCBtX3JlbmRlcmluZ0JhY2tlbmQocmVuZGVy
aW5nQmFja2VuZCkKK3sKK30KKworUmVtb3RlUmVzb3VyY2VDYWNoZSYgUmVtb3RlR3JhcGhpY3ND
b250ZXh0OjpyZXNvdXJjZUNhY2hlKCkKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5k
LT5yZW1vdGVSZXNvdXJjZUNhY2hlKCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0OjpkcmF3aW5nQ29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fbWFza0ltYWdl
QnVmZmVyID8gbV9tYXNrSW1hZ2VCdWZmZXItPmNvbnRleHQoKSA6IG1faW1hZ2VCdWZmZXItPmNv
bnRleHQoKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OnNhdmUoRGlzcGxheUxp
c3Q6OlNhdmUmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkoZHJhd2luZ0NvbnRleHQoKSk7Cit9
CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKERpc3BsYXlMaXN0OjpSZXN0
b3JlJiYgaXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KGRyYXdpbmdDb250ZXh0KCkpOworfQorCit2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKERpc3BsYXlMaXN0OjpUcmFuc2xh
dGUmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkoZHJhd2luZ0NvbnRleHQoKSk7Cit9CisKK3Zv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoRGlzcGxheUxpc3Q6OlJvdGF0ZSYmIGl0
ZW0pCit7CisgICAgaXRlbS5hcHBseShkcmF3aW5nQ29udGV4dCgpKTsKK30KKwordm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHQ6OnNjYWxlKERpc3BsYXlMaXN0OjpTY2FsZSYmIGl0ZW0pCit7Cisg
ICAgaXRlbS5hcHBseShkcmF3aW5nQ29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHQ6OnNldENUTShEaXNwbGF5TGlzdDo6U2V0Q1RNJiYgaXRlbSkKK3sKKyAgICBpdGVt
LmFwcGx5KGRyYXdpbmdDb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dDo6Y29uY2F0ZW5hdGVDVE0oRGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNJiYgaXRlbSkKK3sK
KyAgICBpdGVtLmFwcGx5KGRyYXdpbmdDb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBo
aWNzQ29udGV4dDo6c2V0SW5saW5lRmlsbENvbG9yKERpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxs
Q29sb3ImJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkoZHJhd2luZ0NvbnRleHQoKSk7Cit9CisK
K3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpzZXRJbmxpbmVTdHJva2VDb2xvcihEaXNwbGF5
TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3ImJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkoZHJh
d2luZ0NvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJv
a2VUaGlja25lc3MoRGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzcyYmIGl0ZW0pCit7Cisg
ICAgaXRlbS5hcHBseShkcmF3aW5nQ29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHQ6OnNldFN0YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSYmIGl0ZW0pCit7CisgICAg
YXV0byBzdHJva2VQYXR0ZXJuSW1hZ2VJZGVudGlmaWVyID0gaXRlbS5zdHJva2VQYXR0ZXJuSW1h
Z2VJZGVudGlmaWVyKCk7CisgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBzdHJva2VQYXR0ZXJuSW1h
Z2U7CisgICAgaWYgKHN0cm9rZVBhdHRlcm5JbWFnZUlkZW50aWZpZXIpCisgICAgICAgIHN0cm9r
ZVBhdHRlcm5JbWFnZSA9IHJlc291cmNlQ2FjaGUoKS5jYWNoZWROYXRpdmVJbWFnZShzdHJva2VQ
YXR0ZXJuSW1hZ2VJZGVudGlmaWVyKTsKKworICAgIGF1dG8gZmlsbFBhdHRlcm5JbWFnZUlkZW50
aWZpZXIgPSBpdGVtLmZpbGxQYXR0ZXJuSW1hZ2VJZGVudGlmaWVyKCk7CisgICAgUmVmUHRyPE5h
dGl2ZUltYWdlPiBmaWxsUGF0dGVybkltYWdlOworICAgIGlmIChmaWxsUGF0dGVybkltYWdlSWRl
bnRpZmllcikKKyAgICAgICAgZmlsbFBhdHRlcm5JbWFnZSA9IHJlc291cmNlQ2FjaGUoKS5jYWNo
ZWROYXRpdmVJbWFnZShmaWxsUGF0dGVybkltYWdlSWRlbnRpZmllcik7CisKKyAgICBpdGVtLmFw
cGx5KGRyYXdpbmdDb250ZXh0KCksIHN0cm9rZVBhdHRlcm5JbWFnZS5nZXQoKSwgZmlsbFBhdHRl
cm5JbWFnZS5nZXQoKSk7CisKKyAgICBpZiAoc3Ryb2tlUGF0dGVybkltYWdlKQorICAgICAgICBy
ZXNvdXJjZUNhY2hlKCkucmVjb3JkUmVzb3VyY2VVc2Uoc3Ryb2tlUGF0dGVybkltYWdlSWRlbnRp
Zmllcik7CisKKyAgICBpZiAoZmlsbFBhdHRlcm5JbWFnZSkKKyAgICAgICAgcmVzb3VyY2VDYWNo
ZSgpLnJlY29yZFJlc291cmNlVXNlKGZpbGxQYXR0ZXJuSW1hZ2VJZGVudGlmaWVyKTsKK30KKwor
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoRGlzcGxheUxpc3Q6OlNldExp
bmVDYXAmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkoZHJhd2luZ0NvbnRleHQoKSk7Cit9CisK
K3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChEaXNwbGF5TGlzdDo6U2V0
TGluZURhc2gmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkoZHJhd2luZ0NvbnRleHQoKSk7Cit9
CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihEaXNwbGF5TGlzdDo6
U2V0TGluZUpvaW4mJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkoZHJhd2luZ0NvbnRleHQoKSk7
Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KERpc3BsYXlM
aXN0OjpTZXRNaXRlckxpbWl0JiYgaXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KGRyYXdpbmdDb250
ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3coRGlz
cGxheUxpc3Q6OkNsZWFyU2hhZG93JiYgaXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KGRyYXdpbmdD
b250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Y2xpcChEaXNwbGF5
TGlzdDo6Q2xpcCYmIGl0ZW0pCit7CisgICAgaXRlbS5hcHBseShkcmF3aW5nQ29udGV4dCgpKTsK
K30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoRGlzcGxheUxpc3Q6OkNs
aXBPdXQmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkoZHJhd2luZ0NvbnRleHQoKSk7Cit9CisK
K3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihEaXNwbGF5TGlz
dDo6Q2xpcFRvSW1hZ2VCdWZmZXImJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkoZHJhd2luZ0Nv
bnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0VG9QYXRo
KERpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoJiYgaXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KGRy
YXdpbmdDb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Y2xpcFBh
dGgoRGlzcGxheUxpc3Q6OkNsaXBQYXRoJiYgaXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KGRyYXdp
bmdDb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6YmVnaW5DbGlw
VG9EcmF3aW5nQ29tbWFuZHMoRGlzcGxheUxpc3Q6OkJlZ2luQ2xpcFRvRHJhd2luZ0NvbW1hbmRz
JiYgaXRlbSkKK3sKKyAgICBtX21hc2tJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGl0ZW0uZGVzdGluYXRpb24oKS5zaXplKCksIGl0ZW0uY29sb3JTcGFj
ZSgpLCBkcmF3aW5nQ29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6
OmVuZENsaXBUb0RyYXdpbmdDb21tYW5kcyhEaXNwbGF5TGlzdDo6RW5kQ2xpcFRvRHJhd2luZ0Nv
bW1hbmRzJiYgaXRlbSkKK3sKKyAgICBhdXRvIG1hc2tJbWFnZUJ1ZmZlciA9IHN0ZDo6ZXhjaGFu
Z2UobV9tYXNrSW1hZ2VCdWZmZXIsIHsgfSk7CisgICAgaWYgKCFtYXNrSW1hZ2VCdWZmZXIpIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBkcmF3aW5nQ29udGV4dCgpLmNsaXBUb0ltYWdlQnVmZmVyKCptYXNrSW1hZ2VCdWZmZXIs
IGl0ZW0uZGVzdGluYXRpb24oKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0Ojpk
cmF3R2x5cGhzKERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzJiYgaXRlbSkKK3sKKyAgICBhdXRvIGZv
bnRJZGVudGlmaWVyID0gaXRlbS5mb250SWRlbnRpZmllcigpOworICAgIFJlZlB0ciBmb250ID0g
cmVzb3VyY2VDYWNoZSgpLmNhY2hlZEZvbnQoZm9udElkZW50aWZpZXIpOworICAgIGlmICghZm9u
dCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGl0ZW0uYXBwbHkoZHJhd2luZ0NvbnRleHQoKSwgKmZvbnQpOworICAgIHJlc291
cmNlQ2FjaGUoKS5yZWNvcmRSZXNvdXJjZVVzZShmb250SWRlbnRpZmllcik7Cit9CisKK3ZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoRGlzcGxheUxpc3Q6OkRyYXdJ
bWFnZUJ1ZmZlciYmIGl0ZW0pCit7CisgICAgYXV0byBpbWFnZUJ1ZmZlcklkZW50aWZpZXIgPSBp
dGVtLmltYWdlQnVmZmVySWRlbnRpZmllcigpOworICAgIFJlZlB0ciBpbWFnZUJ1ZmZlciA9IHJl
c291cmNlQ2FjaGUoKS5jYWNoZWRJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOwor
ICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpdGVtLmFwcGx5KGRyYXdpbmdDb250ZXh0KCks
ICppbWFnZUJ1ZmZlcik7CisgICAgcmVzb3VyY2VDYWNoZSgpLnJlY29yZFJlc291cmNlVXNlKGlt
YWdlQnVmZmVySWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TmF0aXZlSW1hZ2UoRGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZSYmIGl0ZW0pCit7Cisg
ICAgYXV0byBpbWFnZUlkZW50aWZpZXIgPSBpdGVtLmltYWdlSWRlbnRpZmllcigpOworICAgIFJl
ZlB0ciBpbWFnZSA9IHJlc291cmNlQ2FjaGUoKS5jYWNoZWROYXRpdmVJbWFnZShpbWFnZUlkZW50
aWZpZXIpOworICAgIGlmICghaW1hZ2UpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpdGVtLmFwcGx5KGRyYXdpbmdDb250ZXh0
KCksICppbWFnZSk7CisgICAgcmVzb3VyY2VDYWNoZSgpLnJlY29yZFJlc291cmNlVXNlKGltYWdl
SWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVy
bihEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm4mJiBpdGVtKQoreworICAgIGF1dG8gaW1hZ2VJZGVu
dGlmaWVyID0gaXRlbS5pbWFnZUlkZW50aWZpZXIoKTsKKyAgICBSZWZQdHIgaW1hZ2UgPSByZXNv
dXJjZUNhY2hlKCkuY2FjaGVkTmF0aXZlSW1hZ2UoaW1hZ2VJZGVudGlmaWVyKTsKKyAgICBpZiAo
IWltYWdlKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaXRlbS5hcHBseShkcmF3aW5nQ29udGV4dCgpLCAqaW1hZ2UpOworICAg
IHJlc291cmNlQ2FjaGUoKS5yZWNvcmRSZXNvdXJjZVVzZShpbWFnZUlkZW50aWZpZXIpOworfQor
Cit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihEaXNw
bGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllciYmIGl0ZW0pCit7CisgICAgaXRlbS5hcHBs
eShkcmF3aW5nQ29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmVu
ZFRyYW5zcGFyZW5jeUxheWVyKERpc3BsYXlMaXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllciYmIGl0
ZW0pCit7CisgICAgaXRlbS5hcHBseShkcmF3aW5nQ29udGV4dCgpKTsKK30KKwordm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KERpc3BsYXlMaXN0OjpEcmF3UmVjdCYmIGl0ZW0p
Cit7CisgICAgaXRlbS5hcHBseShkcmF3aW5nQ29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKERpc3BsYXlMaXN0OjpEcmF3TGluZSYmIGl0ZW0pCit7
CisgICAgaXRlbS5hcHBseShkcmF3aW5nQ29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoRGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRl
eHQmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkoZHJhd2luZ0NvbnRleHQoKSk7Cit9CisKK3Zv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKERpc3Bs
YXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyJiYgaXRlbSkKK3sKKyAgICBpdGVtLmFw
cGx5KGRyYXdpbmdDb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6
ZHJhd0VsbGlwc2UoRGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlJiYgaXRlbSkKK3sKKyAgICBpdGVt
LmFwcGx5KGRyYXdpbmdDb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dDo6ZHJhd1BhdGgoRGlzcGxheUxpc3Q6OkRyYXdQYXRoJiYgaXRlbSkKK3sKKyAgICBpdGVtLmFw
cGx5KGRyYXdpbmdDb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ZvY3VzUmluZ1BhdGgoRGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoJiYgaXRlbSkK
K3sKKyAgICBpdGVtLmFwcGx5KGRyYXdpbmdDb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZ1JlY3RzKERpc3BsYXlMaXN0OjpEcmF3Rm9jdXNS
aW5nUmVjdHMmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkoZHJhd2luZ0NvbnRleHQoKSk7Cit9
CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChEaXNwbGF5TGlzdDo6Rmls
bFJlY3QmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkoZHJhd2luZ0NvbnRleHQoKSk7Cit9CisK
K3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhDb2xvcihEaXNwbGF5TGlz
dDo6RmlsbFJlY3RXaXRoQ29sb3ImJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkoZHJhd2luZ0Nv
bnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhH
cmFkaWVudChEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQmJiBpdGVtKQoreworICAg
IGl0ZW0uYXBwbHkoZHJhd2luZ0NvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0OjpmaWxsQ29tcG9zaXRlZFJlY3QoRGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVj
dCYmIGl0ZW0pCit7CisgICAgaXRlbS5hcHBseShkcmF3aW5nQ29udGV4dCgpKTsKK30KKwordm9p
ZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChEaXNwbGF5TGlzdDo6Rmls
bFJvdW5kZWRSZWN0JiYgaXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KGRyYXdpbmdDb250ZXh0KCkp
OworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUoRGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlJiYgaXRlbSkKK3sKKyAgICBp
dGVtLmFwcGx5KGRyYXdpbmdDb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dDo6ZmlsbExpbmUoRGlzcGxheUxpc3Q6OkZpbGxMaW5lJiYgaXRlbSkKK3sKKyAgICBpdGVt
LmFwcGx5KGRyYXdpbmdDb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dDo6ZmlsbEFyYyhEaXNwbGF5TGlzdDo6RmlsbEFyYyYmIGl0ZW0pCit7CisgICAgaXRlbS5hcHBs
eShkcmF3aW5nQ29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmZp
bGxRdWFkQ3VydmUoRGlzcGxheUxpc3Q6OkZpbGxRdWFkQ3VydmUmJiBpdGVtKQoreworICAgIGl0
ZW0uYXBwbHkoZHJhd2luZ0NvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0OjpmaWxsQmV6aWVyQ3VydmUoRGlzcGxheUxpc3Q6OkZpbGxCZXppZXJDdXJ2ZSYmIGl0ZW0p
Cit7CisgICAgaXRlbS5hcHBseShkcmF3aW5nQ29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVH
cmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKERpc3BsYXlMaXN0OjpGaWxsUGF0aCYmIGl0ZW0pCit7
CisgICAgaXRlbS5hcHBseShkcmF3aW5nQ29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKERpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZSYmIGl0ZW0p
Cit7CisgICAgaXRlbS5hcHBseShkcmF3aW5nQ29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVH
cmFwaGljc0NvbnRleHQ6OmdldFBpeGVsQnVmZmVyKERpc3BsYXlMaXN0OjpHZXRQaXhlbEJ1ZmZl
ciYmIGl0ZW0pCit7CisgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5wb3B1bGF0ZUdldFBpeGVsQnVm
ZmVyU2hhcmVkTWVtb3J5KG1faW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKGl0ZW0ub3V0cHV0
Rm9ybWF0KCksIGl0ZW0uc3JjUmVjdCgpKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0OjpwdXRQaXhlbEJ1ZmZlcihEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXImJiBpdGVtKQor
eworICAgIG1faW1hZ2VCdWZmZXItPnB1dFBpeGVsQnVmZmVyKGl0ZW0ucGl4ZWxCdWZmZXIoKSwg
aXRlbS5zcmNSZWN0KCksIGl0ZW0uZGVzdFBvaW50KCksIGl0ZW0uZGVzdEZvcm1hdCgpKTsKK30K
Kwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShEaXNwbGF5
TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhJiYgaXRlbSkKK3sKKyAgICBtX3JlbmRlcmluZ0JhY2tl
bmQtPnBlcmZvcm1XaXRoTWVkaWFQbGF5ZXJPbk1haW5UaHJlYWQoaXRlbS5pZGVudGlmaWVyKCks
IFtpbWFnZUJ1ZmZlciA9IG1faW1hZ2VCdWZmZXIuY29weVJlZigpLCBkZXN0aW5hdGlvbiA9IGl0
ZW0uZGVzdGluYXRpb24oKV0oTWVkaWFQbGF5ZXImIHBsYXllcikgeworICAgICAgICAvLyBJdCBp
cyBjdXJyZW50bHkgbm90IHNhZmUgdG8gY2FsbCBwYWludEZyYW1lRm9yTWVkaWEoKSBvZmYgdGhl
IG1haW4gdGhyZWFkLgorICAgICAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnBhaW50RnJhbWVG
b3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKKyAgICB9KTsKK30KKwordm9pZCBSZW1vdGVH
cmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoRGlzcGxheUxpc3Q6OlN0cm9rZVJlY3QmJiBpdGVt
KQoreworICAgIGl0ZW0uYXBwbHkoZHJhd2luZ0NvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VMaW5lKERpc3BsYXlMaXN0OjpTdHJva2VMaW5lJiYgaXRl
bSkKK3sKKyAgICBpdGVtLmFwcGx5KGRyYXdpbmdDb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKERpc3BsYXlMaXN0OjpTdHJva2VBcmMmJiBpdGVt
KQoreworICAgIGl0ZW0uYXBwbHkoZHJhd2luZ0NvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VRdWFkQ3VydmUoRGlzcGxheUxpc3Q6OlN0cm9rZVF1YWRD
dXJ2ZSYmIGl0ZW0pCit7CisgICAgaXRlbS5hcHBseShkcmF3aW5nQ29udGV4dCgpKTsKK30KKwor
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUJlemllckN1cnZlKERpc3BsYXlMaXN0
OjpTdHJva2VCZXppZXJDdXJ2ZSYmIGl0ZW0pCit7CisgICAgaXRlbS5hcHBseShkcmF3aW5nQ29u
dGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoRGlz
cGxheUxpc3Q6OlN0cm9rZVBhdGgmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkoZHJhd2luZ0Nv
bnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNl
KERpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlJiYgaXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KGRy
YXdpbmdDb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Y2xlYXJS
ZWN0KERpc3BsYXlMaXN0OjpDbGVhclJlY3QmJiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkoZHJh
d2luZ0NvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjphcHBseVN0
cm9rZVBhdHRlcm4oRGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybiYmIGl0ZW0pCit7Cisg
ICAgaXRlbS5hcHBseShkcmF3aW5nQ29udGV4dCgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oRGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm4m
JiBpdGVtKQoreworICAgIGl0ZW0uYXBwbHkoZHJhd2luZ0NvbnRleHQoKSk7Cit9CisKK3ZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKERpc3BsYXlMaXN0
OjpBcHBseURldmljZVNjYWxlRmFjdG9yJiYgaXRlbSkKK3sKKyAgICBpdGVtLmFwcGx5KGRyYXdp
bmdDb250ZXh0KCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Zmx1c2hDb250
ZXh0KERpc3BsYXlMaXN0OjpGbHVzaENvbnRleHQmJiBpdGVtKQoreworICAgIG1faW1hZ2VCdWZm
ZXItPmZsdXNoQ29udGV4dCgpOworICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+ZGlkRmx1c2goaXRl
bS5pZGVudGlmaWVyKCksIG1faW1hZ2VCdWZmZXItPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cigpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZmRiMzhhNmVlOTJmYjQyMTM3YTYxZGNmMDM3NzdjODVhODE3MmIwNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHQuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiRGVjb2Rlci5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
aCIKKyNpbmNsdWRlICJTdHJlYW1NZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJTdHJlYW1T
ZXJ2ZXJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFJlbW90ZVJlc291cmNlQ2FjaGU7CisKK2NsYXNzIFJlbW90ZUdyYXBoaWNzQ29udGV4dCA6
IHB1YmxpYyBJUEM6OlN0cmVhbU1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxSZW1vdGVHcmFwaGljc0NvbnRleHQ+IGNyZWF0ZShXZWJDb3JlOjpJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmIHJlbmRlcmluZ0JhY2tlbmQpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdGVHcmFwaGljc0NvbnRleHQo
aW1hZ2VCdWZmZXIsIHJlbmRlcmluZ0JhY2tlbmQpKTsKKyAgICB9CisKKyAgICB2b2lkIHNhdmUo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmUmJik7CisgICAgdm9pZCByZXN0b3JlKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZXN0b3JlJiYpOworICAgIHZvaWQgdHJhbnNsYXRlKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpUcmFuc2xhdGUmJik7CisgICAgdm9pZCByb3RhdGUoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJvdGF0ZSYmKTsKKyAgICB2b2lkIHNjYWxlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
Y2FsZSYmKTsKKyAgICB2b2lkIHNldENUTShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNJiYp
OworICAgIHZvaWQgY29uY2F0ZW5hdGVDVE0oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVu
YXRlQ1RNJiYpOworICAgIHZvaWQgc2V0SW5saW5lRmlsbENvbG9yKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRJbmxpbmVGaWxsQ29sb3ImJik7CisgICAgdm9pZCBzZXRJbmxpbmVTdHJva2VDb2xv
cihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3ImJik7CisgICAgdm9p
ZCBzZXRTdHJva2VUaGlja25lc3MoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNr
bmVzcyYmKTsKKyAgICB2b2lkIHNldFN0YXRlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0
ZSYmKTsKKyAgICB2b2lkIHNldExpbmVDYXAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVD
YXAmJik7CisgICAgdm9pZCBzZXRMaW5lRGFzaChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGlu
ZURhc2gmJik7CisgICAgdm9pZCBzZXRMaW5lSm9pbihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
TGluZUpvaW4mJik7CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRNaXRlckxpbWl0JiYpOworICAgIHZvaWQgY2xlYXJTaGFkb3coV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsZWFyU2hhZG93JiYpOworICAgIHZvaWQgY2xpcChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xpcCYmKTsKKyAgICB2b2lkIGNsaXBPdXQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBP
dXQmJik7CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
Q2xpcFRvSW1hZ2VCdWZmZXImJik7CisgICAgdm9pZCBjbGlwT3V0VG9QYXRoKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoJiYpOworICAgIHZvaWQgY2xpcFBhdGgoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNsaXBQYXRoJiYpOworICAgIHZvaWQgYmVnaW5DbGlwVG9EcmF3aW5nQ29t
bWFuZHMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luQ2xpcFRvRHJhd2luZ0NvbW1hbmRzJiYp
OworICAgIHZvaWQgZW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpFbmRDbGlwVG9EcmF3aW5nQ29tbWFuZHMmJik7CisgICAgdm9pZCBkcmF3R2x5cGhzKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzJiYpOworICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVy
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXImJik7CisgICAgdm9pZCBkcmF3
TmF0aXZlSW1hZ2UoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZSYmKTsKKyAg
ICB2b2lkIGRyYXdQYXR0ZXJuKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybiYmKTsK
KyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXImJik7CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcihX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXImJik7CisgICAgdm9pZCBk
cmF3UmVjdChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3QmJik7CisgICAgdm9pZCBkcmF3
TGluZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmUmJik7CisgICAgdm9pZCBkcmF3TGlu
ZXNGb3JUZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0JiYpOworICAg
IHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlciYmKTsKKyAgICB2b2lkIGRyYXdFbGxpcHNlKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZSYmKTsKKyAgICB2b2lkIGRyYXdQYXRoKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3UGF0aCYmKTsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmdQYXRoKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aCYmKTsKKyAgICB2b2lkIGRyYXdG
b2N1c1JpbmdSZWN0cyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzJiYp
OworICAgIHZvaWQgZmlsbFJlY3QoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0JiYpOwor
ICAgIHZvaWQgZmlsbFJlY3RXaXRoQ29sb3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0
V2l0aENvbG9yJiYpOworICAgIHZvaWQgZmlsbFJlY3RXaXRoR3JhZGllbnQoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50JiYpOworICAgIHZvaWQgZmlsbENvbXBvc2l0
ZWRSZWN0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3QmJik7CisgICAg
dm9pZCBmaWxsUm91bmRlZFJlY3QoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVj
dCYmKTsKKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSYmKTsKKyAgICB2b2lkIGZpbGxMaW5lKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsTGluZSYmKTsKKyAgICB2b2lkIGZpbGxBcmMoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxBcmMmJik7CisgICAgdm9pZCBmaWxsUXVhZEN1cnZlKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUXVhZEN1cnZlJiYpOworICAgIHZvaWQgZmlsbEJlemllckN1cnZl
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQmV6aWVyQ3VydmUmJik7CisgICAgdm9pZCBmaWxs
UGF0aChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGgmJik7CisgICAgdm9pZCBmaWxsRWxs
aXBzZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2UmJik7CisgICAgdm9pZCBnZXRQ
aXhlbEJ1ZmZlcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0UGl4ZWxCdWZmZXImJik7CisgICAg
dm9pZCBwdXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXIm
Jik7CisgICAgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBh
aW50RnJhbWVGb3JNZWRpYSYmKTsKKyAgICB2b2lkIHN0cm9rZVJlY3QoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlN0cm9rZVJlY3QmJik7CisgICAgdm9pZCBzdHJva2VMaW5lKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTdHJva2VMaW5lJiYpOworICAgIHZvaWQgc3Ryb2tlQXJjKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTdHJva2VBcmMmJik7CisgICAgdm9pZCBzdHJva2VRdWFkQ3VydmUoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlN0cm9rZVF1YWRDdXJ2ZSYmKTsKKyAgICB2b2lkIHN0cm9rZUJlemllckN1
cnZlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VCZXppZXJDdXJ2ZSYmKTsKKyAgICB2b2lk
IHN0cm9rZVBhdGgoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGgmJik7CisgICAgdm9p
ZCBzdHJva2VFbGxpcHNlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlJiYpOwor
ICAgIHZvaWQgY2xlYXJSZWN0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3QmJik7Cisg
ICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ry
b2tlUGF0dGVybiYmKTsKKyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm4mJik7CisgICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFj
dG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yJiYpOworICAg
IHZvaWQgZmx1c2hDb250ZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaENvbnRleHQmJik7
CisKK3ByaXZhdGU6CisgICAgUmVtb3RlR3JhcGhpY3NDb250ZXh0KFdlYkNvcmU6OkltYWdlQnVm
ZmVyJiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYpOworCisgICAgUmVtb3RlUmVzb3VyY2VDYWNo
ZSYgcmVzb3VyY2VDYWNoZSgpOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZHJhd2lu
Z0NvbnRleHQoKTsKKworICAgIHZvaWQgZGlkUmVjZWl2ZVN0cmVhbU1lc3NhZ2UoSVBDOjpTdHJl
YW1TZXJ2ZXJDb25uZWN0aW9uQmFzZSYsIElQQzo6RGVjb2RlciYpIGZpbmFsOworCisgICAgUmVm
PFdlYkNvcmU6OkltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworICAgIFJlZjxSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7CisgICAgUmVmUHRyPFdlYkNvcmU6Oklt
YWdlQnVmZmVyPiBtX21hc2tJbWFnZUJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHQubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjg2YTAy
ZGQ2MzkzOTlmMWM5MzdiMmI5ODUyZDJlMmRiZWEwN2E4NgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHQubWVz
c2FnZXMuaW4KQEAgLTAsMCArMSw5MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IK
KyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVH
cmFwaGljc0NvbnRleHQgTm90UmVmQ291bnRlZCBTdHJlYW0geworICAgIFNhdmUoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNhdmUgaXRlbSkKKyAgICBSZXN0b3JlKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZXN0b3JlIGl0ZW0pCisgICAgVHJhbnNsYXRlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFu
c2xhdGUgaXRlbSkKKyAgICBSb3RhdGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZSBpdGVt
KQorICAgIFNjYWxlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZSBpdGVtKQorICAgIFNldENU
TShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNIGl0ZW0pCisgICAgQ29uY2F0ZW5hdGVDVE0o
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNIGl0ZW0pCisgICAgU2V0SW5saW5l
RmlsbENvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3IgaXRlbSkK
KyAgICBTZXRJbmxpbmVTdHJva2VDb2xvcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5l
U3Ryb2tlQ29sb3IgaXRlbSkKKyAgICBTZXRTdHJva2VUaGlja25lc3MoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzcyBpdGVtKQorICAgIFNldFN0YXRlKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRTdGF0ZSBpdGVtKQorICAgIFNldExpbmVDYXAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVDYXAgaXRlbSkKKyAgICBTZXRMaW5lRGFzaChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0TGluZURhc2ggaXRlbSkKKyAgICBTZXRMaW5lSm9pbihXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0TGluZUpvaW4gaXRlbSkKKyAgICBTZXRNaXRlckxpbWl0KFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRNaXRlckxpbWl0IGl0ZW0pCisgICAgQ2xlYXJTaGFkb3coV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsZWFyU2hhZG93IGl0ZW0pCisgICAgQ2xpcChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xpcCBpdGVtKQorICAgIENsaXBPdXQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQg
aXRlbSkKKyAgICBDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRv
SW1hZ2VCdWZmZXIgaXRlbSkKKyAgICBDbGlwT3V0VG9QYXRoKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpDbGlwT3V0VG9QYXRoIGl0ZW0pCisgICAgQ2xpcFBhdGgoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsaXBQYXRoIGl0ZW0pCisgICAgQmVnaW5DbGlwVG9EcmF3aW5nQ29tbWFuZHMoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkJlZ2luQ2xpcFRvRHJhd2luZ0NvbW1hbmRzIGl0ZW0pCisgICAgRW5kQ2xp
cFRvRHJhd2luZ0NvbW1hbmRzKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpFbmRDbGlwVG9EcmF3aW5n
Q29tbWFuZHMgaXRlbSkKKyAgICBEcmF3R2x5cGhzKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
R2x5cGhzIGl0ZW0pCisgICAgRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3SW1hZ2VCdWZmZXIgaXRlbSkKKyAgICBEcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdOYXRpdmVJbWFnZSBpdGVtKQorICAgIERyYXdQYXR0ZXJuKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3UGF0dGVybiBpdGVtKQorICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgaXRlbSkKKyAgICBF
bmRUcmFuc3BhcmVuY3lMYXllcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5
TGF5ZXIgaXRlbSkKKyAgICBEcmF3UmVjdChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Qg
aXRlbSkKKyAgICBEcmF3TGluZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmUgaXRlbSkK
KyAgICBEcmF3TGluZXNGb3JUZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JU
ZXh0IGl0ZW0pCisgICAgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlciBpdGVtKQorICAgIERyYXdFbGxpcHNlKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZSBpdGVtKQorICAgIERyYXdQYXRoKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aCBpdGVtKQorICAgIERyYXdGb2N1c1JpbmdQYXRoKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aCBpdGVtKQorICAgIERyYXdGb2N1
c1JpbmdSZWN0cyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzIGl0ZW0p
CisgICAgRmlsbFJlY3QoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0IGl0ZW0pCisgICAg
RmlsbFJlY3RXaXRoQ29sb3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9y
IGl0ZW0pCisgICAgRmlsbFJlY3RXaXRoR3JhZGllbnQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0V2l0aEdyYWRpZW50IGl0ZW0pCisgICAgRmlsbENvbXBvc2l0ZWRSZWN0KFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3QgaXRlbSkKKyAgICBGaWxsUm91bmRlZFJl
Y3QoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdCBpdGVtKQorICAgIEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZSBpdGVtKQorICAgIEZpbGxMaW5lKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsTGlu
ZSBpdGVtKQorICAgIEZpbGxBcmMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxBcmMgaXRlbSkK
KyAgICBGaWxsUXVhZEN1cnZlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUXVhZEN1cnZlIGl0
ZW0pCisgICAgRmlsbEJlemllckN1cnZlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQmV6aWVy
Q3VydmUgaXRlbSkKKyAgICBGaWxsUGF0aChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGgg
aXRlbSkKKyAgICBGaWxsRWxsaXBzZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2Ug
aXRlbSkKKyAgICBHZXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0UGl4ZWxC
dWZmZXIgaXRlbSkKKyAgICBQdXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0
UGl4ZWxCdWZmZXIgaXRlbSkKKyAgICBQYWludEZyYW1lRm9yTWVkaWEoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYSBpdGVtKQorICAgIFN0cm9rZVJlY3QoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3QgaXRlbSkKKyAgICBTdHJva2VMaW5lKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTdHJva2VMaW5lIGl0ZW0pCisgICAgU3Ryb2tlQXJjKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTdHJva2VBcmMgaXRlbSkKKyAgICBTdHJva2VRdWFkQ3VydmUoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlN0cm9rZVF1YWRDdXJ2ZSBpdGVtKQorICAgIFN0cm9rZUJlemllckN1cnZlKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VCZXppZXJDdXJ2ZSBpdGVtKQorICAgIFN0cm9rZVBh
dGgoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGggaXRlbSkKKyAgICBTdHJva2VFbGxp
cHNlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlIGl0ZW0pCisgICAgQ2xlYXJS
ZWN0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3QgaXRlbSkKKyAgICBBcHBseVN0cm9r
ZVBhdHRlcm4oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybiBpdGVtKQor
ICAgIEFwcGx5RmlsbFBhdHRlcm4oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRl
cm4gaXRlbSkKKyAgICBBcHBseURldmljZVNjYWxlRmFjdG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpBcHBseURldmljZVNjYWxlRmFjdG9yIGl0ZW0pCisgICAgRmx1c2hDb250ZXh0KFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGbHVzaENvbnRleHQgaXRlbSkKK30KKworI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwCmluZGV4IGYyYTVlMDJkM2M3NzAw
Yjc5Y2Y3ZDMxZTAzNjliZWEzMzM1NjdiM2QuLjE3ZDhkM2E5NWI1MzdhZjk5MTZmNmMzNmQ3YTEx
ZTU0NjI0NmQ0MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcApAQCAtNjQsNyArNjQsNyBA
QCBSZWY8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpj
cmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUAogCiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0woR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2VzcywgR3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyIGdyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllciwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgcmVuZGVyaW5nQmFja2Vu
ZCwgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiYgc3RyZWFtKQogICAgIDogbV9ncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mp
KQotICAgICwgbV9zdHJlYW1Db25uZWN0aW9uKElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbjxS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTD46OmNyZWF0ZShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmNvbm5lY3Rpb24oKSwgV1RGTW92ZShzdHJlYW0pLCByZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0
cmVhbVdvcmtRdWV1ZSgpKSkKKyAgICAsIG1fc3RyZWFtQ29ubmVjdGlvbihJUEM6OlN0cmVhbVNl
cnZlckNvbm5lY3Rpb246OmNyZWF0ZShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNvbm5lY3Rp
b24oKSwgV1RGTW92ZShzdHJlYW0pLCByZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtR
dWV1ZSgpKSkKICAgICAsIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKGdyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllcikKICAgICAsIG1fcmVuZGVyaW5nQmFja2VuZChyZW5kZXJpbmdCYWNr
ZW5kKQogICAgICwgbV9yZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0KFNjb3BlZFdlYkdMUmVuZGVy
aW5nUmVzb3VyY2VzUmVxdWVzdDo6YWNxdWlyZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmggYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaAppbmRl
eCAxM2U0N2ZiYjljODk3MGY1ZDMwNDVhNmZmN2UwYzg3Y2YyMzc1MGQxLi5mOGVlYTFiNGIzMGZk
ZWY1ODZmOGFhNjAwYmRjMGE0YmExZDljNzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaApAQCAt
MzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllci5oIgog
I2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCIKICNpbmNsdWRlICJTY29wZWRXZWJH
TFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuaCIKKyNpbmNsdWRlICJTdHJlYW1NZXNzYWdlUmVj
ZWl2ZXIuaCIKICNpbmNsdWRlICJTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9FeHRlbnNpb25zR0wuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmg+CkBAIC01OCwxNSArNTksMTQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAvLyBH
UFUgcHJvY2VzcyBzaWRlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgcmVjZWl2ZXMgbWVzc2FnZXMg
YWJvdXQgR3JhcGhpY3NDb250ZXh0R0wgY2FsbHMKIC8vIGFuZCBpc3N1ZXMgcmVhbCBHcmFwaGlj
c0NvbnRleHRHTCBjYWxscyBiYXNlZCBvbiB0aGUgcmVjZWl2ZWQgbWVzc2FnZXMuCiAvLyBUaGUg
aW1wbGVtZW50YXRpb24gaXMgbGFyZ2VseSBnZW5lcmF0ZWQgYnkgcnVubmluZyBUb29scy9TY3Jp
cHRzL2dlbmVyYXRlLWdwdXAtd2ViZ2wuCi1jbGFzcyBSZW1vdGVHcmFwaGljc0NvbnRleHRHTCA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4sIHBy
aXZhdGUgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OkNsaWVudCB7CitjbGFzcyBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTCA6IHByaXZhdGUgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OkNs
aWVudCwgcHVibGljIElQQzo6U3RyZWFtTWVzc2FnZVJlY2VpdmVyIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMPiBjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYmLCBHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQmLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJik7CiAg
ICAgflJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdG9wTGlz
dGVuaW5nRm9ySVBDKFJlZjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4mJiByZWZGcm9tQ29ubmVj
dGlvbik7CiAKLSAgICAvLyBJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb248UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w+IHRlbXBsYXRlIGNvbnRyYWN0IGltcGxlbWVudGF0aW9uLgotICAgIHZvaWQg
ZGlkUmVjZWl2ZVN0cmVhbU1lc3NhZ2UoSVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZSYs
IElQQzo6RGVjb2RlciYpOworICAgIHZvaWQgZGlkUmVjZWl2ZVN0cmVhbU1lc3NhZ2UoSVBDOjpT
dHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZSYsIElQQzo6RGVjb2RlciYpIGZpbmFsOwogI2lmIFBM
QVRGT1JNKE1BQykKICAgICB2b2lkIGRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKICNlbmRpZgpA
QCAtMTA4LDcgKzEwOCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHBhaW50UGl4ZWxCdWZmZXJU
b0ltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+JiYsIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKIAogICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOwotICAgIFJlZlB0cjxJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rp
b248UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+PiBtX3N0cmVhbUNvbm5lY3Rpb247CisgICAgUmVm
UHRyPElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbj4gbV9zdHJlYW1Db25uZWN0aW9uOwogICAg
IFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gbV9jb250ZXh0IFdURl9H
VUFSREVEX0JZX0xPQ0sobV9zdHJlYW1UaHJlYWQpOwogICAgIEdyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllciBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcjsKICAgICBSZWY8UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZD4gbV9yZW5kZXJpbmdCYWNrZW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAppbmRleCBjYjNmOGU4
MzVkMGM4MGE3YTUyNzY5YTRkNjIwN2Q3OGE1ODg0YjQyLi45OTBmOGYxNTQ4MzM1YWQwYzYxZTU5
ZjdiZjFmY2RkMGE3ZmIyYzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1
ZGUgIkRlY29kZXIuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9Db25jcmV0ZUltYWdlQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlz
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgpAQCAtNTQsMTIgKzU2
LDE2IEBAIHB1YmxpYzoKICAgICAgICAgOiBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcihwYXJhbWV0
ZXJzLCBXVEZNb3ZlKGJhY2tlbmQpLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiAgICAg
ICAgICwgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kKHJlbW90ZVJlbmRlcmluZ0JhY2tlbmQpCiAg
ICAgICAgICwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIocmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKQorICAgICAgICAsIG1fY29udGV4dChSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmNy
ZWF0ZSgqdGhpcywgcmVtb3RlUmVuZGVyaW5nQmFja2VuZCkpCiAgICAgeworICAgICAgICBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuc3RyZWFtQ29ubmVjdGlvbigpLnN0YXJ0UmVjZWl2aW5nTWVz
c2FnZXMobV9jb250ZXh0LmdldCgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci50b1VJbnQ2
NCgpKTsKICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmRpZENyZWF0ZUltYWdlQnVm
ZmVyQmFja2VuZChtX2JhY2tlbmQtPmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpLCBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIH0KIAogICAgIH5SZW1vdGVJbWFnZUJ1
ZmZlcigpCiAgICAgeworICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuc3RyZWFtQ29u
bmVjdGlvbigpLnN0b3BSZWNlaXZpbmdNZXNzYWdlcyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLnRvVUludDY0KCkpOworCiAgICAgICAgIC8vIFVud2luZCB0aGUgY29udGV4dCdzIHN0YXRl
IHN0YWNrIGJlZm9yZSBkZXN0cnVjdGlvbiwgc2luY2UgY2FsbHMgdG8gcmVzdG9yZSBtYXkgbm90
IGhhdmUKICAgICAgICAgLy8gYmVlbiBmbHVzaGVkIHlldCwgb3IgdGhlIHdlYiBwcm9jZXNzIG1h
eSBoYXZlIHRlcm1pbmF0ZWQuCiAgICAgICAgIHdoaWxlIChjb250ZXh0KCkuc3RhY2tTaXplKCkp
CkBAIC03Nyw0MSArODMsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwogCi0gICAgYm9vbCBhcHBseShXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Ci0gICAgewotICAgICAgICBpZiAoaXRlbS5pczxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0UGl4
ZWxCdWZmZXI+KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGdldFBpeGVsQnVmZmVySXRlbSA9IGl0
ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRQaXhlbEJ1ZmZlcj4oKTsKLSAgICAgICAg
ICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Z2V0UGl4ZWxC
dWZmZXIoZ2V0UGl4ZWxCdWZmZXJJdGVtLm91dHB1dEZvcm1hdCgpLCBnZXRQaXhlbEJ1ZmZlckl0
ZW0uc3JjUmVjdCgpKTsKLSAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5wb3B1
bGF0ZUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KFdURk1vdmUocGl4ZWxCdWZmZXIpKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGl0ZW0uaXM8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyPigpKSB7Ci0gICAgICAgICAgICBh
dXRvJiBwdXRQaXhlbEJ1ZmZlckl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UHV0UGl4ZWxCdWZmZXI+KCk7Ci0gICAgICAgICAgICBwdXRQaXhlbEJ1ZmZlcihwdXRQaXhlbEJ1
ZmZlckl0ZW0ucGl4ZWxCdWZmZXIoKSwgcHV0UGl4ZWxCdWZmZXJJdGVtLnNyY1JlY3QoKSwgcHV0
UGl4ZWxCdWZmZXJJdGVtLmRlc3RQb2ludCgpLCBwdXRQaXhlbEJ1ZmZlckl0ZW0uZGVzdEZvcm1h
dCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNoQ29udGV4dD4oKSkgewotICAgICAg
ICAgICAgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpOwotICAgICAgICAg
ICAgYXV0byBpZGVudGlmaWVyID0gaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNo
Q29udGV4dD4oKS5pZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2hh
cmVkRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIkFja25vd2xlZGdpbmcgRmx1c2h7IiA8PCBpZGVu
dGlmaWVyIDw8ICJ9IGluIEltYWdlKCIgPDwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
PDwgIikiKTsKLSAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5kaWRGbHVzaChp
ZGVudGlmaWVyLCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI+KCkpIHsKLSAgICAgICAgICAg
IGF1dG8gbmV4dEJ1ZmZlcklkZW50aWZpZXIgPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyPigpLmlkZW50aWZpZXIoKTsKLSAgICAgICAg
ICAgIExPR19XSVRIX1NUUkVBTShTaGFyZWREaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiU3dpdGNo
aW5nIHRvIEl0ZW1zWyIgPDwgbmV4dEJ1ZmZlcklkZW50aWZpZXIgPDwgIl0iKTsKLSAgICAgICAg
ICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5zZXROZXh0SXRlbUJ1ZmZlclRvUmVhZChuZXh0
QnVmZmVySWRlbnRpZmllciwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmFwcGx5TWVkaWFJdGVtKGl0ZW0sIGNvbnRleHQpOwotICAgIH0KLQog
ICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZDsKICAg
ICBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgbV9yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXI7CisgICAgUmVmPFJlbW90ZUdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0Owog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXgg
YWE5NDU2NDE0OWQwOGU0ODk2MzQ3ZDk0ZjAzOTQ2MTU0NzI5YmY3My4uMDAzYzczNDJlZjBlODNk
YTQ0YTUwZjE0MjZhYzQzNzgxZjUyM2NlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAt
MjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi0jaW5jbHVkZSAiRGlz
cGxheUxpc3RSZWFkZXJIYW5kbGUuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUmVtb3RlSW1h
Z2VCdWZmZXIuaCIKQEAgLTcyLDQ2ICs3MSw0NCBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotUmVmPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJh
bWV0ZXJzJiYgY3JlYXRpb25QYXJhbWV0ZXJzKQorUmVmPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
JiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRp
b25QYXJhbWV0ZXJzJiYgY3JlYXRpb25QYXJhbWV0ZXJzLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25C
dWZmZXImJiBzdHJlYW1CdWZmZXIpCiB7Ci0gICAgYXV0byBpbnN0YW5jZSA9IGFkb3B0UmVmKCpu
ZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZChncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBXVEZN
b3ZlKGNyZWF0aW9uUGFyYW1ldGVycykpKTsKKyAgICBhdXRvIGluc3RhbmNlID0gYWRvcHRSZWYo
Km5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdU
Rk1vdmUoY3JlYXRpb25QYXJhbWV0ZXJzKSwgV1RGTW92ZShzdHJlYW1CdWZmZXIpKSk7CiAgICAg
aW5zdGFuY2UtPnN0YXJ0TGlzdGVuaW5nRm9ySVBDKCk7CiAgICAgcmV0dXJuIGluc3RhbmNlOwog
fQogCi1SZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJiBjcmVhdGlvblBhcmFtZXRlcnMpCi0g
ICAgOiBtX3dvcmtRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZCB3b3JrIHF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpTZXJpYWwsIFdvcmtRdWV1ZTo6UU9TOjpV
c2VySW50ZXJhY3RpdmUpKQorUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZChHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzJiYgY3JlYXRpb25Q
YXJhbWV0ZXJzLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJiBzdHJlYW1CdWZmZXIpCisg
ICAgOiBtX3dvcmtRdWV1ZSgiUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB3b3JrIHF1ZXVlIikKKyAg
ICAsIG1fc3RyZWFtQ29ubmVjdGlvbihJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb246OmNyZWF0
ZShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNvbm5lY3Rpb24oKSwgV1RGTW92ZShzdHJlYW1C
dWZmZXIpLCBtX3dvcmtRdWV1ZSkpCiAgICAgLCBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mo
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykKICAgICAsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIoY3JlYXRpb25QYXJhbWV0ZXJzLmlkZW50aWZpZXIpCi0gICAgLCBtX3Jlc3VtZURpc3Bs
YXlMaXN0U2VtYXBob3JlKFdURk1vdmUoY3JlYXRpb25QYXJhbWV0ZXJzLnJlc3VtZURpc3BsYXlM
aXN0U2VtYXBob3JlKSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6RGlkQ3JlYXRlV2FrZVVw
U2VtYXBob3JlRm9yRGlzcGxheUxpc3RTdHJlYW0obV93b3JrUXVldWUud2FrZVVwU2VtYXBob3Jl
KCkpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpzdGFydExpc3RlbmluZ0ZvcklQQygpCiB7Ci0gICAgbV9ncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCkuYWRkV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IG1fd29ya1F1ZXVlLCB0aGlzLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0
KCkpOworICAgIG1fc3RyZWFtQ29ubmVjdGlvbi0+c3RhcnRSZWNlaXZpbmdNZXNzYWdlcygqdGhp
cywgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpKTsKIH0KIAogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQogewogICAgIC8vIE1h
a2Ugc3VyZSB3ZSBkZXN0cm95IHRoZSBSZXNvdXJjZUNhY2hlIG9uIHRoZSBXb3JrUXVldWUgc2lu
Y2UgaXQgZ2V0cyBwb3B1bGF0ZWQgb24gdGhlIFdvcmtRdWV1ZS4KICAgICAvLyBNYWtlIHN1cmUg
cmVuZGVyaW5nIHJlc291cmNlIHJlcXVlc3QgaXMgcmVsZWFzZWQgYWZ0ZXIgZGVzdHJveWluZyB0
aGUgY2FjaGUuCi0gICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFtyZW5kZXJpbmdSZXNvdXJjZXNS
ZXF1ZXN0ID0gV1RGTW92ZShtX3JlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QpLCByZW1vdGVSZXNv
dXJjZUNhY2hlID0gV1RGTW92ZShtX3JlbW90ZVJlc291cmNlQ2FjaGUpXSB7IH0pOworICAgIGRp
c3BhdGNoKFtyZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0ID0gV1RGTW92ZShtX3JlbmRlcmluZ1Jl
c291cmNlc1JlcXVlc3QpLCByZW1vdGVSZXNvdXJjZUNhY2hlID0gV1RGTW92ZShtX3JlbW90ZVJl
c291cmNlQ2FjaGUpXSB7IH0pOwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnN0
b3BMaXN0ZW5pbmdGb3JJUEMoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICAvLyBUaGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBkZXN0cnVjdG9yIHdvbid0IGJlIGNh
bGxlZCB1bnRpbCBkaXNjb25uZWN0KCkgaXMgY2FsbGVkIGFuZCB3ZSB1bnJlZ2lzdGVyIG91cnNl
bHZlcyBhcyBhIFdvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlciBiZWNhdXNlCi0gICAgLy8gdGhlIElQ
Qzo6Q29ubmVjdGlvbiByZWZzIGl0cyBXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXJzLgotICAgIG1f
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpLnJlbW92ZVdvcmtRdWV1ZU1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCkpOwor
ICAgIG1fc3RyZWFtQ29ubmVjdGlvbi0+c3RvcFJlY2VpdmluZ01lc3NhZ2VzKE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7CiB9CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6ZGlzcGF0Y2goRnVuY3Rpb248dm9pZCgpPiYmIHRhc2spCiB7Ci0gICAgbV93b3Jr
UXVldWUtPmRpc3BhdGNoKFdURk1vdmUodGFzaykpOworICAgIG1fd29ya1F1ZXVlLmRpc3BhdGNo
KFdURk1vdmUodGFzaykpOwogfQogCiBJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKQEAgLTEyNCwzMCArMTIxLDEy
IEBAIHVpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5h
dGlvbklEKCkgY29uc3QKICAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50
b1VJbnQ2NCgpOwogfQogCi1ib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5TWVkaWFJ
dGVtKERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICghaXRlbS5p
czxEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhPigpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBhdXRvJiBtZWRpYUl0ZW0gPSBpdGVtLmdldDxEaXNwbGF5TGlzdDo6UGFpbnRG
cmFtZUZvck1lZGlhPigpOwotICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbJiwgZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgbWVkaWFQ
bGF5ZXJJZGVudGlmaWVyID0gbWVkaWFJdGVtLmlkZW50aWZpZXIoKV0gewotICAgICAgICBhdXRv
IHBsYXllciA9IGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPnJlbW90ZU1lZGlhUGxheWVyTWFu
YWdlclByb3h5KCkubWVkaWFQbGF5ZXIobWVkaWFQbGF5ZXJJZGVudGlmaWVyKTsKLSAgICAgICAg
aWYgKCFwbGF5ZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIC8vIEl0IGlzIGN1cnJl
bnRseSBub3Qgc2FmZSB0byBjYWxsIHBhaW50RnJhbWVGb3JNZWRpYSgpIG9mZiB0aGUgbWFpbiB0
aHJlYWQuCi0gICAgICAgIGNvbnRleHQucGFpbnRGcmFtZUZvck1lZGlhKCpwbGF5ZXIsIG1lZGlh
SXRlbS5kZXN0aW5hdGlvbigpKTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoSW1h
Z2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OkRpZENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChXVEZN
b3ZlKGhhbmRsZSksIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpOwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZEZs
dXNoKERpc3BsYXlMaXN0OjpGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyLCBSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQordm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRGbHVzaChGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVu
dGlmaWVyLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6RGlkRmx1c2goZmx1c2hJZGVudGlmaWVyLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
LCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KQEAgLTE3OSwxOTYgKzE1OCw2IEBA
IHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuCiAKICAgICBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2Fj
aGVJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIpOwogICAgIHVwZGF0ZVJlbmRlcmluZ1Jlc291cmNl
UmVxdWVzdCgpOwotCi0gICAgaWYgKG1fcGVuZGluZ1dha2V1cEluZm8gJiYgbV9wZW5kaW5nV2Fr
ZXVwSW5mby0+c2hvdWxkUGVyZm9ybVdha2V1cChpbWFnZUJ1ZmZlclJlc291cmNlSWRlbnRpZmll
cikpCi0gICAgICAgIHdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3Qoc3RkOjpleGNoYW5nZShtX3Bl
bmRpbmdXYWtldXBJbmZvLCBzdGQ6Om51bGxvcHQpLT5hcmd1bWVudHMpOwotfQotCi1SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjpSZXBsYXllckRlbGVnYXRlKFdlYkNv
cmU6OkltYWdlQnVmZmVyJiBkZXN0aW5hdGlvbiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgcmVt
b3RlUmVuZGVyaW5nQmFja2VuZCkKLSAgICA6IG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi0g
ICAgLCBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQocmVtb3RlUmVuZGVyaW5nQmFja2VuZCkKLXsK
LX0KLQotYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjphcHBs
eShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCkKLXsKLSAgICBhdXRvIGFwcGx5ID0gWyZdKGF1dG8m
JiBkZXN0aW5hdGlvbikgewotICAgICAgICByZXR1cm4gZGVzdGluYXRpb24uYXBwbHkoaXRlbSwg
Z3JhcGhpY3NDb250ZXh0KTsKLSAgICB9OwotCi0gICAgaWYgKG1fZGVzdGluYXRpb24ucmVuZGVy
aW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm4g
YXBwbHkoc3RhdGljX2Nhc3Q8QWNjZWxlcmF0ZWRSZW1vdGVJbWFnZUJ1ZmZlciY+KG1fZGVzdGlu
YXRpb24pKTsKLSAgICByZXR1cm4gYXBwbHkoc3RhdGljX2Nhc3Q8VW5hY2NlbGVyYXRlZFJlbW90
ZUltYWdlQnVmZmVyJj4obV9kZXN0aW5hdGlvbikpOwotfQotCi12b2lkIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OmRpZENyZWF0ZU1hc2tJbWFnZUJ1ZmZlcihXZWJD
b3JlOjpJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCi17Ci0gICAgbV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmRpZENyZWF0ZU1hc2tJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcik7Ci19Ci0KLXZvaWQg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6ZGlkUmVzZXRNYXNrSW1h
Z2VCdWZmZXIoKQotewotICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5kaWRSZXNldE1hc2tJ
bWFnZUJ1ZmZlcigpOwotfQotCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVy
RGVsZWdhdGU6OnJlY29yZFJlc291cmNlVXNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCi17Ci0gICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLnJlbW90ZVJlc291cmNlQ2FjaGUoKS5yZWNvcmRSZXNvdXJjZVVzZShyZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpOwotfQotCi1EaXNwbGF5TGlzdDo6UmVwbGF5UmVzdWx0IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OnN1Ym1pdChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRp
c3BsYXlMaXN0LCBJbWFnZUJ1ZmZlciYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYgKGRpc3BsYXlM
aXN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFJlcGxheWVyRGVsZWdh
dGUgcmVwbGF5ZXJEZWxlZ2F0ZShkZXN0aW5hdGlvbiwgKnRoaXMpOwotCi0gICAgcmV0dXJuIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllciB7Ci0gICAgICAgIGRlc3RpbmF0aW9uLmNvbnRl
eHQoKSwKLSAgICAgICAgZGlzcGxheUxpc3QsCi0gICAgICAgICZyZW1vdGVSZXNvdXJjZUNhY2hl
KCkuaW1hZ2VCdWZmZXJzKCksCi0gICAgICAgICZyZW1vdGVSZXNvdXJjZUNhY2hlKCkubmF0aXZl
SW1hZ2VzKCksCi0gICAgICAgICZyZW1vdGVSZXNvdXJjZUNhY2hlKCkuZm9udHMoKSwKLSAgICAg
ICAgbV9jdXJyZW50TWFza0ltYWdlQnVmZmVyLmdldCgpLAotICAgICAgICAmcmVwbGF5ZXJEZWxl
Z2F0ZQotICAgIH0ucmVwbGF5KCk7Ci19Ci0KLVJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6bmV4dERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJBZnRlckFwcGx5aW5nRGlz
cGxheUxpc3RzKEltYWdlQnVmZmVyJiBpbml0aWFsRGVzdGluYXRpb24sIHNpemVfdCBpbml0aWFs
T2Zmc2V0LCBEaXNwbGF5TGlzdFJlYWRlckhhbmRsZSYgaGFuZGxlLCBHUFVQcm9jZXNzV2FrZXVw
UmVhc29uIHJlYXNvbikKLXsKLSAgICBSZWZQdHIgZGVzdGluYXRpb24geyAmaW5pdGlhbERlc3Rp
bmF0aW9uIH07Ci0gICAgUmVmIGhhbmRsZVByb3RlY3RvciB7IGhhbmRsZSB9OwotCi0gICAgYXV0
byBvZmZzZXQgPSBpbml0aWFsT2Zmc2V0OwotICAgIHNpemVfdCBzaXplVG9SZWFkID0gMDsKLSAg
ICBkbyB7Ci0gICAgICAgIHNpemVUb1JlYWQgPSBoYW5kbGUudW5yZWFkQnl0ZXMoKTsKLSAgICB9
IHdoaWxlICghc2l6ZVRvUmVhZCk7Ci0KLSAgICB3aGlsZSAoZGVzdGluYXRpb24pIHsKLSAgICAg
ICAgYXV0byBkaXNwbGF5TGlzdCA9IGhhbmRsZS5kaXNwbGF5TGlzdEZvclJlYWRpbmcob2Zmc2V0
LCBzaXplVG9SZWFkLCAqdGhpcyk7Ci0gICAgICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9SRVRVUk5f
VkFMVUUoZGlzcGxheUxpc3QsIG51bGxwdHIsICJGYWlsZWQgdG8gbWFwIGRpc3BsYXkgbGlzdCBm
cm9tIHNoYXJlZCBtZW1vcnkiKTsKLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICAgICAgYXV0byBz
dGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSNlbmRpZgotICAgICAgICBhdXRvIHJl
c3VsdCA9IHN1Ym1pdCgqZGlzcGxheUxpc3QsICpkZXN0aW5hdGlvbik7Ci0gICAgICAgIExPR19X
SVRIX1NUUkVBTShTaGFyZWREaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiUmVhZCBbIiA8PCBvZmZz
ZXQgPDwgIiwgIiA8PCBvZmZzZXQgKyByZXN1bHQubnVtYmVyT2ZCeXRlc1JlYWQgPDwgIl07IEl0
ZW1zWyIgPDwgaGFuZGxlLmlkZW50aWZpZXIoKSA8PCAiXSA9PiBJbWFnZSgiIDw8IGRlc3RpbmF0
aW9uLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSA8PCAiKSBpbiAiIDw8IE1vbm90b25p
Y1RpbWU6Om5vdygpIC0gc3RhcnRUaW1lKTsKLSAgICAgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JF
VFVSTl9WQUxVRShyZXN1bHQucmVhc29uRm9yU3RvcHBpbmcgIT0gRGlzcGxheUxpc3Q6OlN0b3BS
ZXBsYXlSZWFzb246OkludmFsaWRJdGVtT3JFeHRlbnQsIG51bGxwdHIsICJEZXRlY3RlZCBpbnZh
bGlkIGRpc3BsYXkgbGlzdCBpdGVtIG9yIGV4dGVudCIpOwotICAgICAgICBNRVNTQUdFX0NIRUNL
X1dJVEhfUkVUVVJOX1ZBTFVFKHJlc3VsdC5yZWFzb25Gb3JTdG9wcGluZyAhPSBEaXNwbGF5TGlz
dDo6U3RvcFJlcGxheVJlYXNvbjo6T3V0T2ZNZW1vcnksIG51bGxwdHIsICJDb3VuZCBub3QgYWxs
b2NhdGUgbWVtb3J5Iik7Ci0KLSAgICAgICAgYXV0byBhZHZhbmNlUmVzdWx0ID0gaGFuZGxlLmFk
dmFuY2UocmVzdWx0Lm51bWJlck9mQnl0ZXNSZWFkKTsKLSAgICAgICAgTUVTU0FHRV9DSEVDS19X
SVRIX1JFVFVSTl9WQUxVRShhZHZhbmNlUmVzdWx0LCBudWxscHRyLCAiRmFpbGVkIHRvIGFkdmFu
Y2UgZGlzcGxheSBsaXN0IHJlYWRlciBoYW5kbGUiKTsKLSAgICAgICAgc2l6ZVRvUmVhZCA9ICph
ZHZhbmNlUmVzdWx0OwotCi0gICAgICAgIENoZWNrZWRTaXplIGNoZWNrZWRPZmZzZXQgPSBvZmZz
ZXQ7Ci0gICAgICAgIGNoZWNrZWRPZmZzZXQgKz0gcmVzdWx0Lm51bWJlck9mQnl0ZXNSZWFkOwot
ICAgICAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKCFjaGVja2VkT2Zmc2V0Lmhh
c092ZXJmbG93ZWQoKSwgbnVsbHB0ciwgIk92ZXJmbG93ZWQgd2hlbiBhZHZhbmNpbmcgc2hhcmVk
IGRpc3BsYXkgbGlzdCBoYW5kbGUgb2Zmc2V0Iik7Ci0KLSAgICAgICAgb2Zmc2V0ID0gY2hlY2tl
ZE9mZnNldDsKLSAgICAgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRShvZmZzZXQg
PD0gaGFuZGxlLnNoYXJlZE1lbW9yeSgpLnNpemUoKSwgbnVsbHB0ciwgIk91dC1vZi1ib3VuZHMg
b2Zmc2V0IGludG8gc2hhcmVkIGRpc3BsYXkgbGlzdCBoYW5kbGUiKTsKLQotICAgICAgICBpZiAo
cmVzdWx0LnJlYXNvbkZvclN0b3BwaW5nID09IERpc3BsYXlMaXN0OjpTdG9wUmVwbGF5UmVhc29u
OjpDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyKSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlv
biA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcigqcmVzdWx0Lm5leHRE
ZXN0aW5hdGlvbkltYWdlQnVmZmVyKTsKLSAgICAgICAgICAgIGlmICghZGVzdGluYXRpb24pIHsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoIW1fcGVuZGluZ1dha2V1cEluZm8pOwotICAgICAgICAg
ICAgICAgIG1fcGVuZGluZ1dha2V1cEluZm8gPSB7ewotICAgICAgICAgICAgICAgICAgICB7IGhh
bmRsZS5pZGVudGlmaWVyKCksIG9mZnNldCwgKnJlc3VsdC5uZXh0RGVzdGluYXRpb25JbWFnZUJ1
ZmZlciwgcmVhc29uIH0sCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6bnVsbG9wdCwKLSAgICAg
ICAgICAgICAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpXYWl0aW5nRm9yRGVz
dGluYXRpb25JbWFnZUJ1ZmZlcgotICAgICAgICAgICAgICAgIH19OwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5yZWFzb25Gb3JTdG9wcGluZyA9PSBEaXNw
bGF5TGlzdDo6U3RvcFJlcGxheVJlYXNvbjo6TWlzc2luZ0NhY2hlZFJlc291cmNlKSB7Ci0gICAg
ICAgICAgICBtX3BlbmRpbmdXYWtldXBJbmZvID0ge3sKLSAgICAgICAgICAgICAgICB7IGhhbmRs
ZS5pZGVudGlmaWVyKCksIG9mZnNldCwgZGVzdGluYXRpb24tPnJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcigpLCByZWFzb24gfSwKLSAgICAgICAgICAgICAgICByZXN1bHQubWlzc2luZ0NhY2hl
ZFJlc291cmNlSWRlbnRpZmllciwKLSAgICAgICAgICAgICAgICBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kU3RhdGU6OldhaXRpbmdGb3JDYWNoZWRSZXNvdXJjZQotICAgICAgICAgICAgfX07Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobV9wZW5kaW5nV2FrZXVwSW5mbykKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGlmICghc2l6ZVRvUmVhZCkgewotICAgICAgICAgICAgaWYgKHJlYXNv
biAhPSBHUFVQcm9jZXNzV2FrZXVwUmVhc29uOjpJdGVtQ291bnRIeXN0ZXJlc2lzRXhjZWVkZWQp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGhhbmRsZS5zdGFydFdhaXRp
bmcoKTsKLSAgICAgICAgICAgIG1fcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmUud2FpdEZvcigz
MF91cyk7Ci0KLSAgICAgICAgICAgIGF1dG8gc3RvcFdhaXRpbmdSZXN1bHQgPSBoYW5kbGUuc3Rv
cFdhaXRpbmcoKTsKLSAgICAgICAgICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUo
c3RvcFdhaXRpbmdSZXN1bHQsIG51bGxwdHIsICJJbnZhbGlkIHdhaXRpbmcgc3RhdHVzIGRldGVj
dGVkIHdoZW4gcmVzdW1pbmcgZGlzcGxheSBsaXN0IHByb2Nlc3NpbmciKTsKLQotICAgICAgICAg
ICAgYXV0byByZXN1bWVSZWFkaW5nSW5mbyA9IHN0b3BXYWl0aW5nUmVzdWx0LnZhbHVlKCk7Ci0g
ICAgICAgICAgICBpZiAoIXJlc3VtZVJlYWRpbmdJbmZvKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgICAgICBzaXplVG9SZWFkID0gaGFuZGxlLnVucmVhZEJ5dGVzKCk7Ci0gICAg
ICAgICAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKHNpemVUb1JlYWQsIG51bGxw
dHIsICJObyB1bnJlYWQgYnl0ZXMgd2hlbiByZXN1bWluZyBkaXNwbGF5IGxpc3QgcHJvY2Vzc2lu
ZyIpOwotCi0gICAgICAgICAgICBhdXRvIG5ld0Rlc3RpbmF0aW9uSWRlbnRpZmllciA9IG1ha2VP
YmplY3RJZGVudGlmaWVyPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllclR5cGU+KHJlc3VtZVJl
YWRpbmdJbmZvLT5kZXN0aW5hdGlvbik7Ci0gICAgICAgICAgICBNRVNTQUdFX0NIRUNLX1dJVEhf
UkVUVVJOX1ZBTFVFKG5ld0Rlc3RpbmF0aW9uSWRlbnRpZmllci5pc1ZhbGlkKCksIG51bGxwdHIs
ICJJbnZhbGlkIGltYWdlIGJ1ZmZlciBkZXN0aW5hdGlvbiB3aGVuIHJlc3VtaW5nIGRpc3BsYXkg
bGlzdCBwcm9jZXNzaW5nIik7Ci0KLSAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gbV9yZW1vdGVS
ZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVyKG5ld0Rlc3RpbmF0aW9uSWRlbnRpZmllcik7
Ci0gICAgICAgICAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKGRlc3RpbmF0aW9u
LCBudWxscHRyLCAiTWlzc2luZyBpbWFnZSBidWZmZXIgZGVzdGluYXRpb24gd2hlbiByZXN1bWlu
ZyBkaXNwbGF5IGxpc3QgcHJvY2Vzc2luZyIpOwotCi0gICAgICAgICAgICBvZmZzZXQgPSByZXN1
bWVSZWFkaW5nSW5mby0+b2Zmc2V0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGRl
c3RpbmF0aW9uOwotfQotCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Ondha2VVcEFuZEFw
cGx5RGlzcGxheUxpc3QoY29uc3QgR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMmIGFy
Z3VtZW50cykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFRyYWNl
U2NvcGUgdHJhY2luZ1Njb3BlKFdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3RTdGFydCwgV2FrZVVw
QW5kQXBwbHlEaXNwbGF5TGlzdEVuZCk7Ci0KLSAgICB1cGRhdGVMYXN0S25vd25TdGF0ZShSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kU3RhdGU6OkJlZ2FuUmVwbGF5aW5nRGlzcGxheUxpc3QpOwotCi0g
ICAgUmVmUHRyIGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUu
Y2FjaGVkSW1hZ2VCdWZmZXIoYXJndW1lbnRzLmRlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlm
aWVyKTsKLSAgICBNRVNTQUdFX0NIRUNLKGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJNaXNzaW5n
IGRlc3RpbmF0aW9uIGltYWdlIGJ1ZmZlciIpOwotCi0gICAgYXV0byBpbml0aWFsSGFuZGxlID0g
bV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXMuZ2V0KGFyZ3VtZW50cy5pdGVtQnVmZmVySWRlbnRp
Zmllcik7Ci0gICAgTUVTU0FHRV9DSEVDSyhpbml0aWFsSGFuZGxlLCAiTWlzc2luZyBpbml0aWFs
IHNoYXJlZCBkaXNwbGF5IGxpc3QgaGFuZGxlIik7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2hh
cmVkRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIldha2luZyB1cCB0byBJdGVtc1siIDw8IGFyZ3Vt
ZW50cy5pdGVtQnVmZmVySWRlbnRpZmllciA8PCAiXSA9PiBJbWFnZSgiIDw8IGFyZ3VtZW50cy5k
ZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllciA8PCAiKSBhdCAiIDw8IGFyZ3VtZW50cy5v
ZmZzZXQpOwotICAgIGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIgPSBuZXh0RGVzdGluYXRpb25JbWFn
ZUJ1ZmZlckFmdGVyQXBwbHlpbmdEaXNwbGF5TGlzdHMoKmRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIs
IGFyZ3VtZW50cy5vZmZzZXQsICppbml0aWFsSGFuZGxlLCBhcmd1bWVudHMucmVhc29uKTsKLQot
ICAgIC8vIEZJWE1FOiBBbGwgdGhlIGNhbGxlcnMgcGFzcyBtX3BlbmRpbmdXYWtldXBJbmZvLmFy
Z3VtZW50cyBzbyB0aGUgYm9keSBvZiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBqdXN0IGJlIHRoaXMg
bG9vcC4KLSAgICB3aGlsZSAoZGVzdGluYXRpb25JbWFnZUJ1ZmZlciAmJiBtX3BlbmRpbmdXYWtl
dXBJbmZvKSB7Ci0gICAgICAgIGlmIChtX3BlbmRpbmdXYWtldXBJbmZvLT5taXNzaW5nQ2FjaGVk
UmVzb3VyY2VJZGVudGlmaWVyKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYXV0byBu
ZXh0SGFuZGxlID0gbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXMuZ2V0KG1fcGVuZGluZ1dha2V1
cEluZm8tPmFyZ3VtZW50cy5pdGVtQnVmZmVySWRlbnRpZmllcik7Ci0gICAgICAgIGlmICghbmV4
dEhhbmRsZSkgewotICAgICAgICAgICAgLy8gSWYgdGhlIGhhbmRsZSBpZGVudGlmaWVyIGlzIGN1
cnJlbnRseSB1bmtub3duLCB3YWl0IHVudGlsIHRoZSBHUFUgcHJvY2VzcyByZWNlaXZlcyBhbgot
ICAgICAgICAgICAgLy8gSVBDIG1lc3NhZ2Ugd2l0aCBhIHNoYXJlZCBtZW1vcnkgaGFuZGxlIHRv
IHRoZSBuZXh0IGl0ZW0gYnVmZmVyLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBPdGhlcndpc2UsIGNvbnRpbnVlIHJlYWRpbmcgdGhlIG5leHQgZGlzcGxheSBs
aXN0IGl0ZW0gYnVmZmVyIGZyb20gdGhlIHN0YXJ0LgotICAgICAgICBhdXRvIGFyZ3VtZW50cyA9
IHN0ZDo6ZXhjaGFuZ2UobV9wZW5kaW5nV2FrZXVwSW5mbywgc3RkOjpudWxsb3B0KS0+YXJndW1l
bnRzOwotICAgICAgICBkZXN0aW5hdGlvbkltYWdlQnVmZmVyID0gbmV4dERlc3RpbmF0aW9uSW1h
Z2VCdWZmZXJBZnRlckFwcGx5aW5nRGlzcGxheUxpc3RzKCpkZXN0aW5hdGlvbkltYWdlQnVmZmVy
LCBhcmd1bWVudHMub2Zmc2V0LCAqbmV4dEhhbmRsZSwgYXJndW1lbnRzLnJlYXNvbik7Ci0gICAg
fQotICAgIExPR19XSVRIX1NUUkVBTShTaGFyZWREaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiR29p
bmcgYmFjayB0byBzbGVlcC4iKTsKLQotICAgIGlmIChtX3BlbmRpbmdXYWtldXBJbmZvKQotICAg
ICAgICB1cGRhdGVMYXN0S25vd25TdGF0ZShtX3BlbmRpbmdXYWtldXBJbmZvLT5zdGF0ZSk7Ci0g
ICAgZWxzZQotICAgICAgICB1cGRhdGVMYXN0S25vd25TdGF0ZShSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kU3RhdGU6OkZpbmlzaGVkUmVwbGF5aW5nRGlzcGxheUxpc3QpOwotfQotCi12b2lkIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OnNldE5leHRJdGVtQnVmZmVyVG9SZWFkKERpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgZGVzdGluYXRpb25JZGVudGlmaWVyKQotewotICAgIG1fcGVuZGluZ1dha2V1
cEluZm8gPSB7ewotICAgICAgICB7IGlkZW50aWZpZXIsIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxl
OjpoZWFkZXJTaXplKCksIGRlc3RpbmF0aW9uSWRlbnRpZmllciwgR1BVUHJvY2Vzc1dha2V1cFJl
YXNvbjo6VW5zcGVjaWZpZWQgfSwKLSAgICAgICAgc3RkOjpudWxsb3B0LAotICAgICAgICBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kU3RhdGU6OldhaXRpbmdGb3JJdGVtQnVmZmVyCi0gICAgfX07CiB9
CiAKIHN0ZDo6b3B0aW9uYWw8U2hhcmVkTWVtb3J5OjpJUENIYW5kbGU+IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVySGVscGVyKHNpemVf
dCBieXRlQ291bnQpCkBAIC00NDIsNiArMjMxLDcgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3QK
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHVybFN0cmluZykpOwogfQogCisvL3ZvaWQg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogdm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXREYXRhRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtNDkxLDE5ICsyODEs
MTIgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjYWNoZU5hdGl2ZUltYWdlKGNvbnN0
IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW4KICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9y
ZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlTmF0aXZlSW1hZ2UoKmltYWdlKTsKLQotICAgIGlmICht
X3BlbmRpbmdXYWtldXBJbmZvICYmIG1fcGVuZGluZ1dha2V1cEluZm8tPnNob3VsZFBlcmZvcm1X
YWtldXAobmF0aXZlSW1hZ2VSZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAgICB3YWtlVXBBbmRB
cHBseURpc3BsYXlMaXN0KHN0ZDo6ZXhjaGFuZ2UobV9wZW5kaW5nV2FrZXVwSW5mbywgc3RkOjpu
dWxsb3B0KS0+YXJndW1lbnRzKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpj
YWNoZUZvbnQoUmVmPEZvbnQ+JiYgZm9udCkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLQotICAgIGF1dG8gZm9udFJlc291cmNlSWRlbnRpZmllciA9IGZvbnQtPnJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcigpOwogICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZUZv
bnQoV1RGTW92ZShmb250KSk7Ci0gICAgaWYgKG1fcGVuZGluZ1dha2V1cEluZm8gJiYgbV9wZW5k
aW5nV2FrZXVwSW5mby0+c2hvdWxkUGVyZm9ybVdha2V1cChmb250UmVzb3VyY2VJZGVudGlmaWVy
KSkKLSAgICAgICAgd2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChzdGQ6OmV4Y2hhbmdlKG1fcGVu
ZGluZ1dha2V1cEluZm8sIHN0ZDo6bnVsbG9wdCktPmFyZ3VtZW50cyk7CiB9CiAKIHZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6ZGVsZXRlQWxsRm9udHMoKQpAQCAtNTIyLDE1MyArMzA1LDkg
QEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpyZWxlYXNlUmVtb3RlUmVzb3VyY2UoUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHIKIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpmaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShSZW5kZXJpbmdVcGRhdGVJRCByZW5kZXJpbmdVcGRh
dGVJRCkKIHsKLSAgICBhdXRvIHNob3VsZFBlcmZvcm1XYWtldXAgPSBbJl0oY29uc3QgR1BVUHJv
Y2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMmIGFyZ3VtZW50cykgewotICAgICAgICByZXR1cm4g
bV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVyKGFyZ3VtZW50cy5kZXN0aW5h
dGlvbkltYWdlQnVmZmVySWRlbnRpZmllcikgJiYgbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXMu
Y29udGFpbnMoYXJndW1lbnRzLml0ZW1CdWZmZXJJZGVudGlmaWVyKTsKLSAgICB9OwotCi0gICAg
aWYgKG1fcGVuZGluZ1dha2V1cEluZm8gJiYgc2hvdWxkUGVyZm9ybVdha2V1cChtX3BlbmRpbmdX
YWtldXBJbmZvLT5hcmd1bWVudHMpKQotICAgICAgICB3YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0
KHN0ZDo6ZXhjaGFuZ2UobV9wZW5kaW5nV2FrZXVwSW5mbywgc3RkOjpudWxsb3B0KS0+YXJndW1l
bnRzKTsKLQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
RGlkRmluYWxpemVSZW5kZXJpbmdVcGRhdGUocmVuZGVyaW5nVXBkYXRlSUQpLCBtX3JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpk
aWRDcmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklk
ZW50aWZpZXIgaXRlbUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFu
ZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkJ1ZmZl
cklkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgTUVT
U0FHRV9DSEVDSyghbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXMuY29udGFpbnMoaXRlbUJ1ZmZl
cklkZW50aWZpZXIpLCAiRHVwbGljYXRlIHNoYXJlZCBkaXNwbGF5IGxpc3QgaGFuZGxlIik7Ci0K
LSAgICBpZiAoYXV0byBzaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6Om1hcChoYW5kbGUuaGFu
ZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRXcml0ZSkpIHsKLSAgICAgICAgYXV0
byBoYW5kbGUgPSBEaXNwbGF5TGlzdFJlYWRlckhhbmRsZTo6Y3JlYXRlKGl0ZW1CdWZmZXJJZGVu
dGlmaWVyLCBzaGFyZWRNZW1vcnkucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIE1FU1NBR0Vf
Q0hFQ0soaGFuZGxlLCAiVGhlcmUgbXVzdCBiZSBlbm91Z2ggc3BhY2UgdG8gY3JlYXRlIHRoZSBo
YW5kbGUuIik7Ci0gICAgICAgIG1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzLnNldChpdGVtQnVm
ZmVySWRlbnRpZmllciwgaGFuZGxlKTsKLSAgICB9Ci0KLSAgICBpZiAobV9wZW5kaW5nV2FrZXVw
SW5mbyAmJiBtX3BlbmRpbmdXYWtldXBJbmZvLT5zaG91bGRQZXJmb3JtV2FrZXVwKGl0ZW1CdWZm
ZXJJZGVudGlmaWVyKSkKLSAgICAgICAgd2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChzdGQ6OmV4
Y2hhbmdlKG1fcGVuZGluZ1dha2V1cEluZm8sIHN0ZDo6bnVsbG9wdCktPmFyZ3VtZW50cyk7Ci19
Ci0KLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkQ3JlYXRlTWFza0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLSAgICBNRVNTQUdFX0NIRUNLKCFtX2N1cnJlbnRNYXNrSW1hZ2VCdWZmZXIsICJDdXJy
ZW50IG1hc2sgaW1hZ2UgYnVmZmVyIGlzIGFscmVhZHkgc2V0LiIpOwotICAgIG1fY3VycmVudE1h
c2tJbWFnZUJ1ZmZlciA9ICZpbWFnZUJ1ZmZlcjsKLX0KLQotdm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpkaWRSZXNldE1hc2tJbWFnZUJ1ZmZlcigpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0gICAgTUVTU0FHRV9DSEVDSyhtX2N1cnJlbnRNYXNrSW1hZ2VCdWZmZXIs
ICJDdXJyZW50IG1hc2sgaW1hZ2UgYnVmZmVyIHdhcyBub3QgYWxyZWFkeSBzZXQuIik7Ci0gICAg
bV9jdXJyZW50TWFza0ltYWdlQnVmZmVyID0gbnVsbHB0cjsKLX0KLQotc3RkOjpvcHRpb25hbDxE
aXNwbGF5TGlzdDo6SXRlbUhhbmRsZT4gV0FSTl9VTlVTRURfUkVUVVJOIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OmRlY29kZUl0ZW0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCwg
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlIHR5cGUsIHVpbnQ4X3QqIGhhbmRsZUxvY2F0aW9uKQotewot
ICAgIC8qIFRoaXMgbmVlZHMgdG8gbWF0Y2ggKDEpIGlzSW5saW5lSXRlbSgpIGluIERpc3BsYXlM
aXN0SXRlbVR5cGUuY3BwLCAoMikgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6ZW5jb2RlSXRlbSgp
LAotICAgICAqIGFuZCAoMykgYWxsIHRoZSAic3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSJzIGluc2lkZSB0aGUgaW5kaXZpZHVhbCBpdGVtIGNsYXNzZXMuCi0gICAgICogU2VlIHRo
ZSBjb21tZW50IGF0IHRoZSB0b3Agb2YgRGlzcGxheUxpc3RJdGVtcy5oIGZvciB3aHkuICovCi0K
LSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QmVn
aW5DbGlwVG9EcmF3aW5nQ29tbWFuZHM6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8
RGlzcGxheUxpc3Q6OkJlZ2luQ2xpcFRvRHJhd2luZ0NvbW1hbmRzPihkYXRhLCBsZW5ndGgsIGhh
bmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dFRv
UGF0aDoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6Q2xpcE91
dFRvUGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkNsaXBQYXRoOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRl
PERpc3BsYXlMaXN0OjpDbGlwUGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0g
ICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgotICAgICAg
ICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aD4o
ZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0
ZTxEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxv
Y2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0dseXBoczoKLSAg
ICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6RHJhd0dseXBocz4oZGF0
YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkRyYXdMaW5lc0ZvclRleHQ6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlz
cGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24p
OwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICAgICAgcmV0
dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6RHJhd1BhdGg+KGRhdGEsIGxlbmd0aCwg
aGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsQ29t
cG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6
OkZpbGxDb21wb3NpdGVkUmVjdD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAg
Y2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxQYXRoOgotICAgICAgICByZXR1cm4gZGVj
b2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpGaWxsUGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVM
b2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aENv
bG9yOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpGaWxsUmVj
dFdpdGhDb2xvcj4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgotICAgICAgICByZXR1cm4g
ZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudD4oZGF0YSwg
bGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRl
PERpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oZGF0YSwgbGVuZ3RoLCBoYW5k
bGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSb3VuZGVk
UmVjdDoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6RmlsbFJv
dW5kZWRSZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6Ci0gICAgICAgIHJldHVybiBkZWNvZGVB
bmRDcmVhdGU8RGlzcGxheUxpc3Q6OkdldFBpeGVsQnVmZmVyPihkYXRhLCBsZW5ndGgsIGhhbmRs
ZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UHV0UGl4ZWxCdWZm
ZXI6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OlB1dFBpeGVs
QnVmZmVyPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVh
dGU8RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9u
KTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGU6Ci0gICAgICAgIHJl
dHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OlNldFN0YXRlPihkYXRhLCBsZW5ndGgs
IGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tl
UGF0aDoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6U3Ryb2tl
UGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6Ci0jaWYgVVNFKENHKQotICAgIGNh
c2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgotICAgIGNhc2UgRGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46Ci0jZW5kaWYKLSAgICBjYXNl
IERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKLSAgICBjYXNl
IERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAgIGNhc2UgRGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
Q2xpcDoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dDoKLSAgICBjYXNl
IERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6Ci0gICAgY2FzZSBEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkVuZENsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICBjYXNlIERp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgY2FzZSBEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6Ci0gICAgY2FzZSBEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkRyYXdFbGxpcHNlOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpEcmF3SW1hZ2VCdWZmZXI6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRy
YXdOYXRpdmVJbWFnZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdHRl
cm46Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdMaW5lOgotICAgIGNhc2Ug
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3UmVjdDoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkZpbGxFbGxpcHNlOgotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNh
c2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsTGluZToKLSAgICBjYXNlIERpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RmlsbEFyYzoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Rmls
bFF1YWRDdXJ2ZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbEJlemllckN1
cnZlOgotI2VuZGlmCi0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0Ogot
ICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGbHVzaENvbnRleHQ6Ci0gICAgY2FzZSBE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1
ZmZlcjoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VJ
dGVtQnVmZmVyOgotI2lmIEVOQUJMRShWSURFTykKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgotI2VuZGlmCi0gICAgY2FzZSBEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlJvdGF0
ZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2F2ZToKLSAgICBjYXNlIERpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2NhbGU6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OlNldENUTToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENv
bG9yOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGll
bnQ6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9y
OgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgIGNhc2Ug
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICBjYXNlIERpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpT
dHJva2VFbGxpcHNlOgotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNhc2UgRGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VBcmM6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlN0cm9rZVF1YWRDdXJ2ZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U3Ryb2tlQmV6aWVyQ3VydmU6Ci0jZW5kaWYKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6U3Ryb2tlUmVjdDoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlTGlu
ZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0K
LQogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVSZW5kZXJpbmdSZXNvdXJjZVJl
cXVlc3QoKQogewogICAgIGJvb2wgaGFzQWN0aXZlRHJhd2FibGVzID0gbV9yZW1vdGVSZXNvdXJj
ZUNhY2hlLmhhc0FjdGl2ZURyYXdhYmxlcygpOwpAQCAtNjg1LDE2ICszMjQsMTIgQEAgYm9vbCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjphbGxvd3NFeGl0VW5kZXJNZW1vcnlQcmVzc3VyZSgpIGNv
bnN0CiAgICAgcmV0dXJuICFtX3JlbW90ZVJlc291cmNlQ2FjaGUuaGFzQWN0aXZlRHJhd2FibGVz
KCk7CiB9CiAKLVJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZSBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpsYXN0S25vd25TdGF0ZSgpIGNvbnN0Cit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OnBlcmZvcm1XaXRoTWVkaWFQbGF5ZXJPbk1haW5UaHJlYWQoTWVkaWFQbGF5ZXJJZGVudGlmaWVy
IGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoTWVkaWFQbGF5ZXImKT4mJiBjYWxsYmFjaykKIHsK
LSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIHJldHVybiBtX2xhc3RLbm93blN0
YXRlLmxvYWQoKTsKLX0KLQotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVMYXN0
S25vd25TdGF0ZShSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGUgc3RhdGUpCi17Ci0gICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbV9sYXN0S25vd25TdGF0ZS5zdG9yZVJlbGF4
ZWQoc3RhdGUpOworICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbJiwgZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaWRlbnRpZmllcl0g
eworICAgICAgICBpZiAoYXV0byBwbGF5ZXIgPSBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5y
ZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLm1lZGlhUGxheWVyKGlkZW50aWZpZXIpKQor
ICAgICAgICAgICAgY2FsbGJhY2soKnBsYXllcik7CisgICAgfSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKaW5kZXggN2Q4MGI3MjU4NjM5NGU1NWVjY2Nj
OWJmNzNmOTVlZmIwY2M5NDA1MC4uMjA1YWJkNmZiZWE3MzhkYTE5ZTViNDBkNTkxYThhNThhMTNh
ZWE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0yOCwxNiArMjgsMTcgQEAKICNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiR1BV
UHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMuaCIKICNpbmNsdWRlICJJUENTZW1hcGhvcmUu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCIKICNpbmNsdWRlICJNZXNz
YWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCi0jaW5jbHVkZSAiUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVzb3VyY2VDYWNo
ZS5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyaW5nVXBkYXRlSUQuaCIKICNpbmNsdWRlICJTY29wZWRSZW5kZXJpbmdSZXNvdXJjZXNS
ZXF1ZXN0LmgiCisjaW5jbHVkZSAiU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5oIgorI2luY2x1
ZGUgIlN0cmVhbU1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIlN0cmVhbVNlcnZlckNvbm5l
Y3Rpb24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0Rpc3BsYXlMaXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+
CkBAIC00NiwxMSArNDcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLW5hbWVzcGFjZSBE
aXNwbGF5TGlzdCB7Ci1jbGFzcyBEaXNwbGF5TGlzdDsKLWNsYXNzIEl0ZW07Ci19Ci0KIGNsYXNz
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTsKIGNsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIE5hdGl2ZUlt
YWdlOwpAQCAtNjEsMzAgKzU3LDIyIEBAIGVudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSA6IGJvb2w7
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBEaXNwbGF5TGlzdFJlYWRlckhhbmRsZTsK
IGNsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CiBzdHJ1Y3QgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZENyZWF0aW9uUGFyYW1ldGVyczsKIAotY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZAotICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKLSAgICAsIHB1YmxpYyBJUEM6OkNv
bm5lY3Rpb246OldvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlcgotICAgICwgcHVibGljIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCB7CitjbGFzcyBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIsIHB1YmxpYyBJUEM6OlN0
cmVhbU1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0KLSAgICBzdGF0aWMgUmVmPFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmKTsKKyAgICBzdGF0aWMgUmVmPFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmLCBJUEM6OlN0cmVhbUNv
bm5lY3Rpb25CdWZmZXImJik7CiAgICAgdmlydHVhbCB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgp
OwogICAgIHZvaWQgc3RvcExpc3RlbmluZ0ZvcklQQygpOwogCiAgICAgUmVtb3RlUmVzb3VyY2VD
YWNoZSYgcmVtb3RlUmVzb3VyY2VDYWNoZSgpIHsgcmV0dXJuIG1fcmVtb3RlUmVzb3VyY2VDYWNo
ZTsgfQogCi0gICAgLy8gUmVuZGVyaW5nIG9wZXJhdGlvbnMuCi0gICAgYm9vbCBhcHBseU1lZGlh
SXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Jik7CisgICAgdm9pZCBkaWRSZWNlaXZlU3RyZWFtTWVzc2FnZShJUEM6OlN0cmVhbVNl
cnZlckNvbm5lY3Rpb25CYXNlJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CiAKICAgICAvLyBNZXNz
YWdlcyB0byBiZSBzZW50LgogICAgIHZvaWQgZGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKElt
YWdlQnVmZmVyQmFja2VuZEhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKTsKLSAgICB2b2lkIGRpZEZsdXNoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaElkZW50
aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0KLSAgICB2b2lk
IHNldE5leHRJdGVtQnVmZmVyVG9SZWFkKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVy
SWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGRlc3RpbmF0
aW9uKTsKKyAgICB2b2lkIGRpZEZsdXNoKFdlYkNvcmU6OkZsdXNoSWRlbnRpZmllciwgV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKIAogICAgIHZvaWQgZGlkQ3JlYXRlTWFz
a0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJik7CiAgICAgdm9pZCBkaWRSZXNldE1h
c2tJbWFnZUJ1ZmZlcigpOwpAQCAtOTYsMTAyICs4NCw0NSBAQCBwdWJsaWM6CiAgICAgLy8gUnVu
cyBGdW5jdGlvbiBpbiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHRhc2sgcXVldWUuCiAgICAgdm9p
ZCBkaXNwYXRjaChGdW5jdGlvbjx2b2lkKCk+JiYpOwogCi0gICAgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFN0YXRlIGxhc3RLbm93blN0YXRlKCkgY29uc3Q7CisgICAgSVBDOjpTdHJlYW1TZXJ2ZXJD
b25uZWN0aW9uJiBzdHJlYW1Db25uZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdHJlYW1Db25u
ZWN0aW9uLmdldCgpOyB9CisKKyAgICB2b2lkIHBlcmZvcm1XaXRoTWVkaWFQbGF5ZXJPbk1haW5U
aHJlYWQoV2ViQ29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKFdlYkNv
cmU6Ok1lZGlhUGxheWVyJik+JiYpOwogCiBwcml2YXRlOgotICAgIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRD
cmVhdGlvblBhcmFtZXRlcnMmJik7CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZChHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1l
dGVycyYmLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJik7CiAgICAgdm9pZCBzdGFydExp
c3RlbmluZ0ZvcklQQygpOwogCi0gICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbUhhbmRsZT4gV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZUl0ZW0oY29uc3QgdWludDhf
dCogZGF0YSwgc2l6ZV90IGxlbmd0aCwgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlLCB1
aW50OF90KiBoYW5kbGVMb2NhdGlvbikgb3ZlcnJpZGU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU+
IFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVBbmRDcmVhdGUoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IGxlbmd0aCwgdWludDhfdCogaGFuZGxlTG9jYXRpb24pCi0gICAgewotICAgICAgICBp
ZiAoYXV0byBpdGVtID0gSVBDOjpEZWNvZGVyOjpkZWNvZGVTaW5nbGVPYmplY3Q8VD4oZGF0YSwg
bGVuZ3RoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFdlYktpdDIgc2hvdWxkIG5vdCBuZWVk
IHRvIGtub3cgdGhhdCB0aGUgZmlyc3QgOCBieXRlcyBhdCB0aGUgaGFuZGxlIGFyZSByZXNlcnZl
ZCBmb3IgdGhlIHR5cGUuCi0gICAgICAgICAgICAvLyBOZWVkIHRvIGZpZ3VyZSBvdXQgYSB3YXkg
dG8ga2VlcCB0aGlzIGtub3dsZWRnZSB3aXRoaW4gZGlzcGxheSBsaXN0IGNvZGUgaW4gV2ViQ29y
ZS4KLSAgICAgICAgICAgIG5ldyAoaGFuZGxlTG9jYXRpb24gKyBzaXplb2YodWludDY0X3QpKSBU
KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgICAgIHJldHVybiB7eyBoYW5kbGVMb2NhdGlvbiB9
fTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLQotICAg
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXlSZXN1bHQgc3VibWl0KGNvbnN0IFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIFdlYkNvcmU6OkltYWdlQnVmZmVyJiBkZXN0aW5h
dGlvbik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBuZXh0RGVzdGluYXRpb25J
bWFnZUJ1ZmZlckFmdGVyQXBwbHlpbmdEaXNwbGF5TGlzdHMoV2ViQ29yZTo6SW1hZ2VCdWZmZXIm
IGluaXRpYWxEZXN0aW5hdGlvbiwgc2l6ZV90IGluaXRpYWxPZmZzZXQsIERpc3BsYXlMaXN0UmVh
ZGVySGFuZGxlJiwgR1BVUHJvY2Vzc1dha2V1cFJlYXNvbik7Ci0KICAgICBzdGQ6Om9wdGlvbmFs
PFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiB1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1
ZmZlckhlbHBlcihzaXplX3QgYnl0ZUNvdW50KTsKICAgICB2b2lkIHVwZGF0ZVJlbmRlcmluZ1Jl
c291cmNlUmVxdWVzdCgpOwogCi0gICAgdm9pZCB1cGRhdGVMYXN0S25vd25TdGF0ZShSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kU3RhdGUpOwotCiAgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgogICAg
IElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlk
ZTsKICAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKLSAgICB2b2lkIGRpZFJlY2VpdmVN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwotICAgIGJv
b2wgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYs
IFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+Jikgb3ZlcnJpZGU7Ci0KICAgICAvLyBNZXNzYWdlcyB0
byBiZSByZWNlaXZlZC4KICAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgY29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgV2Vi
Q29yZTo6UGl4ZWxGb3JtYXQsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7
Ci0gICAgdm9pZCB3YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0KGNvbnN0IEdQVVByb2Nlc3NXYWtl
dXBNZXNzYWdlQXJndW1lbnRzJik7CiAgICAgdm9pZCB1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQ
aXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKT4mJik7CiAgICAgdm9pZCBzZW1hcGhvcmVGb3JH
ZXRQaXhlbEJ1ZmZlcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6U2VtYXBob3Jl
Jik+JiYpOwogICAgIHZvaWQgdXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0UGl4
ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiwgY29uc3QgSVBDOjpTZW1hcGhvcmUmKT4mJik7CiAg
ICAgdm9pZCBkZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkoKTsKICAgICB2b2lkIGdl
dERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3Ry
aW5nJiYpPiYmKTsKICAgICB2b2lkIGdldERhdGFGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50
OF90PiYmKT4mJik7CisgICAgLy92b2lkIGdldERhdGFGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGdldFNoYXJlYWJsZUJpdG1hcEZv
ckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV2ViQ29y
ZTo6UHJlc2VydmVSZXNvbHV0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlJiYpPiYmKTsKICAgICB2b2lkIGNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpOwogICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250PiYmKTsKICAgICB2b2lk
IGRlbGV0ZUFsbEZvbnRzKCk7CiAgICAgdm9pZCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCk7CiAgICAg
dm9pZCBmaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShSZW5kZXJpbmdVcGRhdGVJRCk7Ci0gICAgdm9p
ZCBkaWRDcmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiwgV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGRlc3RpbmF0aW9uQnVmZmVySWRlbnRp
Zmllcik7Ci0KLSAgICBjbGFzcyBSZXBsYXllckRlbGVnYXRlIDogcHVibGljIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZXBsYXllcjo6RGVsZWdhdGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgUmVw
bGF5ZXJEZWxlZ2F0ZShXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQmKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wgYXBwbHkoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1IYW5kbGUsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpIGZpbmFsOwotICAg
ICAgICB2b2lkIGRpZENyZWF0ZU1hc2tJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYp
IGZpbmFsOwotICAgICAgICB2b2lkIGRpZFJlc2V0TWFza0ltYWdlQnVmZmVyKCkgZmluYWw7Ci0g
ICAgICAgIHZvaWQgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKSBmaW5hbDsKLQotICAgICAgICBXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgbV9kZXN0
aW5hdGlvbjsKLSAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGVuZGluZ1dha2V1cEluZm9ybWF0aW9u
IHsKLSAgICAgICAgR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMgYXJndW1lbnRzOwot
ICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cj4gbWlzc2luZ0NhY2hlZFJlc291cmNlSWRlbnRpZmllcjsKLSAgICAgICAgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFN0YXRlIHN0YXRlIHsgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpJbml0
aWFsaXplZCB9OwotCi0gICAgICAgIGJvb2wgc2hvdWxkUGVyZm9ybVdha2V1cChXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaWRlbnRpZmllcikgY29uc3QKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5kZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRp
ZmllciA9PSBpZGVudGlmaWVyCi0gICAgICAgICAgICAgICAgfHwgbWlzc2luZ0NhY2hlZFJlc291
cmNlSWRlbnRpZmllciA9PSBpZGVudGlmaWVyOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBz
aG91bGRQZXJmb3JtV2FrZXVwKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRp
ZmllciBpZGVudGlmaWVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYXJn
dW1lbnRzLml0ZW1CdWZmZXJJZGVudGlmaWVyID09IGlkZW50aWZpZXI7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CisKKyAgICBJUEM6OlN0cmVh
bUNvbm5lY3Rpb25Xb3JrUXVldWUgbV93b3JrUXVldWU7CisgICAgUmVmPElQQzo6U3RyZWFtU2Vy
dmVyQ29ubmVjdGlvbj4gbV9zdHJlYW1Db25uZWN0aW9uOwogICAgIFJlbW90ZVJlc291cmNlQ2Fj
aGUgbV9yZW1vdGVSZXNvdXJjZUNhY2hlOwogICAgIFJlZjxHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CiAgICAgUmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsKLSAgICBIYXNoTWFwPFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgUmVmUHRyPERpc3BsYXlMaXN0
UmVhZGVySGFuZGxlPj4gbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXM7Ci0gICAgc3RkOjpvcHRp
b25hbDxQZW5kaW5nV2FrZXVwSW5mb3JtYXRpb24+IG1fcGVuZGluZ1dha2V1cEluZm87Ci0gICAg
SVBDOjpTZW1hcGhvcmUgbV9yZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZTsKICAgICBJUEM6OlNl
bWFwaG9yZSBtX2dldFBpeGVsQnVmZmVyU2VtYXBob3JlOwogICAgIFJlZlB0cjxTaGFyZWRNZW1v
cnk+IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnk7CiAgICAgU2NvcGVkUmVuZGVyaW5nUmVz
b3VyY2VzUmVxdWVzdCBtX3JlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3Q7Ci0gICAgUmVmUHRyPFdl
YkNvcmU6OkltYWdlQnVmZmVyPiBtX2N1cnJlbnRNYXNrSW1hZ2VCdWZmZXI7Ci0gICAgQXRvbWlj
PFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZT4gbV9sYXN0S25vd25TdGF0ZSB7IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRTdGF0ZTo6SW5pdGlhbGl6ZWQgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgppbmRleCAxZWY1
NmRjYzk3NjI3NGUzNTZhYjIyYjRlYTRlNzFiY2ZhYzBiMGRmLi5hMTQyZjQ4OTY2ZjVjNDk3NTk0
NTY1NDc3MmM3OWMzMTk3NmY1M2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNz
YWdlcy5pbgpAQCAtMjIsMjAgKzIyLDE4IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAK
LW1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgeworbWVzc2FnZXMgLT4gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZCBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgQ3JlYXRlSW1hZ2VC
dWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6RGVzdGlu
YXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIGVudW06dWludDhfdCBXZWJDb3JlOjpQaXhlbEZv
cm1hdCBwaXhlbEZvcm1hdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKLSAgICBXYWtlVXBBbmRBcHBseURpc3BsYXlMaXN0
KHN0cnVjdCBXZWJLaXQ6OkdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzIGFyZ3VtZW50
cykKLSAgICBVcGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRl
Q291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZSkgU3luY2hy
b25vdXMKLSAgICBTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcigpIC0+IChJUEM6OlNlbWFwaG9y
ZSBzZW1hcGhvcmUpIFN5bmNocm9ub3VzCi0gICAgVXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBo
b3JlRm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50KSAtPiAoV2ViS2l0OjpTaGFy
ZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUsIElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3lu
Y2hyb25vdXMKKyAgICBVcGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJf
dCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZSkg
U3luY2hyb25vdXMgTm90U3RyZWFtRW5jb2RhYmxlUmVwbHkKKyAgICBTZW1hcGhvcmVGb3JHZXRQ
aXhlbEJ1ZmZlcigpIC0+IChJUEM6OlNlbWFwaG9yZSBzZW1hcGhvcmUpIFN5bmNocm9ub3VzIE5v
dFN0cmVhbUVuY29kYWJsZVJlcGx5CisgICAgVXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jl
Rm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50KSAtPiAoV2ViS2l0OjpTaGFyZWRN
ZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUsIElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hy
b25vdXMgTm90U3RyZWFtRW5jb2RhYmxlUmVwbHkKICAgICBEZXN0cm95R2V0UGl4ZWxCdWZmZXJT
aGFyZWRNZW1vcnkoKQogICAgIEdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihTdHJpbmcgbWltZVR5
cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFN0cmlu
ZyB1cmxTdHJpbmcpIFN5bmNocm9ub3VzCiAgICAgR2V0RGF0YUZvckltYWdlQnVmZmVyKFN0cmlu
ZyBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChW
ZWN0b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25vdXMKLSAgICBHZXRTaGFyZWFibGVCaXRtYXBG
b3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VC
dWZmZXIsIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uKSAtPiAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpIFN5
bmNocm9ub3VzCi0gICAgQ2FjaGVOYXRpdmVJbWFnZShXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcikKLSAgICBDYWNoZUZvbnQoSVBDOjpGb250UmVmZXJlbmNl
IGZvbnQpCisgICAgR2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVyLCBlbnVtOnVpbnQ4X3QgV2ViQ29y
ZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgLT4gKFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cyBOb3RTdHJlYW1FbmNvZGFi
bGVSZXBseQorICAgIENhY2hlTmF0aXZlSW1hZ2UoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpIE5vdFN0cmVhbUVuY29kYWJsZQorICAgIENhY2hlRm9udChJ
UEM6OkZvbnRSZWZlcmVuY2UgZm9udCkgTm90U3RyZWFtRW5jb2RhYmxlCiAgICAgRGVsZXRlQWxs
Rm9udHMoKQotICAgIERpZENyZWF0ZVNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJLaXQ6OlNoYXJl
ZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGRlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcikKICAgICBSZWxlYXNlUmVtb3RlUmVz
b3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpCiAgICAgRmluYWxpemVSZW5kZXJpbmdV
cGRhdGUoV2ViS2l0OjpSZW5kZXJpbmdVcGRhdGVJRCByZW5kZXJpbmdVcGRhdGVJRCkKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycy5oCmluZGV4
IDQ0YTI3ODI2NTJhOGZlYjEzZDVkNGNhNzU1MTAxZjBmM2ViZWRlOGMuLmMyNDU1ZDZjMGZkYzcx
MTE2NWY1YzNhMDlhZWZlMWM3NTE1MzZmNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJz
LmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtMzYsMTMgKzM2LDEyIEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBzdHJ1Y3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1l
dGVycyB7CiAgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgaWRlbnRpZmllcjsKLSAgICBJ
UEM6OlNlbWFwaG9yZSByZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZTsKICAgICBXZWJQYWdlUHJv
eHlJZGVudGlmaWVyIHBhZ2VQcm94eUlEOwogICAgIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBh
Z2VJRDsKIAogICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAg
ICB7Ci0gICAgICAgIGVuY29kZXIgPDwgaWRlbnRpZmllciA8PCByZXN1bWVEaXNwbGF5TGlzdFNl
bWFwaG9yZSA8PCBwYWdlUHJveHlJRCA8PCBwYWdlSUQ7CisgICAgICAgIGVuY29kZXIgPDwgaWRl
bnRpZmllciA8PCBwYWdlUHJveHlJRCA8PCBwYWdlSUQ7CiAgICAgfQogCiAgICAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8UmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycz4gZGVj
b2RlKElQQzo6RGVjb2RlciYgZGVjb2RlcikKQEAgLTUyLDExICs1MSw2IEBAIHN0cnVjdCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICAgICAgaWYgKCFpZGVu
dGlmaWVyKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgICAgICBzdGQ6
Om9wdGlvbmFsPElQQzo6U2VtYXBob3JlPiByZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZTsKLSAg
ICAgICAgZGVjb2RlciA+PiByZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZTsKLSAgICAgICAgaWYg
KCFyZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Ci0KICAgICAgICAgc3RkOjpvcHRpb25hbDxXZWJQYWdlUHJveHlJZGVudGlmaWVyPiBw
YWdlUHJveHlJRDsKICAgICAgICAgZGVjb2RlciA+PiBwYWdlUHJveHlJRDsKICAgICAgICAgaWYg
KCFwYWdlUHJveHlJRCkKQEAgLTY3LDcgKzYxLDcgQEAgc3RydWN0IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRDcmVhdGlvblBhcmFtZXRlcnMgewogICAgICAgICBpZiAoIXBhZ2VJRCkKICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICAgICAgcmV0dXJuIHt7ICppZGVudGlmaWVy
LCBXVEZNb3ZlKCpyZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZSksICpwYWdlUHJveHlJRCwgKnBh
Z2VJRCB9fTsKKyAgICAgICAgcmV0dXJuIHt7ICppZGVudGlmaWVyLCAqcGFnZVByb3h5SUQsICpw
YWdlSUQgfX07CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZS5oIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTRjODdjOGRkNWI1NTQ0MTk5MmZhNTE3NGJmMDhk
ZmQ2MmEyMTc3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
U3RhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWVudW0gY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlIDogdWludDhfdCB7Ci0g
ICAgSW5pdGlhbGl6ZWQsCi0gICAgQmVnYW5SZXBsYXlpbmdEaXNwbGF5TGlzdCwKLSAgICBGaW5p
c2hlZFJlcGxheWluZ0Rpc3BsYXlMaXN0LAotICAgIFdhaXRpbmdGb3JDYWNoZWRSZXNvdXJjZSwK
LSAgICBXYWl0aW5nRm9ySXRlbUJ1ZmZlciwKLSAgICBXYWl0aW5nRm9yRGVzdGluYXRpb25JbWFn
ZUJ1ZmZlciwKLX07Ci0KLUFMV0FZU19JTkxJTkUgY29uc3QgY2hhciogbmFtZShSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kU3RhdGUgc3RhdGUpCi17Ci0gICAgc3dpdGNoIChzdGF0ZSkgewotICAgIGNh
c2UgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpJbml0aWFsaXplZDoKLSAgICAgICAgcmV0
dXJuICJJbml0aWFsaXplZCI7Ci0gICAgY2FzZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGU6
OkJlZ2FuUmVwbGF5aW5nRGlzcGxheUxpc3Q6Ci0gICAgICAgIHJldHVybiAiQmVnYW5SZXBsYXlp
bmdEaXNwbGF5TGlzdCI7Ci0gICAgY2FzZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGU6OkZp
bmlzaGVkUmVwbGF5aW5nRGlzcGxheUxpc3Q6Ci0gICAgICAgIHJldHVybiAiRmluaXNoZWRSZXBs
YXlpbmdEaXNwbGF5TGlzdCI7Ci0gICAgY2FzZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGU6
OldhaXRpbmdGb3JDYWNoZWRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuICJXYWl0aW5nRm9yQ2Fj
aGVkUmVzb3VyY2UiOwotICAgIGNhc2UgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpXYWl0
aW5nRm9ySXRlbUJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuICJXYWl0aW5nRm9ySXRlbUJ1ZmZlciI7
Ci0gICAgY2FzZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGU6OldhaXRpbmdGb3JEZXN0aW5h
dGlvbkltYWdlQnVmZmVyOgotICAgICAgICByZXR1cm4gIldhaXRpbmdGb3JEZXN0aW5hdGlvbklt
YWdlQnVmZmVyIjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
ICJJbnZhbGlkIjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFC
TEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5jcHAKaW5kZXggNTIzOWYxNGRiMjIwMTBkODk2
ODQyZWRlODIwMzJhM2I4ZWEzMWY5MC4uMWQ1OTcyZDYzZWQ5YmM4OGY4OTJmNjEyOTE2MDkzYWZi
OWJjOWUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlc291cmNlQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmNwcApAQCAtNDksNyArNDksNyBAQCB2b2lkIFJlbW90
ZVJlc291cmNlQ2FjaGU6OmNhY2hlSW1hZ2VCdWZmZXIoUmVmPEltYWdlQnVmZmVyPiYmIGltYWdl
QnVmZmVyKQogICAgIGVuc3VyZVJlc291cmNlVXNlQ291bnRlcihyZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpOwogfQogCi1JbWFnZUJ1ZmZlciogUmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2FjaGVk
SW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikKK0ltYWdlQnVmZmVyKiBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZWRJbWFn
ZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKSBjb25zdAogewogICAgIHJldHVybiBtX2ltYWdlQnVmZmVycy5nZXQocmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKTsKIH0KQEAgLTYzLDYgKzYzLDExIEBAIHZvaWQgUmVtb3RlUmVz
b3VyY2VDYWNoZTo6Y2FjaGVOYXRpdmVJbWFnZShSZWY8TmF0aXZlSW1hZ2U+JiYgaW1hZ2UpCiAg
ICAgZW5zdXJlUmVzb3VyY2VVc2VDb3VudGVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7
CiB9CiAKK05hdGl2ZUltYWdlKiBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZWROYXRpdmVJbWFn
ZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KSBjb25zdAoreworICAgIHJldHVybiBtX25hdGl2ZUltYWdlcy5nZXQocmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKTsKK30KKwogdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZUZvbnQo
UmVmPEZvbnQ+JiYgZm9udCkKIHsKICAgICBhdXRvIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciA9IGZvbnQtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOwpAQCAtNzEsNiArNzYsMTEg
QEAgdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZUZvbnQoUmVmPEZvbnQ+JiYgZm9udCkK
ICAgICBlbnN1cmVSZXNvdXJjZVVzZUNvdW50ZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KTsKIH0KIAorRm9udCogUmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2FjaGVkRm9udChSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSBjb25zdAorewor
ICAgIHJldHVybiBtX2ZvbnRzLmdldChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworfQor
CiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OmVuc3VyZVJlc291cmNlVXNlQ291bnRlcihSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewog
ICAgIGF1dG8gcmVzdWx0ID0gbV9yZXNvdXJjZVVzZUNvdW50ZXJzLmFkZChyZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIFJlc291cmNlVXNlQ291bnRlciB7IH0pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuaCBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmgKaW5k
ZXggY2FiYzI1NjNmZGFkYTgyOWZlYmRhMzcyNTY2NjNiMmQ5YjdjNDFhYy4uMGU0MDcwOTJiYjQw
MWJkZWI2YzRhY2Q4M2UzNGJhZjljYjM4OWVkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oCkBAIC00Myw5ICs0
MywxMSBAQCBwdWJsaWM6CiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZShSZW1vdGVSZXNvdXJjZUNh
Y2hlJiYpOwogCiAgICAgdm9pZCBjYWNoZUltYWdlQnVmZmVyKFJlZjxXZWJDb3JlOjpJbWFnZUJ1
ZmZlcj4mJik7Ci0gICAgV2ViQ29yZTo6SW1hZ2VCdWZmZXIqIGNhY2hlZEltYWdlQnVmZmVyKFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgV2ViQ29yZTo6SW1hZ2VC
dWZmZXIqIGNhY2hlZEltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcikgY29uc3Q7CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKFJlZjxXZWJDb3JlOjpOYXRp
dmVJbWFnZT4mJik7CisgICAgV2ViQ29yZTo6TmF0aXZlSW1hZ2UqIGNhY2hlZE5hdGl2ZUltYWdl
KFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgY29uc3Q7CiAgICAgdm9pZCBj
YWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOworICAgIFdlYkNvcmU6OkZvbnQqIGNhY2hl
ZEZvbnQoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSBjb25zdDsKICAgICB2
b2lkIGRlbGV0ZUFsbEZvbnRzKCk7CiAgICAgYm9vbCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCk7CiAg
ICAgdm9pZCByZWNvcmRSZXNvdXJjZVVzZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRD
b2RlcnMuY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuY3Bw
CmluZGV4IGEzMjA1NTE4Nzk4Yjc0ZGNlZGI4YTAxM2Y5YzljOTg4NWFhZTY2MTYuLmU3ZjI3ODAz
NjJkZDIwMzc0MzRjYTFjYjM5MGRkZTZlZjc5MTU5MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudERlY29kZXIuaCIKICNpbmNsdWRlICJQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudEVuY29kZXIuaCIKICNpbmNsdWRlICJTdHJlYW1Db25uZWN0aW9uRW5jb2Rl
ci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTIxOCw2
ICsyMTksNyBAQCBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBBcmd1bWVudENvZGVyPFNIQTE6OkRp
Z2VzdD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTSAogfQogCiAjaWYgSEFWRShBVURJVF9U
T0tFTikKKwogdm9pZCBBcmd1bWVudENvZGVyPGF1ZGl0X3Rva2VuX3Q+OjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgYXVkaXRfdG9rZW5fdCYgYXVkaXRUb2tlbikKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChhdWRpdFRva2VuLnZhbCk7IGkr
KykKQEAgLTIzMiwxNSArMjM0LDcgQEAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgQXJndW1lbnRD
b2RlcjxhdWRpdF90b2tlbl90Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIGEKICAgICB9CiAg
ICAgcmV0dXJuIHRydWU7CiB9Ci0jZW5kaWYKLQotdm9pZCBBcmd1bWVudENvZGVyPE1vbm9zdGF0
ZT46OmVuY29kZShFbmNvZGVyJiwgY29uc3QgTW9ub3N0YXRlJikKLXsKLX0KIAotV0FSTl9VTlVT
RURfUkVUVVJOIHN0ZDo6b3B0aW9uYWw8TW9ub3N0YXRlPiBBcmd1bWVudENvZGVyPE1vbm9zdGF0
ZT46OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4gTW9ub3N0YXRlIHsgfTsKLX0KKyNl
bmRpZiAvLyBIQVZFKEFVRElUX1RPS0VOKQogCiB9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCmluZGV4IDQ3OWRiNjBlZGMyNzE2
ZDU1NjA2ZjY1MmYyNDMxYWQzNjlmNjU3MGMuLmQxYjEyMTg2M2NlYzUyNjRlMjM5YjBiYWNkNTNj
MDgzZTIwYTUwMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3Vt
ZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rl
cnMuaApAQCAtNDEsNiArNDEsMjIgQEAKIAogbmFtZXNwYWNlIElQQyB7CiAKKyNkZWZpbmUgREVG
SU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihUeXBlKSBcCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxUeXBlPiB7IFwKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rl
cj4gdm9pZCBzdGF0aWMgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFR5cGUmIHZhbHVl
KSB7IFNpbXBsZUFyZ3VtZW50Q29kZXI8VHlwZT46OmVuY29kZShlbmNvZGVyLCB2YWx1ZSk7IH0g
XAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBib29sIHN0YXRpYyBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgVHlwZSYgdmFsdWUpIHsgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29k
ZXI8VHlwZT46OmRlY29kZShkZWNvZGVyLCB2YWx1ZSk7IH0gXAorICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxUeXBlPiBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikgXAorICAgICAgICB7IFwKKyAgICAgICAgICAgIFR5cGUgdmFsdWU7IFwKKyAg
ICAgICAgICAgIGlmICghZGVjb2RlKGRlY29kZXIsIHZhbHVlKSkgXAorICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7IFwKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsgXAorICAg
ICAgICB9IFwKKyAgICB9OyBcCisgICAgdGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPFR5cGU+
OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIGNvbnN0IFR5cGUmKTsgXAorICAgIHRlbXBsYXRl
IGJvb2wgQXJndW1lbnRDb2RlcjxUeXBlPjo6ZGVjb2RlPERlY29kZXI+KERlY29kZXImLCBUeXBl
Jik7IFwKKyAgICB0ZW1wbGF0ZSBzdGQ6Om9wdGlvbmFsPFR5cGU+IEFyZ3VtZW50Q29kZXI8VHlw
ZT46OmRlY29kZTxEZWNvZGVyPihEZWNvZGVyJik7CisKIC8vIEFuIGFyZ3VtZW50IGNvZGVyIHdv
cmtzIG9uIFBPRCB0eXBlcwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFNpbXBsZUFyZ3Vt
ZW50Q29kZXIgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CkBAIC00OSw2ICs2NSw3
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTaW1wbGVBcmd1bWVudENvZGVyIHsKICAg
ICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oJnQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpOwogICAgIH0KIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIERlY29kZXI+CiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBi
b29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBUJiB0KQogICAgIHsKICAgICAgICAgcmV0dXJu
IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KCZ0KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKQEAgLTEwOCwxMiArMTI1LDE0IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGVyPEFycmF5UmVmZXJlbmNlPFQsIGFy
cmF5UmVmZXJlbmNlRHluYW1pCiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJn
dW1lbnRDb2RlcjxPcHRpb25TZXQ8VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVy
PgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBPcHRpb25T
ZXQ8VD4mIG9wdGlvblNldCkKICAgICB7CiAgICAgICAgIEFTU0VSVChXVEY6OmlzVmFsaWRPcHRp
b25TZXQob3B0aW9uU2V0KSk7CiAgICAgICAgIGVuY29kZXIgPDwgb3B0aW9uU2V0LnRvUmF3KCk7
CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4KICAgICBzdGF0aWMgV0FS
Tl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIE9wdGlvblNldDxU
PiYgb3B0aW9uU2V0KQogICAgIHsKICAgICAgICAgdHlwZW5hbWUgT3B0aW9uU2V0PFQ+OjpTdG9y
YWdlVHlwZSB2YWx1ZTsKQEAgLTEyNSw2ICsxNDQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxPcHRpb25TZXQ8VD4+IHsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4KICAgICBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxPcHRpb25TZXQ8VD4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsK
ICAgICAgICAgc3RkOjpvcHRpb25hbDx0eXBlbmFtZSBPcHRpb25TZXQ8VD46OlN0b3JhZ2VUeXBl
PiB2YWx1ZTsKQEAgLTE4OCw2ICsyMDgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxzdGQ6Om9wdGlvbmFsPFQ+PiB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxCb3g8VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBCb3g8VD4mIGJveCkKICAgICB7CiAgICAgICAgIGlmICghYm94KSB7CkBAIC0xOTksNiArMjIw
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8Qm94PFQ+PiB7
CiAgICAgICAgIGVuY29kZXIgPDwgKmJveC5nZXQoKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBEZWNvZGVyPgogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgQm94PFQ+JiBib3gpCiAgICAgewogICAgICAgICBib29sIGlz
RW5nYWdlZDsKQEAgLTIxOCw2ICsyNDAsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxCb3g8VD4+IHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4KICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxC
b3g8VD4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgc3RkOjpvcHRp
b25hbDxib29sPiBpc0VuZ2FnZWQ7CkBAIC0yMzYsMTEgKzI1OSwxMyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxCb3g8VD4+IHsKIH07CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0cnVjdCBBcmd1bWVudENvZGVyPHN0ZDo6cGFpcjxULCBV
Pj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CiAgICAgc3RhdGljIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6cGFpcjxULCBVPiYgcGFpcikKICAgICB7
CiAgICAgICAgIGVuY29kZXIgPDwgcGFpci5maXJzdCA8PCBwYWlyLnNlY29uZDsKICAgICB9CiAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9S
RVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwgc3RkOjpwYWlyPFQsIFU+JiBwYWly
KQogICAgIHsKICAgICAgICAgVCBmaXJzdDsKQEAgLTI1Niw2ICsyODEsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxzdGQ6OnBhaXI8VCwg
VT4+IHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRGVjb2Rlcj4KICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8VCwgVT4+IGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgc3RkOjpvcHRpb25hbDxUPiBm
aXJzdDsKQEAgLTM2NiwxMSArMzkyLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEVsZW1lbnRz
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxzdGQ6OnR1cGxlPEVsZW1lbnRzLi4uPj4gewogfTsKIAog
dGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBzdHJ1Y3QgQXJn
dW1lbnRDb2RlcjxXVEY6OktleVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+PiB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYg
cGFpcikKICAgICB7CiAgICAgICAgIGVuY29kZXIgPDwgcGFpci5rZXkgPDwgcGFpci52YWx1ZTsK
ICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgogICAgIHN0YXRpYyBXQVJO
X1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV1RGOjpLZXlWYWx1
ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFpcikKICAgICB7CiAgICAgICAgIEtleVR5cGUg
a2V5OwpAQCAtMzk4LDYgKzQyNiw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluCiAgICAgICAg
ICAgICBlbmNvZGVyIDw8IHZlY3RvcltpXTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBEZWNvZGVyPgogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVj
b2RlciYgZGVjb2RlciwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIs
IG1pbkNhcGFjaXR5PiYgdmVjdG9yKQogICAgIHsKICAgICAgICAgc3RkOjpvcHRpb25hbDxWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+PiBvcHRp
b25hbDsKQEAgLTQzNyw2ICs0NjYsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbgogICAgICAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25v
ZihUKSk7CiAgICAgfQogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+CiAgICAg
c3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiB2
ZWN0b3IpCiAgICAgewogICAgICAgICB1aW50NjRfdCBkZWNvZGVkU2l6ZTsKQEAgLTQ1MSw3ICs0
ODEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbgogICAgICAgICAvLyBTaW5jZSB3ZSBrbm93
IHRoZSB0b3RhbCBzaXplIG9mIHRoZSBlbGVtZW50cywgd2UgY2FuIGFsbG9jYXRlIHRoZSB2ZWN0
b3IgaW4KICAgICAgICAgLy8gb25lIGZlbGwgc3dvb3AuIEJlZm9yZSBhbGxvY2F0aW5nIHdlIG11
c3QgaG93ZXZlciBtYWtlIHN1cmUgdGhhdCB0aGUgZGVjb2RlciBidWZmZXIKICAgICAgICAgLy8g
aXMgYmlnIGVub3VnaC4KLSAgICAgICAgaWYgKCFkZWNvZGVyLmJ1ZmZlcklzTGFyZ2VFbm91Z2hU
b0NvbnRhaW48VD4oc2l6ZSkpCisgICAgICAgIGlmICghZGVjb2Rlci50ZW1wbGF0ZSBidWZmZXJJ
c0xhcmdlRW5vdWdoVG9Db250YWluPFQ+KHNpemUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT4gdGVtcDsKQEAgLTQ5OCw2ICs1MjgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbgogdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVu
YW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRz
QXJnLCB0eXBlbmFtZSBIYXNoVGFibGVUcmFpdHM+IHN0cnVjdCBBcmd1bWVudENvZGVyPEhhc2hN
YXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRz
QXJnLCBIYXNoVGFibGVUcmFpdHM+PiB7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEtleUFyZywgTWFw
cGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgSGFzaFRhYmxl
VHJhaXRzPiBIYXNoTWFwVHlwZTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CiAg
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEhhc2hNYXBUeXBl
JiBoYXNoTWFwKQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oaGFzaE1hcC5zaXplKCkpOwpAQCAtNTA1LDYgKzUzNiw3IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpCiAgICAgICAgICAgICBlbmNvZGVyIDw8ICppdDsKICAgICB9CiAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBEZWNvZGVyPgogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEhhc2hNYXBUeXBl
PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAgICAgIHVpbnQzMl90IGhhc2hN
YXBTaXplOwpAQCAtNTM1LDYgKzU2Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlw
ZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpCiAgICAg
ICAgIHJldHVybiBoYXNoTWFwOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29k
ZXI+CiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyLCBIYXNoTWFwVHlwZSYgaGFzaE1hcCkKICAgICB7CiAgICAgICAgIHN0ZDo6b3B0aW9u
YWw8SGFzaE1hcFR5cGU+IHRlbXBIYXNoTWFwOwpAQCAtNTQ5LDYgKzU4Miw3IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBLZXlUcmFpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIEhhc2hB
cmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgSGFzaFRhYmxlVHJhaXRzPiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxIYXNoU2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBI
YXNoVGFibGVUcmFpdHM+PiB7CiAgICAgdHlwZWRlZiBIYXNoU2V0PEtleUFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBIYXNoVGFibGVUcmFpdHM+IEhhc2hTZXRUeXBlOwogCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgSGFzaFNldFR5cGUmIGhhc2hTZXQpCiAgICAgewogICAgICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihoYXNoU2V0LnNpemUoKSk7CkBAIC01NTYsNiArNTkw
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFt
ZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIEhhc2gKICAgICAgICAgICAgIGVuY29kZXIgPDwgKml0
OwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+CiAgICAgc3RhdGljIFdB
Uk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBIYXNoU2V0VHlw
ZSYgaGFzaFNldCkKICAgICB7CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8SGFzaFNldFR5cGU+IHRl
bXBIYXNoU2V0OwpAQCAtNTY3LDYgKzYwMiw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBIYXNoCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29k
ZXI+CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SGFzaFNldFR5cGU+IGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgdWludDY0X3QgaGFzaFNldFNpemU7CkBAIC01OTYs
NiArNjMyLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIEhhc2gKIHRlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnPiBzdHJ1Y3QgQXJn
dW1lbnRDb2RlcjxIYXNoQ291bnRlZFNldDxLZXlBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZz4+
IHsKICAgICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRz
QXJnPiBIYXNoQ291bnRlZFNldFR5cGU7CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5j
b2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSGFz
aENvdW50ZWRTZXRUeXBlJiBoYXNoQ291bnRlZFNldCkKICAgICB7CiAgICAgICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGhhc2hDb3VudGVkU2V0LnNpemUoKSk7CkBAIC02MDYs
NiArNjQzLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBLZXlUcmFpdHNBcmc+IHN0cnVjdCBBcmd1bWUKICAgICAgICAgfQogICAgIH0KICAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgogICAgIHN0YXRpYyBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaENvdW50ZWRTZXRUeXBl
JiBoYXNoQ291bnRlZFNldCkKICAgICB7CiAgICAgICAgIHVpbnQ2NF90IGhhc2hDb3VudGVkU2V0
U2l6ZTsKQEAgLTYzNyw2ICs2NzUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVu
YW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZz4gc3RydWN0IEFyZ3VtZQogfTsKIAog
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBFcnJvclR5cGU+IHN0cnVjdCBB
cmd1bWVudENvZGVyPEV4cGVjdGVkPFZhbHVlVHlwZSwgRXJyb3JUeXBlPj4geworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEVuY29kZXI+CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IEV4cGVjdGVkPFZhbHVlVHlwZSwgRXJyb3JUeXBlPiYgZXhwZWN0ZWQpCiAg
ICAgewogICAgICAgICBpZiAoIWV4cGVjdGVkLmhhc192YWx1ZSgpKSB7CkBAIC02NDgsNiArNjg3
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBFcnJvclR5cGU+IHN0
cnVjdCBBcmd1bWVudENvZGVyPEV4cGVjdGVkPFYKICAgICAgICAgZW5jb2RlciA8PCBleHBlY3Rl
ZC52YWx1ZSgpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+CiAgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8RXhwZWN0ZWQ8VmFsdWVUeXBlLCBFcnJvclR5cGU+PiBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4g
aGFzVmFsdWU7CkBAIC03MDQsNiArNzQ0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgRXJyb3JUeXBl
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxFeHBlY3RlZDx2b2lkLCBFcnJvclR5cGU+PiB7CiAKIHRl
bXBsYXRlPHNpemVfdCBpbmRleCwgdHlwZW5hbWUuLi4gVHlwZXM+CiBzdHJ1Y3QgVmFyaWFudENv
ZGVyIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+JiB2YXJp
YW50LCB1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgaWYgKGkgPT0gaW5kZXgpIHsKQEAgLTcx
Myw2ICs3NTQsNyBAQCBzdHJ1Y3QgVmFyaWFudENvZGVyIHsKICAgICAgICAgVmFyaWFudENvZGVy
PGluZGV4IC0gMSwgVHlwZXMuLi4+OjplbmNvZGUoZW5jb2RlciwgdmFyaWFudCwgaSk7CiAgICAg
fQogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+CiAgICAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8V1RGOjpWYXJpYW50PFR5cGVzLi4uPj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IHVuc2lnbmVkIGkpCiAgICAgewogICAgICAgICBpZiAoaSA9PSBpbmRleCkgewpAQCAtNzI4LDEy
ICs3NzAsMTQgQEAgc3RydWN0IFZhcmlhbnRDb2RlciB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IFR5cGVzPgogc3RydWN0IFZhcmlhbnRDb2RlcjwwLCBUeXBlcy4uLj4geworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEVuY29kZXI+CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFdURjo6VmFyaWFudDxUeXBlcy4uLj4mIHZhcmlhbnQsIHVuc2lnbmVkIGkpCiAg
ICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGksICFpKTsKICAgICAgICAgZW5jb2RlciA8PCBX
VEY6OmdldDwwPih2YXJpYW50KTsKICAgICB9CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RGVjb2Rlcj4KICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+
PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgdW5zaWduZWQgaSkKICAgICB7CiAgICAgICAgIEFT
U0VSVF9VTlVTRUQoaSwgIWkpOwpAQCAtNzQ2LDYgKzc5MCw3IEBAIHN0cnVjdCBWYXJpYW50Q29k
ZXI8MCwgVHlwZXMuLi4+IHsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+PiB7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgV1RGOjpWYXJpYW50PFR5cGVzLi4uPiYgdmFyaWFudCkKICAgICB7CiAgICAgICAg
IHVuc2lnbmVkIGkgPSB2YXJpYW50LmluZGV4KCk7CkBAIC03NTMsNiArNzk4LDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gVHlwZXM+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdURjo6VmFyaWFudDxU
eXBlcy4uLj4+IHsKICAgICAgICAgVmFyaWFudENvZGVyPHNpemVvZi4uLihUeXBlcykgLSAxLCBU
eXBlcy4uLj46OmVuY29kZShlbmNvZGVyLCB2YXJpYW50LCBpKTsKICAgICB9CiAgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4KICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxXVEY6
OlZhcmlhbnQ8VHlwZXMuLi4+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAg
ICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGk7CkBAIC04MDQsOCArODUwLDE0IEBAIHRlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8YXVkaXRfdG9rZW5fdD4gewogI2VuZGlmCiAKIHRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8TW9ub3N0YXRlPiB7Ci0gICAgc3RhdGljIHZv
aWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBNb25vc3RhdGUmKTsKLSAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxNb25vc3RhdGU+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRW5jb2Rlcj4KKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IE1vbm9z
dGF0ZSYpIHsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4KKyAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxNb25vc3RhdGU+IGRlY29kZShEZWNvZGVyJikKKyAgICB7CisgICAgICAg
IHJldHVybiBNb25vc3RhdGUgeyB9OworICAgIH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIElQQwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29ubmVj
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1DbGllbnRDb25uZWN0
aW9uLmNwcAppbmRleCBjNzkxYWRkNGUwMWEyOWU3NTJkYzJlZGE1YmMwZjFlZjViZWY5OTRiLi5m
ODI4NzY5NTZiNDkxZWI0MWNjYzNlNzJlNGQ2MzZmMzgzY2VlMDllIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1DbGllbnRDb25uZWN0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1DbGllbnRDb25uZWN0aW9uLmNwcApAQCAt
NDYsOCArNDYsMzYgQEAgdm9pZCBTdHJlYW1DbGllbnRDb25uZWN0aW9uOjpzZXRXYWtlVXBTZW1h
cGhvcmUoSVBDOjpTZW1hcGhvcmUmJiBzZW1hcGhvcmUpCiAKIHZvaWQgU3RyZWFtQ2xpZW50Q29u
bmVjdGlvbjo6d2FrZVVwU2VydmVyKCkKIHsKLSAgICBpZiAobV93YWtlVXBTZW1hcGhvcmUpCi0g
ICAgICAgIG1fd2FrZVVwU2VtYXBob3JlLT5zaWduYWwoKTsKKyAgICBpZiAoIW1fd2FrZVVwU2Vt
YXBob3JlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3dha2VVcFNlbWFwaG9yZS0+c2lnbmFs
KCk7CisgICAgbV9yZW1haW5pbmdNZXNzYWdlQ291bnRCZWZvcmVTZW5kaW5nV2FrZVVwID0gMDsK
K30KKwordm9pZCBTdHJlYW1DbGllbnRDb25uZWN0aW9uOjpkZWZlcnJlZFdha2VVcFNlcnZlcigp
Cit7CisgICAgaWYgKHdha2VVcE1lc3NhZ2VIeXN0ZXJlc2lzKQorICAgICAgICBtX3JlbWFpbmlu
Z01lc3NhZ2VDb3VudEJlZm9yZVNlbmRpbmdXYWtlVXAgPSB3YWtlVXBNZXNzYWdlSHlzdGVyZXNp
czsKKyAgICBlbHNlCisgICAgICAgIHdha2VVcFNlcnZlcigpOworfQorCit2b2lkIFN0cmVhbUNs
aWVudENvbm5lY3Rpb246OmRlY3JlbWVudFJlbWFpbmluZ01lc3NhZ2VDb3VudEJlZm9yZVNlbmRp
bmdXYWtlVXAoKQoreworICAgIGlmICghbV9yZW1haW5pbmdNZXNzYWdlQ291bnRCZWZvcmVTZW5k
aW5nV2FrZVVwKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIS0tbV9yZW1haW5pbmdNZXNz
YWdlQ291bnRCZWZvcmVTZW5kaW5nV2FrZVVwKQorICAgICAgICB3YWtlVXBTZXJ2ZXIoKTsKK30K
Kwordm9pZCBTdHJlYW1DbGllbnRDb25uZWN0aW9uOjpzZW5kRGVmZXJyZWRXYWtlVXBNZXNzYWdl
KCkKK3sKKyAgICBpZiAoIW1fcmVtYWluaW5nTWVzc2FnZUNvdW50QmVmb3JlU2VuZGluZ1dha2VV
cCkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2FrZVVwU2VydmVyKCk7CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNsaWVudENvbm5lY3Rpb24u
aCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNsaWVudENvbm5lY3Rpb24uaApp
bmRleCAzZTJjMjRhYzk0NzdlODRlMGJhMzcxMTQ2NDgyN2JhYWU4ZTM5ZDI1Li44NzYwMzZiMWIx
MDc3MTlkNGUwNTRmZTAxZjYxMjg2OGVhNjA0MTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9TdHJlYW1DbGllbnRDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29ubmVjdGlvbi5oCkBAIC00Nyw2ICs0Nyw3IEBA
IG5hbWVzcGFjZSBJUEMgewogLy8KIC8vIFRoZSBTdHJlYW1DbGllbnRDb25uZWN0aW9uIHRydXN0
cyB0aGUgU3RyZWFtU2VydmVyQ29ubmVjdGlvbi4KIGNsYXNzIFN0cmVhbUNsaWVudENvbm5lY3Rp
b24gZmluYWwgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFN0cmVhbUNsaWVudENvbm5lY3Rpb24pOwogcHVibGljOgogICAgIFN0cmVhbUNs
aWVudENvbm5lY3Rpb24oQ29ubmVjdGlvbiYsIHNpemVfdCBidWZmZXJTaXplKTsKQEAgLTU0LDYg
KzU1LDggQEAgcHVibGljOgogICAgIFN0cmVhbUNvbm5lY3Rpb25CdWZmZXImIHN0cmVhbUJ1ZmZl
cigpIHsgcmV0dXJuIG1fYnVmZmVyOyB9CiAgICAgdm9pZCBzZXRXYWtlVXBTZW1hcGhvcmUoSVBD
OjpTZW1hcGhvcmUmJik7CiAKKyAgICB2b2lkIHNlbmREZWZlcnJlZFdha2VVcE1lc3NhZ2UoKTsK
KwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGJvb2wgc2VuZChUJiYgbWVz
c2FnZSwgT2JqZWN0SWRlbnRpZmllcjxVPiBkZXN0aW5hdGlvbklELCBUaW1lb3V0KTsKIAogICAg
IHVzaW5nIFNlbmRTeW5jUmVzdWx0ID0gQ29ubmVjdGlvbjo6U2VuZFN5bmNSZXN1bHQ7CkBAIC02
NSw2ICs2OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVpbnQ4X3QqIGRhdGE7CiAgICAgICAgIHNp
emVfdCBzaXplOwogICAgIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB3YWtlVXBN
ZXNzYWdlSHlzdGVyZXNpcyA9IDI1NjsKICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBtaW5p
bXVtTWVzc2FnZVNpemUgPSBTdHJlYW1Db25uZWN0aW9uRW5jb2Rlcjo6bWluaW11bU1lc3NhZ2VT
aXplOwogICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1lc3NhZ2VBbGlnbm1lbnQgPSBTdHJl
YW1Db25uZWN0aW9uRW5jb2Rlcjo6bWVzc2FnZUFsaWdubWVudDsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgpAQCAtODMsNiArODcsOCBAQCBwcml2YXRlOgogICAgIH07CiAgICAgV2FrZVVwU2Vy
dmVyIHJlbGVhc2Uoc2l6ZV90IHdyaXRlU2l6ZSk7CiAgICAgdm9pZCB3YWtlVXBTZXJ2ZXIoKTsK
KyAgICB2b2lkIGRlZmVycmVkV2FrZVVwU2VydmVyKCk7CisgICAgdm9pZCBkZWNyZW1lbnRSZW1h
aW5pbmdNZXNzYWdlQ291bnRCZWZvcmVTZW5kaW5nV2FrZVVwKCk7CiAKICAgICBTcGFuIGFsaWdu
ZWRTcGFuKHNpemVfdCBvZmZzZXQsIHNpemVfdCBsaW1pdCk7CiAgICAgc2l6ZV90IHNpemUoc2l6
ZV90IG9mZnNldCwgc2l6ZV90IGxpbWl0KTsKQEAgLTEwMyw2ICsxMDksNyBAQCBwcml2YXRlOgog
ICAgIHNpemVfdCBtX2NsaWVudE9mZnNldCB7IDAgfTsKICAgICBTdHJlYW1Db25uZWN0aW9uQnVm
ZmVyIG1fYnVmZmVyOwogICAgIHN0ZDo6b3B0aW9uYWw8U2VtYXBob3JlPiBtX3dha2VVcFNlbWFw
aG9yZTsKKyAgICB1bnNpZ25lZCBtX3JlbWFpbmluZ01lc3NhZ2VDb3VudEJlZm9yZVNlbmRpbmdX
YWtlVXAgeyAwIH07CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgpAQCAt
MTMxLDcgKzEzOCw5IEBAIGJvb2wgU3RyZWFtQ2xpZW50Q29ubmVjdGlvbjo6dHJ5U2VuZFN0cmVh
bShUJiBtZXNzYWdlLCBTcGFuJiBzcGFuKQogICAgIGlmIChtZXNzYWdlRW5jb2RlciA8PCBtZXNz
YWdlLmFyZ3VtZW50cygpKSB7CiAgICAgICAgIGF1dG8gd2FrZXVwUmVzdWx0ID0gcmVsZWFzZSht
ZXNzYWdlRW5jb2Rlci5zaXplKCkpOwogICAgICAgICBpZiAod2FrZXVwUmVzdWx0ID09IFN0cmVh
bUNsaWVudENvbm5lY3Rpb246Oldha2VVcFNlcnZlcjo6WWVzKQotICAgICAgICAgICAgd2FrZVVw
U2VydmVyKCk7CisgICAgICAgICAgICBkZWZlcnJlZFdha2VVcFNlcnZlcigpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBkZWNyZW1lbnRSZW1haW5pbmdNZXNzYWdlQ291bnRCZWZvcmVTZW5k
aW5nV2FrZVVwKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFs
c2U7CkBAIC0xNzIsNiArMTgxLDggQEAgc3RkOjpvcHRpb25hbDxTdHJlYW1DbGllbnRDb25uZWN0
aW9uOjpTZW5kU3luY1Jlc3VsdD4gU3RyZWFtQ2xpZW50Q29ubmVjdGlvbjo6dHIKIAogICAgICAg
ICBpZiAod2FrZXVwUmVzdWx0ID09IFN0cmVhbUNsaWVudENvbm5lY3Rpb246Oldha2VVcFNlcnZl
cjo6WWVzKQogICAgICAgICAgICAgd2FrZVVwU2VydmVyKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHNlbmREZWZlcnJlZFdha2VVcE1lc3NhZ2UoKTsKICAgICAgICAgaWYgY29uc3RleHBy
KFQ6OmlzUmVwbHlTdHJlYW1FbmNvZGFibGUpIHsKICAgICAgICAgICAgIGF1dG8gcmVwbHlTcGFu
ID0gdHJ5QWNxdWlyZUFsbCh0aW1lb3V0KTsKICAgICAgICAgICAgIGlmICghcmVwbHlTcGFuKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtTWVzc2FnZVJlY2Vp
dmVyLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1NZXNzYWdlUmVjZWl2ZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kYzcyZjYxMmQwOWI4NjJkMjY3YjdhZjZlMjU2Y2E2MmVmNjI5ODdhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtTWVzc2Fn
ZVJlY2VpdmVyLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIElQQyB7CisKK2NsYXNzIFN0
cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlOworY2xhc3MgRGVjb2RlcjsKKworY2xhc3MgU3RyZWFt
TWVzc2FnZVJlY2VpdmVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFN0cmVhbU1lc3Nh
Z2VSZWNlaXZlcj4geworcHVibGljOgorICAgIHZpcnR1YWwgflN0cmVhbU1lc3NhZ2VSZWNlaXZl
cigpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVTdHJlYW1NZXNzYWdlKFN0cmVh
bVNlcnZlckNvbm5lY3Rpb25CYXNlJiwgRGVjb2RlciYpID0gMDsKK307CisKK30gLy8gbmFtZXNw
YWNlIElQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2Vy
dmVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1TZXJ2
ZXJDb25uZWN0aW9uLmNwcAppbmRleCA2OTcxMjA5NWQ5NmRkNzMwMjU5MjU0NTgyOGNlNWMyMjE1
ZmUxMTczLi5hZmRmZGIwMGYzZDlhODU3ZGQwOTQ1OWVhY2IyZjFhM2MxYWI0M2FlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9u
LmNwcApAQCAtMTQxLDQgKzE0MSwxNDIgQEAgc2l6ZV90IFN0cmVhbVNlcnZlckNvbm5lY3Rpb25C
YXNlOjpjbGFtcGVkTGltaXQoU2VydmVyTGltaXQgc2VydmVyTGltaXQpIGNvbnN0CiAgICAgcmV0
dXJuIHN0ZDo6bWluKGxpbWl0LCBkYXRhU2l6ZSgpIC0gMSk7CiB9CiAKK3ZvaWQgU3RyZWFtU2Vy
dmVyQ29ubmVjdGlvbjo6c3RhcnRSZWNlaXZpbmdNZXNzYWdlcyhTdHJlYW1NZXNzYWdlUmVjZWl2
ZXImIHJlY2VpdmVyLCBSZWNlaXZlck5hbWUgcmVjZWl2ZXJOYW1lLCB1aW50NjRfdCBkZXN0aW5h
dGlvbklEKQoreworICAgIHsKKyAgICAgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihzdGF0
aWNfY2FzdDx1aW50OF90PihyZWNlaXZlck5hbWUpLCBkZXN0aW5hdGlvbklEKTsKKyAgICAgICAg
TG9ja2VyIGxvY2tlciB7IG1fcmVjZWl2ZXJzTG9jayB9OworICAgICAgICBBU1NFUlQoIW1fcmVj
ZWl2ZXJzLmNvbnRhaW5zKGtleSkpOworICAgICAgICBtX3JlY2VpdmVycy5hZGQoa2V5LCByZWNl
aXZlcik7CisgICAgfQorICAgIFN0cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlOjpzdGFydFJlY2Vp
dmluZ01lc3NhZ2VzSW1wbChyZWNlaXZlck5hbWUsIGRlc3RpbmF0aW9uSUQpOworfQorCit2b2lk
IFN0cmVhbVNlcnZlckNvbm5lY3Rpb246OnN0b3BSZWNlaXZpbmdNZXNzYWdlcyhSZWNlaXZlck5h
bWUgcmVjZWl2ZXJOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKQoreworICAgIFN0cmVhbVNl
cnZlckNvbm5lY3Rpb25CYXNlOjpzdG9wUmVjZWl2aW5nTWVzc2FnZXNJbXBsKHJlY2VpdmVyTmFt
ZSwgZGVzdGluYXRpb25JRCk7CisgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihzdGF0aWNf
Y2FzdDx1aW50OF90PihyZWNlaXZlck5hbWUpLCBkZXN0aW5hdGlvbklEKTsKKyAgICBMb2NrZXIg
bG9ja2VyIHsgbV9yZWNlaXZlcnNMb2NrIH07CisgICAgQVNTRVJUKG1fcmVjZWl2ZXJzLmNvbnRh
aW5zKGtleSkpOworICAgIG1fcmVjZWl2ZXJzLnJlbW92ZShrZXkpOworfQorCitTdHJlYW1TZXJ2
ZXJDb25uZWN0aW9uQmFzZTo6RGlzcGF0Y2hSZXN1bHQgU3RyZWFtU2VydmVyQ29ubmVjdGlvbjo6
ZGlzcGF0Y2hTdHJlYW1NZXNzYWdlcyhzaXplX3QgbWVzc2FnZUxpbWl0KQoreworICAgIFJlZlB0
cjxTdHJlYW1NZXNzYWdlUmVjZWl2ZXI+IGN1cnJlbnRSZWNlaXZlcjsKKyAgICAvLyBGSVhNRTog
SW1wbGVtZW50IFdURjo6aXNWYWxpZChSZWNlaXZlck5hbWUpLgorICAgIHVpbnQ4X3QgY3VycmVu
dFJlY2VpdmVyTmFtZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFJlY2VpdmVyTmFtZTo6SW52YWxp
ZCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1lc3NhZ2VMaW1pdDsgKytpKSB7Cisg
ICAgICAgIGF1dG8gc3BhbiA9IHRyeUFjcXVpcmUoKTsKKyAgICAgICAgaWYgKCFzcGFuKQorICAg
ICAgICAgICAgcmV0dXJuIERpc3BhdGNoUmVzdWx0OjpIYXNOb01lc3NhZ2VzOworICAgICAgICBJ
UEM6OkRlY29kZXIgZGVjb2RlciB7IHNwYW4tPmRhdGEsIHNwYW4tPnNpemUsIG1fY3VycmVudERl
c3RpbmF0aW9uSUQgfTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmlzVmFsaWQoKSkgeworICAgICAg
ICAgICAgbV9jb25uZWN0aW9uLT5kaXNwYXRjaERpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShkZWNv
ZGVyLm1lc3NhZ2VOYW1lKCkpOworICAgICAgICAgICAgcmV0dXJuIERpc3BhdGNoUmVzdWx0OjpI
YXNOb01lc3NhZ2VzOworICAgICAgICB9CisgICAgICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1l
KCkgPT0gTWVzc2FnZU5hbWU6OlNldFN0cmVhbURlc3RpbmF0aW9uSUQpIHsKKyAgICAgICAgICAg
IGlmICghcHJvY2Vzc1NldFN0cmVhbURlc3RpbmF0aW9uSUQoV1RGTW92ZShkZWNvZGVyKSwgY3Vy
cmVudFJlY2VpdmVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRGlzcGF0Y2hSZXN1bHQ6Okhh
c05vTWVzc2FnZXM7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VOYW1lOjpQcm9jZXNzT3V0T2ZTdHJl
YW1NZXNzYWdlKSB7CisgICAgICAgICAgICBpZiAoIWRpc3BhdGNoT3V0T2ZTdHJlYW1NZXNzYWdl
KFdURk1vdmUoZGVjb2RlcikpKQorICAgICAgICAgICAgICAgIHJldHVybiBEaXNwYXRjaFJlc3Vs
dDo6SGFzTm9NZXNzYWdlczsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIGlmIChjdXJyZW50UmVjZWl2ZXJOYW1lICE9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGRlY29k
ZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpKSkgeworICAgICAgICAgICAgY3VycmVudFJlY2VpdmVy
TmFtZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgp
KTsKKyAgICAgICAgICAgIGN1cnJlbnRSZWNlaXZlciA9IG51bGxwdHI7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFjdXJyZW50UmVjZWl2ZXIpIHsKKyAgICAgICAgICAgIGF1dG8ga2V5ID0gc3Rk
OjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8dWludDhfdD4oY3VycmVudFJlY2VpdmVyTmFtZSksIG1f
Y3VycmVudERlc3RpbmF0aW9uSUQpOworICAgICAgICAgICAgaWYgKCFSZWNlaXZlcnNNYXA6Omlz
VmFsaWRLZXkoa2V5KSkgeworICAgICAgICAgICAgICAgIG1fY29ubmVjdGlvbi0+ZGlzcGF0Y2hE
aWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoZGVjb2Rlci5tZXNzYWdlTmFtZSgpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gRGlzcGF0Y2hSZXN1bHQ6Okhhc05vTWVzc2FnZXM7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9yZWNlaXZlcnNMb2NrIH07CisgICAg
ICAgICAgICBjdXJyZW50UmVjZWl2ZXIgPSBtX3JlY2VpdmVycy5nZXQoa2V5KTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIWN1cnJlbnRSZWNlaXZlcikgeworICAgICAgICAgICAgLy8gVmFsaWQg
c2NlbmFyaW8gaXMgd2hlbiByZWNlaXZlciBoYXMgYmVlbiByZW1vdmVkLCBidXQgdGhlcmUgYXJl
IG1lc3NhZ2VzIGZvciBpdCBpbiB0aGUgYnVmZmVyLgorICAgICAgICAgICAgLy8gRklYTUU6IFNp
bmNlIHdlIGRvIG5vdCBoYXZlIGEgcmVjZWl2ZXIsIHdlIGRvbid0IGtub3cgaG93IHRvIGRlY29k
ZSB0aGUgbWVzc2FnZS4KKyAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2UgbXVzdCB0aW1lb3V0
IGV2ZXJ5IHJlY2VpdmVyIGluIHRoZSBzdHJlYW0gY29ubmVjdGlvbi4KKyAgICAgICAgICAgIC8v
IEN1cnJlbnRseSB3ZSBhc3NlcnQgdGhhdCB0aGUgcmVjZWl2ZXJzIGFyZSBlbXB0eSwgYXMgd2Ug
b25seSBoYXZlIHVwIHRvIG9uZSByZWNlaXZlciBpbgorICAgICAgICAgICAgLy8gYSBzdHJlYW0g
Y29ubmVjdGlvbiB1bnRpbCBwb3NzaWJpbGl0eSBvZiBza2lwcGluZyBpcyBpbXBsZW1lbnRlZCBw
cm9wZXJseS4KKyAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3JlY2VpdmVyc0xvY2sgfTsK
KyAgICAgICAgICAgIEFTU0VSVChtX3JlY2VpdmVycy5pc0VtcHR5KCkpOworICAgICAgICAgICAg
cmV0dXJuIERpc3BhdGNoUmVzdWx0OjpIYXNOb01lc3NhZ2VzOworICAgICAgICB9CisgICAgICAg
IGlmICghZGlzcGF0Y2hTdHJlYW1NZXNzYWdlKFdURk1vdmUoZGVjb2RlciksICpjdXJyZW50UmVj
ZWl2ZXIpKQorICAgICAgICAgICAgcmV0dXJuIERpc3BhdGNoUmVzdWx0OjpIYXNOb01lc3NhZ2Vz
OworICAgIH0KKyAgICByZXR1cm4gRGlzcGF0Y2hSZXN1bHQ6Okhhc01vcmVNZXNzYWdlczsKK30K
KworYm9vbCBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uOjpwcm9jZXNzU2V0U3RyZWFtRGVzdGluYXRp
b25JRChEZWNvZGVyJiYgZGVjb2RlciwgUmVmUHRyPFN0cmVhbU1lc3NhZ2VSZWNlaXZlcj4mIGN1
cnJlbnRSZWNlaXZlcikKK3sKKyAgICB1aW50NjRfdCBkZXN0aW5hdGlvbklEID0gMDsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGRlc3RpbmF0aW9uSUQpKSB7CisgICAgICAgIG1fY29ubmVjdGlv
bi0+ZGlzcGF0Y2hEaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoZGVjb2Rlci5tZXNzYWdlTmFtZSgp
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAobV9jdXJyZW50RGVzdGlu
YXRpb25JRCAhPSBkZXN0aW5hdGlvbklEKSB7CisgICAgICAgIG1fY3VycmVudERlc3RpbmF0aW9u
SUQgPSBkZXN0aW5hdGlvbklEOworICAgICAgICBjdXJyZW50UmVjZWl2ZXIgPSBudWxscHRyOwor
ICAgIH0KKyAgICByZWxlYXNlKGRlY29kZXIuY3VycmVudEJ1ZmZlclBvc2l0aW9uKCkpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFN0cmVhbVNlcnZlckNvbm5lY3Rpb246OmRpc3BhdGNo
U3RyZWFtTWVzc2FnZShEZWNvZGVyJiYgZGVjb2RlciwgU3RyZWFtTWVzc2FnZVJlY2VpdmVyJiBy
ZWNlaXZlcikKK3sKKyAgICBBU1NFUlQoIW1faXNEaXNwYXRjaGluZ1N0cmVhbU1lc3NhZ2UpOwor
ICAgIG1faXNEaXNwYXRjaGluZ1N0cmVhbU1lc3NhZ2UgPSB0cnVlOworICAgIHJlY2VpdmVyLmRp
ZFJlY2VpdmVTdHJlYW1NZXNzYWdlKCp0aGlzLCBkZWNvZGVyKTsKKyAgICBtX2lzRGlzcGF0Y2hp
bmdTdHJlYW1NZXNzYWdlID0gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmlzVmFsaWQoKSkgewor
ICAgICAgICBtX2Nvbm5lY3Rpb24tPmRpc3BhdGNoRGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKGRl
Y29kZXIubWVzc2FnZU5hbWUoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
aWYgKGRlY29kZXIuaXNTeW5jTWVzc2FnZSgpKQorICAgICAgICByZWxlYXNlQWxsKCk7CisgICAg
ZWxzZQorICAgICAgICByZWxlYXNlKGRlY29kZXIuY3VycmVudEJ1ZmZlclBvc2l0aW9uKCkpOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFN0cmVhbVNlcnZlckNvbm5lY3Rpb246OmRpc3Bh
dGNoT3V0T2ZTdHJlYW1NZXNzYWdlKERlY29kZXImJiBkZWNvZGVyKQoreworICAgIHN0ZDo6dW5p
cXVlX3B0cjxEZWNvZGVyPiBtZXNzYWdlOworICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7
IG1fb3V0T2ZTdHJlYW1NZXNzYWdlc0xvY2sgfTsKKyAgICAgICAgaWYgKG1fb3V0T2ZTdHJlYW1N
ZXNzYWdlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1l
c3NhZ2UgPSBtX291dE9mU3RyZWFtTWVzc2FnZXMudGFrZUZpcnN0KCk7CisgICAgfQorICAgIGlm
ICghbWVzc2FnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPFN0cmVhbU1l
c3NhZ2VSZWNlaXZlcj4gcmVjZWl2ZXI7CisgICAgeworICAgICAgICBhdXRvIGtleSA9IHN0ZDo6
bWFrZV9wYWlyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1lc3NhZ2UtPm1lc3NhZ2VSZWNlaXZlck5h
bWUoKSksIG1lc3NhZ2UtPmRlc3RpbmF0aW9uSUQoKSk7CisgICAgICAgIExvY2tlciBsb2NrZXIg
eyBtX3JlY2VpdmVyc0xvY2sgfTsKKyAgICAgICAgcmVjZWl2ZXIgPSBtX3JlY2VpdmVycy5nZXQo
a2V5KTsKKyAgICB9CisgICAgaWYgKHJlY2VpdmVyKSB7CisgICAgICAgIHJlY2VpdmVyLT5kaWRS
ZWNlaXZlU3RyZWFtTWVzc2FnZSgqdGhpcywgKm1lc3NhZ2UpOworICAgICAgICBpZiAoIW1lc3Nh
Z2UtPmlzVmFsaWQoKSkgeworICAgICAgICAgICAgbV9jb25uZWN0aW9uLT5kaXNwYXRjaERpZFJl
Y2VpdmVJbnZhbGlkTWVzc2FnZShtZXNzYWdlLT5tZXNzYWdlTmFtZSgpKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBJZiByZWNlaXZlciBkb2Vz
IG5vdCBleGlzdCBpZiBpdCBoYXMgYmVlbiByZW1vdmVkIGJ1dCBtZXNzYWdlcyBhcmUgc3RpbGwg
cGVuZGluZyB0byBiZQorICAgIC8vIHByb2Nlc3NlZC4gSXQncyBvayB0byBza2lwIHN1Y2ggbWVz
c2FnZXMuCisgICAgLy8gRklYTUU6IE5vdGUsIGNvcnJlc3BvbmRpbmcgc2tpcCBpcyBub3QgcG9z
c2libGUgYXQgdGhlIG1vbWVudCBmb3Igc3RyZWFtIG1lc3NhZ2VzLgorICAgIHJlbGVhc2UoZGVj
b2Rlci5jdXJyZW50QnVmZmVyUG9zaXRpb24oKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5l
Y3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rp
b24uaAppbmRleCBjOWM5YmI3NTlkYTNjOGM3ODE3NjdhYmQzZGEzZjZkZTA4YzI1ZWU1Li4zYzRh
ZTBkOGM3N2IyOTlmNDdmMDdhNGE3NWIwYWY1YWM5NDIyOGM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5oCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCiAjaW5jbHVkZSAiU3RyZWFtQ29ubmVj
dGlvbkJ1ZmZlci5oIgogI2luY2x1ZGUgIlN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgiCisjaW5j
bHVkZSAiU3RyZWFtTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAj
aW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CkBAIC0xMzEs
NyArMTMyLDYgQEAgdm9pZCBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZTo6c2VuZFN5bmNSZXBs
eShDb25uZWN0aW9uOjpTeW5jUmVxdWVzdElEIHN5bmNSZXEKIC8vICAgdm9pZCBkaWRSZWNlaXZl
U3RyZWFtTWVzc2FnZShTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZSYsIERlY29kZXImKTsKIC8v
CiAvLyBUaGUgU3RyZWFtU2VydmVyQ29ubmVjdGlvbiBkb2VzIG5vdCB0cnVzdCB0aGUgU3RyZWFt
Q2xpZW50Q29ubmVjdGlvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFJlY2VpdmVyPgogY2xhc3MgU3Ry
ZWFtU2VydmVyQ29ubmVjdGlvbiBmaW5hbCA6IHB1YmxpYyBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9u
QmFzZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uPiBj
cmVhdGUoQ29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmIHN0
cmVhbUJ1ZmZlciwgU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZSYgd29ya1F1ZXVlKQpAQCAtMTQw
LDcgKzE0MCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgflN0cmVhbVNlcnZlckNvbm5lY3Rpb24o
KSBmaW5hbCA9IGRlZmF1bHQ7CiAKLSAgICB2b2lkIHN0YXJ0UmVjZWl2aW5nTWVzc2FnZXMoUmVj
ZWl2ZXImLCBSZWNlaXZlck5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQpOworICAgIHZvaWQg
c3RhcnRSZWNlaXZpbmdNZXNzYWdlcyhTdHJlYW1NZXNzYWdlUmVjZWl2ZXImLCBSZWNlaXZlck5h
bWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQpOwogICAgIC8vIFN0b3BzIHRoZSBtZXNzYWdlIHJl
Y2VpcHQuIE5vdGU6IGFscmVhZHkgcmVjZWl2ZWQgbWVzc2FnZXMgbWlnaHQgc3RpbGwgYmUgZGVs
aXZlcmVkLgogICAgIHZvaWQgc3RvcFJlY2VpdmluZ01lc3NhZ2VzKFJlY2VpdmVyTmFtZSwgdWlu
dDY0X3QgZGVzdGluYXRpb25JRCk7CiAKQEAgLTE1MiwxNTcgKzE1MiwxMyBAQCBwcml2YXRlOgog
ICAgICAgICA6IFN0cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlKGNvbm5lY3Rpb24sIFdURk1vdmUo
c3RyZWFtQnVmZmVyKSwgd29ya1F1ZXVlKQogICAgIHsKICAgICB9Ci0gICAgYm9vbCBwcm9jZXNz
U2V0U3RyZWFtRGVzdGluYXRpb25JRChEZWNvZGVyJiYsIFJlZlB0cjxSZWNlaXZlcj4mIGN1cnJl
bnRSZWNlaXZlcik7Ci0gICAgYm9vbCBkaXNwYXRjaFN0cmVhbU1lc3NhZ2UoRGVjb2RlciYmLCBS
ZWNlaXZlciYpOworICAgIGJvb2wgcHJvY2Vzc1NldFN0cmVhbURlc3RpbmF0aW9uSUQoRGVjb2Rl
ciYmLCBSZWZQdHI8U3RyZWFtTWVzc2FnZVJlY2VpdmVyPiYgY3VycmVudFJlY2VpdmVyKTsKKyAg
ICBib29sIGRpc3BhdGNoU3RyZWFtTWVzc2FnZShEZWNvZGVyJiYsIFN0cmVhbU1lc3NhZ2VSZWNl
aXZlciYpOwogICAgIGJvb2wgZGlzcGF0Y2hPdXRPZlN0cmVhbU1lc3NhZ2UoRGVjb2RlciYmKTsK
ICAgICBMb2NrIG1fcmVjZWl2ZXJzTG9jazsKLSAgICB1c2luZyBSZWNlaXZlcnNNYXAgPSBIYXNo
TWFwPHN0ZDo6cGFpcjx1aW50OF90LCB1aW50NjRfdD4sIFJlZjxSZWNlaXZlcj4+OworICAgIHVz
aW5nIFJlY2VpdmVyc01hcCA9IEhhc2hNYXA8c3RkOjpwYWlyPHVpbnQ4X3QsIHVpbnQ2NF90Piwg
UmVmPFN0cmVhbU1lc3NhZ2VSZWNlaXZlcj4+OwogICAgIFJlY2VpdmVyc01hcCBtX3JlY2VpdmVy
cyBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fcmVjZWl2ZXJzTG9jayk7CiAgICAgdWludDY0X3QgbV9j
dXJyZW50RGVzdGluYXRpb25JRCB7IDAgfTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFJlY2Vp
dmVyPgotdm9pZCBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uPFJlY2VpdmVyPjo6c3RhcnRSZWNlaXZp
bmdNZXNzYWdlcyhSZWNlaXZlciYgcmVjZWl2ZXIsIFJlY2VpdmVyTmFtZSByZWNlaXZlck5hbWUs
IHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQpCi17Ci0gICAgewotICAgICAgICBhdXRvIGtleSA9IHN0
ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJlY2VpdmVyTmFtZSksIGRlc3RpbmF0
aW9uSUQpOwotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9yZWNlaXZlcnNMb2NrIH07Ci0gICAg
ICAgIEFTU0VSVCghbV9yZWNlaXZlcnMuY29udGFpbnMoa2V5KSk7Ci0gICAgICAgIG1fcmVjZWl2
ZXJzLmFkZChrZXksIHJlY2VpdmVyKTsKLSAgICB9Ci0gICAgU3RyZWFtU2VydmVyQ29ubmVjdGlv
bkJhc2U6OnN0YXJ0UmVjZWl2aW5nTWVzc2FnZXNJbXBsKHJlY2VpdmVyTmFtZSwgZGVzdGluYXRp
b25JRCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJlY2VpdmVyPgotdm9pZCBTdHJlYW1TZXJ2
ZXJDb25uZWN0aW9uPFJlY2VpdmVyPjo6c3RvcFJlY2VpdmluZ01lc3NhZ2VzKFJlY2VpdmVyTmFt
ZSByZWNlaXZlck5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQpCi17Ci0gICAgU3RyZWFtU2Vy
dmVyQ29ubmVjdGlvbkJhc2U6OnN0b3BSZWNlaXZpbmdNZXNzYWdlc0ltcGwocmVjZWl2ZXJOYW1l
LCBkZXN0aW5hdGlvbklEKTsKLSAgICBhdXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHJlY2VpdmVyTmFtZSksIGRlc3RpbmF0aW9uSUQpOwotICAgIExvY2tlciBs
b2NrZXIgeyBtX3JlY2VpdmVyc0xvY2sgfTsKLSAgICBBU1NFUlQobV9yZWNlaXZlcnMuY29udGFp
bnMoa2V5KSk7Ci0gICAgbV9yZWNlaXZlcnMucmVtb3ZlKGtleSk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFJlY2VpdmVyPgotU3RyZWFtU2VydmVyQ29ubmVjdGlvbkJhc2U6OkRpc3BhdGNoUmVz
dWx0IFN0cmVhbVNlcnZlckNvbm5lY3Rpb248UmVjZWl2ZXI+OjpkaXNwYXRjaFN0cmVhbU1lc3Nh
Z2VzKHNpemVfdCBtZXNzYWdlTGltaXQpCi17Ci0gICAgUmVmUHRyPFJlY2VpdmVyPiBjdXJyZW50
UmVjZWl2ZXI7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBXVEY6OmlzVmFsaWQoUmVjZWl2ZXJO
YW1lKS4KLSAgICB1aW50OF90IGN1cnJlbnRSZWNlaXZlck5hbWUgPSBzdGF0aWNfY2FzdDx1aW50
OF90PihSZWNlaXZlck5hbWU6OkludmFsaWQpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtZXNzYWdlTGltaXQ7ICsraSkgewotICAgICAgICBhdXRvIHNwYW4gPSB0cnlBY3F1aXJlKCk7
Ci0gICAgICAgIGlmICghc3BhbikKLSAgICAgICAgICAgIHJldHVybiBEaXNwYXRjaFJlc3VsdDo6
SGFzTm9NZXNzYWdlczsKLSAgICAgICAgSVBDOjpEZWNvZGVyIGRlY29kZXIgeyBzcGFuLT5kYXRh
LCBzcGFuLT5zaXplLCBtX2N1cnJlbnREZXN0aW5hdGlvbklEIH07Ci0gICAgICAgIGlmICghZGVj
b2Rlci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIG1fY29ubmVjdGlvbi0+ZGlzcGF0Y2hEaWRS
ZWNlaXZlSW52YWxpZE1lc3NhZ2UoZGVjb2Rlci5tZXNzYWdlTmFtZSgpKTsKLSAgICAgICAgICAg
IHJldHVybiBEaXNwYXRjaFJlc3VsdDo6SGFzTm9NZXNzYWdlczsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VOYW1lOjpTZXRTdHJlYW1EZXN0
aW5hdGlvbklEKSB7Ci0gICAgICAgICAgICBpZiAoIXByb2Nlc3NTZXRTdHJlYW1EZXN0aW5hdGlv
bklEKFdURk1vdmUoZGVjb2RlciksIGN1cnJlbnRSZWNlaXZlcikpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIERpc3BhdGNoUmVzdWx0OjpIYXNOb01lc3NhZ2VzOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNz
YWdlTmFtZTo6UHJvY2Vzc091dE9mU3RyZWFtTWVzc2FnZSkgewotICAgICAgICAgICAgaWYgKCFk
aXNwYXRjaE91dE9mU3RyZWFtTWVzc2FnZShXVEZNb3ZlKGRlY29kZXIpKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gRGlzcGF0Y2hSZXN1bHQ6Okhhc05vTWVzc2FnZXM7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY3VycmVudFJlY2VpdmVyTmFtZSAhPSBz
dGF0aWNfY2FzdDx1aW50OF90PihkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSkpIHsKLSAg
ICAgICAgICAgIGN1cnJlbnRSZWNlaXZlck5hbWUgPSBzdGF0aWNfY2FzdDx1aW50OF90PihkZWNv
ZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7Ci0gICAgICAgICAgICBjdXJyZW50UmVjZWl2ZXIg
PSBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIGlmICghY3VycmVudFJlY2VpdmVyKSB7Ci0g
ICAgICAgICAgICBhdXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KGN1cnJlbnRSZWNlaXZlck5hbWUpLCBtX2N1cnJlbnREZXN0aW5hdGlvbklEKTsKLSAgICAgICAg
ICAgIGlmICghUmVjZWl2ZXJzTWFwOjppc1ZhbGlkS2V5KGtleSkpIHsKLSAgICAgICAgICAgICAg
ICBtX2Nvbm5lY3Rpb24tPmRpc3BhdGNoRGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKGRlY29kZXIu
bWVzc2FnZU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIERpc3BhdGNoUmVzdWx0OjpI
YXNOb01lc3NhZ2VzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTG9ja2VyIGxvY2tlciB7
IG1fcmVjZWl2ZXJzTG9jayB9OwotICAgICAgICAgICAgY3VycmVudFJlY2VpdmVyID0gbV9yZWNl
aXZlcnMuZ2V0KGtleSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFjdXJyZW50UmVjZWl2ZXIp
IHsKLSAgICAgICAgICAgIC8vIFZhbGlkIHNjZW5hcmlvIGlzIHdoZW4gcmVjZWl2ZXIgaGFzIGJl
ZW4gcmVtb3ZlZCwgYnV0IHRoZXJlIGFyZSBtZXNzYWdlcyBmb3IgaXQgaW4gdGhlIGJ1ZmZlci4K
LSAgICAgICAgICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBkbyBub3QgaGF2ZSBhIHJlY2VpdmVyLCB3
ZSBkb24ndCBrbm93IGhvdyB0byBkZWNvZGUgdGhlIG1lc3NhZ2UuCi0gICAgICAgICAgICAvLyBU
aGlzIG1lYW5zIHdlIG11c3QgdGltZW91dCBldmVyeSByZWNlaXZlciBpbiB0aGUgc3RyZWFtIGNv
bm5lY3Rpb24uCi0gICAgICAgICAgICAvLyBDdXJyZW50bHkgd2UgYXNzZXJ0IHRoYXQgdGhlIHJl
Y2VpdmVycyBhcmUgZW1wdHksIGFzIHdlIG9ubHkgaGF2ZSB1cCB0byBvbmUgcmVjZWl2ZXIgaW4K
LSAgICAgICAgICAgIC8vIGEgc3RyZWFtIGNvbm5lY3Rpb24gdW50aWwgcG9zc2liaWxpdHkgb2Yg
c2tpcHBpbmcgaXMgaW1wbGVtZW50ZWQgcHJvcGVybHkuCi0gICAgICAgICAgICBMb2NrZXIgbG9j
a2VyIHsgbV9yZWNlaXZlcnNMb2NrIH07Ci0gICAgICAgICAgICBBU1NFUlQobV9yZWNlaXZlcnMu
aXNFbXB0eSgpKTsKLSAgICAgICAgICAgIHJldHVybiBEaXNwYXRjaFJlc3VsdDo6SGFzTm9NZXNz
YWdlczsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWRpc3BhdGNoU3RyZWFtTWVzc2FnZShXVEZN
b3ZlKGRlY29kZXIpLCAqY3VycmVudFJlY2VpdmVyKSkKLSAgICAgICAgICAgIHJldHVybiBEaXNw
YXRjaFJlc3VsdDo6SGFzTm9NZXNzYWdlczsKLSAgICB9Ci0gICAgcmV0dXJuIERpc3BhdGNoUmVz
dWx0OjpIYXNNb3JlTWVzc2FnZXM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJlY2VpdmVyPgot
Ym9vbCBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uPFJlY2VpdmVyPjo6cHJvY2Vzc1NldFN0cmVhbURl
c3RpbmF0aW9uSUQoRGVjb2RlciYmIGRlY29kZXIsIFJlZlB0cjxSZWNlaXZlcj4mIGN1cnJlbnRS
ZWNlaXZlcikKLXsKLSAgICB1aW50NjRfdCBkZXN0aW5hdGlvbklEID0gMDsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGRlc3RpbmF0aW9uSUQpKSB7Ci0gICAgICAgIG1fY29ubmVjdGlvbi0+ZGlz
cGF0Y2hEaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoZGVjb2Rlci5tZXNzYWdlTmFtZSgpKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAobV9jdXJyZW50RGVzdGluYXRpb25J
RCAhPSBkZXN0aW5hdGlvbklEKSB7Ci0gICAgICAgIG1fY3VycmVudERlc3RpbmF0aW9uSUQgPSBk
ZXN0aW5hdGlvbklEOwotICAgICAgICBjdXJyZW50UmVjZWl2ZXIgPSBudWxscHRyOwotICAgIH0K
LSAgICByZWxlYXNlKGRlY29kZXIuY3VycmVudEJ1ZmZlclBvc2l0aW9uKCkpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZWNlaXZlcj4KLWJvb2wgU3RyZWFtU2Vy
dmVyQ29ubmVjdGlvbjxSZWNlaXZlcj46OmRpc3BhdGNoU3RyZWFtTWVzc2FnZShEZWNvZGVyJiYg
ZGVjb2RlciwgUmVjZWl2ZXImIHJlY2VpdmVyKQotewotICAgIEFTU0VSVCghbV9pc0Rpc3BhdGNo
aW5nU3RyZWFtTWVzc2FnZSk7Ci0gICAgbV9pc0Rpc3BhdGNoaW5nU3RyZWFtTWVzc2FnZSA9IHRy
dWU7Ci0gICAgcmVjZWl2ZXIuZGlkUmVjZWl2ZVN0cmVhbU1lc3NhZ2UoKnRoaXMsIGRlY29kZXIp
OwotICAgIG1faXNEaXNwYXRjaGluZ1N0cmVhbU1lc3NhZ2UgPSBmYWxzZTsKLSAgICBpZiAoIWRl
Y29kZXIuaXNWYWxpZCgpKSB7Ci0gICAgICAgIG1fY29ubmVjdGlvbi0+ZGlzcGF0Y2hEaWRSZWNl
aXZlSW52YWxpZE1lc3NhZ2UoZGVjb2Rlci5tZXNzYWdlTmFtZSgpKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICBpZiAoZGVjb2Rlci5pc1N5bmNNZXNzYWdlKCkpCi0gICAgICAg
IHJlbGVhc2VBbGwoKTsKLSAgICBlbHNlCi0gICAgICAgIHJlbGVhc2UoZGVjb2Rlci5jdXJyZW50
QnVmZmVyUG9zaXRpb24oKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFJlY2VpdmVyPgotYm9vbCBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uPFJlY2VpdmVyPjo6ZGlz
cGF0Y2hPdXRPZlN0cmVhbU1lc3NhZ2UoRGVjb2RlciYmIGRlY29kZXIpCi17Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPERlY29kZXI+IG1lc3NhZ2U7Ci0gICAgewotICAgICAgICBMb2NrZXIgbG9ja2Vy
IHsgbV9vdXRPZlN0cmVhbU1lc3NhZ2VzTG9jayB9OwotICAgICAgICBpZiAobV9vdXRPZlN0cmVh
bU1lc3NhZ2VzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
bWVzc2FnZSA9IG1fb3V0T2ZTdHJlYW1NZXNzYWdlcy50YWtlRmlyc3QoKTsKLSAgICB9Ci0gICAg
aWYgKCFtZXNzYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWZQdHI8UmVjZWl2
ZXI+IHJlY2VpdmVyOwotICAgIHsKLSAgICAgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihz
dGF0aWNfY2FzdDx1aW50OF90PihtZXNzYWdlLT5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkpLCBtZXNz
YWdlLT5kZXN0aW5hdGlvbklEKCkpOwotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9yZWNlaXZl
cnNMb2NrIH07Ci0gICAgICAgIHJlY2VpdmVyID0gbV9yZWNlaXZlcnMuZ2V0KGtleSk7Ci0gICAg
fQotICAgIGlmIChyZWNlaXZlcikgewotICAgICAgICByZWNlaXZlci0+ZGlkUmVjZWl2ZVN0cmVh
bU1lc3NhZ2UoKnRoaXMsICptZXNzYWdlKTsKLSAgICAgICAgaWYgKCFtZXNzYWdlLT5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgICAgIG1fY29ubmVjdGlvbi0+ZGlzcGF0Y2hEaWRSZWNlaXZlSW52YWxp
ZE1lc3NhZ2UobWVzc2FnZS0+bWVzc2FnZU5hbWUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gSWYgcmVjZWl2ZXIgZG9lcyBub3QgZXhpc3Qg
aWYgaXQgaGFzIGJlZW4gcmVtb3ZlZCBidXQgbWVzc2FnZXMgYXJlIHN0aWxsIHBlbmRpbmcgdG8g
YmUKLSAgICAvLyBwcm9jZXNzZWQuIEl0J3Mgb2sgdG8gc2tpcCBzdWNoIG1lc3NhZ2VzLgotICAg
IC8vIEZJWE1FOiBOb3RlLCBjb3JyZXNwb25kaW5nIHNraXAgaXMgbm90IHBvc3NpYmxlIGF0IHRo
ZSBtb21lbnQgZm9yIHN0cmVhbSBtZXNzYWdlcy4KLSAgICByZWxlYXNlKGRlY29kZXIuY3VycmVu
dEJ1ZmZlclBvc2l0aW9uKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9UaW1lb3V0LmggYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9UaW1lb3V0LmgKaW5kZXggYTg5OTg5NzE3NzczYTllMmU0N2EzM2E5ZmNiYWEx
MGJlODU5MmUzNy4uZTZlZjlmYTcxZTg0MGUxMzBlNGM5NjdlOWRmY2NkMjMyZGQzOTcxYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvVGltZW91dC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1RpbWVvdXQuaApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3Bh
Y2UgSVBDIHsKIGNsYXNzIFRpbWVvdXQgewogcHVibGljOgogICAgIFRpbWVvdXQoU2Vjb25kcyB0
aW1lRGVsdGEpCi0gICAgICAgIDogbV9kZWFkbGluZShNb25vdG9uaWNUaW1lOjpub3coKSArIHRp
bWVEZWx0YSkKKyAgICAgICAgOiBtX2RlYWRsaW5lKHN0ZDo6aXNpbmYodGltZURlbHRhKSA/IE1v
bm90b25pY1RpbWU6OmluZmluaXR5KCkgOiBNb25vdG9uaWNUaW1lOjpub3coKSArIHRpbWVEZWx0
YSkKICAgICB7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Vi
a2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5w
eQppbmRleCBlZDk0YTNlZTU2NjhhMzQ4YmM3NmFkYmQ0MmI2NTAwNzFkMWI5NTFhLi44ZTcxYzM4
YWFhMGJmMDc0MGRkZTdmZTVhMDQ5ZmM5OTA2NmRmNTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0
cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTE5NSw3ICsxOTUsNyBAQCBkZWYgbWVzc2FnZV90b19z
dHJ1Y3RfZGVjbGFyYXRpb24ocmVjZWl2ZXIsIG1lc3NhZ2UpOgogICAgIHJlc3VsdC5hcHBlbmQo
J3B1YmxpYzpcbicpCiAgICAgcmVzdWx0LmFwcGVuZCgnICAgIHVzaW5nIEFyZ3VtZW50cyA9ICVz
O1xuJyAlIGFyZ3VtZW50c190eXBlKG1lc3NhZ2UpKQogICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykK
LSAgICByZXN1bHQuYXBwZW5kKCcgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsg
cmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OiVzXyVzOyB9XG4nICUgKHJlY2VpdmVyLm5hbWUsIG1l
c3NhZ2UubmFtZSkpCisgICAgcmVzdWx0LmFwcGVuZCgnICAgIHN0YXRpYyBjb25zdGV4cHIgSVBD
OjpNZXNzYWdlTmFtZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6JXNfJXM7IH1c
bicgJSAocmVjZWl2ZXIubmFtZSwgbWVzc2FnZS5uYW1lKSkKICAgICByZXN1bHQuYXBwZW5kKCcg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzU3luYyA9ICVzO1xuJyAlICgnZmFsc2UnLCAndHJ1
ZScpW21lc3NhZ2UucmVwbHlfcGFyYW1ldGVycyBpcyBub3QgTm9uZSBhbmQgbm90IG1lc3NhZ2Uu
aGFzX2F0dHJpYnV0ZShBU1lOQ19BVFRSSUJVVEUpXSkKICAgICBpZiByZWNlaXZlci5oYXNfYXR0
cmlidXRlKFNUUkVBTV9BVFRSSUJVVEUpOgogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzU3RyZWFtRW5jb2RhYmxlID0gJXM7XG4nICUgKCd0cnVlJywg
J2ZhbHNlJylbbWVzc2FnZS5oYXNfYXR0cmlidXRlKE5PVF9TVFJFQU1fRU5DT0RBQkxFX0FUVFJJ
QlVURSldKQpAQCAtMjc1LDcgKzI3NSw3IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3
YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2Un
LAogICAgICAgICAnV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdEb21haW4nLAogICAgICAgICAn
V2ViQ29yZTo6RGljdGF0aW9uQ29udGV4dCcsCi0gICAgICAgICdXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Rmx1c2hJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYkNvcmU6OkZsdXNoSWRlbnRpZmllcics
CiAgICAgICAgICdXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXInLAog
ICAgICAgICAnV2ViQ29yZTo6RG9jdW1lbnRJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6
OkRvY3VtZW50T3JXb3JrZXJJZGVudGlmaWVyJywKQEAgLTY4Miw3ICs2ODIsNyBAQCBkZWYgaGVh
ZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ0luc3BlY3Rvcjo6RXh0ZW5zaW9uRXJyb3In
OiBbJyJJbnNwZWN0b3JFeHRlbnNpb25UeXBlcy5oIiddLAogICAgICAgICAnSW5zcGVjdG9yOjpG
cm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlJzogWyc8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLmg+J10sCiAgICAgICAgICdJbnNwZWN0b3I6Okluc3BlY3RvclRh
cmdldFR5cGUnOiBbJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJnZXQuaD4nXSwKLSAgICAg
ICAgJ1dlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaElkZW50aWZpZXInOiBbJzxXZWJDb3JlL0Rp
c3BsYXlMaXN0Lmg+J10sCisgICAgICAgICdXZWJDb3JlOjpGbHVzaElkZW50aWZpZXInOiBbJzxX
ZWJDb3JlL0dyYXBoaWNzVHlwZXMuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtQnVmZmVySWRlbnRpZmllcic6IFsnPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4nXSwKICAg
ICAgICAgJ01lZGlhVGltZSc6IFsnPHd0Zi9NZWRpYVRpbWUuaD4nXSwKICAgICAgICAgJ01vbm90
b25pY1RpbWUnOiBbJzx3dGYvTW9ub3RvbmljVGltZS5oPiddLApAQCAtNjkxLDEzICs2OTEsMTkg
QEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUodHlwZSk6CiAgICAgICAgICdXYWxsVGltZSc6IFsnPHd0
Zi9XYWxsVGltZS5oPiddLAogICAgICAgICAnU3RyaW5nJzogWyc8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+J10sCiAgICAgICAgICdQQUw6OlNlc3Npb25JRCc6IFsnPHBhbC9TZXNzaW9uSUQuaD4nXSwK
KyAgICAgICAgJ1dlYkNvcmU6OkFyY0RhdGEnOiBbJzxXZWJDb3JlL0lubGluZVBhdGhEYXRhLmg+
J10sCiAgICAgICAgICdXZWJDb3JlOjpBdXRvcGxheUV2ZW50RmxhZ3MnOiBbJzxXZWJDb3JlL0F1
dG9wbGF5RXZlbnQuaD4nXSwKKyAgICAgICAgJ1dlYkNvcmU6OkJlemllckN1cnZlRGF0YSc6IFsn
PFdlYkNvcmUvSW5saW5lUGF0aERhdGEuaD4nXSwKKyAgICAgICAgJ1dlYkNvcmU6OkJsZW5kTW9k
ZSc6IFsnPFdlYkNvcmUvR3JhcGhpY3NUeXBlcy5oPiddLAogICAgICAgICAnV2ViQ29yZTo6QnJv
d3NpbmdDb250ZXh0R3JvdXBTd2l0Y2hEZWNpc2lvbic6IFsnPFdlYkNvcmUvRnJhbWVMb2FkZXJU
eXBlcy5oPiddLAogICAgICAgICAnV2ViQ29yZTo6Q09FUERpc3Bvc2l0aW9uJzogWyc8V2ViQ29y
ZS9Dcm9zc09yaWdpbkVtYmVkZGVyUG9saWN5Lmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpDT09Q
RGlzcG9zaXRpb24nOiBbJzxXZWJDb3JlL0Nyb3NzT3JpZ2luT3BlbmVyUG9saWN5Lmg+J10sCisg
ICAgICAgICdXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvcic6IFsnPFdlYkNvcmUvR3JhcGhpY3NU
eXBlcy5oPiddLAogICAgICAgICAnV2ViQ29yZTo6Q3JlYXRlTmV3R3JvdXBGb3JIaWdobGlnaHQn
OiBbJzxXZWJDb3JlL0FwcEhpZ2hsaWdodC5oPiddLAogICAgICAgICAnV2ViQ29yZTo6RE9NUGFz
dGVBY2Nlc3NSZXNwb25zZSc6IFsnPFdlYkNvcmUvRE9NUGFzdGVBY2Nlc3MuaD4nXSwKKyAgICAg
ICAgJ1dlYkNvcmU6OkRhc2hBcnJheUVsZW1lbnQnOiBbJzxXZWJDb3JlL0Rhc2hBcnJheS5oPidd
LAogICAgICAgICAnV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJzogWyc8V2ViQ29yZS9D
b2xvclNwYWNlLmg+J10sCisgICAgICAgICdXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSc6IFsnPFdlYkNvcmUvR3JhcGhpY3NUeXBlcy5oPiddLAogICAgICAgICAnV2ViQ29yZTo6RG9j
dW1lbnRPcldvcmtlcklkZW50aWZpZXInOiBbJzxXZWJDb3JlL1NlcnZpY2VXb3JrZXJUeXBlcy5o
PiddLAogICAgICAgICAnV2ViQ29yZTo6RHJhZ0FwcGxpY2F0aW9uRmxhZ3MnOiBbJzxXZWJDb3Jl
L0RyYWdEYXRhLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpEcmFnSGFuZGxpbmdNZXRob2QnOiBb
JzxXZWJDb3JlL0RyYWdBY3Rpb25zLmg+J10sCkBAIC03MDgsOSArNzE0LDEyIEBAIGRlZiBoZWFk
ZXJzX2Zvcl90eXBlKHR5cGUpOgogICAgICAgICAnV2ViQ29yZTo6RmlsZUNob29zZXJTZXR0aW5n
cyc6IFsnPFdlYkNvcmUvRmlsZUNob29zZXIuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OkZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlJzogWyc8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNl
c3Npb24uaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OkZvbnRDaGFuZ2VzJzogWyc8V2ViQ29yZS9G
b250QXR0cmlidXRlQ2hhbmdlcy5oPiddLAorICAgICAgICAnV2ViQ29yZTo6Rm9udFNtb290aGlu
Z01vZGUnOiBbJzxXZWJDb3JlL0dyYXBoaWNzVHlwZXMuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6
OkZyYW1lTG9hZFR5cGUnOiBbJzxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4nXSwKICAgICAg
ICAgJ1dlYkNvcmU6OkdlbmVyaWNDdWVEYXRhJzogWyc8V2ViQ29yZS9JbmJhbmRHZW5lcmljQ3Vl
Lmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJzogWyc8V2ViQ29yZS9UZXh0
Q2hlY2tlckNsaWVudC5oPiddLAorICAgICAgICAnV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNl
JzogWyc8V2ViQ29yZS9HbHlwaEJ1ZmZlck1lbWJlcnMuaD4nXSwKKyAgICAgICAgJ1dlYkNvcmU6
OkdseXBoQnVmZmVyR2x5cGgnOiBbJzxXZWJDb3JlL0dseXBoQnVmZmVyTWVtYmVycy5oPiddLAog
ICAgICAgICAnV2ViQ29yZTo6SGFzSW5zZWN1cmVDb250ZW50JzogWyc8V2ViQ29yZS9GcmFtZUxv
YWRlclR5cGVzLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpIaWdobGlnaHRSZXF1ZXN0T3JpZ2lu
YXRlZEluQXBwJzogWyc8V2ViQ29yZS9BcHBIaWdobGlnaHQuaD4nXSwKICAgICAgICAgJ1dlYkNv
cmU6OkhpZ2hsaWdodFZpc2liaWxpdHknOiBbJzxXZWJDb3JlL0hpZ2hsaWdodFZpc2liaWxpdHku
aD4nXSwKQEAgLTcyMywxMCArNzMyLDE0IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgog
ICAgICAgICAnV2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kJzogWyc8V2ViQ29yZS9LZXlib2FyZEV2
ZW50Lmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpMYXN0TmF2aWdhdGlvbldhc0FwcEluaXRpYXRl
ZCc6IFsnPFdlYkNvcmUvU2VydmljZVdvcmtlckNsaWVudERhdGEuaD4nXSwKICAgICAgICAgJ1dl
YkNvcmU6OkxlZ2FjeUNETVNlc3Npb25DbGllbnQ6Ok1lZGlhS2V5RXJyb3JDb2RlJzogWyc8V2Vi
Q29yZS9MZWdhY3lDRE1TZXNzaW9uLmg+J10sCisgICAgICAgICdXZWJDb3JlOjpMaW5lQ2FwJzog
Wyc8V2ViQ29yZS9HcmFwaGljc1R5cGVzLmg+J10sCisgICAgICAgICdXZWJDb3JlOjpMaW5lRGF0
YSc6IFsnPFdlYkNvcmUvSW5saW5lUGF0aERhdGEuaD4nXSwKKyAgICAgICAgJ1dlYkNvcmU6Okxp
bmVKb2luJzogWyc8V2ViQ29yZS9HcmFwaGljc1R5cGVzLmg+J10sCiAgICAgICAgICdXZWJDb3Jl
OjpMb2NrQmFja0ZvcndhcmRMaXN0JzogWyc8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+J10s
CiAgICAgICAgICdXZWJDb3JlOjpNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJzogWyc8V2Vi
Q29yZS9NZWRpYVBsYXllci5oPiddLAogICAgICAgICAnV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFu
bmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5JzogWyc8V2ViQ29yZS9NZXNzYWdlUG9ydENoYW5uZWxQ
cm92aWRlci5oPiddLAogICAgICAgICAnV2ViQ29yZTo6TW91c2VFdmVudFBvbGljeSc6IFsnPFdl
YkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4nXSwKKyAgICAgICAgJ1dlYkNvcmU6Ok1vdmVEYXRhJzog
Wyc8V2ViQ29yZS9JbmxpbmVQYXRoRGF0YS5oPiddLAogICAgICAgICAnV2ViQ29yZTo6TmV0d29y
a1RyYW5zYWN0aW9uSW5mb3JtYXRpb24nOiBbJzxXZWJDb3JlL05ldHdvcmtMb2FkSW5mb3JtYXRp
b24uaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhJzogWyc8V2Vi
Q29yZS9QYXN0ZWJvYXJkLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2Un
OiBbJzxXZWJDb3JlL1Bhc3RlYm9hcmQuaD4nXSwKQEAgLTc0Miw2ICs3NTUsNyBAQCBkZWYgaGVh
ZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ1dlYkNvcmU6OlBvbGljeUNoZWNrSWRlbnRp
Zmllcic6IFsnPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPiddLAogICAgICAgICAnV2ViQ29y
ZTo6UHJlc2VydmVSZXNvbHV0aW9uJzogWyc8V2ViQ29yZS9JbWFnZUJ1ZmZlckJhY2tlbmQuaD4n
XSwKICAgICAgICAgJ1dlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyJzogWyc8V2ViQ29yZS9Qcm9j
ZXNzSWRlbnRpZmllci5oPiddLAorICAgICAgICAnV2ViQ29yZTo6UXVhZEN1cnZlRGF0YSc6IFsn
PFdlYkNvcmUvSW5saW5lUGF0aERhdGEuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OlJlY2VudFNl
YXJjaCc6IFsnPFdlYkNvcmUvU2VhcmNoUG9wdXBNZW51Lmg+J10sCiAgICAgICAgICdXZWJDb3Jl
OjpSZXF1ZXN0U3RvcmFnZUFjY2Vzc1Jlc3VsdCc6IFsnPFdlYkNvcmUvRG9jdW1lbnRTdG9yYWdl
QWNjZXNzLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpSb3V0ZVNoYXJpbmdQb2xpY3knOiBbJzxX
ZWJDb3JlL0F1ZGlvU2Vzc2lvbi5oPiddLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJl
ZERpc3BsYXlMaXN0SGFuZGxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNmFm
YWJiMTU1ZTRiMTBkNzNmNDkwZTZjNjk2MWU2MmZkZWEwYjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVkRGlz
cGxheUxpc3RIYW5kbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KLSNpbmNs
dWRlIDx3dGYvRW51bVRyYWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotLy8gVGhpcyBp
cyBhIHNrZWxldG9uIG9ubHkgdXNlZCBieSB0aGUgRGlzcGxheUxpc3RXcml0ZXJIYW5kbGUgJiBE
aXNwbGF5TGlzdFJlYWRlckhhbmRsZSBzdWJjbGFzc2VzLgotY2xhc3MgU2hhcmVkRGlzcGxheUxp
c3RIYW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWREaXNwbGF5TGlzdEhhbmRsZT4gewot
cHVibGljOgotICAgIHZpcnR1YWwgflNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKCkgPSBkZWZhdWx0
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgaGVhZGVyU2l6ZSgpCi0gICAgewotICAg
ICAgICByZXR1cm4gcm91bmRVcFRvTXVsdGlwbGVPZjxhbGlnbm9mKHN0ZDo6bWF4X2FsaWduX3Qp
PihzaXplb2YoRGlzcGxheUxpc3RTaGFyZWRNZW1vcnlIZWFkZXIpKTsKLSAgICB9Ci0KLSAgICBT
aGFyZWRNZW1vcnkmIHNoYXJlZE1lbW9yeSgpIHsgcmV0dXJuIG1fc2hhcmVkTWVtb3J5LmdldCgp
OyB9Ci0gICAgY29uc3QgU2hhcmVkTWVtb3J5JiBzaGFyZWRNZW1vcnkoKSBjb25zdCB7IHJldHVy
biBtX3NoYXJlZE1lbW9yeS5nZXQoKTsgfQotCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZp
ZXI7IH0KLSAgICB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dWlu
dDhfdCo+KHNoYXJlZE1lbW9yeSgpLmRhdGEoKSk7IH0KLQotICAgIHVpbnQ2NF90IHVucmVhZEJ5
dGVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBoZWFkZXIoKS51bnJlYWRCeXRlcy5sb2FkKCk7
Ci0gICAgfQotCi0gICAgZW51bSBjbGFzcyBXYWl0aW5nU3RhdHVzIDogdWludDhfdCB7Ci0gICAg
ICAgIE5vdFdhaXRpbmcsCi0gICAgICAgIFdhaXRpbmcsCi0gICAgICAgIFJlc3VtaW5nCi0gICAg
fTsKLSAgICB1c2luZyBXYWl0aW5nU3RhdHVzU3RvcmFnZVR5cGUgPSBzdGQ6OnVuZGVybHlpbmdf
dHlwZV90PFdhaXRpbmdTdGF0dXM+OwotCi0gICAgc3RydWN0IFJlc3VtZVJlYWRpbmdJbmZvcm1h
dGlvbiB7Ci0gICAgICAgIHVpbnQ2NF90IG9mZnNldDsKLSAgICAgICAgdWludDY0X3QgZGVzdGlu
YXRpb247Ci0gICAgfTsKLQotcHJvdGVjdGVkOgotICAgIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxl
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyLCBS
ZWY8U2hhcmVkTWVtb3J5PiYmIHNoYXJlZE1lbW9yeSkKLSAgICAgICAgOiBtX2lkZW50aWZpZXIo
aWRlbnRpZmllcikKLSAgICAgICAgLCBtX3NoYXJlZE1lbW9yeShXVEZNb3ZlKHNoYXJlZE1lbW9y
eSkpCi0gICAgewotICAgIH0KLQotICAgIHN0cnVjdCBEaXNwbGF5TGlzdFNoYXJlZE1lbW9yeUhl
YWRlciB7Ci0gICAgICAgIERpc3BsYXlMaXN0U2hhcmVkTWVtb3J5SGVhZGVyKCkgPSBkZWxldGU7
Ci0gICAgICAgIH5EaXNwbGF5TGlzdFNoYXJlZE1lbW9yeUhlYWRlcigpID0gZGVsZXRlOwotCi0g
ICAgICAgIEF0b21pYzx1aW50NjRfdD4gdW5yZWFkQnl0ZXM7Ci0gICAgICAgIFJlc3VtZVJlYWRp
bmdJbmZvcm1hdGlvbiByZXN1bWVSZWFkaW5nSW5mbzsKLSAgICAgICAgQXRvbWljPFdhaXRpbmdT
dGF0dXNTdG9yYWdlVHlwZT4gd2FpdGluZ1N0YXR1czsKLSAgICB9OwotCi0gICAgY29uc3QgRGlz
cGxheUxpc3RTaGFyZWRNZW1vcnlIZWFkZXImIGhlYWRlcigpIGNvbnN0IHsgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PGNvbnN0IERpc3BsYXlMaXN0U2hhcmVkTWVtb3J5SGVhZGVyKj4oZGF0YSgp
KTsgfQotICAgIERpc3BsYXlMaXN0U2hhcmVkTWVtb3J5SGVhZGVyJiBoZWFkZXIoKSB7IHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdFNoYXJlZE1lbW9yeUhlYWRlcio+KGRhdGEo
KSk7IH0KLQotcHJpdmF0ZToKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklk
ZW50aWZpZXIgbV9pZGVudGlmaWVyOwotICAgIFJlZjxTaGFyZWRNZW1vcnk+IG1fc2hhcmVkTWVt
b3J5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5k
bGU6OldhaXRpbmdTdGF0dXM+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAg
ICAgICBXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpXYWl0aW5nU3RhdHVzLAotICAg
ICAgICBXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpXYWl0aW5nU3RhdHVzOjpOb3RX
YWl0aW5nLAotICAgICAgICBXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpXYWl0aW5n
U3RhdHVzOjpXYWl0aW5nLAotICAgICAgICBXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxl
OjpXYWl0aW5nU3RhdHVzOjpSZXN1bWluZwotICAgID47Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
VEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCmlu
ZGV4IDRlMTE3MzFmZmMzZmVkODRmMzM3OWY0YjNhYjgxZWI3MzZkZTEzNWIuLjA5MTExNGY5ZTBj
ZTc2NGY5NTZjNDgwYzcxODEwYWU0NTFmMWVhNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcApAQCAtMjMxLDE2ICsyMzEsNiBAQCBzdGF0aWMg
V0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlVHlwZXNBbmREYXRhKERlY29kZXImIGRlY29k
ZXIsIFZlY3RvcjxTdHJpbgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFyZ3VtZW50Q29k
ZXI8QWZmaW5lVHJhbnNmb3JtPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgYWZmaW5lVHJhbnNmb3JtKQotewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8
QWZmaW5lVHJhbnNmb3JtPjo6ZW5jb2RlKGVuY29kZXIsIGFmZmluZVRyYW5zZm9ybSk7Ci19Ci0K
LWJvb2wgQXJndW1lbnRDb2RlcjxBZmZpbmVUcmFuc2Zvcm0+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgQWZmaW5lVHJhbnNmb3JtJiBhZmZpbmVUcmFuc2Zvcm0pCi17Ci0gICAgcmV0dXJuIFNp
bXBsZUFyZ3VtZW50Q29kZXI8QWZmaW5lVHJhbnNmb3JtPjo6ZGVjb2RlKGRlY29kZXIsIGFmZmlu
ZVRyYW5zZm9ybSk7Ci19Ci0KIHZvaWQgQXJndW1lbnRDb2RlcjxDYWNoZVF1ZXJ5T3B0aW9ucz46
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDYWNoZVF1ZXJ5T3B0aW9ucyYgb3B0aW9u
cykKIHsKICAgICBlbmNvZGVyIDw8IG9wdGlvbnMuaWdub3JlU2VhcmNoOwpAQCAtNDI1LDYgKzQx
NSw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxFdmVudFRyYWNraW5nUmVnaW9ucz46OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBFdmVudFRyYWNraW5nCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CiB2b2lkIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtYXRp
b25NYXRyaXg+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybWF0aW9uTWF0cml4KQogewogICAgIGVuY29kZXIgPDwgdHJhbnNmb3Jt
YXRpb25NYXRyaXgubTExKCk7CkBAIC01MDYsNiArNDk3LDkgQEAgYm9vbCBBcmd1bWVudENvZGVy
PFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFRyYW5zZm9y
bWF0aW8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVy
PFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXImLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPFRyYW5z
Zm9ybWF0aW9uTWF0cml4Pjo6ZW5jb2RlPFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1D
b25uZWN0aW9uRW5jb2RlciYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisKIHZvaWQg
QXJndW1lbnRDb2RlcjxMaW5lYXJUaW1pbmdGdW5jdGlvbj46OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBMaW5lYXJUaW1pbmdGdW5jdGlvbiYgdGltaW5nRnVuY3Rpb24pCiB7CiAgICAg
ZW5jb2RlciA8PCB0aW1pbmdGdW5jdGlvbi50eXBlKCk7CkBAIC02MTcsNjUgKzYxMSw2IEBAIGJv
b2wgQXJndW1lbnRDb2RlcjxTcHJpbmdUaW1pbmdGdW5jdGlvbj46OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyLCBTcHJpbmdUaW1pbmdGCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJndW1l
bnRDb2RlcjxGbG9hdFBvaW50Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEZsb2F0
UG9pbnQmIGZsb2F0UG9pbnQpCi17Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50
Pjo6ZW5jb2RlKGVuY29kZXIsIGZsb2F0UG9pbnQpOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8
RmxvYXRQb2ludD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBGbG9hdFBvaW50JiBmbG9hdFBv
aW50KQotewotICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQ+OjpkZWNv
ZGUoZGVjb2RlciwgZmxvYXRQb2ludCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8RmxvYXRQb2ludD4g
QXJndW1lbnRDb2RlcjxGbG9hdFBvaW50Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0g
ICAgRmxvYXRQb2ludCBmbG9hdFBvaW50OwotICAgIGlmICghU2ltcGxlQXJndW1lbnRDb2RlcjxG
bG9hdFBvaW50Pjo6ZGVjb2RlKGRlY29kZXIsIGZsb2F0UG9pbnQpKQotICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotICAgIHJldHVybiBmbG9hdFBvaW50OwotfQotCi12b2lkIEFyZ3VtZW50
Q29kZXI8RmxvYXRQb2ludDNEPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEZsb2F0
UG9pbnQzRCYgZmxvYXRQb2ludCkKLXsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0UG9p
bnQzRD46OmVuY29kZShlbmNvZGVyLCBmbG9hdFBvaW50KTsKLX0KLQotYm9vbCBBcmd1bWVudENv
ZGVyPEZsb2F0UG9pbnQzRD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBGbG9hdFBvaW50M0Qm
IGZsb2F0UG9pbnQpCi17Ci0gICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRQb2lu
dDNEPjo6ZGVjb2RlKGRlY29kZXIsIGZsb2F0UG9pbnQpOwotfQotCi0KLXZvaWQgQXJndW1lbnRD
b2RlcjxGbG9hdFJlY3Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgRmxvYXRSZWN0
JiBmbG9hdFJlY3QpCi17Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFJlY3Q+OjplbmNv
ZGUoZW5jb2RlciwgZmxvYXRSZWN0KTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPEZsb2F0UmVj
dD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBGbG9hdFJlY3QmIGZsb2F0UmVjdCkKLXsKLSAg
ICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFJlY3Q+OjpkZWNvZGUoZGVjb2Rlciwg
ZmxvYXRSZWN0KTsKLX0KLQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IEFyZ3VtZW50Q29kZXI8
RmxvYXRSZWN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgRmxvYXRSZWN0IGZs
b2F0UmVjdDsKLSAgICBpZiAoIVNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRSZWN0Pjo6ZGVjb2Rl
KGRlY29kZXIsIGZsb2F0UmVjdCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAg
cmV0dXJuIGZsb2F0UmVjdDsKLX0KLQotCi12b2lkIEFyZ3VtZW50Q29kZXI8RmxvYXRCb3hFeHRl
bnQ+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgRmxvYXRCb3hFeHRlbnQmIGZsb2F0
Qm94RXh0ZW50KQotewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRCb3hFeHRlbnQ+Ojpl
bmNvZGUoZW5jb2RlciwgZmxvYXRCb3hFeHRlbnQpOwotfQotICAgIAotYm9vbCBBcmd1bWVudENv
ZGVyPEZsb2F0Qm94RXh0ZW50Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEZsb2F0Qm94RXh0
ZW50JiBmbG9hdEJveEV4dGVudCkKLXsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxG
bG9hdEJveEV4dGVudD46OmRlY29kZShkZWNvZGVyLCBmbG9hdEJveEV4dGVudCk7Ci19Ci0KLQog
dm9pZCBBcmd1bWVudENvZGVyPFJlY3RFZGdlczxib29sPj46OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBSZWN0RWRnZXM8Ym9vbD4mIGJveEVkZ2VzKQogewogICAgIFNpbXBsZUFyZ3Vt
ZW50Q29kZXI8UmVjdEVkZ2VzPGJvb2w+Pjo6ZW5jb2RlKGVuY29kZXIsIGJveEVkZ2VzKTsKQEAg
LTY4NiwyOCArNjIxLDYgQEAgYm9vbCBBcmd1bWVudENvZGVyPFJlY3RFZGdlczxib29sPj46OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZWN0RWRnZXM8Ym9vbD4mIGIKICAgICByZXR1cm4gU2lt
cGxlQXJndW1lbnRDb2RlcjxSZWN0RWRnZXM8Ym9vbD4+OjpkZWNvZGUoZGVjb2RlciwgYm94RWRn
ZXMpOwogfQogCi0KLXZvaWQgQXJndW1lbnRDb2RlcjxGbG9hdFNpemU+OjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgRmxvYXRTaXplJiBmbG9hdFNpemUpCi17Ci0gICAgU2ltcGxlQXJn
dW1lbnRDb2RlcjxGbG9hdFNpemU+OjplbmNvZGUoZW5jb2RlciwgZmxvYXRTaXplKTsKLX0KLQot
Ym9vbCBBcmd1bWVudENvZGVyPEZsb2F0U2l6ZT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBG
bG9hdFNpemUmIGZsb2F0U2l6ZSkKLXsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxG
bG9hdFNpemU+OjpkZWNvZGUoZGVjb2RlciwgZmxvYXRTaXplKTsKLX0KLQotCi12b2lkIEFyZ3Vt
ZW50Q29kZXI8RmxvYXRSb3VuZGVkUmVjdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCkKLXsKLSAgICBTaW1wbGVBcmd1bWVudENv
ZGVyPEZsb2F0Um91bmRlZFJlY3Q+OjplbmNvZGUoZW5jb2Rlciwgcm91bmRlZFJlY3QpOwotfQot
Ci1ib29sIEFyZ3VtZW50Q29kZXI8RmxvYXRSb3VuZGVkUmVjdD46OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyLCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCkKLXsKLSAgICByZXR1cm4gU2lt
cGxlQXJndW1lbnRDb2RlcjxGbG9hdFJvdW5kZWRSZWN0Pjo6ZGVjb2RlKGRlY29kZXIsIHJvdW5k
ZWRSZWN0KTsKLX0KLQogI2lmIEVOQUJMRShNRVRBX1ZJRVdQT1JUKQogdm9pZCBBcmd1bWVudENv
ZGVyPFZpZXdwb3J0QXJndW1lbnRzPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZp
ZXdwb3J0QXJndW1lbnRzJiB2aWV3cG9ydEFyZ3VtZW50cykKIHsKQEAgLTczOSw4NyArNjUyLDYg
QEAgYm9vbCBBcmd1bWVudENvZGVyPFZpZXdwb3J0QXR0cmlidXRlcz46OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBWaWV3cG9ydEF0dHJpYnUKICAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2Rl
cjxWaWV3cG9ydEF0dHJpYnV0ZXM+OjpkZWNvZGUoZGVjb2Rlciwgdmlld3BvcnRBdHRyaWJ1dGVz
KTsKIH0KIAotdm9pZCBBcmd1bWVudENvZGVyPEludFBvaW50Pjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IEludFBvaW50JiBpbnRQb2ludCkKLXsKLSAgICBTaW1wbGVBcmd1bWVudENv
ZGVyPEludFBvaW50Pjo6ZW5jb2RlKGVuY29kZXIsIGludFBvaW50KTsKLX0KLQotYm9vbCBBcmd1
bWVudENvZGVyPEludFBvaW50Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEludFBvaW50JiBp
bnRQb2ludCkKLXsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxJbnRQb2ludD46OmRl
Y29kZShkZWNvZGVyLCBpbnRQb2ludCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6SW50
UG9pbnQ+IEFyZ3VtZW50Q29kZXI8SW50UG9pbnQ+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
LXsKLSAgICBJbnRQb2ludCBpbnRQb2ludDsKLSAgICBpZiAoIVNpbXBsZUFyZ3VtZW50Q29kZXI8
SW50UG9pbnQ+OjpkZWNvZGUoZGVjb2RlciwgaW50UG9pbnQpKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgIHJldHVybiBpbnRQb2ludDsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVy
PEludFJlY3Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSW50UmVjdCYgaW50UmVj
dCkKLXsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPEludFJlY3Q+OjplbmNvZGUoZW5jb2Rlciwg
aW50UmVjdCk7Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxJbnRSZWN0Pjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIEludFJlY3QmIGludFJlY3QpCi17Ci0gICAgcmV0dXJuIFNpbXBsZUFyZ3Vt
ZW50Q29kZXI8SW50UmVjdD46OmRlY29kZShkZWNvZGVyLCBpbnRSZWN0KTsKLX0KLQotc3RkOjpv
cHRpb25hbDxJbnRSZWN0PiBBcmd1bWVudENvZGVyPEludFJlY3Q+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKLXsKLSAgICBJbnRSZWN0IHJlY3Q7Ci0gICAgaWYgKCFkZWNvZGUoZGVjb2Rlciwg
cmVjdCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Ci12b2lkIEFyZ3VtZW50Q29kZXI8SW50U2l6
ZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJbnRTaXplJiBpbnRTaXplKQotewot
ICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8SW50U2l6ZT46OmVuY29kZShlbmNvZGVyLCBpbnRTaXpl
KTsKLX0KLQotdGVtcGxhdGUKLXZvaWQgQXJndW1lbnRDb2RlcjxJbnRTaXplPjo6ZW5jb2RlPEVu
Y29kZXI+KEVuY29kZXImLCBjb25zdCBJbnRTaXplJik7Ci10ZW1wbGF0ZQotdm9pZCBBcmd1bWVu
dENvZGVyPEludFNpemU+OjplbmNvZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNv
bm5lY3Rpb25FbmNvZGVyJiwgY29uc3QgSW50U2l6ZSYpOwotCi1ib29sIEFyZ3VtZW50Q29kZXI8
SW50U2l6ZT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBJbnRTaXplJiBpbnRTaXplKQotewot
ICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPEludFNpemU+OjpkZWNvZGUoZGVjb2Rlciwg
aW50U2l6ZSk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4gQXJndW1lbnRDb2RlcjxJbnRT
aXplPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgSW50U2l6ZSBpbnRTaXplOwot
ICAgIGlmICghU2ltcGxlQXJndW1lbnRDb2RlcjxJbnRTaXplPjo6ZGVjb2RlKGRlY29kZXIsIGlu
dFNpemUpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVybiBpbnRTaXpl
OwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8TGF5b3V0U2l6ZT46OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBMYXlvdXRTaXplJiBsYXlvdXRTaXplKQotewotICAgIFNpbXBsZUFyZ3Vt
ZW50Q29kZXI8TGF5b3V0U2l6ZT46OmVuY29kZShlbmNvZGVyLCBsYXlvdXRTaXplKTsKLX0KLQot
Ym9vbCBBcmd1bWVudENvZGVyPExheW91dFNpemU+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
TGF5b3V0U2l6ZSYgbGF5b3V0U2l6ZSkKLXsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2Rl
cjxMYXlvdXRTaXplPjo6ZGVjb2RlKGRlY29kZXIsIGxheW91dFNpemUpOwotfQotCi0KLXZvaWQg
QXJndW1lbnRDb2RlcjxMYXlvdXRQb2ludD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBMYXlvdXRQb2ludCYgbGF5b3V0UG9pbnQpCi17Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxM
YXlvdXRQb2ludD46OmVuY29kZShlbmNvZGVyLCBsYXlvdXRQb2ludCk7Ci19Ci0KLWJvb2wgQXJn
dW1lbnRDb2RlcjxMYXlvdXRQb2ludD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBMYXlvdXRQ
b2ludCYgbGF5b3V0UG9pbnQpCi17Ci0gICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8TGF5
b3V0UG9pbnQ+OjpkZWNvZGUoZGVjb2RlciwgbGF5b3V0UG9pbnQpOwotfQotCiB2b2lkIEFyZ3Vt
ZW50Q29kZXI8UmVjZW50U2VhcmNoPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJl
Y2VudFNlYXJjaCYgcmVjZW50U2VhcmNoKQogewogICAgIGVuY29kZXIgPDwgcmVjZW50U2VhcmNo
LnN0cmluZyA8PCByZWNlbnRTZWFyY2gudGltZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgKaW5kZXggM2UwNmRhYmI2MjQ2NzQzNTc2MWJmMDM1NzgzYjc0
ZTU2ZmVjNTM1MS4uMGI2YzFiZmM1ZmVhMzg0ZTc5ZDA3MmU0MDViYjU4ZjU5YjYyYTVkOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKQEAgLTI2LDEy
ICsyNiwyNSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvQWZmaW5lVHJhbnNmb3JtLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9B
dXRvcGxheUV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RmxvYXRQb2ludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludDNELmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0Um91bmRlZFJl
Y3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0U2l6ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RGlzcGxheUxpc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0luZGV4ZWREQi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5wdXRNb2Rl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2ludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50
UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
TGF5b3V0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0xheW91dFNpemUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0xlbmd0aEJveC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFTZWxlY3Rpb25P
cHRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL05hdGl2ZUltYWdlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9OZXR3b3JrTG9hZE1ldHJpY3MuaD4KQEAgLTk2LDcgKzEwOSw2IEBAIHR5cGVkZWYgc3Ry
dWN0IF9fQ1ZCdWZmZXIqIENWUGl4ZWxCdWZmZXJSZWY7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEFic29sdXRlUG9zaXRpb25Db25zdHJhaW50czsKLWNsYXNzIEFmZmluZVRyYW5zZm9y
bTsKIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwogY2xhc3MgQmxvYlBhcnQ7CiBjbGFz
cyBDZXJ0aWZpY2F0ZUluZm87CkBAIC0xMDksMjEgKzEyMSwxMSBAQCBjbGFzcyBEcmFnRGF0YTsK
IGNsYXNzIEZpbGU7CiBjbGFzcyBGaWx0ZXJPcGVyYXRpb247CiBjbGFzcyBGaWx0ZXJPcGVyYXRp
b25zOwotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0UG9pbnQzRDsKLWNsYXNzIEZsb2F0
UmVjdDsKLWNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7Ci1jbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBG
aXhlZFBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50czsKIGNsYXNzIEZvbnQ7CiBjbGFzcyBGb250
UGxhdGZvcm1EYXRhOwogY2xhc3MgSFRUUEhlYWRlck1hcDsKLWNsYXNzIEludFBvaW50OwotY2xh
c3MgSW50UmVjdDsKLWNsYXNzIEludFNpemU7CiBjbGFzcyBLZXlmcmFtZVZhbHVlTGlzdDsKLWNs
YXNzIExheW91dFNpemU7Ci1jbGFzcyBMYXlvdXRQb2ludDsKIGNsYXNzIExpbmVhclRpbWluZ0Z1
bmN0aW9uOwogY2xhc3MgTm90aWZpY2F0aW9uOwogY2xhc3MgUGFzdGVib2FyZEN1c3RvbURhdGE7
CkBAIC0xNzQsOSArMTc2LDcgQEAgc3RydWN0IFRvdWNoQWN0aW9uRGF0YTsKIHN0cnVjdCBWZWxv
Y2l0eURhdGE7CiBzdHJ1Y3QgVmlld3BvcnRBdHRyaWJ1dGVzOwogc3RydWN0IFdpbmRvd0ZlYXR1
cmVzOwotICAgIAotdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFJlY3RFZGdlczsKLXVzaW5nIEZs
b2F0Qm94RXh0ZW50ID0gUmVjdEVkZ2VzPGZsb2F0PjsKKwogdXNpbmcgSURCS2V5UGF0aCA9IFZh
cmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj47CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAg
LTIyNywxMCArMjI3LDI1IEBAIHN0cnVjdCBSZWNvcmQ7CiAKIG5hbWVzcGFjZSBJUEMgewogCi10
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybT4g
ewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6QWZmaW5l
VHJhbnNmb3JtJik7Ci0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShE
ZWNvZGVyJiwgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJik7Ci19OworREVGSU5FX1NJTVBMRV9B
UkdVTUVOVF9DT0RFUihXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0pCitERUZJTkVfU0lNUExFX0FS
R1VNRU5UX0NPREVSKFdlYkNvcmU6OkZsb2F0Qm94RXh0ZW50KQorREVGSU5FX1NJTVBMRV9BUkdV
TUVOVF9DT0RFUihXZWJDb3JlOjpGbG9hdFBvaW50KQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9D
T0RFUihXZWJDb3JlOjpGbG9hdFBvaW50M0QpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVS
KFdlYkNvcmU6OkZsb2F0UmVjdCkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29y
ZTo6RmxvYXRSb3VuZGVkUmVjdCkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29y
ZTo6RmxvYXRTaXplKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpJbnRQ
b2ludCkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6SW50UmVjdCkKK0RF
RklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6SW50U2l6ZSkKK0RFRklORV9TSU1Q
TEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6TGF5b3V0U2l6ZSkKK0RFRklORV9TSU1QTEVfQVJH
VU1FTlRfQ09ERVIoV2ViQ29yZTo6TGF5b3V0UG9pbnQpCisKKyNpZiBVU0UoQ0cpCitERUZJTkVf
U0lNUExFX0FSR1VNRU5UX0NPREVSKENHUmVjdCkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09E
RVIoQ0dTaXplKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihDR1BvaW50KQorREVGSU5F
X1NJTVBMRV9BUkdVTUVOVF9DT0RFUihDR0FmZmluZVRyYW5zZm9ybSkKKyNlbmRpZgogCiB0ZW1w
bGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkF0dHJpYnV0ZWRTdHJpbmc+IHsK
ICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkF0dHJpYnV0
ZWRTdHJpbmcmKTsKQEAgLTI2OCw2ICsyODMsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVu
dENvZGVyPFdlYkNvcmU6OkV2ZW50VHJhY2tpbmdSZWdpb25zPiB7CiB9OwogCiB0ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4PiB7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5j
b2RlciYsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgc3RhdGlj
IFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXgmKTsKIH07CkBAIC0yOTksNDMgKzMxNSwxMSBAQCB0ZW1wbGF0ZTw+IHN0
cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz4gewogICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz4gZGVjb2RlKERlY29kZXIm
KTsKIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmxvYXRQ
b2ludD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYpOwotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUo
RGVjb2RlciYsIFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25h
bDxXZWJDb3JlOjpGbG9hdFBvaW50PiBkZWNvZGUoRGVjb2RlciYpOwotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFBvaW50M0Q+IHsKLSAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQzRCYpOwot
ICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNv
cmU6OkZsb2F0UG9pbnQzRCYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRV
Uk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UmVjdD4gZGVjb2RlKERlY29kZXImKTsKLX07
Ci0gICAgCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0Qm94
RXh0ZW50PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdEJveEV4dGVudCYpOwotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBk
ZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkZsb2F0Qm94RXh0ZW50Jik7Ci19OwotCiB0ZW1wbGF0
ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlY3RFZGdlczxib29sPj4gewogICAg
IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6UmVjdEVkZ2VzPGJv
b2w+Jik7CiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVy
JiwgV2ViQ29yZTo6UmVjdEVkZ2VzPGJvb2w+Jik7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBB
cmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0U2l6ZT4gewotICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7Ci0gICAgc3RhdGljIFdBUk5f
VU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6RmxvYXRTaXplJik7
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0Um91
bmRlZFJlY3Q+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0Um91bmRlZFJlY3QmKTsKLSAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJv
b2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0Jik7Ci19OwotCiAj
aWYgRU5BQkxFKE1FVEFfVklFV1BPUlQpCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVu
Y29kZXImLCBjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpOwpAQCAtMzUwLDM1ICsz
MzQsNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlZpZXdwb3J0
QXR0cmlidXRlcz4gewogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUo
RGVjb2RlciYsIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpOwogfTsKIAotdGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpJbnRQb2ludD4gewotICAgIHN0YXRpYyB2
b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKLSAgICBzdGF0
aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpJbnRQ
b2ludCYpOwotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkludFBvaW50PiBkZWNv
ZGUoRGVjb2RlciYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpJbnRSZWN0PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRl
Y29kZShEZWNvZGVyJiwgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPFdlYkNvcmU6OkludFJlY3Q+IGRlY29kZShEZWNvZGVyJik7Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkludFNpemU+IHsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBFbmNvZGVyPgotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBk
ZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkludFNpemUmKTsKLSAgICBzdGF0aWMgc3RkOjpvcHRp
b25hbDxXZWJDb3JlOjpJbnRTaXplPiBkZWNvZGUoRGVjb2RlciYpOwotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpMYXlvdXRTaXplPiB7Ci0gICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpMYXlvdXRTaXplJik7Ci0gICAg
c3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6
TGF5b3V0U2l6ZSYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpMYXlvdXRQb2ludD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29u
c3QgV2ViQ29yZTo6TGF5b3V0UG9pbnQmKTsKLSAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJO
IGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpMYXlvdXRQb2ludCYpOwotfTsKLQogdGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpMZW5ndGg+IHsKICAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6Okxlbmd0aCYpOwogICAgIHN0
YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6Okxl
bmd0aCYpOwpAQCAtNDU3LDYgKzQxMiw3IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29k
ZXI8V2ViQ29yZTo6RHJhZ0RhdGE+IHsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCisK
IHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V1RGOjpNYWNoU2VuZFJpZ2h0PiB7CiAg
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXVEY6Ok1hY2hTZW5kUmlnaHQm
KTsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIFdURjo6TWFjaFNlbmRSaWdodCYm
KTsKQEAgLTQ2OCwyNiArNDI0LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+IHsKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJD
b3JlOjpLZXlwcmVzc0NvbW1hbmQ+IGRlY29kZShEZWNvZGVyJik7CiB9OwogCi10ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPENHUG9pbnQ+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
RW5jb2RlciYsIENHUG9pbnQpOwotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENHUG9pbnQ+IGRl
Y29kZShEZWNvZGVyJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPENH
U2l6ZT4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgQ0dTaXplKTsKLSAgICBz
dGF0aWMgc3RkOjpvcHRpb25hbDxDR1NpemU+IGRlY29kZShEZWNvZGVyJik7Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPENHUmVjdD4gewotICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyJiwgQ0dSZWN0KTsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxDR1JlY3Q+
IGRlY29kZShEZWNvZGVyJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PENHQWZmaW5lVHJhbnNmb3JtPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBD
R0FmZmluZVRyYW5zZm9ybSk7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Q0dBZmZpbmVUcmFu
c2Zvcm0+IGRlY29kZShEZWNvZGVyJik7Ci19OwotI2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0o
Q09DT0EpCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJn
dW1lbnRDb2RlcjxXZWJDb3JlOjpTZWxlY3Rpb25HZW9tZXRyeT4gewpAQCAtODczLDYgKzgxMCw1
MiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxDVlBpeGVsQnVm
ZmVyUmVmPj4gewogCiAjZW5kaWYKIAorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2F2ZSkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmUpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVS
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGUpCitERUZJTkVfU0lNUExFX0FSR1VNRU5U
X0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGUpCitERUZJTkVfU0lNUExFX0FSR1VN
RU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZSkKK0RFRklORV9TSU1QTEVfQVJH
VU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENUTSkKK0RFRklORV9TSU1QTEVf
QVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNKQorREVG
SU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5l
RmlsbENvbG9yKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3IpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVS
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3MpCitERUZJTkVfU0lNUExF
X0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwKQorREVGSU5F
X1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW4p
CitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRN
aXRlckxpbWl0KQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q2xlYXJTaGFkb3cpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDbGlwKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q2xpcE91dCkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0ltYWdlQnVmZmVyKQorREVGSU5FX1NJTVBMRV9BUkdV
TUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRz
KQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0ltYWdlQnVmZmVyKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm4pCitERUZJTkVfU0lNUExFX0FSR1VNRU5U
X0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyKQorREVG
SU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNw
YXJlbmN5TGF5ZXIpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3UmVjdCkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdMaW5lKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcikKK0RFRklORV9TSU1Q
TEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlKQorREVG
SU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3Qp
CitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxs
TGluZSkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxBcmMpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsUXVhZEN1cnZlKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbEJlemllckN1cnZlKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9D
T0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2UpCitERUZJTkVfU0lNUExFX0FS
R1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWEpCitE
RUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VS
ZWN0KQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U3Ryb2tlTGluZSkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlN0cm9rZUFyYykKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlN0cm9rZVF1YWRDdXJ2ZSkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09E
RVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUJlemllckN1cnZlKQorREVGSU5FX1NJTVBM
RV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZSkKK0RF
RklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVj
dCkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFw
cGx5U3Ryb2tlUGF0dGVybikKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm4pCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NP
REVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yKQorREVGSU5F
X1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1c2hDb250ZXh0
KQorCiB9IC8vIG5hbWVzcGFjZSBJUEMKIAogbmFtZXNwYWNlIFdURiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQppbmRleCA4
ZTRkNWYxMzFkODJmMWRlZmUyNmQxNWFiZmVlMDY0YTNiOTg5MGY4Li42YTQzNDA2NzE0NjNkOTQ3
MDcxOTIzMTBiMWY3YmEwYmQwM2E3NmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KQEAgLTMyMSw3OSArMzIxLDYgQEAg
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+IEFyZ3VtZW50Q29kZXI8V2Vi
Q29yZTo6S2V5cHJlc3NDb21tYW5kPjoKICAgICByZXR1cm4gV1RGTW92ZShjb21tYW5kKTsKIH0K
IAotdm9pZCBBcmd1bWVudENvZGVyPENHUmVjdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBD
R1JlY3QgcmVjdCkKLXsKLSAgICBlbmNvZGVyIDw8IHJlY3Qub3JpZ2luIDw8IHJlY3Quc2l6ZTsK
LX0KLQotc3RkOjpvcHRpb25hbDxDR1JlY3Q+IEFyZ3VtZW50Q29kZXI8Q0dSZWN0Pjo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxDR1BvaW50PiBvcmlnaW47
Ci0gICAgZGVjb2RlciA+PiBvcmlnaW47Ci0gICAgaWYgKCFvcmlnaW4pCi0gICAgICAgIHJldHVy
biB7IH07Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPENHU2l6ZT4gc2l6ZTsKLSAgICBkZWNvZGVyID4+
IHNpemU7Ci0gICAgaWYgKCFzaXplKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgcmV0dXJu
IENHUmVjdCB7ICpvcmlnaW4sICpzaXplIH07Ci19Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxDR1Np
emU+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0dTaXplIHNpemUpCi17Ci0gICAgZW5jb2Rl
ciA8PCBzaXplLndpZHRoIDw8IHNpemUuaGVpZ2h0OwotfQotCi1zdGQ6Om9wdGlvbmFsPENHU2l6
ZT4gQXJndW1lbnRDb2RlcjxDR1NpemU+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAg
ICBDR1NpemUgc2l6ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUud2lkdGgpKQotICAg
ICAgICByZXR1cm4geyB9OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZS5oZWlnaHQpKQot
ICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBzaXplOwotfQotCi12b2lkIEFyZ3VtZW50
Q29kZXI8Q0dQb2ludD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDR1BvaW50IHBvaW50KQot
ewotICAgIGVuY29kZXIgPDwgcG9pbnQueCA8PCBwb2ludC55OwotfQotCi1zdGQ6Om9wdGlvbmFs
PENHUG9pbnQ+IEFyZ3VtZW50Q29kZXI8Q0dQb2ludD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQotewotICAgIENHUG9pbnQgcG9pbnQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShwb2ludC54
KSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBvaW50Lnkp
KQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBwb2ludDsKLX0KLQotdm9pZCBBcmd1
bWVudENvZGVyPENHQWZmaW5lVHJhbnNmb3JtPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENH
QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSkKLXsKLSAgICBlbmNvZGVyIDw8IHRyYW5zZm9ybS5h
IDw8IHRyYW5zZm9ybS5iIDw8IHRyYW5zZm9ybS5jIDw8IHRyYW5zZm9ybS5kIDw8IHRyYW5zZm9y
bS50eCA8PCB0cmFuc2Zvcm0udHk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8Q0dBZmZpbmVUcmFuc2Zv
cm0+IEFyZ3VtZW50Q29kZXI8Q0dBZmZpbmVUcmFuc2Zvcm0+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKLXsKLSAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZSh0cmFuc2Zvcm0uYSkpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZSh0cmFuc2Zvcm0uYikpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZSh0cmFuc2Zvcm0uYykpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZSh0cmFuc2Zvcm0uZCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0cmFuc2Zvcm0udHgpKQotICAgICAgICByZXR1cm4geyB9
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUodHJhbnNmb3JtLnR5KSkKLSAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICByZXR1cm4gdHJhbnNmb3JtOwotfQotCiAjaWYgRU5BQkxFKENPTlRFTlRfRklM
VEVSSU5HKQogCiB2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29udGVudEZpbHRlclVuYmxv
Y2tIYW5kbGVyPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkNvbnRl
bnRGaWx0ZXJVbmJsb2NrSGFuZGxlciYgY29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNl
cy50eHQKaW5kZXggYzRhODRlMWZiNmY0NjZiOGZiZDU0ZTZjYTQ2YzQ3MjQyMmIzYjBjOC4uOTQ3
ZmFkZjUzODZkZjAwNGU2ZDllMTJiODMzZmZhMjQxYzQwZWFhZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0y
NCw4ICsyNCw4IEBACiBHUFVQcm9jZXNzL0dQVVByb2Nlc3MuY3BwCiBHUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCiBHUFVQcm9jZXNzL0dQVVByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuY3BwCi1HUFVQcm9jZXNzL2dyYXBoaWNzL0Rpc3BsYXlMaXN0UmVhZGVySGFuZGxl
LmNwcAogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAorR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHQuY3BwCiBHUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcAogR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZXNvdXJjZUNhY2hlLmNwcAogR1BVUHJvY2Vzcy9ncmFwaGljcy9TY29wZWRSZW5kZXJp
bmdSZXNvdXJjZXNSZXF1ZXN0LmNwcApAQCAtNjA3LDEwICs2MDcsMTAgQEAgV2ViUHJvY2Vzcy9N
ZWRpYVN0cmVhbS9NZWRpYURldmljZVNhbmRib3hFeHRlbnNpb25zLmNwcAogV2ViUHJvY2Vzcy9N
ZWRpYVN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCiAKIFdlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAotV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvRGlzcGxheUxpc3RXcml0ZXJIYW5kbGUuY3BwCiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9J
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCiBXZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5RnVuY3Rpb25zR2VuZXJhdGVkLmNwcAog
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5jcHAK
K1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5LmNwcAog
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAog
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcAogV2Vi
UHJvY2Vzcy9HUFUvbWVkaWEvQXVkaW9UcmFja1ByaXZhdGVSZW1vdGUuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXND
b2NvYS50eHQKaW5kZXggNWU2YjUyYzEyMTE0NmM2ZDUzYWNlNjY1ZDY1YzI1NmZkZTVlOTU5My4u
YjE3OGYwZjI3ZjA2ZDE1NTExYTE5NDc0NjMzMThjNWJjZTlkZTZiNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0Nv
Y29hLnR4dApAQCAtNzMxLDYgKzczMSw3IEBAIFJlbW90ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5lck1l
c3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90ZUF1ZGlvU2Vzc2lvbk1lc3NhZ2VSZWNlaXZlci5jcHAK
IFJlbW90ZUF1ZGlvU2Vzc2lvblByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogUmVtb3RlQXVkaW9T
b3VyY2VQcm92aWRlck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVHcmFwaGljc0Nv
bnRleHRNZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAKIFJlbW90ZUltYWdlRGVjb2RlckFWRk1hbmFnZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwCiBSZW1vdGVNZWRpYVJlY29yZGVyTWVzc2FnZVJlY2VpdmVyLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDFjNjk1MTVi
YjE4MmRmYTVhNTQwNzc0ODY0ZjczZWMyOThjNDFkOS4uMWFmYjVlMjMxYzViM2JlYjk2OTIyM2Fi
ZGJlN2E0ZDU4MWFlMzNjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0zLDcgKzMsNyBAQAogCWFyY2hpdmVWZXJzaW9uID0gMTsKIAlj
bGFzc2VzID0gewogCX07Ci0Jb2JqZWN0VmVyc2lvbiA9IDUyOworCW9iamVjdFZlcnNpb24gPSA1
NDsKIAlvYmplY3RzID0gewogCiAvKiBCZWdpbiBQQlhBZ2dyZWdhdGVUYXJnZXQgc2VjdGlvbiAq
LwpAQCAtMjAzNCwxMSArMjAzNCw4IEBACiAJCUU1QkVGNjgyMjEzMEM0ODAwMEYzMTExMSAvKiBX
ZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25JT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1QkVGNjgwMjEzMEM0N0YwMEYzMTExMSAvKiBXZWJE
YXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25JT1MuaCAqLzsgfTsKIAkJRTVDQjA3REMyMEUxNjc4
RjAwMjJDMTgzIC8qIFdLRm9ybUNvbG9yQ29udHJvbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTVDQjA3REEyMEUxNjc4RjAwMjJDMTgzIC8qIFdLRm9y
bUNvbG9yQ29udHJvbC5oICovOyB9OwogCQlFRDgyQTdGMjEyOEM2RkFGMDA0NDc3QjMgLyogV0tC
dW5kbGVQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUEyMkYwRkYxMjg5RkNEOTAwODVFNzRGIC8qIFdLQnVuZGxlUGFnZU92ZXJsYXku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlGNDA5
NENCRDI1NTMwNTNEMDAzRDczRTMgLyogRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MDk0Q0JCMjU1MzA0QUYw
MDNENzNFMyAvKiBEaXNwbGF5TGlzdFJlYWRlckhhbmRsZS5oICovOyB9OwotCQlGNDA5NENCRTI1
NTMwNTQwMDAzRDczRTMgLyogRGlzcGxheUxpc3RXcml0ZXJIYW5kbGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MDk0Q0I5MjU1MzA0N0UwMDNENzNF
MyAvKiBEaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5oICovOyB9OwogCQlGNDA5QkExODFFNkU2NEJD
MDA5REEyOEUgLyogV0tEcmFnRGVzdGluYXRpb25BY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MDlCQTE3MUU2RTY0QjMwMDlEQTI4RSAvKiBX
S0RyYWdEZXN0aW5hdGlvbkFjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUY0MEJCQjQxMjU3RkY0NkUwMDY3NDYzQSAvKiBHUFVQcm9jZXNz
V2FrZXVwTWVzc2FnZUFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjQwQkJCNDAyNTdGRjQ2RTAwNjc0NjNBIC8qIEdQVVByb2Nlc3NXYWtl
dXBNZXNzYWdlQXJndW1lbnRzLmggKi87IH07Ci0JCUY0MTRDRTJEMjY5REU2RUEwMEJEMjE2QSAv
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MTRDRTJDMjY5REU2RUEwMEJEMjE2QSAvKiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kU3RhdGUuaCAqLzsgfTsKIAkJRjQyRDYzNDEyMkEwRUZERjAwRDJGQjNB
IC8qIFdlYkF1dG9jb3JyZWN0aW9uRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjQyRDYzM0YyMkEwRUZEMzAwRDJGQjNBIC8qIFdlYkF1dG9jb3Jy
ZWN0aW9uRGF0YS5oICovOyB9OwogCQlGNDMwRTk0MjIyNDczMzVGMDA1RkUwNTMgLyogV2Vic2l0
ZU1ldGFWaWV3cG9ydFBvbGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjQzMEU5NDEyMjQ3MzJBOTAwNUZFMDUzIC8qIFdlYnNpdGVNZXRhVmlld3Bv
cnRQb2xpY3kuaCAqLzsgfTsKIAkJRjQzMEU5NDQyMjQ3M0RGRjAwNUZFMDUzIC8qIFdlYkNvbnRl
bnRNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NDMwRTk0MzIyNDczREI4MDA1RkUwNTMgLyogV2ViQ29udGVudE1vZGUuaCAqLzsgfTsKQEAgLTIw
NTEsMTMgKzIwNDgsMTYgQEAKIAkJRjQ0MjkxOTYxRkE1OTQyQTAwMkNDOTNFIC8qIF9XS0F0dGFj
aG1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjQ0MjkxOTUxRkE1OTQyQTAwMkNDOTNFIC8qIF9XS0F0dGFjaG1lbnRJbnRlcm5hbC5o
ICovOyB9OwogCQlGNDQ4MTU2NDIzODc4MjAwMDA5ODI2NTcgLyogV0tEZWZlcnJpbmdHZXN0dXJl
UmVjb2duaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjQ0ODE1NjIyMzg3ODIwMDAwOTgyNjU3IC8qIFdLRGVmZXJyaW5nR2VzdHVyZVJlY29nbml6
ZXIuaCAqLzsgfTsKIAkJRjQ0REZFQjIxRTlFNzUyRjAwMzhEMTk2IC8qIFdlYkljb25VdGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NERG
RUIwMUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJY29uVXRpbGl0aWVzLmggKi87IH07CisJCUY0NTE3
RDdCMjZGQkNEMzkwMDRDODQ3NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXNSZXBs
aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDUx
N0Q3OTI2RkJDRDM4MDA0Qzg0NzUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzUmVw
bGllcy5oICovOyB9OworCQlGNDUxN0Q3QzI2RkJDRDM5MDA0Qzg0NzUgLyogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZE1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNDUxN0Q3QTI2RkJDRDM4MDA0Qzg0NzUgLyogUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZE1lc3NhZ2VzLmggKi87IH07CisJCUY0NTFDMEZFMjcwM0IyNjMwMDJCQTAzQiAvKiBSZW1v
dGVHcmFwaGljc0NvbnRleHRQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjQ4QkI4REQyNkY5NjM1RDAwMUMxQzQwIC8qIFJlbW90ZUdyYXBoaWNz
Q29udGV4dFByb3h5LmggKi87IH07CiAJCUY0NjYwQkMyMjVERUYwODEwMEU4NjU5OCAvKiBQYXN0
ZWJvYXJkQWNjZXNzSW50ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNDY2MEJDMTI1REVGMDgxMDBFODY1OTggLyogUGFzdGVib2FyZEFjY2Vzc0lu
dGVudC5oICovOyB9OwogCQlGNDg1NzBBMzI2NDRCRUM1MDBDMDVGNzEgLyogVGltZW91dC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ4NTcwQTIyNjQ0
QkVDNDAwQzA1RjcxIC8qIFRpbWVvdXQuaCAqLzsgfTsKIAkJRjQ4RDJBODUyMTU4M0E3RTAwQzY3
NTJCIC8qIEFwcEtpdFNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjQ4RDJBODQyMTU4M0EwMjAwQzY3NTJCIC8qIEFwcEtpdFNQSS5oICovOyB9Owor
CQlGNDkyRkI2MDI3MDYxNDlBMDA1NUU0RDEgLyogU3RyZWFtTWVzc2FnZVJlY2VpdmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDkyRkI1RjI3MDYx
NDk5MDA1NUU0RDEgLyogU3RyZWFtTWVzc2FnZVJlY2VpdmVyLmggKi87IH07CiAJCUY0OTZBNDMx
MUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0OTZBNDJGMUY1OEEyNzIwMDRD
MTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCAqLzsgfTsKIAkJRjQ5NzRFNzYyNjVF
Q0JCQzAwQjQ5QjhDIC8qIFdLUmV2ZWFsSXRlbVByZXNlbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ0NkVERUYyNjVFQjJCMDAwMzFEQThGIC8q
IFdLUmV2ZWFsSXRlbVByZXNlbnRlci5oICovOyB9OwogCQlGNDk3NUNGMjI2MjRCODBBMDAzQzYy
NkUgLyogV0tRdWlja0xvb2tQcmV2aWV3Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ5NzVDRjEyNjI0QjgwQTAwM0M2MjZFIC8qIFdL
UXVpY2tMb29rUHJldmlld0NvbnRyb2xsZXIuaCAqLzsgfTsKLQkJRjRBNkQ2QkMyNTRDQTNFOTAw
QjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEE2RDZCQjI1NENBM0U5MDBCNjVGQUEgLyogU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGUuaCAqLzsgfTsKIAkJRjRCQTMzRjIyNTc1N0U4OTAwMEEzQ0U4
IC8qIFdLSW1hZ2VBbmFseXNpc0dlc3R1cmVSZWNvZ25pemVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEJBMzNGMDI1NzU3RTg5MDAwQTNDRTggLyog
V0tJbWFnZUFuYWx5c2lzR2VzdHVyZVJlY29nbml6ZXIuaCAqLzsgfTsKIAkJRjRDQjA5RTUyMjVE
NUEwOTAwODkxNDg3IC8qIFdlYnNpdGVNZWRpYVNvdXJjZVBvbGljeS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRDQjA5RTQyMjVENUEwMzAwODkxNDg3
IC8qIFdlYnNpdGVNZWRpYVNvdXJjZVBvbGljeS5oICovOyB9OwogCQlGNENGMUU5RDI1RTQwREND
MDAwRjlENzMgLyogR2VzdHVyZVJlY29nbml6ZXJDb25zaXN0ZW5jeUVuZm9yY2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNENGMUU5QjI1RTQwREND
MDAwRjlENzMgLyogR2VzdHVyZVJlY29nbml6ZXJDb25zaXN0ZW5jeUVuZm9yY2VyLmggKi87IH07
CkBAIC02MDkzLDE1ICs2MDkzLDEwIEBACiAJCUVDQTY4MEQzMUU2OTA0QjUwMDczMUQyMCAvKiBF
eHRyYVByaXZhdGVTeW1ib2xzRm9yVEFQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFeHRyYVByaXZhdGVTeW1ib2xzRm9yVEFQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFQ0JGQzFEQjFFNkE0RDY2MDAwMzAwQzcgLyogRXh0cmFQdWJsaWNTeW1ib2xzRm9y
VEFQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRyYVB1YmxpY1N5bWJvbHNGb3JUQVBJLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYwMzY5Nzg3MTVGNEJGMDUwMEMzQTgwRSAvKiBXZWJD
b2xvclBpY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJD
b2xvclBpY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUY0MDk0Q0I5MjU1
MzA0N0UwMDNENzNFMyAvKiBEaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGNDA5NENCQTI1NTMwNDdFMDAzRDczRTMgLyogRGlzcGxheUxpc3RXcml0ZXJIYW5kbGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheUxpc3RXcml0ZXJIYW5kbGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlGNDA5NENCQjI1NTMwNEFGMDAzRDczRTMgLyogRGlzcGxh
eUxpc3RSZWFkZXJIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RSZWFkZXJIYW5k
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjQwOTRDQkMyNTUzMDRBRjAwM0Q3
M0UzIC8qIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERp
c3BsYXlMaXN0UmVhZGVySGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RjQwOUJBMTcxRTZFNjRCMzAwOURBMjhFIC8qIFdLRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0MEJCQjQwMjU3RkY0NkUwMDY3NDYzQSAv
KiBHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHUFVQ
cm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGNDBEMUI2ODIyMEJEQzBGMDBCNDlBMDEgLyogV2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4dC5oOyBwYXRoID0gaW9z
L1dlYkF1dG9jb3JyZWN0aW9uQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGNDEwNTY2MTIxMzA2OTlBMDA5MjI4MUQgLyogQVBJQXR0YWNobWVudENvY29hLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gQVBJQXR0YWNobWVudENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGNDE0Q0UyQzI2OURFNkVBMDBCRDIxNkEgLyogUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDJENjMzRjIyQTBFRkQzMDBEMkZC
M0EgLyogV2ViQXV0b2NvcnJlY3Rpb25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFdlYkF1dG9jb3JyZWN0aW9uRGF0YS5oOyBwYXRoID0gaW9zL1dlYkF1dG9jb3JyZWN0
aW9uRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDJENjM0MDIyQTBFRkQz
MDBEMkZCM0EgLyogV2ViQXV0b2NvcnJlY3Rpb25EYXRhLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViQXV0b2NvcnJlY3Rpb25EYXRhLm1tOyBwYXRoID0gaW9z
L1dlYkF1dG9jb3JyZWN0aW9uRGF0YS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RjQzMEU5NDEyMjQ3MzJBOTAwNUZFMDUzIC8qIFdlYnNpdGVNZXRhVmlld3BvcnRQb2xpY3kuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2Vic2l0ZU1ldGFWaWV3cG9ydFBvbGljeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNjEyMywxNSArNjExOCwyMyBAQAogCQlGNDQ4MTU2MzIzODc4MjAw
MDA5ODI2NTcgLyogV0tEZWZlcnJpbmdHZXN0dXJlUmVjb2duaXplci5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgbmFtZSA9IFdLRGVmZXJyaW5nR2VzdHVyZVJlY29nbml6ZXIubW07IHBhdGggPSBpb3MvV0tE
ZWZlcnJpbmdHZXN0dXJlUmVjb2duaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRjQ0REZFQjAxRTlFNzUyRjAwMzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViSWNvblV0aWxpdGllcy5oOyBwYXRoID0gaW9z
L1dlYkljb25VdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ0REZF
QjExRTlFNzUyRjAwMzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJJY29uVXRpbGl0aWVzLm1tOyBwYXRoID0gaW9z
L1dlYkljb25VdGlsaXRpZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0NTE3
RDc3MjZGQkNDRTQwMDRDODQ3NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZVJlY2Vp
dmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRNZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJRjQ1MTdENzkyNkZCQ0QzODAwNEM4NDc1IC8q
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlc1JlcGxpZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzUmVwbGllcy5o
OyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVz
c2FnZXNSZXBsaWVzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUY0
NTE3RDdBMjZGQkNEMzgwMDRDODQ3NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZE1lc3NhZ2VzLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owor
CQlGNDUxQzEwMDI3MDNEODUzMDAyQkEwM0IgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0Lm1lc3Nh
Z2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFJlbW90ZUdyYXBoaWNzQ29udGV4dC5tZXNzYWdlcy5pbjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ2NjBCQzEyNURFRjA4MTAwRTg2NTk4IC8qIFBhc3RlYm9h
cmRBY2Nlc3NJbnRlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFzdGVib2FyZEFjY2Vzc0ludGVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDdBMDUxNjI2ODI3QTA5MDA3RTVDRjIg
LyogUXVpY2tMb29rUHJldmlld0FjdGl2aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFF1aWNrTG9va1By
ZXZpZXdBY3Rpdml0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDg1NzBBMjI2
NDRCRUM0MDBDMDVGNzEgLyogVGltZW91dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUaW1lb3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0OEJCOEREMjZG
OTYzNUQwMDFDMUM0MCAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGNDhCQjhERTI2Rjk2MzVEMDAxQzFDNDAgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0
UHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNDhCQjhERjI2Rjk2MzkyMDAxQzFD
NDAgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUdyYXBo
aWNzQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNDhCQjhFMDI2Rjk2
MzkyMDAxQzFDNDAgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlbW90ZUdyYXBoaWNzQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUY0OEQyQTg0MjE1ODNBMDIwMEM2NzUyQiAvKiBBcHBLaXRTUEkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQXBwS2l0U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0OTJGQjVGMjcw
NjE0OTkwMDU1RTREMSAvKiBTdHJlYW1NZXNzYWdlUmVjZWl2ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RyZWFtTWVzc2FnZVJlY2VpdmVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUY0OTZBNDJGMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVy
YWN0aW9uU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7
IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUY0OTZBNDMwMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0
aW9uU3RhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBEcmFnRHJvcEludGVyYWN0aW9uU3Rh
dGUubW07IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGNDk3NUNGMTI2MjRCODBBMDAzQzYyNkUgLyogV0tRdWlja0xv
b2tQcmV2aWV3Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1F1aWNrTG9va1ByZXZpZXdD
b250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTc1Q0YzMjYyNEI5
MTgwMDNDNjI2RSAvKiBXS1F1aWNrTG9va1ByZXZpZXdDb250cm9sbGVyLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV0tRdWlja0xvb2tQcmV2aWV3Q29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRjRBNkQ2QkIyNTRDQTNFOTAwQjY1RkFBIC8qIFNoYXJlZERpc3Bs
YXlMaXN0SGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0QTdDRTg0MjY2N0VCNEUwMDIyODY4NSAv
KiBUZXh0UmVjb2duaXRpb25VcGRhdGVSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFJlY29n
bml0aW9uVXBkYXRlUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0QUM2
NTVFMjJBMzE0MEUwMEEwNTYwNyAvKiBXZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJT1MubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJQcmVmZXJlbmNlc0Rl
ZmF1bHRWYWx1ZXNJT1MubW07IHBhdGggPSBpb3MvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVz
SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEIzNzhEMDIxRERCQkFCMDA5
NUEzNzggLyogV2ViVW5kb1N0ZXBJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJVbmRvU3RlcElELmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02OTYwLDcgKzY5NjMsNiBAQAogCQkJCTFB
NjQyMEUzMTJEQ0UyRkYwMENBQUUyQyAvKiBTaGFyZWFibGVCaXRtYXAuaCAqLywKIAkJCQk1MTIx
NzQ1RTE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuY3BwICovLAogCQkJCTUx
MjE3NDVGMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5oICovLAotCQkJCUY0
QTZENkJCMjU0Q0EzRTkwMEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oICovLAog
CQkJCTgzMTNGN0VBMUY3REFFMDQwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoU3RvcmUuY3Bw
ICovLAogCQkJCTgzMTNGN0U5MUY3REFFMDMwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoU3Rv
cmUuaCAqLywKIAkJCQk4MzEzRjdFODFGN0RBRTAzMDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFz
aFRhYmxlLmNwcCAqLywKQEAgLTczNDcsNiArNzM0OSw3IEBACiAJCQkJN0I3MzEyMzkyNUNDODUy
NTAwM0IyNzk2IC8qIFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmggKi8sCiAJCQkJN0I3MzEyMzIy
NUNDODUyMzAwM0IyNzk2IC8qIFN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuY3BwICovLAogCQkJ
CTdCNzMxMjM1MjVDQzg1MjQwMDNCMjc5NiAvKiBTdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmgg
Ki8sCisJCQkJRjQ5MkZCNUYyNzA2MTQ5OTAwNTVFNEQxIC8qIFN0cmVhbU1lc3NhZ2VSZWNlaXZl
ci5oICovLAogCQkJCTdCNzMxMjM3MjVDQzg1MjQwMDNCMjc5NiAvKiBTdHJlYW1TZXJ2ZXJDb25u
ZWN0aW9uLmNwcCAqLywKIAkJCQk3QjczMTIzODI1Q0M4NTI0MDAzQjI3OTYgLyogU3RyZWFtU2Vy
dmVyQ29ubmVjdGlvbi5oICovLAogCQkJCTFBRTAwRDY5MTgzMjdDMTIwMDA4N0RENyAvKiBTdHJp
bmdSZWZlcmVuY2UuY3BwICovLApAQCAtOTA1Nyw4ICs5MDYwLDYgQEAKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNzI3QTdGMzMyNDA3ODUyNzAwNEQyOTMxIC8qIGNv
Y29hICovLAotCQkJCUY0MDk0Q0JBMjU1MzA0N0UwMDNENzNFMyAvKiBEaXNwbGF5TGlzdFdyaXRl
ckhhbmRsZS5jcHAgKi8sCi0JCQkJRjQwOTRDQjkyNTUzMDQ3RTAwM0Q3M0UzIC8qIERpc3BsYXlM
aXN0V3JpdGVySGFuZGxlLmggKi8sCiAJCQkJN0I2NEMwQjYyNTRDNUMyNTAwMDZCNEFGIC8qIEdy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllci5oICovLAogCQkJCTcyN0E3RjM5MjQwNzg4RjEwMDRE
MjkzMSAvKiBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCAqLywKIAkJCQk3MjdBN0YzNzI0MDc4
OEYwMDA0RDI5MzEgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcCAqLywK
QEAgLTkwNjksNiArOTA3MCw4IEBACiAJCQkJN0I5MDQxNjYyNTRBRkRFQjAwNkVFQjhDIC8qIFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuaCAqLywKIAkJCQk3QjkwNDE2NzI1NEFGRTE3MDA2
RUVCOEMgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5tZXNzYWdlcy5pbiAqLywKIAkJ
CQk3QkU3MjY1NzI1NzRGNjcyMDBFODVEOTggLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94
eUZ1bmN0aW9uc0dlbmVyYXRlZC5jcHAgKi8sCisJCQkJRjQ4QkI4REUyNkY5NjM1RDAwMUMxQzQw
IC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5LmNwcCAqLywKKwkJCQlGNDhCQjhERDI2Rjk2
MzVEMDAxQzFDNDAgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHkuaCAqLywKIAkJCQk3MjdB
N0Y0OTI0MDhBRUU2MDA0RDI5MzEgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oICovLAogCQkJ
CTU1MDY0MDlEMjQwNzE2MDkwMEFBRTA0NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
Y3BwICovLAogCQkJCTU1MDY0MDlFMjQwNzE2MDkwMEFBRTA0NSAvKiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuaCAqLywKQEAgLTkwODMsOSArOTA4NiwxMCBAQAogCQk1NTA2NDBBMTI0MDcx
QTI5MDBBQUUwNDUgLyogZ3JhcGhpY3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAotCQkJCUY0MDk0Q0JDMjU1MzA0QUYwMDNENzNFMyAvKiBEaXNwbGF5TGlzdFJl
YWRlckhhbmRsZS5jcHAgKi8sCi0JCQkJRjQwOTRDQkIyNTUzMDRBRjAwM0Q3M0UzIC8qIERpc3Bs
YXlMaXN0UmVhZGVySGFuZGxlLmggKi8sCiAJCQkJNTVBRDA5NDMyNDA4QTBFNjAwREU0RDJGIC8q
IFBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQlGNDhCQjhFMDI2Rjk2MzkyMDAx
QzFDNDAgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0LmNwcCAqLywKKwkJCQlGNDhCQjhERjI2Rjk2
MzkyMDAxQzFDNDAgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0LmggKi8sCisJCQkJRjQ1MUMxMDAy
NzAzRDg1MzAwMkJBMDNCIC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dC5tZXNzYWdlcy5pbiAqLywK
IAkJCQk3QjkwNDE2OTI1NEFGRUE3MDA2RUVCOEMgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wu
Y3BwICovLAogCQkJCTdCOTA0MTZBMjU0QUZFQTcwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTC5oICovLAogCQkJCTdCOTA0MTY4MjU0QUZFQTcwMDZFRUI4QyAvKiBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTC5tZXNzYWdlcy5pbiAqLywKQEAgLTkwOTYsNyArOTEwMCw2IEBACiAJCQkJ
NTUwNjQwQTMyNDA3MUE2MTAwQUFFMDQ1IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLywK
IAkJCQk1NTA2NDBBNDI0MDcxQzIxMDBBQUUwNDUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5t
ZXNzYWdlcy5pbiAqLywKIAkJCQk0NjA4ODlGRjI2MUZBOEE5MDBFMjUwMEQgLyogUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycy5oICovLAotCQkJCUY0MTRDRTJDMjY5REU2
RUEwMEJEMjE2QSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGUuaCAqLywKIAkJCQk3MjZE
NTZERDI1M0E2NDgxMDAwMkVGOTAgLyogUmVtb3RlUmVzb3VyY2VDYWNoZS5jcHAgKi8sCiAJCQkJ
NzI2RDU2REUyNTNBNjQ4MTAwMDJFRjkwIC8qIFJlbW90ZVJlc291cmNlQ2FjaGUuaCAqLywKIAkJ
CQk3QkNGNzBDQTI2MTQ5MzVFMDBFNEZCNzAgLyogU2NvcGVkUmVuZGVyaW5nUmVzb3VyY2VzUmVx
dWVzdC5jcHAgKi8sCkBAIC0xMTQ1Niw2ICsxMTQ1OSw5IEBACiAJCQkJQ0Q4MjUyREEyNUQ0OTE1
NDAwODYyRkQ4IC8qIFJlbW90ZVJlbW90ZUNvbW1hbmRMaXN0ZW5lclByb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcCAqLywKIAkJCQlDRDgyNTJEOTI1RDQ5MTU0MDA4NjJGRDggLyogUmVtb3RlUmVtb3Rl
Q29tbWFuZExpc3RlbmVyUHJveHlNZXNzYWdlcy5oICovLAogCQkJCUNEODI1MkQ4MjVENDkxNTMw
MDg2MkZEOCAvKiBSZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVuZXJQcm94eU1lc3NhZ2VzUmVwbGll
cy5oICovLAorCQkJCUY0NTE3RDc3MjZGQkNDRTQwMDRDODQ3NSAvKiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKKwkJCQlGNDUxN0Q3QTI2RkJDRDM4MDA0Qzg0
NzUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmggKi8sCisJCQkJRjQ1MTdENzky
NkZCQ0QzODAwNEM4NDc1IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlc1JlcGxpZXMu
aCAqLywKIAkJCQkwRjU5NDdBNTE4N0I1MTc2MDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCTBGNTk0N0E2MTg3QjUxNzYwMDQz
Nzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VzLmggKi8sCiAJCQkJMURE
MkE2NkIyNTYyMDIxRTAwRkY3QjZGIC8qIFJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLywKQEAgLTEyMjM3LDggKzEyMjQzLDYgQEAKIAkJCQk4Mzg5MUI2QzFBNjhD
MzBCMDAzMEYzODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMxODE3MzYxMjA1ODQyNDcwMERGREE2NSAvKiBEaXNwbGF5TGluay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYxODlDQUMyNDc0OUYyRjAwRTU4RDgxIC8qIERpc3BsYXlMaW5rT2JzZXJ2ZXJJ
RC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRjQwOTRDQkQyNTUzMDUzRDAwM0Q3M0UzIC8qIERpc3Bs
YXlMaXN0UmVhZGVySGFuZGxlLmggaW4gSGVhZGVycyAqLywKLQkJCQlGNDA5NENCRTI1NTMwNTQw
MDAzRDczRTMgLyogRGlzcGxheUxpc3RXcml0ZXJIYW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDMTQyNzAyMUMyM0Y4NEMwMEQ0MTE4MyAvKiBEb3dubG9hZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUMxNDI3MDUxQzIzRjg0QzAwRDQxMTgzIC8qIERvd25sb2FkSUQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTVDMTQyNzA3MUMyM0Y4NEMwMEQ0MTE4MyAvKiBEb3dubG9hZE1hbmFnZXIuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTI1NDksNiArMTI1NTMsNyBAQAogCQkJCUNEQUMyMEI0MjNGQjU4RjIw
MDIxREVFMyAvKiBSZW1vdGVDRE1JbnN0YW5jZVByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQlD
REFDMjBDQTIzRkMyRjc1MDAyMURFRTMgLyogUmVtb3RlQ0RNSW5zdGFuY2VTZXNzaW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDREFDMjBDOTIzRkMyRjc1MDAyMURFRTMgLyogUmVtb3RlQ0RNSW5z
dGFuY2VTZXNzaW9uSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjQ1MUMwRkUyNzAz
QjI2MzAwMkJBMDNCIC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkyRDQ3QjU2RDE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3Rv
cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEREY3MzE1MThFOTUwNjAwMDRGNUE2NiAvKiBSZW1v
dGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjE2
QUVBMTY0QjNBODgwMDI5MEQ2MiAvKiBSZW1vdGVMYXllclRyZWVDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTEyNTc3LDcgKzEyNTgyLDggQEAKIAkJCQkxQUMxMzM4NjE4NTkwQzQ2MDBGM0VD
MDUgLyogUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDYwODhBMDAyNjFGQThCQzAwRTI1MDBEIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ2MDg4QTAxMjYxRkE4QzQwMEUyNTAwRCAvKiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKLQkJCQlGNDE0Q0Uy
RDI2OURFNkVBMDBCRDIxNkEgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlGNDUxN0Q3QzI2RkJDRDM5MDA0Qzg0NzUgLyogUmVtb3RlUmVuZGVyaW5n
QmFja2VuZE1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQlGNDUxN0Q3QjI2RkJDRDM5MDA0
Qzg0NzUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzUmVwbGllcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY1OTQ3OTAxODdCM0IzQTAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU5NDdBODE4N0I1MTc2MDA0Mzc4NTcg
LyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY1OTQ3OUIxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAtMTI2MTgsNyArMTI2MjQsNiBAQAogCQkJCTUxMjE3
NDYxMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTE4MzQ5NDIyNEVGNDY3ODAwQkRDOUE4IC8qIFNoYXJlZEJ1ZmZlckNvcHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJEQzE4RkY2RUYyQTMxMzBDMTMwMTc2NyAvKiBTaGFyZWRCdWZmZXJE
YXRhUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKLQkJCQlGNEE2RDZCQzI1NENBM0U5MDBCNjVG
QUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMjRC
RUQ1MTIwODk0RDEwMEZCQjA1OSAvKiBTaGFyZWRNZW1vcnkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUNENEI0RDlEMUU3NjVFMDAwMEQyNzA5MiAvKiBTaGFyZWRSaW5nQnVmZmVyU3RvcmFnZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODMxM0Y3RUMxRjdEQUUwODAwQjk0NEVCIC8qIFNoYXJlZFN0cmlu
Z0hhc2hTdG9yZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMjY1Myw2ICsxMjY1OCw3IEBACiAJCQkJ
N0I3MzEyM0EyNUNDODUyNTAwM0IyNzk2IC8qIFN0cmVhbUNvbm5lY3Rpb25CdWZmZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTdCNzMxMjQyMjVDQzg1MjUwMDNCMjc5NiAvKiBTdHJlYW1Db25uZWN0
aW9uRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0I3MzEyM0UyNUNDODUyNTAwM0IyNzk2
IC8qIFN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuaCBpbiBIZWFkZXJzICovLAorCQkJCUY0OTJG
QjYwMjcwNjE0OUEwMDU1RTREMSAvKiBTdHJlYW1NZXNzYWdlUmVjZWl2ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdCNzMxMjQxMjVDQzg1MjUwMDNCMjc5NiAvKiBTdHJlYW1TZXJ2ZXJDb25uZWN0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUwMEQ2QzE4MzI3QzEyMDAwODdERDcgLyogU3Ry
aW5nUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOTZCRDg1RDE1MDE5QkMzMDA3MUY0
MjQgLyogU3RyaW5nVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvRGlzcGxheUxpc3RXcml0ZXJIYW5kbGUu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9EaXNwbGF5TGlzdFdy
aXRlckhhbmRsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MTk4NzdmNGRl
YWQ1NDFlOWY0MjMwNTM3Njc5MzNkYzRjY2QxY2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9EaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRpc3BsYXlM
aXN0V3JpdGVySGFuZGxlLmgiCi0KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotc2l6ZV90
IERpc3BsYXlMaXN0V3JpdGVySGFuZGxlOjphZHZhbmNlKHNpemVfdCBhbW91bnQpCi17Ci0gICAg
bV93cml0YWJsZU9mZnNldCA9IENoZWNrZWRTaXplIHsgbV93cml0YWJsZU9mZnNldCB9ICsgYW1v
dW50OwotICAgIHJldHVybiBDaGVja2VkU2l6ZSB7IGhlYWRlcigpLnVucmVhZEJ5dGVzLmV4Y2hh
bmdlQWRkKGFtb3VudCkgfSArIGFtb3VudDsKLX0KLQotc2l6ZV90IERpc3BsYXlMaXN0V3JpdGVy
SGFuZGxlOjphdmFpbGFibGVDYXBhY2l0eSgpIGNvbnN0Ci17Ci0gICAgaWYgKFVOTElLRUxZKHNo
YXJlZE1lbW9yeSgpLnNpemUoKSA8IHdyaXRhYmxlT2Zmc2V0KCkpKQotICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgcmV0dXJuIHNoYXJlZE1lbW9yeSgpLnNpemUo
KSAtIHdyaXRhYmxlT2Zmc2V0KCk7Ci19Ci0KLURpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxl
IERpc3BsYXlMaXN0V3JpdGVySGFuZGxlOjpjcmVhdGVIYW5kbGUoKSBjb25zdAotewotICAgIHJl
dHVybiB7Ci0gICAgICAgIGlkZW50aWZpZXIoKSwKLSAgICAgICAgZGF0YSgpICsgd3JpdGFibGVP
ZmZzZXQoKSwKLSAgICAgICAgYXZhaWxhYmxlQ2FwYWNpdHkoKQotICAgIH07Ci19Ci0KLWJvb2wg
RGlzcGxheUxpc3RXcml0ZXJIYW5kbGU6Om1vdmVXcml0YWJsZU9mZnNldFRvU3RhcnRJZlBvc3Np
YmxlKCkKLXsKLSAgICBpZiAobV93cml0YWJsZU9mZnNldCA8PSBTaGFyZWREaXNwbGF5TGlzdEhh
bmRsZTo6aGVhZGVyU2l6ZSgpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fd3JpdGFibGVP
ZmZzZXQgPT0gU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmhlYWRlclNpemUoKSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICh1bnJlYWRCeXRlcygpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3dyaXRhYmxlT2Zmc2V0ID0gU2hhcmVkRGlzcGxheUxpc3RI
YW5kbGU6OmhlYWRlclNpemUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL0Rpc3BsYXlMaXN0V3JpdGVySGFuZGxlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL0Rpc3BsYXlMaXN0V3JpdGVySGFuZGxlLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGJiMWUzZTAwYWY4NDQwMjg4ZWVhZmZkNTAzMTViNjliZTE4YmFlM2EuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9EaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCIKLSNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgRGlzcGxheUxpc3RXcml0ZXJI
YW5kbGUgOiBwdWJsaWMgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUgewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKERpc3BsYXlMaXN0V3JpdGVySGFuZGxlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxEaXNwbGF5TGlzdFdyaXRlckhhbmRsZT4g
Y3JlYXRlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlm
aWVyLCBSZWY8U2hhcmVkTWVtb3J5PiYmIHNoYXJlZE1lbW9yeSkKLSAgICB7Ci0gICAgICAgIGlm
IChzaGFyZWRNZW1vcnktPnNpemUoKSA8PSBoZWFkZXJTaXplKCkpCi0gICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaXNwbGF5TGlzdFdyaXRl
ckhhbmRsZShpZGVudGlmaWVyLCBXVEZNb3ZlKHNoYXJlZE1lbW9yeSkpKTsKLSAgICB9Ci0KLSAg
ICBzaXplX3Qgd3JpdGFibGVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3dyaXRhYmxlT2Zmc2V0
OyB9Ci0gICAgc2l6ZV90IGF2YWlsYWJsZUNhcGFjaXR5KCkgY29uc3Q7Ci0KLSAgICBib29sIG1v
dmVXcml0YWJsZU9mZnNldFRvU3RhcnRJZlBvc3NpYmxlKCk7Ci0KLSAgICBzaXplX3QgYWR2YW5j
ZShzaXplX3QgYW1vdW50KTsKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhh
bmRsZSBjcmVhdGVIYW5kbGUoKSBjb25zdDsKLQotICAgIGJvb2wgdHJ5VG9SZXN1bWUoU2hhcmVk
RGlzcGxheUxpc3RIYW5kbGU6OlJlc3VtZVJlYWRpbmdJbmZvcm1hdGlvbiYmIGluZm8pCi0gICAg
ewotICAgICAgICBhdXRvJiBoZWFkZXIgPSB0aGlzLT5oZWFkZXIoKTsKLSAgICAgICAgaGVhZGVy
LnJlc3VtZVJlYWRpbmdJbmZvID0gV1RGTW92ZShpbmZvKTsKLSAgICAgICAgcmV0dXJuIGhlYWRl
ci53YWl0aW5nU3RhdHVzLmNvbXBhcmVFeGNoYW5nZVdlYWsoCi0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6V2FpdGluZ1N0YXR1c1N0b3JhZ2VUeXBlPihT
aGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6V2FpdGluZ1N0YXR1czo6V2FpdGluZyksCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6V2FpdGluZ1N0YXR1c1N0
b3JhZ2VUeXBlPihTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6V2FpdGluZ1N0YXR1czo6UmVzdW1p
bmcpCi0gICAgICAgICk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIERpc3BsYXlMaXN0V3JpdGVy
SGFuZGxlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlm
aWVyLCBSZWY8U2hhcmVkTWVtb3J5PiYmIHNoYXJlZE1lbW9yeSkKLSAgICAgICAgOiBTaGFyZWRE
aXNwbGF5TGlzdEhhbmRsZShpZGVudGlmaWVyLCBXVEZNb3ZlKHNoYXJlZE1lbW9yeSkpCi0gICAg
ICAgICwgbV93cml0YWJsZU9mZnNldChTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6aGVhZGVyU2l6
ZSgpKQotICAgIHsKLSAgICB9Ci0KLSAgICBzaXplX3QgbV93cml0YWJsZU9mZnNldCB7IDAgfTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMjM1ZjgwNmZjZWExNzk3YTRlNDAwNGFlODRhNTZjNDJh
MGZlYTZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eS5jcHAKQEAgLTAsMCArMSw2MzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHkuaCIKKworI2lu
Y2x1ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dE1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9EaXNwbGF5TGlzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZl
ci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFQbGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK1JlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpSZW1vdGVHcmFw
aGljc0NvbnRleHRQcm94eShJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eSYgcmVuZGVyaW5nQmFja2VuZCwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFs
Q2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCisgICAgOiBt
X3N0YXRlU3RhY2soe3sgeyB9LCBpbml0aWFsQ1RNLCBpbml0aWFsQ2xpcCB9fSkKKyAgICAsIG1f
ZHJhd0dseXBoc1JlY29yZGVyKCp0aGlzLCBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCisgICAgLCBt
X2Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIoKSkKKyAgICAsIG1faW1hZ2VCdWZmZXIobWFrZVdlYWtQdHIoaW1hZ2VCdWZm
ZXIpKQorICAgICwgbV9yZW5kZXJpbmdCYWNrZW5kKG1ha2VXZWFrUHRyKHJlbmRlcmluZ0JhY2tl
bmQpKQorICAgICwgbV9pc05lc3RlZChmYWxzZSkKK3sKK30KKworUmVtb3RlR3JhcGhpY3NDb250
ZXh0UHJveHk6OlJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5KFJlbW90ZUdyYXBoaWNzQ29udGV4
dFByb3h5JiBwYXJlbnQsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKKyAgICA6IG1fc3RhdGVTdGFjayh7eyB7IH0sIGluaXRp
YWxDVE0sIGluaXRpYWxDbGlwIH19KQorICAgICwgbV9kcmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMs
IHBhcmVudC5tX2RyYXdHbHlwaHNSZWNvcmRlci5kZWNvbnN0cnVjdERyYXdHbHlwaHMoKSkKKyAg
ICAsIG1fZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKHBhcmVudC5tX2Rlc3RpbmF0aW9uQnVm
ZmVySWRlbnRpZmllcikKKyAgICAsIG1faW1hZ2VCdWZmZXIocGFyZW50Lm1faW1hZ2VCdWZmZXIp
CisgICAgLCBtX3JlbmRlcmluZ0JhY2tlbmQocGFyZW50Lm1fcmVuZGVyaW5nQmFja2VuZCkKKyAg
ICAsIG1faXNOZXN0ZWQodHJ1ZSkKK3sKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQ
cm94eTo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIW1fcmVu
ZGVyaW5nQmFja2VuZCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dDo6R2V0UGl4ZWxCdWZmZXIoeyBvdXRwdXRGb3JtYXQsIHNvdXJj
ZVJlY3QgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpwdXRQaXhl
bEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEZvcm1hdCkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFja2VuZCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dDo6UHV0UGl4ZWxCdWZmZXIoeyBwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0
Rm9ybWF0IH0pKTsKK30KKworc3RhdGljIGJvb2wgY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFu
Z2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKK3sKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGlubGluZVN0
YXRlQ2hhbmdlRmxhZ3MgeworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhp
Y2tuZXNzQ2hhbmdlLAorICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JD
aGFuZ2UsCisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UsCisg
ICAgfTsKKworICAgIGlmIChjaGFuZ2VGbGFncyAhPSAoY2hhbmdlRmxhZ3MgJiBpbmxpbmVTdGF0
ZUNoYW5nZUZsYWdzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkgJiYg
IWNoYW5nZXMubV9zdGF0ZS5zdHJva2VDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpICYmICFjaGFuZ2VzLm1fc3RhdGUuZmlsbENv
bG9yLnRyeUdldEFzU1JHQkFCeXRlcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6cmVjb3Jk
TmF0aXZlSW1hZ2VVc2UoTmF0aXZlSW1hZ2UmIGltYWdlKQoreworICAgIGlmIChVTkxJS0VMWSgh
bV9yZW5kZXJpbmdCYWNrZW5kKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZW5kZXJpbmdC
YWNrZW5kLT5yZWNvcmROYXRpdmVJbWFnZVVzZShpbWFnZSk7Cit9CisKK3ZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0UHJveHk6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCit7CisgICAgaWYgKCFjb250YWluc09ubHlJbmxpbmVTdGF0
ZUNoYW5nZXMoY2hhbmdlcywgY2hhbmdlRmxhZ3MpKSB7CisgICAgICAgIGlmIChhdXRvIHBhdHRl
cm4gPSBjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlUGF0dGVybikKKyAgICAgICAgICAgIHJlY29yZE5h
dGl2ZUltYWdlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgpKTsKKyAgICAgICAgaWYgKGF1dG8gcGF0
dGVybiA9IGNoYW5nZXMubV9zdGF0ZS5maWxsUGF0dGVybikKKyAgICAgICAgICAgIHJlY29yZE5h
dGl2ZUltYWdlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgpKTsKKyAgICAgICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpTZXRTdGF0ZSh7IGNoYW5nZXMubV9zdGF0ZSwgY2hh
bmdlRmxhZ3MgfSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCisg
ICAgICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6U2V0SW5saW5lU3Ry
b2tlQ29sb3IoeyAqY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLnRyeUdldEFzU1JHQkFCeXRl
cygpIH0pKTsKKworICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKKyAgICAgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0OjpTZXRTdHJva2VUaGlja25lc3MoeyBjaGFuZ2VzLm1fc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzIH0pKTsKKworICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKKyAgICAgICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpTZXRJbmxpbmVGaWxsQ29sb3IoeyAqY2hhbmdlcy5t
X3N0YXRlLmZpbGxDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSB9KSk7Cit9CisKK3ZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5
KCkKK3sKKyAgICBhdXRvJiBzdGF0ZUNoYW5nZXMgPSBjdXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5n
ZTsKKyAgICBhdXRvIGNoYW5nZXNGcm9tTGFzdFN0YXRlID0gc3RhdGVDaGFuZ2VzLmNoYW5nZXNG
cm9tU3RhdGUoY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0ZSk7CisgICAgaWYgKCFjaGFu
Z2VzRnJvbUxhc3RTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXBwZW5kU3RhdGVDaGFu
Z2VJdGVtKHN0YXRlQ2hhbmdlcywgY2hhbmdlc0Zyb21MYXN0U3RhdGUpOworICAgIHN0YXRlQ2hh
bmdlcy5tX2NoYW5nZUZsYWdzID0geyB9OworICAgIGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5n
U3RhdGUgPSBzdGF0ZUNoYW5nZXMubV9zdGF0ZTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRQcm94eTo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK3sKKyAgICBj
dXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZS5hY2N1bXVsYXRlKHN0YXRlLCBmbGFncyk7Cit9CisK
K2Jvb2wgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmNhbkRyYXdJbWFnZUJ1ZmZlcihjb25z
dCBJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVy
aW5nQmFja2VuZC0+aXNDYWNoZWQoaW1hZ2VCdWZmZXIpOworfQorCitSZW5kZXJpbmdNb2RlIFJl
bW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlci0+cmVuZGVyaW5nTW9kZSgpOworfQorCit2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dFByb3h5OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKK3sKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OlNldExpbmVDYXAoeyBsaW5lQ2Fw
IH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6c2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCit7CisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpTZXRMaW5lRGFzaCh7IGRhc2hBcnJh
eSwgZGFzaE9mZnNldCB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6
OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dDo6U2V0TGluZUpvaW4oeyBsaW5lSm9pbiB9KSk7Cit9CisKK3Zv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJM
aW1pdCkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OlNldE1p
dGVyTGltaXQoeyBtaXRlckxpbWl0IH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRl
eHRQcm94eTo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckds
eXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVk
IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01v
ZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAgICBtX2RyYXdHbHlwaHNSZWNvcmRlci5kcmF3R2x5cGhz
KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5n
TW9kZSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmRyYXdHbHlwaHNB
bmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5
cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwg
Y29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGlu
Z01vZGUpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBt
X3JlbmRlcmluZ0JhY2tlbmQtPnJlY29yZEZvbnRVc2UoY29uc3RfY2FzdDxGb250Jj4oZm9udCkp
OworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6RHJhd0dseXBocyh7
IGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9k
ZSB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmRyYXdJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBp
ZiAoIWNhbkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcikpIHsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBv
cHRpb25zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3JlbmRlcmluZ0JhY2tlbmQt
PnJlY29yZEltYWdlQnVmZmVyVXNlKGltYWdlQnVmZmVyKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHQ6OkRyYXdJbWFnZUJ1ZmZlcih7IGltYWdlQnVmZmVyLnJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyB9KSk7
Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmRyYXdOYXRpdmVJbWFnZShO
YXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVj
ZXNzYXJ5KCk7CisgICAgcmVjb3JkTmF0aXZlSW1hZ2VVc2UoaW1hZ2UpOworICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6RHJhd05hdGl2ZUltYWdlKHsgaW1hZ2UucmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3Qs
IG9wdGlvbnMgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpkcmF3
UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Cisg
ICAgcmVjb3JkTmF0aXZlSW1hZ2VVc2UoaW1hZ2UpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dDo6RHJhd1BhdHRlcm4oeyBpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zIH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRQcm94eTo6c2F2ZSgpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0OjpTYXZlKHsgfSkpOworICAgIG1fc3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0
YWNrLmxhc3QoKS5jbG9uZUZvclNhdmUoKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0UHJveHk6OnJlc3RvcmUoKQoreworICAgIGlmICghbV9zdGF0ZVN0YWNrLnNpemUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OlJlc3RvcmUoeyB9KSk7Cit9CisKK3Zv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5
KQoreworICAgIGN1cnJlbnRTdGF0ZSgpLnRyYW5zbGF0ZSh4LCB5KTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OlRyYW5zbGF0ZSh7IHgsIHkgfSkpOworfQorCit2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5Ojpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlh
bnMpCit7CisgICAgY3VycmVudFN0YXRlKCkucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OlJvdGF0ZSh7IGFuZ2xlSW5SYWRp
YW5zIH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6c2NhbGUoY29u
c3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIGN1cnJlbnRTdGF0ZSgpLnNjYWxlKHNpemUpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6U2NhbGUoeyBzaXplIH0p
KTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6Y29uY2F0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIGlmICh0cmFuc2Zvcm0uaXNJZGVu
dGl0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjdXJyZW50U3RhdGUoKS5jb25jYXRDVE0o
dHJhbnNmb3JtKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkNv
bmNhdGVuYXRlQ1RNKHsgdHJhbnNmb3JtIH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRQcm94eTo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQorewor
ICAgIGN1cnJlbnRTdGF0ZSgpLnNldENUTSh0cmFuc2Zvcm0pOworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6U2V0Q1RNKHsgdHJhbnNmb3JtIH0pKTsKK30KKworQWZm
aW5lVHJhbnNmb3JtIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpnZXRDVE0oR3JhcGhpY3ND
b250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFJlc3Bl
Y3QgdGhlIGdpdmVuIHZhbHVlIG9mIEluY2x1ZGVEZXZpY2VTY2FsZS4KKyAgICByZXR1cm4gY3Vy
cmVudFN0YXRlKCkuY3RtOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5Ojpi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit7CisgICAgYXBwZW5kU3RhdGVD
aGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHQ6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoeyBvcGFjaXR5IH0pKTsKKyAgICBtX3N0
YXRlU3RhY2suYXBwZW5kKG1fc3RhdGVTdGFjay5sYXN0KCkuY2xvbmVGb3JUcmFuc3BhcmVuY3lM
YXllcigpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpFbmRUcmFuc3BhcmVu
Y3lMYXllcih7ICB9KSk7CisgICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwordm9p
ZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVt
SWZOZWNlc3NhcnkoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6
OkRyYXdSZWN0KHsgcmVjdCwgYm9yZGVyVGhpY2tuZXNzIH0pKTsKK30KKwordm9pZCBSZW1vdGVH
cmFwaGljc0NvbnRleHRQcm94eTo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZO
ZWNlc3NhcnkoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkRy
YXdMaW5lKHsgcG9pbnQxLCBwb2ludDIgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dFByb3h5OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1J
Zk5lY2Vzc2FyeSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6
RHJhd0xpbmVzRm9yVGV4dCh7IEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0aGlj
a25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzIH0pKTsKK30KKwordm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQoreworICAgIGFw
cGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKHsgcmVjdCwgc3R5
bGUgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpkcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZO
ZWNlc3NhcnkoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkRy
YXdFbGxpcHNlKHsgcmVjdCB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJv
eHk6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJ
dGVtSWZOZWNlc3NhcnkoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHQ6OkRyYXdQYXRoKHsgcGF0aCB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
UHJveHk6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRl
bUlmTmVjZXNzYXJ5KCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
OjpEcmF3Rm9jdXNSaW5nUGF0aCh7IHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yIH0pKTsKK30K
Kwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgp
OworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6RHJhd0ZvY3VzUmlu
Z1JlY3RzKHsgcmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yIH0pKTsKK30KKworI2lmIFBMQVRG
T1JNKE1BQykKKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBD
b2xvciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2VuZGlmIC8vIFBMQVRGT1JN
KE1BQykKKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5
KCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpGaWxsUmVjdCh7
IHJlY3QgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBhcHBl
bmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dDo6RmlsbFJlY3RXaXRoQ29sb3IoeyByZWN0LCBjb2xvciB9KSk7Cit9
CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdl
SXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0OjpGaWxsUmVjdFdpdGhHcmFkaWVudCh7IHJlY3QsIGdyYWRpZW50IH0pKTsKK30KKwordm9p
ZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpGaWxsQ29tcG9zaXRlZFJl
Y3QoeyByZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0UHJveHk6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAg
YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHQ6OkZpbGxSb3VuZGVkUmVjdCh7IHJlY3QsIGNvbG9yLCBibGVu
ZE1vZGUgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGFwcGVu
ZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSh7IHJlY3QsIHJvdW5kZWRI
b2xlUmVjdCwgY29sb3IgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5
OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRl
bUlmTmVjZXNzYXJ5KCk7CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgaWYgKHBh
dGguaGFzSW5saW5lRGF0YSgpKSB7CisgICAgICAgIGlmIChwYXRoLmhhc0lubGluZURhdGE8TGlu
ZURhdGE+KCkpCisgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHQ6OkZpbGxMaW5lKHsgcGF0aC5pbmxpbmVEYXRhPExpbmVEYXRhPigpIH0pKTsKKyAgICAgICAg
ZWxzZSBpZiAocGF0aC5oYXNJbmxpbmVEYXRhPEFyY0RhdGE+KCkpCisgICAgICAgICAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkZpbGxBcmMoeyBwYXRoLmlubGluZURh
dGE8QXJjRGF0YT4oKSB9KSk7CisgICAgICAgIGVsc2UgaWYgKHBhdGguaGFzSW5saW5lRGF0YTxR
dWFkQ3VydmVEYXRhPigpKQorICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0OjpGaWxsUXVhZEN1cnZlKHsgcGF0aC5pbmxpbmVEYXRhPFF1YWRDdXJ2ZURhdGE+
KCkgfSkpOworICAgICAgICBlbHNlIGlmIChwYXRoLmhhc0lubGluZURhdGE8QmV6aWVyQ3VydmVE
YXRhPigpKQorICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
OjpGaWxsQmV6aWVyQ3VydmUoeyBwYXRoLmlubGluZURhdGE8QmV6aWVyQ3VydmVEYXRhPigpIH0p
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkZpbGxQYXRo
KHsgcGF0aCB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmZpbGxF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0
ZW1JZk5lY2Vzc2FyeSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dDo6RmlsbEVsbGlwc2UoeyByZWN0IH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRl
eHRQcm94eTo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0
aCkKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6U3Ryb2tlUmVjdCh7IHJlY3QsIGxpbmVX
aWR0aCB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OnN0cm9rZVBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOworI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGlmIChwYXRoLmhhc0lu
bGluZURhdGEoKSkgeworICAgICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhPExpbmVEYXRhPigp
KQorICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpTdHJv
a2VMaW5lKHsgcGF0aC5pbmxpbmVEYXRhPExpbmVEYXRhPigpIH0pKTsKKyAgICAgICAgZWxzZSBp
ZiAocGF0aC5oYXNJbmxpbmVEYXRhPEFyY0RhdGE+KCkpCisgICAgICAgICAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OlN0cm9rZUFyYyh7IHBhdGguaW5saW5lRGF0YTxB
cmNEYXRhPigpIH0pKTsKKyAgICAgICAgZWxzZSBpZiAocGF0aC5oYXNJbmxpbmVEYXRhPFF1YWRD
dXJ2ZURhdGE+KCkpCisgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHQ6OlN0cm9rZVF1YWRDdXJ2ZSh7IHBhdGguaW5saW5lRGF0YTxRdWFkQ3VydmVEYXRhPigp
IH0pKTsKKyAgICAgICAgZWxzZSBpZiAocGF0aC5oYXNJbmxpbmVEYXRhPEJlemllckN1cnZlRGF0
YT4oKSkKKyAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6
U3Ryb2tlQmV6aWVyQ3VydmUoeyBwYXRoLmlubGluZURhdGE8QmV6aWVyQ3VydmVEYXRhPigpIH0p
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OlN0cm9rZVBh
dGgoeyBwYXRoIH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6c3Ry
b2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgYXBwZW5kU3RhdGVDaGFu
Z2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHQ6OlN0cm9rZUVsbGlwc2UoeyByZWN0IH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRQcm94eTo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBh
cHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dDo6Q2xlYXJSZWN0KHsgcmVjdCB9KSk7Cit9CisKKyNpZiBVU0Uo
Q0cpCisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmFwcGx5U3Ryb2tlUGF0dGVy
bigpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkFwcGx5U3Ryb2tlUGF0dGVybih7IH0p
KTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6YXBwbHlGaWxsUGF0dGVy
bigpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkFwcGx5RmlsbFBhdHRlcm4oeyB9KSk7
Cit9CisKKyNlbmRpZiAvLyBVU0UoQ0cpCisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJv
eHk6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGN1cnJlbnRTdGF0ZSgpLmNs
aXBCb3VuZHMuaW50ZXJzZWN0KHJlY3QpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dDo6Q2xpcCh7IHJlY3QgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dFByb3h5OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkNsaXBPdXQoeyByZWN0IH0pKTsKK30KKwor
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRo
KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Q2xpcE91dFRv
UGF0aCh7IHBhdGggfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5Ojpj
bGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKK3sKKyAgICBjdXJy
ZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVyc2VjdChwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpDbGlwUGF0aCh7IHBh
dGgsIHdpbmRSdWxlIH0pKTsKK30KKworSW50UmVjdCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94
eTo6Y2xpcEJvdW5kcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoY3Vy
cmVudFN0YXRlKCkuY2xpcEJvdW5kcyk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
UHJveHk6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICBtX3JlbmRlcmluZ0JhY2tlbmQtPnJlY29yZElt
YWdlQnVmZmVyVXNlKGltYWdlQnVmZmVyKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHQ6OkNsaXBUb0ltYWdlQnVmZmVyKHsgaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0IH0pKTsKK30KKworR3JhcGhpY3NDb250ZXh0OjpD
bGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmNs
aXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3ND
b250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKQoreworICAgIGF1dG8gaW5pdGlhbENsaXAgPSBG
bG9hdFJlY3QoRmxvYXRQb2ludCgpLCBkZXN0aW5hdGlvbi5zaXplKCkpOworCisgICAgLy8gVGhl
IGluaXRpYWwgQ1RNIG1hdGNoZXMgSW1hZ2VCdWZmZXIncyBpbml0aWFsIENUTS4KKyAgICBBZmZp
bmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVs
eUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgRmxvYXRTaXplIHNjYWxlRmFjdG9yKHRyYW5zZm9y
bS54U2NhbGUoKSwgdHJhbnNmb3JtLnlTY2FsZSgpKTsKKyAgICBhdXRvIHNjYWxlZFNpemUgPSBl
eHBhbmRlZEludFNpemUoZGVzdGluYXRpb24uc2l6ZSgpICogc2NhbGVGYWN0b3IpOworICAgIEFm
ZmluZVRyYW5zZm9ybSBpbml0aWFsQ1RNOworICAgIGluaXRpYWxDVE0uc2NhbGUoMSwgLTEpOwor
ICAgIGluaXRpYWxDVE0udHJhbnNsYXRlKDAsIC1zY2FsZWRTaXplLmhlaWdodCgpKTsKKyAgICBp
bml0aWFsQ1RNLnNjYWxlKHNjYWxlZFNpemUgLyBkZXN0aW5hdGlvbi5zaXplKCkpOworCisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpCZWdpbkNsaXBUb0RyYXdpbmdD
b21tYW5kcyh7IGRlc3RpbmF0aW9uLCBjb2xvclNwYWNlIH0pKTsKKyAgICB7CisgICAgICAgIFJl
bW90ZUdyYXBoaWNzQ29udGV4dFByb3h5IG5lc3RlZENvbnRleHQoKnRoaXMsIGluaXRpYWxDbGlw
LCBpbml0aWFsQ1RNKTsKKyAgICAgICAgZHJhd2luZ0Z1bmN0aW9uKG5lc3RlZENvbnRleHQpOwor
ICAgIH0KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkVuZENsaXBU
b0RyYXdpbmdDb21tYW5kcyh7IGRlc3RpbmF0aW9uIH0pKTsKKworICAgIHJldHVybiBDbGlwVG9E
cmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCisK
K3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQoreworICAgIGlm
IChwbGF5ZXIuaWRlbnRpZmllcigpKQorICAgICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHQ6OlBhaW50RnJhbWVGb3JNZWRpYSh7IHBsYXllciwgZGVzdGluYXRpb24gfSkp
OworICAgIGVsc2UKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEo
cGxheWVyLCBkZXN0aW5hdGlvbik7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCisKK3Zv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3IpCit7CisgICAgLy8gRklYTUU6IHRoaXMgY2hhbmdlcyB0aGUg
YmFzZUNUTSwgd2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4dGVudHMu
CisgICAgLy8gQXNzZXJ0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
eyBkZXZpY2VTY2FsZUZhY3RvciB9KSk7Cit9CisKK0Zsb2F0UmVjdCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRQcm94eTo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdy
YXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKQoreworICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhp
Y3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdp
dGggUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHkuIik7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisK
Ky8vIEZJWE1FOiBzaGFyZSB3aXRoIFNoYWRvd0RhdGEKK3N0YXRpYyBpbmxpbmUgZmxvYXQgc2hh
ZG93UGFpbnRpbmdFeHRlbnQoZmxvYXQgYmx1clJhZGl1cykKK3sKKyAgICAvLyBCbHVycmluZyB1
c2VzIGEgR2F1c3NpYW4gZnVuY3Rpb24gd2hvc2Ugc3RkLiBkZXZpYXRpb24gaXMgbV9yYWRpdXMv
MiwgYW5kIHdoaWNoIGluIHRoZW9yeQorICAgIC8vIGV4dGVuZHMgdG8gaW5maW5pdHkuIEluIDgt
Yml0IGNvbnRleHRzLCBob3dldmVyLCByb3VuZGluZyBjYXVzZXMgdGhlIGVmZmVjdCB0byBiZWNv
bWUKKyAgICAvLyB1bmRldGVjdGFibGUgYXQgYXJvdW5kIDEuNHggdGhlIHJhZGl1cy4KKyAgICBj
b25zdCBmbG9hdCByYWRpdXNFeHRlbnRNdWx0aXBsaWVyID0gMS40OworICAgIHJldHVybiBjZWls
ZihibHVyUmFkaXVzICogcmFkaXVzRXh0ZW50TXVsdGlwbGllcik7Cit9CisKK0Zsb2F0UmVjdCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgYm91bmRzID0gcmVjdDsKKyAg
ICBjb25zdCBDb250ZXh0U3RhdGUmIHN0YXRlID0gY3VycmVudFN0YXRlKCk7CisKKyAgICBGbG9h
dFNpemUgc2hhZG93T2Zmc2V0OworICAgIGZsb2F0IHNoYWRvd1JhZGl1czsKKyAgICBDb2xvciBz
aGFkb3dDb2xvcjsKKyAgICBpZiAoZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVz
LCBzaGFkb3dDb2xvcikpIHsKKyAgICAgICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudCA9IGJvdW5k
czsKKyAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoc2hhZG93T2Zmc2V0KTsKKyAgICAgICAgc2hh
ZG93RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRpbmdFeHRlbnQoc2hhZG93UmFkaXVzKSk7Cisg
ICAgICAgIGJvdW5kcy51bml0ZShzaGFkb3dFeHRlbnQpOworICAgIH0KKworICAgIEZsb2F0UmVj
dCBjbGlwcGVkRXh0ZW50ID0gaW50ZXJzZWN0aW9uKHN0YXRlLmNsaXBCb3VuZHMsIGJvdW5kcyk7
CisgICAgcmV0dXJuIHN0YXRlLmN0bS5tYXBSZWN0KGNsaXBwZWRFeHRlbnQpOworfQorCitjb25z
dCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6Q29udGV4dFN0YXRlJiBSZW1vdGVHcmFwaGlj
c0NvbnRleHRQcm94eTo6Y3VycmVudFN0YXRlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9zdGF0
ZVN0YWNrLnNpemUoKSk7CisgICAgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCk7Cit9CisKK1Jl
bW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpDb250ZXh0U3RhdGUmIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dFByb3h5OjpjdXJyZW50U3RhdGUoKQoreworICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6
ZSgpKTsKKyAgICByZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKK30KKworY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6Y3RtKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gY3VycmVudFN0YXRlKCkuY3RtOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dFByb3h5OjpmbHVzaENvbnRleHQoV2ViQ29yZTo6Rmx1c2hJZGVudGlmaWVyIGlkZW50aWZp
ZXIpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpGbHVzaENv
bnRleHQoeyBpZGVudGlmaWVyIH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQ
cm94eTo6Q29udGV4dFN0YXRlOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICBj
dG0udHJhbnNsYXRlKHgsIHkpOworICAgIGNsaXBCb3VuZHMubW92ZSgteCwgLXkpOworfQorCit2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpDb250ZXh0U3RhdGU6OnJvdGF0ZShmbG9h
dCBhbmdsZUluUmFkaWFucykKK3sKKyAgICBkb3VibGUgYW5nbGVJbkRlZ3JlZXMgPSByYWQyZGVn
KHN0YXRpY19jYXN0PGRvdWJsZT4oYW5nbGVJblJhZGlhbnMpKTsKKyAgICBjdG0ucm90YXRlKGFu
Z2xlSW5EZWdyZWVzKTsKKworICAgIEFmZmluZVRyYW5zZm9ybSByb3RhdGlvbjsKKyAgICByb3Rh
dGlvbi5yb3RhdGUoYW5nbGVJbkRlZ3JlZXMpOworCisgICAgaWYgKHN0ZDo6b3B0aW9uYWw8QWZm
aW5lVHJhbnNmb3JtPiBpbnZlcnNlID0gcm90YXRpb24uaW52ZXJzZSgpKQorICAgICAgICBjbGlw
Qm91bmRzID0gaW52ZXJzZS52YWx1ZSgpLm1hcFJlY3QoY2xpcEJvdW5kcyk7Cit9CisKK3ZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OkNvbnRleHRTdGF0ZTo6c2NhbGUoY29uc3QgRmxv
YXRTaXplJiBzaXplKQoreworICAgIGN0bS5zY2FsZShzaXplKTsKKyAgICBjbGlwQm91bmRzLnNj
YWxlKDEgLyBzaXplLndpZHRoKCksIDEgLyBzaXplLmhlaWdodCgpKTsKK30KKwordm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHRQcm94eTo6Q29udGV4dFN0YXRlOjpzZXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBtYXRyaXgpCit7CisgICAgc3RkOjpvcHRpb25hbDxBZmZpbmVUcmFuc2Zvcm0+
IGludmVyc2VUcmFuc2Zvcm1Gb3JDbGlwQm91bmRzOworICAgIGlmIChhdXRvIG9yaWdpbmFsQ1RN
SW52ZXJzZSA9IGN0bS5pbnZlcnNlKCkpCisgICAgICAgIGludmVyc2VUcmFuc2Zvcm1Gb3JDbGlw
Qm91bmRzID0gb3JpZ2luYWxDVE1JbnZlcnNlLT5tdWx0aXBseShtYXRyaXgpLmludmVyc2UoKTsK
KworICAgIGN0bSA9IG1hdHJpeDsKKworICAgIGlmIChpbnZlcnNlVHJhbnNmb3JtRm9yQ2xpcEJv
dW5kcykKKyAgICAgICAgY2xpcEJvdW5kcyA9IGludmVyc2VUcmFuc2Zvcm1Gb3JDbGlwQm91bmRz
LT5tYXBSZWN0KGNsaXBCb3VuZHMpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFBy
b3h5OjpDb250ZXh0U3RhdGU6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hdHJp
eCkKK3sKKyAgICBjdG0gKj0gbWF0cml4OworCisgICAgaWYgKHN0ZDo6b3B0aW9uYWw8QWZmaW5l
VHJhbnNmb3JtPiBpbnZlcnNlID0gbWF0cml4LmludmVyc2UoKSkKKyAgICAgICAgY2xpcEJvdW5k
cyA9IGludmVyc2UudmFsdWUoKS5tYXBSZWN0KGNsaXBCb3VuZHMpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTMzZDkyNTNmOWE3ZDI5N2RmNWMwZWRiMzBlNDAzZTljODJhYjU3MQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhp
Y3NDb250ZXh0UHJveHkuaApAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9EcmF3R2x5cGhzUmVjb3JkZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk7CisKK2NsYXNzIFJlbW90
ZUdyYXBoaWNzQ29udGV4dFByb3h5IDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCB7
CitwdWJsaWM6CisgICAgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHkoV2ViQ29yZTo6SW1hZ2VC
dWZmZXImLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkmLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBXZWJD
b3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IFdlYkNvcmU6
OkRyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOworICAgIH5S
ZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eSgpIHsgfQorCisgICAgdm9pZCBnZXRQaXhlbEJ1ZmZl
cihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBzb3VyY2VSZWN0KTsKKyAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKGNv
bnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKKworICAgIHZvaWQgcmVzZXROZWVkc0ZsdXNoKCkg
eyBtX25lZWRzRmx1c2ggPSBmYWxzZTsgfQorICAgIGJvb2wgbmVlZHNGbHVzaCgpIGNvbnN0IHsg
cmV0dXJuIG1fbmVlZHNGbHVzaDsgfQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoV2ViQ29yZTo6
Rmx1c2hJZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIHZvaWQgc2VuZChUJiYgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIG1fbmVlZHNGbHVzaCA9
IHRydWU7CisgICAgICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+c2VuZFRvU3RyZWFtKFdURk1vdmUo
bWVzc2FnZSksIG1fZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICBm
cmllbmQgY2xhc3MgRHJhd0dseXBoc1JlY29yZGVyOworICAgIFJlbW90ZUdyYXBoaWNzQ29udGV4
dFByb3h5KFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5JiBwYXJlbnQsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYg
aW5pdGlhbENUTSk7CisKKyAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgLy8gRklYTUU6IE1heWJlIHJlbW92ZSB0aGlzPworICAg
IGJvb2wgY2FuRHJhd0ltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkltYWdlQnVmZmVyJikgY29u
c3Q7CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKworI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJE
KQorICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KKyAgICBib29s
IGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZv
aWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWwgeyB9CisjZW5kaWYKKworICAg
IHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0
JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
CisgICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgYm9v
bCwgYm9vbCwgV2ViQ29yZTo6U3Ryb2tlU3R5bGUpIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KKworICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGUmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cykgZmluYWw7CisKKyAgICB2b2lkIHNldExpbmVDYXAoV2ViQ29yZTo6TGluZUNhcCkgZmluYWw7
CisgICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmLCBmbG9hdCBk
YXNoT2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHNldExpbmVKb2luKFdlYkNvcmU6OkxpbmVKb2lu
KSBmaW5hbDsKKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOworCisgICAgdm9p
ZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZp
bGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikg
ZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJD
b3JlOjpHcmFkaWVudCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVy
YXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3Im
LCBXZWJDb3JlOjpCbGVuZE1vZGUpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSb3Vu
ZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOwor
ICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOworICAgIHZvaWQg
ZmlsbEVsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBz
dHJva2VSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgZmlu
YWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKKyAg
ICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7Cisg
ICAgdm9pZCBjbGVhclJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisKKyNp
ZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigp
IGZpbmFsOworICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOworI2VuZGlmCisKKyAg
ICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgV2ViQ29yZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6Okds
eXBoQnVmZmVyR2x5cGgqLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBX
ZWJDb3JlOjpGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCBkcmF3R2x5cGhzQW5k
Q2FjaGVGb250KGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZl
ckdseXBoKiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291
bnQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBXZWJDb3JlOjpGb250
U21vb3RoaW5nTW9kZSkgZmluYWw7CisKKyAgICB2b2lkIGFwcGVuZERyYXdHbHlwaHNJdGVtV2l0
aENhY2hlZEZvbnQoY29uc3QgV2ViQ29yZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVm
ZmVyR2x5cGgqLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBj
b3VudCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIFdlYkNvcmU6OkZv
bnRTbW9vdGhpbmdNb2RlKTsKKworICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6Oklt
YWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdP
cHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6TmF0aXZl
SW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQg
ZHJhd1BhdHRlcm4oV2ViQ29yZTo6TmF0aXZlSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNp
emUmIGltYWdlU2l6ZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zv
cm0mLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZp
bmFsOworCisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9h
dCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICB2
b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlTGluZXMsIFdlYkNvcmU6OlN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lk
IGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOworICAgIHZvaWQgZHJhd0VsbGlw
c2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGRyYXdQYXRo
KGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhj
b25zdCBXZWJDb3JlOjpQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgV2Vi
Q29yZTo6Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBX
ZWJDb3JlOjpDb2xvciYpIGZpbmFsOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBXZWJDb3JlOjpQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wm
IG5lZWRzUmVkcmF3LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1l
T2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsK
KyNlbmRpZgorCisgICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkgZmlu
YWw7CisKKyAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsKKyAgICB2
b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7CisgICAgdm9pZCBzY2FsZShj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBmaW5hbDsKKyAgICB2b2lkIGNvbmNhdENUTShjb25z
dCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKyAgICB2b2lkIHNldENUTShjb25z
dCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKyAgICBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNj
YWxlKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCBvcGFjaXR5KSBmaW5hbDsKKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7
CisKKyAgICB2b2lkIGNsaXAoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisgICAg
dm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQg
Y2xpcE91dChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7CisgICAgdm9pZCBjbGlwUGF0aChj
b25zdCBXZWJDb3JlOjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIGZpbmFsOworICAgIFdlYkNv
cmU6OkludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgY2xpcFRvSW1h
Z2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KSBmaW5hbDsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21t
YW5kc1Jlc3VsdCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVu
Y3Rpb248dm9pZChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKT4mJikgZmluYWw7CisKKyNpZiBF
TkFCTEUoVklERU8pCisgICAgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5hbDsKKyNl
bmRpZgorCisgICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsKKwor
ICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBmaW5hbDsKKworICAg
IHZvaWQgcmVjb3JkTmF0aXZlSW1hZ2VVc2UoV2ViQ29yZTo6TmF0aXZlSW1hZ2UmKTsKKworICAg
IHZvaWQgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICB2b2lkIGFwcGVu
ZFN0YXRlQ2hhbmdlSXRlbShjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5n
ZSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKwor
ICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JikgY29uc3Q7CisKKyAgICBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zv
cm0mIGN0bSgpIGNvbnN0OworCisgICAgc3RydWN0IENvbnRleHRTdGF0ZSB7CisgICAgICAgIFdl
YkNvcmU6OkFmZmluZVRyYW5zZm9ybSBjdG07CisgICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBj
bGlwQm91bmRzOworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSBz
dGF0ZUNoYW5nZTsKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUgbGFzdERy
YXdpbmdTdGF0ZTsKKworICAgICAgICBDb250ZXh0U3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBjbGlwKQorICAgICAgICAgICAgOiBj
dG0odHJhbnNmb3JtKQorICAgICAgICAgICAgLCBjbGlwQm91bmRzKGNsaXApCisgICAgICAgICAg
ICAsIGxhc3REcmF3aW5nU3RhdGUoc3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIENvbnRleHRTdGF0ZSBjbG9uZUZvclNhdmUoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBDb250ZXh0U3RhdGUgc3RhdGUobGFzdERyYXdpbmdTdGF0ZSwgY3RtLCBjbGlwQm91bmRz
KTsKKyAgICAgICAgICAgIHN0YXRlLnN0YXRlQ2hhbmdlID0gc3RhdGVDaGFuZ2U7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGU7CisgICAgICAgIH0KKworICAgICAgICBDb250ZXh0U3RhdGUgY2xv
bmVGb3JUcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1
dG8gc3RhdGUgPSBjbG9uZUZvclNhdmUoKTsKKyAgICAgICAgICAgIHN0YXRlLmxhc3REcmF3aW5n
U3RhdGUuYWxwaGEgPSAxOworICAgICAgICAgICAgcmV0dXJuIHN0YXRlOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7CisgICAgICAgIHZvaWQg
cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKTsKKyAgICAgICAgdm9pZCBzY2FsZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFNpemUmKTsKKyAgICAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgV2ViQ29y
ZTo6QWZmaW5lVHJhbnNmb3JtJik7CisgICAgICAgIHZvaWQgc2V0Q1RNKGNvbnN0IFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSYpOworICAgIH07CisKKyAgICBjb25zdCBDb250ZXh0U3RhdGUmIGN1
cnJlbnRTdGF0ZSgpIGNvbnN0OworICAgIENvbnRleHRTdGF0ZSYgY3VycmVudFN0YXRlKCk7CisK
KyAgICBWZWN0b3I8Q29udGV4dFN0YXRlLCA0PiBtX3N0YXRlU3RhY2s7CisgICAgV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyIG1fZHJhd0dseXBoc1JlY29yZGVyOworICAgIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBtX2Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcjsK
KyAgICBXZWFrUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworICAgIFdlYWtQdHI8UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBtX3JlbmRlcmluZ0JhY2tlbmQ7CisgICAgLy8gRklY
TUU6IGBEcmF3R2x5cGhzUmVjb3JkZXJgIG5lZWRzIHRvIGJlIHJlaW1wbGVtZW50ZWQgdG8gd29y
ayB3aXRoIFJlbW90ZUdyYXBoaWNzQ29udGV4dC4KKyAgICBib29sIG1faXNOZXN0ZWQgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9uZWVkc0ZsdXNoIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAppbmRleCAyN2JjZDAwNTQ1MDk1
OGU4MDIxMjMzMGMxZTg5NmUzYzg5MTczNGZiLi5iMmU3ZGY4MGVlZThjMDQ5ZmYzNjQ3NWIzNjdh
MWM3MWNmNTc2NmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApAQCAtMjksMTMgKzI5
LDEzIEBACiAKICNpbmNsdWRlICJFbmNvZGVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5LmgiCisjaW5jbHVkZSAiUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmgiCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9D
b25jcmV0ZUltYWdlQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RS
ZWNvcmRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZXBsYXllci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgogI2luY2x1ZGUgPHd0Zi9Db25kaXRp
b24uaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgpAQCAtNDcsMTQgKzQ3LDIzIEBAIGNsYXNzIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4gY2xh
c3MgVGhyZWFkU2FmZVJlbW90ZUltYWdlQnVmZmVyRmx1c2hlcjsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgQmFja2VuZFR5cGU+Ci1jbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IDogcHVibGljIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkRlbGVnYXRlLCBwdWJsaWMgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50IHsKLSAgICB1c2luZyBCYXNlRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxCYWNr
ZW5kVHlwZT47Ci0gICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6Om1fYmFja2Vu
ZDsKLSAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9kcmF3aW5nQ29udGV4
dDsKLSAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9yZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXI7Ci0gICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OnJl
c29sdXRpb25TY2FsZTsKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgOiBwdWJsaWMgV2Vi
Q29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4geworICAgIHVzaW5nIEJhc2VD
b25jcmV0ZUltYWdlQnVmZmVyID0gV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5k
VHlwZT47CisgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKKyAg
ICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6bV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXI7CisgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OnJlc29sdXRpb25TY2Fs
ZTsKIAogcHVibGljOgorICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9h
dFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgV2ViQ29yZTo6RGVzdGlu
YXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBXZWJDb3JlOjpQaXhlbEZvcm1hdCBwaXhlbEZv
cm1hdCwgY29uc3QgV2ViQ29yZTo6SG9zdFdpbmRvdyogaG9zdFdpbmRvdykKKyAgICB7CisgICAg
ICAgIHJldHVybiBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUgY3JlYXRlPEltYWdl
QnVmZmVyPihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHBpeGVsRm9ybWF0LCBo
b3N0V2luZG93KTsKKyAgICB9CisKKyAgICBzdGF0aWMgYXV0byBjcmVhdGUoY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiBzaXplLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OnRlbXBs
YXRlIGNyZWF0ZTxJbWFnZUJ1ZmZlcj4oc2l6ZSwgY29udGV4dCk7CisgICAgfQorCiAgICAgc3Rh
dGljIFJlZlB0cjxSZW1vdGVJbWFnZUJ1ZmZlclByb3h5PiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IFdlYkNvcmU6OkRl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQgcGl4
ZWxGb3JtYXQsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSYgcmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5KQogICAgIHsKICAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjpQYXJhbWV0ZXJzIHsgc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBwaXhlbEZvcm1hdCB9OwpAQCAtNjYsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgflJl
bW90ZUltYWdlQnVmZmVyUHJveHkoKQogICAgIHsKICAgICAgICAgaWYgKCFtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSB8fCBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+aXNHUFVQ
cm9jZXNzQ29ubmVjdGlvbkNsb3NlZCgpKSB7Ci0gICAgICAgICAgICBjbGVhckRpc3BsYXlMaXN0
KCk7CisgICAgICAgICAgICBtX2RyYXdpbmdDb250ZXh0LnJlc2V0TmVlZHNGbHVzaCgpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTgwLDkgKzg5LDkgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUo
KTsKICAgICB9CiAKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1c2hJZGVudGlmaWVyIGxh
c3RTZW50Rmx1c2hJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9zZW50Rmx1c2hJZGVudGlm
aWVyOyB9CisgICAgV2ViQ29yZTo6Rmx1c2hJZGVudGlmaWVyIGxhc3RTZW50Rmx1c2hJZGVudGlm
aWVyKCkgY29uc3QgeyByZXR1cm4gbV9zZW50Rmx1c2hJZGVudGlmaWVyOyB9CiAKLSAgICB2b2lk
IHdhaXRGb3JEaWRGbHVzaE9uU2Vjb25kYXJ5VGhyZWFkKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
bHVzaElkZW50aWZpZXIgdGFyZ2V0Rmx1c2hJZGVudGlmaWVyKQorICAgIHZvaWQgd2FpdEZvckRp
ZEZsdXNoT25TZWNvbmRhcnlUaHJlYWQoV2ViQ29yZTo6Rmx1c2hJZGVudGlmaWVyIHRhcmdldEZs
dXNoSWRlbnRpZmllcikKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsK
ICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXJMb2NrIH07
CkBAIC05OCwxOSArMTA3LDE0IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIFJlbW90ZUlt
YWdlQnVmZmVyUHJveHkoY29uc3QgV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpQYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkmIHJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSkKLSAgICAgICAgOiBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihw
YXJhbWV0ZXJzLCB0aGlzKQorICAgICAgICA6IEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyKHBhcmFt
ZXRlcnMpCiAgICAgICAgICwgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkobWFrZVdlYWtQ
dHIocmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKKyAgICAgICAgLCBtX2RyYXdpbmdDb250
ZXh0KCp0aGlzLCByZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHksIHsgeyB9LCBCYXNlQ29uY3Jl
dGVJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemUoKSB9LCBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6
YmFzZVRyYW5zZm9ybSgpKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5KTsKICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJl
bW90ZVJlc291cmNlQ2FjaGVQcm94eSgpLmNhY2hlSW1hZ2VCdWZmZXIoKnRoaXMpOwotCi0gICAg
ICAgIG1fZHJhd2luZ0NvbnRleHQuZGlzcGxheUxpc3QoKS5zZXRJdGVtQnVmZmVyV3JpdGluZ0Ns
aWVudCh0aGlzKTsKLSAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpLnNldEl0
ZW1CdWZmZXJSZWFkaW5nQ2xpZW50KG51bGxwdHIpOwotICAgICAgICBtX2RyYXdpbmdDb250ZXh0
LmRpc3BsYXlMaXN0KCkuc2V0VHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzKGZhbHNlKTsKICAgICB9
CiAKLSAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6cmVuZGVyaW5nTW9kZSgpOyB9
Ci0KICAgICAvLyBJdCBpcyBzYWZlIHRvIGFjY2VzcyBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVy
IGZyb20gdGhlIG1haW4gdGhyZWFkIHdpdGhvdXQgbG9ja2luZyBzaW5jZSBpdAogICAgIC8vIG9u
bHkgZ2V0cyBtb2RpZmllZCBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgYm9vbCBoYXNQZW5kaW5n
Rmx1c2goKSBjb25zdCBXVEZfSUdOT1JFU19USFJFQURfU0FGRVRZX0FOQUxZU0lTCkBAIC0xMTks
NyArMTIzLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbV9zZW50Rmx1c2hJZGVudGlm
aWVyICE9IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7CiAgICAgfQogCi0gICAgdm9pZCBkaWRG
bHVzaChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmll
cikgZmluYWwKKyAgICB2b2lkIGRpZEZsdXNoKFdlYkNvcmU6OkZsdXNoSWRlbnRpZmllciBmbHVz
aElkZW50aWZpZXIpIGZpbmFsCiAgICAgewogICAgICAgICBBU1NFUlQoaXNNYWluUnVuTG9vcCgp
KTsKICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXJMb2Nr
IH07CkBAIC0yMTksNyArMjIzLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKIAogICAgICAgICBhdXRvJiBtdXRhYmxlVGhpcyA9IGNvbnN0X2Nhc3Q8UmVt
b3RlSW1hZ2VCdWZmZXJQcm94eSY+KCp0aGlzKTsKLSAgICAgICAgbXV0YWJsZVRoaXMubV9kcmF3
aW5nQ29udGV4dC5yZWNvcmRlcigpLmdldFBpeGVsQnVmZmVyKGRlc3RpbmF0aW9uRm9ybWF0LCBz
cmNSZWN0KTsKKyAgICAgICAgbXV0YWJsZVRoaXMubV9kcmF3aW5nQ29udGV4dC5nZXRQaXhlbEJ1
ZmZlcihkZXN0aW5hdGlvbkZvcm1hdCwgc3JjUmVjdCk7CiAgICAgICAgIG11dGFibGVUaGlzLmZs
dXNoRHJhd2luZ0NvbnRleHRBc3luYygpOwogCiAgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS0+d2FpdEZvckdldFBpeGVsQnVmZmVyVG9Db21wbGV0ZSh0aW1lb3V0KSkK
QEAgLTIyOSwxMiArMjMzLDMxIEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIHBpeGVsQnVm
ZmVyOwogICAgIH0KIAorICAgIHZvaWQgY2xlYXJCYWNrZW5kKCkgZmluYWwKKyAgICB7CisgICAg
ICAgIG1fZHJhd2luZ0NvbnRleHQucmVzZXROZWVkc0ZsdXNoKCk7CisgICAgICAgIEJhc2VDb25j
cmV0ZUltYWdlQnVmZmVyOjpjbGVhckJhY2tlbmQoKTsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSo+KHRoaXMpLT5tX2RyYXdpbmdD
b250ZXh0OworICAgIH0KKworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCogZHJhd2luZ0Nv
bnRleHQoKSBmaW5hbAorICAgIHsKKyAgICAgICAgcmV0dXJuICZtX2RyYXdpbmdDb250ZXh0Owor
ICAgIH0KKwogICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZm
ZXImIHBpeGVsQnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9LCBXZWJDb3JlOjpBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RGb3JtYXQgPSBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkKSBmaW5hbAogICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAg
Ly8gVGhlIG1hdGggaW5zaWRlIFBpeGVsQnVmZmVyOjpjcmVhdGUoKSBkb2Vzbid0IGFncmVlIHdp
dGggdGhlIG1hdGggaW5zaWRlIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoKSBh
Ym91dCBob3cgbV9yZXNvbHV0aW9uU2NhbGUgaW50ZXJhY3RzIHdpdGggdGhlIGRhdGEgaW4gdGhl
IEltYWdlQnVmZmVyLgogICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgcHV0UGl4ZWxCdWZmZXIo
KSBpcyBvbmx5IGNhbGxlZCB3aGVuIHJlc29sdXRpb25TY2FsZSgpID09IDEuCiAgICAgICAgIEFT
U0VSVChyZXNvbHV0aW9uU2NhbGUoKSA9PSAxKTsKLSAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5y
ZWNvcmRlcigpLnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQs
IGRlc3RGb3JtYXQpOworICAgICAgICBtX2RyYXdpbmdDb250ZXh0LnB1dFBpeGVsQnVmZmVyKHBp
eGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQpOwogICAgIH0KIAogICAg
IGJvb2wgcHJlZmVyc1ByZXBhcmF0aW9uRm9yRGlzcGxheSgpIGZpbmFsIHsgcmV0dXJuIHRydWU7
IH0KQEAgLTI2MCwxMDQgKzI4Myw0NCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGlmIChVTkxJS0VM
WSghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIGlmICghbV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpLmlzRW1wdHkoKSB8
fCAhaGFzUGVuZGluZ0ZsdXNoKCkpIHsKLSAgICAgICAgICAgIG1fc2VudEZsdXNoSWRlbnRpZmll
ciA9IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaElkZW50aWZpZXI6OmdlbmVyYXRlKCk7Ci0g
ICAgICAgICAgICBtX2RyYXdpbmdDb250ZXh0LnJlY29yZGVyKCkuZmx1c2hDb250ZXh0KG1fc2Vu
dEZsdXNoSWRlbnRpZmllcik7CisgICAgICAgIGlmIChtX2RyYXdpbmdDb250ZXh0Lm5lZWRzRmx1
c2goKSB8fCAhaGFzUGVuZGluZ0ZsdXNoKCkpIHsKKyAgICAgICAgICAgIG1fc2VudEZsdXNoSWRl
bnRpZmllciA9IFdlYkNvcmU6OkZsdXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKKyAgICAgICAg
ICAgIG1fZHJhd2luZ0NvbnRleHQuZmx1c2hDb250ZXh0KG1fc2VudEZsdXNoSWRlbnRpZmllcik7
CiAgICAgICAgIH0KIAogICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2Vu
ZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7Ci0gICAgICAgIGNsZWFyRGlzcGxheUxp
c3QoKTsKKyAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5yZXNldE5lZWRzRmx1c2goKTsKICAgICB9
CiAKLSAgICB2b2lkIHJlY29yZE5hdGl2ZUltYWdlVXNlKFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiBp
bWFnZSkgZmluYWwKKyAgICB2b2lkIHJlY29yZE5hdGl2ZUltYWdlVXNlKFdlYkNvcmU6Ok5hdGl2
ZUltYWdlJiBpbWFnZSkKICAgICB7CiAgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eSkKICAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5yZW1v
dGVSZXNvdXJjZUNhY2hlUHJveHkoKS5yZWNvcmROYXRpdmVJbWFnZVVzZShpbWFnZSk7CiAgICAg
fQogCi0gICAgYm9vbCBpc0NhY2hlZEltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkltYWdlQnVm
ZmVyJiBpbWFnZUJ1ZmZlcikgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIGlmICghbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGF1dG8gY2FjaGVkSW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS0+cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5KCkuY2FjaGVkSW1hZ2VCdWZmZXIoaW1hZ2VCdWZm
ZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpOwotICAgICAgICBBU1NFUlQoIWNhY2hl
ZEltYWdlQnVmZmVyIHx8IGNhY2hlZEltYWdlQnVmZmVyID09ICZpbWFnZUJ1ZmZlcik7Ci0gICAg
ICAgIHJldHVybiBjYWNoZWRJbWFnZUJ1ZmZlcjsKLSAgICB9Ci0KLSAgICB2b2lkIGNoYW5nZURl
c3RpbmF0aW9uSW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IG5leHRJbWFnZUJ1ZmZlcikgZmluYWwKLSAgICB7Ci0gICAgICAgIGJvb2wgd2FzRW1wdHkgPSBt
X2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuaXNFbXB0eSgpOwotICAgICAgICBtX2RyYXdp
bmdDb250ZXh0LmRpc3BsYXlMaXN0KCkudGVtcGxhdGUgYXBwZW5kPFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI+KG5leHRJbWFnZUJ1
ZmZlcik7Ci0gICAgICAgIGlmICh3YXNFbXB0eSkKLSAgICAgICAgICAgIGNsZWFyRGlzcGxheUxp
c3QoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHByZXBhcmVUb0FwcGVuZERpc3BsYXlMaXN0SXRlbXMo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUmJiBoYW5kbGUpIGZpbmFsCi0g
ICAgewotICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkucHJlcGFyZVRvQXBw
ZW5kKFdURk1vdmUoaGFuZGxlKSk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhckRpc3BsYXlMaXN0
KCkKLSAgICB7Ci0gICAgICAgIG1fZHJhd2luZ0NvbnRleHQuZGlzcGxheUxpc3QoKS5jbGVhcigp
OwotICAgIH0KLQotICAgIGJvb2wgY2FuQXBwZW5kSXRlbU9mVHlwZShXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGUpIGZpbmFsCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPndpbGxBcHBlbmRJdGVtKG1fcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgdm9pZCBkaWRBcHBlbmREYXRhKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
QnVmZmVySGFuZGxlJiBoYW5kbGUsIHNpemVfdCBudW1iZXJPZkJ5dGVzLCBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RGlkQ2hhbmdlSXRlbUJ1ZmZlciBkaWRDaGFuZ2VJdGVtQnVmZmVyKSBmaW5hbAot
ICAgIHsKLSAgICAgICAgaWYgKExJS0VMWShtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkp
Ci0gICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+ZGlkQXBwZW5kRGF0
YShoYW5kbGUsIG51bWJlck9mQnl0ZXMsIGRpZENoYW5nZUl0ZW1CdWZmZXIsIG1fcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlY29yZEZvbnRVc2UoV2Vi
Q29yZTo6Rm9udCYgZm9udCkgZmluYWwKKyAgICB2b2lkIHJlY29yZEZvbnRVc2UoV2ViQ29yZTo6
Rm9udCYgZm9udCkKICAgICB7CiAgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSkKICAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5yZW1vdGVS
ZXNvdXJjZUNhY2hlUHJveHkoKS5yZWNvcmRGb250VXNlKGZvbnQpOwogICAgIH0KIAotICAgIHZv
aWQgcmVjb3JkSW1hZ2VCdWZmZXJVc2UoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVy
KSBmaW5hbAorICAgIHZvaWQgcmVjb3JkSW1hZ2VCdWZmZXJVc2UoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyKQogICAgIHsKICAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5KQogICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJl
bW90ZVJlc291cmNlQ2FjaGVQcm94eSgpLnJlY29yZEltYWdlQnVmZmVyVXNlKGltYWdlQnVmZmVy
KTsKICAgICB9CiAKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSBj
cmVhdGVJdGVtQnVmZmVyKHNpemVfdCBjYXBhY2l0eSkgZmluYWwKLSAgICB7Ci0gICAgICAgIGlm
IChMSUtFTFkobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQotICAgICAgICAgICAgcmV0
dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5jcmVhdGVJdGVtQnVmZmVyKGNhcGFj
aXR5LCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0KLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgUmVmUHRyPFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZW5jb2RlSXRlbU91dE9mTGluZShjb25zdCBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3RJdGVtJiBpdGVtKSBjb25zdCBmaW5hbAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oY29uc3QgYXV0byYgZGlzcGxheUxpc3RJdGVtKSAt
PiBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiB7Ci0gICAgICAgICAgICB1c2luZyBEaXNw
bGF5TGlzdEl0ZW1UeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNs
dHlwZShkaXNwbGF5TGlzdEl0ZW0pPjo6dHlwZTsKLSAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAo
IURpc3BsYXlMaXN0SXRlbVR5cGU6OmlzSW5saW5lSXRlbSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8RGlzcGxheUxpc3RJdGVtVHlwZT4o
ZGlzcGxheUxpc3RJdGVtKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfSwgaXRlbSk7Ci0gICAg
fQotCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRocmVhZFNhZmVJbWFnZUJ1ZmZlckZs
dXNoZXI+IGNyZWF0ZUZsdXNoZXIoKSBmaW5hbAogICAgIHsKICAgICAgICAgcmV0dXJuIFdURjo6
bWFrZVVuaXF1ZTxUaHJlYWRTYWZlUmVtb3RlSW1hZ2VCdWZmZXJGbHVzaGVyPEJhY2tlbmRUeXBl
Pj4oKnRoaXMpOwogICAgIH0KIAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaElkZW50
aWZpZXIgbV9zZW50Rmx1c2hJZGVudGlmaWVyOworICAgIFdlYkNvcmU6OkZsdXNoSWRlbnRpZmll
ciBtX3NlbnRGbHVzaElkZW50aWZpZXI7CiAgICAgTG9jayBtX3JlY2VpdmVkRmx1c2hJZGVudGlm
aWVyTG9jazsKICAgICBDb25kaXRpb24gbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllckNoYW5nZWRD
b25kaXRpb247Ci0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNoSWRlbnRpZmllciBtX3Jl
Y2VpdmVkRmx1c2hJZGVudGlmaWVyIFdURl9HVUFSREVEX0JZX0xPQ0sobV9yZWNlaXZlZEZsdXNo
SWRlbnRpZmllckxvY2spOyAvLyBPbmx5IG1vZGlmaWVkIG9uIHRoZSBtYWluIHRocmVhZCBidXQg
bWF5IGdldCBxdWVyaWVkIG9uIGEgc2Vjb25kYXJ5IHRocmVhZC4KKyAgICBXZWJDb3JlOjpGbHVz
aElkZW50aWZpZXIgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllciBXVEZfR1VBUkRFRF9CWV9MT0NL
KG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXJMb2NrKTsgLy8gT25seSBtb2RpZmllZCBvbiB0aGUg
bWFpbiB0aHJlYWQgYnV0IG1heSBnZXQgcXVlcmllZCBvbiBhIHNlY29uZGFyeSB0aHJlYWQuCiAg
ICAgV2Vha1B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IG1fcmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OworICAgIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5IG1fZHJhd2luZ0Nv
bnRleHQ7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KQEAgLTM3Nyw3ICsz
NDAsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgUmVmPFJlbW90ZUltYWdlQnVmZmVyUHJv
eHk8QmFja2VuZFR5cGU+PiBtX2ltYWdlQnVmZmVyOwotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpGbHVzaElkZW50aWZpZXIgbV90YXJnZXRGbHVzaElkZW50aWZpZXI7CisgICAgV2ViQ29yZTo6
Rmx1c2hJZGVudGlmaWVyIG1fdGFyZ2V0Rmx1c2hJZGVudGlmaWVyOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKaW5k
ZXggZWM3OTM0MTA2YjExYjM2NmM3ODhjNTNiZDliMjQwOTc5NjliZDlkOS4uNTA5N2E5YzU4Yzgy
OWM0NjdhYTk5ZDNiODE4ZmU3Y2QwM2Q1MzViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQogCi0jaW5jbHVkZSAiRGlzcGxheUxpc3RXcml0ZXJIYW5kbGUuaCIKICNpbmNsdWRlICJH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgpAQCAtNTIsNyArNTEsNiBAQCBz
dGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6OmNyZWF0ZQogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoV2ViUGFnZSYgd2ViUGFnZSkKICAgICA6IG1fcGFyYW1l
dGVycyB7CiAgICAgICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpLAot
ICAgICAgICBJUEM6OlNlbWFwaG9yZSB7IH0sCiAgICAgICAgIHdlYlBhZ2Uud2ViUGFnZVByb3h5
SWRlbnRpZmllcigpLAogICAgICAgICB3ZWJQYWdlLmlkZW50aWZpZXIoKQogICAgIH0KQEAgLTc3
LDcgKzc1LDggQEAgR1BVUHJvY2Vzc0Nvbm5lY3Rpb24mIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6ZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKQogICAgICAgICBhdXRvJiBncHVQcm9j
ZXNzQ29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3ND
b25uZWN0aW9uKCk7CiAgICAgICAgIGdwdVByb2Nlc3NDb25uZWN0aW9uLmFkZENsaWVudCgqdGhp
cyk7CiAgICAgICAgIGdwdVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFk
ZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCkudG9VSW50
NjQoKSwgKnRoaXMpOwotICAgICAgICBncHVQcm9jZXNzQ29ubmVjdGlvbi5jb25uZWN0aW9uKCku
c2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5n
QmFja2VuZChtX3BhcmFtZXRlcnMpLCAwLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2Fn
ZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAgICAgIG1fc3RyZWFtQ29ubmVjdGlv
biA9IG1ha2VVbmlxdWU8SVBDOjpTdHJlYW1DbGllbnRDb25uZWN0aW9uPihncHVQcm9jZXNzQ29u
bmVjdGlvbi5jb25uZWN0aW9uKCksIDEgPDwgMjEpOworICAgICAgICBncHVQcm9jZXNzQ29ubmVj
dGlvbi5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6Q3JlYXRlUmVuZGVyaW5nQmFja2VuZChtX3BhcmFtZXRlcnMsIG1fc3RyZWFtQ29ubmVjdGlv
bi0+c3RyZWFtQnVmZmVyKCkpLCAwLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2
ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CiAgICAgICAgIG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rp
b24gPSBtYWtlV2Vha1B0cihncHVQcm9jZXNzQ29ubmVjdGlvbik7CiAgICAgfQogICAgIHJldHVy
biAqbV9ncHVQcm9jZXNzQ29ubmVjdGlvbjsKQEAgLTkxLDEyICs5MCw2IEBAIHZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpncHVQcm9jZXNzQ29ubmVjdGlvbkRpZENsb3NlKEdQVVBy
b2Nlc3NDb25uZWN0CiAKICAgICBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5yZW1vdGVSZXNv
dXJjZUNhY2hlV2FzRGVzdHJveWVkKCk7CiAKLSAgICBtX2lkZW50aWZpZXJzT2ZSZXVzYWJsZUhh
bmRsZXMuY2xlYXIoKTsKLSAgICBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlcy5jbGVhcigpOwot
ICAgIG1fY3VycmVudERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyID0gc3RkOjpudWxs
b3B0OwotICAgIG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzID0gc3RkOjpudWxsb3B0
OwotICAgIG1fcmVtYWluaW5nSXRlbXNUb0FwcGVuZEJlZm9yZVNlbmRpbmdXYWtldXAgPSAwOwot
CiAgICAgaWYgKG1fZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5VGltZXIuaXNBY3Rp
dmUoKSkKICAgICAgICAgbV9kZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlUaW1lci5z
dG9wKCk7CiAgICAgbV9nZXRQaXhlbEJ1ZmZlclNlbWFwaG9yZSA9IHN0ZDo6bnVsbG9wdDsKQEAg
LTExOSw2ICsxMTIsNyBAQCB1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1l
c3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKIAogUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpEaWRSZWNlaXZlQmFja2VuZENyZWF0aW9uUmVzdWx0IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6d2FpdEZvckRpZENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpCiB7CisgICAg
c2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7CiAgICAgUmVmUHRyIGNvbm5lY3Rp
b24gPSBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpOwogICAgIGlmICghY29ubmVjdGlvbi0+d2Fp
dEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6RGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kPihyZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcigpLCAxX3MsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3lu
Y01lc3NhZ2VBcnJpdmVzKSkKICAgICAgICAgcmV0dXJuIERpZFJlY2VpdmVCYWNrZW5kQ3JlYXRp
b25SZXN1bHQ6OlRpbWVvdXRPcklQQ0ZhaWx1cmU7CkBAIC0xMjcsMTMgKzEyMSwxNSBAQCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OkRpZFJlY2VpdmVCYWNrZW5kQ3JlYXRpb25SZXN1bHQg
UmVtb3RlUmVuZGVyaW5nQmFjawogCiBib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
d2FpdEZvckRpZEZsdXNoKCkKIHsKKyAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVk
ZWQoKTsKICAgICBSZWZQdHIgY29ubmVjdGlvbiA9IG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCk7
CiAgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1l
c3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OkRpZEZsdXNoPihyZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcigpLCAxX3MsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2Fp
dGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OmNyZWF0ZVJlbW90ZUltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZl
cikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDcmVhdGVJ
bWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5sb2dpY2FsU2l6ZSgpLCBpbWFnZUJ1ZmZlci5yZW5kZXJp
bmdNb2RlKCksIGltYWdlQnVmZmVyLnJlc29sdXRpb25TY2FsZSgpLCBpbWFnZUJ1ZmZlci5jb2xv
clNwYWNlKCksIGltYWdlQnVmZmVyLnBpeGVsRm9ybWF0KCksIGltYWdlQnVmZmVyLnJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcigpKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBD
OjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkp
OworICAgIHNlbmRUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q3Jl
YXRlSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIubG9naWNhbFNpemUoKSwgaW1hZ2VCdWZmZXIucmVu
ZGVyaW5nTW9kZSgpLCBpbWFnZUJ1ZmZlci5yZXNvbHV0aW9uU2NhbGUoKSwgaW1hZ2VCdWZmZXIu
Y29sb3JTcGFjZSgpLCBpbWFnZUJ1ZmZlci5waXhlbEZvcm1hdCgpLCBpbWFnZUJ1ZmZlci5yZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSkpOworICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3Nh
Z2VJZk5lZWRlZCgpOwogfQogCiBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCkK
QEAgLTE2Myw4ICsxNTksNiBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaQogCiBTaGFyZWRNZW1v
cnkqIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6c2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxC
dWZmZXIoc2l6ZV90IGRhdGFTaXplLCBJUEM6OlRpbWVvdXQgdGltZW91dCkKIHsKLSAgICBzZW5k
RGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKLQogICAgIGJvb2wgbmVlZHNTaGFyZWRN
ZW1vcnkgPSAhbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSB8fCBkYXRhU2l6ZSA+IG1fZ2V0
UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlMZW5ndGg7CiAgICAgYm9vbCBuZWVkc1NlbWFwaG9yZSA9
ICFtX2dldFBpeGVsQnVmZmVyU2VtYXBob3JlOwogCkBAIC0xNzUsMTEgKzE2OSwxMSBAQCBTaGFy
ZWRNZW1vcnkqIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6c2hhcmVkTWVtb3J5Rm9yR2V0
UGl4ZWxCdWZmZXIoc2l6ZV90CiAgICAgSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlOwogCiAgICAg
aWYgKG5lZWRzU2hhcmVkTWVtb3J5ICYmIG5lZWRzU2VtYXBob3JlKQotICAgICAgICBzZW5kU3lu
YyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5QW5k
U2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoZGF0YVNpemUpLCBNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0UGl4ZWxC
dWZmZXI6OlJlcGx5KGhhbmRsZSwgc2VtYXBob3JlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIoKSwgdGltZW91dCwgSVBDOjpTZW5kU3luY09wdGlvbjo6TWFpbnRhaW5PcmRlcmluZ1dpdGhB
c3luY01lc3NhZ2VzKTsKKyAgICAgICAgc2VuZFN5bmNUb1N0cmVhbShNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0UGl4
ZWxCdWZmZXIoZGF0YVNpemUpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBk
YXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXI6OlJlcGx5KGhhbmRs
ZSwgc2VtYXBob3JlKSwgdGltZW91dCk7CiAgICAgZWxzZSBpZiAobmVlZHNTaGFyZWRNZW1vcnkp
Ci0gICAgICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRh
dGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcihkYXRhU2l6ZSksIE1lc3NhZ2VzOjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcjo6
UmVwbHkoaGFuZGxlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgdGltZW91dCwgSVBD
OjpTZW5kU3luY09wdGlvbjo6TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzKTsKKyAg
ICAgICAgc2VuZFN5bmNUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIoZGF0YVNpemUpLCBNZXNzYWdlczo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZm
ZXI6OlJlcGx5KGhhbmRsZSksIHRpbWVvdXQpOwogICAgIGVsc2UgaWYgKG5lZWRzU2VtYXBob3Jl
KQotICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6U2Vt
YXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OlNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyOjpSZXBseShzZW1hcGhvcmUpLCByZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcigpLCB0aW1lb3V0KTsKKyAgICAgICAgc2VuZFN5bmNUb1N0cmVh
bShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6U2VtYXBob3JlRm9yR2V0UGl4ZWxC
dWZmZXIoKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlNlbWFwaG9yZUZvckdl
dFBpeGVsQnVmZmVyOjpSZXBseShzZW1hcGhvcmUpLCB0aW1lb3V0KTsKIAogICAgIGlmICghaGFu
ZGxlLmhhbmRsZS5pc051bGwoKSkgewogICAgICAgICBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVt
b3J5ID0gU2hhcmVkTWVtb3J5OjptYXAoaGFuZGxlLmhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90
ZWN0aW9uOjpSZWFkT25seSk7CkBAIC0xOTcsNiArMTkxLDcgQEAgU2hhcmVkTWVtb3J5KiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHNp
emVfdAogCiBib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckdldFBpeGVs
QnVmZmVyVG9Db21wbGV0ZShJUEM6OlRpbWVvdXQgdGltZW91dCkKIHsKKyAgICBzZW5kRGVmZXJy
ZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKICAgICBBU1NFUlQobV9nZXRQaXhlbEJ1ZmZlclNl
bWFwaG9yZSk7CiAgICAgcmV0dXJuIG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmUtPndhaXRGb3Io
dGltZW91dCk7CiB9CkBAIC0yMDQsMzMgKzE5OSwyNyBAQCBib29sIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6d2FpdEZvckdldFBpeGVsQnVmZmVyVG9Db21wbGV0ZShJUEM6OlRpbWVvdXQg
dAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRlc3Ryb3lHZXRQaXhlbEJ1ZmZl
clNoYXJlZE1lbW9yeSgpCiB7CiAgICAgbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSA9IG51
bGxwdHI7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6RGVzdHJv
eUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3lu
Y1JlcGx5KTsKKyAgICBzZW5kVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OkRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpKTsKIH0KIAogU3RyaW5nIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2
ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewotICAgIHNlbmREZWZlcnJlZFdha2V1
cE1lc3NhZ2VJZk5lZWRlZCgpOwotCiAgICAgU3RyaW5nIHVybFN0cmluZzsKLSAgICBzZW5kU3lu
YyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0RGF0YVVSTEZvckltYWdlQnVm
ZmVyKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24sIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXREYXRh
VVJMRm9ySW1hZ2VCdWZmZXI6OlJlcGx5KHVybFN0cmluZyksIHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKCksIDFfcyk7CisgICAgc2VuZFN5bmNUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6R2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKG1pbWVUeXBlLCBxdWFsaXR5
LCBwcmVzZXJ2ZVJlc29sdXRpb24sIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciksIE1lc3Nh
Z2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXI6OlJl
cGx5KHVybFN0cmluZyksIDNfcyk7CiAgICAgcmV0dXJuIHVybFN0cmluZzsKIH0KIAogVmVjdG9y
PHVpbnQ4X3Q+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0RGF0YUZvckltYWdlQnVm
ZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KQogewotICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwotCiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OkdldERhdGFGb3JJbWFnZUJ1ZmZlcihtaW1lVHlwZSwgcXVhbGl0eSwgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OkdldERhdGFGb3JJbWFnZUJ1ZmZlcjo6UmVwbHkoZGF0YSksIHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKCksIDFfcyk7CisgICAgc2VuZFN5bmNUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6R2V0RGF0YUZvckltYWdlQnVmZmVyKG1pbWVUeXBlLCBxdWFsaXR5LCBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6R2V0RGF0YUZvckltYWdlQnVmZmVyOjpSZXBseShkYXRhKSwgM19zKTsKICAgICByZXR1
cm4gZGF0YTsKIH0KIAogUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpnZXRTaGFyZWFibGVCaXRtYXAoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQogewot
ICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwotCiAgICAgU2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGUgaGFuZGxlOwotICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1l
c3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFn
ZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgcHJlc2VydmVSZXNvbHV0aW9uKSwgTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyOjpSZXBs
eShoYW5kbGUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCAxX3MpOworICAgIGF1dG8g
c2VuZFJlc3VsdCA9IHNlbmRTeW5jVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OkdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBwcmVz
ZXJ2ZVJlc29sdXRpb24pLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0U2hh
cmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXI6OlJlcGx5KGhhbmRsZSksIDNfcyk7CiAgICAgaWYg
KGhhbmRsZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICBBU1NFUlRfVU5VU0VE
KHNlbmRSZXN1bHQsIHNlbmRSZXN1bHQpOwpAQCAtMjM5LDMwICsyMjgsMzIgQEAgUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRTaGFyZWFibGVC
aXRtYXAoUmVuZGVyaW4KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNhY2hl
TmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSwgUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDYWNoZU5hdGl2ZUltYWdl
KGhhbmRsZSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRp
bmdGb3JTeW5jUmVwbHkpOworICAgIHNlbmRUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6Q2FjaGVOYXRpdmVJbWFnZShoYW5kbGUsIHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcikpOworICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwogfQog
Ci12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y2FjaGVGb250KFJlZjxXZWJDb3Jl
OjpGb250PiYmIGZvbnQpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y2FjaGVG
b250KFJlZjxGb250PiYmIGZvbnQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6Q2FjaGVGb250KFdURk1vdmUoZm9udCkpLCByZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGlu
Z0ZvclN5bmNSZXBseSk7CisgICAgc2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpDYWNoZUZvbnQoV1RGTW92ZShmb250KSkpOworICAgIHNlbmREZWZlcnJlZFdh
a2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6ZGVsZXRlQWxsRm9udHMoKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OkRlbGV0ZUFsbEZvbnRzKCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3lu
Y1JlcGx5KTsKKyAgICBzZW5kVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OkRlbGV0ZUFsbEZvbnRzKCkpOworICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5l
ZWRlZCgpOwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZVJl
bW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KQogewotICAgIGlmIChyZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgPT0gbV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZp
ZXIpCi0gICAgICAgIG1fY3VycmVudERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyID0g
c3RkOjpudWxsb3B0OwotCi0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6UmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdXNl
Q291bnQpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRp
c3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAgc2VuZFRvU3Ry
ZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZWxlYXNlUmVtb3RlUmVzb3Vy
Y2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1c2VDb3VudCkpOworICAgIHNlbmREZWZl
cnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6ZmluYWxpemVSZW5kZXJpbmdVcGRhdGUoKQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKG1fcmVu
ZGVyaW5nVXBkYXRlSUQpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRP
cHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAg
c2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpGaW5hbGl6ZVJl
bmRlcmluZ1VwZGF0ZShtX3JlbmRlcmluZ1VwZGF0ZUlEKSk7CisgICAgc2VuZERlZmVycmVkV2Fr
ZXVwTWVzc2FnZUlmTmVlZGVkKCk7CiAgICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuZmlu
YWxpemVSZW5kZXJpbmdVcGRhdGUoKTsKICAgICBtX3JlbmRlcmluZ1VwZGF0ZUlELmluY3JlbWVu
dCgpOwogfQpAQCAtMjgxLDE3MCArMjcyLDc2IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpkaWRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoSW1hZ2VCdWZmZXJCYWNrZW5kCiAg
ICAgICAgIGltYWdlQnVmZmVyLT5zZXRCYWNrZW5kKEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCYWNrZW5kOjpjcmVhdGUoaW1hZ2VCdWZmZXItPnBhcmFtZXRlcnMoKSwgV1RGTW92ZSho
YW5kbGUpKSk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRGbHVz
aChEaXNwbGF5TGlzdDo6Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKK3ZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRGbHVzaChGbHVzaElkZW50aWZpZXIgZmx1c2hJ
ZGVudGlmaWVyLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKQogewogICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJj
ZUNhY2hlUHJveHkuY2FjaGVkSW1hZ2VCdWZmZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KSkKICAgICAgICAgaW1hZ2VCdWZmZXItPmRpZEZsdXNoKGZsdXNoSWRlbnRpZmllcik7CiB9CiAK
LXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRGaW5hbGl6ZVJlbmRlcmluZ1Vw
ZGF0ZShSZW5kZXJpbmdVcGRhdGVJRCBkaWRSZW5kZXJpbmdVcGRhdGVJRCkKK3ZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRGaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShSZW5kZXJp
bmdVcGRhdGVJRCByZW5kZXJpbmdVcGRhdGVJRCkKIHsKLSAgICBBU1NFUlQoZGlkUmVuZGVyaW5n
VXBkYXRlSUQgPD0gbV9yZW5kZXJpbmdVcGRhdGVJRCk7Ci0gICAgbV9kaWRSZW5kZXJpbmdVcGRh
dGVJRCA9IHN0ZDo6bWluKGRpZFJlbmRlcmluZ1VwZGF0ZUlELCBtX3JlbmRlcmluZ1VwZGF0ZUlE
KTsKKyAgICBBU1NFUlQocmVuZGVyaW5nVXBkYXRlSUQgPD0gbV9yZW5kZXJpbmdVcGRhdGVJRCk7
CisgICAgbV9kaWRSZW5kZXJpbmdVcGRhdGVJRCA9IHN0ZDo6bWluKHJlbmRlcmluZ1VwZGF0ZUlE
LCBtX3JlbmRlcmluZ1VwZGF0ZUlEKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OndpbGxBcHBlbmRJdGVtKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBuZXdEZXN0
aW5hdGlvbklkZW50aWZpZXIpCitSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OnJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCkgY29uc3QKIHsK
LSAgICBpZiAobV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIgPT0gbmV3
RGVzdGluYXRpb25JZGVudGlmaWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byBw
cmV2aW91c0Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllciA9IHN0ZDo6ZXhjaGFuZ2UobV9jdXJy
ZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIsIG5ld0Rlc3RpbmF0aW9uSWRlbnRp
ZmllcikpIHsKLSAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNl
Q2FjaGVQcm94eS5jYWNoZWRJbWFnZUJ1ZmZlcigqcHJldmlvdXNEZXN0aW5hdGlvbkJ1ZmZlcklk
ZW50aWZpZXIpKQotICAgICAgICAgICAgaW1hZ2VCdWZmZXItPmNoYW5nZURlc3RpbmF0aW9uSW1h
Z2VCdWZmZXIobmV3RGVzdGluYXRpb25JZGVudGlmaWVyKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgYXV0byBoYW5kbGUgPSBt
b3N0UmVjZW50bHlVc2VkRGlzcGxheUxpc3RIYW5kbGUoKTsKLSAgICBpZiAoVU5MSUtFTFkoIWhh
bmRsZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gbmV3RGVzdGluYXRpb24gPSBtX3Jl
bW90ZVJlc291cmNlQ2FjaGVQcm94eS5jYWNoZWRJbWFnZUJ1ZmZlcihuZXdEZXN0aW5hdGlvbklk
ZW50aWZpZXIpOwotICAgIGlmIChVTkxJS0VMWSghbmV3RGVzdGluYXRpb24pKSB7Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaGFu
ZGxlLT5tb3ZlV3JpdGFibGVPZmZzZXRUb1N0YXJ0SWZQb3NzaWJsZSgpOwotICAgIG5ld0Rlc3Rp
bmF0aW9uLT5wcmVwYXJlVG9BcHBlbmREaXNwbGF5TGlzdEl0ZW1zKGhhbmRsZS0+Y3JlYXRlSGFu
ZGxlKCkpOworICAgIHJldHVybiBtX3BhcmFtZXRlcnMuaWRlbnRpZmllcjsKIH0KIAotdm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNlbmRXYWtldXBNZXNzYWdlKGNvbnN0IEdQVVBy
b2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzJiBhcmd1bWVudHMpCitSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllciBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmVuc3VyZUJhY2tlbmRDcmVh
dGVkKCkKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2hhcmVkRGlzcGxheUxpc3RzLCBzdHJlYW0g
PDwgIlNlbmRpbmcgd2FrZXVwOiBJdGVtc1siIDw8IGFyZ3VtZW50cy5pdGVtQnVmZmVySWRlbnRp
ZmllciA8PCAiXSA9PiBJbWFnZSgiIDw8IGFyZ3VtZW50cy5kZXN0aW5hdGlvbkltYWdlQnVmZmVy
SWRlbnRpZmllciA8PCAiKSBhdCAiIDw8IGFyZ3VtZW50cy5vZmZzZXQpOwotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Oldha2VVcEFuZEFwcGx5RGlzcGxheUxpc3Qo
YXJndW1lbnRzKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9u
OjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIGVuc3Vy
ZUdQVVByb2Nlc3NDb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKCk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpzZW5kRGVm
ZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKQorSVBDOjpTdHJlYW1DbGllbnRDb25uZWN0aW9u
JiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnN0cmVhbUNvbm5lY3Rpb24oKQogewotICAg
IGF1dG8gYXJndW1lbnRzID0gc3RkOjpleGNoYW5nZShtX2RlZmVycmVkV2FrZXVwTWVzc2FnZUFy
Z3VtZW50cywgc3RkOjpudWxsb3B0KTsKLSAgICBpZiAoIWFyZ3VtZW50cykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgc2VuZFdha2V1cE1lc3NhZ2UoKmFyZ3VtZW50cyk7Ci0gICAgbV9yZW1haW5p
bmdJdGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dha2V1cCA9IDA7Ci19Ci0KLXZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRBcHBlbmREYXRhKGNvbnN0IERpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVySGFuZGxlJiBoYW5kbGUsIHNpemVfdCBudW1iZXJPZkJ5dGVzLCBEaXNwbGF5TGlz
dDo6RGlkQ2hhbmdlSXRlbUJ1ZmZlciBkaWRDaGFuZ2VJdGVtQnVmZmVyLCBSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb25JbWFnZUJ1ZmZlcikKLXsKLSAgICBhdXRvKiBzaGFy
ZWRIYW5kbGUgPSBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlcy5nZXQoaGFuZGxlLmlkZW50aWZp
ZXIpOwotICAgIGlmIChVTkxJS0VMWSghc2hhcmVkSGFuZGxlKSkKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIGJvb2wgd2FzRW1wdHkgPSBzaGFyZWRIYW5kbGUt
PmFkdmFuY2UobnVtYmVyT2ZCeXRlcykgPT0gbnVtYmVyT2ZCeXRlczsKLSAgICBpZiAoIXdhc0Vt
cHR5IHx8IGRpZENoYW5nZUl0ZW1CdWZmZXIgPT0gRGlzcGxheUxpc3Q6OkRpZENoYW5nZUl0ZW1C
dWZmZXI6OlllcykgewotICAgICAgICBpZiAobV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVu
dHMpIHsKLSAgICAgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2Fj
aGVQcm94eS5jYWNoZWRJbWFnZUJ1ZmZlcihtX2RlZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50
cy0+ZGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIpOwotICAgICAgICAgICAgaWYgKGlt
YWdlQnVmZmVyICYmIGltYWdlQnVmZmVyLT5iYWNrZW5kKCkgJiYgc2hhcmVkSGFuZGxlLT50cnlU
b1Jlc3VtZSh7IG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzLT5vZmZzZXQsIG1fZGVm
ZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzLT5kZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRp
Zmllci50b1VJbnQ2NCgpIH0pKSB7Ci0gICAgICAgICAgICAgICAgbV9wYXJhbWV0ZXJzLnJlc3Vt
ZURpc3BsYXlMaXN0U2VtYXBob3JlLnNpZ25hbCgpOwotICAgICAgICAgICAgICAgIG1fZGVmZXJy
ZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzID0gc3RkOjpudWxsb3B0OwotICAgICAgICAgICAgICAg
IG1fcmVtYWluaW5nSXRlbXNUb0FwcGVuZEJlZm9yZVNlbmRpbmdXYWtldXAgPSAwOwotICAgICAg
ICAgICAgfSBlbHNlIGlmICghLS1tX3JlbWFpbmluZ0l0ZW1zVG9BcHBlbmRCZWZvcmVTZW5kaW5n
V2FrZXVwKSB7Ci0gICAgICAgICAgICAgICAgbV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVu
dHMtPnJlYXNvbiA9IEdQVVByb2Nlc3NXYWtldXBSZWFzb246Okl0ZW1Db3VudEh5c3RlcmVzaXNF
eGNlZWRlZDsKLSAgICAgICAgICAgICAgICBzZW5kV2FrZXVwTWVzc2FnZSgqc3RkOjpleGNoYW5n
ZShtX2RlZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50cywgc3RkOjpudWxsb3B0KSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNlbmRE
ZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwotCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9
IG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNhY2hlZEltYWdlQnVmZmVyKGRlc3RpbmF0aW9u
SW1hZ2VCdWZmZXIpOwotICAgIGF1dG8gb2Zmc2V0VG9SZWFkID0gc2hhcmVkSGFuZGxlLT53cml0
YWJsZU9mZnNldCgpIC0gbnVtYmVyT2ZCeXRlczsKLSAgICBpZiAoaW1hZ2VCdWZmZXIgJiYgaW1h
Z2VCdWZmZXItPmJhY2tlbmQoKSAmJiBzaGFyZWRIYW5kbGUtPnRyeVRvUmVzdW1lKHsgb2Zmc2V0
VG9SZWFkLCBkZXN0aW5hdGlvbkltYWdlQnVmZmVyLnRvVUludDY0KCkgfSkpIHsKLSAgICAgICAg
bV9wYXJhbWV0ZXJzLnJlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlLnNpZ25hbCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSW5zdGVhZCBvZiBzZW5kaW5nIHRoZSB3YWtldXAg
bWVzc2FnZSBpbW1lZGlhdGVseSwgd2FpdCBmb3Igc29tZSBhZGRpdGlvbmFsIGRhdGEuIFRoaXMg
Z2l2ZXMgdGhlCi0gICAgLy8gd2ViIHByb2Nlc3MgYSAiaGVhZCBzdGFydCIsIGRlY3JlYXNpbmcg
dGhlIGxpa2VsaWhvb2QgdGhhdCB0aGUgR1BVIHByb2Nlc3Mgd2lsbCBlbmNvdW50ZXIgZnJlcXVl
bnQKLSAgICAvLyB3YWtldXBzIHdoZW4gcHJvY2Vzc2luZyBhIGxhcmdlIGFtb3VudCBvZiBkaXNw
bGF5IGxpc3QgaXRlbXMuCi0gICAgY29uc3RleHByIHVuc2lnbmVkIGl0ZW1Db3VudEh5c3RlcmVz
aXNCZWZvcmVTZW5kaW5nV2FrZXVwID0gNTEyOwotCi0gICAgbV9yZW1haW5pbmdJdGVtc1RvQXBw
ZW5kQmVmb3JlU2VuZGluZ1dha2V1cCA9IGl0ZW1Db3VudEh5c3RlcmVzaXNCZWZvcmVTZW5kaW5n
V2FrZXVwOwotICAgIG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzID0ge3sgaGFuZGxl
LmlkZW50aWZpZXIsIG9mZnNldFRvUmVhZCwgZGVzdGluYXRpb25JbWFnZUJ1ZmZlciB9fTsKKyAg
ICBlbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpOworICAgIGlmICghbV9kaWRDcmVhdGVXYWtl
VXBTZW1hcGhvcmVGb3JEaXNwbGF5TGlzdFN0cmVhbSkKKyAgICAgICAgbWVzc2FnZVNlbmRlckNv
bm5lY3Rpb24oKS0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6RGlkQ3JlYXRlV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxh
eUxpc3RTdHJlYW0+KHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIFNlY29uZHM6OmluZmlu
aXR5KCksIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VB
cnJpdmVzKTsKKyAgICByZXR1cm4gKm1fc3RyZWFtQ29ubmVjdGlvbjsKIH0KIAotUmVmUHRyPERp
c3BsYXlMaXN0V3JpdGVySGFuZGxlPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1vc3RS
ZWNlbnRseVVzZWREaXNwbGF5TGlzdEhhbmRsZSgpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6c2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCkKIHsKLSAgICBpZiAo
VU5MSUtFTFkobV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVzLmlzRW1wdHkoKSkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIG1fc2hhcmVkRGlzcGxheUxpc3RIYW5k
bGVzLmdldChtX2lkZW50aWZpZXJzT2ZSZXVzYWJsZUhhbmRsZXMuZmlyc3QoKSk7CisgICAgaWYg
KG1fc3RyZWFtQ29ubmVjdGlvbikKKyAgICAgICAgbV9zdHJlYW1Db25uZWN0aW9uLT5zZW5kRGVm
ZXJyZWRXYWtlVXBNZXNzYWdlKCk7CiB9CiAKLVJlZlB0cjxEaXNwbGF5TGlzdFdyaXRlckhhbmRs
ZT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmaW5kUmV1c2FibGVEaXNwbGF5TGlzdEhh
bmRsZShzaXplX3QgY2FwYWNpdHkpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
ZGlkQ3JlYXRlV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxheUxpc3RTdHJlYW0oSVBDOjpTZW1hcGhv
cmUmJiBzZW1hcGhvcmUpCiB7Ci0gICAgYXV0byBtb3N0UmVjZW50bHlVc2VkSGFuZGxlID0gbW9z
dFJlY2VudGx5VXNlZERpc3BsYXlMaXN0SGFuZGxlKCk7Ci0gICAgaWYgKFVOTElLRUxZKCFtb3N0
UmVjZW50bHlVc2VkSGFuZGxlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBtb3N0
UmVjZW50bHlVc2VkSGFuZGxlLT5tb3ZlV3JpdGFibGVPZmZzZXRUb1N0YXJ0SWZQb3NzaWJsZSgp
OwotICAgIGlmIChtb3N0UmVjZW50bHlVc2VkSGFuZGxlLT5hdmFpbGFibGVDYXBhY2l0eSgpID49
IGNhcGFjaXR5KQotICAgICAgICByZXR1cm4gbW9zdFJlY2VudGx5VXNlZEhhbmRsZTsKLQotICAg
IG1faWRlbnRpZmllcnNPZlJldXNhYmxlSGFuZGxlcy5hcHBlbmQobV9pZGVudGlmaWVyc09mUmV1
c2FibGVIYW5kbGVzLnRha2VGaXJzdCgpKTsKLQotICAgIGF1dG8gbGVhc3RSZWNlbnRseVVzZWRJ
ZGVudGlmaWVyID0gbV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVzLmZpcnN0KCk7Ci0gICAg
aWYgKGxlYXN0UmVjZW50bHlVc2VkSWRlbnRpZmllciAhPSBtb3N0UmVjZW50bHlVc2VkSGFuZGxl
LT5pZGVudGlmaWVyKCkpIHsKLSAgICAgICAgUmVmUHRyIGhhbmRsZSA9IG1fc2hhcmVkRGlzcGxh
eUxpc3RIYW5kbGVzLmdldChsZWFzdFJlY2VudGx5VXNlZElkZW50aWZpZXIpOwotICAgICAgICBp
ZiAoaGFuZGxlLT5tb3ZlV3JpdGFibGVPZmZzZXRUb1N0YXJ0SWZQb3NzaWJsZSgpICYmIGhhbmRs
ZS0+YXZhaWxhYmxlQ2FwYWNpdHkoKSA+PSBjYXBhY2l0eSkKLSAgICAgICAgICAgIHJldHVybiBo
YW5kbGU7CisgICAgaWYgKCFtX3N0cmVhbUNvbm5lY3Rpb24pIHsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICBtX3N0cmVhbUNvbm5lY3Rpb24tPnNldFdha2VVcFNlbWFwaG9yZShXVEZNb3ZlKHNl
bWFwaG9yZSkpOworICAgIG1fZGlkQ3JlYXRlV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxheUxpc3RT
dHJlYW0gPSB0cnVlOwogfQogCi1EaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90IGNhcGFjaXR5LCBS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKQor
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlY29yZE5hdGl2ZUltYWdlVXNlKE5h
dGl2ZUltYWdlJiBpbWFnZSkKIHsKLSAgICBpZiAoYXV0byBoYW5kbGUgPSBmaW5kUmV1c2FibGVE
aXNwbGF5TGlzdEhhbmRsZShjYXBhY2l0eSkpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNo
YXJlZERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJSZXVzaW5nIEl0ZW1zWyIgPDwgaGFuZGxlLT5p
ZGVudGlmaWVyKCkgPDwgIl0gPT4gSW1hZ2UoIiA8PCBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZp
ZXIgPDwgIikgKHJlbWFpbmluZyBjYXBhY2l0eTogIiA8PCBoYW5kbGUtPmF2YWlsYWJsZUNhcGFj
aXR5KCkgPDwgIikiKTsKLSAgICAgICAgcmV0dXJuIGhhbmRsZS0+Y3JlYXRlSGFuZGxlKCk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZGVmYXVsdFNoYXJlZEl0ZW1CdWZm
ZXJTaXplID0gMSA8PCAxNjsKLSAgICBzdGF0aWNfYXNzZXJ0KGRlZmF1bHRTaGFyZWRJdGVtQnVm
ZmVyU2l6ZSA+IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpoZWFkZXJTaXplKCkpOwotCi0gICAg
YXV0byBzaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFsbG9jYXRlKHN0ZDo6bWF4KGRlZmF1
bHRTaGFyZWRJdGVtQnVmZmVyU2l6ZSwgY2FwYWNpdHkgKyBTaGFyZWREaXNwbGF5TGlzdEhhbmRs
ZTo6aGVhZGVyU2l6ZSgpKSk7Ci0gICAgaWYgKCFzaGFyZWRNZW1vcnkpCi0gICAgICAgIHJldHVy
biB7IH07Ci0KLSAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBzaGFyZWRNZW1vcnlIYW5kbGU7Ci0g
ICAgc2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUoc2hhcmVkTWVtb3J5SGFuZGxlLCBTaGFyZWRN
ZW1vcnk6OlByb3RlY3Rpb246OlJlYWRXcml0ZSk7Ci0KLSAgICBhdXRvIGlkZW50aWZpZXIgPSBE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXI6OmdlbmVyYXRlKCk7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6RGlkQ3JlYXRlU2hhcmVkRGlzcGxheUxp
c3RIYW5kbGUoaWRlbnRpZmllciwgeyBXVEZNb3ZlKHNoYXJlZE1lbW9yeUhhbmRsZSksIHNoYXJl
ZE1lbW9yeS0+c2l6ZSgpIH0sIGRlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllciksIHJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZl
bldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKLQotICAgIGF1dG8gbmV3SGFuZGxlID0gRGlzcGxh
eUxpc3RXcml0ZXJIYW5kbGU6OmNyZWF0ZShpZGVudGlmaWVyLCBzaGFyZWRNZW1vcnkucmVsZWFz
ZU5vbk51bGwoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobmV3SGFuZGxlLCAiVGhlcmUgbXVzdCBi
ZSBlbm91Z2ggc3BhY2UgdG8gY3JlYXRlIHRoZSBoYW5kbGUuIik7Ci0gICAgYXV0byBkaXNwbGF5
TGlzdEhhbmRsZSA9IG5ld0hhbmRsZS0+Y3JlYXRlSGFuZGxlKCk7Ci0KLSAgICBtX2lkZW50aWZp
ZXJzT2ZSZXVzYWJsZUhhbmRsZXMucHJlcGVuZChpZGVudGlmaWVyKTsKLSAgICBtX3NoYXJlZERp
c3BsYXlMaXN0SGFuZGxlcy5zZXQoaWRlbnRpZmllciwgV1RGTW92ZShuZXdIYW5kbGUpKTsKKyAg
ICBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5yZWNvcmROYXRpdmVJbWFnZVVzZShpbWFnZSk7
Cit9CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2hhcmVkRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwg
IkFsbG9jYXRlZCBJdGVtc1siIDw8IGlkZW50aWZpZXIgPDwgIl0gPT4gSW1hZ2UoIiA8PCBkZXN0
aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIgPDwgIikiKTsKLSAgICByZXR1cm4gZGlzcGxheUxpc3RI
YW5kbGU7Cit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVjb3JkRm9udFVzZShG
b250JiBmb250KQoreworICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LnJlY29yZEZvbnRV
c2UoZm9udCk7CiB9CiAKLVJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSBjb25zdAordm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlY29yZEltYWdlQnVmZmVyVXNlKEltYWdlQnVm
ZmVyJiBpbWFnZUJ1ZmZlcikKIHsKLSAgICByZXR1cm4gbV9wYXJhbWV0ZXJzLmlkZW50aWZpZXI7
CisgICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkucmVjb3JkSW1hZ2VCdWZmZXJVc2UoaW1h
Z2VCdWZmZXIpOwogfQogCi1SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6OmVuc3VyZUJhY2tlbmRDcmVhdGVkKCkKK2Jvb2wgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5Ojppc0NhY2hlZChjb25zdCBJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIp
IGNvbnN0CiB7Ci0gICAgZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKLSAgICByZXR1cm4g
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKTsKKyAgICBpZiAoYXV0byBjYWNoZWRJbWFnZUJ1
ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNhY2hlZEltYWdlQnVmZmVyKGltYWdl
QnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKSkgeworICAgICAgICBBU1NFUlQo
Y2FjaGVkSW1hZ2VCdWZmZXIgPT0gJmltYWdlQnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAppbmRleCA4N2FlNTIyY2JiYjI4MWZj
NGE4ODA3NjViOTlmNGM5MDI1NmE5ZDI1Li5hNThiZGI3ZDUyODdiODhhN2YxMWJiNDEyMGU0ZDE0
NWYyZDFiOWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTMz
LDExICszMywxMyBAQAogI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIgogI2lu
Y2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNp
bmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMuaCIKICNpbmNsdWRlICJSZW1vdGVSZXNvdXJjZUNhY2hl
UHJveHkuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgogI2luY2x1
ZGUgIlJlbmRlcmluZ1VwZGF0ZUlELmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5o
PgorI2luY2x1ZGUgIlN0cmVhbUNsaWVudENvbm5lY3Rpb24uaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L1JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIu
aD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KQEAgLTQ1LDExICs0Nyw2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKLWNsYXNzIERpc3BsYXlMaXN0
OwotY2xhc3MgSXRlbTsKLX0KLQogY2xhc3MgRGVzdGluYXRpb25Db2xvclNwYWNlOwogY2xhc3Mg
RmxvYXRTaXplOwogY2xhc3MgUGl4ZWxCdWZmZXI7CkBAIC02MSwxMyArNTgsMTMgQEAgZW51bSBj
bGFzcyBSZW5kZXJpbmdNb2RlIDogYm9vbDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNz
IERpc3BsYXlMaXN0V3JpdGVySGFuZGxlOwogY2xhc3MgV2ViUGFnZTsKIAogY2xhc3MgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5CiAgICAgOiBwdWJsaWMgSVBDOjpNZXNzYWdlU2VuZGVyCiAg
ICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyCi0gICAgLCBwdWJsaWMgR1BVUHJvY2Vz
c0Nvbm5lY3Rpb246OkNsaWVudCB7CisgICAgLCBwdWJsaWMgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246
OkNsaWVudAorICAgICwgcHVibGljIFJlZkNvdW50ZWQ8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk+IGNyZWF0ZShXZWJQYWdlJik7CiAKQEAgLTc3LDEwICs3NCw2IEBAIHB1
YmxpYzoKICAgICB1c2luZyBXZWFrVmFsdWVUeXBlID0gR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OkNs
aWVudDo6V2Vha1ZhbHVlVHlwZTsKIAogICAgIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSYgcmVt
b3RlUmVzb3VyY2VDYWNoZVByb3h5KCkgeyByZXR1cm4gbV9yZW1vdGVSZXNvdXJjZUNhY2hlUHJv
eHk7IH0KLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSBjcmVhdGVJ
dGVtQnVmZmVyKHNpemVfdCBjYXBhY2l0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGRlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcik7Ci0KLSAgICB2b2lkIGRpZEFwcGVu
ZERhdGEoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUmLCBzaXpl
X3QgbnVtYmVyT2ZCeXRlcywgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpZENoYW5nZUl0ZW1CdWZm
ZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkltYWdl
QnVmZmVyKTsKLSAgICB2b2lkIHdpbGxBcHBlbmRJdGVtKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVk
ZWQoKTsKIAogICAgIFNoYXJlZE1lbW9yeSogc2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIo
c2l6ZV90IGRhdGFTaXplLCBJUEM6OlRpbWVvdXQpOwpAQCAtODgsNiArODEsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBkZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkoKTsKIAogICAgIHZv
aWQgY3JlYXRlUmVtb3RlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKTsKKyAgICBi
b29sIGlzQ2FjaGVkKGNvbnN0IFdlYkNvcmU6OkltYWdlQnVmZmVyJikgY29uc3Q7CiAgICAgICAg
IAogICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KICAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3Nh
Z2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMDAsNyArOTQsNiBAQCBw
dWJsaWM6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZl
cihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYs
IFdlYkNvcmU6OlBpeGVsRm9ybWF0KTsKICAgICBTdHJpbmcgZ2V0RGF0YVVSTEZvckltYWdlQnVm
ZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGdldERhdGFGb3JJbWFnZUJ1ZmZlcihj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Rmx1c2hJZGVudGlmaWVyIGZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoY29uc3QgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKTsKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBnZXRTaGFyZWFibGVC
aXRtYXAoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpQcmVz
ZXJ2ZVJlc29sdXRpb24pOwogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7
CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwpAQCAtMTI0LDkgKzEx
NywzNSBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzR1BVUHJvY2Vzc0Nvbm5lY3Rpb25DbG9zZWQo
KSBjb25zdCB7IHJldHVybiAhbV9ncHVQcm9jZXNzQ29ubmVjdGlvbjsgfQogCisgICAgdm9pZCBk
aWRDcmVhdGVXYWtlVXBTZW1hcGhvcmVGb3JEaXNwbGF5TGlzdFN0cmVhbShJUEM6OlNlbWFwaG9y
ZSYmKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CisgICAgdm9pZCBz
ZW5kVG9TdHJlYW0oVCYmIG1lc3NhZ2UsIE9iamVjdElkZW50aWZpZXI8VT4gaWRlbnRpZmllcikK
KyAgICB7CisgICAgICAgIHN0cmVhbUNvbm5lY3Rpb24oKS5zZW5kKFdURk1vdmUobWVzc2FnZSks
IGlkZW50aWZpZXIsIFNlY29uZHM6OmluZmluaXR5KCkpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgdm9pZCBzZW5kVG9TdHJlYW0oVCYmIG1lc3NhZ2UpCisgICAgewor
ICAgICAgICBzZW5kVG9TdHJlYW0oV1RGTW92ZShtZXNzYWdlKSwgcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIoKSk7CisgICAgfQorCisgICAgdm9pZCByZWNvcmROYXRpdmVJbWFnZVVzZShXZWJD
b3JlOjpOYXRpdmVJbWFnZSYpOworICAgIHZvaWQgcmVjb3JkRm9udFVzZShXZWJDb3JlOjpGb250
Jik7CisgICAgdm9pZCByZWNvcmRJbWFnZUJ1ZmZlclVzZShXZWJDb3JlOjpJbWFnZUJ1ZmZlciYp
OworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShX
ZWJQYWdlJik7CiAKKyAgICBJUEM6OlN0cmVhbUNsaWVudENvbm5lY3Rpb24mIHN0cmVhbUNvbm5l
Y3Rpb24oKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYXV0byBzZW5kU3luY1Rv
U3RyZWFtKFQmJiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCBJUEM6OlRpbWVv
dXQgdGltZW91dCA9IHsgU2Vjb25kczo6aW5maW5pdHkoKSB9KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0cmVhbUNvbm5lY3Rpb24oKS5zZW5kU3luYyhXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3Zl
KHJlcGx5KSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgdGltZW91dCk7CisgICAgfQor
CiAgICAgLy8gR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQgZ3B1UHJvY2Vz
c0Nvbm5lY3Rpb25EaWRDbG9zZShHUFVQcm9jZXNzQ29ubmVjdGlvbiYpIGZpbmFsOwogCkBAIC0x
MzQsMjQgKzE1MywxNCBAQCBwcml2YXRlOgogCiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgcmVjZWl2
ZWQuCiAgICAgdm9pZCBkaWRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoSW1hZ2VCdWZmZXJCYWNr
ZW5kSGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZv
aWQgZGlkRmx1c2goV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNoSWRlbnRpZmllciwgV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICB2b2lkIGRpZEZpbmFsaXplUmVu
ZGVyaW5nVXBkYXRlKFJlbmRlcmluZ1VwZGF0ZUlEIGRpZFJlbmRlcmluZ1VwZGF0ZUlEKTsKLQot
ICAgIFJlZlB0cjxEaXNwbGF5TGlzdFdyaXRlckhhbmRsZT4gbW9zdFJlY2VudGx5VXNlZERpc3Bs
YXlMaXN0SGFuZGxlKCk7Ci0gICAgUmVmUHRyPERpc3BsYXlMaXN0V3JpdGVySGFuZGxlPiBmaW5k
UmV1c2FibGVEaXNwbGF5TGlzdEhhbmRsZShzaXplX3QgY2FwYWNpdHkpOwotCi0gICAgdm9pZCBz
ZW5kV2FrZXVwTWVzc2FnZShjb25zdCBHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cyYp
OworICAgIHZvaWQgZGlkRmx1c2goV2ViQ29yZTo6Rmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIHZvaWQgZGlkRmluYWxpemVSZW5kZXJp
bmdVcGRhdGUoUmVuZGVyaW5nVXBkYXRlSUQpOwogCisgICAgc3RkOjp1bmlxdWVfcHRyPElQQzo6
U3RyZWFtQ2xpZW50Q29ubmVjdGlvbj4gbV9zdHJlYW1Db25uZWN0aW9uOwogICAgIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwogICAgIFdlYWtQ
dHI8R1BVUHJvY2Vzc0Nvbm5lY3Rpb24+IG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb247CiAgICAgUmVt
b3RlUmVzb3VyY2VDYWNoZVByb3h5IG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5IHsgKnRoaXMg
fTsKIAotICAgIEhhc2hNYXA8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlm
aWVyLCBSZWZQdHI8RGlzcGxheUxpc3RXcml0ZXJIYW5kbGU+PiBtX3NoYXJlZERpc3BsYXlMaXN0
SGFuZGxlczsKLSAgICBEZXF1ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50
aWZpZXI+IG1faWRlbnRpZmllcnNPZlJldXNhYmxlSGFuZGxlczsKLSAgICBzdGQ6Om9wdGlvbmFs
PFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gbV9jdXJyZW50RGVzdGluYXRp
b25JbWFnZUJ1ZmZlcklkZW50aWZpZXI7Ci0gICAgc3RkOjpvcHRpb25hbDxHUFVQcm9jZXNzV2Fr
ZXVwTWVzc2FnZUFyZ3VtZW50cz4gbV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHM7Ci0g
ICAgdW5zaWduZWQgbV9yZW1haW5pbmdJdGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dha2V1cCB7
IDAgfTsKLQogICAgIHN0ZDo6b3B0aW9uYWw8SVBDOjpTZW1hcGhvcmU+IG1fZ2V0UGl4ZWxCdWZm
ZXJTZW1hcGhvcmU7CiAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9nZXRQaXhlbEJ1ZmZlclNo
YXJlZE1lbW9yeTsKICAgICB1aW50NjRfdCBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5TGVu
Z3RoIHsgMCB9OwpAQCAtMTU5LDYgKzE2OCw4IEBAIHByaXZhdGU6CiAKICAgICBSZW5kZXJpbmdV
cGRhdGVJRCBtX3JlbmRlcmluZ1VwZGF0ZUlEOwogICAgIFJlbmRlcmluZ1VwZGF0ZUlEIG1fZGlk
UmVuZGVyaW5nVXBkYXRlSUQ7CisKKyAgICBib29sIG1fZGlkQ3JlYXRlV2FrZVVwU2VtYXBob3Jl
Rm9yRGlzcGxheUxpc3RTdHJlYW0geyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2Vz
LmluCmluZGV4IDQ2NzgzMDg5ZDM2MjVkOWUzNGNhNmFkYWMxOGQ2MWQ4MGMwZDc4OGUuLmE3MzY1
YzY1MWQ0NzExYzJjYTc5ZGI4OTE5ZjdkMDgzODc3NmYyMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yNCw4ICsyNCw5IEBA
CiAKIG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSBOb3RSZWZDb3VudGVk
IHsKICAgICBEaWRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoV2ViS2l0OjpJbWFnZUJ1ZmZlckJh
Y2tlbmRIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQotICAgIERpZEZsdXNoKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgIERp
ZEZsdXNoKFdlYkNvcmU6OkZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
CiAgICAgRGlkRmluYWxpemVSZW5kZXJpbmdVcGRhdGUoV2ViS2l0OjpSZW5kZXJpbmdVcGRhdGVJ
RCBkaWRSZW5kZXJpbmdVcGRhdGVJRCkKKyAgICBEaWRDcmVhdGVXYWtlVXBTZW1hcGhvcmVGb3JE
aXNwbGF5TGlzdFN0cmVhbShJUEM6OlNlbWFwaG9yZSB3YWtlVXBTZW1hcGhvcmUpCiB9CiAKICNl
bmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94
eS5jcHAKaW5kZXggYzAzNzQxY2U5ZGE0Yjk2OTM2NzVmMmJhYjg2Yzc5ZTk2MTQ5NmIzOS4uNDEx
NzA0ZDczNTEwNWZiNTFjYTk1NTI1OGVlZWI4OTc5M2FjNDU2YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVz
b3VyY2VDYWNoZVByb3h5LmNwcApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIFJlbW90ZVJlc291cmNl
Q2FjaGVQcm94eTo6Y2FjaGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgaW1hZ2VC
dWZmZQogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
CiB9CiAKLUltYWdlQnVmZmVyKiBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmNhY2hlZEltYWdl
QnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpCitJbWFnZUJ1ZmZlciogUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjYWNoZWRJbWFn
ZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKSBjb25zdAogewogICAgIHJldHVybiBtX2ltYWdlQnVmZmVycy5nZXQocmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKS5pbWFnZUJ1ZmZlci5nZXQoKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291
cmNlQ2FjaGVQcm94eS5oCmluZGV4IGI5ZTc3MmZiY2MyNzhlMzIwNDZjNzJkZWY4ODdhOTM1NWI1
ZGY0OWIuLjMzNzc0Y2MyNGY5ODQ2MjQ1NWUzMTc5Y2I4NDQzODVhY2EzMGE4ZTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VD
YWNoZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuaApAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAg
flJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpOwogCiAgICAgdm9pZCBjYWNoZUltYWdlQnVmZmVy
KFdlYkNvcmU6OkltYWdlQnVmZmVyJik7Ci0gICAgV2ViQ29yZTo6SW1hZ2VCdWZmZXIqIGNhY2hl
ZEltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAg
V2ViQ29yZTo6SW1hZ2VCdWZmZXIqIGNhY2hlZEltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcikgY29uc3Q7CiAgICAgdm9pZCByZWxlYXNlSW1hZ2VCdWZmZXIo
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKIAogICAgIHZvaWQgcmVjb3Jk
TmF0aXZlSW1hZ2VVc2UoV2ViQ29yZTo6TmF0aXZlSW1hZ2UmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKaW5kZXggMGYxMTgzODUx
OGNiOTA4OWVjNWVjY2ZhYWMzMzVlMjAxYTZjMzZmNi4uMDUzYjAwOTIyYjczZjYxYzdlNTBiNjIw
ZjZiN2M3NDcyOTE2ODZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKQEAgLTc3NiwxMCArNzc2LDggQEAgc3RhdGljIGJvb2wg
ZW5jb2RlUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyhJUEM6OkVuY29k
ZXImIGVuY29kZXIKICAgICBpZiAoIXBhZ2VJRCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgYXV0byBzZW1hcGhvcmUgPSBzZW1hcGhvcmVPYmplY3QtPmV4Y2hhbmdlKCk7Ci0gICAgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzIHsgKmlkZW50
aWZpZXIsIFdURk1vdmUoc2VtYXBob3JlKSwgKnBhZ2VQcm94eUlELCAqcGFnZUlEIH07CisgICAg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzIHsgKmlk
ZW50aWZpZXIsICpwYWdlUHJveHlJRCwgKnBhZ2VJRCB9OwogICAgIGVuY29kZXIgPDwgcGFyYW1l
dGVyczsKLSAgICBzZW1hcGhvcmVPYmplY3QtPmV4Y2hhbmdlKFdURk1vdmUocGFyYW1ldGVycy5y
ZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlm
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRGlzcGxheUxp
c3RUZXN0cy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRGlzcGxheUxp
c3RUZXN0cy5jcHAKaW5kZXggNWExNjBhZTZmYmUxMGI2NWM5MmQxYmRhNmFmZDJiYmVkNjk5YmMw
Ni4uMmM3ZjE5YjRjZDMwZmIyNDU4MTcxNjMxMzMwMTFhMTZkMDg5ZTgxZCAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Rpc3BsYXlMaXN0VGVzdHMuY3BwCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9EaXNwbGF5TGlzdFRlc3RzLmNw
cApAQCAtMTIyLDggKzEyMiw2IEBAIFRFU1QoRGlzcGxheUxpc3RUZXN0cywgQXBwZW5kSXRlbXMp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIGNhc2UgSXRl
bVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKLSAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAgICBvYnNlcnZlZFVuZXhwZWN0ZWRJdGVtID0g
dHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440135</attachid>
            <date>2021-10-04 18:10:40 -0700</date>
            <delta_ts>2021-10-11 08:52:24 -0700</delta_ts>
            <desc>WIP - rebase on trunk</desc>
            <filename>bug-230860-20211004181039.patch</filename>
            <type>text/plain</type>
            <size>363263</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWFkMDA1MDA5NTUyNDFmZDg3YmQzOGNk
NjM0MjFlMDI1OGY5NmE5ZS4uZjEzMjJjOTI1YTFjYmM2MGMwY2E5YzIxNTM4ZWM2OTdlNzQ1MDM2
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMjI4Niw3ICsyMjg2LDYgQEAKIAkJNzIxNDQzMzQyMjNFQzkxNjAwRjEyRkY3IC8q
IFNWR1Byb3BlcnR5T3duZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU1RUU1MzYwMjIzQjJBMjEwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eU93bmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxQjQ5
NzQyNTEyQkEzQjAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIxQjQ5NzAyNTEyQUMwNDAwRkU5RDNC
IC8qIEltYWdlQml0bWFwQmFja2luZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTcyMjgzRjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50
aW5nT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzI0MkFDOTcy
NTc1OEZFMTAwNUE5Q0YxIC8qIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjQyQUM5NTI1NzU4RkUwMDA1
QTlDRjEgLyogRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRDMzMjFBM0E4QjIzMDBGNUYxM0Mg
LyogSlNFWFRCbGVuZE1pbk1heC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzI0RUQzMzAxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXgu
aCAqLzsgfTsKIAkJNzI0RUU1NTAxREM4MEQ3RjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURD
N0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFj
dGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3Rh
dGVDaGFuZ2VPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0xMDQ4MCw3ICsxMDQ3OSw2IEBACiAJCTcyMUI0OTZGMjUxMkFDMDQwMEZF
OUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VC
aXRtYXBCYWNraW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxQjQ5NzAy
NTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bWFnZUJpdG1hcEJhY2tpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIyQTgx
NUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBbmltYXRpb25GcmFtZVJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzI0
MkFDOTUyNTc1OEZFMDAwNUE5Q0YxIC8qIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEz
QyAvKiBFWFRCbGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBFWFRCbGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
NEVEMzJBMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MjRFRDMyQjFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MTY1LDcgKzE4MTYzLDYgQEAKIAkJCQkwRkU1RkJDQjFDM0RE
NTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCAqLywKIAkJCQk1NUMwQTI5NTIzRkUyQ0UwMDBG
MkNCOTMgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAgKi8sCiAJCQkJNzJFQTA5Rjky
M0ZDQ0M2QTAwODUwNEE1IC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLywKLQkJCQk3
MjQyQUM5NTI1NzU4RkUwMDA1QTlDRjEgLyogRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIuaCAq
LywKIAkJCQk3MkVBMDlGNzIzRkNDQjNEMDA4NTA0QTUgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZl
ci5oICovLAogCQkJCUY0MjJCOEI2MjUzRjcwNjUwMDRFNzdFOCAvKiBEaXNwbGF5TGlzdEl0ZW1C
dWZmZXIuY3BwICovLAogCQkJCUY0MjJCOEI1MjUzRjcwNjUwMDRFNzdFOCAvKiBEaXNwbGF5TGlz
dEl0ZW1CdWZmZXIuaCAqLywKQEAgLTMyMzAzLDcgKzMyMzAwLDYgQEAKIAkJCQk3RURBQUZDOTE5
QTJDQ0RDMDAzNERGRDEgLyogRGlza0NhY2hlTW9uaXRvckNvY29hLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkU1RkJEMzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTU1QUQwOTQwMjQwODk2NDAwMERFNEQyRiAvKiBEaXNwbGF5TGlzdERyYXdpbmdD
b250ZXh0LmggaW4gSGVhZGVycyAqLywKLQkJCQk3MjQyQUM5NzI1NzU4RkUxMDA1QTlDRjEgLyog
RGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1QUQwOTNF
MjQwODk2MzUwMERFNEQyRiAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGNEQ0MEJDOTI1NTQ2M0JGMDA3MjEzNDkgLyogRGlzcGxheUxpc3RJdGVtQnVmZmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0U4RDEyNzI2MTg1QzBFMDBGQzNBRUYgLyogRGlzcGxh
eUxpc3RJdGVtQnVmZmVySWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IGUwYmVlYzgzMjFlZmFiYjA5NjkxMjdh
ODRkYTlkMjE2NDAyMDc4NWYuLmMyYTA4NmVjNzhiZWQ4NzgwNDNiNmM2NmNlZmY5YjY5MDcxYjg4
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC04NDAs
NDIgKzg0MCw2IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNwbGF5TGlzdERy
YXdpbmcoYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nKQogICAgIG1fdXNlc0Rpc3BsYXlMaXN0
RHJhd2luZyA9IHVzZXNEaXNwbGF5TGlzdERyYXdpbmc7CiB9CiAKLXZvaWQgSFRNTENhbnZhc0Vs
ZW1lbnQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RS
ZXBsYXkpCi17Ci0gICAgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5OwotCi0gICAgaWYgKCFidWZmZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byYgYnVmZmVyID0gKnRoaXMtPmJ1ZmZlcigpOwotICAgIGlmIChidWZmZXIuZHJhd2luZ0Nv
bnRleHQoKSkKLSAgICAgICAgYnVmZmVyLmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOwotfQotCi1TdHJpbmcgSFRN
TENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFn
cyBmbGFncykgY29uc3QKLXsKLSAgICBpZiAoIWJ1ZmZlcigpKQotICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0KLSAgICBhdXRvJiBidWZmZXIgPSAqdGhpcy0+YnVmZmVyKCk7Ci0gICAgaWYgKGJ1
ZmZlci5kcmF3aW5nQ29udGV4dCgpKQotICAgICAgICByZXR1cm4gYnVmZmVyLmRyYXdpbmdDb250
ZXh0KCktPmRpc3BsYXlMaXN0KCkuYXNUZXh0KGZsYWdzKTsKLQotICAgIHJldHVybiBTdHJpbmco
KTsKLX0KLQotU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4
dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0Ci17Ci0gICAgaWYgKCFidWZm
ZXIoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgYXV0byYgYnVmZmVyID0gKnRo
aXMtPmJ1ZmZlcigpOwotICAgIGlmIChidWZmZXIuZHJhd2luZ0NvbnRleHQoKSAmJiBidWZmZXIu
ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5ZWREaXNwbGF5TGlzdCgpKQotICAgICAgICByZXR1cm4g
YnVmZmVyLmRyYXdpbmdDb250ZXh0KCktPnJlcGxheWVkRGlzcGxheUxpc3QoKS0+YXNUZXh0KGZs
YWdzKTsKLQotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQogdm9pZCBIVE1MQ2FudmFzRWxlbWVu
dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogewogICAgIEFTU0VSVCghaGFzQ3JlYXRlZElt
YWdlQnVmZmVyKCkpOwpAQCAtOTE3LDkgKzg4MSw2IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKIAogICAgIHNldEltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJpbmdNb2RlLCB1c2VEaXNwbGF5TGlzdCwgUmVuZGVy
aW5nUHVycG9zZTo6Q2FudmFzLCAxLCBjb2xvclNwYWNlLCBwaXhlbEZvcm1hdCwgaG9zdFdpbmRv
dykpOwogCi0gICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQot
ICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RS
ZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7Ci0KICNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQogICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJk
KCkpIHsKICAgICAgICAgLy8gUmVjYWxjdWxhdGUgY29tcG9zaXRpbmcgcmVxdWlyZW1lbnRzIGlm
IGFjY2VsZXJhdGlvbiBzdGF0ZSBjaGFuZ2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5oCmluZGV4IGZmNTIxOWRkNTU0NmRlZGFkYTE3YTU3NWU4Zjg3ZTM0YWJmNTBiODMu
LjJiMDUwOWRjYjA2NzhjZDcwNTY5OTk5YzhhMWI0OTkzMjA0OGM5YTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKQEAgLTEyMCw5ICsxMjAsNiBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBzaG91bGRBY2NlbGVyYXRlKHVuc2lnbmVkIGFyZWEpIGNvbnN0OwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKGJvb2wpOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIGRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1Rl
eHRGbGFncykgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHJlcGxheURpc3BsYXlM
aXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncykgY29uc3Q7CiAKICAgICAvLyBGSVhN
RTogT25seSBzb21lIGNhbnZhcyByZW5kZXJpbmcgY29udGV4dHMgbmVlZCBhbiBJbWFnZUJ1ZmZl
ci4KICAgICAvLyBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gaGF2ZSB0aGUgY29udGV4dHMgb3duIHRo
ZSBidWZmZXJzLgpAQCAtMTgzLDcgKzE4MCw2IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWZQ
dHI8SW1hZ2U+IG1fY29waWVkSW1hZ2U7IC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSBmb3Ig
cGxhdGZvcm1zIHRoYXQgaGF2ZSB0byBjb3B5IHRoZSBpbWFnZSBidWZmZXIgdG8gcmVuZGVyIChh
bmQgZm9yIENTU0NhbnZhc1ZhbHVlKS4KIAogICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gbV91c2Vz
RGlzcGxheUxpc3REcmF3aW5nOwotICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7
IGZhbHNlIH07CiAKICAgICBib29sIG1faWdub3JlUmVzZXQgeyBmYWxzZSB9OwogICAgIC8vIG1f
aGFzQ3JlYXRlZEltYWdlQnVmZmVyIG1lYW5zIHdlIHRyaWVkIHRvIG1hbGxvYyB0aGUgYnVmZmVy
LiBXZSBkaWRuJ3QgbmVjZXNzYXJpbHkgZ2V0IGl0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaAppbmRleCAxZDBlODc5MGRh
MzVjMDgxYTgwYmVmMWIxZTcxYTNiN2Q5ZjUxMzdjLi4wOWJlNTExMjYwMzg3MThmYjQ3ZmU1Njg0
NzRiYjhiMjI2NGVmZjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaApAQCAtNTUsOSArNTUsOSBAQCBjbGFzcyBEcmF3
R2x5cGhzUmVjb3JkZXIgewogcHVibGljOgogICAgIGVudW0gY2xhc3MgRGVjb25zdHJ1Y3REcmF3
R2x5cGhzIDogYm9vbCB7IE5vLCBZZXMgfTsKICAgICBlbnVtIGNsYXNzIERlcml2ZUZvbnRGcm9t
Q29udGV4dCA6IGJvb2wgeyBObywgWWVzIH07Ci0gICAgZXhwbGljaXQgRHJhd0dseXBoc1JlY29y
ZGVyKEdyYXBoaWNzQ29udGV4dCYsIERlY29uc3RydWN0RHJhd0dseXBocyA9IERlY29uc3RydWN0
RHJhd0dseXBoczo6Tm8sIERlcml2ZUZvbnRGcm9tQ29udGV4dCA9IERlcml2ZUZvbnRGcm9tQ29u
dGV4dDo6Tm8pOworICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IERyYXdHbHlwaHNSZWNvcmRl
cihHcmFwaGljc0NvbnRleHQmLCBEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBEZWNvbnN0cnVjdERy
YXdHbHlwaHM6Ok5vLCBEZXJpdmVGb250RnJvbUNvbnRleHQgPSBEZXJpdmVGb250RnJvbUNvbnRl
eHQ6Ok5vKTsKIAotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhC
dWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBo
cywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CiAK
ICNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0oV0lOKQogICAgIHZvaWQgZHJhd05hdGl2
ZVRleHQoQ1RGb250UmVmLCBDR0Zsb2F0IGZvbnRTaXplLCBDVExpbmVSZWYsIENHUmVjdCBsaW5l
UmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCmluZGV4IGU4Nzk5ZTZiMTEyOWVmMjMzZjM3M2EwZThlYjIxNGQ0MjBlOGUyM2Yu
LjUwZWU2MmI0ZjE5ZjEwODA0MmYwNjBkYzM4ZTExYmZjM2U4YWRjYTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0xNjQs
MTAgKzE2NCwxMCBAQCBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgewogICAgIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkdyYXBo
aWNzQ29udGV4dFN0YXRlKCk7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgR3Jh
cGhpY3NDb250ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7CiAKLSAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBvcGVyYXRvcj0oR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7CiAKICAgICBlbnVtIENo
YW5nZSA6IHVpbnQzMl90IHsKQEAgLTI0Myw5ICsyNDMsOSBAQCBzdHJ1Y3QgR3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2UgewogICAgIHsKICAgICB9CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlc0Zyb21TdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYpIGNvbnN0OwogCi0gICAgdm9pZCBhY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgYWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKICAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIAogICAgIHZvaWQgZHVtcChXVEY6OlRleHRT
dHJlYW0mKSBjb25zdDsKQEAgLTI1NiwxMiArMjU2LDExIEBAIHN0cnVjdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZUNoYW5nZSB7CiAKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwogCi1jbGFzcyBHcmFw
aGljc0NvbnRleHQgeworY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0IHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHQpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzogICAKLQotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4
dCgpID0gZGVmYXVsdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5HcmFwaGljc0NvbnRl
eHQoKTsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHQoKSA9IGRlZmF1bHQ7CisgICAgdmly
dHVhbCB+R3JhcGhpY3NDb250ZXh0KCk7CiAKICNpZiBVU0UoRElSRUNUMkQpCiAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIG1vdmUgdG8gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQKQEAgLTI2OSw3
ICsyNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIENQVU1lbW9yeSwKICAgICAgICAgR1BVTWVtb3J5
CiAgICAgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqLCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSk7CisgICAgR3JhcGhpY3ND
b250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5
cGUpOwogI2VuZGlmCiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI4OSwyNSArMjg4LDI1IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1fc3RhdGUuc3Ryb2tlU3R5
bGUgPSBzdHlsZTsgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVN0eWxlQ2hhbmdlKTsgfQogICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5zdHJva2VTdHlsZTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYpOworICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3Io
Y29uc3QgQ29sb3ImKTsKICAgICBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnN0cm9rZUNvbG9yOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYpOworICAgIHZvaWQgc2V0U3Ryb2tlUGF0dGVy
bihSZWY8UGF0dGVybj4mJik7CiAgICAgUGF0dGVybiogc3Ryb2tlUGF0dGVybigpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKTsgfQogCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgPSB7IH0pOworICAgIHZvaWQgc2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50
PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKICAgICBHcmFkaWVudCogc3Ryb2tl
R3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpOyB9
CiAKICAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxlKSB7IG1fc3RhdGUuZmls
bFJ1bGUgPSBmaWxsUnVsZTsgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkZpbGxSdWxlQ2hhbmdlKTsgfQogICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5maWxsUnVsZTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRG
aWxsQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBDb2xv
ciYpOwogICAgIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LmZpbGxDb2xvcjsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsUGF0dGVybihS
ZWY8UGF0dGVybj4mJik7CisgICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJik7
CiAgICAgUGF0dGVybiogZmlsbFBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxQ
YXR0ZXJuLmdldCgpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxHcmFkaWVu
dChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOworICAgIHZv
aWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIGZpbGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOyB9CiAKICAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsgbV9zdGF0ZS5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyA9IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFu
Z2UpOyB9CkBAIC0zMzAsNyArMzI5LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWxwaGEoZmxv
YXQgYWxwaGEpIHsgbV9zdGF0ZS5hbHBoYSA9IGFscGhhOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpOyB9CiAgICAgZmxvYXQgYWxwaGEoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxl
bmRNb2RlOjpOb3JtYWwpOworICAgIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7CiAgICAgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5jb21w
b3NpdGVPcGVyYXRvcjsgfQogICAgIEJsZW5kTW9kZSBibGVuZE1vZGVPcGVyYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLmJsZW5kTW9kZTsgfQogCkBAIC0zNDAsOSArMzM5LDkgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1v
ZGUpIHsgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOyB1cGRhdGVTdGF0ZShtX3N0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKTsgfQogICAgIFRl
eHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUudGV4dERyYXdpbmdNb2RlOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNoYWRv
dyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYsIFNoYWRvd1JhZGl1
c01vZGUgPSBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgY2xlYXJTaGFkb3coKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGdldFNo
YWRvdyhGbG9hdFNpemUmLCBmbG9hdCYsIENvbG9yJikgY29uc3Q7CisgICAgdm9pZCBzZXRTaGFk
b3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImLCBTaGFkb3dSYWRp
dXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgdmlydHVhbCB2b2lkIGNs
ZWFyU2hhZG93KCk7CisgICAgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xv
ciYpIGNvbnN0OwogCiAgICAgYm9vbCBoYXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5zaGFkb3dDb2xvci5pc1Zpc2libGUoKTsgfQogICAgIGJvb2wgaGFzU2hhZG93KCkg
Y29uc3QgeyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIChtX3N0YXRlLnNoYWRvd0JsdXIg
fHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC5o
ZWlnaHQoKSk7IH0KQEAgLTM1Nyw4ICszNTYsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIHNhdmUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVzdG9y
ZSgpOworICAgIHZpcnR1YWwgdm9pZCBzYXZlKCk7CisgICAgdmlydHVhbCB2b2lkIHJlc3RvcmUo
KTsKICAgICAKICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNr
LnNpemUoKTsgfQogCkBAIC0zODQsNyArMzgzLDcgQEAgcHVibGljOgogICAgICAgICBSb3VuZE9y
aWdpbkFuZERpbWVuc2lvbnMKICAgICB9OwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRl
cykgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVs
Qm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdp
ZHRoLCBTdHJva2VTdHlsZSk7CisgICAgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3Vu
ZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgs
IFN0cm9rZVN0eWxlKTsKIAogICAgIC8vIFNoYXBlcwogCkBAIC0zOTYsMTEgKzM5NSwxMSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50JikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1Jh
aXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwg
Y29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JhaXNlZEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3Qg
Q29sb3ImIHNoYWRvd0NvbG9yKTsKIAogICAgIHZpcnR1YWwgdm9pZCBmaWxsUGF0aChjb25zdCBQ
YXRoJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpOwogCiAgICAgdmlydHVhbCB2
b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgeyBmaWxsRWxsaXBzZUFz
UGF0aChlbGxpcHNlKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgZWxsaXBzZSkgeyBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9CkBAIC00
MDgsMTAgKzQwNywxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwogICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91
bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9y
bWFsKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhv
bGVSZWN0LCBjb25zdCBDb2xvciYpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlID0gQmxlbmRN
b2RlOjpOb3JtYWwpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3Qs
IGNvbnN0IENvbG9yJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpID0gMDsKIApAQCAtNDI2LDY0ICs0MjUsNjQgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2Vs
ZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBG
bG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJ
bWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9u
OjpGcm9tSW1hZ2UgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1
bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VP
cmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRy
YXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAg
ICB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3Jp
ZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3
SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0
aW9uOjpGcm9tSW1hZ2UgfSk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJh
d1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxl
ZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGls
ZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKKyAgICB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29u
c3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJ
bWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKKyAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0
IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pOworICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25z
dW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFBvaW50JiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZm
ZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3Vt
aW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7CisgICAgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIo
UmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1
bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOwogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdl
JiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CiAKICNpZiBFTkFC
TEUoVklERU8pCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHBhaW50RnJhbWVGb3JN
ZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOworICAgIHZp
cnR1YWwgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKTsKICNlbmRpZgogCiAgICAgLy8gQ2xpcHBpbmcKIAogICAgIHZpcnR1
YWwgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYp
OworICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUg
PSBXaW5kUnVsZTo6RXZlbk9kZCkgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAg
IHZpcnR1YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0
UmVjdCYpOwogCiAgICAgZW51bSBjbGFzcyBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgOiBi
b29sIHsgU3VjY2VzcywgRmFpbGVkVG9DcmVhdGVJbWFnZUJ1ZmZlciB9OwotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdD
b21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKTsKKyAgICB2aXJ0
dWFsIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwg
RnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJik7CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVj
dCBjbGlwQm91bmRzKCkgY29uc3Q7CiAKICAgICAvLyBUZXh0CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCos
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZy
b20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3Rv
bUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVh
ZHkpOworICAgIHZpcnR1YWwgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwg
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOworICAgIHZpcnR1YWwgdm9p
ZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RW1waGFzaXNNYXJr
cyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBt
YXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0JpZGlU
ZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRv
Tm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBoc0Fu
ZENhY2hlRm9udChjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlw
aHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBo
cywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhp
bmdNb2RlKQogICAgIHsKICAgICAgICAgZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2Vz
LCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CiAgICAgfQogCi0gICAgV0VC
Q09SRV9FWFBPUlQgRmxvYXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0
IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKKyAgICBG
bG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0Jiwg
Ym9vbCBwcmludGluZyk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBG
bG9hdFJlY3QmLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2UsIFN0cm9r
ZVN0eWxlID0gU29saWRTdHJva2UpOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lk
dGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2UsIFN0cm9rZVN0eWxl
ID0gU29saWRTdHJva2UpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgPSAwOwog
CiAgICAgLy8gVHJhbnNwYXJlbmN5IExheWVycwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgdmlydHVh
bCB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7CisgICAgdmlydHVh
bCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgYm9vbCBpc0luVHJhbnNwYXJlbmN5
TGF5ZXIoKSBjb25zdCB7IHJldHVybiAobV90cmFuc3BhcmVuY3lMYXllckNvdW50ID4gMCkgJiYg
c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKTsgfQogCiAgICAgLy8gRm9jdXMgUmluZ3MKQEAg
LTUxNCw4ICs1MTMsOCBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRo
ZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIHRvIHRoZSBjb250ZXh0LCBtYWtpbmcgdGhlIGNvbnRleHQg
Y2FwYWJsZSBvZgogICAgIC8vIGFjdGluZyBhcyBhIGJhc2UtbGV2ZWwgY29udGV4dCBmb3IgYSBI
aURQSSBlbnZpcm9ubWVudC4KICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihmbG9hdCBmYWN0b3IpIHsgc2NhbGUoZmFjdG9yKTsgfQotICAgIFdFQkNPUkVfRVhQT1JUIEZs
b2F0U2l6ZSBzY2FsZUZhY3RvcigpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6
ZSBzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKKyAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3IoKSBj
b25zdDsKKyAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7CiAKICAgICAvLyBM
aW5rcwogCkBAIC01NDYsMTIgKzU0NSwxMiBAQCBwdWJsaWM6CiAjaWYgVVNFKERJUkVDVDJEKQog
ICAgIEdyYXBoaWNzQ29udGV4dChIREMsIElEMkQxRENSZW5kZXJUYXJnZXQqKiwgUkVDVCwgYm9v
bCBoYXNBbHBoYSA9IGZhbHNlKTsgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQuCiAKLSAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgSUQyRDFGYWN0b3J5KiBzeXN0ZW1GYWN0b3J5KCk7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIElEMkQxUmVuZGVyVGFyZ2V0KiBkZWZhdWx0UmVuZGVyVGFyZ2V0
KCk7CisgICAgc3RhdGljIElEMkQxRmFjdG9yeSogc3lzdGVtRmFjdG9yeSgpOworICAgIHN0YXRp
YyBJRDJEMVJlbmRlclRhcmdldCogZGVmYXVsdFJlbmRlclRhcmdldCgpOwogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBiZWdpbkRyYXcoKTsKKyAgICB2b2lkIGJlZ2luRHJhdygpOwogICAgIEQy
RDFfQ09MT1JfRiBjb2xvcldpdGhHbG9iYWxBbHBoYShjb25zdCBDb2xvciYpIGNvbnN0OwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kRHJhdygpOworICAgIHZvaWQgZW5kRHJhdygpOwogICAg
IHZvaWQgZmx1c2goKTsKIAogICAgIElEMkQxQnJ1c2gqIHNvbGlkU3Ryb2tlQnJ1c2goKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
VHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMu
aAppbmRleCA0ZDIwNGU5N2U1YzU0NGQ3NzZiZmE3ZjMwYWFjYzFiN2M0NjNlMGUwLi4yNDBkNGZj
NTYxNzliYzg0ODk1NGIzNTE0MGE3OTdiYjk1YTg1NTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCkBAIC0yOCw2ICsyOCw3IEBACiAj
aW5jbHVkZSAiV2luZFJ1bGUuaCIKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KIAog
bmFtZXNwYWNlIFdURiB7CiBjbGFzcyBUZXh0U3RyZWFtOwpAQCAtMTI3LDYgKzEyOCw5IEBAIFN0
cmluZyBibGVuZE1vZGVOYW1lKFdlYkNvcmU6OkJsZW5kTW9kZSk7CiBib29sIHBhcnNlQmxlbmRN
b2RlKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkJsZW5kTW9kZSYpOwogYm9vbCBwYXJzZUNvbXBv
c2l0ZUFuZEJsZW5kT3BlcmF0b3IoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3Bl
cmF0b3ImLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKIAorZW51bSBGbHVzaElkZW50aWZpZXJUeXBl
IHsgfTsKK3VzaW5nIEZsdXNoSWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8Rmx1c2hJZGVu
dGlmaWVyVHlwZT47CisKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChXVEY6OlRleHRTdHJlYW0mLCBXZWJDb3JlOjpCbGVuZE1vZGUpOwogV0VCQ09SRV9FWFBPUlQg
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdlYkNvcmU6OkNv
bXBvc2l0ZU9wZXJhdG9yKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mLCBXaW5kUnVsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCBiMWU4ZDNiMDRhYjI2MDUxMzI4ODZh
MGE4MDMwNTA4YTEzMTYxMjgwLi41NTc0NGUyNzI4NGRhNGY2NWM2ZmI0MDVjNWE1YzhkZTQzYTI4
ZWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJEaXNwbGF5
TGlzdEZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmgiCkBAIC01MCw3ICs1MCw3IEBA
IHB1YmxpYzoKIAogICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRo
IHRoZSBjb250ZXh0LCB3aXRoIHN1aXRhYmxlIHJlc29sdXRpb24gZm9yIGRyYXdpbmcgaW50byB0
aGUgYnVmZmVyIGFuZCB0aGVuIGludG8gdGhpcyBjb250ZXh0LgogICAgIHN0YXRpYyBSZWZQdHI8
SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29u
c3QgR3JhcGhpY3NDb250ZXh0Jik7Ci0gICAgc3RhdGljIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpOwogICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVC
dWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAogICAgIC8vIFRo
ZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3aGlj
aCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1hc2tlciBvciBjbGlwcGVyLgpAQCAtNzYsMTQgKzc2
LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0KCkgPSAwOwogCi0gICAgdmly
dHVhbCBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgeyByZXR1
cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBkcmF3aW5nQ29udGV4
dCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2aXJ0dWFsIGJvb2wgcHJlZmVyc1ByZXBhcmF0
aW9uRm9yRGlzcGxheSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGZsdXNo
RHJhd2luZ0NvbnRleHQoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4
dEFzeW5jKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZsdXNoKERpc3BsYXlMaXN0OjpGbHVz
aElkZW50aWZpZXIpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGNoYW5nZURlc3RpbmF0aW9uSW1h
Z2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgcHJlcGFyZVRvQXBwZW5kRGlzcGxheUxpc3RJdGVtcyhEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
ckhhbmRsZSYmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmx1c2goRmx1c2hJZGVudGlmaWVy
KSB7IH0KIAogICAgIHZpcnR1YWwgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3QuY3BwCmluZGV4IGZhZDZhNjk1MDA3YTk2NjQ1YzI3MTFkOGYwOTEwZWE4NTY0M2Y1
MjguLjc4MGMyYjJmMzFmNGNhMGMyNjUzMDY0NzM5YWRhNjM1ZTQxMTQ0ODUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0LmNwcApAQCAtMTgwLDExICsxODAsNiBAQCB2b2lkIERpc3BsYXlMaXN0Ojpz
ZXRJdGVtQnVmZmVyV3JpdGluZ0NsaWVudChJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCogY2xpZW50
KQogICAgIGl0ZW1CdWZmZXIoKS5zZXRDbGllbnQoY2xpZW50KTsKIH0KIAotdm9pZCBEaXNwbGF5
TGlzdDo6cHJlcGFyZVRvQXBwZW5kKEl0ZW1CdWZmZXJIYW5kbGUmJiBoYW5kbGUpCi17Ci0gICAg
aXRlbUJ1ZmZlcigpLnByZXBhcmVUb0FwcGVuZChXVEZNb3ZlKGhhbmRsZSkpOwotfQotCiB2b2lk
IERpc3BsYXlMaXN0Ojpmb3JFYWNoSXRlbUJ1ZmZlcihGdW5jdGlvbjx2b2lkKGNvbnN0IEl0ZW1C
dWZmZXJIYW5kbGUmKT4mJiBtYXBGdW5jdGlvbikgY29uc3QKIHsKICAgICBpZiAobV9pdGVtcykK
QEAgLTIxNCw4ICsyMDksNiBAQCB2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRlbUhhbmRsZSBp
dGVtKQogICAgICAgICByZXR1cm4gYXBwZW5kPENvbmNhdGVuYXRlQ1RNPihpdGVtLmdldDxDb25j
YXRlbmF0ZUNUTT4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgogICAgICAgICByZXR1
cm4gYXBwZW5kPFNldENUTT4oaXRlbS5nZXQ8U2V0Q1RNPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0SW5saW5l
RmlsbEdyYWRpZW50PihpdGVtLmdldDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCkpOwogICAgIGNh
c2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxT
ZXRJbmxpbmVGaWxsQ29sb3I+KGl0ZW0uZ2V0PFNldElubGluZUZpbGxDb2xvcj4oKSk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CkBAIC0zMDAsMTAgKzI5Myw2IEBA
IHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIHJldHVy
biBhcHBlbmQ8RmlsbEVsbGlwc2U+KGl0ZW0uZ2V0PEZpbGxFbGxpcHNlPigpKTsKICAgICBjYXNl
IEl0ZW1UeXBlOjpGbHVzaENvbnRleHQ6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8Rmx1c2hDb250
ZXh0PihpdGVtLmdldDxGbHVzaENvbnRleHQ+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFD
b21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuIGFwcGVu
ZDxNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI+KGl0ZW0uZ2V0PE1ldGFD
b21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcj4oKSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyOgotICAgICAgICByZXR1cm4gYXBwZW5kPE1l
dGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcj4oaXRlbS5nZXQ8TWV0YUNvbW1hbmRDaGFuZ2VJdGVt
QnVmZmVyPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjoKICAgICAgICAg
cmV0dXJuIGFwcGVuZDxHZXRQaXhlbEJ1ZmZlcj4oaXRlbS5nZXQ8R2V0UGl4ZWxCdWZmZXI+KCkp
OwogICAgIGNhc2UgSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3Qu
aAppbmRleCAyMjY4NGRjMzk4ZTFlZjUyYzFiZDk2NmZmNDUwMzcyMzdkY2YyYWVmLi40NmM2ODdm
OTA0NzE2MGM0Njg1OTM2YWRkNWRmZTc3NTk1YjNhYTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3Qu
aApAQCAtNzksNyArNzksNiBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50KEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50Kik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJdGVtQnVmZmVyV3JpdGluZ0NsaWVudChJdGVtQnVmZmVy
V3JpdGluZ0NsaWVudCopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJlcGFyZVRvQXBwZW5k
KEl0ZW1CdWZmZXJIYW5kbGUmJik7CiAKICAgICB2b2lkIHNocmlua1RvRml0KCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEZsdXNoSWRlbnRpZmllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDljZjc4MTY4ZWJiN2ZjNzM3YjliNGE2Y2Y4ZDUzNzI5ZjVhMDYw
ZWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Rmx1c2hJ
ZGVudGlmaWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7Ci0KLWVudW0gRmx1c2hJ
ZGVudGlmaWVyVHlwZSB7IH07Ci11c2luZyBGbHVzaElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlm
aWVyPEZsdXNoSWRlbnRpZmllclR5cGU+OwotCi19IC8vIERpc3BsYXlMaXN0Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5o
CmluZGV4IDgxYjkyNDc0ZTI0ZWNkMjM2ZjIyMDc3NGVkMWNiY2Y4NDY5ZjMyNzguLjBiMzVhZjU0
MGMxNGRjYmRiZjdiZWM2OWNhZmQ2MDZiMzJlNTVmMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX2RyYXdpbmdDb250ZXh0LmNvbnRleHQoKTsKICAgICB9CiAKLSAgICBEcmF3aW5n
Q29udGV4dCogZHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZSB7IHJldHVybiAmbV9kcmF3aW5nQ29u
dGV4dDsgfQorICAgIEdyYXBoaWNzQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZSB7
IHJldHVybiAmbV9kcmF3aW5nQ29udGV4dC5jb250ZXh0KCk7IH0KIAogICAgIHZvaWQgZmx1c2hE
cmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtQnVmZmVyLmNwcAppbmRleCAxMzU0YmRiZWRkNjExNmMyMDlmYjU0YTYzZTE5NDIy
NTNjYjNhNThhLi40NWZkZDMzYjEzY2QyOTFkZGJiZGQzYWYxN2FlZThkMjA4NDZiODUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcApAQCAtNjYsOSArNjYs
NiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06CiAgICAgICAgIGdldDxTZXRDVE0+KCkuYXBwbHkoY29u
dGV4dCk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxs
R3JhZGllbnQ6Ci0gICAgICAgIGdldDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCkuYXBwbHkoY29u
dGV4dCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxs
Q29sb3I6CiAgICAgICAgIGdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCkuYXBwbHkoY29udGV4dCk7
CiAgICAgICAgIHJldHVybjsKQEAgLTE5NCw5ICsxOTEsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBjYXNlIEl0ZW1UeXBlOjpGbHVzaENv
bnRleHQ6CiAgICAgICAgIGdldDxGbHVzaENvbnRleHQ+KCkuYXBwbHkoY29udGV4dCk7CiAgICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0
aW9uSW1hZ2VCdWZmZXI6Ci0gICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVt
QnVmZmVyOgotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZm
ZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXI6CiAgICAgICAgIC8vIFNob3Vs
ZCBhbHJlYWR5IGJlIGhhbmRsZWQgYnkgdGhlIGRlbGVnYXRlLgpAQCAtMzk1LDEyICszODksNiBA
QCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkZsdXNoQ29u
dGV4dDoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGli
bGU8Rmx1c2hDb250ZXh0Pjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVt
VHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyOgotICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxNZXRhQ29tbWFuZENo
YW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6Ci0gICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPE1ldGFDb21tYW5kQ2hh
bmdlSXRlbUJ1ZmZlcj46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwogI2lmIEVOQUJMRShWSURF
TykKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFBhaW50RnJhbWVGb3JNZWRp
YT46OnZhbHVlKTsKQEAgLTQyNCw5ICs0MTIsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3ko
KQogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0SW5saW5lRmlsbENvbG9y
Pjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
RmlsbEdyYWRpZW50OgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKICAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0SW5saW5lU3Ryb2tl
Q29sb3I+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTU5NiwxMCArNTgxLDYgQEAgYm9v
bCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0
aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxSZWN0PihpdGVtT2Zm
c2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Rmx1c2hDb250ZXh0OgogICAgICAgICBy
ZXR1cm4gY29weUludG88Rmx1c2hDb250ZXh0PihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyOgotICAg
ICAgICByZXR1cm4gY29weUludG88TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVm
ZmVyPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRD
aGFuZ2VJdGVtQnVmZmVyOgotICAgICAgICByZXR1cm4gY29weUludG88TWV0YUNvbW1hbmRDaGFu
Z2VJdGVtQnVmZmVyPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAjaWYgRU5BQkxFKFZJREVPKQogICAg
IGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKICAgICAgICAgcmV0dXJuIGNvcHlJ
bnRvPFBhaW50RnJhbWVGb3JNZWRpYT4oaXRlbU9mZnNldCwgKnRoaXMpOwpAQCAtNjE2LDggKzU5
Nyw2IEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1I
YW5kbGUgZGVzdGluYXRpb24pIGNvbnN0CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRDVE0+
KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29s
b3I6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRJbmxpbmVGaWxsQ29sb3I+KGl0ZW1PZmZz
ZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Ci0g
ICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KGl0ZW1PZmZzZXQs
ICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKICAgICAg
ICAgcmV0dXJuIGNvcHlJbnRvPFNldElubGluZVN0cm9rZUNvbG9yPihpdGVtT2Zmc2V0LCAqdGhp
cyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKQEAgLTczMSwyMiArNzEwLDE4IEBA
IHZvaWQgSXRlbUJ1ZmZlcjo6c2hyaW5rVG9GaXQoKQogICAgIG1fYWxsb2NhdGVkQnVmZmVycy5z
aHJpbmtUb0ZpdCgpOwogfQogCi1EaWRDaGFuZ2VJdGVtQnVmZmVyIEl0ZW1CdWZmZXI6OnN3YXBX
cml0YWJsZUJ1ZmZlcklmTmVlZGVkKHNpemVfdCBudW1iZXJPZkJ5dGVzKQordm9pZCBJdGVtQnVm
ZmVyOjpzd2FwV3JpdGFibGVCdWZmZXJJZk5lZWRlZChzaXplX3QgbnVtYmVyT2ZCeXRlcykKIHsK
LSAgICBhdXRvIHNpemVGb3JCdWZmZXJTd2l0Y2hJdGVtID0gcGFkZGVkU2l6ZU9mVHlwZUFuZEl0
ZW1JbkJ5dGVzKEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXIpOwotICAgIGlm
IChtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzICsgbnVtYmVyT2ZCeXRlcyArIHNpemVGb3JCdWZmZXJT
d2l0Y2hJdGVtIDw9IG1fd3JpdGFibGVCdWZmZXIuY2FwYWNpdHkpCi0gICAgICAgIHJldHVybiBE
aWRDaGFuZ2VJdGVtQnVmZmVyOjpObzsKLQotICAgIGF1dG8gbmV4dEJ1ZmZlciA9IGNyZWF0ZUl0
ZW1CdWZmZXIobnVtYmVyT2ZCeXRlcyArIHNpemVGb3JCdWZmZXJTd2l0Y2hJdGVtKTsKLSAgICBi
b29sIGhhZFByZXZpb3VzQnVmZmVyID0gbV93cml0YWJsZUJ1ZmZlciAmJiBtX3dyaXRhYmxlQnVm
ZmVyLmlkZW50aWZpZXIgIT0gbmV4dEJ1ZmZlci5pZGVudGlmaWVyOwotICAgIGlmIChoYWRQcmV2
aW91c0J1ZmZlcikgewotICAgICAgICB1bmNoZWNrZWRBcHBlbmQ8TWV0YUNvbW1hbmRDaGFuZ2VJ
dGVtQnVmZmVyPihEaWRDaGFuZ2VJdGVtQnVmZmVyOjpObywgbmV4dEJ1ZmZlci5pZGVudGlmaWVy
KTsKKyAgICBpZiAobV93cml0dGVuTnVtYmVyT2ZCeXRlcyArIG51bWJlck9mQnl0ZXMgPD0gbV93
cml0YWJsZUJ1ZmZlci5jYXBhY2l0eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBuZXh0
QnVmZmVyID0gY3JlYXRlSXRlbUJ1ZmZlcihudW1iZXJPZkJ5dGVzKTsKKyAgICBpZiAobV93cml0
YWJsZUJ1ZmZlciAmJiBtX3dyaXRhYmxlQnVmZmVyLmlkZW50aWZpZXIgIT0gbmV4dEJ1ZmZlci5p
ZGVudGlmaWVyKSB7CiAgICAgICAgIG1fd3JpdGFibGVCdWZmZXIuY2FwYWNpdHkgPSBtX3dyaXR0
ZW5OdW1iZXJPZkJ5dGVzOwogICAgICAgICBtX3JlYWRPbmx5QnVmZmVycy5hcHBlbmQobV93cml0
YWJsZUJ1ZmZlcik7CiAgICAgfQogICAgIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgPSAwOwogICAg
IG1fd3JpdGFibGVCdWZmZXIgPSBXVEZNb3ZlKG5leHRCdWZmZXIpOwotICAgIHJldHVybiBoYWRQ
cmV2aW91c0J1ZmZlciA/IERpZENoYW5nZUl0ZW1CdWZmZXI6OlllcyA6IERpZENoYW5nZUl0ZW1C
dWZmZXI6Ok5vOwogfQogCiB2b2lkIEl0ZW1CdWZmZXI6OmFwcGVuZChjb25zdCBEaXNwbGF5TGlz
dEl0ZW0mIHRlbXBvcmFyeUl0ZW0pCkBAIC03NjUsNyArNzQwLDcgQEAgdm9pZCBJdGVtQnVmZmVy
OjphcHBlbmQoY29uc3QgRGlzcGxheUxpc3RJdGVtJiB0ZW1wb3JhcnlJdGVtKQogICAgIH0pOwog
ICAgIGF1dG8gYWRkaXRpb25hbENhcGFjaXR5Rm9yRW5jb2RlZEl0ZW0gPSAyICogc2l6ZW9mKHVp
bnQ2NF90KSArIHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25vZih1aW50NjRfdCksIGRhdGFMZW5n
dGgpOwogCi0gICAgYXV0byBidWZmZXJDaGFuZ2VkID0gc3dhcFdyaXRhYmxlQnVmZmVySWZOZWVk
ZWQoYWRkaXRpb25hbENhcGFjaXR5Rm9yRW5jb2RlZEl0ZW0pOworICAgIHN3YXBXcml0YWJsZUJ1
ZmZlcklmTmVlZGVkKGFkZGl0aW9uYWxDYXBhY2l0eUZvckVuY29kZWRJdGVtKTsKIAogICAgIG1f
d3JpdGFibGVCdWZmZXIuZGF0YVttX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KGRpc3BsYXlMaXN0SXRlbVR5cGUodGVtcG9yYXJ5SXRlbSkpOwogICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDY0X3QqPihtX3dyaXRhYmxlQnVmZmVyLmRhdGEgKyBtX3dyaXR0ZW5O
dW1iZXJPZkJ5dGVzKVsxXSA9IGRhdGFMZW5ndGg7CkBAIC03NzYsMjAgKzc1MSwxMiBAQCB2b2lk
IEl0ZW1CdWZmZXI6OmFwcGVuZChjb25zdCBEaXNwbGF5TGlzdEl0ZW0mIHRlbXBvcmFyeUl0ZW0p
CiAgICAgZWxzZQogICAgICAgICBvdXRPZkxpbmVJdGVtLT5jb3B5VG8obG9jYXRpb24sIGRhdGFM
ZW5ndGgpOwogCi0gICAgZGlkQXBwZW5kRGF0YShhZGRpdGlvbmFsQ2FwYWNpdHlGb3JFbmNvZGVk
SXRlbSwgYnVmZmVyQ2hhbmdlZCk7CisgICAgZGlkQXBwZW5kRGF0YShhZGRpdGlvbmFsQ2FwYWNp
dHlGb3JFbmNvZGVkSXRlbSk7CiB9CiAKLXZvaWQgSXRlbUJ1ZmZlcjo6ZGlkQXBwZW5kRGF0YShz
aXplX3QgbnVtYmVyT2ZCeXRlcywgRGlkQ2hhbmdlSXRlbUJ1ZmZlciBkaWRDaGFuZ2VJdGVtQnVm
ZmVyKQordm9pZCBJdGVtQnVmZmVyOjpkaWRBcHBlbmREYXRhKHNpemVfdCBudW1iZXJPZkJ5dGVz
KQogewogICAgIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgKz0gbnVtYmVyT2ZCeXRlczsKLSAgICBp
ZiAobV93cml0aW5nQ2xpZW50KQotICAgICAgICBtX3dyaXRpbmdDbGllbnQtPmRpZEFwcGVuZERh
dGEobV93cml0YWJsZUJ1ZmZlciwgbnVtYmVyT2ZCeXRlcywgZGlkQ2hhbmdlSXRlbUJ1ZmZlcik7
Ci19Ci0KLXZvaWQgSXRlbUJ1ZmZlcjo6cHJlcGFyZVRvQXBwZW5kKEl0ZW1CdWZmZXJIYW5kbGUm
JiBoYW5kbGUpCi17Ci0gICAgbV93cml0dGVuTnVtYmVyT2ZCeXRlcyA9IDA7Ci0gICAgbV9yZWFk
T25seUJ1ZmZlcnMuYXBwZW5kKHN0ZDo6ZXhjaGFuZ2UobV93cml0YWJsZUJ1ZmZlciwgV1RGTW92
ZShoYW5kbGUpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgKaW5kZXggYzg3MzE5ODJlZjgzOTMxYmJhZTMx
Yjc4NjUwYWMwZGEyMGEwNWZjNS4uNDUyYzhjOWQ5NzcwZmFlMGFiOWQ2MGM0NGJmOGExMGU1OWY3
NGI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaApAQCAtODQs
OCArODQsNiBAQCBzdHJ1Y3QgSXRlbUhhbmRsZSB7CiAKIGJvb2wgc2FmZUNvcHkoSXRlbUhhbmRs
ZSBkZXN0aW5hdGlvbiwgY29uc3QgRGlzcGxheUxpc3RJdGVtJiBzb3VyY2UpOwogCi1lbnVtIGNs
YXNzIERpZENoYW5nZUl0ZW1CdWZmZXIgOiBib29sIHsgTm8sIFllcyB9OwotCiBjbGFzcyBJdGVt
QnVmZmVyV3JpdGluZ0NsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SXRlbUJ1ZmZlcldy
aXRpbmdDbGllbnQoKQpAQCAtMTEwLDExICsxMDgsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGVuY29kZUl0ZW1JbmxpbmUoY29uc3QgRGlzcGxheUxpc3RJdGVtJiwgdWludDhfdCopIGNv
bnN0CiAgICAgewogICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBkaWRBcHBlbmREYXRhKGNvbnN0
IEl0ZW1CdWZmZXJIYW5kbGUmLCBzaXplX3QgbnVtYmVyT2ZCeXRlcywgRGlkQ2hhbmdlSXRlbUJ1
ZmZlcikKLSAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShudW1iZXJPZkJ5dGVzKTsKLSAgICB9
CiB9OwogCiBjbGFzcyBJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCB7CkBAIC0xODMsMjggKzE3Niwy
NiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBh
dXRvIGJ1ZmZlckNoYW5nZWQgPSBzd2FwV3JpdGFibGVCdWZmZXJJZk5lZWRlZChwYWRkZWRTaXpl
T2ZUeXBlQW5kSXRlbUluQnl0ZXMoVDo6aXRlbVR5cGUpKTsKLQotICAgICAgICB1bmNoZWNrZWRB
cHBlbmQ8VD4oYnVmZmVyQ2hhbmdlZCwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAg
ICAgICAgc3dhcFdyaXRhYmxlQnVmZmVySWZOZWVkZWQocGFkZGVkU2l6ZU9mVHlwZUFuZEl0ZW1J
bkJ5dGVzKFQ6Oml0ZW1UeXBlKSk7CisgICAgICAgIHVuY2hlY2tlZEFwcGVuZDxUPihzdGQ6OmZv
cndhcmQ8QXJncz4oYXJncykuLi4pOwogICAgIH0KIAogICAgIHZvaWQgc2V0Q2xpZW50KEl0ZW1C
dWZmZXJXcml0aW5nQ2xpZW50KiBjbGllbnQpIHsgbV93cml0aW5nQ2xpZW50ID0gY2xpZW50OyB9
CiAgICAgdm9pZCBzZXRDbGllbnQoSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQqIGNsaWVudCkgeyBt
X3JlYWRpbmdDbGllbnQgPSBjbGllbnQ7IH0KLSAgICB2b2lkIHByZXBhcmVUb0FwcGVuZChJdGVt
QnVmZmVySGFuZGxlJiYpOwogCiBwcml2YXRlOgogICAgIGNvbnN0IEl0ZW1CdWZmZXJIYW5kbGVz
JiByZWFkT25seUJ1ZmZlcnMoKSBjb25zdCB7IHJldHVybiBtX3JlYWRPbmx5QnVmZmVyczsgfQog
ICAgIHZvaWQgZm9yRWFjaEl0ZW1CdWZmZXIoRnVuY3Rpb248dm9pZChjb25zdCBJdGVtQnVmZmVy
SGFuZGxlJik+JiYpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlkQXBwZW5kRGF0
YShzaXplX3QgbnVtYmVyT2ZCeXRlcywgRGlkQ2hhbmdlSXRlbUJ1ZmZlcik7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkaWRBcHBlbmREYXRhKHNpemVfdCBudW1iZXJPZkJ5dGVzKTsKIAotICAg
IFdFQkNPUkVfRVhQT1JUIERpZENoYW5nZUl0ZW1CdWZmZXIgc3dhcFdyaXRhYmxlQnVmZmVySWZO
ZWVkZWQoc2l6ZV90IG51bWJlck9mQnl0ZXMpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3dh
cFdyaXRhYmxlQnVmZmVySWZOZWVkZWQoc2l6ZV90IG51bWJlck9mQnl0ZXMpOwogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYXBwZW5kKGNvbnN0IERpc3BsYXlMaXN0SXRlbSYpOwotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIGNsYXNzLi4uIEFyZ3M+IHZvaWQgdW5jaGVja2VkQXBwZW5kKERpZENo
YW5nZUl0ZW1CdWZmZXIgZGlkQ2hhbmdlSXRlbUJ1ZmZlciwgQXJncyYmLi4uIGFyZ3MpCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgY2xhc3MuLi4gQXJncz4gdm9pZCB1bmNoZWNrZWRBcHBlbmQo
QXJncyYmLi4uIGFyZ3MpCiAgICAgewogICAgICAgICBhdXRvKiBzdGFydE9mSXRlbSA9ICZtX3dy
aXRhYmxlQnVmZmVyLmRhdGFbbV93cml0dGVuTnVtYmVyT2ZCeXRlc107CiAgICAgICAgIHN0YXJ0
T2ZJdGVtWzBdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oVDo6aXRlbVR5cGUpOwogICAgICAgICBu
ZXcgKHN0YXJ0T2ZJdGVtICsgc2l6ZW9mKHVpbnQ2NF90KSkgVChzdGQ6OmZvcndhcmQ8QXJncz4o
YXJncykuLi4pOwotICAgICAgICBkaWRBcHBlbmREYXRhKHBhZGRlZFNpemVPZlR5cGVBbmRJdGVt
SW5CeXRlcyhUOjppdGVtVHlwZSksIGRpZENoYW5nZUl0ZW1CdWZmZXIpOworICAgICAgICBkaWRB
cHBlbmREYXRhKHBhZGRlZFNpemVPZlR5cGVBbmRJdGVtSW5CeXRlcyhUOjppdGVtVHlwZSkpOwog
ICAgIH0KIAogICAgIEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50KiBtX3JlYWRpbmdDbGllbnQgeyBu
dWxscHRyIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKaW5kZXgg
OThhMTZkMjVmYTFiNWE0YzUyYjBmNzNhNGY5ZjUzMmFlYmZhYjcwYy4uNTZhZWU2MjczMjQ3MGNj
MDk5ZGRhODkzZGYxYjY2N2E5NGFhN2M5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1UeXBlLmNwcApAQCAtNDgsOCArNDgsNiBAQCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0ZW1J
bkJ5dGVzKEl0ZW1UeXBlIHR5cGUpCiAgICAgICAgIHJldHVybiBzaXplb2YoQ29uY2F0ZW5hdGVD
VE0pOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKICAgICAgICAgcmV0dXJuIHNpemVvZihT
ZXRDVE0pOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihTZXRJbmxpbmVGaWxsR3JhZGllbnQpOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgcmV0dXJuIHNpemVvZihTZXRJbmxpbmVG
aWxsQ29sb3IpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgpAQCAt
MTM0LDEwICsxMzIsNiBAQCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0ZW1JbkJ5dGVzKEl0ZW1UeXBl
IHR5cGUpCiAgICAgICAgIHJldHVybiBzaXplb2YoRmlsbEVsbGlwc2UpOwogICAgIGNhc2UgSXRl
bVR5cGU6OkZsdXNoQ29udGV4dDoKICAgICAgICAgcmV0dXJuIHNpemVvZihGbHVzaENvbnRleHQp
OwotICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1
ZmZlcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9u
SW1hZ2VCdWZmZXIpOwotICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1
ZmZlcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXIp
OwogICAgIGNhc2UgSXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyOgogICAgICAgICByZXR1cm4gc2l6
ZW9mKEdldFBpeGVsQnVmZmVyKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlcjoK
QEAgLTIwMiwxNSArMTk2LDEyIEBAIGJvb2wgaXNEcmF3aW5nSXRlbShJdGVtVHlwZSB0eXBlKQog
ICAgIGNhc2UgSXRlbVR5cGU6OkVuZENsaXBUb0RyYXdpbmdDb21tYW5kczoKICAgICBjYXNlIEl0
ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKICAgICBjYXNlIEl0ZW1UeXBlOjpGbHVzaENvbnRleHQ6
Ci0gICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVm
ZmVyOgotICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKICAg
ICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgogICAgIGNh
c2UgSXRlbVR5cGU6OlNldENUTToKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29s
b3I6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgogICAgIGNhc2Ug
SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldExp
bmVDYXA6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6CkBAIC0zNDYsOCArMzM3LDYg
QEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKICNlbmRpZgogICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxSZWN0OgogICAgIGNhc2UgSXRlbVR5cGU6OkZsdXNoQ29udGV4dDoKLSAgICBj
YXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI6Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyOgogI2lmIEVOQUJM
RShWSURFTykKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CiAjZW5kaWYK
QEAgLTM1Nyw3ICszNDYsNiBAQCBib29sIGlzSW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQogICAg
IGNhc2UgSXRlbVR5cGU6OlNjYWxlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKICAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbEdyYWRpZW50OgogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNv
bG9yOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6CiAgICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZUpvaW46CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAppbmRleCA2
YjkxYTI3Yjc1NjU3YmFjNTZjMjM1NzcwMmM2ZWM0MzBhYzE5NmYyLi44MDg0NGU4YjlkZjA1NWU1
YTE2YzM2N2NlMmJmMjkwYTkzY2U2MzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1UeXBlLmgKQEAgLTM2LDcgKzM2LDYgQEAgZW51bSBjbGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3Qg
ewogICAgIFNjYWxlLAogICAgIENvbmNhdGVuYXRlQ1RNLAogICAgIFNldENUTSwKLSAgICBTZXRJ
bmxpbmVGaWxsR3JhZGllbnQsCiAgICAgU2V0SW5saW5lRmlsbENvbG9yLAogICAgIFNldElubGlu
ZVN0cm9rZUNvbG9yLAogICAgIFNldFN0cm9rZVRoaWNrbmVzcywKQEAgLTgwLDggKzc5LDYgQEAg
ZW51bSBjbGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3QgewogICAgIEZpbGxQYXRoLAogICAgIEZpbGxF
bGxpcHNlLAogICAgIEZsdXNoQ29udGV4dCwKLSAgICBNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0
aW9uSW1hZ2VCdWZmZXIsCi0gICAgTWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyLAogICAgIEdl
dFBpeGVsQnVmZmVyLAogICAgIFB1dFBpeGVsQnVmZmVyLAogI2lmIEVOQUJMRShWSURFTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCA3OWM5NmFlY2QyZTFkNzRkMTc2
NmYyZDdhZDhmNmZkNGUzNDFiODcxLi43MmZjNmQxYTczNDQ2MTQyNWYwY2U1NjdmNmI4MGMwNDcy
MmMwYWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC0xMTQsODMg
KzExNCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBDb25jYXRlbmF0ZUNUTSYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNldElubGlu
ZUZpbGxHcmFkaWVudDo6U2V0SW5saW5lRmlsbEdyYWRpZW50KGNvbnN0IEdyYWRpZW50JiBncmFk
aWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtKQotICAg
IDogbV9kYXRhKGdyYWRpZW50LmRhdGEoKSkKLSAgICAsIG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9y
bShncmFkaWVudFNwYWNlVHJhbnNmb3JtKQotICAgICwgbV9zcHJlYWRNZXRob2QoZ3JhZGllbnQu
c3ByZWFkTWV0aG9kKCkpCi0gICAgLCBtX2NvbG9yU3RvcENvdW50KHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KGdyYWRpZW50LnN0b3BzKCkuc2l6ZSgpKSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2Nv
bG9yU3RvcENvdW50IDw9IG1heENvbG9yU3RvcENvdW50KTsKLSAgICBmb3IgKHVpbnQ4X3QgaSA9
IDA7IGkgPCBtX2NvbG9yU3RvcENvdW50OyArK2kpIHsKLSAgICAgICAgbV9vZmZzZXRzW2ldID0g
Z3JhZGllbnQuc3RvcHMoKVtpXS5vZmZzZXQ7Ci0gICAgICAgIG1fY29sb3JzW2ldID0gKmdyYWRp
ZW50LnN0b3BzKClbaV0uY29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCk7Ci0gICAgfQotfQotCi1T
ZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudChmbG9hdCBvZmZzZXRz
W21heENvbG9yU3RvcENvdW50XSwgU1JHQkE8dWludDhfdD4gY29sb3JzW21heENvbG9yU3RvcENv
dW50XSwgY29uc3QgR3JhZGllbnQ6OkRhdGEmIGRhdGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSwgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9k
LCB1aW50OF90IGNvbG9yU3RvcENvdW50KQotICAgIDogbV9kYXRhKGRhdGEpCi0gICAgLCBtX2dy
YWRpZW50U3BhY2VUcmFuc2Zvcm0oZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSkKLSAgICAsIG1fc3By
ZWFkTWV0aG9kKHNwcmVhZE1ldGhvZCkKLSAgICAsIG1fY29sb3JTdG9wQ291bnQoY29sb3JTdG9w
Q291bnQpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9jb2xvclN0b3BDb3VudCA8PSBtYXhDb2xv
clN0b3BDb3VudCk7Ci0gICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbV9jb2xvclN0b3BDb3Vu
dDsgKytpKSB7Ci0gICAgICAgIG1fb2Zmc2V0c1tpXSA9IG9mZnNldHNbaV07Ci0gICAgICAgIG1f
Y29sb3JzW2ldID0gY29sb3JzW2ldOwotICAgIH0KLX0KLQotU2V0SW5saW5lRmlsbEdyYWRpZW50
OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQoY29uc3QgU2V0SW5saW5lRmlsbEdyYWRpZW50JiBvdGhl
cikKLXsKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxHcmFkaWVudDo6UmFkaWFsRGF0
YT4ob3RoZXIubV9kYXRhKSB8fCBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEdyYWRpZW50OjpMaW5l
YXJEYXRhPihvdGhlci5tX2RhdGEpIHx8IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8R3JhZGllbnQ6
OkNvbmljRGF0YT4ob3RoZXIubV9kYXRhKSkgewotICAgICAgICBtX2RhdGEgPSBvdGhlci5tX2Rh
dGE7Ci0gICAgICAgIG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IG90aGVyLm1fZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybTsKLSAgICAgICAgbV9zcHJlYWRNZXRob2QgPSBvdGhlci5tX3NwcmVhZE1l
dGhvZDsKLSAgICAgICAgbV9jb2xvclN0b3BDb3VudCA9IG90aGVyLm1fY29sb3JTdG9wQ291bnQ7
Ci0gICAgICAgIGlmIChtX2NvbG9yU3RvcENvdW50ID4gbWF4Q29sb3JTdG9wQ291bnQpCi0gICAg
ICAgICAgICBtX2NvbG9yU3RvcENvdW50ID0gMDsKLSAgICAgICAgZm9yICh1aW50OF90IGkgPSAw
OyBpIDwgbV9jb2xvclN0b3BDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBtX29mZnNldHNbaV0g
PSBvdGhlci5tX29mZnNldHNbaV07Ci0gICAgICAgICAgICBtX2NvbG9yc1tpXSA9IG90aGVyLm1f
Y29sb3JzW2ldOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIG1faXNWYWxpZCA9IGZh
bHNlOwotfQotCi1SZWY8R3JhZGllbnQ+IFNldElubGluZUZpbGxHcmFkaWVudDo6Z3JhZGllbnQo
KSBjb25zdAotewotICAgIGF1dG8gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50
OjpEYXRhKG1fZGF0YSkpOwotICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG1fY29sb3JTdG9w
Q291bnQ7ICsraSkKLSAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IG1fb2Zmc2V0c1tp
XSwgQ29sb3IobV9jb2xvcnNbaV0pIH0pOwotICAgIGdyYWRpZW50LT5zZXRTcHJlYWRNZXRob2Qo
bV9zcHJlYWRNZXRob2QpOwotICAgIHJldHVybiBncmFkaWVudDsKLX0KLQotdm9pZCBTZXRJbmxp
bmVGaWxsR3JhZGllbnQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsK
LSAgICBpZiAobV9jb2xvclN0b3BDb3VudCA8PSBtYXhDb2xvclN0b3BDb3VudCkKLSAgICAgICAg
Y29udGV4dC5zZXRGaWxsR3JhZGllbnQoZ3JhZGllbnQoKSwgbV9ncmFkaWVudFNwYWNlVHJhbnNm
b3JtKTsKLX0KLQotYm9vbCBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmlzSW5saW5lKGNvbnN0IEdy
YWRpZW50JiBncmFkaWVudCkKLXsKLSAgICBpZiAoZ3JhZGllbnQuc3RvcHMoKS5zaXplKCkgPiBT
ZXRJbmxpbmVGaWxsR3JhZGllbnQ6Om1heENvbG9yU3RvcENvdW50KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIGNvbG9yU3RvcCA6IGdyYWRpZW50LnN0b3BzKCkpIHsK
LSAgICAgICAgaWYgKCFjb2xvclN0b3AuY29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRJbmxp
bmVGaWxsR3JhZGllbnQmKQotewotICAgIC8vIEZJWE1FOiBEdW1wIGdyYWRpZW50IGRhdGEuCi0g
ICAgcmV0dXJuIHRzOwotfQotCiB2b2lkIFNldElubGluZUZpbGxDb2xvcjo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGNv
bG9yKCkpOwpAQCAtMTExMSwxOCArMTAzNCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGbHVzaENvbnRleHQmIGl0ZW0pCiAgICAgcmV0dXJu
IHRzOwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgTWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyJiBpdGVtKQotewotICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiaWRlbnRpZmllciIsIGl0ZW0uaWRlbnRpZmllcigpKTsKLSAgICByZXR1cm4gdHM7
Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXImIGl0ZW0pCi17Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJpZGVudGlmaWVyIiwgaXRlbS5pZGVudGlmaWVyKCkpOwotICAgIHJl
dHVybiB0czsKLX0KLQogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIEl0ZW1UeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xMTMzLDcgKzEw
NDQsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRl
bVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZTogdHMgPDwgInNjYWxlIjsgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOiB0cyA8PCAic2V0LWN0bSI7IGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOiB0cyA8PCAiY29uY2F0ZW50YXRlLWN0
bSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDogdHMg
PDwgInNldC1pbmxpbmUtZmlsbC1ncmFkaWVudCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OlNldElubGluZUZpbGxDb2xvcjogdHMgPDwgInNldC1pbmxpbmUtZmlsbC1jb2xvciI7IGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOiB0cyA8PCAic2V0LWlu
bGluZS1zdHJva2UtY29sb3IiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VU
aGlja25lc3M6IHRzIDw8ICJzZXQtc3Ryb2tlLXRoaWNrbmVzcyI7IGJyZWFrOwpAQCAtMTE3Niw4
ICsxMDg2LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6IHRzIDw8ICJmaWxs
LXBhdGgiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZTogdHMgPDwgImZp
bGwtZWxsaXBzZSI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZsdXNoQ29udGV4dDogdHMg
PDwgImZsdXNoLWNvbnRleHQiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFu
ZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI6IHRzIDw8ICJtZXRhLWNvbW1hbmQtY2hhbmdl
LWRlc3RpbmF0aW9uLWltYWdlLWJ1ZmZlciI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6Ok1l
dGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjogdHMgPDwgIm1ldGEtY29tbWFuZC1jaGFuZ2UtaXRl
bS1idWZmZXIiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjogdHMg
PDwgImdldC1waXhlbC1idWZmZXIiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQaXhl
bEJ1ZmZlcjogdHMgPDwgInB1dC1waXhlbC1idWZmZXIiOyBicmVhazsKICNpZiBFTkFCTEUoVklE
RU8pCkBAIC0xMjI1LDkgKzExMzMsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVD
VE06CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENvbmNhdGVuYXRlQ1RNPigpOwogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Ci0gICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PFNldElubGluZUZpbGxHcmFkaWVudD4oKTsKLSAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAgICB0cyA8PCBp
dGVtLmdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTM1MCwx
MiArMTI1NSw2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1I
YW5kbGUgaXRlbSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGbHVzaENvbnRleHQ6CiAgICAgICAgIHRz
IDw8IGl0ZW0uZ2V0PEZsdXNoQ29udGV4dD4oKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyOgotICAgICAg
ICB0cyA8PCBpdGVtLmdldDxNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI+
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdl
SXRlbUJ1ZmZlcjoKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8TWV0YUNvbW1hbmRDaGFuZ2VJdGVt
QnVmZmVyPigpOwotICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1
ZmZlcjoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8R2V0UGl4ZWxCdWZmZXI+KCk7CiAgICAgICAg
IGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXggYTQzZDEzZjZjYmMz
ZDIwY2IyY2Q4MWQwYTRhYTMzYjViMjY0YjlkZC4uNWIyYmNkYjAxODE0NGNmYmYzZmRkMDEzZmQw
OWY0ZDM4MzI4NWQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCkBAIC0yNiw3
ICsyNiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRp
b24uaCIKLSNpbmNsdWRlICJEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllci5oIgogI2luY2x1ZGUg
IkRpc3BsYXlMaXN0SXRlbUJ1ZmZlcklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlz
dEl0ZW1UeXBlLmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgpAQCAtNzIsNyArNzEs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRy
dWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIH07CiAKIGNsYXNzIFJlc3Rv
cmUgewpAQCAtODEsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSBmYWxzZTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
IH07CiAKIGNsYXNzIFRyYW5zbGF0ZSB7CkBAIC05MCw2ICs4OSw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCisgICAgVHJhbnNsYXRlKCkgPSBk
ZWZhdWx0OwogICAgIFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQogICAgICAgICA6IG1feCh4
KQogICAgICAgICAsIG1feSh5KQpAQCAtOTksNyArOTksNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQg
eCgpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQogICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBt
X3k7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBmbG9hdCBtX3ggeyAwIH07CkBAIC0xMTIsNiArMTEyLDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKKyAgICBSb3RhdGUoKSA9IGRl
ZmF1bHQ7CiAgICAgUm90YXRlKGZsb2F0IGFuZ2xlKQogICAgICAgICA6IG1fYW5nbGUoYW5nbGUp
CiAgICAgewpAQCAtMTE5LDcgKzEyMCw3IEBAIHB1YmxpYzoKIAogICAgIGZsb2F0IGFuZ2xlKCkg
Y29uc3QgeyByZXR1cm4gbV9hbmdsZTsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGZsb2F0IG1fYW5nbGUgeyAwIH07IC8vIEluIHJh
ZGlhbnMuCkBAIC0xMzEsNiArMTMyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gZmFsc2U7CiAKKyAgICBTY2FsZSgpID0gZGVmYXVsdDsKICAgICBTY2FsZShj
b25zdCBGbG9hdFNpemUmIHNpemUpCiAgICAgICAgIDogbV9zaXplKHNpemUpCiAgICAgewpAQCAt
MTM4LDcgKzE0MCw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZsb2F0U2l6ZSYgYW1vdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgRmxvYXRTaXplIG1fc2l6ZTsKQEAgLTE1MCw2ICsx
NTIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsK
IAorICAgIFNldENUTSgpID0gZGVmYXVsdDsKICAgICBTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCiAgICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQogICAgIHsK
QEAgLTE1Nyw3ICsxNjAsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAKLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgQWZmaW5lVHJhbnNm
b3JtIG1fdHJhbnNmb3JtOwpAQCAtMTY5LDYgKzE3Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCisgICAgQ29uY2F0ZW5hdGVDVE0oKSA9IGRl
ZmF1bHQ7CiAgICAgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCiAgICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQogICAgIHsKQEAgLTE3Niw1MiAr
MTgwLDI2IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFu
c2Zvcm07CiB9OwogCi1jbGFzcyBTZXRJbmxpbmVGaWxsR3JhZGllbnQgewotcHVibGljOgotICAg
IHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0SW5saW5l
RmlsbEdyYWRpZW50OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG1heENvbG9yU3RvcENvdW50ID0gNDsKLQotICAg
IFNldElubGluZUZpbGxHcmFkaWVudChjb25zdCBHcmFkaWVudCYsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0SW5s
aW5lRmlsbEdyYWRpZW50KGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRdLCBTUkdCQTx1
aW50OF90PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdLCBjb25zdCBHcmFkaWVudDo6RGF0YSYs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSwgR3JhZGllbnRT
cHJlYWRNZXRob2QsIHVpbnQ4X3QgY29sb3JTdG9wQ291bnQpOwotICAgIFNldElubGluZUZpbGxH
cmFkaWVudChjb25zdCBTZXRJbmxpbmVGaWxsR3JhZGllbnQmKTsKLSAgICBib29sIGlzVmFsaWQo
KSBjb25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KLQotICAgIHN0YXRpYyBib29sIGlzSW5saW5l
KGNvbnN0IEdyYWRpZW50Jik7Ci0gICAgUmVmPEdyYWRpZW50PiBncmFkaWVudCgpIGNvbnN0Owot
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICBmbG9hdCBtX29mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRdOwotICAgIFNSR0JBPHVpbnQ4X3Q+
IG1fY29sb3JzW21heENvbG9yU3RvcENvdW50XTsKLSAgICBHcmFkaWVudDo6RGF0YSBtX2RhdGE7
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICBHcmFk
aWVudFNwcmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhvZCB7IEdyYWRpZW50U3ByZWFkTWV0aG9kOjpQ
YWQgfTsKLSAgICB1aW50OF90IG1fY29sb3JTdG9wQ291bnQgeyAwIH07Ci0gICAgYm9vbCBtX2lz
VmFsaWQgeyB0cnVlIH07Ci19OwotCiBjbGFzcyBTZXRJbmxpbmVGaWxsQ29sb3IgewogcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbENvbG9yOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7
CiAKKyAgICBTZXRJbmxpbmVGaWxsQ29sb3IoKSA9IGRlZmF1bHQ7CiAgICAgU2V0SW5saW5lRmls
bENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yRGF0YSkKICAgICAgICAgOiBtX2NvbG9yRGF0YShj
b2xvckRhdGEpCiAgICAgewogICAgIH0KIAogICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1
cm4geyBtX2NvbG9yRGF0YSB9OyB9Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogCiBwcml2YXRlOgogICAgIFNSR0JBPHVpbnQ4X3Q+IG1fY29sb3JEYXRhOwpAQCAtMjMz
LDYgKzIxMSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOwogCisgICAgU2V0SW5saW5lU3Ryb2tlQ29sb3IoKSA9IGRlZmF1bHQ7CiAgICAgU2V0SW5s
aW5lU3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3JEYXRhKQogICAgICAgICA6IG1fY29s
b3JEYXRhKGNvbG9yRGF0YSkKICAgICB7CkBAIC0yNDAsNyArMjE5LDcgQEAgcHVibGljOgogCiAg
ICAgQ29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiB7IG1fY29sb3JEYXRhIH07IH0KIAotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTUkdC
QTx1aW50OF90PiBtX2NvbG9yRGF0YTsKQEAgLTI1Miw2ICsyMzEsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAorICAgIFNldFN0cm9rZVRoaWNr
bmVzcygpID0gZGVmYXVsdDsKICAgICBTZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNz
KQogICAgICAgICA6IG1fdGhpY2tuZXNzKHRoaWNrbmVzcykKICAgICB7CkBAIC0yNTksNyArMjM5
LDcgQEAgcHVibGljOgogCiAgICAgZmxvYXQgdGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV90
aGlja25lc3M7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAog
cHJpdmF0ZToKICAgICBmbG9hdCBtX3RoaWNrbmVzcyB7IDAgfTsKQEAgLTI4Miw3ICsyNjIsNyBA
QCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPFNldFN0YXRlPiBkZWNvZGUoRGVjb2RlciYpOwogCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmLCBOYXRpdmVJbWFnZSogc3Ryb2tlUGF0dGVybkltYWdlLCBOYXRpdmVJbWFnZSog
ZmlsbFBhdHRlcm5JbWFnZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmLCBOYXRpdmVJbWFnZSogc3Ryb2tlUGF0dGVybkltYWdlLCBOYXRpdmVJbWFnZSog
ZmlsbFBhdHRlcm5JbWFnZSk7CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IFBhdHRlcm5EYXRhIHsK
QEAgLTU5OSw2ICs1NzksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSBmYWxzZTsKIAorICAgIFNldExpbmVDYXAoKSA9IGRlZmF1bHQ7CiAgICAgU2V0TGluZUNh
cChMaW5lQ2FwIGxpbmVDYXApCiAgICAgICAgIDogbV9saW5lQ2FwKGxpbmVDYXApCiAgICAgewpA
QCAtNjA2LDEwICs1ODcsMTAgQEAgcHVibGljOgogCiAgICAgTGluZUNhcCBsaW5lQ2FwKCkgY29u
c3QgeyByZXR1cm4gbV9saW5lQ2FwOyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgTGluZUNhcCBtX2xpbmVDYXA7CisgICAgTGluZUNh
cCBtX2xpbmVDYXAgeyBMaW5lQ2FwOjpCdXR0IH07CiB9OwogCiBjbGFzcyBTZXRMaW5lRGFzaCB7
CkBAIC02MjcsNyArNjA4LDcgQEAgcHVibGljOgogICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaEFy
cmF5KCkgY29uc3QgeyByZXR1cm4gbV9kYXNoQXJyYXk7IH0KICAgICBmbG9hdCBkYXNoT2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gbV9kYXNoT2Zmc2V0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8U2V0TGluZURhc2g+IGRlY29kZShEZWNvZGVyJik7CkBAIC02NjYsNiAr
NjQ3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7
CiAKKyAgICBTZXRMaW5lSm9pbigpID0gZGVmYXVsdDsKICAgICBTZXRMaW5lSm9pbihMaW5lSm9p
biBsaW5lSm9pbikKICAgICAgICAgOiBtX2xpbmVKb2luKGxpbmVKb2luKQogICAgIHsKQEAgLTY3
MywxMCArNjU1LDEwIEBAIHB1YmxpYzoKIAogICAgIExpbmVKb2luIGxpbmVKb2luKCkgY29uc3Qg
eyByZXR1cm4gbV9saW5lSm9pbjsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OwogCiBwcml2YXRlOgotICAgIExpbmVKb2luIG1fbGluZUpvaW47CisgICAgTGluZUpv
aW4gbV9saW5lSm9pbiB7IExpbmVKb2luOjpNaXRlciB9OwogfTsKIAogY2xhc3MgU2V0TWl0ZXJM
aW1pdCB7CkBAIC02ODUsNiArNjY3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gZmFsc2U7CiAKKyAgICBTZXRNaXRlckxpbWl0KCkgPSBkZWZhdWx0OwogICAg
IFNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKICAgICAgICAgOiBtX21pdGVyTGltaXQo
bWl0ZXJMaW1pdCkKICAgICB7CkBAIC02OTIsMTAgKzY3NSwxMCBAQCBwdWJsaWM6CiAKICAgICBm
bG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9taXRlckxpbWl0OyB9CiAKLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgZmxvYXQg
bV9taXRlckxpbWl0OworICAgIGZsb2F0IG1fbWl0ZXJMaW1pdCB7IDAgfTsKIH07CiAKIGNsYXNz
IENsZWFyU2hhZG93IHsKQEAgLTcwNCw3ICs2ODcsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CisgICAgQ2xlYXJTaGFkb3coKSA9IGRlZmF1bHQ7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIH07CiAKIC8vIEZJWE1F
OiB0cmVhdCBhcyBkcmF3aW5nIGl0ZW0/CkBAIC03MTQsNiArNjk4LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKKyAgICBDbGlwKCkgPSBkZWZh
dWx0OwogICAgIENsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICA6IG1fcmVjdChy
ZWN0KQogICAgIHsKQEAgLTcyMSw3ICs3MDYsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGbG9h
dFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0
OwpAQCAtNzMzLDYgKzcxOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IGZhbHNlOwogCisgICAgQ2xpcE91dCgpID0gZGVmYXVsdDsKICAgICBDbGlwT3V0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICB7CkBAIC03
NDAsNyArNzI2LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKIHByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKQEAgLTc1Miw2ICs3Mzgs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRy
dWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAor
ICAgIENsaXBUb0ltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogICAgIENsaXBUb0ltYWdlQnVmZmVy
KFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogICAgICAgICA6IG1faW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKGltYWdlQnVmZmVySWRlbnRpZmllcikKICAgICAgICAgLCBtX2Rlc3RpbmF0aW9uUmVj
dChkZXN0aW5hdGlvblJlY3QpCkBAIC03NjIsOSArNzQ5LDkgQEAgcHVibGljOgogICAgIEZsb2F0
UmVjdCBkZXN0aW5hdGlvblJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsg
fQogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VCdWZmZXJJZGVudGlm
aWVyLmlzVmFsaWQoKTsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmLCBXZWJD
b3JlOjpJbWFnZUJ1ZmZlciYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6SW1hZ2VCdWZmZXImKSBjb25zdDsKIAotICAgIE5P
X1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CisgICAgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXI7CkBAIC03OTIsNyArNzc5LDcgQEAg
cHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25h
bDxDbGlwT3V0VG9QYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFBhdGggbV9wYXRoOwpAQCAtODM2
LDcgKzgyMyw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1
cm4gbV9wYXRoOyB9CiAgICAgV2luZFJ1bGUgd2luZFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3dp
bmRSdWxlOyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Q2xpcFBhdGg+
IGRlY29kZShEZWNvZGVyJik7CkBAIC05MjYsNiArOTEzLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKKyAgICBFbmRDbGlwVG9EcmF3aW5nQ29t
bWFuZHMoKSA9IGRlZmF1bHQ7CiAgICAgRW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24pCiAgICAgICAgIDogbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlv
bikKICAgICB7CkBAIC05NTEsMTAgKzkzOSwxMCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERyYXdHbHlwaHM+IGRlY29kZShEZWNv
ZGVyJik7CiAKLSAgICBEcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckds
eXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZs
b2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgV0VCQ09SRV9F
WFBPUlQgRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50
JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpOwogICAgIFdFQkNPUkVfRVhQT1JUIERy
YXdHbHlwaHMoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBWZWN0b3I8R2x5cGhCdWZmZXJH
bHlwaCwgMTI4PiYmLCBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+JiYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9k
ZSk7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZvbnQmKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEZvbnQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1
cm4gbV9ib3VuZHM7IH0KQEAgLTEwMjYsNiArMTAxNCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKKyAgICBEcmF3SW1hZ2VCdWZmZXIoKSA9IGRl
ZmF1bHQ7CiAgICAgRHJhd0ltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBp
bWFnZUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiAg
ICAgICAgIDogbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQog
ICAgICAgICAsIG1fZGVzdGluYXRpb25SZWN0KGRlc3RSZWN0KQpAQCAtMTA0MSw5ICsxMDMwLDkg
QEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIHZhbGlkYXRlIEltYWdl
UGFpbnRpbmdPcHRpb25zLgogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faW1h
Z2VCdWZmZXJJZGVudGlmaWVyLmlzVmFsaWQoKTsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmLCBXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6SW1hZ2VCdWZmZXImKSBj
b25zdDsKIAotICAgIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CisgICAgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7
IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJlY3Q7IH0KQEAgLTEwNjEs
NiArMTA1MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRy
dWU7CiAKKyAgICBEcmF3TmF0aXZlSW1hZ2UoKSA9IGRlZmF1bHQ7CiAgICAgRHJhd05hdGl2ZUlt
YWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogICAg
ICAgICA6IG1faW1hZ2VJZGVudGlmaWVyKGltYWdlSWRlbnRpZmllcikKICAgICAgICAgLCBtX2lt
YWdlU2l6ZShpbWFnZVNpemUpCkBAIC0xMDc2LDggKzEwNjYsOCBAQCBwdWJsaWM6CiAgICAgLy8g
RklYTUU6IFdlIG1pZ2h0IHdhbnQgdG8gdmFsaWRhdGUgSW1hZ2VQYWludGluZ09wdGlvbnMuCiAg
ICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUlkZW50aWZpZXIuaXNWYWxp
ZCgpOyB9CiAKLSAgICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JiwgTmF0aXZl
SW1hZ2UmKSBjb25zdDsKKyAgICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JiwgTmF0aXZlSW1hZ2UmKSBjb25zdDsKIAogICAg
IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBz
dGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJlY3Q7
IH0KQEAgLTEwOTYsNiArMTA4Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CiAKKyAgICBEcmF3UGF0dGVybigpID0gZGVmYXVsdDsKICAgICBXRUJD
T1JFX0VYUE9SVCBEcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pOwogCiAgICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdl
SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VJZGVudGlmaWVyOyB9CkBAIC0xMTA4
LDggKzEwOTksOCBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdG8gdmFs
aWRhdGUgSW1hZ2VQYWludGluZ09wdGlvbnMuCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbWFnZUlkZW50aWZpZXIuaXNWYWxpZCgpOyB9CiAKLSAgICBOT19SRVRVUk5fRFVF
X1RPX0FTU0VSVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiwgTmF0aXZlSW1hZ2UmKSBjb25zdDsKKyAgICBOT19SRVRV
Uk5fRFVFX1RPX0FTU0VSVCBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JiwgTmF0aXZlSW1hZ2UmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBn
bG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQpAQCAtMTEzMSw2ICsxMTIyLDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsgLy8gSXMgZHJhd2luZyBp
dGVtIGJlY2F1c2UgdGhlIHNpemUgb2YgdGhlIHRyYW5zcGFyZW5jeSBsYXllciBpcyBpbXBsaWNp
dGx5IHRoZSBjbGlwIGJvdW5kcy4KIAorICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRl
ZmF1bHQ7CiAgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogICAgICAg
ICA6IG1fb3BhY2l0eShvcGFjaXR5KQogICAgIHsKQEAgLTExMzgsMTMgKzExMzAsMTMgQEAgcHVi
bGljOgogCiAgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQog
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAgc3RkOjpvcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBn
bG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KIAogcHJpdmF0ZToK
LSAgICBmbG9hdCBtX29wYWNpdHk7CisgICAgZmxvYXQgbV9vcGFjaXR5IHsgMCB9OwogfTsKIAog
Y2xhc3MgRW5kVHJhbnNwYXJlbmN5TGF5ZXIgewpAQCAtMTE1Myw3ICsxMTQ1LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBzdGQ6
Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CkBAIC0xMTY1LDYgKzExNTcsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCisgICAgRHJhd1Jl
Y3QoKSA9IGRlZmF1bHQ7CiAgICAgRHJhd1JlY3QoRmxvYXRSZWN0IHJlY3QsIGZsb2F0IGJvcmRl
clRoaWNrbmVzcykKICAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICAgICAgLCBtX2JvcmRlclRo
aWNrbmVzcyhib3JkZXJUaGlja25lc3MpCkBAIC0xMTc0LDcgKzExNjcsNyBAQCBwdWJsaWM6CiAg
ICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBmbG9hdCBi
b3JkZXJUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlclRoaWNrbmVzczsgfQogCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25h
bDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsg
fQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KQEAgLTExOTAsNiArMTE4Myw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsK
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKKyAgICBE
cmF3TGluZSgpID0gZGVmYXVsdDsKICAgICBEcmF3TGluZShGbG9hdFBvaW50IHBvaW50MSwgRmxv
YXRQb2ludCBwb2ludDIpCiAgICAgICAgIDogbV9wb2ludDEocG9pbnQxKQogICAgICAgICAsIG1f
cG9pbnQyKHBvaW50MikKQEAgLTExOTksNyArMTE5Myw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFBv
aW50IHBvaW50MSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQxOyB9CiAgICAgRmxvYXRQb2ludCBw
b2ludDIoKSBjb25zdCB7IHJldHVybiBtX3BvaW50MjsgfQogCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2Jh
bEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
QEAgLTEyMjYsNyArMTIyMCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzUHJpbnRpbmcoKSBjb25z
dCB7IHJldHVybiBtX3ByaW50aW5nOyB9CiAgICAgYm9vbCBkb3VibGVMaW5lcygpIGNvbnN0IHsg
cmV0dXJuIG1fZG91YmxlTGluZXM7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBj
b25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CkBAIC0xMjk4LDYg
KzEyOTIsNyBAQCBwdWJsaWM6CiAKICAgICB1c2luZyBVbmRlcmx5aW5nRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGVUeXBlID0gc3RkOjp1bmRlcmx5aW5nX3R5cGU8RG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGU6Ok1vZGU+Ojp0eXBlOwogCisgICAgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigpID0gZGVm
YXVsdDsKICAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQogICAgICAgICA6IG1fcmVj
dChyZWN0KQogICAgICAgICAsIG1fc3R5bGVNb2RlKHN0YXRpY19jYXN0PFVuZGVybHlpbmdEb2N1
bWVudE1hcmtlckxpbmVTdHlsZVR5cGU+KHN0eWxlLm1vZGUpKQpAQCAtMTMxNiw3ICsxMzExLDcg
QEAgcHVibGljOgogCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7
IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0ZDo6
b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51
bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CkBAIC0xMzMzLDYgKzEzMjgsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCisgICAgRHJhd0VsbGlwc2Uo
KSA9IGRlZmF1bHQ7CiAgICAgRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAg
ICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsKQEAgLTEzNDAsNyArMTMzNiw3IEBAIHB1YmxpYzoK
IAogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZs
b2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAg
ICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQpAQCAtMTM3MCw3ICsxMzY2LDcgQEAgcHVi
bGljOgogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxE
cmF3UGF0aD4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMo
KSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4g
bV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQpAQCAtMTQyNiw3ICsxNDIyLDcgQEAgcHVibGlj
OgogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxEcmF3
Rm9jdXNSaW5nUGF0aD4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxC
b3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CkBA
IC0xNDg2LDcgKzE0ODIsNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgb2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vZmZzZXQ7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVy
biBtX2NvbG9yOyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAK
ICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwpAQCAtMTU0Miw2ICsxNTM4LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAorICAgIEZp
bGxSZWN0KCkgPSBkZWZhdWx0OwogICAgIEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
ICAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICB7CkBAIC0xNTQ5LDcgKzE1NDYsNyBAQCBwdWJs
aWM6CiAKICAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7
IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIHN0ZDo6
b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51
bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CkBAIC0xNTczLDcgKzE1
NzAsNyBAQCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9
CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6Om9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxs
b3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQpAQCAtMTYyMCw3ICsxNjE3
LDcgQEAgcHVibGljOgogICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdDsgfQogICAgIGNvbnN0IEdyYWRpZW50JiBncmFkaWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZ3JhZGllbnQuZ2V0KCk7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0
OyB9CkBAIC0xNjc0LDcgKzE2NzEsNyBAQCBwdWJsaWM6CiAgICAgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29wOyB9CiAgICAgQmxlbmRNb2Rl
IGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9CiAKLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVj
dD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3Rk
OjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQpAQCAtMTc0NCw3ICsxNzQxLDcgQEAgcHVibGljOgog
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWxsUm91
bmRlZFJlY3Q+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdC5yZWN0KCk7IH0KQEAgLTE4MDQsNyArMTgwMSw3IEBAIHB1YmxpYzoKICAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGU+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdDsgfQpAQCAtMTg1MiwxMyArMTg0OSwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCisgICAgRmlsbExpbmUoKSA9IGRlZmF1bHQ7CiAg
ICAgRmlsbExpbmUoY29uc3QgTGluZURhdGEmIGxpbmVEYXRhKQogICAgICAgICA6IG1fbGluZURh
dGEobGluZURhdGEpCiAgICAgewogICAgIH0KIAogICAgIFBhdGggcGF0aCgpIGNvbnN0IHsgcmV0
dXJuIFBhdGg6OmZyb20oe21fbGluZURhdGF9KTsgfQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJu
IHBhdGgoKS5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KIApAQCAtMTg3MiwxMyArMTg3MCwxNCBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCisgICAgRmls
bEFyYygpID0gZGVmYXVsdDsKICAgICBGaWxsQXJjKGNvbnN0IEFyY0RhdGEmIGFyY0RhdGEpCiAg
ICAgICAgIDogbV9hcmNEYXRhKGFyY0RhdGEpCiAgICAgewogICAgIH0KIAogICAgIFBhdGggcGF0
aCgpIGNvbnN0IHsgcmV0dXJuIFBhdGg6OmZyb20oe21fYXJjRGF0YX0pOyB9Ci0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3QgeyByZXR1cm4gcGF0aCgpLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQogCkBAIC0xODkyLDEz
ICsxODkxLDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRy
dWU7CiAKKyAgICBGaWxsUXVhZEN1cnZlKCkgPSBkZWZhdWx0OwogICAgIEZpbGxRdWFkQ3VydmUo
Y29uc3QgUXVhZEN1cnZlRGF0YSYgcXVhZEN1cnZlRGF0YSkKICAgICAgICAgOiBtX3F1YWRDdXJ2
ZURhdGEocXVhZEN1cnZlRGF0YSkKICAgICB7CiAgICAgfQogCiAgICAgUGF0aCBwYXRoKCkgY29u
c3QgeyByZXR1cm4gUGF0aDo6ZnJvbSh7bV9xdWFkQ3VydmVEYXRhfSk7IH0KLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6
b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCB7IHJldHVybiBwYXRoKCkuZmFzdEJvdW5kaW5nUmVjdCgpOyB9CiAKQEAgLTE5MTIsMTMg
KzE5MTIsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1
ZTsKIAorICAgIEZpbGxCZXppZXJDdXJ2ZSgpID0gZGVmYXVsdDsKICAgICBGaWxsQmV6aWVyQ3Vy
dmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJiBiZXppZXJDdXJ2ZURhdGEpCiAgICAgICAgIDogbV9i
ZXppZXJDdXJ2ZURhdGEoYmV6aWVyQ3VydmVEYXRhKQogICAgIHsKICAgICB9CiAKICAgICBQYXRo
IHBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRoOjpmcm9tKHttX2JlemllckN1cnZlRGF0YX0pOyB9
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7
IH0KICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gcGF0aCgpLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQog
CkBAIC0xOTQ5LDcgKzE5NTAsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZpbGxQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25h
bDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsg
fQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOyB9CkBA
IC0xOTgxLDYgKzE5ODIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSB0cnVlOwogCisgICAgRmlsbEVsbGlwc2UoKSA9IGRlZmF1bHQ7CiAgICAgRmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsK
QEAgLTE5ODgsNyArMTk5MCw3IEBAIHB1YmxpYzoKIAogICAgIEZsb2F0UmVjdCByZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQpAQCAtMjEyNSwxNCArMjEyNywxNSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVy
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CisgICAgV0VCQ09SRV9FWFBPUlQgUGFp
bnRGcmFtZUZvck1lZGlhKCkgPSBkZWZhdWx0OworICAgIFdFQkNPUkVfRVhQT1JUIFBhaW50RnJh
bWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwog
CiAgICAgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVz
dGluYXRpb247IH0KICAgICBNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0
IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZGVudGlmaWVyLmlzVmFsaWQoKTsgfQogCi0gICAgTk9fUkVUVVJOX0RVRV9UT19B
U1NFUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBOT19SRVRVUk5f
RFVFX1RPX0FTU0VSVCBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiB7IG1f
ZGVzdGluYXRpb24gfTsgfQpAQCAtMjE0OSw2ICsyMTUyLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAorICAgIFN0cm9rZVJlY3QoKSA9IGRlZmF1
bHQ7CiAgICAgU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0
aCkKICAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICAgICAgLCBtX2xpbmVXaWR0aChsaW5lV2lk
dGgpCkBAIC0yMTU4LDcgKzIxNjIsNyBAQCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0IHJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBmbG9hdCBsaW5lV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmVXaWR0aDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogCiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKQEAgLTIxNzQsNiArMjE3
OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0g
dHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAK
KyAgICBTdHJva2VMaW5lKCkgPSBkZWZhdWx0OwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQogICAgIFN0cm9rZUxpbmUoY29uc3QgTGluZURhdGEmIGxpbmVEYXRhKQogICAgICAgICA6IG1f
c3RhcnQobGluZURhdGEuc3RhcnQpCkBAIC0yMTkwLDcgKzIxOTUsNyBAQCBwdWJsaWM6CiAgICAg
RmxvYXRQb2ludCBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KICAgICBGbG9hdFBv
aW50IGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwpA
QCAtMjIwOCwxMyArMjIxMywxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSB0cnVlOwogCisgICAgU3Ryb2tlQXJjKCkgPSBkZWZhdWx0OwogICAgIFN0cm9rZUFy
Yyhjb25zdCBBcmNEYXRhJiBhcmNEYXRhKQogICAgICAgICA6IG1fYXJjRGF0YShhcmNEYXRhKQog
ICAgIHsKICAgICB9CiAKICAgICBQYXRoIHBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRoOjpmcm9t
KHttX2FyY0RhdGF9KTsgfQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
ICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCkBAIC0yMjI4LDEzICsyMjM0LDE0
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1
ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKKyAg
ICBTdHJva2VRdWFkQ3VydmUoKSA9IGRlZmF1bHQ7CiAgICAgU3Ryb2tlUXVhZEN1cnZlKGNvbnN0
IFF1YWRDdXJ2ZURhdGEmIHF1YWRDdXJ2ZURhdGEpCiAgICAgICAgIDogbV9xdWFkQ3VydmVEYXRh
KHF1YWRDdXJ2ZURhdGEpCiAgICAgewogICAgIH0KIAogICAgIFBhdGggcGF0aCgpIGNvbnN0IHsg
cmV0dXJuIFBhdGg6OmZyb20oe21fcXVhZEN1cnZlRGF0YX0pOyB9Ci0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9i
YWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBzdGQ6Om9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CiAKQEAgLTIyNDgsMTMgKzIyNTUsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gdHJ1ZTsKIAorICAgIFN0cm9rZUJlemllckN1cnZlKCkgPSBkZWZhdWx0Owog
ICAgIFN0cm9rZUJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YSYgYmV6aWVyQ3VydmVE
YXRhKQogICAgICAgICA6IG1fYmV6aWVyQ3VydmVEYXRhKGJlemllckN1cnZlRGF0YSkKICAgICB7
CiAgICAgfQogCiAgICAgUGF0aCBwYXRoKCkgY29uc3QgeyByZXR1cm4gUGF0aDo6ZnJvbSh7bV9i
ZXppZXJDdXJ2ZURhdGF9KTsgfQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCkBAIC0yMjg1LDcgKzIyOTMs
NyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFN0cm9rZVBhdGg+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xv
YmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwpAQCAtMjMxNyw2ICsyMzI1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gdHJ1ZTsKIAorICAgIFN0cm9rZUVsbGlwc2UoKSA9IGRlZmF1bHQ7CiAgICAgU3Ry
b2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIDogbV9yZWN0KHJlY3Qp
CiAgICAgewpAQCAtMjMyNCw3ICsyMzMzLDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRmxvYXRS
ZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xv
YmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgc3RkOjpvcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwpAQCAtMjMzOSw2ICsyMzQ4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gdHJ1ZTsKIAorICAgIENsZWFyUmVjdCgpID0gZGVmYXVsdDsKICAgICBDbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsK
QEAgLTIzNDYsNyArMjM1Niw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVy
biBtX3JlY3Q7IH0KQEAgLTIzNjMsNyArMjM3Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogfTsKIAogY2xhc3MgQXBwbHlGaWxsUGF0dGVybiB7CkBAIC0yMzcyLDcgKzIz
ODIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsK
IAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIH07CiAKICNlbmRpZgpA
QCAtMjM4Myw2ICsyMzkzLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJ
dGVtID0gZmFsc2U7CiAKKyAgICBBcHBseURldmljZVNjYWxlRmFjdG9yKCkgPSBkZWZhdWx0Owog
ICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCiAgICAgICAgIDog
bV9zY2FsZUZhY3RvcihzY2FsZUZhY3RvcikKICAgICB7CkBAIC0yMzkwLDcgKzI0MDEsNyBAQCBw
dWJsaWM6CiAKICAgICBmbG9hdCBzY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVG
YWN0b3I7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogcHJp
dmF0ZToKICAgICBmbG9hdCBtX3NjYWxlRmFjdG9yIHsgMSB9OwpAQCAtMjQwMiw3ICsyNDEzLDgg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVl
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLSAg
ICBleHBsaWNpdCBGbHVzaENvbnRleHQoRmx1c2hJZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAg
Rmx1c2hDb250ZXh0KCkgPSBkZWZhdWx0OworICAgIEZsdXNoQ29udGV4dChGbHVzaElkZW50aWZp
ZXIgaWRlbnRpZmllcikKICAgICAgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICB7
CiAgICAgfQpAQCAtMjQxMCw1MCArMjQyMiwxMiBAQCBwdWJsaWM6CiAgICAgRmx1c2hJZGVudGlm
aWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KICAgICBib29s
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXIuaXNWYWxpZCgpOyB9CiAKLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgRmx1
c2hJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKIH07CiAKLS8vIEZJWE1FOiBUaGlzIHNob3VsZCBi
ZSByZWZhY3RvcmVkIHNvIHRoYXQgdGhlIGNvbW1hbmQgdG8gInN3aXRjaCB0byB0aGUgbmV4dCBp
dGVtIGJ1ZmZlciIKLS8vIGlzIG5vdCBpdHNlbGYgYSBkaXNwbGF5IGxpc3QgaXRlbS4KLWNsYXNz
IE1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1C
dWZmZXI7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIGV4
cGxpY2l0IE1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcihJdGVtQnVmZmVySWRlbnRpZmllciBp
ZGVudGlmaWVyKQotICAgICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gbV9pZGVudGlmaWVyOyB9Ci0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9p
ZGVudGlmaWVyLmlzVmFsaWQoKTsgfQotCi1wcml2YXRlOgotICAgIEl0ZW1CdWZmZXJJZGVudGlm
aWVyIG1faWRlbnRpZmllcjsKLX07Ci0KLWNsYXNzIE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRp
b25JbWFnZUJ1ZmZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZm
ZXI7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIGV4cGxp
Y2l0IE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgaWRlbnRpZmllcikKLSAgICAgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRp
ZmllcikKLSAgICB7Ci0gICAgfQotCi0gICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlk
ZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLSAgICBib29sIGlzVmFs
aWQoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXIuaXNWYWxpZCgpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKLX07Ci0KIHVz
aW5nIERpc3BsYXlMaXN0SXRlbSA9IFZhcmlhbnQKICAgICA8IEFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IKICAgICAsIEJlZ2luQ2xpcFRvRHJhd2luZ0NvbW1hbmRzCkBAIC0yNDkwLDggKzI0NjQsNiBA
QCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBWYXJpYW50CiAgICAgLCBGaWxsUm91bmRlZFJlY3QK
ICAgICAsIEZsdXNoQ29udGV4dAogICAgICwgR2V0UGl4ZWxCdWZmZXIKLSAgICAsIE1ldGFDb21t
YW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcgotICAgICwgTWV0YUNvbW1hbmRDaGFuZ2VJ
dGVtQnVmZmVyCiAgICAgLCBQdXRQaXhlbEJ1ZmZlcgogICAgICwgUmVzdG9yZQogICAgICwgUm90
YXRlCkBAIC0yNDk5LDcgKzI0NzEsNiBAQCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBWYXJpYW50
CiAgICAgLCBTY2FsZQogICAgICwgU2V0Q1RNCiAgICAgLCBTZXRJbmxpbmVGaWxsQ29sb3IKLSAg
ICAsIFNldElubGluZUZpbGxHcmFkaWVudAogICAgICwgU2V0SW5saW5lU3Ryb2tlQ29sb3IKICAg
ICAsIFNldExpbmVDYXAKICAgICAsIFNldExpbmVEYXNoCkBAIC0yNTUzLDcgKzI1MjQsNiBAQCB0
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZT4gewogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2NhbGUsCiAgICAgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRDVE0sCiAgICAgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudCwKICAgICBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvciwKICAgICBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yLAogICAgIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzLApAQCAtMjU5Nyw4ICsyNTY3LDYg
QEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU+IHsKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxQYXRoLAog
ICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbEVsbGlwc2UsCiAgICAgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGbHVzaENvbnRleHQsCi0gICAgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VC
dWZmZXIsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpNZXRhQ29tbWFuZENo
YW5nZUl0ZW1CdWZmZXIsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpHZXRQ
aXhlbEJ1ZmZlciwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlB1dFBpeGVs
QnVmZmVyLAogI2lmIEVOQUJMRShWSURFTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcAppbmRleCBmOWJmMTkxZWU2Mzg5ZjAxZDliNWEyMTAyNTNjZDAwYjAzMDE4NTQw
Li41NDU2MTRkMGExMzlmNjcyNjkyYjU1OGFiOGQxMTY3NWU4YjA1OGVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCkBAIC04Miw3ICs4Miw2IEBAIHN0YXRpYyBi
b29sIGNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZUNoYW5nZSYgY2hhCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlj
a25lc3NDaGFuZ2UsCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNo
YW5nZSwKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSwKLSAg
ICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSwKICAgICB9Owog
CiAgICAgaWYgKGNoYW5nZUZsYWdzICE9IChjaGFuZ2VGbGFncyAmIGlubGluZVN0YXRlQ2hhbmdl
RmxhZ3MpKQpAQCAtOTQsMTAgKzkzLDYgQEAgc3RhdGljIGJvb2wgY29udGFpbnNPbmx5SW5saW5l
U3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGEKICAgICBp
ZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNo
YW5nZSkgJiYgIWNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKQotICAgICAgICAmJiAoIWNo
YW5nZXMubV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgIVNldElubGluZUZpbGxHcmFkaWVudDo6aXNJ
bmxpbmUoKmNoYW5nZXMubV9zdGF0ZS5maWxsR3JhZGllbnQpKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEyNyw5ICsxMjIsNiBAQCB2b2lkIFJl
Y29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2UmIGNoYW5nZXMsCiAKICAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCiAgICAgICAgIGFwcGVuZDxTZXRJbmxpbmVG
aWxsQ29sb3I+KCpjaGFuZ2VzLm1fc3RhdGUuZmlsbENvbG9yLnRyeUdldEFzU1JHQkFCeXRlcygp
KTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
RmlsbEdyYWRpZW50Q2hhbmdlKSkKLSAgICAgICAgYXBwZW5kPFNldElubGluZUZpbGxHcmFkaWVu
dD4oKmNoYW5nZXMubV9zdGF0ZS5maWxsR3JhZGllbnQsIGNoYW5nZXMubV9zdGF0ZS5maWxsR3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybSk7CiB9CiAKIGJvb2wgUmVjb3JkZXI6OmNhbkFwcGVuZEl0ZW1P
ZlR5cGUoSXRlbVR5cGUgdHlwZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oCmluZGV4IGE1YWQzNjZkNGRjZDk5ZDg0M2UwYmJhMDY5NWVkN2QyNDUzNzJiYmUuLjAw
YmVkZmVjODM5ZWFkMTc5MjE4MTI2MWM2YTFkMjc1MDQyNmQ3ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29y
ZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMTIyLDcgKzEyMiw3IEBAIHByaXZhdGU6CiAjZW5k
aWYKIAogICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKLSAg
ICB2b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVm
ZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29u
c3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICB2b2lk
IGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxv
YXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKIAogICAgIHZv
aWQgZHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgZmluYWw7CiAgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2Um
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZp
bmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCmluZGV4IGNkM2Qx
MGQyNzc1NTU5ZTk5Mzg1MGQ0MmM1MjEyZGM3NzU1MjQ5MjEuLjU4YzFjMDRmNjNjZTE0NjIwOWMw
ZDg3YWQ2NjMwMDY0MGVkYTMxYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBs
YXllci5jcHAKQEAgLTIyNiwxMyArMjI2LDYgQEAgUmVwbGF5UmVzdWx0IFJlcGxheWVyOjpyZXBs
YXkoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgYm9vbCB0cmFja1JlcGxheUxpc3QKIAog
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgImFwcGx5aW5n
ICIgPDwgaSsrIDw8ICIgIiA8PCBpdGVtKTsKIAotICAgICAgICBpZiAoaXRlbS5pczxNZXRhQ29t
bWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI+KCkpIHsKLSAgICAgICAgICAgIHJlc3Vs
dC5udW1iZXJPZkJ5dGVzUmVhZCArPSBpdGVtU2l6ZUluQnVmZmVyOwotICAgICAgICAgICAgcmVz
dWx0LnJlYXNvbkZvclN0b3BwaW5nID0gU3RvcFJlcGxheVJlYXNvbjo6Q2hhbmdlRGVzdGluYXRp
b25JbWFnZUJ1ZmZlcjsKLSAgICAgICAgICAgIHJlc3VsdC5uZXh0RGVzdGluYXRpb25JbWFnZUJ1
ZmZlciA9IGl0ZW0uZ2V0PE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcj4o
KS5pZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCiAgICAgICAg
IGlmIChhdXRvIFtyZWFzb25Gb3JTdG9wcGluZywgbWlzc2luZ0NhY2hlZFJlc291cmNlSWRlbnRp
Zmllcl0gPSBhcHBseUl0ZW0oaXRlbSk7IHJlYXNvbkZvclN0b3BwaW5nKSB7CiAgICAgICAgICAg
ICByZXN1bHQucmVhc29uRm9yU3RvcHBpbmcgPSAqcmVhc29uRm9yU3RvcHBpbmc7CiAgICAgICAg
ICAgICByZXN1bHQubWlzc2luZ0NhY2hlZFJlc291cmNlSWRlbnRpZmllciA9IFdURk1vdmUobWlz
c2luZ0NhY2hlZFJlc291cmNlSWRlbnRpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKaW5kZXggNzNkY2M4MDc2M2Y4ZGFkZjFmZDVhNWU0MjA3NGRkOThiYmU2NTJiNC4uZjll
ODEzMDQ2M2RmZDQ4ZTYwOTI2Njg5MTBkMDY3NDc3ZTJjMGJjMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcApAQCAtMzExMiwxMSArMzExMiw2IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IEludGVybmFsczo6c2V0RWxlbWVudFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KEVsZW1lbnQmIGVs
ZW1lbnQsCiAgICAgaWYgKCFlbGVtZW50LnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgIGlmIChpczxIVE1MQ2FudmFzRWxl
bWVudD4oZWxlbWVudCkpIHsKLSAgICAgICAgZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGVs
ZW1lbnQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGlzVHJhY2tpbmdSZXBsYXkpOwotICAg
ICAgICByZXR1cm4geyB9OwotICAgIH0KLQogICAgIGlmICghZWxlbWVudC5yZW5kZXJlcigpLT5o
YXNMYXllcigpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9y
IH07CiAKQEAgLTMxNDMsOSArMzEzOCw2IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxz
OjpkaXNwbGF5TGlzdEZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgdW5zaWduZWQKICAgICBp
ZiAoZmxhZ3MgJiBESVNQTEFZX0xJU1RfSU5DTFVERVNfUExBVEZPUk1fT1BFUkFUSU9OUykKICAg
ICAgICAgZGlzcGxheUxpc3RGbGFncyB8PSBEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZzo6SW5jbHVk
ZXNQbGF0Zm9ybU9wZXJhdGlvbnM7CiAKLSAgICBpZiAoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KGVs
ZW1lbnQpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGVsZW1l
bnQpLmRpc3BsYXlMaXN0QXNUZXh0KGRpc3BsYXlMaXN0RmxhZ3MpOwotCiAgICAgaWYgKCFlbGVt
ZW50LnJlbmRlcmVyKCktPmhhc0xheWVyKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkQWNjZXNzRXJyb3IgfTsKIApAQCAtMzE3MSw5ICszMTYzLDYgQEAgRXhjZXB0aW9uT3I8
U3RyaW5nPiBJbnRlcm5hbHM6OnJlcGxheURpc3BsYXlMaXN0Rm9yRWxlbWVudChFbGVtZW50JiBl
bGVtZW50LCB1bnMKICAgICBpZiAoZmxhZ3MgJiBESVNQTEFZX0xJU1RfSU5DTFVERVNfUExBVEZP
Uk1fT1BFUkFUSU9OUykKICAgICAgICAgZGlzcGxheUxpc3RGbGFncyB8PSBEaXNwbGF5TGlzdDo6
QXNUZXh0RmxhZzo6SW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnM7CiAKLSAgICBpZiAoaXM8SFRN
TENhbnZhc0VsZW1lbnQ+KGVsZW1lbnQpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTENh
bnZhc0VsZW1lbnQ+KGVsZW1lbnQpLnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KGRpc3BsYXlMaXN0
RmxhZ3MpOwotCiAgICAgaWYgKCFlbGVtZW50LnJlbmRlcmVyKCktPmhhc0xheWVyKCkpCiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNl
L1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4IDc0ZmZhMzUyZTlk
ZTAwY2I4NjZmOTAyYzZlYWJkZWFhZGE2OWNmODYuLmVlMWE4ZjQ4NDE0MTk5ZWIyZjdiYmQ4MjVl
ZjQyZTE1NTIzZWIyYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMt
aW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0
LnhjZmlsZWxpc3QKQEAgLTIwLDYgKzIwLDcgQEAgJChKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hF
QURFUlNfRElSKS9tb2RlbHMucHkKICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJ
UikveHhkLnBsCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvR1BVUHJvY2Vzcy5t
ZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHQubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgogJChQ
Uk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tYWMvY29tLmFwcGxlLldlYktpdC5HUFVQcm9jZXNzLnNi
LmluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2Zp
bGVsaXN0IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApp
bmRleCBmNGY4YWMyNTdkMTU1ZTFmZTZmNjE2N2FlNDNjOWNlNTc1YTFlYmU5Li5mMGE2MjBjMjA3
NjI2ZjE1ZjYzMTY2NDJkYTkyMzQwZTdlOWViNmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvRGVy
aXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKQEAgLTIwOSw2ICsyMDksOSBAQCAkKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTE1lc3NhZ2VzUmVwbAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdDIvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHlNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5TWVzc2FnZXNSZXBsaWVz
LmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUdy
YXBoaWNzQ29udGV4dE1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL1JlbW90ZUdyYXBoaWNzQ29udGV4dE1lc3NhZ2VzUmVwbGllcy5oCiskKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVHcmFwaGljc0Nv
bnRleHRNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZURlY29kZXJBVkZNYW5hZ2VyTWVzc2FnZVJlY2VpdmVy
LmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3Rl
SW1hZ2VEZWNvZGVyQVZGTWFuYWdlck1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlRGVjb2RlckFWRk1hbmFnZXJNZXNzYWdl
c1JlcGxpZXMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtl
IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGMzMTQ3NDZjMmNlODA1
ZmZkYjk5MDI5MWRiODY3YjI5ZmQyYmVhMTIuLmU1NjdjMzYzNzIzZDE3OThmODc2MzVmY2U4NDNh
Y2Q5YWNjY2VhMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFr
ZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTI0OCw2ICsyNDgs
NyBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKIAlQbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3Mg
XAogCUdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBcCiAJR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kIFwKKwlHUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dCBcCiAJR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTCBcCiAJR1BVUHJvY2Vzcy93ZWJydGMvTGliV2ViUlRDQ29kZWNzUHJveHkgXAog
CUdQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwCmluZGV4IDg1Y2E4OGY3YTk4MjQ2MjYyYzMxYTdmYjQxNzc5OTUwNTNlNDlj
ZWUuLjY2OTk5MGJlYzk3ODY2OGJlZmMzY2JjOTM3MGE4MjViY2Q3MTUyZTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5j
cHAKQEAgLTQ3NCwxMCArNDc0LDEwIEBAIFJlbW90ZUltYWdlRGVjb2RlckFWRlByb3h5JiBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjppbWFnZURlY29kZXJBVkZQcm94eSgpCiB9CiAjZW5kaWYK
IAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5k
KFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJiBjcmVhdGlvblBhcmFt
ZXRlcnMpCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0Jh
Y2tlbmQoUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmIGNyZWF0aW9u
UGFyYW1ldGVycywgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiYgc3RyZWFtQnVmZmVyKQog
ewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWFwLmVuc3Vy
ZShjcmVhdGlvblBhcmFtZXRlcnMuaWRlbnRpZmllciwgWyZdKCkgewotICAgICAgICByZXR1cm4g
SVBDOjpTY29wZWRBY3RpdmVNZXNzYWdlUmVjZWl2ZVF1ZXVlIHsgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKGNyZWF0aW9uUGFyYW1ldGVycykpIH07CisgICAg
ICAgIHJldHVybiBJUEM6OlNjb3BlZEFjdGl2ZU1lc3NhZ2VSZWNlaXZlUXVldWUgeyBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoY3JlYXRpb25QYXJhbWV0ZXJz
KSwgV1RGTW92ZShzdHJlYW1CdWZmZXIpKSB9OwogICAgIH0pOwogICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCAwNWE1MDVm
ZWUzMjkzNzhiMTMwYTljOTk3MzI2MDZiZTIwYjQ4N2M4Li44MGQyMWRlZGViZWVhYTEzYmQwODM1
NTVmNmNmY2M2YzExZjJiN2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTE3OCw3ICsxNzgsNyBAQCBwcml2YXRl
OgogICAgIFJlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyJiBtZWRpYVJlY29yZGVyTWFuYWdlcigp
OwogI2VuZGlmCiAKLSAgICB2b2lkIGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVtb3RlUmVuZGVy
aW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmKTsKKyAgICB2b2lkIGNyZWF0ZVJlbmRlcmlu
Z0JhY2tlbmQoUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmLCBJUEM6
OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJik7CiAgICAgdm9pZCByZWxlYXNlUmVuZGVyaW5nQmFj
a2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiAKICNpZiBFTkFCTEUoV0VCR0wpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IGZlNDhjYTIwYmEwODk1YWI4YWY3NGU5NjI2
NzRlZjFiM2RkZTg3ZmQuLmMxYmY4MDE5Y2VhYjQxZjc5YTZmNWFkZWUxZmE4NjE2ZTIwNWViMGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0yMyw3ICsyMyw3IEBACiAjaWYgRU5B
QkxFKEdQVV9QUk9DRVNTKQogCiBtZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
IFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKLSAgICB2b2lkIENyZWF0ZVJlbmRlcmluZ0JhY2tlbmQo
c3RydWN0IFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyBj
cmVhdGlvblBhcmFtZXRlcnMpCisgICAgdm9pZCBDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKHN0cnVj
dCBXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMgY3JlYXRp
b25QYXJhbWV0ZXJzLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXIgc3RyZWFtQnVmZmVyKQog
ICAgIHZvaWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKICNpZiBFTkFCTEUoV0VCR0wp
CiAgICAgdm9pZCBDcmVhdGVHcmFwaGljc0NvbnRleHRHTChzdHJ1Y3QgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIFdlYktpdDo6R3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyIGdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgV2ViS2l0OjpSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciwgSVBDOjpTdHJl
YW1Db25uZWN0aW9uQnVmZmVyIHN0cmVhbSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9jb2NvYS9HUFVQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvY29jb2EvR1BVUHJvY2Vzc0NvY29hLm1tCmluZGV4IDJmOWNhMTg3ZjMwMmU3MjUzYzA2Zjkz
ZDQ2NmY4MTNkZTg3MDMzZTMuLjlhOTFhZDJlNzg2NTVmNjhhYjZhZmYyNTIzYjQ4YWEwYjM0YWVl
ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9jb2NvYS9HUFVQcm9jZXNz
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2NvY29hL0dQVVByb2Nlc3ND
b2NvYS5tbQpAQCAtNTEsMTAgKzUxLDcgQEAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gR1BVUHJv
Y2Vzczo6YWRkaXRpb25hbFN0YXRlRm9yRGlhZ25vc3RpY1JlcG9ydCgpIGNvbnN0CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGF1dG8gc3RhdGVJbmZvID0gYWRvcHRO
UyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6YmFja2VuZE1h
cC5zaXplKCldKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgaWRlbnRpZmllckFuZEJhY2tlbmQg
OiBiYWNrZW5kTWFwKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgW2JhY2tlbmRJZGVudGlmaWVy
LCBiYWNrZW5kXSA9IGlkZW50aWZpZXJBbmRCYWNrZW5kOwotICAgICAgICAgICAgICAgIFtzdGF0
ZUluZm8gc2V0T2JqZWN0OkAobmFtZShiYWNrZW5kLT5sYXN0S25vd25TdGF0ZSgpKSkgZm9yS2V5
OmJhY2tlbmRJZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKV07Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICAvLyBGSVhNRTogQWRkIHNvbWUgZGlhZ25vc3RpYyBzdGF0ZS4KICAgICAgICAgICAg
IFt3ZWJQcm9jZXNzQ29ubmVjdGlvbkluZm8gc2V0T2JqZWN0OnN0YXRlSW5mby5nZXQoKSBmb3JL
ZXk6d2ViUHJvY2Vzc0lkZW50aWZpZXIubG9nZ2luZ1N0cmluZygpXTsKICAgICAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvRGlzcGxheUxpc3RS
ZWFkZXJIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL0Rpc3Bs
YXlMaXN0UmVhZGVySGFuZGxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRm
ZjM4OGE5MTc5YzJjYTczMDk2YmQ5MjU1Yjk3YjZkYmU5MDEzMy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEaXNw
bGF5TGlzdFJlYWRlckhhbmRsZS5oIgotCi0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGlj
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0
ZDo6b3B0aW9uYWw8c2l6ZV90PiBEaXNwbGF5TGlzdFJlYWRlckhhbmRsZTo6YWR2YW5jZShzaXpl
X3QgYW1vdW50KQotewotICAgIGF1dG8gcHJldmlvdXNVbnJlYWRCeXRlcyA9IGhlYWRlcigpLnVu
cmVhZEJ5dGVzLmV4Y2hhbmdlU3ViKGFtb3VudCk7Ci0gICAgaWYgKFVOTElLRUxZKHByZXZpb3Vz
VW5yZWFkQnl0ZXMgPCBhbW91bnQpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAg
IHJldHVybiBwcmV2aW91c1VucmVhZEJ5dGVzIC0gYW1vdW50OwotfQotCi1zdGQ6OnVuaXF1ZV9w
dHI8RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0PiBEaXNwbGF5TGlzdFJlYWRlckhhbmRsZTo6ZGlz
cGxheUxpc3RGb3JSZWFkaW5nKHNpemVfdCBvZmZzZXQsIHNpemVfdCBjYXBhY2l0eSwgRGlzcGxh
eUxpc3Q6Okl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50JiBjbGllbnQpIGNvbnN0Ci17Ci0gICAgYXV0
byBjaGVja2VkRXh0ZW50ID0gY2hlY2tlZFN1bTxzaXplX3Q+KG9mZnNldCwgY2FwYWNpdHkpOwot
ICAgIGlmIChVTkxJS0VMWShjaGVja2VkRXh0ZW50Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2Vk
RXh0ZW50ID4gc2hhcmVkTWVtb3J5KCkuc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBhdXRvIGRpc3BsYXlMaXN0ID0gbWFrZVVuaXF1ZTxEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3Q+KERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlcyB7eyBpZGVudGlmaWVyKCksIGRh
dGEoKSArIG9mZnNldCwgY2FwYWNpdHkgfX0pOwotICAgIGRpc3BsYXlMaXN0LT5zZXRJdGVtQnVm
ZmVyUmVhZGluZ0NsaWVudCgmY2xpZW50KTsKLSAgICByZXR1cm4gZGlzcGxheUxpc3Q7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL0Rpc3BsYXlMaXN0UmVhZGVySGFuZGxlLmggYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDg1YjM4ZDdlOTkyOWNkY2Q1NGYwNWQzZDFmNTBjMTFiZDU2Yjg3
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgiCi0jaW5jbHVkZSA8d3RmL0V4cGVj
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlIDogcHVibGljIFNoYXJlZERpc3BsYXlM
aXN0SGFuZGxlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEaXNwbGF5TGlzdFJlYWRlckhh
bmRsZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHN0YXRpYyBSZWZQ
dHI8RGlzcGxheUxpc3RSZWFkZXJIYW5kbGU+IGNyZWF0ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllciwgUmVmPFNoYXJlZE1lbW9yeT4mJiBzaGFy
ZWRNZW1vcnkpCi0gICAgewotICAgICAgICBpZiAoc2hhcmVkTWVtb3J5LT5zaXplKCkgPD0gaGVh
ZGVyU2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUoaWRlbnRpZmllciwgV1RGTW92ZShz
aGFyZWRNZW1vcnkpKSk7Ci0gICAgfQotCi0gICAgc3RkOjpvcHRpb25hbDxzaXplX3Q+IGFkdmFu
Y2Uoc2l6ZV90IGFtb3VudCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEaXNwbGF5TGlzdD4gZGlzcGxheUxpc3RGb3JSZWFkaW5nKHNpemVfdCBvZmZzZXQsIHNp
emVfdCBjYXBhY2l0eSwgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJSZWFkaW5nQ2xp
ZW50JikgY29uc3Q7Ci0KLSAgICB2b2lkIHN0YXJ0V2FpdGluZygpCi0gICAgewotICAgICAgICBo
ZWFkZXIoKS53YWl0aW5nU3RhdHVzLnN0b3JlKHN0YXRpY19jYXN0PFNoYXJlZERpc3BsYXlMaXN0
SGFuZGxlOjpXYWl0aW5nU3RhdHVzU3RvcmFnZVR5cGU+KFNoYXJlZERpc3BsYXlMaXN0SGFuZGxl
OjpXYWl0aW5nU3RhdHVzOjpXYWl0aW5nKSk7Ci0gICAgfQotCi0gICAgZW51bSBjbGFzcyBTdG9w
V2FpdGluZ0ZhaWx1cmVSZWFzb24gOiB1aW50OF90IHsgSW52YWxpZFdhaXRpbmdTdGF0dXMgfTsK
LSAgICBFeHBlY3RlZDxzdGQ6Om9wdGlvbmFsPFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpSZXN1
bWVSZWFkaW5nSW5mb3JtYXRpb24+LCBTdG9wV2FpdGluZ0ZhaWx1cmVSZWFzb24+IHN0b3BXYWl0
aW5nKCkKLSAgICB7Ci0gICAgICAgIGF1dG8mIGhlYWRlciA9IHRoaXMtPmhlYWRlcigpOwotICAg
ICAgICBhdXRvIHByZXZpb3VzU3RhdHVzID0gaGVhZGVyLndhaXRpbmdTdGF0dXMuZXhjaGFuZ2Uo
c3RhdGljX2Nhc3Q8U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OldhaXRpbmdTdGF0dXNTdG9yYWdl
VHlwZT4oU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OldhaXRpbmdTdGF0dXM6Ok5vdFdhaXRpbmcp
KTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkRW51bTxTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6V2Fp
dGluZ1N0YXR1cz4ocHJldmlvdXNTdGF0dXMpKQotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKFN0b3BXYWl0aW5nRmFpbHVyZVJlYXNvbjo6SW52YWxpZFdhaXRpbmdTdGF0dXMpOwot
Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6V2FpdGlu
Z1N0YXR1cz4ocHJldmlvdXNTdGF0dXMpID09IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpXYWl0
aW5nU3RhdHVzOjpSZXN1bWluZykKLSAgICAgICAgICAgIHJldHVybiB7IGhlYWRlci5yZXN1bWVS
ZWFkaW5nSW5mbyB9OwotCi0gICAgICAgIHJldHVybiB7IHN0ZDo6bnVsbG9wdCB9OwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBEaXNwbGF5TGlzdFJlYWRlckhhbmRsZShXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllciwgUmVmPFNoYXJlZE1lbW9yeT4m
JiBzaGFyZWRNZW1vcnkpCi0gICAgICAgIDogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoaWRlbnRp
ZmllciwgV1RGTW92ZShzaGFyZWRNZW1vcnkpKQotICAgIHsKLSAgICB9Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQzMTFjNTNi
MjEwZGI0MzFkYzk5ODRlMDRlM2JhNTZjMTRhMDZjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHQuY3BwCkBA
IC0wLDAgKzEsNDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlJlbW90ZUdyYXBoaWNzQ29u
dGV4dE1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK1JlbW90ZUdyYXBoaWNzQ29udGV4dDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0KElt
YWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgcmVuZGVyaW5n
QmFja2VuZCkKKyAgICA6IG1faW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpCisgICAgLCBtX2ltYWdl
QnVmZmVySWRlbnRpZmllcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIo
KSkKKyAgICAsIG1fcmVuZGVyaW5nQmFja2VuZChyZW5kZXJpbmdCYWNrZW5kKQoreworfQorCitS
ZW1vdGVSZXNvdXJjZUNhY2hlJiBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OnJlc291cmNlQ2FjaGUo
KQoreworICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmQtPnJlbW90ZVJlc291cmNlQ2FjaGUo
KTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmRyYXdpbmdD
b250ZXh0KCkKK3sKKyAgICByZXR1cm4gbV9tYXNrSW1hZ2VCdWZmZXIgPyBtX21hc2tJbWFnZUJ1
ZmZlci0+Y29udGV4dCgpIDogbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpOworfQorCit2b2lkIFJl
bW90ZUdyYXBoaWNzQ29udGV4dDo6c3RhcnRMaXN0ZW5pbmdGb3JJUEMoKQoreworICAgIEFTU0VS
VCghbV9pc0xpc3RlbmluZ0ZvcklQQyk7CisgICAgbV9pc0xpc3RlbmluZ0ZvcklQQyA9IHRydWU7
CisgICAgLy8gRklYTUU6IENhbiB3ZSBhdm9pZCBzeW5jaHJvbm91cyBkaXNwYXRjaCBoZXJlIGJ5
IGFkanVzdGluZyB0aGUgYXNzZXJ0aW9uIGluIGBDb25uZWN0aW9uOjplbnF1ZXVlTWF0Y2hpbmdN
ZXNzYWdlc1RvTWVzc2FnZVJlY2VpdmVRdWV1ZWA/CisgICAgY2FsbE9uTWFpblRocmVhZEFuZFdh
aXQoWyZdIHsKKyAgICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zdHJlYW1Db25uZWN0aW9uKCku
c3RhcnRSZWNlaXZpbmdNZXNzYWdlcygqdGhpcywgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJ
bnQ2NCgpKTsKKyAgICB9KTsKKyAgICBtX3JlbmRlcmluZ0JhY2tlbmQtPmRpZEJlZ2luTGlzdGVu
aW5nRm9ySVBDKCp0aGlzKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OnN0b3BM
aXN0ZW5pbmdGb3JJUEMoKQoreworICAgIGlmICghbV9pc0xpc3RlbmluZ0ZvcklQQykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zdHJlYW1Db25uZWN0aW9uKCku
c3RvcFJlY2VpdmluZ01lc3NhZ2VzKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKSk7
CisgICAgbV9pc0xpc3RlbmluZ0ZvcklQQyA9IGZhbHNlOworfQorCit2b2lkIFJlbW90ZUdyYXBo
aWNzQ29udGV4dDo6c2F2ZShEaXNwbGF5TGlzdDo6U2F2ZSYmIGl0ZW0pCit7CisgICAgYXBwbHko
V1RGTW92ZShpdGVtKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpyZXN0b3Jl
KERpc3BsYXlMaXN0OjpSZXN0b3JlJiYgaXRlbSkKK3sKKyAgICBhcHBseShXVEZNb3ZlKGl0ZW0p
KTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShEaXNwbGF5TGlz
dDo6VHJhbnNsYXRlJiYgaXRlbSkKK3sKKyAgICBhcHBseShXVEZNb3ZlKGl0ZW0pKTsKK30KKwor
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShEaXNwbGF5TGlzdDo6Um90YXRlJiYg
aXRlbSkKK3sKKyAgICBhcHBseShXVEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHQ6OnNjYWxlKERpc3BsYXlMaXN0OjpTY2FsZSYmIGl0ZW0pCit7CisgICAgYXBw
bHkoV1RGTW92ZShpdGVtKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpzZXRD
VE0oRGlzcGxheUxpc3Q6OlNldENUTSYmIGl0ZW0pCit7CisgICAgYXBwbHkoV1RGTW92ZShpdGVt
KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRlbmF0ZUNUTShEaXNw
bGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE0mJiBpdGVtKQoreworICAgIGFwcGx5KFdURk1vdmUoaXRl
bSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6c2V0SW5saW5lRmlsbENvbG9y
KERpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3ImJiBpdGVtKQoreworICAgIGFwcGx5KFdU
Rk1vdmUoaXRlbSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6c2V0SW5saW5l
U3Ryb2tlQ29sb3IoRGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yJiYgaXRlbSkKK3sK
KyAgICBhcHBseShXVEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRl
eHQ6OnNldFN0cm9rZVRoaWNrbmVzcyhEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNzJiYg
aXRlbSkKK3sKKyAgICBhcHBseShXVEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHQ6OnNldFN0YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSYmIGl0ZW0pCit7Cisg
ICAgYXV0byBzdHJva2VQYXR0ZXJuSW1hZ2VJZGVudGlmaWVyID0gaXRlbS5zdHJva2VQYXR0ZXJu
SW1hZ2VJZGVudGlmaWVyKCk7CisgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBzdHJva2VQYXR0ZXJu
SW1hZ2U7CisgICAgaWYgKHN0cm9rZVBhdHRlcm5JbWFnZUlkZW50aWZpZXIpCisgICAgICAgIHN0
cm9rZVBhdHRlcm5JbWFnZSA9IHJlc291cmNlQ2FjaGUoKS5jYWNoZWROYXRpdmVJbWFnZShzdHJv
a2VQYXR0ZXJuSW1hZ2VJZGVudGlmaWVyKTsKKworICAgIGF1dG8gZmlsbFBhdHRlcm5JbWFnZUlk
ZW50aWZpZXIgPSBpdGVtLmZpbGxQYXR0ZXJuSW1hZ2VJZGVudGlmaWVyKCk7CisgICAgUmVmUHRy
PE5hdGl2ZUltYWdlPiBmaWxsUGF0dGVybkltYWdlOworICAgIGlmIChmaWxsUGF0dGVybkltYWdl
SWRlbnRpZmllcikKKyAgICAgICAgZmlsbFBhdHRlcm5JbWFnZSA9IHJlc291cmNlQ2FjaGUoKS5j
YWNoZWROYXRpdmVJbWFnZShmaWxsUGF0dGVybkltYWdlSWRlbnRpZmllcik7CisKKyAgICBpdGVt
LmFwcGx5KGRyYXdpbmdDb250ZXh0KCksIHN0cm9rZVBhdHRlcm5JbWFnZS5nZXQoKSwgZmlsbFBh
dHRlcm5JbWFnZS5nZXQoKSk7CisKKyAgICBpZiAoc3Ryb2tlUGF0dGVybkltYWdlKQorICAgICAg
ICByZXNvdXJjZUNhY2hlKCkucmVjb3JkUmVzb3VyY2VVc2Uoc3Ryb2tlUGF0dGVybkltYWdlSWRl
bnRpZmllcik7CisKKyAgICBpZiAoZmlsbFBhdHRlcm5JbWFnZSkKKyAgICAgICAgcmVzb3VyY2VD
YWNoZSgpLnJlY29yZFJlc291cmNlVXNlKGZpbGxQYXR0ZXJuSW1hZ2VJZGVudGlmaWVyKTsKK30K
Kwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoRGlzcGxheUxpc3Q6OlNl
dExpbmVDYXAmJiBpdGVtKQoreworICAgIGFwcGx5KFdURk1vdmUoaXRlbSkpOworfQorCit2b2lk
IFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goRGlzcGxheUxpc3Q6OlNldExpbmVE
YXNoJiYgaXRlbSkKK3sKKyAgICBhcHBseShXVEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKERpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbiYm
IGl0ZW0pCit7CisgICAgYXBwbHkoV1RGTW92ZShpdGVtKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KERpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0JiYg
aXRlbSkKK3sKKyAgICBhcHBseShXVEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KERpc3BsYXlMaXN0OjpDbGVhclNoYWRvdyYmIGl0ZW0p
Cit7CisgICAgYXBwbHkoV1RGTW92ZShpdGVtKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0OjpjbGlwKERpc3BsYXlMaXN0OjpDbGlwJiYgaXRlbSkKK3sKKyAgICBhcHBseShXVEZN
b3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoRGlz
cGxheUxpc3Q6OkNsaXBPdXQmJiBpdGVtKQoreworICAgIGFwcGx5KFdURk1vdmUoaXRlbSkpOwor
fQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoRGlzcGxh
eUxpc3Q6OkNsaXBUb0ltYWdlQnVmZmVyJiYgaXRlbSkKK3sKKyAgICBhdXRvIGltYWdlQnVmZmVy
SWRlbnRpZmllciA9IGl0ZW0uaW1hZ2VCdWZmZXJJZGVudGlmaWVyKCk7CisgICAgUmVmUHRyIGlt
YWdlQnVmZmVyID0gcmVzb3VyY2VDYWNoZSgpLmNhY2hlZEltYWdlQnVmZmVyKGltYWdlQnVmZmVy
SWRlbnRpZmllcik7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikgeworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGl0ZW0uYXBwbHkoZHJh
d2luZ0NvbnRleHQoKSwgKmltYWdlQnVmZmVyKTsKKyAgICByZXNvdXJjZUNhY2hlKCkucmVjb3Jk
UmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKwordm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHQ6OmNsaXBPdXRUb1BhdGgoRGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGgmJiBp
dGVtKQoreworICAgIGFwcGx5KFdURk1vdmUoaXRlbSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBo
aWNzQ29udGV4dDo6Y2xpcFBhdGgoRGlzcGxheUxpc3Q6OkNsaXBQYXRoJiYgaXRlbSkKK3sKKyAg
ICBhcHBseShXVEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6
OmJlZ2luQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKERpc3BsYXlMaXN0OjpCZWdpbkNsaXBUb0RyYXdp
bmdDb21tYW5kcyYmIGl0ZW0pCit7CisgICAgbV9tYXNrSW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihpdGVtLmRlc3RpbmF0aW9uKCkuc2l6ZSgpLCBpdGVt
LmNvbG9yU3BhY2UoKSwgZHJhd2luZ0NvbnRleHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0OjplbmRDbGlwVG9EcmF3aW5nQ29tbWFuZHMoRGlzcGxheUxpc3Q6OkVuZENsaXBU
b0RyYXdpbmdDb21tYW5kcyYmIGl0ZW0pCit7CisgICAgYXV0byBtYXNrSW1hZ2VCdWZmZXIgPSBz
dGQ6OmV4Y2hhbmdlKG1fbWFza0ltYWdlQnVmZmVyLCB7IH0pOworICAgIGlmICghbWFza0ltYWdl
QnVmZmVyKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgZHJhd2luZ0NvbnRleHQoKS5jbGlwVG9JbWFnZUJ1ZmZlcigqbWFza0lt
YWdlQnVmZmVyLCBpdGVtLmRlc3RpbmF0aW9uKCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNz
Q29udGV4dDo6ZHJhd0dseXBocyhEaXNwbGF5TGlzdDo6RHJhd0dseXBocyYmIGl0ZW0pCit7Cisg
ICAgYXV0byBmb250SWRlbnRpZmllciA9IGl0ZW0uZm9udElkZW50aWZpZXIoKTsKKyAgICBSZWZQ
dHIgZm9udCA9IHJlc291cmNlQ2FjaGUoKS5jYWNoZWRGb250KGZvbnRJZGVudGlmaWVyKTsKKyAg
ICBpZiAoIWZvbnQpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpdGVtLmFwcGx5KGRyYXdpbmdDb250ZXh0KCksICpmb250KTsK
KyAgICByZXNvdXJjZUNhY2hlKCkucmVjb3JkUmVzb3VyY2VVc2UoZm9udElkZW50aWZpZXIpOwor
fQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKERpc3BsYXlM
aXN0OjpEcmF3SW1hZ2VCdWZmZXImJiBpdGVtKQoreworICAgIGF1dG8gaW1hZ2VCdWZmZXJJZGVu
dGlmaWVyID0gaXRlbS5pbWFnZUJ1ZmZlcklkZW50aWZpZXIoKTsKKyAgICBSZWZQdHIgaW1hZ2VC
dWZmZXIgPSByZXNvdXJjZUNhY2hlKCkuY2FjaGVkSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaXRlbS5hcHBseShkcmF3aW5n
Q29udGV4dCgpLCAqaW1hZ2VCdWZmZXIpOworICAgIHJlc291cmNlQ2FjaGUoKS5yZWNvcmRSZXNv
dXJjZVVzZShpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNz
Q29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKERpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2UmJiBp
dGVtKQoreworICAgIGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gaXRlbS5pbWFnZUlkZW50aWZpZXIo
KTsKKyAgICBSZWZQdHIgaW1hZ2UgPSByZXNvdXJjZUNhY2hlKCkuY2FjaGVkTmF0aXZlSW1hZ2Uo
aW1hZ2VJZGVudGlmaWVyKTsKKyAgICBpZiAoIWltYWdlKSB7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaXRlbS5hcHBseShkcmF3
aW5nQ29udGV4dCgpLCAqaW1hZ2UpOworICAgIHJlc291cmNlQ2FjaGUoKS5yZWNvcmRSZXNvdXJj
ZVVzZShpbWFnZUlkZW50aWZpZXIpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6
ZHJhd1BhdHRlcm4oRGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuJiYgaXRlbSkKK3sKKyAgICBhdXRv
IGltYWdlSWRlbnRpZmllciA9IGl0ZW0uaW1hZ2VJZGVudGlmaWVyKCk7CisgICAgUmVmUHRyIGlt
YWdlID0gcmVzb3VyY2VDYWNoZSgpLmNhY2hlZE5hdGl2ZUltYWdlKGltYWdlSWRlbnRpZmllcik7
CisgICAgaWYgKCFpbWFnZSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGl0ZW0uYXBwbHkoZHJhd2luZ0NvbnRleHQoKSwgKmlt
YWdlKTsKKyAgICByZXNvdXJjZUNhY2hlKCkucmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VJZGVudGlm
aWVyKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoRGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXImJiBpdGVtKQoreworICAg
IGFwcGx5KFdURk1vdmUoaXRlbSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoRGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyJiYg
aXRlbSkKK3sKKyAgICBhcHBseShXVEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHQ6OmRyYXdSZWN0KERpc3BsYXlMaXN0OjpEcmF3UmVjdCYmIGl0ZW0pCit7Cisg
ICAgYXBwbHkoV1RGTW92ZShpdGVtKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZShEaXNwbGF5TGlzdDo6RHJhd0xpbmUmJiBpdGVtKQoreworICAgIGFwcGx5KFdU
Rk1vdmUoaXRlbSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVz
Rm9yVGV4dChEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCYmIGl0ZW0pCit7CisgICAgYXBw
bHkoV1RGTW92ZShpdGVtKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKERpc3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyJiYgaXRlbSkKK3sKKyAgICBhcHBseShXVEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKERpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZSYm
IGl0ZW0pCit7CisgICAgYXBwbHkoV1RGTW92ZShpdGVtKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0OjpkcmF3UGF0aChEaXNwbGF5TGlzdDo6RHJhd1BhdGgmJiBpdGVtKQorewor
ICAgIGFwcGx5KFdURk1vdmUoaXRlbSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZvY3VzUmluZ1BhdGgoRGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoJiYgaXRl
bSkKK3sKKyAgICBhcHBseShXVEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHQ6OmRyYXdGb2N1c1JpbmdSZWN0cyhEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1Jl
Y3RzJiYgaXRlbSkKK3sKKyAgICBhcHBseShXVEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KERpc3BsYXlMaXN0OjpGaWxsUmVjdCYmIGl0ZW0p
Cit7CisgICAgYXBwbHkoV1RGTW92ZShpdGVtKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdFdpdGhDb2xvcihEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3Im
JiBpdGVtKQoreworICAgIGFwcGx5KFdURk1vdmUoaXRlbSkpOworfQorCit2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoR3JhZGllbnQoRGlzcGxheUxpc3Q6OkZpbGxSZWN0
V2l0aEdyYWRpZW50JiYgaXRlbSkKK3sKKyAgICBhcHBseShXVEZNb3ZlKGl0ZW0pKTsKK30KKwor
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmZpbGxDb21wb3NpdGVkUmVjdChEaXNwbGF5TGlz
dDo6RmlsbENvbXBvc2l0ZWRSZWN0JiYgaXRlbSkKK3sKKyAgICBhcHBseShXVEZNb3ZlKGl0ZW0p
KTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChEaXNw
bGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0JiYgaXRlbSkKK3sKKyAgICBhcHBseShXVEZNb3ZlKGl0
ZW0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKERpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSYmIGl0ZW0pCit7Cisg
ICAgYXBwbHkoV1RGTW92ZShpdGVtKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
OjpmaWxsTGluZShEaXNwbGF5TGlzdDo6RmlsbExpbmUmJiBpdGVtKQoreworICAgIGFwcGx5KFdU
Rk1vdmUoaXRlbSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6ZmlsbEFyYyhE
aXNwbGF5TGlzdDo6RmlsbEFyYyYmIGl0ZW0pCit7CisgICAgYXBwbHkoV1RGTW92ZShpdGVtKSk7
Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpmaWxsUXVhZEN1cnZlKERpc3BsYXlM
aXN0OjpGaWxsUXVhZEN1cnZlJiYgaXRlbSkKK3sKKyAgICBhcHBseShXVEZNb3ZlKGl0ZW0pKTsK
K30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmZpbGxCZXppZXJDdXJ2ZShEaXNwbGF5
TGlzdDo6RmlsbEJlemllckN1cnZlJiYgaXRlbSkKK3sKKyAgICBhcHBseShXVEZNb3ZlKGl0ZW0p
KTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKERpc3BsYXlMaXN0
OjpGaWxsUGF0aCYmIGl0ZW0pCit7CisgICAgYXBwbHkoV1RGTW92ZShpdGVtKSk7Cit9CisKK3Zv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZShEaXNwbGF5TGlzdDo6RmlsbEVs
bGlwc2UmJiBpdGVtKQoreworICAgIGFwcGx5KFdURk1vdmUoaXRlbSkpOworfQorCit2b2lkIFJl
bW90ZUdyYXBoaWNzQ29udGV4dDo6Z2V0UGl4ZWxCdWZmZXIoRGlzcGxheUxpc3Q6OkdldFBpeGVs
QnVmZmVyJiYgaXRlbSkKK3sKKyAgICBtX3JlbmRlcmluZ0JhY2tlbmQtPnBvcHVsYXRlR2V0UGl4
ZWxCdWZmZXJTaGFyZWRNZW1vcnkobV9pbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoaXRlbS5v
dXRwdXRGb3JtYXQoKSwgaXRlbS5zcmNSZWN0KCkpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHQ6OnB1dFBpeGVsQnVmZmVyKERpc3BsYXlMaXN0OjpQdXRQaXhlbEJ1ZmZlciYmIGl0
ZW0pCit7CisgICAgbV9pbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoaXRlbS5waXhlbEJ1ZmZl
cigpLCBpdGVtLnNyY1JlY3QoKSwgaXRlbS5kZXN0UG9pbnQoKSwgaXRlbS5kZXN0Rm9ybWF0KCkp
OworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKERp
c3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWEmJiBpdGVtKQoreworICAgIG1fcmVuZGVyaW5n
QmFja2VuZC0+cGVyZm9ybVdpdGhNZWRpYVBsYXllck9uTWFpblRocmVhZChpdGVtLmlkZW50aWZp
ZXIoKSwgW2ltYWdlQnVmZmVyID0gbV9pbWFnZUJ1ZmZlci5jb3B5UmVmKCksIGRlc3RpbmF0aW9u
ID0gaXRlbS5kZXN0aW5hdGlvbigpXShNZWRpYVBsYXllciYgcGxheWVyKSB7CisgICAgICAgIC8v
IEl0IGlzIGN1cnJlbnRseSBub3Qgc2FmZSB0byBjYWxsIHBhaW50RnJhbWVGb3JNZWRpYSgpIG9m
ZiB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkucGFpbnRG
cmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgIH0pOworfQorCit2b2lkIFJl
bW90ZUdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdCYm
IGl0ZW0pCit7CisgICAgYXBwbHkoV1RGTW92ZShpdGVtKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VMaW5lKERpc3BsYXlMaXN0OjpTdHJva2VMaW5lJiYgaXRlbSkK
K3sKKyAgICBhcHBseShXVEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZUFyYyhEaXNwbGF5TGlzdDo6U3Ryb2tlQXJjJiYgaXRlbSkKK3sKKyAgICBh
cHBseShXVEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVF1YWRDdXJ2ZShEaXNwbGF5TGlzdDo6U3Ryb2tlUXVhZEN1cnZlJiYgaXRlbSkKK3sKKyAg
ICBhcHBseShXVEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZUJlemllckN1cnZlKERpc3BsYXlMaXN0OjpTdHJva2VCZXppZXJDdXJ2ZSYmIGl0ZW0p
Cit7CisgICAgYXBwbHkoV1RGTW92ZShpdGVtKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VQYXRoKERpc3BsYXlMaXN0OjpTdHJva2VQYXRoJiYgaXRlbSkKK3sKKyAg
ICBhcHBseShXVEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZUVsbGlwc2UoRGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2UmJiBpdGVtKQoreworICAg
IGFwcGx5KFdURk1vdmUoaXRlbSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6
Y2xlYXJSZWN0KERpc3BsYXlMaXN0OjpDbGVhclJlY3QmJiBpdGVtKQoreworICAgIGFwcGx5KFdU
Rk1vdmUoaXRlbSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJv
a2VQYXR0ZXJuKERpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm4mJiBpdGVtKQoreworICAg
IGFwcGx5KFdURk1vdmUoaXRlbSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6
YXBwbHlGaWxsUGF0dGVybihEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybiYmIGl0ZW0pCit7
CisgICAgYXBwbHkoV1RGTW92ZShpdGVtKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKERpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxl
RmFjdG9yJiYgaXRlbSkKK3sKKyAgICBhcHBseShXVEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHQ6OmZsdXNoQ29udGV4dChEaXNwbGF5TGlzdDo6Rmx1c2hDb250
ZXh0JiYgaXRlbSkKK3sKKyAgICBtX2ltYWdlQnVmZmVyLT5mbHVzaENvbnRleHQoKTsKKyAgICBt
X3JlbmRlcmluZ0JhY2tlbmQtPmRpZEZsdXNoKGl0ZW0uaWRlbnRpZmllcigpLCBtX2ltYWdlQnVm
ZmVySWRlbnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dC5o
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjVhMzZiNTczYTIyODRjMTJkMmJhMjUyY2Y5Yjk4ZTkzMTJhYzhiNDQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlR3JhcGhpY3NDb250ZXh0LmgKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkRlY29kZXIuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmgiCisjaW5jbHVkZSAiU3RyZWFtTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVk
ZSAiU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxp
c3RJdGVtcy5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ7CitjbGFzcyBSZW1vdGVSZXNvdXJjZUNhY2hlOworCitjbGFzcyBSZW1vdGVHcmFwaGlj
c0NvbnRleHQgOiBwdWJsaWMgSVBDOjpTdHJlYW1NZXNzYWdlUmVjZWl2ZXIsIHB1YmxpYyBDYW5N
YWtlV2Vha1B0cjxSZW1vdGVHcmFwaGljc0NvbnRleHQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPFJlbW90ZUdyYXBoaWNzQ29udGV4dD4gY3JlYXRlKFdlYkNvcmU6OkltYWdlQnVmZmVyJiBp
bWFnZUJ1ZmZlciwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgcmVuZGVyaW5nQmFja2VuZCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90ZUdyYXBoaWNzQ29udGV4dChp
bWFnZUJ1ZmZlciwgcmVuZGVyaW5nQmFja2VuZCkpOworICAgIH0KKworICAgIHZvaWQgc3RhcnRM
aXN0ZW5pbmdGb3JJUEMoKTsKKyAgICB2b2lkIHN0b3BMaXN0ZW5pbmdGb3JJUEMoKTsKKworICAg
IHZvaWQgc2F2ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZSYmKTsKKyAgICB2b2lkIHJlc3Rv
cmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmUmJik7CisgICAgdm9pZCB0cmFuc2xhdGUo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZSYmKTsKKyAgICB2b2lkIHJvdGF0ZShXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlJiYpOworICAgIHZvaWQgc2NhbGUoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNjYWxlJiYpOworICAgIHZvaWQgc2V0Q1RNKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRDVE0mJik7CisgICAgdm9pZCBjb25jYXRlbmF0ZUNUTShXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q29uY2F0ZW5hdGVDVE0mJik7CisgICAgdm9pZCBzZXRJbmxpbmVGaWxsQ29sb3IoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvciYmKTsKKyAgICB2b2lkIHNldElubGlu
ZVN0cm9rZUNvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvciYm
KTsKKyAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3Ryb2tlVGhpY2tuZXNzJiYpOworICAgIHZvaWQgc2V0U3RhdGUoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldFN0YXRlJiYpOworICAgIHZvaWQgc2V0TGluZUNhcChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0TGluZUNhcCYmKTsKKyAgICB2b2lkIHNldExpbmVEYXNoKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRMaW5lRGFzaCYmKTsKKyAgICB2b2lkIHNldExpbmVKb2luKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRMaW5lSm9pbiYmKTsKKyAgICB2b2lkIHNldE1pdGVyTGltaXQoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQmJik7CisgICAgdm9pZCBjbGVhclNoYWRvdyhXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3cmJik7CisgICAgdm9pZCBjbGlwKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDbGlwJiYpOworICAgIHZvaWQgY2xpcE91dChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q2xpcE91dCYmKTsKKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDbGlwVG9JbWFnZUJ1ZmZlciYmKTsKKyAgICB2b2lkIGNsaXBPdXRUb1BhdGgo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGgmJik7CisgICAgdm9pZCBjbGlwUGF0
aChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGgmJik7CisgICAgdm9pZCBiZWdpbkNsaXBU
b0RyYXdpbmdDb21tYW5kcyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5DbGlwVG9EcmF3aW5n
Q29tbWFuZHMmJik7CisgICAgdm9pZCBlbmRDbGlwVG9EcmF3aW5nQ29tbWFuZHMoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkVuZENsaXBUb0RyYXdpbmdDb21tYW5kcyYmKTsKKyAgICB2b2lkIGRyYXdH
bHlwaHMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHMmJik7CisgICAgdm9pZCBkcmF3
SW1hZ2VCdWZmZXIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlciYmKTsKKyAg
ICB2b2lkIGRyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUlt
YWdlJiYpOworICAgIHZvaWQgZHJhd1BhdHRlcm4oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQ
YXR0ZXJuJiYpOworICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllciYmKTsKKyAgICB2b2lkIGVuZFRyYW5zcGFy
ZW5jeUxheWVyKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllciYmKTsK
KyAgICB2b2lkIGRyYXdSZWN0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdCYmKTsKKyAg
ICB2b2lkIGRyYXdMaW5lKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZSYmKTsKKyAgICB2
b2lkIGRyYXdMaW5lc0ZvclRleHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRl
eHQmJik7CisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyJiYpOworICAgIHZvaWQgZHJhd0VsbGlw
c2UoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlJiYpOworICAgIHZvaWQgZHJhd1Bh
dGgoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoJiYpOworICAgIHZvaWQgZHJhd0ZvY3Vz
UmluZ1BhdGgoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoJiYpOworICAg
IHZvaWQgZHJhd0ZvY3VzUmluZ1JlY3RzKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNS
aW5nUmVjdHMmJik7CisgICAgdm9pZCBmaWxsUmVjdChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJlY3QmJik7CisgICAgdm9pZCBmaWxsUmVjdFdpdGhDb2xvcihXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFJlY3RXaXRoQ29sb3ImJik7CisgICAgdm9pZCBmaWxsUmVjdFdpdGhHcmFkaWVudChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQmJik7CisgICAgdm9pZCBm
aWxsQ29tcG9zaXRlZFJlY3QoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVj
dCYmKTsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJvdW5kZWRSZWN0JiYpOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlJiYpOworICAgIHZvaWQgZmls
bExpbmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxMaW5lJiYpOworICAgIHZvaWQgZmlsbEFy
YyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEFyYyYmKTsKKyAgICB2b2lkIGZpbGxRdWFkQ3Vy
dmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxRdWFkQ3VydmUmJik7CisgICAgdm9pZCBmaWxs
QmV6aWVyQ3VydmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxCZXppZXJDdXJ2ZSYmKTsKKyAg
ICB2b2lkIGZpbGxQYXRoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aCYmKTsKKyAgICB2
b2lkIGZpbGxFbGxpcHNlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZSYmKTsKKyAg
ICB2b2lkIGdldFBpeGVsQnVmZmVyKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRQaXhlbEJ1ZmZl
ciYmKTsKKyAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRQ
aXhlbEJ1ZmZlciYmKTsKKyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhJiYpOworICAgIHZvaWQgc3Ryb2tlUmVjdChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdCYmKTsKKyAgICB2b2lkIHN0cm9rZUxpbmUoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUxpbmUmJik7CisgICAgdm9pZCBzdHJva2VBcmMoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUFyYyYmKTsKKyAgICB2b2lkIHN0cm9rZVF1YWRDdXJ2
ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUXVhZEN1cnZlJiYpOworICAgIHZvaWQgc3Ry
b2tlQmV6aWVyQ3VydmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUJlemllckN1cnZlJiYp
OworICAgIHZvaWQgc3Ryb2tlUGF0aChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aCYm
KTsKKyAgICB2b2lkIHN0cm9rZUVsbGlwc2UoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVs
bGlwc2UmJik7CisgICAgdm9pZCBjbGVhclJlY3QoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFy
UmVjdCYmKTsKKyAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybihXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6QXBwbHlTdHJva2VQYXR0ZXJuJiYpOworICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybihXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybiYmKTsKKyAgICB2b2lkIGFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0
b3ImJik7CisgICAgdm9pZCBmbHVzaENvbnRleHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNo
Q29udGV4dCYmKTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVHcmFwaGljc0NvbnRleHQoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXImLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJik7CisKKyAgICBSZW1vdGVS
ZXNvdXJjZUNhY2hlJiByZXNvdXJjZUNhY2hlKCk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiBkcmF3aW5nQ29udGV4dCgpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2
b2lkIGFwcGx5KFQmJiBpdGVtKSB7IGl0ZW0uYXBwbHkoZHJhd2luZ0NvbnRleHQoKSk7IH0KKwor
ICAgIHZvaWQgZGlkUmVjZWl2ZVN0cmVhbU1lc3NhZ2UoSVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0
aW9uQmFzZSYsIElQQzo6RGVjb2RlciYpIGZpbmFsOworCisgICAgUmVmPFdlYkNvcmU6OkltYWdl
QnVmZmVyPiBtX2ltYWdlQnVmZmVyOworICAgIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciBtX2ltYWdlQnVmZmVySWRlbnRpZmllcjsKKyAgICBSZWY8UmVtb3RlUmVuZGVyaW5n
QmFja2VuZD4gbV9yZW5kZXJpbmdCYWNrZW5kOworICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1
ZmZlcj4gbV9tYXNrSW1hZ2VCdWZmZXI7CisgICAgYm9vbCBtX2lzTGlzdGVuaW5nRm9ySVBDIHsg
ZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dC5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHQubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjg2YTAyZGQ2MzkzOTlmMWM5MzdiMmI5ODUy
ZDJlMmRiZWEwN2E4NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHQubWVzc2FnZXMuaW4KQEAgLTAsMCArMSw5
MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisj
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVHcmFwaGljc0NvbnRleHQgTm90UmVm
Q291bnRlZCBTdHJlYW0geworICAgIFNhdmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmUgaXRl
bSkKKyAgICBSZXN0b3JlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlIGl0ZW0pCisgICAg
VHJhbnNsYXRlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGUgaXRlbSkKKyAgICBSb3Rh
dGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZSBpdGVtKQorICAgIFNjYWxlKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTY2FsZSBpdGVtKQorICAgIFNldENUTShXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0Q1RNIGl0ZW0pCisgICAgQ29uY2F0ZW5hdGVDVE0oV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNvbmNhdGVuYXRlQ1RNIGl0ZW0pCisgICAgU2V0SW5saW5lRmlsbENvbG9yKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3IgaXRlbSkKKyAgICBTZXRJbmxpbmVTdHJva2VD
b2xvcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3IgaXRlbSkKKyAg
ICBTZXRTdHJva2VUaGlja25lc3MoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNr
bmVzcyBpdGVtKQorICAgIFNldFN0YXRlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZSBp
dGVtKQorICAgIFNldExpbmVDYXAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXAgaXRl
bSkKKyAgICBTZXRMaW5lRGFzaChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2ggaXRl
bSkKKyAgICBTZXRMaW5lSm9pbihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW4gaXRl
bSkKKyAgICBTZXRNaXRlckxpbWl0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0
IGl0ZW0pCisgICAgQ2xlYXJTaGFkb3coV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93
IGl0ZW0pCisgICAgQ2xpcChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcCBpdGVtKQorICAgIENs
aXBPdXQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQgaXRlbSkKKyAgICBDbGlwVG9JbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvSW1hZ2VCdWZmZXIgaXRlbSkKKyAg
ICBDbGlwT3V0VG9QYXRoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoIGl0ZW0p
CisgICAgQ2xpcFBhdGgoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoIGl0ZW0pCisgICAg
QmVnaW5DbGlwVG9EcmF3aW5nQ29tbWFuZHMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luQ2xp
cFRvRHJhd2luZ0NvbW1hbmRzIGl0ZW0pCisgICAgRW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpFbmRDbGlwVG9EcmF3aW5nQ29tbWFuZHMgaXRlbSkKKyAgICBE
cmF3R2x5cGhzKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIGl0ZW0pCisgICAgRHJh
d0ltYWdlQnVmZmVyKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXIgaXRlbSkK
KyAgICBEcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFn
ZSBpdGVtKQorICAgIERyYXdQYXR0ZXJuKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVy
biBpdGVtKQorICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgaXRlbSkKKyAgICBFbmRUcmFuc3BhcmVuY3lMYXllcihX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIgaXRlbSkKKyAgICBEcmF3
UmVjdChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3QgaXRlbSkKKyAgICBEcmF3TGluZShX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmUgaXRlbSkKKyAgICBEcmF3TGluZXNGb3JUZXh0
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0IGl0ZW0pCisgICAgRHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlciBpdGVtKQorICAgIERyYXdFbGxpcHNlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3RWxsaXBzZSBpdGVtKQorICAgIERyYXdQYXRoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
UGF0aCBpdGVtKQorICAgIERyYXdGb2N1c1JpbmdQYXRoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3Rm9jdXNSaW5nUGF0aCBpdGVtKQorICAgIERyYXdGb2N1c1JpbmdSZWN0cyhXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzIGl0ZW0pCisgICAgRmlsbFJlY3QoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0IGl0ZW0pCisgICAgRmlsbFJlY3RXaXRoQ29sb3IoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yIGl0ZW0pCisgICAgRmlsbFJlY3RX
aXRoR3JhZGllbnQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50IGl0
ZW0pCisgICAgRmlsbENvbXBvc2l0ZWRSZWN0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29t
cG9zaXRlZFJlY3QgaXRlbSkKKyAgICBGaWxsUm91bmRlZFJlY3QoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxSb3VuZGVkUmVjdCBpdGVtKQorICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSBpdGVtKQorICAgIEZp
bGxMaW5lKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsTGluZSBpdGVtKQorICAgIEZpbGxBcmMo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxBcmMgaXRlbSkKKyAgICBGaWxsUXVhZEN1cnZlKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUXVhZEN1cnZlIGl0ZW0pCisgICAgRmlsbEJlemllckN1
cnZlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQmV6aWVyQ3VydmUgaXRlbSkKKyAgICBGaWxs
UGF0aChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGggaXRlbSkKKyAgICBGaWxsRWxsaXBz
ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2UgaXRlbSkKKyAgICBHZXRQaXhlbEJ1
ZmZlcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0UGl4ZWxCdWZmZXIgaXRlbSkKKyAgICBQdXRQ
aXhlbEJ1ZmZlcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXIgaXRlbSkKKyAg
ICBQYWludEZyYW1lRm9yTWVkaWEoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JN
ZWRpYSBpdGVtKQorICAgIFN0cm9rZVJlY3QoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJl
Y3QgaXRlbSkKKyAgICBTdHJva2VMaW5lKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VMaW5l
IGl0ZW0pCisgICAgU3Ryb2tlQXJjKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VBcmMgaXRl
bSkKKyAgICBTdHJva2VRdWFkQ3VydmUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVF1YWRD
dXJ2ZSBpdGVtKQorICAgIFN0cm9rZUJlemllckN1cnZlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
dHJva2VCZXppZXJDdXJ2ZSBpdGVtKQorICAgIFN0cm9rZVBhdGgoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlN0cm9rZVBhdGggaXRlbSkKKyAgICBTdHJva2VFbGxpcHNlKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTdHJva2VFbGxpcHNlIGl0ZW0pCisgICAgQ2xlYXJSZWN0KFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDbGVhclJlY3QgaXRlbSkKKyAgICBBcHBseVN0cm9rZVBhdHRlcm4oV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybiBpdGVtKQorICAgIEFwcGx5RmlsbFBhdHRlcm4o
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm4gaXRlbSkKKyAgICBBcHBseURl
dmljZVNjYWxlRmFjdG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFj
dG9yIGl0ZW0pCisgICAgRmx1c2hDb250ZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaENv
bnRleHQgaXRlbSkKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0wuY3BwCmluZGV4IGYyYTVlMDJkM2M3NzAwYjc5Y2Y3ZDMxZTAzNjliZWEzMzM1
NjdiM2QuLjE3ZDhkM2E5NWI1MzdhZjk5MTZmNmMzNmQ3YTExZTU0NjI0NmQ0MDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMLmNwcApAQCAtNjQsNyArNjQsNyBAQCBSZWY8UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w+IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpjcmVhdGUoR1BVQ29ubmVjdGlvblRv
V2ViUAogCiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0wo
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgR3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyIGdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZCYgcmVuZGVyaW5nQmFja2VuZCwgSVBDOjpTdHJlYW1Db25uZWN0
aW9uQnVmZmVyJiYgc3RyZWFtKQogICAgIDogbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKG1h
a2VXZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpKQotICAgICwgbV9zdHJlYW1Db25u
ZWN0aW9uKElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbjxSZW1vdGVHcmFwaGljc0NvbnRleHRH
TD46OmNyZWF0ZShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNvbm5lY3Rpb24oKSwgV1RGTW92
ZShzdHJlYW0pLCByZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpKSkKKyAg
ICAsIG1fc3RyZWFtQ29ubmVjdGlvbihJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb246OmNyZWF0
ZShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNvbm5lY3Rpb24oKSwgV1RGTW92ZShzdHJlYW0p
LCByZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpKSkKICAgICAsIG1fZ3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKGdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcikKICAg
ICAsIG1fcmVuZGVyaW5nQmFja2VuZChyZW5kZXJpbmdCYWNrZW5kKQogICAgICwgbV9yZW5kZXJp
bmdSZXNvdXJjZXNSZXF1ZXN0KFNjb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdDo6
YWNxdWlyZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaAppbmRleCAxM2U0N2ZiYjljODk3MGY1ZDMw
NDVhNmZmN2UwYzg3Y2YyMzc1MGQxLi5mOGVlYTFiNGIzMGZkZWY1ODZmOGFhNjAwYmRjMGE0YmEx
ZDljNzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuaCIKICNpbmNsdWRlICJTY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1Jl
cXVlc3QuaCIKKyNpbmNsdWRlICJTdHJlYW1NZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJT
dHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9FeHRlbnNpb25zR0wu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg+CkBAIC01OCwx
NSArNTksMTQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAvLyBHUFUgcHJvY2VzcyBzaWRlIGltcGxl
bWVudGF0aW9uIG9mIHRoYXQgcmVjZWl2ZXMgbWVzc2FnZXMgYWJvdXQgR3JhcGhpY3NDb250ZXh0
R0wgY2FsbHMKIC8vIGFuZCBpc3N1ZXMgcmVhbCBHcmFwaGljc0NvbnRleHRHTCBjYWxscyBiYXNl
ZCBvbiB0aGUgcmVjZWl2ZWQgbWVzc2FnZXMuCiAvLyBUaGUgaW1wbGVtZW50YXRpb24gaXMgbGFy
Z2VseSBnZW5lcmF0ZWQgYnkgcnVubmluZyBUb29scy9TY3JpcHRzL2dlbmVyYXRlLWdwdXAtd2Vi
Z2wuCi1jbGFzcyBSZW1vdGVHcmFwaGljc0NvbnRleHRHTCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4sIHByaXZhdGUgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0w6OkNsaWVudCB7CitjbGFzcyBSZW1vdGVHcmFwaGljc0NvbnRleHRHTCA6IHBy
aXZhdGUgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OkNsaWVudCwgcHVibGljIElQQzo6U3Ry
ZWFtTWVzc2FnZVJlY2VpdmVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMPiBjcmVhdGUoR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2VzcyYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRl
cyYmLCBHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQm
LCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJik7CiAgICAgflJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdG9wTGlzdGVuaW5nRm9ySVBDKFJlZjxSZW1v
dGVHcmFwaGljc0NvbnRleHRHTD4mJiByZWZGcm9tQ29ubmVjdGlvbik7CiAKLSAgICAvLyBJUEM6
OlN0cmVhbVNlcnZlckNvbm5lY3Rpb248UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+IHRlbXBsYXRl
IGNvbnRyYWN0IGltcGxlbWVudGF0aW9uLgotICAgIHZvaWQgZGlkUmVjZWl2ZVN0cmVhbU1lc3Nh
Z2UoSVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZSYsIElQQzo6RGVjb2RlciYpOworICAg
IHZvaWQgZGlkUmVjZWl2ZVN0cmVhbU1lc3NhZ2UoSVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0aW9u
QmFzZSYsIElQQzo6RGVjb2RlciYpIGZpbmFsOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lk
IGRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKTsKICNlbmRpZgpAQCAtMTA4LDcgKzEwOCw3IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIHBhaW50UGl4ZWxCdWZmZXJUb0ltYWdlQnVmZmVyKHN0ZDo6b3B0
aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+JiYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIFdlYWtQdHI8
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOwot
ICAgIFJlZlB0cjxJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb248UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w+PiBtX3N0cmVhbUNvbm5lY3Rpb247CisgICAgUmVmUHRyPElQQzo6U3RyZWFtU2VydmVy
Q29ubmVjdGlvbj4gbV9zdHJlYW1Db25uZWN0aW9uOwogICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTD4gbV9jb250ZXh0IFdURl9HVUFSREVEX0JZX0xPQ0sobV9zdHJl
YW1UaHJlYWQpOwogICAgIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciBtX2dyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllcjsKICAgICBSZWY8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4gbV9yZW5k
ZXJpbmdCYWNrZW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAppbmRleCBjYjNmOGU4MzVkMGM4MGE3YTUyNzY5YTRkNjIw
N2Q3OGE1ODg0YjQyLi4wNDgxYTJlMTZkZTEyODAwYmVkNWVhNTAzNmNhM2UwOWJhNGNlODU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1h
Z2VCdWZmZXIuaApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIkRlY29kZXIuaCIKICNpbmNs
dWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgor
I2luY2x1ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlNjb3BlZEFjdGl2
ZU1lc3NhZ2VSZWNlaXZlUXVldWUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbmNyZXRlSW1hZ2VC
dWZmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CkBAIC01NCw3ICs1Niw5IEBAIHB1YmxpYzoKICAgICAg
ICAgOiBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcihwYXJhbWV0ZXJzLCBXVEZNb3ZlKGJhY2tlbmQp
LCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiAgICAgICAgICwgbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kKHJlbW90ZVJlbmRlcmluZ0JhY2tlbmQpCiAgICAgICAgICwgbV9yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgICAgICAs
IG1fcmVtb3RlQ29udGV4dCh7IFJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBy
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kKSB9KQogICAgIHsKKyAgICAgICAgbV9yZW1vdGVDb250ZXh0
LT5zdGFydExpc3RlbmluZ0ZvcklQQygpOwogICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuZGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKG1fYmFja2VuZC0+Y3JlYXRlSW1hZ2VCdWZm
ZXJCYWNrZW5kSGFuZGxlKCksIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgfQog
CkBAIC03Nyw0MSArODEsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwogCi0gICAgYm9vbCBhcHBseShXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Ci0gICAgewotICAgICAgICBpZiAoaXRlbS5pczxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0UGl4
ZWxCdWZmZXI+KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGdldFBpeGVsQnVmZmVySXRlbSA9IGl0
ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRQaXhlbEJ1ZmZlcj4oKTsKLSAgICAgICAg
ICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Z2V0UGl4ZWxC
dWZmZXIoZ2V0UGl4ZWxCdWZmZXJJdGVtLm91dHB1dEZvcm1hdCgpLCBnZXRQaXhlbEJ1ZmZlckl0
ZW0uc3JjUmVjdCgpKTsKLSAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5wb3B1
bGF0ZUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KFdURk1vdmUocGl4ZWxCdWZmZXIpKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGl0ZW0uaXM8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyPigpKSB7Ci0gICAgICAgICAgICBh
dXRvJiBwdXRQaXhlbEJ1ZmZlckl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UHV0UGl4ZWxCdWZmZXI+KCk7Ci0gICAgICAgICAgICBwdXRQaXhlbEJ1ZmZlcihwdXRQaXhlbEJ1
ZmZlckl0ZW0ucGl4ZWxCdWZmZXIoKSwgcHV0UGl4ZWxCdWZmZXJJdGVtLnNyY1JlY3QoKSwgcHV0
UGl4ZWxCdWZmZXJJdGVtLmRlc3RQb2ludCgpLCBwdXRQaXhlbEJ1ZmZlckl0ZW0uZGVzdEZvcm1h
dCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNoQ29udGV4dD4oKSkgewotICAgICAg
ICAgICAgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpOwotICAgICAgICAg
ICAgYXV0byBpZGVudGlmaWVyID0gaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNo
Q29udGV4dD4oKS5pZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2hh
cmVkRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIkFja25vd2xlZGdpbmcgRmx1c2h7IiA8PCBpZGVu
dGlmaWVyIDw8ICJ9IGluIEltYWdlKCIgPDwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
PDwgIikiKTsKLSAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5kaWRGbHVzaChp
ZGVudGlmaWVyLCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI+KCkpIHsKLSAgICAgICAgICAg
IGF1dG8gbmV4dEJ1ZmZlcklkZW50aWZpZXIgPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyPigpLmlkZW50aWZpZXIoKTsKLSAgICAgICAg
ICAgIExPR19XSVRIX1NUUkVBTShTaGFyZWREaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiU3dpdGNo
aW5nIHRvIEl0ZW1zWyIgPDwgbmV4dEJ1ZmZlcklkZW50aWZpZXIgPDwgIl0iKTsKLSAgICAgICAg
ICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5zZXROZXh0SXRlbUJ1ZmZlclRvUmVhZChuZXh0
QnVmZmVySWRlbnRpZmllciwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmFwcGx5TWVkaWFJdGVtKGl0ZW0sIGNvbnRleHQpOwotICAgIH0KLQog
ICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZDsKICAg
ICBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgbV9yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXI7CisgICAgSVBDOjpTY29wZWRBY3RpdmVNZXNzYWdlUmVjZWl2ZVF1ZXVlPFJl
bW90ZUdyYXBoaWNzQ29udGV4dD4gbV9yZW1vdGVDb250ZXh0OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggYWE5NDU2NDE0OWQwOGU0ODk2
MzQ3ZDk0ZjAzOTQ2MTU0NzI5YmY3My4uMjM5ODQwNDMyZTA1MmMwOWMwNzkwY2RlMmYyZjkyZTVj
NjgyM2M4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi0jaW5jbHVkZSAiRGlzcGxheUxpc3RSZWFkZXJIYW5k
bGUuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXIuaCIKQEAgLTcy
LDQ2ICs3MSw1MSBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAotUmVmPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzJiYgY3JlYXRpb25Q
YXJhbWV0ZXJzKQorUmVmPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzJiYgY3Jl
YXRpb25QYXJhbWV0ZXJzLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJiBzdHJlYW1CdWZm
ZXIpCiB7Ci0gICAgYXV0byBpbnN0YW5jZSA9IGFkb3B0UmVmKCpuZXcgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZChncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBXVEZNb3ZlKGNyZWF0aW9uUGFyYW1l
dGVycykpKTsKKyAgICBhdXRvIGluc3RhbmNlID0gYWRvcHRSZWYoKm5ldyBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdURk1vdmUoY3JlYXRpb25QYXJh
bWV0ZXJzKSwgV1RGTW92ZShzdHJlYW1CdWZmZXIpKSk7CiAgICAgaW5zdGFuY2UtPnN0YXJ0TGlz
dGVuaW5nRm9ySVBDKCk7CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCi1SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVh
dGlvblBhcmFtZXRlcnMmJiBjcmVhdGlvblBhcmFtZXRlcnMpCi0gICAgOiBtX3dvcmtRdWV1ZShX
b3JrUXVldWU6OmNyZWF0ZSgiUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB3b3JrIHF1ZXVlIiwgV29y
a1F1ZXVlOjpUeXBlOjpTZXJpYWwsIFdvcmtRdWV1ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmUpKQor
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZChHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzJiYgY3JlYXRpb25QYXJhbWV0ZXJzLCBJUEM6OlN0
cmVhbUNvbm5lY3Rpb25CdWZmZXImJiBzdHJlYW1CdWZmZXIpCisgICAgOiBtX3dvcmtRdWV1ZSgi
UmVtb3RlUmVuZGVyaW5nQmFja2VuZCB3b3JrIHF1ZXVlIikKKyAgICAsIG1fc3RyZWFtQ29ubmVj
dGlvbihJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb246OmNyZWF0ZShncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNvbm5lY3Rpb24oKSwgV1RGTW92ZShzdHJlYW1CdWZmZXIpLCBtX3dvcmtRdWV1
ZSkpCiAgICAgLCBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcykKICAgICAsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoY3JlYXRpb25QYXJh
bWV0ZXJzLmlkZW50aWZpZXIpCi0gICAgLCBtX3Jlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlKFdU
Rk1vdmUoY3JlYXRpb25QYXJhbWV0ZXJzLnJlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlKSkKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6RGlkQ3JlYXRlV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxh
eUxpc3RTdHJlYW0obV93b3JrUXVldWUud2FrZVVwU2VtYXBob3JlKCkpLCBtX3JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzdGFy
dExpc3RlbmluZ0ZvcklQQygpCiB7Ci0gICAgbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5j
b25uZWN0aW9uKCkuYWRkV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd29ya1F1ZXVlLCB0aGlz
LCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCkpOworICAgIG1fc3RyZWFt
Q29ubmVjdGlvbi0+c3RhcnRSZWNlaXZpbmdNZXNzYWdlcygqdGhpcywgTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9yZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpKTsKIH0KIAogUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQogewogICAgIC8vIE1ha2Ugc3VyZSB3ZSBkZXN0cm95
IHRoZSBSZXNvdXJjZUNhY2hlIG9uIHRoZSBXb3JrUXVldWUgc2luY2UgaXQgZ2V0cyBwb3B1bGF0
ZWQgb24gdGhlIFdvcmtRdWV1ZS4KICAgICAvLyBNYWtlIHN1cmUgcmVuZGVyaW5nIHJlc291cmNl
IHJlcXVlc3QgaXMgcmVsZWFzZWQgYWZ0ZXIgZGVzdHJveWluZyB0aGUgY2FjaGUuCi0gICAgbV93
b3JrUXVldWUtPmRpc3BhdGNoKFtyZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0ID0gV1RGTW92ZSht
X3JlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QpLCByZW1vdGVSZXNvdXJjZUNhY2hlID0gV1RGTW92
ZShtX3JlbW90ZVJlc291cmNlQ2FjaGUpXSB7IH0pOworICAgIGRpc3BhdGNoKFtyZW5kZXJpbmdS
ZXNvdXJjZXNSZXF1ZXN0ID0gV1RGTW92ZShtX3JlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QpLCBy
ZW1vdGVSZXNvdXJjZUNhY2hlID0gV1RGTW92ZShtX3JlbW90ZVJlc291cmNlQ2FjaGUpXSB7IH0p
OwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnN0b3BMaXN0ZW5pbmdGb3JJUEMo
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgbV9zdHJlYW1Db25uZWN0
aW9uLT5zdG9wUmVjZWl2aW5nTWVzc2FnZXMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50
b1VJbnQ2NCgpKTsKKyAgICBmb3IgKGF1dG8mIHJlbW90ZUNvbnRleHQgOiBzdGQ6OmV4Y2hhbmdl
KG1fcmVtb3RlQ29udGV4dHMsIHsgfSkpCisgICAgICAgIHJlbW90ZUNvbnRleHQuc3RvcExpc3Rl
bmluZ0ZvcklQQygpOworfQogCi0gICAgLy8gVGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgZGVz
dHJ1Y3RvciB3b24ndCBiZSBjYWxsZWQgdW50aWwgZGlzY29ubmVjdCgpIGlzIGNhbGxlZCBhbmQg
d2UgdW5yZWdpc3RlciBvdXJzZWx2ZXMgYXMgYSBXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIgYmVj
YXVzZQotICAgIC8vIHRoZSBJUEM6OkNvbm5lY3Rpb24gcmVmcyBpdHMgV29ya1F1ZXVlTWVzc2Fn
ZVJlY2VpdmVycy4KLSAgICBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rpb24o
KS5yZW1vdmVXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllci50b1VJbnQ2NCgpKTsKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkQmVnaW5M
aXN0ZW5pbmdGb3JJUEMoUmVtb3RlR3JhcGhpY3NDb250ZXh0JiByZW1vdGVDb250ZXh0KQorewor
ICAgIG1fcmVtb3RlQ29udGV4dHMuYWRkKHJlbW90ZUNvbnRleHQpOwogfQogCiB2b2lkIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpc3BhdGNoKEZ1bmN0aW9uPHZvaWQoKT4mJiB0YXNrKQogewot
ICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChXVEZNb3ZlKHRhc2spKTsKKyAgICBtX3dvcmtRdWV1
ZS5kaXNwYXRjaChXVEZNb3ZlKHRhc2spKTsKIH0KIAogSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0CkBAIC0xMjQs
MzAgKzEyOCwxMiBAQCB1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2Vu
ZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIudG9VSW50NjQoKTsKIH0KIAotYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjph
cHBseU1lZGlhSXRlbShEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBp
ZiAoIWl0ZW0uaXM8RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYT4oKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgbWVkaWFJdGVtID0gaXRlbS5nZXQ8RGlzcGxheUxp
c3Q6OlBhaW50RnJhbWVGb3JNZWRpYT4oKTsKLSAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQo
WyYsIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MsIG1lZGlhUGxheWVySWRlbnRpZmllciA9IG1lZGlhSXRlbS5pZGVudGlmaWVyKCldIHsKLSAg
ICAgICAgYXV0byBwbGF5ZXIgPSBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5yZW1vdGVNZWRp
YVBsYXllck1hbmFnZXJQcm94eSgpLm1lZGlhUGxheWVyKG1lZGlhUGxheWVySWRlbnRpZmllcik7
Ci0gICAgICAgIGlmICghcGxheWVyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAvLyBJ
dCBpcyBjdXJyZW50bHkgbm90IHNhZmUgdG8gY2FsbCBwYWludEZyYW1lRm9yTWVkaWEoKSBvZmYg
dGhlIG1haW4gdGhyZWFkLgotICAgICAgICBjb250ZXh0LnBhaW50RnJhbWVGb3JNZWRpYSgqcGxh
eWVyLCBtZWRpYUl0ZW0uZGVzdGluYXRpb24oKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkQ3JlYXRlSW1hZ2VCdWZmZXJC
YWNrZW5kKEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiB7CiAgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpEaWRDcmVhdGVJbWFnZUJ1ZmZlckJh
Y2tlbmQoV1RGTW92ZShoYW5kbGUpLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBtX3Jl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpkaWRGbHVzaChEaXNwbGF5TGlzdDo6Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmll
ciwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkRmx1c2goRmx1c2hJZGVudGlmaWVy
IGZsdXNoSWRlbnRpZmllciwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcikKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OkRpZEZsdXNoKGZsdXNoSWRlbnRpZmllciwgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiB9CkBAIC0xNzksMTk2
ICsxNjUsNiBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbgogCiAgICAgbV9yZW1vdGVSZXNvdXJj
ZUNhY2hlLmNhY2hlSW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyKTsKICAgICB1cGRhdGVSZW5kZXJp
bmdSZXNvdXJjZVJlcXVlc3QoKTsKLQotICAgIGlmIChtX3BlbmRpbmdXYWtldXBJbmZvICYmIG1f
cGVuZGluZ1dha2V1cEluZm8tPnNob3VsZFBlcmZvcm1XYWtldXAoaW1hZ2VCdWZmZXJSZXNvdXJj
ZUlkZW50aWZpZXIpKQotICAgICAgICB3YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0KHN0ZDo6ZXhj
aGFuZ2UobV9wZW5kaW5nV2FrZXVwSW5mbywgc3RkOjpudWxsb3B0KS0+YXJndW1lbnRzKTsKLX0K
LQotUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6UmVwbGF5ZXJEZWxl
Z2F0ZShXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgZGVzdGluYXRpb24sIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQmIHJlbW90ZVJlbmRlcmluZ0JhY2tlbmQpCi0gICAgOiBtX2Rlc3RpbmF0aW9uKGRlc3Rp
bmF0aW9uKQotICAgICwgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kKHJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQpCi17Ci19Ci0KLWJvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxl
Z2F0ZTo6YXBwbHkoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUgaXRlbSwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQpCi17Ci0gICAgYXV0byBhcHBseSA9
IFsmXShhdXRvJiYgZGVzdGluYXRpb24pIHsKLSAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uLmFw
cGx5KGl0ZW0sIGdyYXBoaWNzQ29udGV4dCk7Ci0gICAgfTsKLQotICAgIGlmIChtX2Rlc3RpbmF0
aW9uLnJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAg
ICAgcmV0dXJuIGFwcGx5KHN0YXRpY19jYXN0PEFjY2VsZXJhdGVkUmVtb3RlSW1hZ2VCdWZmZXIm
PihtX2Rlc3RpbmF0aW9uKSk7Ci0gICAgcmV0dXJuIGFwcGx5KHN0YXRpY19jYXN0PFVuYWNjZWxl
cmF0ZWRSZW1vdGVJbWFnZUJ1ZmZlciY+KG1fZGVzdGluYXRpb24pKTsKLX0KLQotdm9pZCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjpkaWRDcmVhdGVNYXNrSW1hZ2VC
dWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQotewotICAgIG1fcmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5kaWRDcmVhdGVNYXNrSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpOwot
fQotCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OmRpZFJl
c2V0TWFza0ltYWdlQnVmZmVyKCkKLXsKLSAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZGlk
UmVzZXRNYXNrSW1hZ2VCdWZmZXIoKTsKLX0KLQotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpSZXBsYXllckRlbGVnYXRlOjpyZWNvcmRSZXNvdXJjZVVzZShSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQotewotICAgIG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5yZW1vdGVSZXNvdXJjZUNhY2hlKCkucmVjb3JkUmVzb3VyY2VVc2UocmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLX0KLQotRGlzcGxheUxpc3Q6OlJlcGxheVJlc3Vs
dCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzdWJtaXQoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3Bs
YXlMaXN0JiBkaXNwbGF5TGlzdCwgSW1hZ2VCdWZmZXImIGRlc3RpbmF0aW9uKQotewotICAgIGlm
IChkaXNwbGF5TGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBSZXBs
YXllckRlbGVnYXRlIHJlcGxheWVyRGVsZWdhdGUoZGVzdGluYXRpb24sICp0aGlzKTsKLQotICAg
IHJldHVybiBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXIgewotICAgICAgICBkZXN0aW5h
dGlvbi5jb250ZXh0KCksCi0gICAgICAgIGRpc3BsYXlMaXN0LAotICAgICAgICAmcmVtb3RlUmVz
b3VyY2VDYWNoZSgpLmltYWdlQnVmZmVycygpLAotICAgICAgICAmcmVtb3RlUmVzb3VyY2VDYWNo
ZSgpLm5hdGl2ZUltYWdlcygpLAotICAgICAgICAmcmVtb3RlUmVzb3VyY2VDYWNoZSgpLmZvbnRz
KCksCi0gICAgICAgIG1fY3VycmVudE1hc2tJbWFnZUJ1ZmZlci5nZXQoKSwKLSAgICAgICAgJnJl
cGxheWVyRGVsZWdhdGUKLSAgICB9LnJlcGxheSgpOwotfQotCi1SZWZQdHI8SW1hZ2VCdWZmZXI+
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om5leHREZXN0aW5hdGlvbkltYWdlQnVmZmVyQWZ0ZXJB
cHBseWluZ0Rpc3BsYXlMaXN0cyhJbWFnZUJ1ZmZlciYgaW5pdGlhbERlc3RpbmF0aW9uLCBzaXpl
X3QgaW5pdGlhbE9mZnNldCwgRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUmIGhhbmRsZSwgR1BVUHJv
Y2Vzc1dha2V1cFJlYXNvbiByZWFzb24pCi17Ci0gICAgUmVmUHRyIGRlc3RpbmF0aW9uIHsgJmlu
aXRpYWxEZXN0aW5hdGlvbiB9OwotICAgIFJlZiBoYW5kbGVQcm90ZWN0b3IgeyBoYW5kbGUgfTsK
LQotICAgIGF1dG8gb2Zmc2V0ID0gaW5pdGlhbE9mZnNldDsKLSAgICBzaXplX3Qgc2l6ZVRvUmVh
ZCA9IDA7Ci0gICAgZG8gewotICAgICAgICBzaXplVG9SZWFkID0gaGFuZGxlLnVucmVhZEJ5dGVz
KCk7Ci0gICAgfSB3aGlsZSAoIXNpemVUb1JlYWQpOwotCi0gICAgd2hpbGUgKGRlc3RpbmF0aW9u
KSB7Ci0gICAgICAgIGF1dG8gZGlzcGxheUxpc3QgPSBoYW5kbGUuZGlzcGxheUxpc3RGb3JSZWFk
aW5nKG9mZnNldCwgc2l6ZVRvUmVhZCwgKnRoaXMpOwotICAgICAgICBNRVNTQUdFX0NIRUNLX1dJ
VEhfUkVUVVJOX1ZBTFVFKGRpc3BsYXlMaXN0LCBudWxscHRyLCAiRmFpbGVkIHRvIG1hcCBkaXNw
bGF5IGxpc3QgZnJvbSBzaGFyZWQgbWVtb3J5Iik7Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAg
ICAgIGF1dG8gc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0jZW5kaWYKLSAgICAg
ICAgYXV0byByZXN1bHQgPSBzdWJtaXQoKmRpc3BsYXlMaXN0LCAqZGVzdGluYXRpb24pOwotICAg
ICAgICBMT0dfV0lUSF9TVFJFQU0oU2hhcmVkRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlJlYWQg
WyIgPDwgb2Zmc2V0IDw8ICIsICIgPDwgb2Zmc2V0ICsgcmVzdWx0Lm51bWJlck9mQnl0ZXNSZWFk
IDw8ICJdOyBJdGVtc1siIDw8IGhhbmRsZS5pZGVudGlmaWVyKCkgPDwgIl0gPT4gSW1hZ2UoIiA8
PCBkZXN0aW5hdGlvbi0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkgPDwgIikgaW4gIiA8
PCBNb25vdG9uaWNUaW1lOjpub3coKSAtIHN0YXJ0VGltZSk7Ci0gICAgICAgIE1FU1NBR0VfQ0hF
Q0tfV0lUSF9SRVRVUk5fVkFMVUUocmVzdWx0LnJlYXNvbkZvclN0b3BwaW5nICE9IERpc3BsYXlM
aXN0OjpTdG9wUmVwbGF5UmVhc29uOjpJbnZhbGlkSXRlbU9yRXh0ZW50LCBudWxscHRyLCAiRGV0
ZWN0ZWQgaW52YWxpZCBkaXNwbGF5IGxpc3QgaXRlbSBvciBleHRlbnQiKTsKLSAgICAgICAgTUVT
U0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRShyZXN1bHQucmVhc29uRm9yU3RvcHBpbmcgIT0g
RGlzcGxheUxpc3Q6OlN0b3BSZXBsYXlSZWFzb246Ok91dE9mTWVtb3J5LCBudWxscHRyLCAiQ291
bmQgbm90IGFsbG9jYXRlIG1lbW9yeSIpOwotCi0gICAgICAgIGF1dG8gYWR2YW5jZVJlc3VsdCA9
IGhhbmRsZS5hZHZhbmNlKHJlc3VsdC5udW1iZXJPZkJ5dGVzUmVhZCk7Ci0gICAgICAgIE1FU1NB
R0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUoYWR2YW5jZVJlc3VsdCwgbnVsbHB0ciwgIkZhaWxl
ZCB0byBhZHZhbmNlIGRpc3BsYXkgbGlzdCByZWFkZXIgaGFuZGxlIik7Ci0gICAgICAgIHNpemVU
b1JlYWQgPSAqYWR2YW5jZVJlc3VsdDsKLQotICAgICAgICBDaGVja2VkU2l6ZSBjaGVja2VkT2Zm
c2V0ID0gb2Zmc2V0OwotICAgICAgICBjaGVja2VkT2Zmc2V0ICs9IHJlc3VsdC5udW1iZXJPZkJ5
dGVzUmVhZDsKLSAgICAgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRSghY2hlY2tl
ZE9mZnNldC5oYXNPdmVyZmxvd2VkKCksIG51bGxwdHIsICJPdmVyZmxvd2VkIHdoZW4gYWR2YW5j
aW5nIHNoYXJlZCBkaXNwbGF5IGxpc3QgaGFuZGxlIG9mZnNldCIpOwotCi0gICAgICAgIG9mZnNl
dCA9IGNoZWNrZWRPZmZzZXQ7Ci0gICAgICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFM
VUUob2Zmc2V0IDw9IGhhbmRsZS5zaGFyZWRNZW1vcnkoKS5zaXplKCksIG51bGxwdHIsICJPdXQt
b2YtYm91bmRzIG9mZnNldCBpbnRvIHNoYXJlZCBkaXNwbGF5IGxpc3QgaGFuZGxlIik7Ci0KLSAg
ICAgICAgaWYgKHJlc3VsdC5yZWFzb25Gb3JTdG9wcGluZyA9PSBEaXNwbGF5TGlzdDo6U3RvcFJl
cGxheVJlYXNvbjo6Q2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcikgewotICAgICAgICAgICAg
ZGVzdGluYXRpb24gPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIoKnJl
c3VsdC5uZXh0RGVzdGluYXRpb25JbWFnZUJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAoIWRlc3Rp
bmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFtX3BlbmRpbmdXYWtldXBJbmZvKTsK
LSAgICAgICAgICAgICAgICBtX3BlbmRpbmdXYWtldXBJbmZvID0ge3sKLSAgICAgICAgICAgICAg
ICAgICAgeyBoYW5kbGUuaWRlbnRpZmllcigpLCBvZmZzZXQsICpyZXN1bHQubmV4dERlc3RpbmF0
aW9uSW1hZ2VCdWZmZXIsIHJlYXNvbiB9LAotICAgICAgICAgICAgICAgICAgICBzdGQ6Om51bGxv
cHQsCi0gICAgICAgICAgICAgICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZTo6V2Fp
dGluZ0ZvckRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIKLSAgICAgICAgICAgICAgICB9fTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQucmVhc29uRm9yU3RvcHBp
bmcgPT0gRGlzcGxheUxpc3Q6OlN0b3BSZXBsYXlSZWFzb246Ok1pc3NpbmdDYWNoZWRSZXNvdXJj
ZSkgewotICAgICAgICAgICAgbV9wZW5kaW5nV2FrZXVwSW5mbyA9IHt7Ci0gICAgICAgICAgICAg
ICAgeyBoYW5kbGUuaWRlbnRpZmllcigpLCBvZmZzZXQsIGRlc3RpbmF0aW9uLT5yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIoKSwgcmVhc29uIH0sCi0gICAgICAgICAgICAgICAgcmVzdWx0Lm1p
c3NpbmdDYWNoZWRSZXNvdXJjZUlkZW50aWZpZXIsCi0gICAgICAgICAgICAgICAgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFN0YXRlOjpXYWl0aW5nRm9yQ2FjaGVkUmVzb3VyY2UKLSAgICAgICAgICAg
IH19OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fcGVuZGluZ1dha2V1cEluZm8pCi0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAoIXNpemVUb1JlYWQpIHsKLSAgICAgICAgICAg
IGlmIChyZWFzb24gIT0gR1BVUHJvY2Vzc1dha2V1cFJlYXNvbjo6SXRlbUNvdW50SHlzdGVyZXNp
c0V4Y2VlZGVkKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBoYW5kbGUu
c3RhcnRXYWl0aW5nKCk7Ci0gICAgICAgICAgICBtX3Jlc3VtZURpc3BsYXlMaXN0U2VtYXBob3Jl
LndhaXRGb3IoMzBfdXMpOwotCi0gICAgICAgICAgICBhdXRvIHN0b3BXYWl0aW5nUmVzdWx0ID0g
aGFuZGxlLnN0b3BXYWl0aW5nKCk7Ci0gICAgICAgICAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVU
VVJOX1ZBTFVFKHN0b3BXYWl0aW5nUmVzdWx0LCBudWxscHRyLCAiSW52YWxpZCB3YWl0aW5nIHN0
YXR1cyBkZXRlY3RlZCB3aGVuIHJlc3VtaW5nIGRpc3BsYXkgbGlzdCBwcm9jZXNzaW5nIik7Ci0K
LSAgICAgICAgICAgIGF1dG8gcmVzdW1lUmVhZGluZ0luZm8gPSBzdG9wV2FpdGluZ1Jlc3VsdC52
YWx1ZSgpOwotICAgICAgICAgICAgaWYgKCFyZXN1bWVSZWFkaW5nSW5mbykKLSAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgc2l6ZVRvUmVhZCA9IGhhbmRsZS51bnJlYWRCeXRl
cygpOwotICAgICAgICAgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRShzaXplVG9S
ZWFkLCBudWxscHRyLCAiTm8gdW5yZWFkIGJ5dGVzIHdoZW4gcmVzdW1pbmcgZGlzcGxheSBsaXN0
IHByb2Nlc3NpbmciKTsKLQotICAgICAgICAgICAgYXV0byBuZXdEZXN0aW5hdGlvbklkZW50aWZp
ZXIgPSBtYWtlT2JqZWN0SWRlbnRpZmllcjxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXJUeXBl
PihyZXN1bWVSZWFkaW5nSW5mby0+ZGVzdGluYXRpb24pOwotICAgICAgICAgICAgTUVTU0FHRV9D
SEVDS19XSVRIX1JFVFVSTl9WQUxVRShuZXdEZXN0aW5hdGlvbklkZW50aWZpZXIuaXNWYWxpZCgp
LCBudWxscHRyLCAiSW52YWxpZCBpbWFnZSBidWZmZXIgZGVzdGluYXRpb24gd2hlbiByZXN1bWlu
ZyBkaXNwbGF5IGxpc3QgcHJvY2Vzc2luZyIpOwotCi0gICAgICAgICAgICBkZXN0aW5hdGlvbiA9
IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihuZXdEZXN0aW5hdGlvbklk
ZW50aWZpZXIpOwotICAgICAgICAgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRShk
ZXN0aW5hdGlvbiwgbnVsbHB0ciwgIk1pc3NpbmcgaW1hZ2UgYnVmZmVyIGRlc3RpbmF0aW9uIHdo
ZW4gcmVzdW1pbmcgZGlzcGxheSBsaXN0IHByb2Nlc3NpbmciKTsKLQotICAgICAgICAgICAgb2Zm
c2V0ID0gcmVzdW1lUmVhZGluZ0luZm8tPm9mZnNldDsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiBkZXN0aW5hdGlvbjsKLX0KLQotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp3
YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0KGNvbnN0IEdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJn
dW1lbnRzJiBhcmd1bWVudHMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29wZShXYWtlVXBBbmRBcHBseURpc3BsYXlMaXN0U3Rh
cnQsIFdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3RFbmQpOwotCi0gICAgdXBkYXRlTGFzdEtub3du
U3RhdGUoUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpCZWdhblJlcGxheWluZ0Rpc3BsYXlM
aXN0KTsKLQotICAgIFJlZlB0ciBkZXN0aW5hdGlvbkltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNv
dXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVyKGFyZ3VtZW50cy5kZXN0aW5hdGlvbkltYWdlQnVm
ZmVySWRlbnRpZmllcik7Ci0gICAgTUVTU0FHRV9DSEVDSyhkZXN0aW5hdGlvbkltYWdlQnVmZmVy
LCAiTWlzc2luZyBkZXN0aW5hdGlvbiBpbWFnZSBidWZmZXIiKTsKLQotICAgIGF1dG8gaW5pdGlh
bEhhbmRsZSA9IG1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzLmdldChhcmd1bWVudHMuaXRlbUJ1
ZmZlcklkZW50aWZpZXIpOwotICAgIE1FU1NBR0VfQ0hFQ0soaW5pdGlhbEhhbmRsZSwgIk1pc3Np
bmcgaW5pdGlhbCBzaGFyZWQgZGlzcGxheSBsaXN0IGhhbmRsZSIpOwotCi0gICAgTE9HX1dJVEhf
U1RSRUFNKFNoYXJlZERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJXYWtpbmcgdXAgdG8gSXRlbXNb
IiA8PCBhcmd1bWVudHMuaXRlbUJ1ZmZlcklkZW50aWZpZXIgPDwgIl0gPT4gSW1hZ2UoIiA8PCBh
cmd1bWVudHMuZGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIgPDwgIikgYXQgIiA8PCBh
cmd1bWVudHMub2Zmc2V0KTsKLSAgICBkZXN0aW5hdGlvbkltYWdlQnVmZmVyID0gbmV4dERlc3Rp
bmF0aW9uSW1hZ2VCdWZmZXJBZnRlckFwcGx5aW5nRGlzcGxheUxpc3RzKCpkZXN0aW5hdGlvbklt
YWdlQnVmZmVyLCBhcmd1bWVudHMub2Zmc2V0LCAqaW5pdGlhbEhhbmRsZSwgYXJndW1lbnRzLnJl
YXNvbik7Ci0KLSAgICAvLyBGSVhNRTogQWxsIHRoZSBjYWxsZXJzIHBhc3MgbV9wZW5kaW5nV2Fr
ZXVwSW5mby5hcmd1bWVudHMgc28gdGhlIGJvZHkgb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQganVz
dCBiZSB0aGlzIGxvb3AuCi0gICAgd2hpbGUgKGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIgJiYgbV9w
ZW5kaW5nV2FrZXVwSW5mbykgewotICAgICAgICBpZiAobV9wZW5kaW5nV2FrZXVwSW5mby0+bWlz
c2luZ0NhY2hlZFJlc291cmNlSWRlbnRpZmllcikKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGF1dG8gbmV4dEhhbmRsZSA9IG1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzLmdldChtX3Bl
bmRpbmdXYWtldXBJbmZvLT5hcmd1bWVudHMuaXRlbUJ1ZmZlcklkZW50aWZpZXIpOwotICAgICAg
ICBpZiAoIW5leHRIYW5kbGUpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBoYW5kbGUgaWRlbnRp
ZmllciBpcyBjdXJyZW50bHkgdW5rbm93biwgd2FpdCB1bnRpbCB0aGUgR1BVIHByb2Nlc3MgcmVj
ZWl2ZXMgYW4KLSAgICAgICAgICAgIC8vIElQQyBtZXNzYWdlIHdpdGggYSBzaGFyZWQgbWVtb3J5
IGhhbmRsZSB0byB0aGUgbmV4dCBpdGVtIGJ1ZmZlci4KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gT3RoZXJ3aXNlLCBjb250aW51ZSByZWFkaW5nIHRoZSBuZXh0
IGRpc3BsYXkgbGlzdCBpdGVtIGJ1ZmZlciBmcm9tIHRoZSBzdGFydC4KLSAgICAgICAgYXV0byBh
cmd1bWVudHMgPSBzdGQ6OmV4Y2hhbmdlKG1fcGVuZGluZ1dha2V1cEluZm8sIHN0ZDo6bnVsbG9w
dCktPmFyZ3VtZW50czsKLSAgICAgICAgZGVzdGluYXRpb25JbWFnZUJ1ZmZlciA9IG5leHREZXN0
aW5hdGlvbkltYWdlQnVmZmVyQWZ0ZXJBcHBseWluZ0Rpc3BsYXlMaXN0cygqZGVzdGluYXRpb25J
bWFnZUJ1ZmZlciwgYXJndW1lbnRzLm9mZnNldCwgKm5leHRIYW5kbGUsIGFyZ3VtZW50cy5yZWFz
b24pOwotICAgIH0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2hhcmVkRGlzcGxheUxpc3RzLCBzdHJl
YW0gPDwgIkdvaW5nIGJhY2sgdG8gc2xlZXAuIik7Ci0KLSAgICBpZiAobV9wZW5kaW5nV2FrZXVw
SW5mbykKLSAgICAgICAgdXBkYXRlTGFzdEtub3duU3RhdGUobV9wZW5kaW5nV2FrZXVwSW5mby0+
c3RhdGUpOwotICAgIGVsc2UKLSAgICAgICAgdXBkYXRlTGFzdEtub3duU3RhdGUoUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFN0YXRlOjpGaW5pc2hlZFJlcGxheWluZ0Rpc3BsYXlMaXN0KTsKLX0KLQot
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZXROZXh0SXRlbUJ1ZmZlclRvUmVhZChEaXNw
bGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIGRlc3RpbmF0aW9uSWRlbnRpZmllcikKLXsKLSAgICBtX3Bl
bmRpbmdXYWtldXBJbmZvID0ge3sKLSAgICAgICAgeyBpZGVudGlmaWVyLCBTaGFyZWREaXNwbGF5
TGlzdEhhbmRsZTo6aGVhZGVyU2l6ZSgpLCBkZXN0aW5hdGlvbklkZW50aWZpZXIsIEdQVVByb2Nl
c3NXYWtldXBSZWFzb246OlVuc3BlY2lmaWVkIH0sCi0gICAgICAgIHN0ZDo6bnVsbG9wdCwKLSAg
ICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpXYWl0aW5nRm9ySXRlbUJ1ZmZlcgot
ICAgIH19OwogfQogCiBzdGQ6Om9wdGlvbmFsPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlckhl
bHBlcihzaXplX3QgYnl0ZUNvdW50KQpAQCAtNDkxLDE5ICsyODcsMTIgQEAgdm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlJiBoYW4KICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hl
LmNhY2hlTmF0aXZlSW1hZ2UoKmltYWdlKTsKLQotICAgIGlmIChtX3BlbmRpbmdXYWtldXBJbmZv
ICYmIG1fcGVuZGluZ1dha2V1cEluZm8tPnNob3VsZFBlcmZvcm1XYWtldXAobmF0aXZlSW1hZ2VS
ZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAgICB3YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0KHN0
ZDo6ZXhjaGFuZ2UobV9wZW5kaW5nV2FrZXVwSW5mbywgc3RkOjpudWxsb3B0KS0+YXJndW1lbnRz
KTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjYWNoZUZvbnQoUmVmPEZvbnQ+
JiYgZm9udCkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8g
Zm9udFJlc291cmNlSWRlbnRpZmllciA9IGZvbnQtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cigpOwogICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZUZvbnQoV1RGTW92ZShmb250KSk7
Ci0gICAgaWYgKG1fcGVuZGluZ1dha2V1cEluZm8gJiYgbV9wZW5kaW5nV2FrZXVwSW5mby0+c2hv
dWxkUGVyZm9ybVdha2V1cChmb250UmVzb3VyY2VJZGVudGlmaWVyKSkKLSAgICAgICAgd2FrZVVw
QW5kQXBwbHlEaXNwbGF5TGlzdChzdGQ6OmV4Y2hhbmdlKG1fcGVuZGluZ1dha2V1cEluZm8sIHN0
ZDo6bnVsbG9wdCktPmFyZ3VtZW50cyk7CiB9CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6ZGVsZXRlQWxsRm9udHMoKQpAQCAtNTIyLDE1MyArMzExLDkgQEAgdm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpyZWxlYXNlUmVtb3RlUmVzb3VyY2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIHIKIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmaW5hbGl6ZVJlbmRlcmlu
Z1VwZGF0ZShSZW5kZXJpbmdVcGRhdGVJRCByZW5kZXJpbmdVcGRhdGVJRCkKIHsKLSAgICBhdXRv
IHNob3VsZFBlcmZvcm1XYWtldXAgPSBbJl0oY29uc3QgR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VB
cmd1bWVudHMmIGFyZ3VtZW50cykgewotICAgICAgICByZXR1cm4gbV9yZW1vdGVSZXNvdXJjZUNh
Y2hlLmNhY2hlZEltYWdlQnVmZmVyKGFyZ3VtZW50cy5kZXN0aW5hdGlvbkltYWdlQnVmZmVySWRl
bnRpZmllcikgJiYgbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXMuY29udGFpbnMoYXJndW1lbnRz
Lml0ZW1CdWZmZXJJZGVudGlmaWVyKTsKLSAgICB9OwotCi0gICAgaWYgKG1fcGVuZGluZ1dha2V1
cEluZm8gJiYgc2hvdWxkUGVyZm9ybVdha2V1cChtX3BlbmRpbmdXYWtldXBJbmZvLT5hcmd1bWVu
dHMpKQotICAgICAgICB3YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0KHN0ZDo6ZXhjaGFuZ2UobV9w
ZW5kaW5nV2FrZXVwSW5mbywgc3RkOjpudWxsb3B0KS0+YXJndW1lbnRzKTsKLQogICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6RGlkRmluYWxpemVSZW5kZXJp
bmdVcGRhdGUocmVuZGVyaW5nVXBkYXRlSUQpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVTaGFyZWREaXNw
bGF5TGlzdEhhbmRsZShEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaXRlbUJ1ZmZl
cklkZW50aWZpZXIsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiBoYW5kbGUsIFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpCi17Ci0g
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgTUVTU0FHRV9DSEVDSyghbV9zaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZXMuY29udGFpbnMoaXRlbUJ1ZmZlcklkZW50aWZpZXIpLCAiRHVw
bGljYXRlIHNoYXJlZCBkaXNwbGF5IGxpc3QgaGFuZGxlIik7Ci0KLSAgICBpZiAoYXV0byBzaGFy
ZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6Om1hcChoYW5kbGUuaGFuZGxlLCBTaGFyZWRNZW1vcnk6
OlByb3RlY3Rpb246OlJlYWRXcml0ZSkpIHsKLSAgICAgICAgYXV0byBoYW5kbGUgPSBEaXNwbGF5
TGlzdFJlYWRlckhhbmRsZTo6Y3JlYXRlKGl0ZW1CdWZmZXJJZGVudGlmaWVyLCBzaGFyZWRNZW1v
cnkucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIE1FU1NBR0VfQ0hFQ0soaGFuZGxlLCAiVGhl
cmUgbXVzdCBiZSBlbm91Z2ggc3BhY2UgdG8gY3JlYXRlIHRoZSBoYW5kbGUuIik7Ci0gICAgICAg
IG1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzLnNldChpdGVtQnVmZmVySWRlbnRpZmllciwgaGFu
ZGxlKTsKLSAgICB9Ci0KLSAgICBpZiAobV9wZW5kaW5nV2FrZXVwSW5mbyAmJiBtX3BlbmRpbmdX
YWtldXBJbmZvLT5zaG91bGRQZXJmb3JtV2FrZXVwKGl0ZW1CdWZmZXJJZGVudGlmaWVyKSkKLSAg
ICAgICAgd2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChzdGQ6OmV4Y2hhbmdlKG1fcGVuZGluZ1dh
a2V1cEluZm8sIHN0ZDo6bnVsbG9wdCktPmFyZ3VtZW50cyk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6ZGlkQ3JlYXRlTWFza0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFn
ZUJ1ZmZlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBNRVNTQUdF
X0NIRUNLKCFtX2N1cnJlbnRNYXNrSW1hZ2VCdWZmZXIsICJDdXJyZW50IG1hc2sgaW1hZ2UgYnVm
ZmVyIGlzIGFscmVhZHkgc2V0LiIpOwotICAgIG1fY3VycmVudE1hc2tJbWFnZUJ1ZmZlciA9ICZp
bWFnZUJ1ZmZlcjsKLX0KLQotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRSZXNldE1h
c2tJbWFnZUJ1ZmZlcigpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAg
TUVTU0FHRV9DSEVDSyhtX2N1cnJlbnRNYXNrSW1hZ2VCdWZmZXIsICJDdXJyZW50IG1hc2sgaW1h
Z2UgYnVmZmVyIHdhcyBub3QgYWxyZWFkeSBzZXQuIik7Ci0gICAgbV9jdXJyZW50TWFza0ltYWdl
QnVmZmVyID0gbnVsbHB0cjsKLX0KLQotc3RkOjpvcHRpb25hbDxEaXNwbGF5TGlzdDo6SXRlbUhh
bmRsZT4gV0FSTl9VTlVTRURfUkVUVVJOIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRlY29kZUl0
ZW0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCwgRGlzcGxheUxpc3Q6Okl0ZW1U
eXBlIHR5cGUsIHVpbnQ4X3QqIGhhbmRsZUxvY2F0aW9uKQotewotICAgIC8qIFRoaXMgbmVlZHMg
dG8gbWF0Y2ggKDEpIGlzSW5saW5lSXRlbSgpIGluIERpc3BsYXlMaXN0SXRlbVR5cGUuY3BwLCAo
MikgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6ZW5jb2RlSXRlbSgpLAotICAgICAqIGFuZCAoMykg
YWxsIHRoZSAic3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSJzIGluc2lkZSB0aGUg
aW5kaXZpZHVhbCBpdGVtIGNsYXNzZXMuCi0gICAgICogU2VlIHRoZSBjb21tZW50IGF0IHRoZSB0
b3Agb2YgRGlzcGxheUxpc3RJdGVtcy5oIGZvciB3aHkuICovCi0KLSAgICBzd2l0Y2ggKHR5cGUp
IHsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QmVnaW5DbGlwVG9EcmF3aW5nQ29t
bWFuZHM6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkJlZ2lu
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAg
ICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKLSAgICAgICAgcmV0
dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aD4oZGF0YSwgbGVu
Z3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNs
aXBQYXRoOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpDbGlw
UGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5k
Q3JlYXRlPERpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5k
bGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdGb2N1c1Jp
bmdSZWN0czoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6RHJh
d0ZvY3VzUmluZ1JlY3RzPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNl
IERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0dseXBoczoKLSAgICAgICAgcmV0dXJuIGRlY29k
ZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6RHJhd0dseXBocz4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVM
b2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRl
eHQ6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkRyYXdMaW5l
c0ZvclRleHQ+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0
ZTxEaXNwbGF5TGlzdDo6RHJhd1BhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwot
ICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAg
ICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVj
dD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkZpbGxQYXRoOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3Bs
YXlMaXN0OjpGaWxsUGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2Fz
ZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgotICAgICAgICByZXR1
cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcj4oZGF0YSwg
bGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkZpbGxSZWN0V2l0aEdyYWRpZW50OgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERp
c3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2Nh
dGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAg
Y2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICAgICAgcmV0
dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0PihkYXRhLCBs
ZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
R2V0UGl4ZWxCdWZmZXI6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxp
c3Q6OkdldFBpeGVsQnVmZmVyPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBj
YXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXI6Ci0gICAgICAgIHJldHVy
biBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyPihkYXRhLCBsZW5n
dGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0
TGluZURhc2g6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OlNl
dExpbmVEYXNoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGU6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVh
dGU8RGlzcGxheUxpc3Q6OlNldFN0YXRlPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsK
LSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKLSAgICAgICAgcmV0
dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aD4oZGF0YSwgbGVuZ3Ro
LCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkFwcGx5
RGV2aWNlU2NhbGVGYWN0b3I6Ci0jaWYgVVNFKENHKQotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpBcHBseVN0cm9rZVBhdHRlcm46Ci0jZW5kaWYKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6Q2xlYXJSZWN0OgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVhclNo
YWRvdzoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcDoKLSAgICBjYXNlIERp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dDoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkVuZENsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXI6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRy
YXdFbGxpcHNlOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZm
ZXI6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKLSAg
ICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdHRlcm46Ci0gICAgY2FzZSBEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdMaW5lOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpEcmF3UmVjdDoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RW5kVHJhbnNw
YXJlbmN5TGF5ZXI6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxFbGxpcHNl
OgotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpGaWxsTGluZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbEFy
YzoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFF1YWRDdXJ2ZToKLSAgICBj
YXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbEJlemllckN1cnZlOgotI2VuZGlmCi0gICAg
Y2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0OgotICAgIGNhc2UgRGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpGbHVzaENvbnRleHQ6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcjoKLSAgICBjYXNlIERp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyOgotI2lmIEVO
QUJMRShWSURFTykKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UGFpbnRGcmFtZUZv
ck1lZGlhOgotI2VuZGlmCi0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlJlc3RvcmU6
Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlJvdGF0ZToKLSAgICBjYXNlIERpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2F2ZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U2NhbGU6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldENUTToKLSAgICBjYXNl
IERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgotICAgIGNhc2UgRGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Ci0gICAgY2FzZSBEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgIGNhc2UgRGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpTZXRMaW5lSm9pbjoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TWl0
ZXJMaW1pdDoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tu
ZXNzOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotI2lm
IEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpTdHJva2VBcmM6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVF1YWRD
dXJ2ZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlQmV6aWVyQ3VydmU6
Ci0jZW5kaWYKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAg
ICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlTGluZToKLSAgICBjYXNlIERpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQogdm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjp1cGRhdGVSZW5kZXJpbmdSZXNvdXJjZVJlcXVlc3QoKQogewogICAgIGJv
b2wgaGFzQWN0aXZlRHJhd2FibGVzID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmhhc0FjdGl2ZURy
YXdhYmxlcygpOwpAQCAtNjg1LDE2ICszMzAsMTIgQEAgYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjphbGxvd3NFeGl0VW5kZXJNZW1vcnlQcmVzc3VyZSgpIGNvbnN0CiAgICAgcmV0dXJuICFt
X3JlbW90ZVJlc291cmNlQ2FjaGUuaGFzQWN0aXZlRHJhd2FibGVzKCk7CiB9CiAKLVJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRTdGF0ZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpsYXN0S25vd25TdGF0
ZSgpIGNvbnN0Cit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnBlcmZvcm1XaXRoTWVkaWFQ
bGF5ZXJPbk1haW5UaHJlYWQoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIEZ1bmN0
aW9uPHZvaWQoTWVkaWFQbGF5ZXImKT4mJiBjYWxsYmFjaykKIHsKLSAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwotICAgIHJldHVybiBtX2xhc3RLbm93blN0YXRlLmxvYWQoKTsKLX0KLQot
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVMYXN0S25vd25TdGF0ZShSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kU3RhdGUgc3RhdGUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgbV9sYXN0S25vd25TdGF0ZS5zdG9yZVJlbGF4ZWQoc3RhdGUpOworICAgIGNh
bGxPbk1haW5SdW5Mb29wQW5kV2FpdChbJiwgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1f
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaWRlbnRpZmllcl0geworICAgICAgICBpZiAoYXV0
byBwbGF5ZXIgPSBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5yZW1vdGVNZWRpYVBsYXllck1h
bmFnZXJQcm94eSgpLm1lZGlhUGxheWVyKGlkZW50aWZpZXIpKQorICAgICAgICAgICAgY2FsbGJh
Y2soKnBsYXllcik7CisgICAgfSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmgKaW5kZXggN2Q4MGI3MjU4NjM5NGU1NWVjY2NjOWJmNzNmOTVlZmIwY2M5NDA1
MC4uNjY2YWYyNGNiZjlhOGIzNjNiOGM5Yzg5ZDExNmU4YWI0YTQwZmFkZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5oCkBAIC0yOCwxNiArMjgsMTggQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAK
ICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiR1BVUHJvY2Vzc1dha2V1cE1lc3Nh
Z2VBcmd1bWVudHMuaCIKICNpbmNsdWRlICJJUENTZW1hcGhvcmUuaCIKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCIKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNp
bmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCi0jaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFN0YXRlLmgiCisjaW5jbHVkZSAiUmVtb3RlR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
UmVtb3RlUmVzb3VyY2VDYWNoZS5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nVXBkYXRlSUQuaCIKICNpbmNsdWRlICJTY29wZWRS
ZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0LmgiCisjaW5jbHVkZSAiU3RyZWFtQ29ubmVjdGlvbldv
cmtRdWV1ZS5oIgorI2luY2x1ZGUgIlN0cmVhbU1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUg
IlN0cmVhbVNlcnZlckNvbm5lY3Rpb24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2Uu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9E
aXNwbGF5TGlzdEl0ZW1zLmg+CkBAIC00NiwxMSArNDgsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLW5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7Ci1jbGFzcyBEaXNwbGF5TGlzdDsKLWNsYXNz
IEl0ZW07Ci19Ci0KIGNsYXNzIERlc3RpbmF0aW9uQ29sb3JTcGFjZTsKIGNsYXNzIEZsb2F0U2l6
ZTsKIGNsYXNzIE5hdGl2ZUltYWdlOwpAQCAtNjEsMzAgKzU4LDI0IEBAIGVudW0gY2xhc3MgUmVu
ZGVyaW5nTW9kZSA6IGJvb2w7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBEaXNwbGF5
TGlzdFJlYWRlckhhbmRsZTsKIGNsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CitjbGFz
cyBSZW1vdGVHcmFwaGljc0NvbnRleHQ7CiBzdHJ1Y3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENy
ZWF0aW9uUGFyYW1ldGVyczsKIAotY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAotICAgIDog
cHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKLSAgICAsIHB1YmxpYyBJUEM6OkNvbm5lY3Rpb246
OldvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlcgotICAgICwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCB7CitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIsIHB1YmxpYyBJUEM6OlN0cmVhbU1lc3Nh
Z2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0KLSAgICBzdGF0aWMgUmVmPFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmKTsKKyAgICBzdGF0aWMgUmVmPFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25C
dWZmZXImJik7CiAgICAgdmlydHVhbCB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpOwogICAgIHZv
aWQgc3RvcExpc3RlbmluZ0ZvcklQQygpOwogCiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZSYgcmVt
b3RlUmVzb3VyY2VDYWNoZSgpIHsgcmV0dXJuIG1fcmVtb3RlUmVzb3VyY2VDYWNoZTsgfQogCi0g
ICAgLy8gUmVuZGVyaW5nIG9wZXJhdGlvbnMuCi0gICAgYm9vbCBhcHBseU1lZGlhSXRlbShXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7
CisgICAgdm9pZCBkaWRSZWNlaXZlU3RyZWFtTWVzc2FnZShJUEM6OlN0cmVhbVNlcnZlckNvbm5l
Y3Rpb25CYXNlJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CisgICAgdm9pZCBkaWRCZWdpbkxpc3Rl
bmluZ0ZvcklQQyhSZW1vdGVHcmFwaGljc0NvbnRleHQmKTsKIAogICAgIC8vIE1lc3NhZ2VzIHRv
IGJlIHNlbnQuCiAgICAgdm9pZCBkaWRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoSW1hZ2VCdWZm
ZXJCYWNrZW5kSGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwot
ICAgIHZvaWQgZGlkRmx1c2goV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNoSWRlbnRpZmllciwg
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLQotICAgIHZvaWQgc2V0TmV4
dEl0ZW1CdWZmZXJUb1JlYWQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlm
aWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb24pOwor
ICAgIHZvaWQgZGlkRmx1c2goV2ViQ29yZTo6Rmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogCiAgICAgdm9pZCBkaWRDcmVhdGVNYXNrSW1hZ2VC
dWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKTsKICAgICB2b2lkIGRpZFJlc2V0TWFza0ltYWdl
QnVmZmVyKCk7CkBAIC05Niw0NSArODcsMjMgQEAgcHVibGljOgogICAgIC8vIFJ1bnMgRnVuY3Rp
b24gaW4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB0YXNrIHF1ZXVlLgogICAgIHZvaWQgZGlzcGF0
Y2goRnVuY3Rpb248dm9pZCgpPiYmKTsKIAotICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0
ZSBsYXN0S25vd25TdGF0ZSgpIGNvbnN0OworICAgIElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlv
biYgc3RyZWFtQ29ubmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RyZWFtQ29ubmVjdGlvbi5n
ZXQoKTsgfQorCisgICAgdm9pZCBwZXJmb3JtV2l0aE1lZGlhUGxheWVyT25NYWluVGhyZWFkKFdl
YkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllciwgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpNZWRp
YVBsYXllciYpPiYmKTsKIAogcHJpdmF0ZToKLSAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25Q
YXJhbWV0ZXJzJiYpOworICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyYsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJiwg
SVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiYpOwogICAgIHZvaWQgc3RhcnRMaXN0ZW5pbmdG
b3JJUEMoKTsKIAotICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1I
YW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVJdGVtKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBsZW5ndGgsIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSwgdWludDhfdCog
aGFuZGxlTG9jYXRpb24pIG92ZXJyaWRlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAg
ICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VO
VVNFRF9SRVRVUk4gZGVjb2RlQW5kQ3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBs
ZW5ndGgsIHVpbnQ4X3QqIGhhbmRsZUxvY2F0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKGF1dG8g
aXRlbSA9IElQQzo6RGVjb2Rlcjo6ZGVjb2RlU2luZ2xlT2JqZWN0PFQ+KGRhdGEsIGxlbmd0aCkp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZWJLaXQyIHNob3VsZCBub3QgbmVlZCB0byBrbm93
IHRoYXQgdGhlIGZpcnN0IDggYnl0ZXMgYXQgdGhlIGhhbmRsZSBhcmUgcmVzZXJ2ZWQgZm9yIHRo
ZSB0eXBlLgotICAgICAgICAgICAgLy8gTmVlZCB0byBmaWd1cmUgb3V0IGEgd2F5IHRvIGtlZXAg
dGhpcyBrbm93bGVkZ2Ugd2l0aGluIGRpc3BsYXkgbGlzdCBjb2RlIGluIFdlYkNvcmUuCi0gICAg
ICAgICAgICBuZXcgKGhhbmRsZUxvY2F0aW9uICsgc2l6ZW9mKHVpbnQ2NF90KSkgVChXVEZNb3Zl
KCppdGVtKSk7Ci0gICAgICAgICAgICByZXR1cm4ge3sgaGFuZGxlTG9jYXRpb24gfX07Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci0KLSAgICBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVwbGF5UmVzdWx0IHN1Ym1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3QmLCBXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgZGVzdGluYXRpb24pOwot
ICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gbmV4dERlc3RpbmF0aW9uSW1hZ2VCdWZm
ZXJBZnRlckFwcGx5aW5nRGlzcGxheUxpc3RzKFdlYkNvcmU6OkltYWdlQnVmZmVyJiBpbml0aWFs
RGVzdGluYXRpb24sIHNpemVfdCBpbml0aWFsT2Zmc2V0LCBEaXNwbGF5TGlzdFJlYWRlckhhbmRs
ZSYsIEdQVVByb2Nlc3NXYWtldXBSZWFzb24pOwotCiAgICAgc3RkOjpvcHRpb25hbDxTaGFyZWRN
ZW1vcnk6OklQQ0hhbmRsZT4gdXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXJIZWxw
ZXIoc2l6ZV90IGJ5dGVDb3VudCk7CiAgICAgdm9pZCB1cGRhdGVSZW5kZXJpbmdSZXNvdXJjZVJl
cXVlc3QoKTsKIAotICAgIHZvaWQgdXBkYXRlTGFzdEtub3duU3RhdGUoUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFN0YXRlKTsKLQogICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KICAgICBJUEM6OkNv
bm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKIAot
ICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLSAgICBib29sIGRpZFJl
Y2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBVbmlxdWVS
ZWY8SVBDOjpFbmNvZGVyPiYpIG92ZXJyaWRlOwotCiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgcmVj
ZWl2ZWQuCiAgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFdlYkNvcmU6OlBp
eGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZv
aWQgd2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChjb25zdCBHUFVQcm9jZXNzV2FrZXVwTWVzc2Fn
ZUFyZ3VtZW50cyYpOwogICAgIHZvaWQgdXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZm
ZXIodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJl
ZE1lbW9yeTo6SVBDSGFuZGxlJik+JiYpOwogICAgIHZvaWQgc2VtYXBob3JlRm9yR2V0UGl4ZWxC
dWZmZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OlNlbWFwaG9yZSYpPiYmKTsK
ICAgICB2b2lkIHVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVy
KHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRN
ZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYpOwpAQCAtMTQ3LDUx
ICsxMTYsMTYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlbGV0ZUFsbEZvbnRzKCk7CiAgICAgdm9p
ZCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLCB1aW50NjRfdCB1c2VDb3VudCk7CiAgICAgdm9pZCBmaW5hbGl6ZVJlbmRlcmluZ1VwZGF0
ZShSZW5kZXJpbmdVcGRhdGVJRCk7Ci0gICAgdm9pZCBkaWRDcmVhdGVTaGFyZWREaXNwbGF5TGlz
dEhhbmRsZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0
IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGRlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcik7Ci0KLSAgICBjbGFzcyBSZXBsYXll
ckRlbGVnYXRlIDogcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6RGVsZWdh
dGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgUmVwbGF5ZXJEZWxlZ2F0ZShXZWJDb3JlOjpJbWFn
ZUJ1ZmZlciYsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmKTsKLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIGJvb2wgYXBwbHkoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUsIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCYpIGZpbmFsOwotICAgICAgICB2b2lkIGRpZENyZWF0ZU1hc2tJbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIGZpbmFsOwotICAgICAgICB2b2lkIGRpZFJl
c2V0TWFza0ltYWdlQnVmZmVyKCkgZmluYWw7Ci0gICAgICAgIHZvaWQgcmVjb3JkUmVzb3VyY2VV
c2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSBmaW5hbDsKLQotICAgICAg
ICBXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgbV9kZXN0aW5hdGlvbjsKLSAgICAgICAgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZCYgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwotICAgIH07Ci0KLSAgICBz
dHJ1Y3QgUGVuZGluZ1dha2V1cEluZm9ybWF0aW9uIHsKLSAgICAgICAgR1BVUHJvY2Vzc1dha2V1
cE1lc3NhZ2VBcmd1bWVudHMgYXJndW1lbnRzOwotICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gbWlzc2luZ0NhY2hlZFJlc291cmNlSWRl
bnRpZmllcjsKLSAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlIHN0YXRlIHsgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpJbml0aWFsaXplZCB9OwotCi0gICAgICAgIGJvb2wg
c2hvdWxkUGVyZm9ybVdha2V1cChXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
aWRlbnRpZmllcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50
cy5kZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllciA9PSBpZGVudGlmaWVyCi0gICAgICAg
ICAgICAgICAgfHwgbWlzc2luZ0NhY2hlZFJlc291cmNlSWRlbnRpZmllciA9PSBpZGVudGlmaWVy
OwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBzaG91bGRQZXJmb3JtV2FrZXVwKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyKSBjb25zdAotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzLml0ZW1CdWZmZXJJZGVudGlmaWVy
ID09IGlkZW50aWZpZXI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgUmVmPFdvcmtRdWV1ZT4g
bV93b3JrUXVldWU7CisKKyAgICBJUEM6OlN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUgbV93b3Jr
UXVldWU7CisgICAgUmVmPElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbj4gbV9zdHJlYW1Db25u
ZWN0aW9uOwogICAgIFJlbW90ZVJlc291cmNlQ2FjaGUgbV9yZW1vdGVSZXNvdXJjZUNhY2hlOwog
ICAgIFJlZjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M7CiAgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcjsKLSAgICBIYXNoTWFwPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVy
SWRlbnRpZmllciwgUmVmUHRyPERpc3BsYXlMaXN0UmVhZGVySGFuZGxlPj4gbV9zaGFyZWREaXNw
bGF5TGlzdEhhbmRsZXM7Ci0gICAgc3RkOjpvcHRpb25hbDxQZW5kaW5nV2FrZXVwSW5mb3JtYXRp
b24+IG1fcGVuZGluZ1dha2V1cEluZm87Ci0gICAgSVBDOjpTZW1hcGhvcmUgbV9yZXN1bWVEaXNw
bGF5TGlzdFNlbWFwaG9yZTsKICAgICBJUEM6OlNlbWFwaG9yZSBtX2dldFBpeGVsQnVmZmVyU2Vt
YXBob3JlOwogICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRN
ZW1vcnk7CiAgICAgU2NvcGVkUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdCBtX3JlbmRlcmluZ1Jl
c291cmNlc1JlcXVlc3Q7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBtX2N1cnJl
bnRNYXNrSW1hZ2VCdWZmZXI7Ci0gICAgQXRvbWljPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0
ZT4gbV9sYXN0S25vd25TdGF0ZSB7IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZTo6SW5pdGlh
bGl6ZWQgfTsKKyAgICBXZWFrSGFzaFNldDxSZW1vdGVHcmFwaGljc0NvbnRleHQ+IG1fcmVtb3Rl
Q29udGV4dHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggMWVmNTZkY2M5NzYyNzRlMzU2YWIyMmI0ZWE0ZTcx
YmNmYWMwYjBkZi4uYTE0MmY0ODk2NmY1YzQ5NzU5NDU2NTQ3NzJjNzljMzE5NzZmNTNkYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KQEAgLTIyLDIwICsyMiwxOCBA
QAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kIHsKK21lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgTm90UmVmQ291
bnRlZCBTdHJlYW0gewogICAgIENyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSBs
b2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
Ci0gICAgV2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChzdHJ1Y3QgV2ViS2l0OjpHUFVQcm9jZXNz
V2FrZXVwTWVzc2FnZUFyZ3VtZW50cyBhcmd1bWVudHMpCi0gICAgVXBkYXRlU2hhcmVkTWVtb3J5
Rm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50KSAtPiAoV2ViS2l0OjpTaGFyZWRN
ZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzCi0gICAgU2VtYXBob3JlRm9yR2V0
UGl4ZWxCdWZmZXIoKSAtPiAoSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cwot
ICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKHVpbnQz
Ml90IGJ5dGVDb3VudCkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxl
LCBJUEM6OlNlbWFwaG9yZSBzZW1hcGhvcmUpIFN5bmNocm9ub3VzCisgICAgVXBkYXRlU2hhcmVk
TWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50KSAtPiAoV2ViS2l0OjpT
aGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzIE5vdFN0cmVhbUVuY29k
YWJsZVJlcGx5CisgICAgU2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoKSAtPiAoSVBDOjpTZW1h
cGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cyBOb3RTdHJlYW1FbmNvZGFibGVSZXBseQorICAg
IFVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90
IGJ5dGVDb3VudCkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlLCBJ
UEM6OlNlbWFwaG9yZSBzZW1hcGhvcmUpIFN5bmNocm9ub3VzIE5vdFN0cmVhbUVuY29kYWJsZVJl
cGx5CiAgICAgRGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KCkKICAgICBHZXREYXRh
VVJMRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgZW51bTp1aW50OF90IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2
ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChTdHJpbmcgdXJsU3RyaW5nKSBTeW5jaHJvbm91cwog
ICAgIEdldERhdGFGb3JJbWFnZUJ1ZmZlcihTdHJpbmcgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNo
cm9ub3VzCi0gICAgR2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVyLCBlbnVtOnVpbnQ4X3QgV2ViQ29y
ZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgLT4gKFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cwotICAgIENhY2hlTmF0aXZl
SW1hZ2UoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCi0g
ICAgQ2FjaGVGb250KElQQzo6Rm9udFJlZmVyZW5jZSBmb250KQorICAgIEdldFNoYXJlYWJsZUJp
dG1hcEZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBp
bWFnZUJ1ZmZlciwgZW51bTp1aW50OF90IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pIC0+IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRs
ZSkgU3luY2hyb25vdXMgTm90U3RyZWFtRW5jb2RhYmxlUmVwbHkKKyAgICBDYWNoZU5hdGl2ZUlt
YWdlKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSBOb3RT
dHJlYW1FbmNvZGFibGUKKyAgICBDYWNoZUZvbnQoSVBDOjpGb250UmVmZXJlbmNlIGZvbnQpIE5v
dFN0cmVhbUVuY29kYWJsZQogICAgIERlbGV0ZUFsbEZvbnRzKCkKLSAgICBEaWRDcmVhdGVTaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50
aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUs
IFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkJ1ZmZlcklk
ZW50aWZpZXIpCiAgICAgUmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVz
ZUNvdW50KQogICAgIEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKFdlYktpdDo6UmVuZGVyaW5nVXBk
YXRlSUQgcmVuZGVyaW5nVXBkYXRlSUQpCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVy
cy5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRDcmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCA0NGEyNzgyNjUyYThmZWIxM2Q1ZDRjYTc1
NTEwMWYwZjNlYmVkZThjLi5jMjQ1NWQ2YzBmZGM3MTExNjVmNWMzYTA5YWVmZTFjNzUxNTM2ZjY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJz
LmgKQEAgLTM2LDEzICszNiwxMiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RydWN0IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyIGlkZW50aWZpZXI7Ci0gICAgSVBDOjpTZW1hcGhvcmUgcmVzdW1lRGlzcGxh
eUxpc3RTZW1hcGhvcmU7CiAgICAgV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlUHJveHlJRDsK
ICAgICBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQ7CiAKICAgICB2b2lkIGVuY29kZShJ
UEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgewotICAgICAgICBlbmNvZGVyIDw8IGlk
ZW50aWZpZXIgPDwgcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmUgPDwgcGFnZVByb3h5SUQgPDwg
cGFnZUlEOworICAgICAgICBlbmNvZGVyIDw8IGlkZW50aWZpZXIgPDwgcGFnZVByb3h5SUQgPDwg
cGFnZUlEOwogICAgIH0KIAogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnM+IGRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIp
CkBAIC01MiwxMSArNTEsNiBAQCBzdHJ1Y3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9u
UGFyYW1ldGVycyB7CiAgICAgICAgIGlmICghaWRlbnRpZmllcikKICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CiAKLSAgICAgICAgc3RkOjpvcHRpb25hbDxJUEM6OlNlbWFwaG9yZT4g
cmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmU7Ci0gICAgICAgIGRlY29kZXIgPj4gcmVzdW1lRGlz
cGxheUxpc3RTZW1hcGhvcmU7Ci0gICAgICAgIGlmICghcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhv
cmUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCiAgICAgICAgIHN0ZDo6b3B0
aW9uYWw8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4gcGFnZVByb3h5SUQ7CiAgICAgICAgIGRlY29k
ZXIgPj4gcGFnZVByb3h5SUQ7CiAgICAgICAgIGlmICghcGFnZVByb3h5SUQpCkBAIC02Nyw3ICs2
MSw3IEBAIHN0cnVjdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzIHsK
ICAgICAgICAgaWYgKCFwYWdlSUQpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
Ci0gICAgICAgIHJldHVybiB7eyAqaWRlbnRpZmllciwgV1RGTW92ZSgqcmVzdW1lRGlzcGxheUxp
c3RTZW1hcGhvcmUpLCAqcGFnZVByb3h5SUQsICpwYWdlSUQgfX07CisgICAgICAgIHJldHVybiB7
eyAqaWRlbnRpZmllciwgKnBhZ2VQcm94eUlELCAqcGFnZUlEIH19OwogICAgIH0KIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kU3RhdGUuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kU3RhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YTE0Yzg3YzhkZDViNTU0NDE5OTJmYTUxNzRiZjA4ZGZkNjJhMjE3Ny4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1lbnVtIGNsYXNzIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRTdGF0ZSA6IHVpbnQ4X3QgewotICAgIEluaXRpYWxpemVkLAotICAgIEJlZ2Fu
UmVwbGF5aW5nRGlzcGxheUxpc3QsCi0gICAgRmluaXNoZWRSZXBsYXlpbmdEaXNwbGF5TGlzdCwK
LSAgICBXYWl0aW5nRm9yQ2FjaGVkUmVzb3VyY2UsCi0gICAgV2FpdGluZ0Zvckl0ZW1CdWZmZXIs
Ci0gICAgV2FpdGluZ0ZvckRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsCi19OwotCi1BTFdBWVNfSU5M
SU5FIGNvbnN0IGNoYXIqIG5hbWUoUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlIHN0YXRlKQot
ewotICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICBjYXNlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRT
dGF0ZTo6SW5pdGlhbGl6ZWQ6Ci0gICAgICAgIHJldHVybiAiSW5pdGlhbGl6ZWQiOwotICAgIGNh
c2UgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpCZWdhblJlcGxheWluZ0Rpc3BsYXlMaXN0
OgotICAgICAgICByZXR1cm4gIkJlZ2FuUmVwbGF5aW5nRGlzcGxheUxpc3QiOwotICAgIGNhc2Ug
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpGaW5pc2hlZFJlcGxheWluZ0Rpc3BsYXlMaXN0
OgotICAgICAgICByZXR1cm4gIkZpbmlzaGVkUmVwbGF5aW5nRGlzcGxheUxpc3QiOwotICAgIGNh
c2UgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpXYWl0aW5nRm9yQ2FjaGVkUmVzb3VyY2U6
Ci0gICAgICAgIHJldHVybiAiV2FpdGluZ0ZvckNhY2hlZFJlc291cmNlIjsKLSAgICBjYXNlIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZTo6V2FpdGluZ0Zvckl0ZW1CdWZmZXI6Ci0gICAgICAg
IHJldHVybiAiV2FpdGluZ0Zvckl0ZW1CdWZmZXIiOwotICAgIGNhc2UgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFN0YXRlOjpXYWl0aW5nRm9yRGVzdGluYXRpb25JbWFnZUJ1ZmZlcjoKLSAgICAgICAg
cmV0dXJuICJXYWl0aW5nRm9yRGVzdGluYXRpb25JbWFnZUJ1ZmZlciI7Ci0gICAgfQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAiSW52YWxpZCI7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUu
Y3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2Fj
aGUuY3BwCmluZGV4IDUyMzlmMTRkYjIyMDEwZDg5Njg0MmVkZTgyMDMyYTNiOGVhMzFmOTAuLjFk
NTk3MmQ2M2VkOWJjODhmODkyZjYxMjkxNjA5M2FmYjliYzllMWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5j
cHAKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZUltYWdl
QnVmZmVyKFJlZjxJbWFnZUJ1ZmZlcj4mJiBpbWFnZUJ1ZmZlcikKICAgICBlbnN1cmVSZXNvdXJj
ZVVzZUNvdW50ZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKIH0KIAotSW1hZ2VCdWZm
ZXIqIFJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlZEltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCitJbWFnZUJ1ZmZlciog
UmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2FjaGVkSW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgY29uc3QKIHsKICAgICByZXR1
cm4gbV9pbWFnZUJ1ZmZlcnMuZ2V0KHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiB9CkBA
IC02Myw2ICs2MywxMSBAQCB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlTmF0aXZlSW1h
Z2UoUmVmPE5hdGl2ZUltYWdlPiYmIGltYWdlKQogICAgIGVuc3VyZVJlc291cmNlVXNlQ291bnRl
cihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCitOYXRpdmVJbWFnZSogUmVtb3Rl
UmVzb3VyY2VDYWNoZTo6Y2FjaGVkTmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9u
YXRpdmVJbWFnZXMuZ2V0KHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Cit9CisKIHZvaWQg
UmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2FjaGVGb250KFJlZjxGb250PiYmIGZvbnQpCiB7CiAgICAg
YXV0byByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPSBmb250LT5yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIoKTsKQEAgLTcxLDYgKzc2LDExIEBAIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNo
ZTo6Y2FjaGVGb250KFJlZjxGb250PiYmIGZvbnQpCiAgICAgZW5zdXJlUmVzb3VyY2VVc2VDb3Vu
dGVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiB9CiAKK0ZvbnQqIFJlbW90ZVJlc291
cmNlQ2FjaGU6OmNhY2hlZEZvbnQoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250cy5nZXQocmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKK30KKwogdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hl
OjplbnN1cmVSZXNvdXJjZVVzZUNvdW50ZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1fcmVzb3Vy
Y2VVc2VDb3VudGVycy5hZGQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBSZXNvdXJjZVVz
ZUNvdW50ZXIgeyB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oCmluZGV4IGNhYmMyNTYzZmRhZGE4MjlmZWJkYTM3
MjU2NjYzYjJkOWI3YzQxYWMuLjBlNDA3MDkyYmI0MDFiZGViNmM0YWNkODNlMzRiYWY5Y2IzODll
ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZXNvdXJjZUNhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlc291cmNlQ2FjaGUuaApAQCAtNDMsOSArNDMsMTEgQEAgcHVibGljOgogICAgIFJlbW90
ZVJlc291cmNlQ2FjaGUoUmVtb3RlUmVzb3VyY2VDYWNoZSYmKTsKIAogICAgIHZvaWQgY2FjaGVJ
bWFnZUJ1ZmZlcihSZWY8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+JiYpOwotICAgIFdlYkNvcmU6Oklt
YWdlQnVmZmVyKiBjYWNoZWRJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpOworICAgIFdlYkNvcmU6OkltYWdlQnVmZmVyKiBjYWNoZWRJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIGNvbnN0OwogICAgIHZvaWQgY2Fj
aGVOYXRpdmVJbWFnZShSZWY8V2ViQ29yZTo6TmF0aXZlSW1hZ2U+JiYpOworICAgIFdlYkNvcmU6
Ok5hdGl2ZUltYWdlKiBjYWNoZWROYXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpIGNvbnN0OwogICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250
PiYmKTsKKyAgICBXZWJDb3JlOjpGb250KiBjYWNoZWRGb250KFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcikgY29uc3Q7CiAgICAgdm9pZCBkZWxldGVBbGxGb250cygpOwogICAg
IGJvb2wgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpOwogICAgIHZvaWQgcmVjb3JkUmVzb3VyY2VVc2Uo
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmNwcAppbmRleCBhMzIwNTUxODc5OGI3NGRjZWRi
OGEwMTNmOWM5Yzk4ODVhYWU2NjE2Li5lN2YyNzgwMzYyZGQyMDM3NDM0Y2ExY2IzOTBkZGU2ZWY3
OTE1OTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENv
ZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMu
Y3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRE
ZWNvZGVyLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRFbmNvZGVyLmgiCiAj
aW5jbHVkZSAiU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0yMTgsNiArMjE5LDcgQEAgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgQXJndW1lbnRDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgU0gKIH0KIAogI2lmIEhBVkUoQVVESVRfVE9LRU4pCisKIHZvaWQgQXJndW1lbnRDb2Rl
cjxhdWRpdF90b2tlbl90Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IGF1ZGl0X3Rv
a2VuX3QmIGF1ZGl0VG9rZW4pCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdURl9B
UlJBWV9MRU5HVEgoYXVkaXRUb2tlbi52YWwpOyBpKyspCkBAIC0yMzIsMTUgKzIzNCw3IEBAIFdB
Uk5fVU5VU0VEX1JFVFVSTiBib29sIEFyZ3VtZW50Q29kZXI8YXVkaXRfdG9rZW5fdD46OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBhCiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQotI2VuZGlm
Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxNb25vc3RhdGU+OjplbmNvZGUoRW5jb2RlciYsIGNvbnN0
IE1vbm9zdGF0ZSYpCi17Ci19CiAKLVdBUk5fVU5VU0VEX1JFVFVSTiBzdGQ6Om9wdGlvbmFsPE1v
bm9zdGF0ZT4gQXJndW1lbnRDb2RlcjxNb25vc3RhdGU+OjpkZWNvZGUoRGVjb2RlciYpCi17Ci0g
ICAgcmV0dXJuIE1vbm9zdGF0ZSB7IH07Ci19CisjZW5kaWYgLy8gSEFWRShBVURJVF9UT0tFTikK
IAogfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9Bcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1l
bnRDb2RlcnMuaAppbmRleCA0NzlkYjYwZWRjMjcxNmQ1NTYwNmY2NTJmMjQzMWFkMzY5ZjY1NzBj
Li5kMWIxMjE4NjNjZWM1MjY0ZTIzOWIwYmFjZDUzYzA4M2UyMGE1MDFhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKQEAgLTQxLDYgKzQxLDIyIEBACiAK
IG5hbWVzcGFjZSBJUEMgewogCisjZGVmaW5lIERFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIo
VHlwZSkgXAorICAgIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8VHlwZT4geyBcCisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgc3RhdGljIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBUeXBlJiB2YWx1ZSkgeyBTaW1wbGVBcmd1bWVudENvZGVyPFR5
cGU+OjplbmNvZGUoZW5jb2RlciwgdmFsdWUpOyB9IFwKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRGVjb2Rlcj4gYm9vbCBzdGF0aWMgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFR5cGUmIHZh
bHVlKSB7IHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPFR5cGU+OjpkZWNvZGUoZGVjb2Rlciwg
dmFsdWUpOyB9IFwKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIHN0
ZDo6b3B0aW9uYWw8VHlwZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpIFwKKyAgICAgICAgeyBc
CisgICAgICAgICAgICBUeXBlIHZhbHVlOyBcCisgICAgICAgICAgICBpZiAoIWRlY29kZShkZWNv
ZGVyLCB2YWx1ZSkpIFwKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OyBcCisg
ICAgICAgICAgICByZXR1cm4gdmFsdWU7IFwKKyAgICAgICAgfSBcCisgICAgfTsgXAorICAgIHRl
bXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxUeXBlPjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXIm
LCBjb25zdCBUeXBlJik7IFwKKyAgICB0ZW1wbGF0ZSBib29sIEFyZ3VtZW50Q29kZXI8VHlwZT46
OmRlY29kZTxEZWNvZGVyPihEZWNvZGVyJiwgVHlwZSYpOyBcCisgICAgdGVtcGxhdGUgc3RkOjpv
cHRpb25hbDxUeXBlPiBBcmd1bWVudENvZGVyPFR5cGU+OjpkZWNvZGU8RGVjb2Rlcj4oRGVjb2Rl
ciYpOworCiAvLyBBbiBhcmd1bWVudCBjb2RlciB3b3JrcyBvbiBQT0QgdHlwZXMKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBTaW1wbGVBcmd1bWVudENvZGVyIHsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBFbmNvZGVyPgpAQCAtNDksNiArNjUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgU2ltcGxlQXJndW1lbnRDb2RlciB7CiAgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ0KSwgc2l6ZW9mKFQp
LCBhbGlnbm9mKFQpKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgog
ICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgVCYgdCkKICAgICB7CiAgICAgICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3Ro
RGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdCksIHNpemVvZihUKSwgYWxpZ25vZihU
KSk7CkBAIC0xMDgsMTIgKzEyNSwxNCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJn
dW1lbnRDb2RlcjxBcnJheVJlZmVyZW5jZTxULCBhcnJheVJlZmVyZW5jZUR5bmFtaQogfTsKIAog
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8T3B0aW9uU2V0PFQ+PiB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgT3B0aW9uU2V0PFQ+JiBvcHRpb25TZXQpCiAgICAgewog
ICAgICAgICBBU1NFUlQoV1RGOjppc1ZhbGlkT3B0aW9uU2V0KG9wdGlvblNldCkpOwogICAgICAg
ICBlbmNvZGVyIDw8IG9wdGlvblNldC50b1JhdygpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIERlY29kZXI+CiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBPcHRpb25TZXQ8VD4mIG9wdGlvblNldCkKICAgICB7CiAgICAg
ICAgIHR5cGVuYW1lIE9wdGlvblNldDxUPjo6U3RvcmFnZVR5cGUgdmFsdWU7CkBAIC0xMjUsNiAr
MTQ0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8T3B0aW9u
U2V0PFQ+PiB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIERlY29kZXI+CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8T3B0aW9uU2V0PFQ+PiBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dHlw
ZW5hbWUgT3B0aW9uU2V0PFQ+OjpTdG9yYWdlVHlwZT4gdmFsdWU7CkBAIC0xODgsNiArMjA4LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8c3RkOjpvcHRpb25h
bDxUPj4gewogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8
Qm94PFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQm94PFQ+JiBib3gpCiAgICAgewogICAg
ICAgICBpZiAoIWJveCkgewpAQCAtMTk5LDYgKzIyMCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBBcmd1bWVudENvZGVyPEJveDxUPj4gewogICAgICAgICBlbmNvZGVyIDw8ICpib3gu
Z2V0KCk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4KICAgICBzdGF0
aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEJveDxU
PiYgYm94KQogICAgIHsKICAgICAgICAgYm9vbCBpc0VuZ2FnZWQ7CkBAIC0yMTgsNiArMjQwLDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8Qm94PFQ+PiB7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29k
ZXI+CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Qm94PFQ+PiBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKICAgICB7CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gaXNFbmdhZ2VkOwpAQCAt
MjM2LDExICsyNTksMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50Q29k
ZXI8Qm94PFQ+PiB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxzdGQ6OnBhaXI8VCwgVT4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBzdGQ6OnBhaXI8VCwgVT4mIHBhaXIpCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHBhaXIu
Zmlyc3QgPDwgcGFpci5zZWNvbmQ7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVj
b2Rlcj4KICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIHN0ZDo6cGFpcjxULCBVPiYgcGFpcikKICAgICB7CiAgICAgICAgIFQgZmlyc3Q7
CkBAIC0yNTYsNiArMjgxLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8c3RkOjpwYWlyPFQsIFU+PiB7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+CiAgICAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFQsIFU+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAg
ICB7CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8VD4gZmlyc3Q7CkBAIC0zNjYsMTEgKzM5MiwxMyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBFbGVtZW50cz4gc3RydWN0IEFyZ3VtZW50Q29kZXI8c3Rk
Ojp0dXBsZTxFbGVtZW50cy4uLj4+IHsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUs
IHR5cGVuYW1lIFZhbHVlVHlwZT4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V1RGOjpLZXlWYWx1ZVBh
aXI8S2V5VHlwZSwgVmFsdWVUeXBlPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+
CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdURjo6S2V5
VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4mIHBhaXIpCiAgICAgewogICAgICAgICBlbmNv
ZGVyIDw8IHBhaXIua2V5IDw8IHBhaXIudmFsdWU7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRGVjb2Rlcj4KICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4m
IHBhaXIpCiAgICAgewogICAgICAgICBLZXlUeXBlIGtleTsKQEAgLTM5OCw2ICs0MjYsNyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlciwgc2l6ZV90IG1pbgogICAgICAgICAgICAgZW5jb2RlciA8PCB2ZWN0b3JbaV07
CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4KICAgICBzdGF0aWMgV0FS
Tl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIHZlY3RvcikKICAg
ICB7CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pj4gb3B0aW9uYWw7CkBAIC00MzcsNiArNDY2LDcgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXIsIHNpemVfdCBtaW4KICAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odmVjdG9yLmRhdGEoKSksIHZl
Y3Rvci5zaXplKCkgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOwogICAgIH0KICAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4g
Ym9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgdmVjdG9yKQogICAgIHsKICAgICAgICAgdWlu
dDY0X3QgZGVjb2RlZFNpemU7CkBAIC00NTEsNyArNDgxLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVf
dCBtaW4KICAgICAgICAgLy8gU2luY2Ugd2Uga25vdyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgZWxl
bWVudHMsIHdlIGNhbiBhbGxvY2F0ZSB0aGUgdmVjdG9yIGluCiAgICAgICAgIC8vIG9uZSBmZWxs
IHN3b29wLiBCZWZvcmUgYWxsb2NhdGluZyB3ZSBtdXN0IGhvd2V2ZXIgbWFrZSBzdXJlIHRoYXQg
dGhlIGRlY29kZXIgYnVmZmVyCiAgICAgICAgIC8vIGlzIGJpZyBlbm91Z2guCi0gICAgICAgIGlm
ICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPFQ+KHNpemUpKQorICAgICAg
ICBpZiAoIWRlY29kZXIudGVtcGxhdGUgYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjxUPihz
aXplKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+IHRlbXA7CkBAIC00OTgs
NiArNTI4LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW4KIHRlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlU
cmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgSGFzaFRhYmxlVHJh
aXRzPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgSGFzaFRhYmxlVHJhaXRzPj4gewog
ICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRz
QXJnLCBNYXBwZWRUcmFpdHNBcmcsIEhhc2hUYWJsZVRyYWl0cz4gSGFzaE1hcFR5cGU7CiAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBIYXNoTWFwVHlwZSYgaGFzaE1hcCkKICAgICB7CiAgICAgICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGhhc2hNYXAuc2l6ZSgpKTsKQEAgLTUw
NSw2ICs1MzYsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFy
ZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaQogICAgICAgICAgICAgZW5jb2Rl
ciA8PCAqaXQ7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4KICAgICBz
dGF0aWMgc3RkOjpvcHRpb25hbDxIYXNoTWFwVHlwZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CiAgICAgewogICAgICAgICB1aW50MzJfdCBoYXNoTWFwU2l6ZTsKQEAgLTUzNSw2ICs1NjcsNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUg
SGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaQogICAgICAgICByZXR1cm4gaGFzaE1hcDsKICAgICB9
CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgogICAgIHN0YXRpYyBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaE1hcFR5cGUmIGhhc2hN
YXApCiAgICAgewogICAgICAgICBzdGQ6Om9wdGlvbmFsPEhhc2hNYXBUeXBlPiB0ZW1wSGFzaE1h
cDsKQEAgLTU0OSw2ICs1ODIsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1l
IE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaQogdGVtcGxhdGU8
dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcs
IHR5cGVuYW1lIEhhc2hUYWJsZVRyYWl0cz4gc3RydWN0IEFyZ3VtZW50Q29kZXI8SGFzaFNldDxL
ZXlBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgSGFzaFRhYmxlVHJhaXRzPj4gewogICAgIHR5
cGVkZWYgSGFzaFNldDxLZXlBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgSGFzaFRhYmxlVHJh
aXRzPiBIYXNoU2V0VHlwZTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CiAgICAg
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEhhc2hTZXRUeXBlJiBo
YXNoU2V0KQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
aGFzaFNldC5zaXplKCkpOwpAQCAtNTU2LDYgKzU5MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBI
YXNoCiAgICAgICAgICAgICBlbmNvZGVyIDw8ICppdDsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBEZWNvZGVyPgogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaFNldFR5cGUmIGhhc2hTZXQpCiAgICAgewogICAgICAg
ICBzdGQ6Om9wdGlvbmFsPEhhc2hTZXRUeXBlPiB0ZW1wSGFzaFNldDsKQEAgLTU2Nyw2ICs2MDIs
NyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgSGFzaAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgogICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPEhhc2hTZXRUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAgICAg
IHVpbnQ2NF90IGhhc2hTZXRTaXplOwpAQCAtNTk2LDYgKzYzMiw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBl
bmFtZSBIYXNoCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5
cGVuYW1lIEtleVRyYWl0c0FyZz4gc3RydWN0IEFyZ3VtZW50Q29kZXI8SGFzaENvdW50ZWRTZXQ8
S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+PiB7CiAgICAgdHlwZWRlZiBIYXNoQ291bnRl
ZFNldDxLZXlBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZz4gSGFzaENvdW50ZWRTZXRUeXBlOwog
ICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CiAgICAgc3RhdGljIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEhhc2hDb3VudGVkU2V0VHlwZSYgaGFzaENvdW50
ZWRTZXQpCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Piho
YXNoQ291bnRlZFNldC5zaXplKCkpOwpAQCAtNjA2LDYgKzY0Myw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnPiBzdHJ1
Y3QgQXJndW1lCiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RGVjb2Rlcj4KICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIEhhc2hDb3VudGVkU2V0VHlwZSYgaGFzaENvdW50ZWRTZXQpCiAgICAgewog
ICAgICAgICB1aW50NjRfdCBoYXNoQ291bnRlZFNldFNpemU7CkBAIC02MzcsNiArNjc1LDcgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlU
cmFpdHNBcmc+IHN0cnVjdCBBcmd1bWUKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUgRXJyb3JUeXBlPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxFeHBlY3RlZDxWYWx1
ZVR5cGUsIEVycm9yVHlwZT4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAg
IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBFeHBlY3RlZDxWYWx1
ZVR5cGUsIEVycm9yVHlwZT4mIGV4cGVjdGVkKQogICAgIHsKICAgICAgICAgaWYgKCFleHBlY3Rl
ZC5oYXNfdmFsdWUoKSkgewpAQCAtNjQ4LDYgKzY4Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlVHlwZSwgdHlwZW5hbWUgRXJyb3JUeXBlPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxFeHBlY3Rl
ZDxWCiAgICAgICAgIGVuY29kZXIgPDwgZXhwZWN0ZWQudmFsdWUoKTsKICAgICB9CiAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEV4cGVj
dGVkPFZhbHVlVHlwZSwgRXJyb3JUeXBlPj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAg
ewogICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGhhc1ZhbHVlOwpAQCAtNzA0LDYgKzc0NCw3
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEVycm9yVHlwZT4gc3RydWN0IEFyZ3VtZW50Q29kZXI8RXhw
ZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPj4gewogCiB0ZW1wbGF0ZTxzaXplX3QgaW5kZXgsIHR5cGVu
YW1lLi4uIFR5cGVzPgogc3RydWN0IFZhcmlhbnRDb2RlciB7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRW5jb2Rlcj4KICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgV1RGOjpWYXJpYW50PFR5cGVzLi4uPiYgdmFyaWFudCwgdW5zaWduZWQgaSkKICAgICB7CiAg
ICAgICAgIGlmIChpID09IGluZGV4KSB7CkBAIC03MTMsNiArNzU0LDcgQEAgc3RydWN0IFZhcmlh
bnRDb2RlciB7CiAgICAgICAgIFZhcmlhbnRDb2RlcjxpbmRleCAtIDEsIFR5cGVzLi4uPjo6ZW5j
b2RlKGVuY29kZXIsIHZhcmlhbnQsIGkpOwogICAgIH0KICAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBEZWNvZGVyPgogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdURjo6VmFyaWFudDxUeXBl
cy4uLj4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCB1bnNpZ25lZCBpKQogICAgIHsKICAgICAg
ICAgaWYgKGkgPT0gaW5kZXgpIHsKQEAgLTcyOCwxMiArNzcwLDE0IEBAIHN0cnVjdCBWYXJpYW50
Q29kZXIgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4KIHN0cnVjdCBWYXJpYW50Q29k
ZXI8MCwgVHlwZXMuLi4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0
YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXVEY6OlZhcmlhbnQ8VHlw
ZXMuLi4+JiB2YXJpYW50LCB1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNF
RChpLCAhaSk7CiAgICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8MD4odmFyaWFudCk7CiAgICAg
fQogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+CiAgICAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8V1RGOjpWYXJpYW50PFR5cGVzLi4uPj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IHVuc2lnbmVkIGkpCiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGksICFpKTsKQEAgLTc0
Niw2ICs3OTAsNyBAQCBzdHJ1Y3QgVmFyaWFudENvZGVyPDAsIFR5cGVzLi4uPiB7CiB9OwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V1RGOjpWYXJp
YW50PFR5cGVzLi4uPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CiAgICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdURjo6VmFyaWFudDxUeXBl
cy4uLj4mIHZhcmlhbnQpCiAgICAgewogICAgICAgICB1bnNpZ25lZCBpID0gdmFyaWFudC5pbmRl
eCgpOwpAQCAtNzUzLDYgKzc5OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+PiB7CiAgICAgICAgIFZhcmlh
bnRDb2RlcjxzaXplb2YuLi4oVHlwZXMpIC0gMSwgVHlwZXMuLi4+OjplbmNvZGUoZW5jb2Rlciwg
dmFyaWFudCwgaSk7CiAgICAgfQogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+
CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V1RGOjpWYXJpYW50PFR5cGVzLi4uPj4gZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiAgICAgewogICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PiBpOwpAQCAtODA0LDggKzg1MCwxNCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PGF1ZGl0X3Rva2VuX3Q+IHsKICNlbmRpZgogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENv
ZGVyPE1vbm9zdGF0ZT4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3Qg
TW9ub3N0YXRlJik7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TW9ub3N0YXRlPiBkZWNvZGUo
RGVjb2RlciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CisgICAgc3RhdGljIHZv
aWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBNb25vc3RhdGUmKSB7IH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIERlY29kZXI+CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TW9ub3N0YXRlPiBk
ZWNvZGUoRGVjb2RlciYpCisgICAgeworICAgICAgICByZXR1cm4gTW9ub3N0YXRlIHsgfTsKKyAg
ICB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL1N0cmVhbUNsaWVudENvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29ubmVjdGlvbi5jcHAKaW5kZXggYzc5MWFkZDRlMDFh
MjllNzUyZGMyZWRhNWJjMGYxZWY1YmVmOTk0Yi4uZjgyODc2OTU2YjQ5MWViNDFjY2MzZTcyZTRk
NjM2ZjM4M2NlZTA5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3Ry
ZWFtQ2xpZW50Q29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
U3RyZWFtQ2xpZW50Q29ubmVjdGlvbi5jcHAKQEAgLTQ2LDggKzQ2LDM2IEBAIHZvaWQgU3RyZWFt
Q2xpZW50Q29ubmVjdGlvbjo6c2V0V2FrZVVwU2VtYXBob3JlKElQQzo6U2VtYXBob3JlJiYgc2Vt
YXBob3JlKQogCiB2b2lkIFN0cmVhbUNsaWVudENvbm5lY3Rpb246Ondha2VVcFNlcnZlcigpCiB7
Ci0gICAgaWYgKG1fd2FrZVVwU2VtYXBob3JlKQotICAgICAgICBtX3dha2VVcFNlbWFwaG9yZS0+
c2lnbmFsKCk7CisgICAgaWYgKCFtX3dha2VVcFNlbWFwaG9yZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV93YWtlVXBTZW1hcGhvcmUtPnNpZ25hbCgpOworICAgIG1fcmVtYWluaW5nTWVzc2Fn
ZUNvdW50QmVmb3JlU2VuZGluZ1dha2VVcCA9IDA7Cit9CisKK3ZvaWQgU3RyZWFtQ2xpZW50Q29u
bmVjdGlvbjo6ZGVmZXJyZWRXYWtlVXBTZXJ2ZXIoKQoreworICAgIGlmICh3YWtlVXBNZXNzYWdl
SHlzdGVyZXNpcykKKyAgICAgICAgbV9yZW1haW5pbmdNZXNzYWdlQ291bnRCZWZvcmVTZW5kaW5n
V2FrZVVwID0gd2FrZVVwTWVzc2FnZUh5c3RlcmVzaXM7CisgICAgZWxzZQorICAgICAgICB3YWtl
VXBTZXJ2ZXIoKTsKK30KKwordm9pZCBTdHJlYW1DbGllbnRDb25uZWN0aW9uOjpkZWNyZW1lbnRS
ZW1haW5pbmdNZXNzYWdlQ291bnRCZWZvcmVTZW5kaW5nV2FrZVVwKCkKK3sKKyAgICBpZiAoIW1f
cmVtYWluaW5nTWVzc2FnZUNvdW50QmVmb3JlU2VuZGluZ1dha2VVcCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCEtLW1fcmVtYWluaW5nTWVzc2FnZUNvdW50QmVmb3JlU2VuZGluZ1dha2VV
cCkKKyAgICAgICAgd2FrZVVwU2VydmVyKCk7Cit9CisKK3ZvaWQgU3RyZWFtQ2xpZW50Q29ubmVj
dGlvbjo6c2VuZERlZmVycmVkV2FrZVVwTWVzc2FnZSgpCit7CisgICAgaWYgKCFtX3JlbWFpbmlu
Z01lc3NhZ2VDb3VudEJlZm9yZVNlbmRpbmdXYWtlVXApCisgICAgICAgIHJldHVybjsKKworICAg
IHdha2VVcFNlcnZlcigpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9TdHJlYW1DbGllbnRDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9TdHJlYW1DbGllbnRDb25uZWN0aW9uLmgKaW5kZXggM2UyYzI0YWM5NDc3ZTg0ZTBiYTM3
MTE0NjQ4MjdiYWFlOGUzOWQyNS4uODc2MDM2YjFiMTA3NzE5ZDRlMDU0ZmUwMWY2MTI4NjhlYTYw
NDE3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50
Q29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNsaWVu
dENvbm5lY3Rpb24uaApAQCAtNDcsNiArNDcsNyBAQCBuYW1lc3BhY2UgSVBDIHsKIC8vCiAvLyBU
aGUgU3RyZWFtQ2xpZW50Q29ubmVjdGlvbiB0cnVzdHMgdGhlIFN0cmVhbVNlcnZlckNvbm5lY3Rp
b24uCiBjbGFzcyBTdHJlYW1DbGllbnRDb25uZWN0aW9uIGZpbmFsIHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJlYW1DbGllbnRDb25u
ZWN0aW9uKTsKIHB1YmxpYzoKICAgICBTdHJlYW1DbGllbnRDb25uZWN0aW9uKENvbm5lY3Rpb24m
LCBzaXplX3QgYnVmZmVyU2l6ZSk7CkBAIC01NCw2ICs1NSw4IEBAIHB1YmxpYzoKICAgICBTdHJl
YW1Db25uZWN0aW9uQnVmZmVyJiBzdHJlYW1CdWZmZXIoKSB7IHJldHVybiBtX2J1ZmZlcjsgfQog
ICAgIHZvaWQgc2V0V2FrZVVwU2VtYXBob3JlKElQQzo6U2VtYXBob3JlJiYpOwogCisgICAgdm9p
ZCBzZW5kRGVmZXJyZWRXYWtlVXBNZXNzYWdlKCk7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBib29sIHNlbmQoVCYmIG1lc3NhZ2UsIE9iamVjdElkZW50aWZpZXI8VT4g
ZGVzdGluYXRpb25JRCwgVGltZW91dCk7CiAKICAgICB1c2luZyBTZW5kU3luY1Jlc3VsdCA9IENv
bm5lY3Rpb246OlNlbmRTeW5jUmVzdWx0OwpAQCAtNjUsNiArNjgsNyBAQCBwcml2YXRlOgogICAg
ICAgICB1aW50OF90KiBkYXRhOwogICAgICAgICBzaXplX3Qgc2l6ZTsKICAgICB9OworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgd2FrZVVwTWVzc2FnZUh5c3RlcmVzaXMgPSAyNTY7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbWluaW11bU1lc3NhZ2VTaXplID0gU3RyZWFtQ29u
bmVjdGlvbkVuY29kZXI6Om1pbmltdW1NZXNzYWdlU2l6ZTsKICAgICBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBtZXNzYWdlQWxpZ25tZW50ID0gU3RyZWFtQ29ubmVjdGlvbkVuY29kZXI6Om1lc3Nh
Z2VBbGlnbm1lbnQ7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTgzLDYgKzg3LDggQEAg
cHJpdmF0ZToKICAgICB9OwogICAgIFdha2VVcFNlcnZlciByZWxlYXNlKHNpemVfdCB3cml0ZVNp
emUpOwogICAgIHZvaWQgd2FrZVVwU2VydmVyKCk7CisgICAgdm9pZCBkZWZlcnJlZFdha2VVcFNl
cnZlcigpOworICAgIHZvaWQgZGVjcmVtZW50UmVtYWluaW5nTWVzc2FnZUNvdW50QmVmb3JlU2Vu
ZGluZ1dha2VVcCgpOwogCiAgICAgU3BhbiBhbGlnbmVkU3BhbihzaXplX3Qgb2Zmc2V0LCBzaXpl
X3QgbGltaXQpOwogICAgIHNpemVfdCBzaXplKHNpemVfdCBvZmZzZXQsIHNpemVfdCBsaW1pdCk7
CkBAIC0xMDMsNiArMTA5LDcgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9jbGllbnRPZmZzZXQg
eyAwIH07CiAgICAgU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciBtX2J1ZmZlcjsKICAgICBzdGQ6Om9w
dGlvbmFsPFNlbWFwaG9yZT4gbV93YWtlVXBTZW1hcGhvcmU7CisgICAgdW5zaWduZWQgbV9yZW1h
aW5pbmdNZXNzYWdlQ291bnRCZWZvcmVTZW5kaW5nV2FrZVVwIHsgMCB9OwogfTsKIAogdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KQEAgLTEzMSw3ICsxMzgsOSBAQCBib29sIFN0cmVh
bUNsaWVudENvbm5lY3Rpb246OnRyeVNlbmRTdHJlYW0oVCYgbWVzc2FnZSwgU3BhbiYgc3BhbikK
ICAgICBpZiAobWVzc2FnZUVuY29kZXIgPDwgbWVzc2FnZS5hcmd1bWVudHMoKSkgewogICAgICAg
ICBhdXRvIHdha2V1cFJlc3VsdCA9IHJlbGVhc2UobWVzc2FnZUVuY29kZXIuc2l6ZSgpKTsKICAg
ICAgICAgaWYgKHdha2V1cFJlc3VsdCA9PSBTdHJlYW1DbGllbnRDb25uZWN0aW9uOjpXYWtlVXBT
ZXJ2ZXI6OlllcykKLSAgICAgICAgICAgIHdha2VVcFNlcnZlcigpOworICAgICAgICAgICAgZGVm
ZXJyZWRXYWtlVXBTZXJ2ZXIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVjcmVtZW50
UmVtYWluaW5nTWVzc2FnZUNvdW50QmVmb3JlU2VuZGluZ1dha2VVcCgpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTcyLDYgKzE4MSw4IEBAIHN0
ZDo6b3B0aW9uYWw8U3RyZWFtQ2xpZW50Q29ubmVjdGlvbjo6U2VuZFN5bmNSZXN1bHQ+IFN0cmVh
bUNsaWVudENvbm5lY3Rpb246OnRyCiAKICAgICAgICAgaWYgKHdha2V1cFJlc3VsdCA9PSBTdHJl
YW1DbGllbnRDb25uZWN0aW9uOjpXYWtlVXBTZXJ2ZXI6OlllcykKICAgICAgICAgICAgIHdha2VV
cFNlcnZlcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZW5kRGVmZXJyZWRXYWtlVXBN
ZXNzYWdlKCk7CiAgICAgICAgIGlmIGNvbnN0ZXhwcihUOjppc1JlcGx5U3RyZWFtRW5jb2RhYmxl
KSB7CiAgICAgICAgICAgICBhdXRvIHJlcGx5U3BhbiA9IHRyeUFjcXVpcmVBbGwodGltZW91dCk7
CiAgICAgICAgICAgICBpZiAoIXJlcGx5U3BhbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL1N0cmVhbU1lc3NhZ2VSZWNlaXZlci5oIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvU3RyZWFtTWVzc2FnZVJlY2VpdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGM3MmY2MTJkMDli
ODYyZDI2N2I3YWY2ZTI1NmNhNjJlZjYyOTg3YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbU1lc3NhZ2VSZWNlaXZlci5oCkBAIC0wLDAgKzEsNDIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
CisKK25hbWVzcGFjZSBJUEMgeworCitjbGFzcyBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZTsK
K2NsYXNzIERlY29kZXI7CisKK2NsYXNzIFN0cmVhbU1lc3NhZ2VSZWNlaXZlciA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxTdHJlYW1NZXNzYWdlUmVjZWl2ZXI+IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5TdHJlYW1NZXNzYWdlUmVjZWl2ZXIoKSB7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlU3RyZWFtTWVzc2FnZShTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZSYsIERl
Y29kZXImKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24uY3BwIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5jcHAKaW5kZXggNjk3
MTIwOTVkOTZkZDczMDI1OTI1NDU4MjhjZTVjMjIxNWZlMTE3My4uYWZkZmRiMDBmM2Q5YTg1N2Rk
MDk0NTllYWNiMmYxYTNjMWFiNDNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5jcHAKQEAgLTE0MSw0ICsxNDEsMTQyIEBA
IHNpemVfdCBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZTo6Y2xhbXBlZExpbWl0KFNlcnZlckxp
bWl0IHNlcnZlckxpbWl0KSBjb25zdAogICAgIHJldHVybiBzdGQ6Om1pbihsaW1pdCwgZGF0YVNp
emUoKSAtIDEpOwogfQogCit2b2lkIFN0cmVhbVNlcnZlckNvbm5lY3Rpb246OnN0YXJ0UmVjZWl2
aW5nTWVzc2FnZXMoU3RyZWFtTWVzc2FnZVJlY2VpdmVyJiByZWNlaXZlciwgUmVjZWl2ZXJOYW1l
IHJlY2VpdmVyTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCkKK3sKKyAgICB7CisgICAgICAg
IGF1dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8dWludDhfdD4ocmVjZWl2ZXJO
YW1lKSwgZGVzdGluYXRpb25JRCk7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3JlY2VpdmVy
c0xvY2sgfTsKKyAgICAgICAgQVNTRVJUKCFtX3JlY2VpdmVycy5jb250YWlucyhrZXkpKTsKKyAg
ICAgICAgbV9yZWNlaXZlcnMuYWRkKGtleSwgcmVjZWl2ZXIpOworICAgIH0KKyAgICBTdHJlYW1T
ZXJ2ZXJDb25uZWN0aW9uQmFzZTo6c3RhcnRSZWNlaXZpbmdNZXNzYWdlc0ltcGwocmVjZWl2ZXJO
YW1lLCBkZXN0aW5hdGlvbklEKTsKK30KKwordm9pZCBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uOjpz
dG9wUmVjZWl2aW5nTWVzc2FnZXMoUmVjZWl2ZXJOYW1lIHJlY2VpdmVyTmFtZSwgdWludDY0X3Qg
ZGVzdGluYXRpb25JRCkKK3sKKyAgICBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZTo6c3RvcFJl
Y2VpdmluZ01lc3NhZ2VzSW1wbChyZWNlaXZlck5hbWUsIGRlc3RpbmF0aW9uSUQpOworICAgIGF1
dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8dWludDhfdD4ocmVjZWl2ZXJOYW1l
KSwgZGVzdGluYXRpb25JRCk7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fcmVjZWl2ZXJzTG9jayB9
OworICAgIEFTU0VSVChtX3JlY2VpdmVycy5jb250YWlucyhrZXkpKTsKKyAgICBtX3JlY2VpdmVy
cy5yZW1vdmUoa2V5KTsKK30KKworU3RyZWFtU2VydmVyQ29ubmVjdGlvbkJhc2U6OkRpc3BhdGNo
UmVzdWx0IFN0cmVhbVNlcnZlckNvbm5lY3Rpb246OmRpc3BhdGNoU3RyZWFtTWVzc2FnZXMoc2l6
ZV90IG1lc3NhZ2VMaW1pdCkKK3sKKyAgICBSZWZQdHI8U3RyZWFtTWVzc2FnZVJlY2VpdmVyPiBj
dXJyZW50UmVjZWl2ZXI7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBXVEY6OmlzVmFsaWQoUmVj
ZWl2ZXJOYW1lKS4KKyAgICB1aW50OF90IGN1cnJlbnRSZWNlaXZlck5hbWUgPSBzdGF0aWNfY2Fz
dDx1aW50OF90PihSZWNlaXZlck5hbWU6OkludmFsaWQpOworCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtZXNzYWdlTGltaXQ7ICsraSkgeworICAgICAgICBhdXRvIHNwYW4gPSB0cnlBY3F1
aXJlKCk7CisgICAgICAgIGlmICghc3BhbikKKyAgICAgICAgICAgIHJldHVybiBEaXNwYXRjaFJl
c3VsdDo6SGFzTm9NZXNzYWdlczsKKyAgICAgICAgSVBDOjpEZWNvZGVyIGRlY29kZXIgeyBzcGFu
LT5kYXRhLCBzcGFuLT5zaXplLCBtX2N1cnJlbnREZXN0aW5hdGlvbklEIH07CisgICAgICAgIGlm
ICghZGVjb2Rlci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIG1fY29ubmVjdGlvbi0+ZGlzcGF0
Y2hEaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoZGVjb2Rlci5tZXNzYWdlTmFtZSgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBEaXNwYXRjaFJlc3VsdDo6SGFzTm9NZXNzYWdlczsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VOYW1lOjpTZXRTdHJl
YW1EZXN0aW5hdGlvbklEKSB7CisgICAgICAgICAgICBpZiAoIXByb2Nlc3NTZXRTdHJlYW1EZXN0
aW5hdGlvbklEKFdURk1vdmUoZGVjb2RlciksIGN1cnJlbnRSZWNlaXZlcikpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIERpc3BhdGNoUmVzdWx0OjpIYXNOb01lc3NhZ2VzOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9
PSBNZXNzYWdlTmFtZTo6UHJvY2Vzc091dE9mU3RyZWFtTWVzc2FnZSkgeworICAgICAgICAgICAg
aWYgKCFkaXNwYXRjaE91dE9mU3RyZWFtTWVzc2FnZShXVEZNb3ZlKGRlY29kZXIpKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gRGlzcGF0Y2hSZXN1bHQ6Okhhc05vTWVzc2FnZXM7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY3VycmVudFJlY2VpdmVyTmFt
ZSAhPSBzdGF0aWNfY2FzdDx1aW50OF90PihkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSkp
IHsKKyAgICAgICAgICAgIGN1cnJlbnRSZWNlaXZlck5hbWUgPSBzdGF0aWNfY2FzdDx1aW50OF90
PihkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CisgICAgICAgICAgICBjdXJyZW50UmVj
ZWl2ZXIgPSBudWxscHRyOworICAgICAgICB9CisgICAgICAgIGlmICghY3VycmVudFJlY2VpdmVy
KSB7CisgICAgICAgICAgICBhdXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KGN1cnJlbnRSZWNlaXZlck5hbWUpLCBtX2N1cnJlbnREZXN0aW5hdGlvbklEKTsKKyAg
ICAgICAgICAgIGlmICghUmVjZWl2ZXJzTWFwOjppc1ZhbGlkS2V5KGtleSkpIHsKKyAgICAgICAg
ICAgICAgICBtX2Nvbm5lY3Rpb24tPmRpc3BhdGNoRGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKGRl
Y29kZXIubWVzc2FnZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIERpc3BhdGNoUmVz
dWx0OjpIYXNOb01lc3NhZ2VzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgTG9ja2VyIGxv
Y2tlciB7IG1fcmVjZWl2ZXJzTG9jayB9OworICAgICAgICAgICAgY3VycmVudFJlY2VpdmVyID0g
bV9yZWNlaXZlcnMuZ2V0KGtleSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjdXJyZW50UmVj
ZWl2ZXIpIHsKKyAgICAgICAgICAgIC8vIFZhbGlkIHNjZW5hcmlvIGlzIHdoZW4gcmVjZWl2ZXIg
aGFzIGJlZW4gcmVtb3ZlZCwgYnV0IHRoZXJlIGFyZSBtZXNzYWdlcyBmb3IgaXQgaW4gdGhlIGJ1
ZmZlci4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBkbyBub3QgaGF2ZSBhIHJlY2Vp
dmVyLCB3ZSBkb24ndCBrbm93IGhvdyB0byBkZWNvZGUgdGhlIG1lc3NhZ2UuCisgICAgICAgICAg
ICAvLyBUaGlzIG1lYW5zIHdlIG11c3QgdGltZW91dCBldmVyeSByZWNlaXZlciBpbiB0aGUgc3Ry
ZWFtIGNvbm5lY3Rpb24uCisgICAgICAgICAgICAvLyBDdXJyZW50bHkgd2UgYXNzZXJ0IHRoYXQg
dGhlIHJlY2VpdmVycyBhcmUgZW1wdHksIGFzIHdlIG9ubHkgaGF2ZSB1cCB0byBvbmUgcmVjZWl2
ZXIgaW4KKyAgICAgICAgICAgIC8vIGEgc3RyZWFtIGNvbm5lY3Rpb24gdW50aWwgcG9zc2liaWxp
dHkgb2Ygc2tpcHBpbmcgaXMgaW1wbGVtZW50ZWQgcHJvcGVybHkuCisgICAgICAgICAgICBMb2Nr
ZXIgbG9ja2VyIHsgbV9yZWNlaXZlcnNMb2NrIH07CisgICAgICAgICAgICBBU1NFUlQobV9yZWNl
aXZlcnMuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIHJldHVybiBEaXNwYXRjaFJlc3VsdDo6SGFz
Tm9NZXNzYWdlczsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWRpc3BhdGNoU3RyZWFtTWVzc2Fn
ZShXVEZNb3ZlKGRlY29kZXIpLCAqY3VycmVudFJlY2VpdmVyKSkKKyAgICAgICAgICAgIHJldHVy
biBEaXNwYXRjaFJlc3VsdDo6SGFzTm9NZXNzYWdlczsKKyAgICB9CisgICAgcmV0dXJuIERpc3Bh
dGNoUmVzdWx0OjpIYXNNb3JlTWVzc2FnZXM7Cit9CisKK2Jvb2wgU3RyZWFtU2VydmVyQ29ubmVj
dGlvbjo6cHJvY2Vzc1NldFN0cmVhbURlc3RpbmF0aW9uSUQoRGVjb2RlciYmIGRlY29kZXIsIFJl
ZlB0cjxTdHJlYW1NZXNzYWdlUmVjZWl2ZXI+JiBjdXJyZW50UmVjZWl2ZXIpCit7CisgICAgdWlu
dDY0X3QgZGVzdGluYXRpb25JRCA9IDA7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkZXN0aW5h
dGlvbklEKSkgeworICAgICAgICBtX2Nvbm5lY3Rpb24tPmRpc3BhdGNoRGlkUmVjZWl2ZUludmFs
aWRNZXNzYWdlKGRlY29kZXIubWVzc2FnZU5hbWUoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKG1fY3VycmVudERlc3RpbmF0aW9uSUQgIT0gZGVzdGluYXRpb25JRCkg
eworICAgICAgICBtX2N1cnJlbnREZXN0aW5hdGlvbklEID0gZGVzdGluYXRpb25JRDsKKyAgICAg
ICAgY3VycmVudFJlY2VpdmVyID0gbnVsbHB0cjsKKyAgICB9CisgICAgcmVsZWFzZShkZWNvZGVy
LmN1cnJlbnRCdWZmZXJQb3NpdGlvbigpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBT
dHJlYW1TZXJ2ZXJDb25uZWN0aW9uOjpkaXNwYXRjaFN0cmVhbU1lc3NhZ2UoRGVjb2RlciYmIGRl
Y29kZXIsIFN0cmVhbU1lc3NhZ2VSZWNlaXZlciYgcmVjZWl2ZXIpCit7CisgICAgQVNTRVJUKCFt
X2lzRGlzcGF0Y2hpbmdTdHJlYW1NZXNzYWdlKTsKKyAgICBtX2lzRGlzcGF0Y2hpbmdTdHJlYW1N
ZXNzYWdlID0gdHJ1ZTsKKyAgICByZWNlaXZlci5kaWRSZWNlaXZlU3RyZWFtTWVzc2FnZSgqdGhp
cywgZGVjb2Rlcik7CisgICAgbV9pc0Rpc3BhdGNoaW5nU3RyZWFtTWVzc2FnZSA9IGZhbHNlOwor
ICAgIGlmICghZGVjb2Rlci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgbV9jb25uZWN0aW9uLT5kaXNw
YXRjaERpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShkZWNvZGVyLm1lc3NhZ2VOYW1lKCkpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChkZWNvZGVyLmlzU3luY01lc3NhZ2Uo
KSkKKyAgICAgICAgcmVsZWFzZUFsbCgpOworICAgIGVsc2UKKyAgICAgICAgcmVsZWFzZShkZWNv
ZGVyLmN1cnJlbnRCdWZmZXJQb3NpdGlvbigpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uOjpkaXNwYXRjaE91dE9mU3RyZWFtTWVzc2FnZShEZWNv
ZGVyJiYgZGVjb2RlcikKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gbWVzc2FnZTsK
KyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX291dE9mU3RyZWFtTWVzc2FnZXNMb2Nr
IH07CisgICAgICAgIGlmIChtX291dE9mU3RyZWFtTWVzc2FnZXMuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtZXNzYWdlID0gbV9vdXRPZlN0cmVhbU1lc3Nh
Z2VzLnRha2VGaXJzdCgpOworICAgIH0KKyAgICBpZiAoIW1lc3NhZ2UpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFJlZlB0cjxTdHJlYW1NZXNzYWdlUmVjZWl2ZXI+IHJlY2VpdmVyOwor
ICAgIHsKKyAgICAgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDx1aW50
OF90PihtZXNzYWdlLT5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkpLCBtZXNzYWdlLT5kZXN0aW5hdGlv
bklEKCkpOworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9yZWNlaXZlcnNMb2NrIH07CisgICAg
ICAgIHJlY2VpdmVyID0gbV9yZWNlaXZlcnMuZ2V0KGtleSk7CisgICAgfQorICAgIGlmIChyZWNl
aXZlcikgeworICAgICAgICByZWNlaXZlci0+ZGlkUmVjZWl2ZVN0cmVhbU1lc3NhZ2UoKnRoaXMs
ICptZXNzYWdlKTsKKyAgICAgICAgaWYgKCFtZXNzYWdlLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
ICAgIG1fY29ubmVjdGlvbi0+ZGlzcGF0Y2hEaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UobWVzc2Fn
ZS0+bWVzc2FnZU5hbWUoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisgICAgLy8gSWYgcmVjZWl2ZXIgZG9lcyBub3QgZXhpc3QgaWYgaXQgaGFzIGJlZW4g
cmVtb3ZlZCBidXQgbWVzc2FnZXMgYXJlIHN0aWxsIHBlbmRpbmcgdG8gYmUKKyAgICAvLyBwcm9j
ZXNzZWQuIEl0J3Mgb2sgdG8gc2tpcCBzdWNoIG1lc3NhZ2VzLgorICAgIC8vIEZJWE1FOiBOb3Rl
LCBjb3JyZXNwb25kaW5nIHNraXAgaXMgbm90IHBvc3NpYmxlIGF0IHRoZSBtb21lbnQgZm9yIHN0
cmVhbSBtZXNzYWdlcy4KKyAgICByZWxlYXNlKGRlY29kZXIuY3VycmVudEJ1ZmZlclBvc2l0aW9u
KCkpOworICAgIHJldHVybiB0cnVlOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmgKaW5kZXggYzljOWJiNzU5ZGEzYzhj
NzgxNzY3YWJkM2RhM2Y2ZGUwOGMyNWVlNS4uM2M0YWUwZDhjNzdiMjk5ZjQ3ZjA3YTRhNzViMGFm
NWFjOTQyMjhjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFt
U2VydmVyQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVh
bVNlcnZlckNvbm5lY3Rpb24uaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VO
YW1lcy5oIgogI2luY2x1ZGUgIlN0cmVhbUNvbm5lY3Rpb25CdWZmZXIuaCIKICNpbmNsdWRlICJT
dHJlYW1Db25uZWN0aW9uRW5jb2Rlci5oIgorI2luY2x1ZGUgIlN0cmVhbU1lc3NhZ2VSZWNlaXZl
ci5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgpAQCAtMTMxLDcgKzEzMiw2IEBAIHZvaWQgU3RyZWFtU2Vy
dmVyQ29ubmVjdGlvbkJhc2U6OnNlbmRTeW5jUmVwbHkoQ29ubmVjdGlvbjo6U3luY1JlcXVlc3RJ
RCBzeW5jUmVxCiAvLyAgIHZvaWQgZGlkUmVjZWl2ZVN0cmVhbU1lc3NhZ2UoU3RyZWFtU2VydmVy
Q29ubmVjdGlvbkJhc2UmLCBEZWNvZGVyJik7CiAvLwogLy8gVGhlIFN0cmVhbVNlcnZlckNvbm5l
Y3Rpb24gZG9lcyBub3QgdHJ1c3QgdGhlIFN0cmVhbUNsaWVudENvbm5lY3Rpb24uCi10ZW1wbGF0
ZTx0eXBlbmFtZSBSZWNlaXZlcj4KIGNsYXNzIFN0cmVhbVNlcnZlckNvbm5lY3Rpb24gZmluYWwg
OiBwdWJsaWMgU3RyZWFtU2VydmVyQ29ubmVjdGlvbkJhc2UgewogcHVibGljOgogICAgIHN0YXRp
YyBSZWY8U3RyZWFtU2VydmVyQ29ubmVjdGlvbj4gY3JlYXRlKENvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIFN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJiBzdHJlYW1CdWZmZXIsIFN0cmVhbUNvbm5lY3Rp
b25Xb3JrUXVldWUmIHdvcmtRdWV1ZSkKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAg
fQogICAgIH5TdHJlYW1TZXJ2ZXJDb25uZWN0aW9uKCkgZmluYWwgPSBkZWZhdWx0OwogCi0gICAg
dm9pZCBzdGFydFJlY2VpdmluZ01lc3NhZ2VzKFJlY2VpdmVyJiwgUmVjZWl2ZXJOYW1lLCB1aW50
NjRfdCBkZXN0aW5hdGlvbklEKTsKKyAgICB2b2lkIHN0YXJ0UmVjZWl2aW5nTWVzc2FnZXMoU3Ry
ZWFtTWVzc2FnZVJlY2VpdmVyJiwgUmVjZWl2ZXJOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklE
KTsKICAgICAvLyBTdG9wcyB0aGUgbWVzc2FnZSByZWNlaXB0LiBOb3RlOiBhbHJlYWR5IHJlY2Vp
dmVkIG1lc3NhZ2VzIG1pZ2h0IHN0aWxsIGJlIGRlbGl2ZXJlZC4KICAgICB2b2lkIHN0b3BSZWNl
aXZpbmdNZXNzYWdlcyhSZWNlaXZlck5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQpOwogCkBA
IC0xNTIsMTU3ICsxNTIsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgOiBTdHJlYW1TZXJ2ZXJDb25u
ZWN0aW9uQmFzZShjb25uZWN0aW9uLCBXVEZNb3ZlKHN0cmVhbUJ1ZmZlciksIHdvcmtRdWV1ZSkK
ICAgICB7CiAgICAgfQotICAgIGJvb2wgcHJvY2Vzc1NldFN0cmVhbURlc3RpbmF0aW9uSUQoRGVj
b2RlciYmLCBSZWZQdHI8UmVjZWl2ZXI+JiBjdXJyZW50UmVjZWl2ZXIpOwotICAgIGJvb2wgZGlz
cGF0Y2hTdHJlYW1NZXNzYWdlKERlY29kZXImJiwgUmVjZWl2ZXImKTsKKyAgICBib29sIHByb2Nl
c3NTZXRTdHJlYW1EZXN0aW5hdGlvbklEKERlY29kZXImJiwgUmVmUHRyPFN0cmVhbU1lc3NhZ2VS
ZWNlaXZlcj4mIGN1cnJlbnRSZWNlaXZlcik7CisgICAgYm9vbCBkaXNwYXRjaFN0cmVhbU1lc3Nh
Z2UoRGVjb2RlciYmLCBTdHJlYW1NZXNzYWdlUmVjZWl2ZXImKTsKICAgICBib29sIGRpc3BhdGNo
T3V0T2ZTdHJlYW1NZXNzYWdlKERlY29kZXImJik7CiAgICAgTG9jayBtX3JlY2VpdmVyc0xvY2s7
Ci0gICAgdXNpbmcgUmVjZWl2ZXJzTWFwID0gSGFzaE1hcDxzdGQ6OnBhaXI8dWludDhfdCwgdWlu
dDY0X3Q+LCBSZWY8UmVjZWl2ZXI+PjsKKyAgICB1c2luZyBSZWNlaXZlcnNNYXAgPSBIYXNoTWFw
PHN0ZDo6cGFpcjx1aW50OF90LCB1aW50NjRfdD4sIFJlZjxTdHJlYW1NZXNzYWdlUmVjZWl2ZXI+
PjsKICAgICBSZWNlaXZlcnNNYXAgbV9yZWNlaXZlcnMgV1RGX0dVQVJERURfQllfTE9DSyhtX3Jl
Y2VpdmVyc0xvY2spOwogICAgIHVpbnQ2NF90IG1fY3VycmVudERlc3RpbmF0aW9uSUQgeyAwIH07
CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZWNlaXZlcj4KLXZvaWQgU3RyZWFtU2VydmVyQ29u
bmVjdGlvbjxSZWNlaXZlcj46OnN0YXJ0UmVjZWl2aW5nTWVzc2FnZXMoUmVjZWl2ZXImIHJlY2Vp
dmVyLCBSZWNlaXZlck5hbWUgcmVjZWl2ZXJOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKQot
ewotICAgIHsKLSAgICAgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDx1
aW50OF90PihyZWNlaXZlck5hbWUpLCBkZXN0aW5hdGlvbklEKTsKLSAgICAgICAgTG9ja2VyIGxv
Y2tlciB7IG1fcmVjZWl2ZXJzTG9jayB9OwotICAgICAgICBBU1NFUlQoIW1fcmVjZWl2ZXJzLmNv
bnRhaW5zKGtleSkpOwotICAgICAgICBtX3JlY2VpdmVycy5hZGQoa2V5LCByZWNlaXZlcik7Ci0g
ICAgfQotICAgIFN0cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlOjpzdGFydFJlY2VpdmluZ01lc3Nh
Z2VzSW1wbChyZWNlaXZlck5hbWUsIGRlc3RpbmF0aW9uSUQpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBSZWNlaXZlcj4KLXZvaWQgU3RyZWFtU2VydmVyQ29ubmVjdGlvbjxSZWNlaXZlcj46OnN0
b3BSZWNlaXZpbmdNZXNzYWdlcyhSZWNlaXZlck5hbWUgcmVjZWl2ZXJOYW1lLCB1aW50NjRfdCBk
ZXN0aW5hdGlvbklEKQotewotICAgIFN0cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlOjpzdG9wUmVj
ZWl2aW5nTWVzc2FnZXNJbXBsKHJlY2VpdmVyTmFtZSwgZGVzdGluYXRpb25JRCk7Ci0gICAgYXV0
byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDx1aW50OF90PihyZWNlaXZlck5hbWUp
LCBkZXN0aW5hdGlvbklEKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgbV9yZWNlaXZlcnNMb2NrIH07
Ci0gICAgQVNTRVJUKG1fcmVjZWl2ZXJzLmNvbnRhaW5zKGtleSkpOwotICAgIG1fcmVjZWl2ZXJz
LnJlbW92ZShrZXkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZWNlaXZlcj4KLVN0cmVhbVNl
cnZlckNvbm5lY3Rpb25CYXNlOjpEaXNwYXRjaFJlc3VsdCBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9u
PFJlY2VpdmVyPjo6ZGlzcGF0Y2hTdHJlYW1NZXNzYWdlcyhzaXplX3QgbWVzc2FnZUxpbWl0KQot
ewotICAgIFJlZlB0cjxSZWNlaXZlcj4gY3VycmVudFJlY2VpdmVyOwotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgV1RGOjppc1ZhbGlkKFJlY2VpdmVyTmFtZSkuCi0gICAgdWludDhfdCBjdXJyZW50
UmVjZWl2ZXJOYW1lID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oUmVjZWl2ZXJOYW1lOjpJbnZhbGlk
KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWVzc2FnZUxpbWl0OyArK2kpIHsKLSAg
ICAgICAgYXV0byBzcGFuID0gdHJ5QWNxdWlyZSgpOwotICAgICAgICBpZiAoIXNwYW4pCi0gICAg
ICAgICAgICByZXR1cm4gRGlzcGF0Y2hSZXN1bHQ6Okhhc05vTWVzc2FnZXM7Ci0gICAgICAgIElQ
Qzo6RGVjb2RlciBkZWNvZGVyIHsgc3Bhbi0+ZGF0YSwgc3Bhbi0+c2l6ZSwgbV9jdXJyZW50RGVz
dGluYXRpb25JRCB9OwotICAgICAgICBpZiAoIWRlY29kZXIuaXNWYWxpZCgpKSB7Ci0gICAgICAg
ICAgICBtX2Nvbm5lY3Rpb24tPmRpc3BhdGNoRGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKGRlY29k
ZXIubWVzc2FnZU5hbWUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gRGlzcGF0Y2hSZXN1bHQ6Okhh
c05vTWVzc2FnZXM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUo
KSA9PSBNZXNzYWdlTmFtZTo6U2V0U3RyZWFtRGVzdGluYXRpb25JRCkgewotICAgICAgICAgICAg
aWYgKCFwcm9jZXNzU2V0U3RyZWFtRGVzdGluYXRpb25JRChXVEZNb3ZlKGRlY29kZXIpLCBjdXJy
ZW50UmVjZWl2ZXIpKQotICAgICAgICAgICAgICAgIHJldHVybiBEaXNwYXRjaFJlc3VsdDo6SGFz
Tm9NZXNzYWdlczsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZU5hbWU6OlByb2Nlc3NPdXRPZlN0cmVh
bU1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGlmICghZGlzcGF0Y2hPdXRPZlN0cmVhbU1lc3NhZ2Uo
V1RGTW92ZShkZWNvZGVyKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIERpc3BhdGNoUmVzdWx0
OjpIYXNOb01lc3NhZ2VzOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGN1cnJlbnRSZWNlaXZlck5hbWUgIT0gc3RhdGljX2Nhc3Q8dWludDhfdD4oZGVjb2Rl
ci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkpKSB7Ci0gICAgICAgICAgICBjdXJyZW50UmVjZWl2ZXJO
YW1lID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkp
OwotICAgICAgICAgICAgY3VycmVudFJlY2VpdmVyID0gbnVsbHB0cjsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoIWN1cnJlbnRSZWNlaXZlcikgewotICAgICAgICAgICAgYXV0byBrZXkgPSBzdGQ6
Om1ha2VfcGFpcihzdGF0aWNfY2FzdDx1aW50OF90PihjdXJyZW50UmVjZWl2ZXJOYW1lKSwgbV9j
dXJyZW50RGVzdGluYXRpb25JRCk7Ci0gICAgICAgICAgICBpZiAoIVJlY2VpdmVyc01hcDo6aXNW
YWxpZEtleShrZXkpKSB7Ci0gICAgICAgICAgICAgICAgbV9jb25uZWN0aW9uLT5kaXNwYXRjaERp
ZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShkZWNvZGVyLm1lc3NhZ2VOYW1lKCkpOwotICAgICAgICAg
ICAgICAgIHJldHVybiBEaXNwYXRjaFJlc3VsdDo6SGFzTm9NZXNzYWdlczsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3JlY2VpdmVyc0xvY2sgfTsKLSAgICAg
ICAgICAgIGN1cnJlbnRSZWNlaXZlciA9IG1fcmVjZWl2ZXJzLmdldChrZXkpOwotICAgICAgICB9
Ci0gICAgICAgIGlmICghY3VycmVudFJlY2VpdmVyKSB7Ci0gICAgICAgICAgICAvLyBWYWxpZCBz
Y2VuYXJpbyBpcyB3aGVuIHJlY2VpdmVyIGhhcyBiZWVuIHJlbW92ZWQsIGJ1dCB0aGVyZSBhcmUg
bWVzc2FnZXMgZm9yIGl0IGluIHRoZSBidWZmZXIuCi0gICAgICAgICAgICAvLyBGSVhNRTogU2lu
Y2Ugd2UgZG8gbm90IGhhdmUgYSByZWNlaXZlciwgd2UgZG9uJ3Qga25vdyBob3cgdG8gZGVjb2Rl
IHRoZSBtZXNzYWdlLgotICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBtdXN0IHRpbWVvdXQg
ZXZlcnkgcmVjZWl2ZXIgaW4gdGhlIHN0cmVhbSBjb25uZWN0aW9uLgotICAgICAgICAgICAgLy8g
Q3VycmVudGx5IHdlIGFzc2VydCB0aGF0IHRoZSByZWNlaXZlcnMgYXJlIGVtcHR5LCBhcyB3ZSBv
bmx5IGhhdmUgdXAgdG8gb25lIHJlY2VpdmVyIGluCi0gICAgICAgICAgICAvLyBhIHN0cmVhbSBj
b25uZWN0aW9uIHVudGlsIHBvc3NpYmlsaXR5IG9mIHNraXBwaW5nIGlzIGltcGxlbWVudGVkIHBy
b3Blcmx5LgotICAgICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fcmVjZWl2ZXJzTG9jayB9Owot
ICAgICAgICAgICAgQVNTRVJUKG1fcmVjZWl2ZXJzLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gRGlzcGF0Y2hSZXN1bHQ6Okhhc05vTWVzc2FnZXM7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKCFkaXNwYXRjaFN0cmVhbU1lc3NhZ2UoV1RGTW92ZShkZWNvZGVyKSwgKmN1cnJlbnRSZWNl
aXZlcikpCi0gICAgICAgICAgICByZXR1cm4gRGlzcGF0Y2hSZXN1bHQ6Okhhc05vTWVzc2FnZXM7
Ci0gICAgfQotICAgIHJldHVybiBEaXNwYXRjaFJlc3VsdDo6SGFzTW9yZU1lc3NhZ2VzOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBSZWNlaXZlcj4KLWJvb2wgU3RyZWFtU2VydmVyQ29ubmVjdGlv
bjxSZWNlaXZlcj46OnByb2Nlc3NTZXRTdHJlYW1EZXN0aW5hdGlvbklEKERlY29kZXImJiBkZWNv
ZGVyLCBSZWZQdHI8UmVjZWl2ZXI+JiBjdXJyZW50UmVjZWl2ZXIpCi17Ci0gICAgdWludDY0X3Qg
ZGVzdGluYXRpb25JRCA9IDA7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShkZXN0aW5hdGlvbklE
KSkgewotICAgICAgICBtX2Nvbm5lY3Rpb24tPmRpc3BhdGNoRGlkUmVjZWl2ZUludmFsaWRNZXNz
YWdlKGRlY29kZXIubWVzc2FnZU5hbWUoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgaWYgKG1fY3VycmVudERlc3RpbmF0aW9uSUQgIT0gZGVzdGluYXRpb25JRCkgewotICAg
ICAgICBtX2N1cnJlbnREZXN0aW5hdGlvbklEID0gZGVzdGluYXRpb25JRDsKLSAgICAgICAgY3Vy
cmVudFJlY2VpdmVyID0gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmVsZWFzZShkZWNvZGVyLmN1cnJl
bnRCdWZmZXJQb3NpdGlvbigpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgUmVjZWl2ZXI+Ci1ib29sIFN0cmVhbVNlcnZlckNvbm5lY3Rpb248UmVjZWl2ZXI+Ojpk
aXNwYXRjaFN0cmVhbU1lc3NhZ2UoRGVjb2RlciYmIGRlY29kZXIsIFJlY2VpdmVyJiByZWNlaXZl
cikKLXsKLSAgICBBU1NFUlQoIW1faXNEaXNwYXRjaGluZ1N0cmVhbU1lc3NhZ2UpOwotICAgIG1f
aXNEaXNwYXRjaGluZ1N0cmVhbU1lc3NhZ2UgPSB0cnVlOwotICAgIHJlY2VpdmVyLmRpZFJlY2Vp
dmVTdHJlYW1NZXNzYWdlKCp0aGlzLCBkZWNvZGVyKTsKLSAgICBtX2lzRGlzcGF0Y2hpbmdTdHJl
YW1NZXNzYWdlID0gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmlzVmFsaWQoKSkgewotICAgICAg
ICBtX2Nvbm5lY3Rpb24tPmRpc3BhdGNoRGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKGRlY29kZXIu
bWVzc2FnZU5hbWUoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGRl
Y29kZXIuaXNTeW5jTWVzc2FnZSgpKQotICAgICAgICByZWxlYXNlQWxsKCk7Ci0gICAgZWxzZQot
ICAgICAgICByZWxlYXNlKGRlY29kZXIuY3VycmVudEJ1ZmZlclBvc2l0aW9uKCkpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZWNlaXZlcj4KLWJvb2wgU3RyZWFt
U2VydmVyQ29ubmVjdGlvbjxSZWNlaXZlcj46OmRpc3BhdGNoT3V0T2ZTdHJlYW1NZXNzYWdlKERl
Y29kZXImJiBkZWNvZGVyKQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBtZXNzYWdl
OwotICAgIHsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fb3V0T2ZTdHJlYW1NZXNzYWdlc0xv
Y2sgfTsKLSAgICAgICAgaWYgKG1fb3V0T2ZTdHJlYW1NZXNzYWdlcy5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1lc3NhZ2UgPSBtX291dE9mU3RyZWFtTWVz
c2FnZXMudGFrZUZpcnN0KCk7Ci0gICAgfQotICAgIGlmICghbWVzc2FnZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPFJlY2VpdmVyPiByZWNlaXZlcjsKLSAgICB7Ci0gICAg
ICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8dWludDhfdD4obWVzc2Fn
ZS0+bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSwgbWVzc2FnZS0+ZGVzdGluYXRpb25JRCgpKTsKLSAg
ICAgICAgTG9ja2VyIGxvY2tlciB7IG1fcmVjZWl2ZXJzTG9jayB9OwotICAgICAgICByZWNlaXZl
ciA9IG1fcmVjZWl2ZXJzLmdldChrZXkpOwotICAgIH0KLSAgICBpZiAocmVjZWl2ZXIpIHsKLSAg
ICAgICAgcmVjZWl2ZXItPmRpZFJlY2VpdmVTdHJlYW1NZXNzYWdlKCp0aGlzLCAqbWVzc2FnZSk7
Ci0gICAgICAgIGlmICghbWVzc2FnZS0+aXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBtX2Nvbm5l
Y3Rpb24tPmRpc3BhdGNoRGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKG1lc3NhZ2UtPm1lc3NhZ2VO
YW1lKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAg
IC8vIElmIHJlY2VpdmVyIGRvZXMgbm90IGV4aXN0IGlmIGl0IGhhcyBiZWVuIHJlbW92ZWQgYnV0
IG1lc3NhZ2VzIGFyZSBzdGlsbCBwZW5kaW5nIHRvIGJlCi0gICAgLy8gcHJvY2Vzc2VkLiBJdCdz
IG9rIHRvIHNraXAgc3VjaCBtZXNzYWdlcy4KLSAgICAvLyBGSVhNRTogTm90ZSwgY29ycmVzcG9u
ZGluZyBza2lwIGlzIG5vdCBwb3NzaWJsZSBhdCB0aGUgbW9tZW50IGZvciBzdHJlYW0gbWVzc2Fn
ZXMuCi0gICAgcmVsZWFzZShkZWNvZGVyLmN1cnJlbnRCdWZmZXJQb3NpdGlvbigpKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvVGltZW91dC5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvVGltZW91dC5oCmluZGV4
IGE4OTk4OTcxNzc3M2E5ZTJlNDdhMzNhOWZjYmFhMTBiZTg1OTJlMzcuLmU2ZWY5ZmE3MWU4NDBl
MTMwZTRjOTY3ZTlkZmNjZDIzMmRkMzk3MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL1RpbWVvdXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9UaW1l
b3V0LmgKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBUaW1lb3V0IHsK
IHB1YmxpYzoKICAgICBUaW1lb3V0KFNlY29uZHMgdGltZURlbHRhKQotICAgICAgICA6IG1fZGVh
ZGxpbmUoTW9ub3RvbmljVGltZTo6bm93KCkgKyB0aW1lRGVsdGEpCisgICAgICAgIDogbV9kZWFk
bGluZShzdGQ6OmlzaW5mKHRpbWVEZWx0YSkgPyBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpIDog
TW9ub3RvbmljVGltZTo6bm93KCkgKyB0aW1lRGVsdGEpCiAgICAgewogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9X
ZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggZWQ5NGEzZWU1NjY4YTM0OGJj
NzZhZGJkNDJiNjUwMDcxZDFiOTUxYS4uNGIwNmJmMjJlNmQxOWZmZWEwMTI4YmRmOWYwMTIwYjM1
NDhmZmE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdl
cy5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0y
NzUsNyArMjc1LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQo
KToKICAgICAgICAgJ1dlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZScsCiAgICAgICAgICdX
ZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0RvbWFpbicsCiAgICAgICAgICdXZWJDb3JlOjpEaWN0
YXRpb25Db250ZXh0JywKLSAgICAgICAgJ1dlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaElkZW50
aWZpZXInLAorICAgICAgICAnV2ViQ29yZTo6Rmx1c2hJZGVudGlmaWVyJywKICAgICAgICAgJ1dl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJD
b3JlOjpEb2N1bWVudElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RG9jdW1lbnRPcldv
cmtlcklkZW50aWZpZXInLApAQCAtNjgyLDcgKzY4Miw3IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBl
KHR5cGUpOgogICAgICAgICAnSW5zcGVjdG9yOjpFeHRlbnNpb25FcnJvcic6IFsnIkluc3BlY3Rv
ckV4dGVuc2lvblR5cGVzLmgiJ10sCiAgICAgICAgICdJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5l
bDo6Q29ubmVjdGlvblR5cGUnOiBbJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwuaD4nXSwKICAgICAgICAgJ0luc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSc6IFsn
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldC5oPiddLAotICAgICAgICAnV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZsdXNoSWRlbnRpZmllcic6IFsnPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4n
XSwKKyAgICAgICAgJ1dlYkNvcmU6OkZsdXNoSWRlbnRpZmllcic6IFsnPFdlYkNvcmUvR3JhcGhp
Y3NUeXBlcy5oPiddLAogICAgICAgICAnV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJ
ZGVudGlmaWVyJzogWyc8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPiddLAogICAgICAgICAnTWVkaWFU
aW1lJzogWyc8d3RmL01lZGlhVGltZS5oPiddLAogICAgICAgICAnTW9ub3RvbmljVGltZSc6IFsn
PHd0Zi9Nb25vdG9uaWNUaW1lLmg+J10sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVk
RGlzcGxheUxpc3RIYW5kbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I2YWZh
YmIxNTVlNGIxMGQ3M2Y0OTBlNmM2OTYxZTYyZmRlYTBiMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNw
bGF5TGlzdEhhbmRsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KLSNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgotI2luY2x1
ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0vLyBUaGlzIGlz
IGEgc2tlbGV0b24gb25seSB1c2VkIGJ5IHRoZSBEaXNwbGF5TGlzdFdyaXRlckhhbmRsZSAmIERp
c3BsYXlMaXN0UmVhZGVySGFuZGxlIHN1YmNsYXNzZXMuCi1jbGFzcyBTaGFyZWREaXNwbGF5TGlz
dEhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlPiB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB+U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoKSA9IGRlZmF1bHQ7
Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBoZWFkZXJTaXplKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiByb3VuZFVwVG9NdWx0aXBsZU9mPGFsaWdub2Yoc3RkOjptYXhfYWxpZ25fdCk+
KHNpemVvZihEaXNwbGF5TGlzdFNoYXJlZE1lbW9yeUhlYWRlcikpOwotICAgIH0KLQotICAgIFNo
YXJlZE1lbW9yeSYgc2hhcmVkTWVtb3J5KCkgeyByZXR1cm4gbV9zaGFyZWRNZW1vcnkuZ2V0KCk7
IH0KLSAgICBjb25zdCBTaGFyZWRNZW1vcnkmIHNoYXJlZE1lbW9yeSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2hhcmVkTWVtb3J5LmdldCgpOyB9Ci0KLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmll
cjsgfQotICAgIHVpbnQ4X3QqIGRhdGEoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDx1aW50
OF90Kj4oc2hhcmVkTWVtb3J5KCkuZGF0YSgpKTsgfQotCi0gICAgdWludDY0X3QgdW5yZWFkQnl0
ZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGhlYWRlcigpLnVucmVhZEJ5dGVzLmxvYWQoKTsK
LSAgICB9Ci0KLSAgICBlbnVtIGNsYXNzIFdhaXRpbmdTdGF0dXMgOiB1aW50OF90IHsKLSAgICAg
ICAgTm90V2FpdGluZywKLSAgICAgICAgV2FpdGluZywKLSAgICAgICAgUmVzdW1pbmcKLSAgICB9
OwotICAgIHVzaW5nIFdhaXRpbmdTdGF0dXNTdG9yYWdlVHlwZSA9IHN0ZDo6dW5kZXJseWluZ190
eXBlX3Q8V2FpdGluZ1N0YXR1cz47Ci0KLSAgICBzdHJ1Y3QgUmVzdW1lUmVhZGluZ0luZm9ybWF0
aW9uIHsKLSAgICAgICAgdWludDY0X3Qgb2Zmc2V0OwotICAgICAgICB1aW50NjRfdCBkZXN0aW5h
dGlvbjsKLSAgICB9OwotCi1wcm90ZWN0ZWQ6Ci0gICAgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFJl
ZjxTaGFyZWRNZW1vcnk+JiYgc2hhcmVkTWVtb3J5KQotICAgICAgICA6IG1faWRlbnRpZmllcihp
ZGVudGlmaWVyKQotICAgICAgICAsIG1fc2hhcmVkTWVtb3J5KFdURk1vdmUoc2hhcmVkTWVtb3J5
KSkKLSAgICB7Ci0gICAgfQotCi0gICAgc3RydWN0IERpc3BsYXlMaXN0U2hhcmVkTWVtb3J5SGVh
ZGVyIHsKLSAgICAgICAgRGlzcGxheUxpc3RTaGFyZWRNZW1vcnlIZWFkZXIoKSA9IGRlbGV0ZTsK
LSAgICAgICAgfkRpc3BsYXlMaXN0U2hhcmVkTWVtb3J5SGVhZGVyKCkgPSBkZWxldGU7Ci0KLSAg
ICAgICAgQXRvbWljPHVpbnQ2NF90PiB1bnJlYWRCeXRlczsKLSAgICAgICAgUmVzdW1lUmVhZGlu
Z0luZm9ybWF0aW9uIHJlc3VtZVJlYWRpbmdJbmZvOwotICAgICAgICBBdG9taWM8V2FpdGluZ1N0
YXR1c1N0b3JhZ2VUeXBlPiB3YWl0aW5nU3RhdHVzOwotICAgIH07Ci0KLSAgICBjb25zdCBEaXNw
bGF5TGlzdFNoYXJlZE1lbW9yeUhlYWRlciYgaGVhZGVyKCkgY29uc3QgeyByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgRGlzcGxheUxpc3RTaGFyZWRNZW1vcnlIZWFkZXIqPihkYXRhKCkp
OyB9Ci0gICAgRGlzcGxheUxpc3RTaGFyZWRNZW1vcnlIZWFkZXImIGhlYWRlcigpIHsgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0U2hhcmVkTWVtb3J5SGVhZGVyKj4oZGF0YSgp
KTsgfQotCi1wcml2YXRlOgotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRl
bnRpZmllciBtX2lkZW50aWZpZXI7Ci0gICAgUmVmPFNoYXJlZE1lbW9yeT4gbV9zaGFyZWRNZW1v
cnk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRs
ZTo6V2FpdGluZ1N0YXR1cz4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAg
ICAgIFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OldhaXRpbmdTdGF0dXMsCi0gICAg
ICAgIFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OldhaXRpbmdTdGF0dXM6Ok5vdFdh
aXRpbmcsCi0gICAgICAgIFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OldhaXRpbmdT
dGF0dXM6OldhaXRpbmcsCi0gICAgICAgIFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6
OldhaXRpbmdTdGF0dXM6OlJlc3VtaW5nCi0gICAgPjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdU
RgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKaW5k
ZXggZWVlZTZhZWI2MWEzMzhhZjhkM2NhZWZiZjUyNDkxOTQwYWY3MDU1Yi4uM2EzN2IzMmNkODYw
MGRiMjBhZGM4MGQzNmY1Nzc5ZTA2MmZhMTgxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCkBAIC0yMzEsMTYgKzIzMSw2IEBAIHN0YXRpYyBX
QVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVUeXBlc0FuZERhdGEoRGVjb2RlciYgZGVjb2Rl
ciwgVmVjdG9yPFN0cmluCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJndW1lbnRDb2Rl
cjxBZmZpbmVUcmFuc2Zvcm0+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBhZmZpbmVUcmFuc2Zvcm0pCi17Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxB
ZmZpbmVUcmFuc2Zvcm0+OjplbmNvZGUoZW5jb2RlciwgYWZmaW5lVHJhbnNmb3JtKTsKLX0KLQot
Ym9vbCBBcmd1bWVudENvZGVyPEFmZmluZVRyYW5zZm9ybT46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZVRyYW5zZm9ybSkKLXsKLSAgICByZXR1cm4gU2lt
cGxlQXJndW1lbnRDb2RlcjxBZmZpbmVUcmFuc2Zvcm0+OjpkZWNvZGUoZGVjb2RlciwgYWZmaW5l
VHJhbnNmb3JtKTsKLX0KLQogdm9pZCBBcmd1bWVudENvZGVyPENhY2hlUXVlcnlPcHRpb25zPjo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENhY2hlUXVlcnlPcHRpb25zJiBvcHRpb25z
KQogewogICAgIGVuY29kZXIgPDwgb3B0aW9ucy5pZ25vcmVTZWFyY2g7CkBAIC00MjUsNiArNDE1
LDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPEV2ZW50VHJhY2tpbmdSZWdpb25zPjo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIsIEV2ZW50VHJhY2tpbmcKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordGVt
cGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KIHZvaWQgQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1hdGlv
bk1hdHJpeD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtYXRpb25NYXRyaXgpCiB7CiAgICAgZW5jb2RlciA8PCB0cmFuc2Zvcm1h
dGlvbk1hdHJpeC5tMTEoKTsKQEAgLTUwNiw2ICs0OTcsOSBAQCBib29sIEFyZ3VtZW50Q29kZXI8
VHJhbnNmb3JtYXRpb25NYXRyaXg+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVHJhbnNmb3Jt
YXRpbwogICAgIHJldHVybiB0cnVlOwogfQogCit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8
VHJhbnNmb3JtYXRpb25NYXRyaXg+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4Jik7Cit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8VHJhbnNm
b3JtYXRpb25NYXRyaXg+OjplbmNvZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNv
bm5lY3Rpb25FbmNvZGVyJiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKwogdm9pZCBB
cmd1bWVudENvZGVyPExpbmVhclRpbWluZ0Z1bmN0aW9uPjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IExpbmVhclRpbWluZ0Z1bmN0aW9uJiB0aW1pbmdGdW5jdGlvbikKIHsKICAgICBl
bmNvZGVyIDw8IHRpbWluZ0Z1bmN0aW9uLnR5cGUoKTsKQEAgLTYxNyw2NSArNjExLDYgQEAgYm9v
bCBBcmd1bWVudENvZGVyPFNwcmluZ1RpbWluZ0Z1bmN0aW9uPjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIFNwcmluZ1RpbWluZ0YKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcmd1bWVu
dENvZGVyPEZsb2F0UG9pbnQ+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgRmxvYXRQ
b2ludCYgZmxvYXRQb2ludCkKLXsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQ+
OjplbmNvZGUoZW5jb2RlciwgZmxvYXRQb2ludCk7Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxG
bG9hdFBvaW50Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEZsb2F0UG9pbnQmIGZsb2F0UG9p
bnQpCi17Ci0gICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRQb2ludD46OmRlY29k
ZShkZWNvZGVyLCBmbG9hdFBvaW50KTsKLX0KLQotc3RkOjpvcHRpb25hbDxGbG9hdFBvaW50PiBB
cmd1bWVudENvZGVyPEZsb2F0UG9pbnQ+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAg
ICBGbG9hdFBvaW50IGZsb2F0UG9pbnQ7Ci0gICAgaWYgKCFTaW1wbGVBcmd1bWVudENvZGVyPEZs
b2F0UG9pbnQ+OjpkZWNvZGUoZGVjb2RlciwgZmxvYXRQb2ludCkpCi0gICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGZsb2F0UG9pbnQ7Ci19Ci0KLXZvaWQgQXJndW1lbnRD
b2RlcjxGbG9hdFBvaW50M0Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgRmxvYXRQ
b2ludDNEJiBmbG9hdFBvaW50KQotewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRQb2lu
dDNEPjo6ZW5jb2RlKGVuY29kZXIsIGZsb2F0UG9pbnQpOwotfQotCi1ib29sIEFyZ3VtZW50Q29k
ZXI8RmxvYXRQb2ludDNEPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEZsb2F0UG9pbnQzRCYg
ZmxvYXRQb2ludCkKLXsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50
M0Q+OjpkZWNvZGUoZGVjb2RlciwgZmxvYXRQb2ludCk7Ci19Ci0KLQotdm9pZCBBcmd1bWVudENv
ZGVyPEZsb2F0UmVjdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBGbG9hdFJlY3Qm
IGZsb2F0UmVjdCkKLXsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0UmVjdD46OmVuY29k
ZShlbmNvZGVyLCBmbG9hdFJlY3QpOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8RmxvYXRSZWN0
Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEZsb2F0UmVjdCYgZmxvYXRSZWN0KQotewotICAg
IHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0UmVjdD46OmRlY29kZShkZWNvZGVyLCBm
bG9hdFJlY3QpOwotfQotCi1zdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gQXJndW1lbnRDb2RlcjxG
bG9hdFJlY3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBGbG9hdFJlY3QgZmxv
YXRSZWN0OwotICAgIGlmICghU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFJlY3Q+OjpkZWNvZGUo
ZGVjb2RlciwgZmxvYXRSZWN0KSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBy
ZXR1cm4gZmxvYXRSZWN0OwotfQotCi0KLXZvaWQgQXJndW1lbnRDb2RlcjxGbG9hdEJveEV4dGVu
dD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBGbG9hdEJveEV4dGVudCYgZmxvYXRC
b3hFeHRlbnQpCi17Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdEJveEV4dGVudD46OmVu
Y29kZShlbmNvZGVyLCBmbG9hdEJveEV4dGVudCk7Ci19Ci0gICAgCi1ib29sIEFyZ3VtZW50Q29k
ZXI8RmxvYXRCb3hFeHRlbnQ+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgRmxvYXRCb3hFeHRl
bnQmIGZsb2F0Qm94RXh0ZW50KQotewotICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPEZs
b2F0Qm94RXh0ZW50Pjo6ZGVjb2RlKGRlY29kZXIsIGZsb2F0Qm94RXh0ZW50KTsKLX0KLQotCiB2
b2lkIEFyZ3VtZW50Q29kZXI8UmVjdEVkZ2VzPGJvb2w+Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFJlY3RFZGdlczxib29sPiYgYm94RWRnZXMpCiB7CiAgICAgU2ltcGxlQXJndW1l
bnRDb2RlcjxSZWN0RWRnZXM8Ym9vbD4+OjplbmNvZGUoZW5jb2RlciwgYm94RWRnZXMpOwpAQCAt
Njg2LDI4ICs2MjEsNiBAQCBib29sIEFyZ3VtZW50Q29kZXI8UmVjdEVkZ2VzPGJvb2w+Pjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIFJlY3RFZGdlczxib29sPiYgYgogICAgIHJldHVybiBTaW1w
bGVBcmd1bWVudENvZGVyPFJlY3RFZGdlczxib29sPj46OmRlY29kZShkZWNvZGVyLCBib3hFZGdl
cyk7CiB9CiAKLQotdm9pZCBBcmd1bWVudENvZGVyPEZsb2F0U2l6ZT46OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBGbG9hdFNpemUmIGZsb2F0U2l6ZSkKLXsKLSAgICBTaW1wbGVBcmd1
bWVudENvZGVyPEZsb2F0U2l6ZT46OmVuY29kZShlbmNvZGVyLCBmbG9hdFNpemUpOwotfQotCi1i
b29sIEFyZ3VtZW50Q29kZXI8RmxvYXRTaXplPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEZs
b2F0U2l6ZSYgZmxvYXRTaXplKQotewotICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPEZs
b2F0U2l6ZT46OmRlY29kZShkZWNvZGVyLCBmbG9hdFNpemUpOwotfQotCi0KLXZvaWQgQXJndW1l
bnRDb2RlcjxGbG9hdFJvdW5kZWRSZWN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0KQotewotICAgIFNpbXBsZUFyZ3VtZW50Q29k
ZXI8RmxvYXRSb3VuZGVkUmVjdD46OmVuY29kZShlbmNvZGVyLCByb3VuZGVkUmVjdCk7Ci19Ci0K
LWJvb2wgQXJndW1lbnRDb2RlcjxGbG9hdFJvdW5kZWRSZWN0Pjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0KQotewotICAgIHJldHVybiBTaW1w
bGVBcmd1bWVudENvZGVyPEZsb2F0Um91bmRlZFJlY3Q+OjpkZWNvZGUoZGVjb2Rlciwgcm91bmRl
ZFJlY3QpOwotfQotCiAjaWYgRU5BQkxFKE1FVEFfVklFV1BPUlQpCiB2b2lkIEFyZ3VtZW50Q29k
ZXI8Vmlld3BvcnRBcmd1bWVudHM+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmll
d3BvcnRBcmd1bWVudHMmIHZpZXdwb3J0QXJndW1lbnRzKQogewpAQCAtNzM5LDg3ICs2NTIsNiBA
QCBib29sIEFyZ3VtZW50Q29kZXI8Vmlld3BvcnRBdHRyaWJ1dGVzPjo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIFZpZXdwb3J0QXR0cmlidQogICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVy
PFZpZXdwb3J0QXR0cmlidXRlcz46OmRlY29kZShkZWNvZGVyLCB2aWV3cG9ydEF0dHJpYnV0ZXMp
OwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8SW50UG9pbnQ+OjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgSW50UG9pbnQmIGludFBvaW50KQotewotICAgIFNpbXBsZUFyZ3VtZW50Q29k
ZXI8SW50UG9pbnQ+OjplbmNvZGUoZW5jb2RlciwgaW50UG9pbnQpOwotfQotCi1ib29sIEFyZ3Vt
ZW50Q29kZXI8SW50UG9pbnQ+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSW50UG9pbnQmIGlu
dFBvaW50KQotewotICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPEludFBvaW50Pjo6ZGVj
b2RlKGRlY29kZXIsIGludFBvaW50KTsKLX0KLQotc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpJbnRQ
b2ludD4gQXJndW1lbnRDb2RlcjxJbnRQb2ludD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQot
ewotICAgIEludFBvaW50IGludFBvaW50OwotICAgIGlmICghU2ltcGxlQXJndW1lbnRDb2RlcjxJ
bnRQb2ludD46OmRlY29kZShkZWNvZGVyLCBpbnRQb2ludCkpCi0gICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGludFBvaW50OwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8
SW50UmVjdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJbnRSZWN0JiBpbnRSZWN0
KQotewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8SW50UmVjdD46OmVuY29kZShlbmNvZGVyLCBp
bnRSZWN0KTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPEludFJlY3Q+OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlciwgSW50UmVjdCYgaW50UmVjdCkKLXsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1l
bnRDb2RlcjxJbnRSZWN0Pjo6ZGVjb2RlKGRlY29kZXIsIGludFJlY3QpOwotfQotCi1zdGQ6Om9w
dGlvbmFsPEludFJlY3Q+IEFyZ3VtZW50Q29kZXI8SW50UmVjdD46OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQotewotICAgIEludFJlY3QgcmVjdDsKLSAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBy
ZWN0KSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gcmVjdDsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KLXZvaWQgQXJndW1lbnRDb2RlcjxJbnRTaXpl
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEludFNpemUmIGludFNpemUpCi17Ci0g
ICAgU2ltcGxlQXJndW1lbnRDb2RlcjxJbnRTaXplPjo6ZW5jb2RlKGVuY29kZXIsIGludFNpemUp
OwotfQotCi10ZW1wbGF0ZQotdm9pZCBBcmd1bWVudENvZGVyPEludFNpemU+OjplbmNvZGU8RW5j
b2Rlcj4oRW5jb2RlciYsIGNvbnN0IEludFNpemUmKTsKLXRlbXBsYXRlCi12b2lkIEFyZ3VtZW50
Q29kZXI8SW50U2l6ZT46OmVuY29kZTxTdHJlYW1Db25uZWN0aW9uRW5jb2Rlcj4oU3RyZWFtQ29u
bmVjdGlvbkVuY29kZXImLCBjb25zdCBJbnRTaXplJik7Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxJ
bnRTaXplPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEludFNpemUmIGludFNpemUpCi17Ci0g
ICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8SW50U2l6ZT46OmRlY29kZShkZWNvZGVyLCBp
bnRTaXplKTsKLX0KLQotc3RkOjpvcHRpb25hbDxJbnRTaXplPiBBcmd1bWVudENvZGVyPEludFNp
emU+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBJbnRTaXplIGludFNpemU7Ci0g
ICAgaWYgKCFTaW1wbGVBcmd1bWVudENvZGVyPEludFNpemU+OjpkZWNvZGUoZGVjb2RlciwgaW50
U2l6ZSkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGludFNpemU7
Ci19Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxMYXlvdXRTaXplPjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IExheW91dFNpemUmIGxheW91dFNpemUpCi17Ci0gICAgU2ltcGxlQXJndW1l
bnRDb2RlcjxMYXlvdXRTaXplPjo6ZW5jb2RlKGVuY29kZXIsIGxheW91dFNpemUpOwotfQotCi1i
b29sIEFyZ3VtZW50Q29kZXI8TGF5b3V0U2l6ZT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBM
YXlvdXRTaXplJiBsYXlvdXRTaXplKQotewotICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVy
PExheW91dFNpemU+OjpkZWNvZGUoZGVjb2RlciwgbGF5b3V0U2l6ZSk7Ci19Ci0KLQotdm9pZCBB
cmd1bWVudENvZGVyPExheW91dFBvaW50Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IExheW91dFBvaW50JiBsYXlvdXRQb2ludCkKLXsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPExh
eW91dFBvaW50Pjo6ZW5jb2RlKGVuY29kZXIsIGxheW91dFBvaW50KTsKLX0KLQotYm9vbCBBcmd1
bWVudENvZGVyPExheW91dFBvaW50Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIExheW91dFBv
aW50JiBsYXlvdXRQb2ludCkKLXsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxMYXlv
dXRQb2ludD46OmRlY29kZShkZWNvZGVyLCBsYXlvdXRQb2ludCk7Ci19Ci0KIHZvaWQgQXJndW1l
bnRDb2RlcjxSZWNlbnRTZWFyY2g+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVj
ZW50U2VhcmNoJiByZWNlbnRTZWFyY2gpCiB7CiAgICAgZW5jb2RlciA8PCByZWNlbnRTZWFyY2gu
c3RyaW5nIDw8IHJlY2VudFNlYXJjaC50aW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaAppbmRleCAzNTEzOGY1ZGUzMmQ3ZTFmMWZkMTU0YzI2MWY4ZTc5
MmU0NzM3NzEwLi5kYmVhOThhZWI4NWMyZWM1Mjk2MjFmZjRjNDhiYjkyNzI1YWNmMWE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaApAQCAtMjYsMTIg
KzI2LDI1IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9BZmZpbmVUcmFuc2Zvcm0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0F1
dG9wbGF5RXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9G
bG9hdFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50M0QuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSb3VuZGVkUmVj
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9E
aXNwbGF5TGlzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvSW5kZXhlZERCLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnB1dE1vZGUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRS
ZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9M
YXlvdXRQb2ludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTGF5b3V0U2l6ZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvTGVuZ3RoQm94Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNlbGVjdGlvbk9w
dGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmF0aXZlSW1hZ2UuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL05ldHdvcmtMb2FkTWV0cmljcy5oPgpAQCAtOTYsNyArMTA5LDYgQEAgdHlwZWRlZiBzdHJ1
Y3QgX19DVkJ1ZmZlciogQ1ZQaXhlbEJ1ZmZlclJlZjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQWJzb2x1dGVQb3NpdGlvbkNvbnN0cmFpbnRzOwotY2xhc3MgQWZmaW5lVHJhbnNmb3Jt
OwogY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CiBjbGFzcyBCbG9iUGFydDsKIGNsYXNz
IENlcnRpZmljYXRlSW5mbzsKQEAgLTEwOSwyMSArMTIxLDExIEBAIGNsYXNzIERyYWdEYXRhOwog
Y2xhc3MgRmlsZTsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbjsKIGNsYXNzIEZpbHRlck9wZXJhdGlv
bnM7Ci1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgRmxvYXRQb2ludDNEOwotY2xhc3MgRmxvYXRS
ZWN0OwotY2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKLWNsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIEZp
eGVkUG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzOwogY2xhc3MgRm9udDsKIGNsYXNzIEZvbnRQ
bGF0Zm9ybURhdGE7CiBjbGFzcyBIVFRQSGVhZGVyTWFwOwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFz
cyBJbnRSZWN0OwotY2xhc3MgSW50U2l6ZTsKIGNsYXNzIEtleWZyYW1lVmFsdWVMaXN0OwotY2xh
c3MgTGF5b3V0U2l6ZTsKLWNsYXNzIExheW91dFBvaW50OwogY2xhc3MgTGluZWFyVGltaW5nRnVu
Y3Rpb247CiBjbGFzcyBOb3RpZmljYXRpb247CiBjbGFzcyBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTsK
QEAgLTE3NCw5ICsxNzYsNyBAQCBzdHJ1Y3QgVG91Y2hBY3Rpb25EYXRhOwogc3RydWN0IFZlbG9j
aXR5RGF0YTsKIHN0cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXM7CiBzdHJ1Y3QgV2luZG93RmVhdHVy
ZXM7Ci0gICAgCi10ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgUmVjdEVkZ2VzOwotdXNpbmcgRmxv
YXRCb3hFeHRlbnQgPSBSZWN0RWRnZXM8ZmxvYXQ+OworCiB1c2luZyBJREJLZXlQYXRoID0gVmFy
aWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+PjsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAt
MjI3LDEwICsyMjcsMjUgQEAgc3RydWN0IFJlY29yZDsKIAogbmFtZXNwYWNlIElQQyB7CiAKLXRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtPiB7
Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0mKTsKLSAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERl
Y29kZXImLCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKTsKLX07CitERUZJTkVfU0lNUExFX0FS
R1VNRU5UX0NPREVSKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSkKK0RFRklORV9TSU1QTEVfQVJH
VU1FTlRfQ09ERVIoV2ViQ29yZTo6RmxvYXRCb3hFeHRlbnQpCitERUZJTkVfU0lNUExFX0FSR1VN
RU5UX0NPREVSKFdlYkNvcmU6OkZsb2F0UG9pbnQpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NP
REVSKFdlYkNvcmU6OkZsb2F0UG9pbnQzRCkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIo
V2ViQ29yZTo6RmxvYXRSZWN0KQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3Jl
OjpGbG9hdFJvdW5kZWRSZWN0KQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3Jl
OjpGbG9hdFNpemUpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkludFBv
aW50KQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpJbnRSZWN0KQorREVG
SU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpJbnRTaXplKQorREVGSU5FX1NJTVBM
RV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpMYXlvdXRTaXplKQorREVGSU5FX1NJTVBMRV9BUkdV
TUVOVF9DT0RFUihXZWJDb3JlOjpMYXlvdXRQb2ludCkKKworI2lmIFVTRShDRykKK0RFRklORV9T
SU1QTEVfQVJHVU1FTlRfQ09ERVIoQ0dSZWN0KQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RF
UihDR1NpemUpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKENHUG9pbnQpCitERUZJTkVf
U0lNUExFX0FSR1VNRU5UX0NPREVSKENHQWZmaW5lVHJhbnNmb3JtKQorI2VuZGlmCiAKIHRlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6QXR0cmlidXRlZFN0cmluZz4gewog
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6QXR0cmlidXRl
ZFN0cmluZyYpOwpAQCAtMjY4LDYgKzI4Myw3IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6RXZlbnRUcmFja2luZ1JlZ2lvbnM+IHsKIH07CiAKIHRlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg+IHsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNv
ZGVyJiwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKICAgICBzdGF0aWMg
V0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYpOwogfTsKQEAgLTI5OSw0MyArMzE1LDExIEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPiB7CiAgICAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPiBkZWNvZGUoRGVjb2RlciYp
OwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFBv
aW50PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50Jik7Ci0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShE
ZWNvZGVyJiwgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PFdlYkNvcmU6OkZsb2F0UG9pbnQ+IGRlY29kZShEZWNvZGVyJik7Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0UG9pbnQzRD4gewotICAgIHN0YXRp
YyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludDNEJik7Ci0g
ICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29y
ZTo6RmxvYXRQb2ludDNEJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OkZsb2F0UmVjdD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRSZWN0PiBkZWNvZGUoRGVjb2RlciYpOwotfTsK
LSAgICAKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmxvYXRCb3hF
eHRlbnQ+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0Qm94RXh0ZW50Jik7Ci0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRl
Y29kZShEZWNvZGVyJiwgV2ViQ29yZTo6RmxvYXRCb3hFeHRlbnQmKTsKLX07Ci0KIHRlbXBsYXRl
PD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVjdEVkZ2VzPGJvb2w+PiB7CiAgICAg
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpSZWN0RWRnZXM8Ym9v
bD4mKTsKICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXIm
LCBXZWJDb3JlOjpSZWN0RWRnZXM8Ym9vbD4mKTsKIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IEFy
Z3VtZW50Q29kZXI8V2ViQ29yZTo6RmxvYXRTaXplPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2Rl
KEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgV0FSTl9V
TlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpGbG9hdFNpemUmKTsK
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmxvYXRSb3Vu
ZGVkUmVjdD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSb3VuZGVkUmVjdCYpOwotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmKTsKLX07Ci0KICNp
ZiBFTkFCTEUoTUVUQV9WSUVXUE9SVCkKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8
V2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5j
b2RlciYsIGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJik7CkBAIC0zNTAsMzUgKzMz
NCw2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Vmlld3BvcnRB
dHRyaWJ1dGVzPiB7CiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShE
ZWNvZGVyJiwgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7CiB9OwogCi10ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkludFBvaW50PiB7Ci0gICAgc3RhdGljIHZv
aWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwotICAgIHN0YXRp
YyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkludFBv
aW50Jik7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+IGRlY29k
ZShEZWNvZGVyJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OkludFJlY3Q+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKLSAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVj
b2RlKERlY29kZXImLCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6SW50UmVjdD4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6SW50U2l6ZT4gewotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRl
Y29kZShEZWNvZGVyJiwgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPFdlYkNvcmU6OkludFNpemU+IGRlY29kZShEZWNvZGVyJik7Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkxheW91dFNpemU+IHsKLSAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkxheW91dFNpemUmKTsKLSAgICBz
dGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpM
YXlvdXRTaXplJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OkxheW91dFBvaW50PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25z
dCBXZWJDb3JlOjpMYXlvdXRQb2ludCYpOwotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4g
Ym9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkxheW91dFBvaW50Jik7Ci19OwotCiB0ZW1w
bGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6Okxlbmd0aD4gewogICAgIHN0YXRp
YyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6TGVuZ3RoJik7CiAgICAgc3Rh
dGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6TGVu
Z3RoJik7CkBAIC00NTcsNiArNDEyLDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpEcmFnRGF0YT4gewogI2VuZGlmCiAKICNpZiBQTEFURk9STShDT0NPQSkKKwog
dGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXVEY6Ok1hY2hTZW5kUmlnaHQ+IHsKICAg
ICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdURjo6TWFjaFNlbmRSaWdodCYp
OwogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgV1RGOjpNYWNoU2VuZFJpZ2h0JiYp
OwpAQCAtNDY4LDI2ICs0MjQsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdl
YkNvcmU6OktleXByZXNzQ29tbWFuZD4gewogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNv
cmU6OktleXByZXNzQ29tbWFuZD4gZGVjb2RlKERlY29kZXImKTsKIH07CiAKLXRlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8Q0dQb2ludD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShF
bmNvZGVyJiwgQ0dQb2ludCk7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Q0dQb2ludD4gZGVj
b2RlKERlY29kZXImKTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8Q0dT
aXplPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBDR1NpemUpOwotICAgIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPENHU2l6ZT4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8Q0dSZWN0PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5j
b2RlKEVuY29kZXImLCBDR1JlY3QpOwotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENHUmVjdD4g
ZGVjb2RlKERlY29kZXImKTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8
Q0dBZmZpbmVUcmFuc2Zvcm0+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIENH
QWZmaW5lVHJhbnNmb3JtKTsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxDR0FmZmluZVRyYW5z
Zm9ybT4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0jZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShD
T0NPQSkKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OlNlbGVjdGlvbkdlb21ldHJ5PiB7CkBAIC04NzMsNiArODEwLDUy
IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENWUGl4ZWxCdWZm
ZXJSZWY+PiB7CiAKICNlbmRpZgogCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTYXZlKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZSkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZSkKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRf
Q09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZSkKK0RFRklORV9TSU1QTEVfQVJHVU1F
TlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlKQorREVGSU5FX1NJTVBMRV9BUkdV
TUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNKQorREVGSU5FX1NJTVBMRV9B
UkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE0pCitERUZJ
TkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVG
aWxsQ29sb3IpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvcikKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzcykKK0RFRklORV9TSU1QTEVf
QVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXApCitERUZJTkVf
U0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbikK
K0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1p
dGVyTGltaXQpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDbGVhclNoYWRvdykKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNsaXApCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDbGlwT3V0KQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvSW1hZ2VCdWZmZXIpCitERUZJTkVfU0lNUExFX0FSR1VN
RU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpFbmRDbGlwVG9EcmF3aW5nQ29tbWFuZHMp
CitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
SW1hZ2VCdWZmZXIpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2UpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybikKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRf
Q09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpCitERUZJ
TkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpFbmRUcmFuc3Bh
cmVuY3lMYXllcikKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdSZWN0KQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0xpbmUpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKQorREVGSU5FX1NJTVBM
RV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2UpCitERUZJ
TkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdCkK
K0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxM
aW5lKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbEFyYykKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxRdWFkQ3VydmUpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsQmV6aWVyQ3VydmUpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NP
REVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZSkKK0RFRklORV9TSU1QTEVfQVJH
VU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYSkKK0RF
RklORV9TSU1QTEVfQVJHVU1FTlRfQ09ERVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJl
Y3QpCitERUZJTkVfU0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
dHJva2VMaW5lKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U3Ryb2tlQXJjKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U3Ryb2tlUXVhZEN1cnZlKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RF
UihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlQmV6aWVyQ3VydmUpCitERUZJTkVfU0lNUExF
X0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlKQorREVG
SU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0
KQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBw
bHlTdHJva2VQYXR0ZXJuKQorREVGSU5FX1NJTVBMRV9BUkdVTUVOVF9DT0RFUihXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybikKK0RFRklORV9TSU1QTEVfQVJHVU1FTlRfQ09E
RVIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpCitERUZJTkVf
U0lNUExFX0FSR1VNRU5UX0NPREVSKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaENvbnRleHQp
CisKIH0gLy8gbmFtZXNwYWNlIElQQwogCiBuYW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCmluZGV4IDhl
NGQ1ZjEzMWQ4MmYxZGVmZTI2ZDE1YWJmZWUwNjRhM2I5ODkwZjguLjZhNDM0MDY3MTQ2M2Q5NDcw
NzE5MjMxMGIxZjdiYTBiZDAzYTc2ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQpAQCAtMzIxLDc5ICszMjEsNiBAQCBz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4gQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpLZXlwcmVzc0NvbW1hbmQ+OgogICAgIHJldHVybiBXVEZNb3ZlKGNvbW1hbmQpOwogfQog
Ci12b2lkIEFyZ3VtZW50Q29kZXI8Q0dSZWN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENH
UmVjdCByZWN0KQotewotICAgIGVuY29kZXIgPDwgcmVjdC5vcmlnaW4gPDwgcmVjdC5zaXplOwot
fQotCi1zdGQ6Om9wdGlvbmFsPENHUmVjdD4gQXJndW1lbnRDb2RlcjxDR1JlY3Q+OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPENHUG9pbnQ+IG9yaWdpbjsK
LSAgICBkZWNvZGVyID4+IG9yaWdpbjsKLSAgICBpZiAoIW9yaWdpbikKLSAgICAgICAgcmV0dXJu
IHsgfTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Q0dTaXplPiBzaXplOwotICAgIGRlY29kZXIgPj4g
c2l6ZTsKLSAgICBpZiAoIXNpemUpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4g
Q0dSZWN0IHsgKm9yaWdpbiwgKnNpemUgfTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPENHU2l6
ZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDR1NpemUgc2l6ZSkKLXsKLSAgICBlbmNvZGVy
IDw8IHNpemUud2lkdGggPDwgc2l6ZS5oZWlnaHQ7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8Q0dTaXpl
PiBBcmd1bWVudENvZGVyPENHU2l6ZT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAg
IENHU2l6ZSBzaXplOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZS53aWR0aCkpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplLmhlaWdodCkpCi0g
ICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIHNpemU7Ci19Ci0KLXZvaWQgQXJndW1lbnRD
b2RlcjxDR1BvaW50Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENHUG9pbnQgcG9pbnQpCi17
Ci0gICAgZW5jb2RlciA8PCBwb2ludC54IDw8IHBvaW50Lnk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8
Q0dQb2ludD4gQXJndW1lbnRDb2RlcjxDR1BvaW50Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
Ci17Ci0gICAgQ0dQb2ludCBwb2ludDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBvaW50Lngp
KQotICAgICAgICByZXR1cm4geyB9OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocG9pbnQueSkp
Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIHBvaW50OwotfQotCi12b2lkIEFyZ3Vt
ZW50Q29kZXI8Q0dBZmZpbmVUcmFuc2Zvcm0+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0dB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtKQotewotICAgIGVuY29kZXIgPDwgdHJhbnNmb3JtLmEg
PDwgdHJhbnNmb3JtLmIgPDwgdHJhbnNmb3JtLmMgPDwgdHJhbnNmb3JtLmQgPDwgdHJhbnNmb3Jt
LnR4IDw8IHRyYW5zZm9ybS50eTsKLX0KLQotc3RkOjpvcHRpb25hbDxDR0FmZmluZVRyYW5zZm9y
bT4gQXJndW1lbnRDb2RlcjxDR0FmZmluZVRyYW5zZm9ybT46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQotewotICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHRyYW5zZm9ybS5hKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHRyYW5zZm9ybS5iKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHRyYW5zZm9ybS5jKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHRyYW5zZm9ybS5kKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHRyYW5zZm9ybS50eCkpCi0gICAgICAgIHJldHVybiB7IH07
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0cmFuc2Zvcm0udHkpKQotICAgICAgICByZXR1cm4g
eyB9OwotICAgIHJldHVybiB0cmFuc2Zvcm07Ci19Ci0KICNpZiBFTkFCTEUoQ09OVEVOVF9GSUxU
RVJJTkcpCiAKIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDb250ZW50RmlsdGVyVW5ibG9j
a0hhbmRsZXI+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6Q29udGVu
dEZpbHRlclVuYmxvY2tIYW5kbGVyJiBjb250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2Vz
LnR4dAppbmRleCBjNGE4NGUxZmI2ZjQ2NmI4ZmJkNTRlNmNhNDZjNDcyNDIyYjNiMGM4Li45NDdm
YWRmNTM4NmRmMDA0ZTZkOWUxMmI4MzNmZmEyNDFjNDBlYWFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTI0
LDggKzI0LDggQEAKIEdQVVByb2Nlc3MvR1BVUHJvY2Vzcy5jcHAKIEdQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKIEdQVVByb2Nlc3MvR1BVUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHAKLUdQVVByb2Nlc3MvZ3JhcGhpY3MvRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUu
Y3BwCiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCitHUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dC5jcHAKIEdQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwCiBHUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlc291cmNlQ2FjaGUuY3BwCiBHUFVQcm9jZXNzL2dyYXBoaWNzL1Njb3BlZFJlbmRlcmlu
Z1Jlc291cmNlc1JlcXVlc3QuY3BwCkBAIC02MDcsMTAgKzYwNywxMCBAQCBXZWJQcm9jZXNzL01l
ZGlhU3RyZWFtL01lZGlhRGV2aWNlU2FuZGJveEV4dGVuc2lvbnMuY3BwCiBXZWJQcm9jZXNzL01l
ZGlhU3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKIAogV2ViUHJv
Y2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCi1XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9EaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5jcHAKIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0lt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAKIFdlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlGdW5jdGlvbnNHZW5lcmF0ZWQuY3BwCiBX
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmNwcAor
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHkuY3BwCiBX
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCiBX
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCiBXZWJQ
cm9jZXNzL0dQVS9tZWRpYS9BdWRpb1RyYWNrUHJpdmF0ZVJlbW90ZS5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0Nv
Y29hLnR4dAppbmRleCA1ZTZiNTJjMTIxMTQ2YzZkNTNhY2U2NjVkNjVjMjU2ZmRlNWU5NTkzLi5i
MTc4ZjBmMjdmMDZkMTU1MTFhMTk0NzQ2MzMxOGM1YmNlOWRlNmI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29j
b2EudHh0CkBAIC03MzEsNiArNzMxLDcgQEAgUmVtb3RlQXVkaW9IYXJkd2FyZUxpc3RlbmVyTWVz
c2FnZVJlY2VpdmVyLmNwcAogUmVtb3RlQXVkaW9TZXNzaW9uTWVzc2FnZVJlY2VpdmVyLmNwcAog
UmVtb3RlQXVkaW9TZXNzaW9uUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVBdWRpb1Nv
dXJjZVByb3ZpZGVyTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZUdyYXBoaWNzQ29u
dGV4dE1lc3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90ZUltYWdlRGVjb2RlckFWRlByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcAogUmVtb3RlSW1hZ2VEZWNvZGVyQVZGTWFuYWdlck1lc3NhZ2VSZWNlaXZl
ci5jcHAKIFJlbW90ZU1lZGlhUmVjb3JkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkMWM2OTUxNWJi
MTgyZGZhNWE1NDA3NzQ4NjRmNzNlYzI5OGM0MWQ5Li4xYWZiNWUyMzFjNWIzYmViOTY5MjIzYWJk
YmU3YTRkNTgxYWUzM2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTMsNyArMyw3IEBACiAJYXJjaGl2ZVZlcnNpb24gPSAxOwogCWNs
YXNzZXMgPSB7CiAJfTsKLQlvYmplY3RWZXJzaW9uID0gNTI7CisJb2JqZWN0VmVyc2lvbiA9IDU0
OwogCW9iamVjdHMgPSB7CiAKIC8qIEJlZ2luIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICov
CkBAIC0yMDM0LDExICsyMDM0LDggQEAKIAkJRTVCRUY2ODIyMTMwQzQ4MDAwRjMxMTExIC8qIFdl
YkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bklPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTVCRUY2ODAyMTMwQzQ3RjAwRjMxMTExIC8qIFdlYkRh
dGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bklPUy5oICovOyB9OwogCQlFNUNCMDdEQzIwRTE2NzhG
MDAyMkMxODMgLyogV0tGb3JtQ29sb3JDb250cm9sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNUNCMDdEQTIwRTE2NzhGMDAyMkMxODMgLyogV0tGb3Jt
Q29sb3JDb250cm9sLmggKi87IH07CiAJCUVEODJBN0YyMTI4QzZGQUYwMDQ0NzdCMyAvKiBXS0J1
bmRsZVBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTIyRjBGRjEyODlGQ0Q5MDA4NUU3NEYgLyogV0tCdW5kbGVQYWdlT3ZlcmxheS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUY0MDk0
Q0JEMjU1MzA1M0QwMDNENzNFMyAvKiBEaXNwbGF5TGlzdFJlYWRlckhhbmRsZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQwOTRDQkIyNTUzMDRBRjAw
M0Q3M0UzIC8qIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlLmggKi87IH07Ci0JCUY0MDk0Q0JFMjU1
MzA1NDAwMDNENzNFMyAvKiBEaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQwOTRDQjkyNTUzMDQ3RTAwM0Q3M0Uz
IC8qIERpc3BsYXlMaXN0V3JpdGVySGFuZGxlLmggKi87IH07CiAJCUY0MDlCQTE4MUU2RTY0QkMw
MDlEQTI4RSAvKiBXS0RyYWdEZXN0aW5hdGlvbkFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQwOUJBMTcxRTZFNjRCMzAwOURBMjhFIC8qIFdL
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRjQwQkJCNDEyNTdGRjQ2RTAwNjc0NjNBIC8qIEdQVVByb2Nlc3NX
YWtldXBNZXNzYWdlQXJndW1lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNDBCQkI0MDI1N0ZGNDZFMDA2NzQ2M0EgLyogR1BVUHJvY2Vzc1dha2V1
cE1lc3NhZ2VBcmd1bWVudHMuaCAqLzsgfTsKLQkJRjQxNENFMkQyNjlERTZFQTAwQkQyMTZBIC8q
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjQxNENFMkMyNjlERTZFQTAwQkQyMTZBIC8qIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRTdGF0ZS5oICovOyB9OwogCQlGNDJENjM0MTIyQTBFRkRGMDBEMkZCM0Eg
LyogV2ViQXV0b2NvcnJlY3Rpb25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNDJENjMzRjIyQTBFRkQzMDBEMkZCM0EgLyogV2ViQXV0b2NvcnJl
Y3Rpb25EYXRhLmggKi87IH07CiAJCUY0MzBFOTQyMjI0NzMzNUYwMDVGRTA1MyAvKiBXZWJzaXRl
TWV0YVZpZXdwb3J0UG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNDMwRTk0MTIyNDczMkE5MDA1RkUwNTMgLyogV2Vic2l0ZU1ldGFWaWV3cG9y
dFBvbGljeS5oICovOyB9OwogCQlGNDMwRTk0NDIyNDczREZGMDA1RkUwNTMgLyogV2ViQ29udGVu
dE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0
MzBFOTQzMjI0NzNEQjgwMDVGRTA1MyAvKiBXZWJDb250ZW50TW9kZS5oICovOyB9OwpAQCAtMjA1
MSwxMyArMjA0OCwxNiBAQAogCQlGNDQyOTE5NjFGQTU5NDJBMDAyQ0M5M0UgLyogX1dLQXR0YWNo
bWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNDQyOTE5NTFGQTU5NDJBMDAyQ0M5M0UgLyogX1dLQXR0YWNobWVudEludGVybmFsLmgg
Ki87IH07CiAJCUY0NDgxNTY0MjM4NzgyMDAwMDk4MjY1NyAvKiBXS0RlZmVycmluZ0dlc3R1cmVS
ZWNvZ25pemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNDQ4MTU2MjIzODc4MjAwMDA5ODI2NTcgLyogV0tEZWZlcnJpbmdHZXN0dXJlUmVjb2duaXpl
ci5oICovOyB9OwogCQlGNDRERkVCMjFFOUU3NTJGMDAzOEQxOTYgLyogV2ViSWNvblV0aWxpdGll
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ0REZF
QjAxRTlFNzUyRjAwMzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMuaCAqLzsgfTsKKwkJRjQ1MTdE
N0IyNkZCQ0QzOTAwNEM4NDc1IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlc1JlcGxp
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NTE3
RDc5MjZGQkNEMzgwMDRDODQ3NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXNSZXBs
aWVzLmggKi87IH07CisJCUY0NTE3RDdDMjZGQkNEMzkwMDRDODQ3NSAvKiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY0NTE3RDdBMjZGQkNEMzgwMDRDODQ3NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kTWVzc2FnZXMuaCAqLzsgfTsKKwkJRjQ1MUMwRkUyNzAzQjI2MzAwMkJBMDNCIC8qIFJlbW90
ZUdyYXBoaWNzQ29udGV4dFByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNDhCQjhERDI2Rjk2MzVEMDAxQzFDNDAgLyogUmVtb3RlR3JhcGhpY3ND
b250ZXh0UHJveHkuaCAqLzsgfTsKIAkJRjQ2NjBCQzIyNURFRjA4MTAwRTg2NTk4IC8qIFBhc3Rl
Ym9hcmRBY2Nlc3NJbnRlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY0NjYwQkMxMjVERUYwODEwMEU4NjU5OCAvKiBQYXN0ZWJvYXJkQWNjZXNzSW50
ZW50LmggKi87IH07CiAJCUY0ODU3MEEzMjY0NEJFQzUwMEMwNUY3MSAvKiBUaW1lb3V0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDg1NzBBMjI2NDRC
RUM0MDBDMDVGNzEgLyogVGltZW91dC5oICovOyB9OwogCQlGNDhEMkE4NTIxNTgzQTdFMDBDNjc1
MkIgLyogQXBwS2l0U1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNDhEMkE4NDIxNTgzQTAyMDBDNjc1MkIgLyogQXBwS2l0U1BJLmggKi87IH07CisJ
CUY0OTJGQjYwMjcwNjE0OUEwMDU1RTREMSAvKiBTdHJlYW1NZXNzYWdlUmVjZWl2ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0OTJGQjVGMjcwNjE0
OTkwMDU1RTREMSAvKiBTdHJlYW1NZXNzYWdlUmVjZWl2ZXIuaCAqLzsgfTsKIAkJRjQ5NkE0MzEx
RjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ5NkE0MkYxRjU4QTI3MjAwNEMx
NzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oICovOyB9OwogCQlGNDk3NEU3NjI2NUVD
QkJDMDBCNDlCOEMgLyogV0tSZXZlYWxJdGVtUHJlc2VudGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDQ2RURFRjI2NUVCMkIwMDAzMURBOEYgLyog
V0tSZXZlYWxJdGVtUHJlc2VudGVyLmggKi87IH07CiAJCUY0OTc1Q0YyMjYyNEI4MEEwMDNDNjI2
RSAvKiBXS1F1aWNrTG9va1ByZXZpZXdDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDk3NUNGMTI2MjRCODBBMDAzQzYyNkUgLyogV0tR
dWlja0xvb2tQcmV2aWV3Q29udHJvbGxlci5oICovOyB9OwotCQlGNEE2RDZCQzI1NENBM0U5MDBC
NjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QTZENkJCMjU0Q0EzRTkwMEI2NUZBQSAvKiBTaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZS5oICovOyB9OwogCQlGNEJBMzNGMjI1NzU3RTg5MDAwQTNDRTgg
LyogV0tJbWFnZUFuYWx5c2lzR2VzdHVyZVJlY29nbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QkEzM0YwMjU3NTdFODkwMDBBM0NFOCAvKiBX
S0ltYWdlQW5hbHlzaXNHZXN0dXJlUmVjb2duaXplci5oICovOyB9OwogCQlGNENCMDlFNTIyNUQ1
QTA5MDA4OTE0ODcgLyogV2Vic2l0ZU1lZGlhU291cmNlUG9saWN5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNENCMDlFNDIyNUQ1QTAzMDA4OTE0ODcg
LyogV2Vic2l0ZU1lZGlhU291cmNlUG9saWN5LmggKi87IH07CiAJCUY0Q0YxRTlEMjVFNDBEQ0Mw
MDBGOUQ3MyAvKiBHZXN0dXJlUmVjb2duaXplckNvbnNpc3RlbmN5RW5mb3JjZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0Q0YxRTlCMjVFNDBEQ0Mw
MDBGOUQ3MyAvKiBHZXN0dXJlUmVjb2duaXplckNvbnNpc3RlbmN5RW5mb3JjZXIuaCAqLzsgfTsK
QEAgLTYwOTMsMTUgKzYwOTMsMTAgQEAKIAkJRUNBNjgwRDMxRTY5MDRCNTAwNzMxRDIwIC8qIEV4
dHJhUHJpdmF0ZVN5bWJvbHNGb3JUQVBJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEV4dHJhUHJpdmF0ZVN5bWJvbHNGb3JUQVBJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUVDQkZDMURCMUU2QTRENjYwMDAzMDBDNyAvKiBFeHRyYVB1YmxpY1N5bWJvbHNGb3JU
QVBJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dHJhUHVibGljU3ltYm9sc0ZvclRBUEkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjAzNjk3ODcxNUY0QkYwNTAwQzNBODBFIC8qIFdlYkNv
bG9yUGlja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNv
bG9yUGlja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjQwOTRDQjkyNTUz
MDQ3RTAwM0Q3M0UzIC8qIERpc3BsYXlMaXN0V3JpdGVySGFuZGxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERpc3BsYXlMaXN0V3JpdGVySGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUY0MDk0Q0JBMjU1MzA0N0UwMDNENzNFMyAvKiBEaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUY0MDk0Q0JCMjU1MzA0QUYwMDNENzNFMyAvKiBEaXNwbGF5
TGlzdFJlYWRlckhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdFJlYWRlckhhbmRs
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGNDA5NENCQzI1NTMwNEFGMDAzRDcz
RTMgLyogRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlz
cGxheUxpc3RSZWFkZXJIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
NDA5QkExNzFFNkU2NEIzMDA5REEyOEUgLyogV0tEcmFnRGVzdGluYXRpb25BY3Rpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tEcmFnRGVzdGluYXRpb25BY3Rpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQwQkJCNDAyNTdGRjQ2RTAwNjc0NjNBIC8q
IEdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdQVVBy
b2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUY0MEQxQjY4MjIwQkRDMEYwMEI0OUEwMSAvKiBXZWJBdXRvY29ycmVjdGlvbkNvbnRleHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0Lmg7IHBhdGggPSBpb3Mv
V2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUY0MTA1NjYxMjEzMDY5OUEwMDkyMjgxRCAvKiBBUElBdHRhY2htZW50Q29jb2EubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBBUElBdHRhY2htZW50Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUY0MTRDRTJDMjY5REU2RUEwMEJEMjE2QSAvKiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0MkQ2MzNGMjJBMEVGRDMwMEQyRkIz
QSAvKiBXZWJBdXRvY29ycmVjdGlvbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gV2ViQXV0b2NvcnJlY3Rpb25EYXRhLmg7IHBhdGggPSBpb3MvV2ViQXV0b2NvcnJlY3Rp
b25EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0MkQ2MzQwMjJBMEVGRDMw
MEQyRkIzQSAvKiBXZWJBdXRvY29ycmVjdGlvbkRhdGEubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJBdXRvY29ycmVjdGlvbkRhdGEubW07IHBhdGggPSBpb3Mv
V2ViQXV0b2NvcnJlY3Rpb25EYXRhLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
NDMwRTk0MTIyNDczMkE5MDA1RkUwNTMgLyogV2Vic2l0ZU1ldGFWaWV3cG9ydFBvbGljeS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJzaXRlTWV0YVZpZXdwb3J0UG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC02MTIzLDE1ICs2MTE4LDIzIEBACiAJCUY0NDgxNTYzMjM4NzgyMDAw
MDk4MjY1NyAvKiBXS0RlZmVycmluZ0dlc3R1cmVSZWNvZ25pemVyLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gV0tEZWZlcnJpbmdHZXN0dXJlUmVjb2duaXplci5tbTsgcGF0aCA9IGlvcy9XS0Rl
ZmVycmluZ0dlc3R1cmVSZWNvZ25pemVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGNDRERkVCMDFFOUU3NTJGMDAzOEQxOTYgLyogV2ViSWNvblV0aWxpdGllcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJJY29uVXRpbGl0aWVzLmg7IHBhdGggPSBpb3Mv
V2ViSWNvblV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDRERkVC
MTFFOUU3NTJGMDAzOEQxOTYgLyogV2ViSWNvblV0aWxpdGllcy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYkljb25VdGlsaXRpZXMubW07IHBhdGggPSBpb3Mv
V2ViSWNvblV0aWxpdGllcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjQ1MTdE
NzcyNkZCQ0NFNDAwNEM4NDc1IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlUmVjZWl2
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVtb3RlUmVuZGVy
aW5nQmFja2VuZE1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJL
aXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQlGNDUxN0Q3OTI2RkJDRDM4MDA0Qzg0NzUgLyog
UmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzUmVwbGllcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXNSZXBsaWVzLmg7
IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNz
YWdlc1JlcGxpZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJRjQ1
MTdEN0EyNkZCQ0QzODAwNEM4NDc1IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
TWVzc2FnZXMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZE1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJ
CUY0NTFDMTAwMjcwM0Q4NTMwMDJCQTAzQiAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHQubWVzc2Fn
ZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gUmVtb3RlR3JhcGhpY3NDb250ZXh0Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGNDY2MEJDMTI1REVGMDgxMDBFODY1OTggLyogUGFzdGVib2Fy
ZEFjY2Vzc0ludGVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0N0EwNTE2MjY4MjdBMDkwMDdFNUNGMiAv
KiBRdWlja0xvb2tQcmV2aWV3QWN0aXZpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVpY2tMb29rUHJl
dmlld0FjdGl2aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0ODU3MEEyMjY0
NEJFQzQwMEMwNUY3MSAvKiBUaW1lb3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRpbWVvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjQ4QkI4REQyNkY5
NjM1RDAwMUMxQzQwIC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUY0OEJCOERFMjZGOTYzNUQwMDFDMUM0MCAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRQ
cm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0OEJCOERGMjZGOTYzOTIwMDFDMUM0
MCAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlR3JhcGhp
Y3NDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0OEJCOEUwMjZGOTYz
OTIwMDFDMUM0MCAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVtb3RlR3JhcGhpY3NDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRjQ4RDJBODQyMTU4M0EwMjAwQzY3NTJCIC8qIEFwcEtpdFNQSS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBcHBLaXRTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjQ5MkZCNUYyNzA2
MTQ5OTAwNTVFNEQxIC8qIFN0cmVhbU1lc3NhZ2VSZWNlaXZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdHJlYW1NZXNzYWdlUmVjZWl2ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRjQ5NkE0MkYxRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJh
Y3Rpb25TdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaDsg
cGF0aCA9IGlvcy9EcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRjQ5NkE0MzAxRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rp
b25TdGF0ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0
ZS5tbTsgcGF0aCA9IGlvcy9EcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUY0OTc1Q0YxMjYyNEI4MEEwMDNDNjI2RSAvKiBXS1F1aWNrTG9v
a1ByZXZpZXdDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUXVpY2tMb29rUHJldmlld0Nv
bnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ5NzVDRjMyNjI0Qjkx
ODAwM0M2MjZFIC8qIFdLUXVpY2tMb29rUHJldmlld0NvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXS1F1aWNrTG9va1ByZXZpZXdDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlGNEE2RDZCQjI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxh
eUxpc3RIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRBN0NFODQyNjY3RUI0RTAwMjI4Njg1IC8q
IFRleHRSZWNvZ25pdGlvblVwZGF0ZVJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0UmVjb2du
aXRpb25VcGRhdGVSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRBQzY1
NUUyMkEzMTQwRTAwQTA1NjA3IC8qIFdlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVlc0lPUy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYlByZWZlcmVuY2VzRGVm
YXVsdFZhbHVlc0lPUy5tbTsgcGF0aCA9IGlvcy9XZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJ
T1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0QjM3OEQwMjFEREJCQUIwMDk1
QTM3OCAvKiBXZWJVbmRvU3RlcElELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlVuZG9TdGVwSUQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY5NjAsNyArNjk2Myw2IEBACiAJCQkJMUE2
NDIwRTMxMkRDRTJGRjAwQ0FBRTJDIC8qIFNoYXJlYWJsZUJpdG1hcC5oICovLAogCQkJCTUxMjE3
NDVFMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5jcHAgKi8sCiAJCQkJNTEy
MTc0NUYxNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmggKi8sCi0JCQkJRjRB
NkQ2QkIyNTRDQTNFOTAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmggKi8sCiAJ
CQkJODMxM0Y3RUExRjdEQUUwNDAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hTdG9yZS5jcHAg
Ki8sCiAJCQkJODMxM0Y3RTkxRjdEQUUwMzAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hTdG9y
ZS5oICovLAogCQkJCTgzMTNGN0U4MUY3REFFMDMwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNo
VGFibGUuY3BwICovLApAQCAtNzM0Nyw2ICs3MzQ5LDcgQEAKIAkJCQk3QjczMTIzOTI1Q0M4NTI1
MDAzQjI3OTYgLyogU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIuaCAqLywKIAkJCQk3QjczMTIzMjI1
Q0M4NTIzMDAzQjI3OTYgLyogU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5jcHAgKi8sCiAJCQkJ
N0I3MzEyMzUyNUNDODUyNDAwM0IyNzk2IC8qIFN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuaCAq
LywKKwkJCQlGNDkyRkI1RjI3MDYxNDk5MDA1NUU0RDEgLyogU3RyZWFtTWVzc2FnZVJlY2VpdmVy
LmggKi8sCiAJCQkJN0I3MzEyMzcyNUNDODUyNDAwM0IyNzk2IC8qIFN0cmVhbVNlcnZlckNvbm5l
Y3Rpb24uY3BwICovLAogCQkJCTdCNzMxMjM4MjVDQzg1MjQwMDNCMjc5NiAvKiBTdHJlYW1TZXJ2
ZXJDb25uZWN0aW9uLmggKi8sCiAJCQkJMUFFMDBENjkxODMyN0MxMjAwMDg3REQ3IC8qIFN0cmlu
Z1JlZmVyZW5jZS5jcHAgKi8sCkBAIC05MDU3LDggKzkwNjAsNiBAQAogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk3MjdBN0YzMzI0MDc4NTI3MDA0RDI5MzEgLyogY29j
b2EgKi8sCi0JCQkJRjQwOTRDQkEyNTUzMDQ3RTAwM0Q3M0UzIC8qIERpc3BsYXlMaXN0V3JpdGVy
SGFuZGxlLmNwcCAqLywKLQkJCQlGNDA5NENCOTI1NTMwNDdFMDAzRDczRTMgLyogRGlzcGxheUxp
c3RXcml0ZXJIYW5kbGUuaCAqLywKIAkJCQk3QjY0QzBCNjI1NEM1QzI1MDAwNkI0QUYgLyogR3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLmggKi8sCiAJCQkJNzI3QTdGMzkyNDA3ODhGMTAwNEQy
OTMxIC8qIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oICovLAogCQkJCTcyN0E3RjM3MjQwNzg4
RjAwMDREMjkzMSAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwICovLApA
QCAtOTA2OSw2ICs5MDcwLDggQEAKIAkJCQk3QjkwNDE2NjI1NEFGREVCMDA2RUVCOEMgLyogUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5oICovLAogCQkJCTdCOTA0MTY3MjU0QUZFMTcwMDZF
RUI4QyAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Lm1lc3NhZ2VzLmluICovLAogCQkJ
CTdCRTcyNjU3MjU3NEY2NzIwMEU4NUQ5OCAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
RnVuY3Rpb25zR2VuZXJhdGVkLmNwcCAqLywKKwkJCQlGNDhCQjhERTI2Rjk2MzVEMDAxQzFDNDAg
LyogUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHkuY3BwICovLAorCQkJCUY0OEJCOEREMjZGOTYz
NUQwMDFDMUM0MCAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eS5oICovLAogCQkJCTcyN0E3
RjQ5MjQwOEFFRTYwMDREMjkzMSAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggKi8sCiAJCQkJ
NTUwNjQwOUQyNDA3MTYwOTAwQUFFMDQ1IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5j
cHAgKi8sCiAJCQkJNTUwNjQwOUUyNDA3MTYwOTAwQUFFMDQ1IC8qIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5oICovLApAQCAtOTA4Myw5ICs5MDg2LDEwIEBACiAJCTU1MDY0MEExMjQwNzFB
MjkwMEFBRTA0NSAvKiBncmFwaGljcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCi0JCQkJRjQwOTRDQkMyNTUzMDRBRjAwM0Q3M0UzIC8qIERpc3BsYXlMaXN0UmVh
ZGVySGFuZGxlLmNwcCAqLywKLQkJCQlGNDA5NENCQjI1NTMwNEFGMDAzRDczRTMgLyogRGlzcGxh
eUxpc3RSZWFkZXJIYW5kbGUuaCAqLywKIAkJCQk1NUFEMDk0MzI0MDhBMEU2MDBERTREMkYgLyog
UGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlci5oICovLAorCQkJCUY0OEJCOEUwMjZGOTYzOTIwMDFD
MUM0MCAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHQuY3BwICovLAorCQkJCUY0OEJCOERGMjZGOTYz
OTIwMDFDMUM0MCAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHQuaCAqLywKKwkJCQlGNDUxQzEwMDI3
MDNEODUzMDAyQkEwM0IgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0Lm1lc3NhZ2VzLmluICovLAog
CQkJCTdCOTA0MTY5MjU0QUZFQTcwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTC5j
cHAgKi8sCiAJCQkJN0I5MDQxNkEyNTRBRkVBNzAwNkVFQjhDIC8qIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMLmggKi8sCiAJCQkJN0I5MDQxNjgyNTRBRkVBNzAwNkVFQjhDIC8qIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluICovLApAQCAtOTA5Niw3ICs5MTAwLDYgQEAKIAkJCQk1
NTA2NDBBMzI0MDcxQTYxMDBBQUUwNDUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICovLAog
CQkJCTU1MDY0MEE0MjQwNzFDMjEwMEFBRTA0NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1l
c3NhZ2VzLmluICovLAogCQkJCTQ2MDg4OUZGMjYxRkE4QTkwMEUyNTAwRCAvKiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzLmggKi8sCi0JCQkJRjQxNENFMkMyNjlERTZF
QTAwQkQyMTZBIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZS5oICovLAogCQkJCTcyNkQ1
NkREMjUzQTY0ODEwMDAyRUY5MCAvKiBSZW1vdGVSZXNvdXJjZUNhY2hlLmNwcCAqLywKIAkJCQk3
MjZENTZERTI1M0E2NDgxMDAwMkVGOTAgLyogUmVtb3RlUmVzb3VyY2VDYWNoZS5oICovLAogCQkJ
CTdCQ0Y3MENBMjYxNDkzNUUwMEU0RkI3MCAvKiBTY29wZWRSZW5kZXJpbmdSZXNvdXJjZXNSZXF1
ZXN0LmNwcCAqLywKQEAgLTExNDU2LDYgKzExNDU5LDkgQEAKIAkJCQlDRDgyNTJEQTI1RDQ5MTU0
MDA4NjJGRDggLyogUmVtb3RlUmVtb3RlQ29tbWFuZExpc3RlbmVyUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwICovLAogCQkJCUNEODI1MkQ5MjVENDkxNTQwMDg2MkZEOCAvKiBSZW1vdGVSZW1vdGVD
b21tYW5kTGlzdGVuZXJQcm94eU1lc3NhZ2VzLmggKi8sCiAJCQkJQ0Q4MjUyRDgyNUQ0OTE1MzAw
ODYyRkQ4IC8qIFJlbW90ZVJlbW90ZUNvbW1hbmRMaXN0ZW5lclByb3h5TWVzc2FnZXNSZXBsaWVz
LmggKi8sCisJCQkJRjQ1MTdENzcyNkZCQ0NFNDAwNEM4NDc1IC8qIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCUY0NTE3RDdBMjZGQkNEMzgwMDRDODQ3
NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMuaCAqLywKKwkJCQlGNDUxN0Q3OTI2
RkJDRDM4MDA0Qzg0NzUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzUmVwbGllcy5o
ICovLAogCQkJCTBGNTk0N0E1MTg3QjUxNzYwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJMEY1OTQ3QTYxODdCNTE3NjAwNDM3
ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXMuaCAqLywKIAkJCQkxREQy
QTY2QjI1NjIwMjFFMDBGRjdCNkYgLyogUmVtb3RlU291cmNlQnVmZmVyUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwICovLApAQCAtMTIyMzcsOCArMTIyNDMsNiBAQAogCQkJCTgzODkxQjZDMUE2OEMz
MEIwMDMwRjM4NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzE4MTczNjEyMDU4NDI0NzAwREZEQTY1IC8qIERpc3BsYXlMaW5rLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjE4OUNBQzI0NzQ5RjJGMDBFNThEODEgLyogRGlzcGxheUxpbmtPYnNlcnZlcklE
LmggaW4gSGVhZGVycyAqLywKLQkJCQlGNDA5NENCRDI1NTMwNTNEMDAzRDczRTMgLyogRGlzcGxh
eUxpc3RSZWFkZXJIYW5kbGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUY0MDk0Q0JFMjU1MzA1NDAw
MDNENzNFMyAvKiBEaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUMxNDI3MDIxQzIzRjg0QzAwRDQxMTgzIC8qIERvd25sb2FkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1QzE0MjcwNTFDMjNGODRDMDBENDExODMgLyogRG93bmxvYWRJRC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUMxNDI3MDcxQzIzRjg0QzAwRDQxMTgzIC8qIERvd25sb2FkTWFuYWdlci5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xMjU0OSw2ICsxMjU1Myw3IEBACiAJCQkJQ0RBQzIwQjQyM0ZCNThGMjAw
MjFERUUzIC8qIFJlbW90ZUNETUluc3RhbmNlUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUNE
QUMyMENBMjNGQzJGNzUwMDIxREVFMyAvKiBSZW1vdGVDRE1JbnN0YW5jZVNlc3Npb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNEQUMyMEM5MjNGQzJGNzUwMDIxREVFMyAvKiBSZW1vdGVDRE1JbnN0
YW5jZVNlc3Npb25JZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlGNDUxQzBGRTI3MDNC
MjYzMDAyQkEwM0IgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJENDdCNTZEMTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9y
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRERjczMTUxOEU5NTA2MDAwNEY1QTY2IC8qIFJlbW90
ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCMTZB
RUExNjRCM0E4ODAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZUNvbnRleHQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTI1NzcsNyArMTI1ODIsOCBAQAogCQkJCTFBQzEzMzg2MTg1OTBDNDYwMEYzRUMw
NSAvKiBSZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
NjA4OEEwMDI2MUZBOEJDMDBFMjUwMEQgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDYwODhBMDEyNjFGQThDNDAwRTI1MDBEIC8qIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAotCQkJCUY0MTRDRTJE
MjY5REU2RUEwMEJEMjE2QSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUY0NTE3RDdDMjZGQkNEMzkwMDRDODQ3NSAvKiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUY0NTE3RDdCMjZGQkNEMzkwMDRD
ODQ3NSAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXNSZXBsaWVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjU5NDc5MDE4N0IzQjNBMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTk0N0E4MTg3QjUxNzYwMDQzNzg1NyAv
KiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjU5NDc5QjE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cm94eS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMjYxOCw3ICsxMjYyNCw2IEBACiAJCQkJNTEyMTc0
NjExNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBMTgzNDk0MjI0RUY0Njc4MDBCREM5QTggLyogU2hhcmVkQnVmZmVyQ29weS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMkRDMThGRjZFRjJBMzEzMEMxMzAxNzY3IC8qIFNoYXJlZEJ1ZmZlckRh
dGFSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAotCQkJCUY0QTZENkJDMjU0Q0EzRTkwMEI2NUZB
QSAvKiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyNEJF
RDUxMjA4OTREMTAwRkJCMDU5IC8qIFNoYXJlZE1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0Q0QjREOUQxRTc2NUUwMDAwRDI3MDkyIC8qIFNoYXJlZFJpbmdCdWZmZXJTdG9yYWdlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4MzEzRjdFQzFGN0RBRTA4MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5n
SGFzaFN0b3JlLmggaW4gSGVhZGVycyAqLywKQEAgLTEyNjUzLDYgKzEyNjU4LDcgQEAKIAkJCQk3
QjczMTIzQTI1Q0M4NTI1MDAzQjI3OTYgLyogU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJN0I3MzEyNDIyNUNDODUyNTAwM0IyNzk2IC8qIFN0cmVhbUNvbm5lY3Rp
b25FbmNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QjczMTIzRTI1Q0M4NTI1MDAzQjI3OTYg
LyogU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjQ5MkZC
NjAyNzA2MTQ5QTAwNTVFNEQxIC8qIFN0cmVhbU1lc3NhZ2VSZWNlaXZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJN0I3MzEyNDEyNUNDODUyNTAwM0IyNzk2IC8qIFN0cmVhbVNlcnZlckNvbm5lY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTAwRDZDMTgzMjdDMTIwMDA4N0RENyAvKiBTdHJp
bmdSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5NkJEODVEMTUwMTlCQzMwMDcxRjQy
NCAvKiBTdHJpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9EaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0Rpc3BsYXlMaXN0V3Jp
dGVySGFuZGxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgxOTg3N2Y0ZGVh
ZDU0MWU5ZjQyMzA1Mzc2NzkzM2RjNGNjZDFjYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L0Rpc3BsYXlMaXN0V3JpdGVySGFuZGxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGlzcGxheUxp
c3RXcml0ZXJIYW5kbGUuaCIKLQotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1zaXplX3Qg
RGlzcGxheUxpc3RXcml0ZXJIYW5kbGU6OmFkdmFuY2Uoc2l6ZV90IGFtb3VudCkKLXsKLSAgICBt
X3dyaXRhYmxlT2Zmc2V0ID0gQ2hlY2tlZFNpemUgeyBtX3dyaXRhYmxlT2Zmc2V0IH0gKyBhbW91
bnQ7Ci0gICAgcmV0dXJuIENoZWNrZWRTaXplIHsgaGVhZGVyKCkudW5yZWFkQnl0ZXMuZXhjaGFu
Z2VBZGQoYW1vdW50KSB9ICsgYW1vdW50OwotfQotCi1zaXplX3QgRGlzcGxheUxpc3RXcml0ZXJI
YW5kbGU6OmF2YWlsYWJsZUNhcGFjaXR5KCkgY29uc3QKLXsKLSAgICBpZiAoVU5MSUtFTFkoc2hh
cmVkTWVtb3J5KCkuc2l6ZSgpIDwgd3JpdGFibGVPZmZzZXQoKSkpCi0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICByZXR1cm4gc2hhcmVkTWVtb3J5KCkuc2l6ZSgp
IC0gd3JpdGFibGVPZmZzZXQoKTsKLX0KLQotRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUg
RGlzcGxheUxpc3RXcml0ZXJIYW5kbGU6OmNyZWF0ZUhhbmRsZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHsKLSAgICAgICAgaWRlbnRpZmllcigpLAotICAgICAgICBkYXRhKCkgKyB3cml0YWJsZU9m
ZnNldCgpLAotICAgICAgICBhdmFpbGFibGVDYXBhY2l0eSgpCi0gICAgfTsKLX0KLQotYm9vbCBE
aXNwbGF5TGlzdFdyaXRlckhhbmRsZTo6bW92ZVdyaXRhYmxlT2Zmc2V0VG9TdGFydElmUG9zc2li
bGUoKQotewotICAgIGlmIChtX3dyaXRhYmxlT2Zmc2V0IDw9IFNoYXJlZERpc3BsYXlMaXN0SGFu
ZGxlOjpoZWFkZXJTaXplKCkpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV93cml0YWJsZU9m
ZnNldCA9PSBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6aGVhZGVyU2l6ZSgpKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHVucmVhZEJ5dGVzKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIG1fd3JpdGFibGVPZmZzZXQgPSBTaGFyZWREaXNwbGF5TGlzdEhh
bmRsZTo6aGVhZGVyU2l6ZSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvRGlzcGxheUxpc3RXcml0ZXJIYW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvRGlzcGxheUxpc3RXcml0ZXJIYW5kbGUuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYmIxZTNlMDBhZjg0NDAyODhlZWFmZmQ1MDMxNWI2OWJlMThiYWUzYS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0Rpc3BsYXlMaXN0V3JpdGVySGFuZGxlLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oIgotI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBEaXNwbGF5TGlzdFdyaXRlckhh
bmRsZSA6IHB1YmxpYyBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSB7Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoRGlzcGxheUxpc3RXcml0ZXJIYW5kbGUpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPERpc3BsYXlMaXN0V3JpdGVySGFuZGxlPiBj
cmVhdGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZp
ZXIsIFJlZjxTaGFyZWRNZW1vcnk+JiYgc2hhcmVkTWVtb3J5KQotICAgIHsKLSAgICAgICAgaWYg
KHNoYXJlZE1lbW9yeS0+c2l6ZSgpIDw9IGhlYWRlclNpemUoKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERpc3BsYXlMaXN0V3JpdGVy
SGFuZGxlKGlkZW50aWZpZXIsIFdURk1vdmUoc2hhcmVkTWVtb3J5KSkpOwotICAgIH0KLQotICAg
IHNpemVfdCB3cml0YWJsZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JpdGFibGVPZmZzZXQ7
IH0KLSAgICBzaXplX3QgYXZhaWxhYmxlQ2FwYWNpdHkoKSBjb25zdDsKLQotICAgIGJvb2wgbW92
ZVdyaXRhYmxlT2Zmc2V0VG9TdGFydElmUG9zc2libGUoKTsKLQotICAgIHNpemVfdCBhZHZhbmNl
KHNpemVfdCBhbW91bnQpOwotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFu
ZGxlIGNyZWF0ZUhhbmRsZSgpIGNvbnN0OwotCi0gICAgYm9vbCB0cnlUb1Jlc3VtZShTaGFyZWRE
aXNwbGF5TGlzdEhhbmRsZTo6UmVzdW1lUmVhZGluZ0luZm9ybWF0aW9uJiYgaW5mbykKLSAgICB7
Ci0gICAgICAgIGF1dG8mIGhlYWRlciA9IHRoaXMtPmhlYWRlcigpOwotICAgICAgICBoZWFkZXIu
cmVzdW1lUmVhZGluZ0luZm8gPSBXVEZNb3ZlKGluZm8pOwotICAgICAgICByZXR1cm4gaGVhZGVy
LndhaXRpbmdTdGF0dXMuY29tcGFyZUV4Y2hhbmdlV2VhaygKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpXYWl0aW5nU3RhdHVzU3RvcmFnZVR5cGU+KFNo
YXJlZERpc3BsYXlMaXN0SGFuZGxlOjpXYWl0aW5nU3RhdHVzOjpXYWl0aW5nKSwKLSAgICAgICAg
ICAgIHN0YXRpY19jYXN0PFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpXYWl0aW5nU3RhdHVzU3Rv
cmFnZVR5cGU+KFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpXYWl0aW5nU3RhdHVzOjpSZXN1bWlu
ZykKLSAgICAgICAgKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRGlzcGxheUxpc3RXcml0ZXJI
YW5kbGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZp
ZXIsIFJlZjxTaGFyZWRNZW1vcnk+JiYgc2hhcmVkTWVtb3J5KQotICAgICAgICA6IFNoYXJlZERp
c3BsYXlMaXN0SGFuZGxlKGlkZW50aWZpZXIsIFdURk1vdmUoc2hhcmVkTWVtb3J5KSkKLSAgICAg
ICAgLCBtX3dyaXRhYmxlT2Zmc2V0KFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpoZWFkZXJTaXpl
KCkpCi0gICAgewotICAgIH0KLQotICAgIHNpemVfdCBtX3dyaXRhYmxlT2Zmc2V0IHsgMCB9Owot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
UHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyMzVmODA2ZmNlYTE3OTdhNGU0MDA0YWU4NGE1NmM0MmEw
ZmVhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5LmNwcApAQCAtMCwwICsxLDYzMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eS5oIgorCisjaW5j
bHVkZSAiUmVtb3RlR3JhcGhpY3NDb250ZXh0TWVzc2FnZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0Rpc3BsYXlMaXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdERyYXdpbmdDb250
ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVy
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVBsYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
Tm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dFByb3h5KEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5JiByZW5kZXJpbmdCYWNrZW5kLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxD
bGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRl
cjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykKKyAgICA6IG1f
c3RhdGVTdGFjayh7eyB7IH0sIGluaXRpYWxDVE0sIGluaXRpYWxDbGlwIH19KQorICAgICwgbV9k
cmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMsIGRlY29uc3RydWN0RHJhd0dseXBocykKKyAgICAsIG1f
ZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcigpKQorICAgICwgbV9pbWFnZUJ1ZmZlcihtYWtlV2Vha1B0cihpbWFnZUJ1ZmZl
cikpCisgICAgLCBtX3JlbmRlcmluZ0JhY2tlbmQobWFrZVdlYWtQdHIocmVuZGVyaW5nQmFja2Vu
ZCkpCisgICAgLCBtX2lzTmVzdGVkKGZhbHNlKQoreworfQorCitSZW1vdGVHcmFwaGljc0NvbnRl
eHRQcm94eTo6UmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHkoUmVtb3RlR3JhcGhpY3NDb250ZXh0
UHJveHkmIHBhcmVudCwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBpbml0aWFsQ1RNKQorICAgIDogbV9zdGF0ZVN0YWNrKHt7IHsgfSwgaW5pdGlh
bENUTSwgaW5pdGlhbENsaXAgfX0pCisgICAgLCBtX2RyYXdHbHlwaHNSZWNvcmRlcigqdGhpcywg
cGFyZW50Lm1fZHJhd0dseXBoc1JlY29yZGVyLmRlY29uc3RydWN0RHJhd0dseXBocygpKQorICAg
ICwgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIocGFyZW50Lm1fZGVzdGluYXRpb25CdWZm
ZXJJZGVudGlmaWVyKQorICAgICwgbV9pbWFnZUJ1ZmZlcihwYXJlbnQubV9pbWFnZUJ1ZmZlcikK
KyAgICAsIG1fcmVuZGVyaW5nQmFja2VuZChwYXJlbnQubV9yZW5kZXJpbmdCYWNrZW5kKQorICAg
ICwgbV9pc05lc3RlZCh0cnVlKQoreworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFBy
b3h5OjpnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQoreworICAgIGlmIChVTkxJS0VMWSghbV9yZW5k
ZXJpbmdCYWNrZW5kKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0OjpHZXRQaXhlbEJ1ZmZlcih7IG91dHB1dEZvcm1hdCwgc291cmNl
UmVjdCB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OnB1dFBpeGVs
QnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXN0Rm9ybWF0KQoreworICAgIGlmIChVTkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
OjpQdXRQaXhlbEJ1ZmZlcih7IHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RG
b3JtYXQgfSkpOworfQorCitzdGF0aWMgYm9vbCBjb250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5n
ZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNoYW5nZXMsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZUZsYWdzKQoreworICAgIHN0YXRpYyBj
b25zdGV4cHIgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgaW5saW5lU3Rh
dGVDaGFuZ2VGbGFncyB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlj
a25lc3NDaGFuZ2UsCisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNo
YW5nZSwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSwKKyAg
ICB9OworCisgICAgaWYgKGNoYW5nZUZsYWdzICE9IChjaGFuZ2VGbGFncyAmIGlubGluZVN0YXRl
Q2hhbmdlRmxhZ3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSAmJiAh
Y2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLnRyeUdldEFzU1JHQkFCeXRlcygpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkgJiYgIWNoYW5nZXMubV9zdGF0ZS5maWxsQ29s
b3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpyZWNvcmRO
YXRpdmVJbWFnZVVzZShOYXRpdmVJbWFnZSYgaW1hZ2UpCit7CisgICAgaWYgKFVOTElLRUxZKCFt
X3JlbmRlcmluZ0JhY2tlbmQpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlbmRlcmluZ0Jh
Y2tlbmQtPnJlY29yZE5hdGl2ZUltYWdlVXNlKGltYWdlKTsKK30KKwordm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRQcm94eTo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncyBjaGFuZ2VGbGFncykKK3sKKyAgICBpZiAoIWNvbnRhaW5zT25seUlubGluZVN0YXRl
Q2hhbmdlcyhjaGFuZ2VzLCBjaGFuZ2VGbGFncykpIHsKKyAgICAgICAgaWYgKGF1dG8gcGF0dGVy
biA9IGNoYW5nZXMubV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQorICAgICAgICAgICAgcmVjb3JkTmF0
aXZlSW1hZ2VVc2UocGF0dGVybi0+dGlsZUltYWdlKCkpOworICAgICAgICBpZiAoYXV0byBwYXR0
ZXJuID0gY2hhbmdlcy5tX3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgICAgICAgICAgcmVjb3JkTmF0
aXZlSW1hZ2VVc2UocGF0dGVybi0+dGlsZUltYWdlKCkpOworICAgICAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OlNldFN0YXRlKHsgY2hhbmdlcy5tX3N0YXRlLCBjaGFu
Z2VGbGFncyB9KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkKKyAg
ICAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpTZXRJbmxpbmVTdHJv
a2VDb2xvcih7ICpjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVz
KCkgfSkpOworCisgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQorICAgICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHQ6OlNldFN0cm9rZVRoaWNrbmVzcyh7IGNoYW5nZXMubV9zdGF0ZS5z
dHJva2VUaGlja25lc3MgfSkpOworCisgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQorICAgICAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OlNldElubGluZUZpbGxDb2xvcih7ICpjaGFuZ2VzLm1f
c3RhdGUuZmlsbENvbG9yLnRyeUdldEFzU1JHQkFCeXRlcygpIH0pKTsKK30KKwordm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHRQcm94eTo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KQoreworICAgIGF1dG8mIHN0YXRlQ2hhbmdlcyA9IGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdl
OworICAgIGF1dG8gY2hhbmdlc0Zyb21MYXN0U3RhdGUgPSBzdGF0ZUNoYW5nZXMuY2hhbmdlc0Zy
b21TdGF0ZShjdXJyZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0YXRlKTsKKyAgICBpZiAoIWNoYW5n
ZXNGcm9tTGFzdFN0YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBhcHBlbmRTdGF0ZUNoYW5n
ZUl0ZW0oc3RhdGVDaGFuZ2VzLCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSk7CisgICAgc3RhdGVDaGFu
Z2VzLm1fY2hhbmdlRmxhZ3MgPSB7IH07CisgICAgY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdT
dGF0ZSA9IHN0YXRlQ2hhbmdlcy5tX3N0YXRlOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dFByb3h5Ojp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQoreworICAgIGN1
cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlLmFjY3VtdWxhdGUoc3RhdGUsIGZsYWdzKTsKK30KKwor
Ym9vbCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6Y2FuRHJhd0ltYWdlQnVmZmVyKGNvbnN0
IEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJp
bmdCYWNrZW5kLT5pc0NhY2hlZChpbWFnZUJ1ZmZlcik7Cit9CisKK1JlbmRlcmluZ01vZGUgUmVt
b3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OnJlbmRlcmluZ01vZGUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2ltYWdlQnVmZmVyLT5yZW5kZXJpbmdNb2RlKCk7Cit9CisKK3ZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0UHJveHk6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQoreworICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6U2V0TGluZUNhcCh7IGxpbmVDYXAg
fSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpzZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKK3sKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OlNldExpbmVEYXNoKHsgZGFzaEFycmF5
LCBkYXNoT2Zmc2V0IH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6
c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0OjpTZXRMaW5lSm9pbih7IGxpbmVKb2luIH0pKTsKK30KKwordm9p
ZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxp
bWl0KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6U2V0TWl0
ZXJMaW1pdCh7IG1pdGVyTGltaXQgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dFByb3h5OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBzbW9vdGhpbmdNb2RlKQoreworICAgIG1fZHJhd0dseXBoc1JlY29yZGVyLmRyYXdHbHlwaHMo
Zm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdN
b2RlKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZHJhd0dseXBoc0Fu
ZENhY2hlRm9udChjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlw
aHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBj
b25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5n
TW9kZSkKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIG1f
cmVuZGVyaW5nQmFja2VuZC0+cmVjb3JkRm9udFVzZShjb25zdF9jYXN0PEZvbnQmPihmb250KSk7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpEcmF3R2x5cGhzKHsg
Zm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2Rl
IH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIGlm
ICghY2FuRHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyKSkgeworICAgICAgICBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+
cmVjb3JkSW1hZ2VCdWZmZXJVc2UoaW1hZ2VCdWZmZXIpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dDo6RHJhd0ltYWdlQnVmZmVyKHsgaW1hZ2VCdWZmZXIucmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zIH0pKTsK
K30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKKyAgICByZWNvcmROYXRpdmVJbWFnZVVzZShpbWFnZSk7CisgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpEcmF3TmF0aXZlSW1hZ2UoeyBpbWFnZS5yZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmRyYXdQ
YXR0ZXJuKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAg
ICByZWNvcmROYXRpdmVJbWFnZVVzZShpbWFnZSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0OjpEcmF3UGF0dGVybih7IGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcigpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNz
Q29udGV4dFByb3h5OjpzYXZlKCkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHQ6OlNhdmUoeyB9KSk7CisgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChtX3N0YXRlU3Rh
Y2subGFzdCgpLmNsb25lRm9yU2F2ZSgpKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRl
eHRQcm94eTo6cmVzdG9yZSgpCit7CisgICAgaWYgKCFtX3N0YXRlU3RhY2suc2l6ZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOworICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6UmVzdG9yZSh7IH0pKTsKK30KKwordm9p
ZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkp
Cit7CisgICAgY3VycmVudFN0YXRlKCkudHJhbnNsYXRlKHgsIHkpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6VHJhbnNsYXRlKHsgeCwgeSB9KSk7Cit9CisKK3Zv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFu
cykKK3sKKyAgICBjdXJyZW50U3RhdGUoKS5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOworICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Um90YXRlKHsgYW5nbGVJblJhZGlh
bnMgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpzY2FsZShjb25z
dCBGbG9hdFNpemUmIHNpemUpCit7CisgICAgY3VycmVudFN0YXRlKCkuc2NhbGUoc2l6ZSk7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpTY2FsZSh7IHNpemUgfSkp
OworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5Ojpjb25jYXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7CisgICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50
aXR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGN1cnJlbnRTdGF0ZSgpLmNvbmNhdENUTSh0
cmFuc2Zvcm0pOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Q29u
Y2F0ZW5hdGVDVE0oeyB0cmFuc2Zvcm0gfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dFByb3h5OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7Cisg
ICAgY3VycmVudFN0YXRlKCkuc2V0Q1RNKHRyYW5zZm9ybSk7CisgICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpTZXRDVE0oeyB0cmFuc2Zvcm0gfSkpOworfQorCitBZmZp
bmVUcmFuc2Zvcm0gUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmdldENUTShHcmFwaGljc0Nv
bnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogUmVzcGVj
dCB0aGUgZ2l2ZW4gdmFsdWUgb2YgSW5jbHVkZURldmljZVNjYWxlLgorICAgIHJldHVybiBjdXJy
ZW50U3RhdGUoKS5jdG07Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBhcHBlbmRTdGF0ZUNo
YW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcih7IG9wYWNpdHkgfSkpOworICAgIG1fc3Rh
dGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3QoKS5jbG9uZUZvclRyYW5zcGFyZW5jeUxh
eWVyKCkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjplbmRUcmFuc3Bh
cmVuY3lMYXllcigpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkVuZFRyYW5zcGFyZW5j
eUxheWVyKHsgIH0pKTsKKyAgICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lk
IFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1J
Zk5lY2Vzc2FyeSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6
RHJhd1JlY3QoeyByZWN0LCBib3JkZXJUaGlja25lc3MgfSkpOworfQorCit2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dFByb3h5OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MikKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5l
Y2Vzc2FyeSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6RHJh
d0xpbmUoeyBwb2ludDEsIHBvaW50MiB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0UHJveHk6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0
IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlm
TmVjZXNzYXJ5KCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpE
cmF3TGluZXNGb3JUZXh0KHsgRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNr
bmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMgfSkpOworfQorCit2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit7CisgICAgYXBw
ZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHQ6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoeyByZWN0LCBzdHls
ZSB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmRyYXdFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5l
Y2Vzc2FyeSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6RHJh
d0VsbGlwc2UoeyByZWN0IH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94
eTo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0
ZW1JZk5lY2Vzc2FyeSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dDo6RHJhd1BhdGgoeyBwYXRoIH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQ
cm94eTo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVt
SWZOZWNlc3NhcnkoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6
OkRyYXdGb2N1c1JpbmdQYXRoKHsgcGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IgfSkpOworfQor
Cit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpEcmF3Rm9jdXNSaW5n
UmVjdHMoeyByZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IgfSkpOworfQorCisjaWYgUExBVEZP
Uk0oTUFDKQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFBhdGgmLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZHJhd0Zv
Y3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENv
bG9yJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkZpbGxSZWN0KHsg
cmVjdCB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGFwcGVu
ZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0OjpGaWxsUmVjdFdpdGhDb2xvcih7IHJlY3QsIGNvbG9yIH0pKTsKK30K
Kwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJ
dGVtSWZOZWNlc3NhcnkoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHQ6OkZpbGxSZWN0V2l0aEdyYWRpZW50KHsgcmVjdCwgZ3JhZGllbnQgfSkpOworfQorCit2b2lk
IFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBi
bGVuZE1vZGUpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkZpbGxDb21wb3NpdGVkUmVj
dCh7IHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlIH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRQcm94eTo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3sKKyAgICBh
cHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dDo6RmlsbFJvdW5kZWRSZWN0KHsgcmVjdCwgY29sb3IsIGJsZW5k
TW9kZSB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgYXBwZW5k
U3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHQ6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHsgcmVjdCwgcm91bmRlZEhv
bGVSZWN0LCBjb2xvciB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6
OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVt
SWZOZWNlc3NhcnkoKTsKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBpZiAocGF0
aC5oYXNJbmxpbmVEYXRhKCkpIHsKKyAgICAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0YTxMaW5l
RGF0YT4oKSkKKyAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dDo6RmlsbExpbmUoeyBwYXRoLmlubGluZURhdGE8TGluZURhdGE+KCkgfSkpOworICAgICAgICBl
bHNlIGlmIChwYXRoLmhhc0lubGluZURhdGE8QXJjRGF0YT4oKSkKKyAgICAgICAgICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6RmlsbEFyYyh7IHBhdGguaW5saW5lRGF0
YTxBcmNEYXRhPigpIH0pKTsKKyAgICAgICAgZWxzZSBpZiAocGF0aC5oYXNJbmxpbmVEYXRhPFF1
YWRDdXJ2ZURhdGE+KCkpCisgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHQ6OkZpbGxRdWFkQ3VydmUoeyBwYXRoLmlubGluZURhdGE8UXVhZEN1cnZlRGF0YT4o
KSB9KSk7CisgICAgICAgIGVsc2UgaWYgKHBhdGguaGFzSW5saW5lRGF0YTxCZXppZXJDdXJ2ZURh
dGE+KCkpCisgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6
OkZpbGxCZXppZXJDdXJ2ZSh7IHBhdGguaW5saW5lRGF0YTxCZXppZXJDdXJ2ZURhdGE+KCkgfSkp
OworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9E
QVRBKQorICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6RmlsbFBhdGgo
eyBwYXRoIH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6ZmlsbEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRl
bUlmTmVjZXNzYXJ5KCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
OjpGaWxsRWxsaXBzZSh7IHJlY3QgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dFByb3h5OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRo
KQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpTdHJva2VSZWN0KHsgcmVjdCwgbGluZVdp
ZHRoIH0pKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6c3Ryb2tlUGF0
aChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNz
YXJ5KCk7CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgaWYgKHBhdGguaGFzSW5s
aW5lRGF0YSgpKSB7CisgICAgICAgIGlmIChwYXRoLmhhc0lubGluZURhdGE8TGluZURhdGE+KCkp
CisgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OlN0cm9r
ZUxpbmUoeyBwYXRoLmlubGluZURhdGE8TGluZURhdGE+KCkgfSkpOworICAgICAgICBlbHNlIGlm
IChwYXRoLmhhc0lubGluZURhdGE8QXJjRGF0YT4oKSkKKyAgICAgICAgICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6U3Ryb2tlQXJjKHsgcGF0aC5pbmxpbmVEYXRhPEFy
Y0RhdGE+KCkgfSkpOworICAgICAgICBlbHNlIGlmIChwYXRoLmhhc0lubGluZURhdGE8UXVhZEN1
cnZlRGF0YT4oKSkKKyAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dDo6U3Ryb2tlUXVhZEN1cnZlKHsgcGF0aC5pbmxpbmVEYXRhPFF1YWRDdXJ2ZURhdGE+KCkg
fSkpOworICAgICAgICBlbHNlIGlmIChwYXRoLmhhc0lubGluZURhdGE8QmV6aWVyQ3VydmVEYXRh
PigpKQorICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpT
dHJva2VCZXppZXJDdXJ2ZSh7IHBhdGguaW5saW5lRGF0YTxCZXppZXJDdXJ2ZURhdGE+KCkgfSkp
OworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9E
QVRBKQorICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6U3Ryb2tlUGF0
aCh7IHBhdGggfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpzdHJv
a2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5n
ZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dDo6U3Ryb2tlRWxsaXBzZSh7IHJlY3QgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNz
Q29udGV4dFByb3h5OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGFw
cGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0OjpDbGVhclJlY3QoeyByZWN0IH0pKTsKK30KKworI2lmIFVTRShD
RykKKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6YXBwbHlTdHJva2VQYXR0ZXJu
KCkKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6QXBwbHlTdHJva2VQYXR0ZXJuKHsgfSkp
OworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjphcHBseUZpbGxQYXR0ZXJu
KCkKK3sKKyAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6QXBwbHlGaWxsUGF0dGVybih7IH0pKTsK
K30KKworI2VuZGlmIC8vIFVTRShDRykKKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94
eTo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgY3VycmVudFN0YXRlKCkuY2xp
cEJvdW5kcy5pbnRlcnNlY3QocmVjdCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0OjpDbGlwKHsgcmVjdCB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0UHJveHk6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6Q2xpcE91dCh7IHJlY3QgfSkpOworfQorCit2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgp
Cit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0OjpDbGlwT3V0VG9Q
YXRoKHsgcGF0aCB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OmNs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQoreworICAgIGN1cnJl
bnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkNsaXBQYXRoKHsgcGF0
aCwgd2luZFJ1bGUgfSkpOworfQorCitJbnRSZWN0IFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5
OjpjbGlwQm91bmRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjdXJy
ZW50U3RhdGUoKS5jbGlwQm91bmRzKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQ
cm94eTo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0KQoreworICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+cmVjb3JkSW1h
Z2VCdWZmZXJVc2UoaW1hZ2VCdWZmZXIpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dDo6Q2xpcFRvSW1hZ2VCdWZmZXIoeyBpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QgfSkpOworfQorCitHcmFwaGljc0NvbnRleHQ6OkNs
aXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6Y2xp
cFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0Nv
bnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pCit7CisgICAgYXV0byBpbml0aWFsQ2xpcCA9IEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RpbmF0aW9uLnNpemUoKSk7CisKKyAgICAvLyBUaGUg
aW5pdGlhbCBDVE0gbWF0Y2hlcyBJbWFnZUJ1ZmZlcidzIGluaXRpYWwgQ1RNLgorICAgIEFmZmlu
ZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5
SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3IodHJhbnNmb3Jt
LnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOworICAgIGF1dG8gc2NhbGVkU2l6ZSA9IGV4
cGFuZGVkSW50U2l6ZShkZXN0aW5hdGlvbi5zaXplKCkgKiBzY2FsZUZhY3Rvcik7CisgICAgQWZm
aW5lVHJhbnNmb3JtIGluaXRpYWxDVE07CisgICAgaW5pdGlhbENUTS5zY2FsZSgxLCAtMSk7Cisg
ICAgaW5pdGlhbENUTS50cmFuc2xhdGUoMCwgLXNjYWxlZFNpemUuaGVpZ2h0KCkpOworICAgIGlu
aXRpYWxDVE0uc2NhbGUoc2NhbGVkU2l6ZSAvIGRlc3RpbmF0aW9uLnNpemUoKSk7CisKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkJlZ2luQ2xpcFRvRHJhd2luZ0Nv
bW1hbmRzKHsgZGVzdGluYXRpb24sIGNvbG9yU3BhY2UgfSkpOworICAgIHsKKyAgICAgICAgUmVt
b3RlR3JhcGhpY3NDb250ZXh0UHJveHkgbmVzdGVkQ29udGV4dCgqdGhpcywgaW5pdGlhbENsaXAs
IGluaXRpYWxDVE0pOworICAgICAgICBkcmF3aW5nRnVuY3Rpb24obmVzdGVkQ29udGV4dCk7Cisg
ICAgfQorICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6RW5kQ2xpcFRv
RHJhd2luZ0NvbW1hbmRzKHsgZGVzdGluYXRpb24gfSkpOworCisgICAgcmV0dXJuIENsaXBUb0Ry
YXdpbmdDb21tYW5kc1Jlc3VsdDo6U3VjY2VzczsKK30KKworI2lmIEVOQUJMRShWSURFTykKKwor
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlh
UGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit7CisgICAgaWYg
KHBsYXllci5pZGVudGlmaWVyKCkpCisgICAgICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dDo6UGFpbnRGcmFtZUZvck1lZGlhKHsgcGxheWVyLCBkZXN0aW5hdGlvbiB9KSk7
CisgICAgZWxzZQorICAgICAgICBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShw
bGF5ZXIsIGRlc3RpbmF0aW9uKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShWSURFTykKKwordm9p
ZCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvcikKK3sKKyAgICAvLyBGSVhNRTogdGhpcyBjaGFuZ2VzIHRoZSBi
YXNlQ1RNLCB3aGljaCB3aWxsIGludmFsaWRhdGUgYWxsIG9mIG91ciBjYWNoZWQgZXh0ZW50cy4K
KyAgICAvLyBBc3NlcnQgdGhhdCBpdCdzIG9ubHkgY2FsbGVkIGVhcmx5IG9uPworICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcih7
IGRldmljZVNjYWxlRmFjdG9yIH0pKTsKK30KKworRmxvYXRSZWN0IFJlbW90ZUdyYXBoaWNzQ29u
dGV4dFByb3h5Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3Jh
cGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCit7CisgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0
aCBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eS4iKTsKKyAgICByZXR1cm4gcmVjdDsKK30KKwor
Ly8gRklYTUU6IHNoYXJlIHdpdGggU2hhZG93RGF0YQorc3RhdGljIGlubGluZSBmbG9hdCBzaGFk
b3dQYWludGluZ0V4dGVudChmbG9hdCBibHVyUmFkaXVzKQoreworICAgIC8vIEJsdXJyaW5nIHVz
ZXMgYSBHYXVzc2lhbiBmdW5jdGlvbiB3aG9zZSBzdGQuIGRldmlhdGlvbiBpcyBtX3JhZGl1cy8y
LCBhbmQgd2hpY2ggaW4gdGhlb3J5CisgICAgLy8gZXh0ZW5kcyB0byBpbmZpbml0eS4gSW4gOC1i
aXQgY29udGV4dHMsIGhvd2V2ZXIsIHJvdW5kaW5nIGNhdXNlcyB0aGUgZWZmZWN0IHRvIGJlY29t
ZQorICAgIC8vIHVuZGV0ZWN0YWJsZSBhdCBhcm91bmQgMS40eCB0aGUgcmFkaXVzLgorICAgIGNv
bnN0IGZsb2F0IHJhZGl1c0V4dGVudE11bHRpcGxpZXIgPSAxLjQ7CisgICAgcmV0dXJuIGNlaWxm
KGJsdXJSYWRpdXMgKiByYWRpdXNFeHRlbnRNdWx0aXBsaWVyKTsKK30KKworRmxvYXRSZWN0IFJl
bW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxv
YXRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEZsb2F0UmVjdCBib3VuZHMgPSByZWN0OworICAg
IGNvbnN0IENvbnRleHRTdGF0ZSYgc3RhdGUgPSBjdXJyZW50U3RhdGUoKTsKKworICAgIEZsb2F0
U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgZmxvYXQgc2hhZG93UmFkaXVzOworICAgIENvbG9yIHNo
YWRvd0NvbG9yOworICAgIGlmIChnZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMs
IHNoYWRvd0NvbG9yKSkgeworICAgICAgICBGbG9hdFJlY3Qgc2hhZG93RXh0ZW50ID0gYm91bmRz
OworICAgICAgICBzaGFkb3dFeHRlbnQubW92ZShzaGFkb3dPZmZzZXQpOworICAgICAgICBzaGFk
b3dFeHRlbnQuaW5mbGF0ZShzaGFkb3dQYWludGluZ0V4dGVudChzaGFkb3dSYWRpdXMpKTsKKyAg
ICAgICAgYm91bmRzLnVuaXRlKHNoYWRvd0V4dGVudCk7CisgICAgfQorCisgICAgRmxvYXRSZWN0
IGNsaXBwZWRFeHRlbnQgPSBpbnRlcnNlY3Rpb24oc3RhdGUuY2xpcEJvdW5kcywgYm91bmRzKTsK
KyAgICByZXR1cm4gc3RhdGUuY3RtLm1hcFJlY3QoY2xpcHBlZEV4dGVudCk7Cit9CisKK2NvbnN0
IFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpDb250ZXh0U3RhdGUmIFJlbW90ZUdyYXBoaWNz
Q29udGV4dFByb3h5OjpjdXJyZW50U3RhdGUoKSBjb25zdAoreworICAgIEFTU0VSVChtX3N0YXRl
U3RhY2suc2l6ZSgpKTsKKyAgICByZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKK30KKworUmVt
b3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OkNvbnRleHRTdGF0ZSYgUmVtb3RlR3JhcGhpY3NDb250
ZXh0UHJveHk6OmN1cnJlbnRTdGF0ZSgpCit7CisgICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXpl
KCkpOworICAgIHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgpOworfQorCitjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIFJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpjdG0oKSBjb25zdAoreworICAg
IHJldHVybiBjdXJyZW50U3RhdGUoKS5jdG07Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0UHJveHk6OmZsdXNoQ29udGV4dChXZWJDb3JlOjpGbHVzaElkZW50aWZpZXIgaWRlbnRpZmll
cikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHQ6OkZsdXNoQ29u
dGV4dCh7IGlkZW50aWZpZXIgfSkpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dFBy
b3h5OjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQoreworICAgIGN0
bS50cmFuc2xhdGUoeCwgeSk7CisgICAgY2xpcEJvdW5kcy5tb3ZlKC14LCAteSk7Cit9CisKK3Zv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHk6OkNvbnRleHRTdGF0ZTo6cm90YXRlKGZsb2F0
IGFuZ2xlSW5SYWRpYW5zKQoreworICAgIGRvdWJsZSBhbmdsZUluRGVncmVlcyA9IHJhZDJkZWco
c3RhdGljX2Nhc3Q8ZG91YmxlPihhbmdsZUluUmFkaWFucykpOworICAgIGN0bS5yb3RhdGUoYW5n
bGVJbkRlZ3JlZXMpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uOworICAgIHJvdGF0
aW9uLnJvdGF0ZShhbmdsZUluRGVncmVlcyk7CisKKyAgICBpZiAoc3RkOjpvcHRpb25hbDxBZmZp
bmVUcmFuc2Zvcm0+IGludmVyc2UgPSByb3RhdGlvbi5pbnZlcnNlKCkpCisgICAgICAgIGNsaXBC
b3VuZHMgPSBpbnZlcnNlLnZhbHVlKCkubWFwUmVjdChjbGlwQm91bmRzKTsKK30KKwordm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eTo6Q29udGV4dFN0YXRlOjpzY2FsZShjb25zdCBGbG9h
dFNpemUmIHNpemUpCit7CisgICAgY3RtLnNjYWxlKHNpemUpOworICAgIGNsaXBCb3VuZHMuc2Nh
bGUoMSAvIHNpemUud2lkdGgoKSwgMSAvIHNpemUuaGVpZ2h0KCkpOworfQorCit2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dFByb3h5OjpDb250ZXh0U3RhdGU6OnNldENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIG1hdHJpeCkKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4g
aW52ZXJzZVRyYW5zZm9ybUZvckNsaXBCb3VuZHM7CisgICAgaWYgKGF1dG8gb3JpZ2luYWxDVE1J
bnZlcnNlID0gY3RtLmludmVyc2UoKSkKKyAgICAgICAgaW52ZXJzZVRyYW5zZm9ybUZvckNsaXBC
b3VuZHMgPSBvcmlnaW5hbENUTUludmVyc2UtPm11bHRpcGx5KG1hdHJpeCkuaW52ZXJzZSgpOwor
CisgICAgY3RtID0gbWF0cml4OworCisgICAgaWYgKGludmVyc2VUcmFuc2Zvcm1Gb3JDbGlwQm91
bmRzKQorICAgICAgICBjbGlwQm91bmRzID0gaW52ZXJzZVRyYW5zZm9ybUZvckNsaXBCb3VuZHMt
Pm1hcFJlY3QoY2xpcEJvdW5kcyk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJv
eHk6OkNvbnRleHRTdGF0ZTo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4
KQoreworICAgIGN0bSAqPSBtYXRyaXg7CisKKyAgICBpZiAoc3RkOjpvcHRpb25hbDxBZmZpbmVU
cmFuc2Zvcm0+IGludmVyc2UgPSBtYXRyaXguaW52ZXJzZSgpKQorICAgICAgICBjbGlwQm91bmRz
ID0gaW52ZXJzZS52YWx1ZSgpLm1hcFJlY3QoY2xpcEJvdW5kcyk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHkuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43MzEzNGJkNGJjOTQ4YjUwMmZkY2UyMzk0MjkzOGUzMTA5ZjJlNzA3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRQcm94eS5oCkBAIC0wLDAgKzEsMjEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0RyYXdHbHlwaHNSZWNvcmRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTsKKworY2xhc3MgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0UHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IHsK
K3B1YmxpYzoKKyAgICBSZW1vdGVHcmFwaGljc0NvbnRleHRQcm94eShXZWJDb3JlOjpJbWFnZUJ1
ZmZlciYsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzID0gV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7CisgICAgflJl
bW90ZUdyYXBoaWNzQ29udGV4dFByb3h5KCkgeyB9CisKKyAgICB2b2lkIGdldFBpeGVsQnVmZmVy
KGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHNvdXJjZVJlY3QpOworICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29u
c3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOworCisgICAgdm9pZCByZXNldE5lZWRzRmx1c2goKSB7
IG1fbmVlZHNGbHVzaCA9IGZhbHNlOyB9CisgICAgYm9vbCBuZWVkc0ZsdXNoKCkgY29uc3QgeyBy
ZXR1cm4gbV9uZWVkc0ZsdXNoOyB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dChXZWJDb3JlOjpG
bHVzaElkZW50aWZpZXIpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg
ICAgdm9pZCBzZW5kKFQmJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgbV9uZWVkc0ZsdXNoID0g
dHJ1ZTsKKyAgICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zZW5kVG9TdHJlYW0oV1RGTW92ZSht
ZXNzYWdlKSwgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOworICAgIH0KKworICAgIGZy
aWVuZCBjbGFzcyBEcmF3R2x5cGhzUmVjb3JkZXI7CisgICAgUmVtb3RlR3JhcGhpY3NDb250ZXh0
UHJveHkoUmVtb3RlR3JhcGhpY3NDb250ZXh0UHJveHkmIHBhcmVudCwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiBp
bml0aWFsQ1RNKTsKKworICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICAvLyBGSVhNRTogTWF5YmUgcmVtb3ZlIHRoaXM/CisgICAg
Ym9vbCBjYW5EcmF3SW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW1hZ2VCdWZmZXImKSBjb25z
dDsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOworCisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQp
CisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQorICAgIGJvb2wg
aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9p
ZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbCB7IH0KKyNlbmRpZgorCisgICAg
dm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Qm
LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
KyAgICB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBib29s
LCBib29sLCBXZWJDb3JlOjpTdHJva2VTdHlsZSkgZmluYWwgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQorCisgICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
KSBmaW5hbDsKKworICAgIHZvaWQgc2V0TGluZUNhcChXZWJDb3JlOjpMaW5lQ2FwKSBmaW5hbDsK
KyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGZsb2F0IGRh
c2hPZmZzZXQpIGZpbmFsOworICAgIHZvaWQgc2V0TGluZUpvaW4oV2ViQ29yZTo6TGluZUpvaW4p
IGZpbmFsOworICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisKKyAgICB2b2lk
IGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmls
bFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBm
aW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNv
cmU6OkdyYWRpZW50JikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJh
dG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpIGZpbmFsOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYs
IFdlYkNvcmU6OkJsZW5kTW9kZSkgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7CisgICAgdm9pZCBm
aWxsRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHN0
cm9rZVJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSBmaW5h
bDsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOworICAg
IHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKKyAg
ICB2b2lkIGNsZWFyUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKKworI2lm
IFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkg
ZmluYWw7CisgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisjZW5kaWYKKworICAg
IHZvaWQgZHJhd0dseXBocyhjb25zdCBXZWJDb3JlOjpGb250JiwgY29uc3QgV2ViQ29yZTo6R2x5
cGhCdWZmZXJHbHlwaCosIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIFdl
YkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdHbHlwaHNBbmRD
YWNoZUZvbnQoY29uc3QgV2ViQ29yZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVy
R2x5cGgqLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3Vu
dCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIFdlYkNvcmU6OkZvbnRT
bW9vdGhpbmdNb2RlKSBmaW5hbDsKKworICAgIHZvaWQgYXBwZW5kRHJhd0dseXBoc0l0ZW1XaXRo
Q2FjaGVkRm9udChjb25zdCBXZWJDb3JlOjpGb250JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNv
dW50LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgV2ViQ29yZTo6Rm9u
dFNtb290aGluZ01vZGUpOworCisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1h
Z2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09w
dGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpOYXRpdmVJ
bWFnZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBk
cmF3UGF0dGVybihXZWJDb3JlOjpOYXRpdmVJbWFnZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmlu
YWw7CisKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0
IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIGZpbmFsOworICAgIHZv
aWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywg
Ym9vbCBkb3VibGVMaW5lcywgV2ViQ29yZTo6U3Ryb2tlU3R5bGUpIGZpbmFsOworICAgIHZvaWQg
ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3RWxsaXBz
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd1BhdGgo
Y29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOworCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNv
bnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBXZWJD
b3JlOjpDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8
V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJikgZmluYWw7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYg
bmVlZHNSZWRyYXcsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CisgICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVP
ZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOwor
I2VuZGlmCisKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5h
bDsKKworICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOworICAgIHZv
aWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSBmaW5hbDsKKyAgICB2b2lkIHNjYWxlKGNv
bnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpIGZpbmFsOworICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0
IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAgIHZvaWQgc2V0Q1RNKGNvbnN0
IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAgIFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybSBnZXRDVE0oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2Nh
bGUpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsK
KworICAgIHZvaWQgY2xpcChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2
b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBj
bGlwT3V0KGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBQYXRoKGNv
bnN0IFdlYkNvcmU6OlBhdGgmLCBXZWJDb3JlOjpXaW5kUnVsZSkgZmluYWw7CisgICAgV2ViQ29y
ZTo6SW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBjbGlwVG9JbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IGZpbmFsOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1h
bmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5j
dGlvbjx2b2lkKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpPiYmKSBmaW5hbDsKKworI2lmIEVO
QUJMRShWSURFTykKKyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3JlOjpNZWRpYVBs
YXllciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOworI2Vu
ZGlmCisKKyAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworCisg
ICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIGZpbmFsOworCisgICAg
dm9pZCByZWNvcmROYXRpdmVJbWFnZVVzZShXZWJDb3JlOjpOYXRpdmVJbWFnZSYpOworCisgICAg
dm9pZCBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIHZvaWQgYXBwZW5k
U3RhdGVDaGFuZ2VJdGVtKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdl
JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworCisg
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IGV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKSBjb25zdDsKKworICAgIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bSYgY3RtKCkgY29uc3Q7CisKKyAgICBzdHJ1Y3QgQ29udGV4dFN0YXRlIHsKKyAgICAgICAgV2Vi
Q29yZTo6QWZmaW5lVHJhbnNmb3JtIGN0bTsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNs
aXBCb3VuZHM7CisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHN0
YXRlQ2hhbmdlOworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSBsYXN0RHJh
d2luZ1N0YXRlOworCisgICAgICAgIENvbnRleHRTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXApCisgICAgICAgICAgICA6IGN0
bSh0cmFuc2Zvcm0pCisgICAgICAgICAgICAsIGNsaXBCb3VuZHMoY2xpcCkKKyAgICAgICAgICAg
ICwgbGFzdERyYXdpbmdTdGF0ZShzdGF0ZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgQ29udGV4dFN0YXRlIGNsb25lRm9yU2F2ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIENvbnRleHRTdGF0ZSBzdGF0ZShsYXN0RHJhd2luZ1N0YXRlLCBjdG0sIGNsaXBCb3VuZHMp
OworICAgICAgICAgICAgc3RhdGUuc3RhdGVDaGFuZ2UgPSBzdGF0ZUNoYW5nZTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0ZTsKKyAgICAgICAgfQorCisgICAgICAgIENvbnRleHRTdGF0ZSBjbG9u
ZUZvclRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgYXV0
byBzdGF0ZSA9IGNsb25lRm9yU2F2ZSgpOworICAgICAgICAgICAgc3RhdGUubGFzdERyYXdpbmdT
dGF0ZS5hbHBoYSA9IDE7CisgICAgICAgICAgICByZXR1cm4gc3RhdGU7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKKyAgICAgICAgdm9pZCBy
b3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpOworICAgICAgICB2b2lkIHNjYWxlKGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYpOworICAgICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBXZWJDb3Jl
OjpBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICAgICAgdm9pZCBzZXRDVE0oY29uc3QgV2ViQ29yZTo6
QWZmaW5lVHJhbnNmb3JtJik7CisgICAgfTsKKworICAgIGNvbnN0IENvbnRleHRTdGF0ZSYgY3Vy
cmVudFN0YXRlKCkgY29uc3Q7CisgICAgQ29udGV4dFN0YXRlJiBjdXJyZW50U3RhdGUoKTsKKwor
ICAgIFZlY3RvcjxDb250ZXh0U3RhdGUsIDQ+IG1fc3RhdGVTdGFjazsKKyAgICBXZWJDb3JlOjpE
cmF3R2x5cGhzUmVjb3JkZXIgbV9kcmF3R2x5cGhzUmVjb3JkZXI7CisgICAgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIG1fZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyOwor
ICAgIFdlYWtQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7CisgICAgV2Vha1B0cjxSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IG1fcmVuZGVyaW5nQmFja2VuZDsKKyAgICBib29sIG1f
aXNOZXN0ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9uZWVkc0ZsdXNoIHsgZmFsc2UgfTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAppbmRl
eCAyN2JjZDAwNTQ1MDk1OGU4MDIxMjMzMGMxZTg5NmUzYzg5MTczNGZiLi40YmM4NjNmZDM1MjMx
NmZmMzA0ZjFiYmYyMzk0YTYyNTNlODI4OGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
aApAQCAtMjksMTMgKzI5LDEzIEBACiAKICNpbmNsdWRlICJFbmNvZGVyLmgiCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgorI2luY2x1ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dFByb3h5LmgiCisjaW5j
bHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9Db25jcmV0ZUltYWdlQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9E
aXNwbGF5TGlzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvRGlzcGxheUxpc3RSZWNvcmRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RS
ZXBsYXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgogI2luY2x1
ZGUgPHd0Zi9Db25kaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgpAQCAtNDcsMTIgKzQ3
LDExIEBAIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBC
YWNrZW5kVHlwZT4gY2xhc3MgVGhyZWFkU2FmZVJlbW90ZUltYWdlQnVmZmVyRmx1c2hlcjsKIAog
dGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+Ci1jbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5IDogcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlw
ZT4sIHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkRlbGVnYXRlLCBwdWJs
aWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50IHsKLSAgICB1
c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
bWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47Ci0gICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VC
dWZmZXI6Om1fYmFja2VuZDsKLSAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6
bV9kcmF3aW5nQ29udGV4dDsKLSAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6
bV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7Ci0gICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0
SW1hZ2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZTsKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJv
eHkgOiBwdWJsaWMgV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4gewor
ICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyID0gV2ViQ29yZTo6Q29uY3JldGVJbWFn
ZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6
Om1fYmFja2VuZDsKKyAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6bV9yZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXI7CisgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6
OnJlc29sdXRpb25TY2FsZTsKIAogcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8UmVtb3RlSW1h
Z2VCdWZmZXJQcm94eT4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
IGNvbG9yU3BhY2UsIFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkmIHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKQEAgLTY2LDcg
KzY1LDcgQEAgcHVibGljOgogICAgIH5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCkKICAgICB7CiAg
ICAgICAgIGlmICghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgfHwgbV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHktPmlzR1BVUHJvY2Vzc0Nvbm5lY3Rpb25DbG9zZWQoKSkgewotICAg
ICAgICAgICAgY2xlYXJEaXNwbGF5TGlzdCgpOworICAgICAgICAgICAgbV9kcmF3aW5nQ29udGV4
dC5yZXNldE5lZWRzRmx1c2goKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBA
IC04MCw5ICs3OSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y3JlYXRl
SW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKCk7CiAgICAgfQogCi0gICAgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZsdXNoSWRlbnRpZmllciBsYXN0U2VudEZsdXNoSWRlbnRpZmllcigpIGNvbnN0IHsg
cmV0dXJuIG1fc2VudEZsdXNoSWRlbnRpZmllcjsgfQorICAgIFdlYkNvcmU6OkZsdXNoSWRlbnRp
ZmllciBsYXN0U2VudEZsdXNoSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VudEZsdXNo
SWRlbnRpZmllcjsgfQogCi0gICAgdm9pZCB3YWl0Rm9yRGlkRmx1c2hPblNlY29uZGFyeVRocmVh
ZChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1c2hJZGVudGlmaWVyIHRhcmdldEZsdXNoSWRlbnRp
ZmllcikKKyAgICB2b2lkIHdhaXRGb3JEaWRGbHVzaE9uU2Vjb25kYXJ5VGhyZWFkKFdlYkNvcmU6
OkZsdXNoSWRlbnRpZmllciB0YXJnZXRGbHVzaElkZW50aWZpZXIpCiAgICAgewogICAgICAgICBB
U1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CiAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3JlY2Vp
dmVkRmx1c2hJZGVudGlmaWVyTG9jayB9OwpAQCAtOTgsMTkgKzk3LDE0IEBAIHB1YmxpYzoKIAog
cHJvdGVjdGVkOgogICAgIFJlbW90ZUltYWdlQnVmZmVyUHJveHkoY29uc3QgV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjpQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkmIHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKLSAgICAgICAgOiBCYXNl
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihwYXJhbWV0ZXJzLCB0aGlzKQorICAgICAgICA6IEJhc2VD
b25jcmV0ZUltYWdlQnVmZmVyKHBhcmFtZXRlcnMpCiAgICAgICAgICwgbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkobWFrZVdlYWtQdHIocmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkK
KyAgICAgICAgLCBtX2RyYXdpbmdDb250ZXh0KCp0aGlzLCByZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHksIHsgeyB9LCBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemUoKSB9LCBC
YXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6YmFzZVRyYW5zZm9ybSgpKQogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKICAgICAgICAgbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpLmNhY2hlSW1h
Z2VCdWZmZXIoKnRoaXMpOwotCi0gICAgICAgIG1fZHJhd2luZ0NvbnRleHQuZGlzcGxheUxpc3Qo
KS5zZXRJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCh0aGlzKTsKLSAgICAgICAgbV9kcmF3aW5nQ29u
dGV4dC5kaXNwbGF5TGlzdCgpLnNldEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50KG51bGxwdHIpOwot
ICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuc2V0VHJhY2tzRHJhd2luZ0l0
ZW1FeHRlbnRzKGZhbHNlKTsKICAgICB9CiAKLSAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlcjo6cmVuZGVyaW5nTW9kZSgpOyB9Ci0KICAgICAvLyBJdCBpcyBzYWZlIHRvIGFjY2VzcyBt
X3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyIGZyb20gdGhlIG1haW4gdGhyZWFkIHdpdGhvdXQgbG9j
a2luZyBzaW5jZSBpdAogICAgIC8vIG9ubHkgZ2V0cyBtb2RpZmllZCBvbiB0aGUgbWFpbiB0aHJl
YWQuCiAgICAgYm9vbCBoYXNQZW5kaW5nRmx1c2goKSBjb25zdCBXVEZfSUdOT1JFU19USFJFQURf
U0FGRVRZX0FOQUxZU0lTCkBAIC0xMTksNyArMTEzLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBy
ZXR1cm4gbV9zZW50Rmx1c2hJZGVudGlmaWVyICE9IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7
CiAgICAgfQogCi0gICAgdm9pZCBkaWRGbHVzaChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1c2hJ
ZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikgZmluYWwKKyAgICB2b2lkIGRpZEZsdXNoKFdlYkNv
cmU6OkZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpIGZpbmFsCiAgICAgewogICAgICAg
ICBBU1NFUlQoaXNNYWluUnVuTG9vcCgpKTsKICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fcmVj
ZWl2ZWRGbHVzaElkZW50aWZpZXJMb2NrIH07CkBAIC0yMTksNyArMjEzLDcgQEAgcHJvdGVjdGVk
OgogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgICAgICBhdXRvJiBtdXRh
YmxlVGhpcyA9IGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSY+KCp0aGlzKTsKLSAg
ICAgICAgbXV0YWJsZVRoaXMubV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLmdldFBpeGVsQnVm
ZmVyKGRlc3RpbmF0aW9uRm9ybWF0LCBzcmNSZWN0KTsKKyAgICAgICAgbXV0YWJsZVRoaXMubV9k
cmF3aW5nQ29udGV4dC5nZXRQaXhlbEJ1ZmZlcihkZXN0aW5hdGlvbkZvcm1hdCwgc3JjUmVjdCk7
CiAgICAgICAgIG11dGFibGVUaGlzLmZsdXNoRHJhd2luZ0NvbnRleHRBc3luYygpOwogCiAgICAg
ICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+d2FpdEZvckdldFBpeGVsQnVm
ZmVyVG9Db21wbGV0ZSh0aW1lb3V0KSkKQEAgLTIyOSwxMiArMjIzLDMxIEBAIHByb3RlY3RlZDoK
ICAgICAgICAgcmV0dXJuIHBpeGVsQnVmZmVyOwogICAgIH0KIAorICAgIHZvaWQgY2xlYXJCYWNr
ZW5kKCkgZmluYWwKKyAgICB7CisgICAgICAgIG1fZHJhd2luZ0NvbnRleHQucmVzZXROZWVkc0Zs
dXNoKCk7CisgICAgICAgIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpjbGVhckJhY2tlbmQoKTsK
KyAgICB9CisKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBm
aW5hbAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eSo+KHRoaXMpLT5tX2RyYXdpbmdDb250ZXh0OworICAgIH0KKworICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSBmaW5hbAorICAgIHsKKyAgICAgICAgcmV0
dXJuICZtX2RyYXdpbmdDb250ZXh0OworICAgIH0KKwogICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIo
Y29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9
LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQgPSBXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBmaW5hbAogICAgIHsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCisgICAgICAg
ICAgICByZXR1cm47CisKICAgICAgICAgLy8gVGhlIG1hdGggaW5zaWRlIFBpeGVsQnVmZmVyOjpj
cmVhdGUoKSBkb2Vzbid0IGFncmVlIHdpdGggdGhlIG1hdGggaW5zaWRlIEltYWdlQnVmZmVyQmFj
a2VuZDo6cHV0UGl4ZWxCdWZmZXIoKSBhYm91dCBob3cgbV9yZXNvbHV0aW9uU2NhbGUgaW50ZXJh
Y3RzIHdpdGggdGhlIGRhdGEgaW4gdGhlIEltYWdlQnVmZmVyLgogICAgICAgICAvLyBUaGlzIG1l
YW5zIHRoYXQgcHV0UGl4ZWxCdWZmZXIoKSBpcyBvbmx5IGNhbGxlZCB3aGVuIHJlc29sdXRpb25T
Y2FsZSgpID09IDEuCiAgICAgICAgIEFTU0VSVChyZXNvbHV0aW9uU2NhbGUoKSA9PSAxKTsKLSAg
ICAgICAgbV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVm
ZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQpOworICAgICAgICBtX2RyYXdpbmdD
b250ZXh0LnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRl
c3RGb3JtYXQpOwogICAgIH0KIAogICAgIGJvb2wgcHJlZmVyc1ByZXBhcmF0aW9uRm9yRGlzcGxh
eSgpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KQEAgLTI2MCwxMDQgKzI3Myw0NCBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkp
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmICghbV9kcmF3aW5nQ29udGV4dC5k
aXNwbGF5TGlzdCgpLmlzRW1wdHkoKSB8fCAhaGFzUGVuZGluZ0ZsdXNoKCkpIHsKLSAgICAgICAg
ICAgIG1fc2VudEZsdXNoSWRlbnRpZmllciA9IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaElk
ZW50aWZpZXI6OmdlbmVyYXRlKCk7Ci0gICAgICAgICAgICBtX2RyYXdpbmdDb250ZXh0LnJlY29y
ZGVyKCkuZmx1c2hDb250ZXh0KG1fc2VudEZsdXNoSWRlbnRpZmllcik7CisgICAgICAgIGlmICht
X2RyYXdpbmdDb250ZXh0Lm5lZWRzRmx1c2goKSB8fCAhaGFzUGVuZGluZ0ZsdXNoKCkpIHsKKyAg
ICAgICAgICAgIG1fc2VudEZsdXNoSWRlbnRpZmllciA9IFdlYkNvcmU6OkZsdXNoSWRlbnRpZmll
cjo6Z2VuZXJhdGUoKTsKKyAgICAgICAgICAgIG1fZHJhd2luZ0NvbnRleHQuZmx1c2hDb250ZXh0
KG1fc2VudEZsdXNoSWRlbnRpZmllcik7CiAgICAgICAgIH0KIAogICAgICAgICBtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS0+c2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7
Ci0gICAgICAgIGNsZWFyRGlzcGxheUxpc3QoKTsKKyAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5y
ZXNldE5lZWRzRmx1c2goKTsKICAgICB9CiAKLSAgICB2b2lkIHJlY29yZE5hdGl2ZUltYWdlVXNl
KFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiBpbWFnZSkgZmluYWwKKyAgICB2b2lkIHJlY29yZE5hdGl2
ZUltYWdlVXNlKFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiBpbWFnZSkKICAgICB7CiAgICAgICAgIGlm
IChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKICAgICAgICAgICAgIG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LT5yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkoKS5yZWNvcmROYXRp
dmVJbWFnZVVzZShpbWFnZSk7CiAgICAgfQogCi0gICAgYm9vbCBpc0NhY2hlZEltYWdlQnVmZmVy
KGNvbnN0IFdlYkNvcmU6OkltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikgY29uc3QgZmluYWwKLSAg
ICB7Ci0gICAgICAgIGlmICghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gY2FjaGVkSW1hZ2VCdWZmZXIgPSBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5KCkuY2Fj
aGVkSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkp
OwotICAgICAgICBBU1NFUlQoIWNhY2hlZEltYWdlQnVmZmVyIHx8IGNhY2hlZEltYWdlQnVmZmVy
ID09ICZpbWFnZUJ1ZmZlcik7Ci0gICAgICAgIHJldHVybiBjYWNoZWRJbWFnZUJ1ZmZlcjsKLSAg
ICB9Ci0KLSAgICB2b2lkIGNoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIG5leHRJbWFnZUJ1ZmZlcikgZmluYWwKLSAgICB7Ci0g
ICAgICAgIGJvb2wgd2FzRW1wdHkgPSBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuaXNF
bXB0eSgpOwotICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkudGVtcGxhdGUg
YXBwZW5kPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9u
SW1hZ2VCdWZmZXI+KG5leHRJbWFnZUJ1ZmZlcik7Ci0gICAgICAgIGlmICh3YXNFbXB0eSkKLSAg
ICAgICAgICAgIGNsZWFyRGlzcGxheUxpc3QoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHByZXBhcmVU
b0FwcGVuZERpc3BsYXlMaXN0SXRlbXMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJI
YW5kbGUmJiBoYW5kbGUpIGZpbmFsCi0gICAgewotICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRp
c3BsYXlMaXN0KCkucHJlcGFyZVRvQXBwZW5kKFdURk1vdmUoaGFuZGxlKSk7Ci0gICAgfQotCi0g
ICAgdm9pZCBjbGVhckRpc3BsYXlMaXN0KCkKLSAgICB7Ci0gICAgICAgIG1fZHJhd2luZ0NvbnRl
eHQuZGlzcGxheUxpc3QoKS5jbGVhcigpOwotICAgIH0KLQotICAgIGJvb2wgY2FuQXBwZW5kSXRl
bU9mVHlwZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGUpIGZpbmFsCi0gICAgewotICAg
ICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHktPndpbGxBcHBlbmRJdGVtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBkaWRBcHBlbmREYXRhKGNvbnN0IFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlJiBoYW5kbGUsIHNpemVfdCBudW1i
ZXJPZkJ5dGVzLCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlkQ2hhbmdlSXRlbUJ1ZmZlciBkaWRD
aGFuZ2VJdGVtQnVmZmVyKSBmaW5hbAotICAgIHsKLSAgICAgICAgaWYgKExJS0VMWShtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCi0gICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS0+ZGlkQXBwZW5kRGF0YShoYW5kbGUsIG51bWJlck9mQnl0ZXMsIGRpZENoYW5n
ZUl0ZW1CdWZmZXIsIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHJlY29yZEZvbnRVc2UoV2ViQ29yZTo6Rm9udCYgZm9udCkgZmluYWwKKyAgICB2b2lk
IHJlY29yZEZvbnRVc2UoV2ViQ29yZTo6Rm9udCYgZm9udCkKICAgICB7CiAgICAgICAgIGlmICht
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKICAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LT5yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkoKS5yZWNvcmRGb250VXNl
KGZvbnQpOwogICAgIH0KIAotICAgIHZvaWQgcmVjb3JkSW1hZ2VCdWZmZXJVc2UoV2ViQ29yZTo6
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKSBmaW5hbAorICAgIHZvaWQgcmVjb3JkSW1hZ2VCdWZm
ZXJVc2UoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQogICAgIHsKICAgICAgICAg
aWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQogICAgICAgICAgICAgbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpLnJlY29yZElt
YWdlQnVmZmVyVXNlKGltYWdlQnVmZmVyKTsKICAgICB9CiAKLSAgICBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSBjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCBjYXBhY2l0eSkg
ZmluYWwKLSAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpKQotICAgICAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LT5jcmVhdGVJdGVtQnVmZmVyKGNhcGFjaXR5LCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cik7Ci0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07
Ci0gICAgfQotCi0gICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZW5jb2RlSXRlbU91
dE9mTGluZShjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3RJdGVtJiBpdGVt
KSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oY29uc3Qg
YXV0byYgZGlzcGxheUxpc3RJdGVtKSAtPiBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiB7
Ci0gICAgICAgICAgICB1c2luZyBEaXNwbGF5TGlzdEl0ZW1UeXBlID0gdHlwZW5hbWUgV1RGOjpS
ZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZShkaXNwbGF5TGlzdEl0ZW0pPjo6dHlwZTsKLSAg
ICAgICAgICAgIGlmIGNvbnN0ZXhwciAoIURpc3BsYXlMaXN0SXRlbVR5cGU6OmlzSW5saW5lSXRl
bSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmpl
Y3Q8RGlzcGxheUxpc3RJdGVtVHlwZT4oZGlzcGxheUxpc3RJdGVtKTsKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgfSwgaXRlbSk7Ci0gICAgfQotCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OlRocmVhZFNhZmVJbWFnZUJ1ZmZlckZsdXNoZXI+IGNyZWF0ZUZsdXNoZXIoKSBmaW5hbAogICAg
IHsKICAgICAgICAgcmV0dXJuIFdURjo6bWFrZVVuaXF1ZTxUaHJlYWRTYWZlUmVtb3RlSW1hZ2VC
dWZmZXJGbHVzaGVyPEJhY2tlbmRUeXBlPj4oKnRoaXMpOwogICAgIH0KIAotICAgIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGbHVzaElkZW50aWZpZXIgbV9zZW50Rmx1c2hJZGVudGlmaWVyOworICAg
IFdlYkNvcmU6OkZsdXNoSWRlbnRpZmllciBtX3NlbnRGbHVzaElkZW50aWZpZXI7CiAgICAgTG9j
ayBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyTG9jazsKICAgICBDb25kaXRpb24gbV9yZWNlaXZl
ZEZsdXNoSWRlbnRpZmllckNoYW5nZWRDb25kaXRpb247Ci0gICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZsdXNoSWRlbnRpZmllciBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyIFdURl9HVUFSREVE
X0JZX0xPQ0sobV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllckxvY2spOyAvLyBPbmx5IG1vZGlmaWVk
IG9uIHRoZSBtYWluIHRocmVhZCBidXQgbWF5IGdldCBxdWVyaWVkIG9uIGEgc2Vjb25kYXJ5IHRo
cmVhZC4KKyAgICBXZWJDb3JlOjpGbHVzaElkZW50aWZpZXIgbV9yZWNlaXZlZEZsdXNoSWRlbnRp
ZmllciBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXJMb2NrKTsg
Ly8gT25seSBtb2RpZmllZCBvbiB0aGUgbWFpbiB0aHJlYWQgYnV0IG1heSBnZXQgcXVlcmllZCBv
biBhIHNlY29uZGFyeSB0aHJlYWQuCiAgICAgV2Vha1B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk+IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OworICAgIFJlbW90ZUdyYXBoaWNz
Q29udGV4dFByb3h5IG1fZHJhd2luZ0NvbnRleHQ7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBC
YWNrZW5kVHlwZT4KQEAgLTM3Nyw3ICszMzAsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAg
UmVmPFJlbW90ZUltYWdlQnVmZmVyUHJveHk8QmFja2VuZFR5cGU+PiBtX2ltYWdlQnVmZmVyOwot
ICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaElkZW50aWZpZXIgbV90YXJnZXRGbHVzaElk
ZW50aWZpZXI7CisgICAgV2ViQ29yZTo6Rmx1c2hJZGVudGlmaWVyIG1fdGFyZ2V0Rmx1c2hJZGVu
dGlmaWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5jcHAKaW5kZXggZWM3OTM0MTA2YjExYjM2NmM3ODhjNTNiZDliMjQw
OTc5NjliZDlkOS4uYjRlNWVmZGIyYTQ2YmVkOWVjOGVmNGMwMzJlZmRlNzlhZDQyYTY3YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAtMjgsNyArMjgsNiBA
QAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi0jaW5jbHVkZSAiRGlzcGxheUxpc3RXcml0
ZXJIYW5kbGUuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5oIgpAQCAtNTIsNyArNTEsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZQogUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoV2ViUGFnZSYg
d2ViUGFnZSkKICAgICA6IG1fcGFyYW1ldGVycyB7CiAgICAgICAgIFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyOjpnZW5lcmF0ZSgpLAotICAgICAgICBJUEM6OlNlbWFwaG9yZSB7IH0sCiAgICAg
ICAgIHdlYlBhZ2Uud2ViUGFnZVByb3h5SWRlbnRpZmllcigpLAogICAgICAgICB3ZWJQYWdlLmlk
ZW50aWZpZXIoKQogICAgIH0KQEAgLTc3LDcgKzc1LDggQEAgR1BVUHJvY2Vzc0Nvbm5lY3Rpb24m
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24o
KQogICAgICAgICBhdXRvJiBncHVQcm9jZXNzQ29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCk7CiAgICAgICAgIGdwdVByb2Nlc3ND
b25uZWN0aW9uLmFkZENsaWVudCgqdGhpcyk7CiAgICAgICAgIGdwdVByb2Nlc3NDb25uZWN0aW9u
Lm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKCkudG9VSW50NjQoKSwgKnRoaXMpOwotICAgICAgICBncHVQcm9jZXNz
Q29ubmVjdGlvbi5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5nQmFja2VuZChtX3BhcmFtZXRlcnMpLCAwLCBJUEM6OlNl
bmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7Cisg
ICAgICAgIG1fc3RyZWFtQ29ubmVjdGlvbiA9IG1ha2VVbmlxdWU8SVBDOjpTdHJlYW1DbGllbnRD
b25uZWN0aW9uPihncHVQcm9jZXNzQ29ubmVjdGlvbi5jb25uZWN0aW9uKCksIDEgPDwgMjEpOwor
ICAgICAgICBncHVQcm9jZXNzQ29ubmVjdGlvbi5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5nQmFja2VuZChtX3BhcmFt
ZXRlcnMsIG1fc3RyZWFtQ29ubmVjdGlvbi0+c3RyZWFtQnVmZmVyKCkpLCAwLCBJUEM6OlNlbmRP
cHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CiAgICAg
ICAgIG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24gPSBtYWtlV2Vha1B0cihncHVQcm9jZXNzQ29ubmVj
dGlvbik7CiAgICAgfQogICAgIHJldHVybiAqbV9ncHVQcm9jZXNzQ29ubmVjdGlvbjsKQEAgLTkx
LDEyICs5MCw2IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpncHVQcm9jZXNz
Q29ubmVjdGlvbkRpZENsb3NlKEdQVVByb2Nlc3NDb25uZWN0CiAKICAgICBtX3JlbW90ZVJlc291
cmNlQ2FjaGVQcm94eS5yZW1vdGVSZXNvdXJjZUNhY2hlV2FzRGVzdHJveWVkKCk7CiAKLSAgICBt
X2lkZW50aWZpZXJzT2ZSZXVzYWJsZUhhbmRsZXMuY2xlYXIoKTsKLSAgICBtX3NoYXJlZERpc3Bs
YXlMaXN0SGFuZGxlcy5jbGVhcigpOwotICAgIG1fY3VycmVudERlc3RpbmF0aW9uSW1hZ2VCdWZm
ZXJJZGVudGlmaWVyID0gc3RkOjpudWxsb3B0OwotICAgIG1fZGVmZXJyZWRXYWtldXBNZXNzYWdl
QXJndW1lbnRzID0gc3RkOjpudWxsb3B0OwotICAgIG1fcmVtYWluaW5nSXRlbXNUb0FwcGVuZEJl
Zm9yZVNlbmRpbmdXYWtldXAgPSAwOwotCiAgICAgaWYgKG1fZGVzdHJveUdldFBpeGVsQnVmZmVy
U2hhcmVkTWVtb3J5VGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9kZXN0cm95R2V0UGl4ZWxC
dWZmZXJTaGFyZWRNZW1vcnlUaW1lci5zdG9wKCk7CiAgICAgbV9nZXRQaXhlbEJ1ZmZlclNlbWFw
aG9yZSA9IHN0ZDo6bnVsbG9wdDsKQEAgLTExOSw2ICsxMTIsNyBAQCB1aW50NjRfdCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QK
IAogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpEaWRSZWNlaXZlQmFja2VuZENyZWF0aW9u
UmVzdWx0IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckRpZENyZWF0ZUltYWdl
QnVmZmVyQmFja2VuZCgpCiB7CisgICAgc2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVk
KCk7CiAgICAgUmVmUHRyIGNvbm5lY3Rpb24gPSBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpOwog
ICAgIGlmICghY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2Fn
ZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6RGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNr
ZW5kPihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCAxX3MsIElQQzo6V2FpdEZvck9wdGlv
bjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKSkKICAgICAgICAgcmV0dXJu
IERpZFJlY2VpdmVCYWNrZW5kQ3JlYXRpb25SZXN1bHQ6OlRpbWVvdXRPcklQQ0ZhaWx1cmU7CkBA
IC0xMjcsMTMgKzEyMSwxNSBAQCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OkRpZFJlY2Vp
dmVCYWNrZW5kQ3JlYXRpb25SZXN1bHQgUmVtb3RlUmVuZGVyaW5nQmFjawogCiBib29sIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckRpZEZsdXNoKCkKIHsKKyAgICBzZW5kRGVm
ZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKICAgICBSZWZQdHIgY29ubmVjdGlvbiA9IG1l
c3NhZ2VTZW5kZXJDb25uZWN0aW9uKCk7CiAgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JB
bmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OkRpZEZsdXNoPihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCAxX3MsIElQQzo6V2Fp
dEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKIH0KIAog
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZVJlbW90ZUltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpDcmVhdGVJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5sb2dpY2FsU2l6
ZSgpLCBpbWFnZUJ1ZmZlci5yZW5kZXJpbmdNb2RlKCksIGltYWdlQnVmZmVyLnJlc29sdXRpb25T
Y2FsZSgpLCBpbWFnZUJ1ZmZlci5jb2xvclNwYWNlKCksIGltYWdlQnVmZmVyLnBpeGVsRm9ybWF0
KCksIGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKSwgcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVu
V2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIHNlbmRUb1N0cmVhbShNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6Q3JlYXRlSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIubG9naWNh
bFNpemUoKSwgaW1hZ2VCdWZmZXIucmVuZGVyaW5nTW9kZSgpLCBpbWFnZUJ1ZmZlci5yZXNvbHV0
aW9uU2NhbGUoKSwgaW1hZ2VCdWZmZXIuY29sb3JTcGFjZSgpLCBpbWFnZUJ1ZmZlci5waXhlbEZv
cm1hdCgpLCBpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSkpOworICAg
IHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwogfQogCiBSZWZQdHI8SW1hZ2VC
dWZmZXI+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBQ
aXhlbEZvcm1hdCBwaXhlbEZvcm1hdCkKQEAgLTE2Myw4ICsxNTksNiBAQCBSZWZQdHI8SW1hZ2VC
dWZmZXI+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRTaQogCiBTaGFyZWRNZW1vcnkqIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
c2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIoc2l6ZV90IGRhdGFTaXplLCBJUEM6OlRpbWVv
dXQgdGltZW91dCkKIHsKLSAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsK
LQogICAgIGJvb2wgbmVlZHNTaGFyZWRNZW1vcnkgPSAhbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1l
bW9yeSB8fCBkYXRhU2l6ZSA+IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlMZW5ndGg7CiAg
ICAgYm9vbCBuZWVkc1NlbWFwaG9yZSA9ICFtX2dldFBpeGVsQnVmZmVyU2VtYXBob3JlOwogCkBA
IC0xNzUsMTEgKzE2OSwxMSBAQCBTaGFyZWRNZW1vcnkqIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6c2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIoc2l6ZV90CiAgICAgSVBDOjpTZW1h
cGhvcmUgc2VtYXBob3JlOwogCiAgICAgaWYgKG5lZWRzU2hhcmVkTWVtb3J5ICYmIG5lZWRzU2Vt
YXBob3JlKQotICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6VXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoZGF0YVNp
emUpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5
QW5kU2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXI6OlJlcGx5KGhhbmRsZSwgc2VtYXBob3JlKSwg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgdGltZW91dCwgSVBDOjpTZW5kU3luY09wdGlv
bjo6TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzKTsKKyAgICAgICAgc2VuZFN5bmNU
b1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVt
b3J5QW5kU2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoZGF0YVNpemUpLCBNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0
UGl4ZWxCdWZmZXI6OlJlcGx5KGhhbmRsZSwgc2VtYXBob3JlKSwgdGltZW91dCk7CiAgICAgZWxz
ZSBpZiAobmVlZHNTaGFyZWRNZW1vcnkpCi0gICAgICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcihk
YXRhU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRN
ZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcjo6UmVwbHkoaGFuZGxlKSwgcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIoKSwgdGltZW91dCwgSVBDOjpTZW5kU3luY09wdGlvbjo6TWFpbnRhaW5PcmRlcmlu
Z1dpdGhBc3luY01lc3NhZ2VzKTsKKyAgICAgICAgc2VuZFN5bmNUb1N0cmVhbShNZXNzYWdlczo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZm
ZXIoZGF0YVNpemUpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hh
cmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXI6OlJlcGx5KGhhbmRsZSksIHRpbWVvdXQpOwogICAg
IGVsc2UgaWYgKG5lZWRzU2VtYXBob3JlKQotICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6U2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoKSwgTWVzc2Fn
ZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyOjpS
ZXBseShzZW1hcGhvcmUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCB0aW1lb3V0KTsK
KyAgICAgICAgc2VuZFN5bmNUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6U2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OlNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyOjpSZXBseShzZW1hcGhvcmUpLCB0
aW1lb3V0KTsKIAogICAgIGlmICghaGFuZGxlLmhhbmRsZS5pc051bGwoKSkgewogICAgICAgICBt
X2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjptYXAoaGFuZGxlLmhh
bmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CkBAIC0xOTcsNiArMTkx
LDcgQEAgU2hhcmVkTWVtb3J5KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNoYXJlZE1l
bW9yeUZvckdldFBpeGVsQnVmZmVyKHNpemVfdAogCiBib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6d2FpdEZvckdldFBpeGVsQnVmZmVyVG9Db21wbGV0ZShJUEM6OlRpbWVvdXQgdGlt
ZW91dCkKIHsKKyAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKICAgICBB
U1NFUlQobV9nZXRQaXhlbEJ1ZmZlclNlbWFwaG9yZSk7CiAgICAgcmV0dXJuIG1fZ2V0UGl4ZWxC
dWZmZXJTZW1hcGhvcmUtPndhaXRGb3IodGltZW91dCk7CiB9CkBAIC0yMDQsMzMgKzE5OSwyNyBA
QCBib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckdldFBpeGVsQnVmZmVy
VG9Db21wbGV0ZShJUEM6OlRpbWVvdXQgdAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OmRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpCiB7CiAgICAgbV9nZXRQaXhl
bEJ1ZmZlclNoYXJlZE1lbW9yeSA9IG51bGxwdHI7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6RGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KCksIHJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNz
YWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICBzZW5kVG9TdHJlYW0oTWVzc2Fn
ZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1l
bW9yeSgpKTsKIH0KIAogU3RyaW5nIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0RGF0
YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQog
ewotICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwotCiAgICAgU3RyaW5n
IHVybFN0cmluZzsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6R2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJl
c29sdXRpb24sIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciksIE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpHZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXI6OlJlcGx5KHVybFN0cmlu
ZyksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIDFfcyk7CisgICAgc2VuZFN5bmNUb1N0
cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0RGF0YVVSTEZvckltYWdl
QnVmZmVyKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24sIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRE
YXRhVVJMRm9ySW1hZ2VCdWZmZXI6OlJlcGx5KHVybFN0cmluZyksIDNfcyk7CiAgICAgcmV0dXJu
IHVybFN0cmluZzsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6Z2V0RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6
b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewotICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3Nh
Z2VJZk5lZWRlZCgpOwotCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgc2VuZFN5bmMo
TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldERhdGFGb3JJbWFnZUJ1ZmZlciht
aW1lVHlwZSwgcXVhbGl0eSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldERhdGFGb3JJbWFnZUJ1ZmZlcjo6UmVwbHkoZGF0
YSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIDFfcyk7CisgICAgc2VuZFN5bmNUb1N0
cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0RGF0YUZvckltYWdlQnVm
ZmVyKG1pbWVUeXBlLCBxdWFsaXR5LCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBNZXNz
YWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0RGF0YUZvckltYWdlQnVmZmVyOjpSZXBs
eShkYXRhKSwgM19zKTsKICAgICByZXR1cm4gZGF0YTsKIH0KIAogUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRTaGFyZWFibGVCaXRtYXAoUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uKQogewotICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5l
ZWRlZCgpOwotCiAgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwotICAgIGF1dG8g
c2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpH
ZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgcHJlc2VydmVSZXNv
bHV0aW9uKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldFNoYXJlYWJsZUJp
dG1hcEZvckltYWdlQnVmZmVyOjpSZXBseShoYW5kbGUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcigpLCAxX3MpOworICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jVG9TdHJlYW0oTWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdl
QnVmZmVyKGltYWdlQnVmZmVyLCBwcmVzZXJ2ZVJlc29sdXRpb24pLCBNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6R2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXI6OlJlcGx5
KGhhbmRsZSksIDNfcyk7CiAgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICBBU1NFUlRfVU5VU0VEKHNlbmRSZXN1bHQsIHNlbmRSZXN1bHQpOwpAQCAtMjM5
LDMwICsyMjgsMzIgQEAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpnZXRTaGFyZWFibGVCaXRtYXAoUmVuZGVyaW4KIAogdm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OmNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFw
OjpIYW5kbGUmIGhhbmRsZSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpDYWNoZU5hdGl2ZUltYWdlKGhhbmRsZSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNw
YXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIHNlbmRUb1N0cmVh
bShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q2FjaGVOYXRpdmVJbWFnZShoYW5k
bGUsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpOworICAgIHNlbmREZWZlcnJlZFdha2V1
cE1lc3NhZ2VJZk5lZWRlZCgpOwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6Y2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250PiYmIGZvbnQpCit2b2lkIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6Y2FjaGVGb250KFJlZjxGb250PiYmIGZvbnQpCiB7Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q2FjaGVGb250KFdURk1vdmUoZm9u
dCkpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3Bh
dGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAgc2VuZFRvU3RyZWFt
KE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDYWNoZUZvbnQoV1RGTW92ZShmb250
KSkpOworICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwogfQogCiB2b2lk
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGVsZXRlQWxsRm9udHMoKQogewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRlbGV0ZUFsbEZvbnRzKCksIHJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNz
YWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICBzZW5kVG9TdHJlYW0oTWVzc2Fn
ZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRlbGV0ZUFsbEZvbnRzKCkpOworICAgIHNlbmRE
ZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KQog
ewotICAgIGlmIChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPT0gbV9jdXJyZW50RGVzdGlu
YXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIpCi0gICAgICAgIG1fY3VycmVudERlc3RpbmF0aW9u
SW1hZ2VCdWZmZXJJZGVudGlmaWVyID0gc3RkOjpudWxsb3B0OwotCi0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgdXNlQ291bnQpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5
bmNSZXBseSk7CisgICAgc2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpSZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1
c2VDb3VudCkpOworICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwogfQog
CiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZmluYWxpemVSZW5kZXJpbmdVcGRh
dGUoKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkZpbmFs
aXplUmVuZGVyaW5nVXBkYXRlKG1fcmVuZGVyaW5nVXBkYXRlSUQpLCByZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2Fp
dGluZ0ZvclN5bmNSZXBseSk7CisgICAgc2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpGaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShtX3JlbmRlcmluZ1VwZGF0ZUlE
KSk7CisgICAgc2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7CiAgICAgbV9yZW1v
dGVSZXNvdXJjZUNhY2hlUHJveHkuZmluYWxpemVSZW5kZXJpbmdVcGRhdGUoKTsKICAgICBtX3Jl
bmRlcmluZ1VwZGF0ZUlELmluY3JlbWVudCgpOwogfQpAQCAtMjgxLDE3MCArMjcyLDc2IEBAIHZv
aWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tl
bmQoSW1hZ2VCdWZmZXJCYWNrZW5kCiAgICAgICAgIGltYWdlQnVmZmVyLT5zZXRCYWNrZW5kKEFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kOjpjcmVhdGUoaW1hZ2VCdWZmZXIt
PnBhcmFtZXRlcnMoKSwgV1RGTW92ZShoYW5kbGUpKSk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpkaWRGbHVzaChEaXNwbGF5TGlzdDo6Rmx1c2hJZGVudGlmaWVyIGZs
dXNoSWRlbnRpZmllciwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRGbHVz
aChGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewogICAgIGlmIChhdXRvIGltYWdl
QnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY2FjaGVkSW1hZ2VCdWZmZXIocmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSkKICAgICAgICAgaW1hZ2VCdWZmZXItPmRpZEZsdXNo
KGZsdXNoSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjpkaWRGaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShSZW5kZXJpbmdVcGRhdGVJRCBkaWRSZW5kZXJp
bmdVcGRhdGVJRCkKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRGaW5hbGl6
ZVJlbmRlcmluZ1VwZGF0ZShSZW5kZXJpbmdVcGRhdGVJRCByZW5kZXJpbmdVcGRhdGVJRCkKIHsK
LSAgICBBU1NFUlQoZGlkUmVuZGVyaW5nVXBkYXRlSUQgPD0gbV9yZW5kZXJpbmdVcGRhdGVJRCk7
Ci0gICAgbV9kaWRSZW5kZXJpbmdVcGRhdGVJRCA9IHN0ZDo6bWluKGRpZFJlbmRlcmluZ1VwZGF0
ZUlELCBtX3JlbmRlcmluZ1VwZGF0ZUlEKTsKKyAgICBBU1NFUlQocmVuZGVyaW5nVXBkYXRlSUQg
PD0gbV9yZW5kZXJpbmdVcGRhdGVJRCk7CisgICAgbV9kaWRSZW5kZXJpbmdVcGRhdGVJRCA9IHN0
ZDo6bWluKHJlbmRlcmluZ1VwZGF0ZUlELCBtX3JlbmRlcmluZ1VwZGF0ZUlEKTsKIH0KIAotdm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndpbGxBcHBlbmRJdGVtKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBuZXdEZXN0aW5hdGlvbklkZW50aWZpZXIpCitSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllciBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKCkgY29uc3QKIHsKLSAgICBpZiAobV9jdXJyZW50RGVzdGluYXRpb25JbWFn
ZUJ1ZmZlcklkZW50aWZpZXIgPT0gbmV3RGVzdGluYXRpb25JZGVudGlmaWVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoYXV0byBwcmV2aW91c0Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmll
ciA9IHN0ZDo6ZXhjaGFuZ2UobV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZp
ZXIsIG5ld0Rlc3RpbmF0aW9uSWRlbnRpZmllcikpIHsKLSAgICAgICAgaWYgKGF1dG8gaW1hZ2VC
dWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jYWNoZWRJbWFnZUJ1ZmZlcigqcHJl
dmlvdXNEZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpKQotICAgICAgICAgICAgaW1hZ2VCdWZm
ZXItPmNoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIobmV3RGVzdGluYXRpb25JZGVudGlmaWVy
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
fQotCi0gICAgYXV0byBoYW5kbGUgPSBtb3N0UmVjZW50bHlVc2VkRGlzcGxheUxpc3RIYW5kbGUo
KTsKLSAgICBpZiAoVU5MSUtFTFkoIWhhbmRsZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1
dG8gbmV3RGVzdGluYXRpb24gPSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jYWNoZWRJbWFn
ZUJ1ZmZlcihuZXdEZXN0aW5hdGlvbklkZW50aWZpZXIpOwotICAgIGlmIChVTkxJS0VMWSghbmV3
RGVzdGluYXRpb24pKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaGFuZGxlLT5tb3ZlV3JpdGFibGVPZmZzZXRUb1N0YXJ0SWZQ
b3NzaWJsZSgpOwotICAgIG5ld0Rlc3RpbmF0aW9uLT5wcmVwYXJlVG9BcHBlbmREaXNwbGF5TGlz
dEl0ZW1zKGhhbmRsZS0+Y3JlYXRlSGFuZGxlKCkpOworICAgIHJldHVybiBtX3BhcmFtZXRlcnMu
aWRlbnRpZmllcjsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNlbmRX
YWtldXBNZXNzYWdlKGNvbnN0IEdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzJiBhcmd1
bWVudHMpCitSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmVuc3VyZUJhY2tlbmRDcmVhdGVkKCkKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2hh
cmVkRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlNlbmRpbmcgd2FrZXVwOiBJdGVtc1siIDw8IGFy
Z3VtZW50cy5pdGVtQnVmZmVySWRlbnRpZmllciA8PCAiXSA9PiBJbWFnZSgiIDw8IGFyZ3VtZW50
cy5kZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllciA8PCAiKSBhdCAiIDw8IGFyZ3VtZW50
cy5vZmZzZXQpOwotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Oldh
a2VVcEFuZEFwcGx5RGlzcGxheUxpc3QoYXJndW1lbnRzKSwgcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdG
b3JTeW5jUmVwbHkpOworICAgIGVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCk7CisgICAgcmV0
dXJuIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKQorSVBD
OjpTdHJlYW1DbGllbnRDb25uZWN0aW9uJiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnN0
cmVhbUNvbm5lY3Rpb24oKQogewotICAgIGF1dG8gYXJndW1lbnRzID0gc3RkOjpleGNoYW5nZSht
X2RlZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50cywgc3RkOjpudWxsb3B0KTsKLSAgICBpZiAo
IWFyZ3VtZW50cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2VuZFdha2V1cE1lc3NhZ2UoKmFy
Z3VtZW50cyk7Ci0gICAgbV9yZW1haW5pbmdJdGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dha2V1
cCA9IDA7Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRBcHBlbmRE
YXRhKGNvbnN0IERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlJiBoYW5kbGUsIHNpemVfdCBu
dW1iZXJPZkJ5dGVzLCBEaXNwbGF5TGlzdDo6RGlkQ2hhbmdlSXRlbUJ1ZmZlciBkaWRDaGFuZ2VJ
dGVtQnVmZmVyLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb25JbWFnZUJ1
ZmZlcikKLXsKLSAgICBhdXRvKiBzaGFyZWRIYW5kbGUgPSBtX3NoYXJlZERpc3BsYXlMaXN0SGFu
ZGxlcy5nZXQoaGFuZGxlLmlkZW50aWZpZXIpOwotICAgIGlmIChVTkxJS0VMWSghc2hhcmVkSGFu
ZGxlKSkKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIGJvb2wg
d2FzRW1wdHkgPSBzaGFyZWRIYW5kbGUtPmFkdmFuY2UobnVtYmVyT2ZCeXRlcykgPT0gbnVtYmVy
T2ZCeXRlczsKLSAgICBpZiAoIXdhc0VtcHR5IHx8IGRpZENoYW5nZUl0ZW1CdWZmZXIgPT0gRGlz
cGxheUxpc3Q6OkRpZENoYW5nZUl0ZW1CdWZmZXI6OlllcykgewotICAgICAgICBpZiAobV9kZWZl
cnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMpIHsKLSAgICAgICAgICAgIGF1dG8gaW1hZ2VCdWZm
ZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jYWNoZWRJbWFnZUJ1ZmZlcihtX2RlZmVy
cmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50cy0+ZGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZp
ZXIpOwotICAgICAgICAgICAgaWYgKGltYWdlQnVmZmVyICYmIGltYWdlQnVmZmVyLT5iYWNrZW5k
KCkgJiYgc2hhcmVkSGFuZGxlLT50cnlUb1Jlc3VtZSh7IG1fZGVmZXJyZWRXYWtldXBNZXNzYWdl
QXJndW1lbnRzLT5vZmZzZXQsIG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzLT5kZXN0
aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpIH0pKSB7Ci0gICAgICAgICAg
ICAgICAgbV9wYXJhbWV0ZXJzLnJlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlLnNpZ25hbCgpOwot
ICAgICAgICAgICAgICAgIG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzID0gc3RkOjpu
dWxsb3B0OwotICAgICAgICAgICAgICAgIG1fcmVtYWluaW5nSXRlbXNUb0FwcGVuZEJlZm9yZVNl
bmRpbmdXYWtldXAgPSAwOwotICAgICAgICAgICAgfSBlbHNlIGlmICghLS1tX3JlbWFpbmluZ0l0
ZW1zVG9BcHBlbmRCZWZvcmVTZW5kaW5nV2FrZXVwKSB7Ci0gICAgICAgICAgICAgICAgbV9kZWZl
cnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMtPnJlYXNvbiA9IEdQVVByb2Nlc3NXYWtldXBSZWFz
b246Okl0ZW1Db3VudEh5c3RlcmVzaXNFeGNlZWRlZDsKLSAgICAgICAgICAgICAgICBzZW5kV2Fr
ZXVwTWVzc2FnZSgqc3RkOjpleGNoYW5nZShtX2RlZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50
cywgc3RkOjpudWxsb3B0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwot
Ci0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNhY2hl
ZEltYWdlQnVmZmVyKGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIpOwotICAgIGF1dG8gb2Zmc2V0VG9S
ZWFkID0gc2hhcmVkSGFuZGxlLT53cml0YWJsZU9mZnNldCgpIC0gbnVtYmVyT2ZCeXRlczsKLSAg
ICBpZiAoaW1hZ2VCdWZmZXIgJiYgaW1hZ2VCdWZmZXItPmJhY2tlbmQoKSAmJiBzaGFyZWRIYW5k
bGUtPnRyeVRvUmVzdW1lKHsgb2Zmc2V0VG9SZWFkLCBkZXN0aW5hdGlvbkltYWdlQnVmZmVyLnRv
VUludDY0KCkgfSkpIHsKLSAgICAgICAgbV9wYXJhbWV0ZXJzLnJlc3VtZURpc3BsYXlMaXN0U2Vt
YXBob3JlLnNpZ25hbCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSW5zdGVh
ZCBvZiBzZW5kaW5nIHRoZSB3YWtldXAgbWVzc2FnZSBpbW1lZGlhdGVseSwgd2FpdCBmb3Igc29t
ZSBhZGRpdGlvbmFsIGRhdGEuIFRoaXMgZ2l2ZXMgdGhlCi0gICAgLy8gd2ViIHByb2Nlc3MgYSAi
aGVhZCBzdGFydCIsIGRlY3JlYXNpbmcgdGhlIGxpa2VsaWhvb2QgdGhhdCB0aGUgR1BVIHByb2Nl
c3Mgd2lsbCBlbmNvdW50ZXIgZnJlcXVlbnQKLSAgICAvLyB3YWtldXBzIHdoZW4gcHJvY2Vzc2lu
ZyBhIGxhcmdlIGFtb3VudCBvZiBkaXNwbGF5IGxpc3QgaXRlbXMuCi0gICAgY29uc3RleHByIHVu
c2lnbmVkIGl0ZW1Db3VudEh5c3RlcmVzaXNCZWZvcmVTZW5kaW5nV2FrZXVwID0gNTEyOwotCi0g
ICAgbV9yZW1haW5pbmdJdGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dha2V1cCA9IGl0ZW1Db3Vu
dEh5c3RlcmVzaXNCZWZvcmVTZW5kaW5nV2FrZXVwOwotICAgIG1fZGVmZXJyZWRXYWtldXBNZXNz
YWdlQXJndW1lbnRzID0ge3sgaGFuZGxlLmlkZW50aWZpZXIsIG9mZnNldFRvUmVhZCwgZGVzdGlu
YXRpb25JbWFnZUJ1ZmZlciB9fTsKKyAgICBlbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpOwor
ICAgIGlmIChVTkxJS0VMWShtX25lZWRzV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxheUxpc3RTdHJl
YW0pKQorICAgICAgICBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpLT53YWl0Rm9yQW5kRGlzcGF0
Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpEaWRD
cmVhdGVXYWtlVXBTZW1hcGhvcmVGb3JEaXNwbGF5TGlzdFN0cmVhbT4ocmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIoKSwgM19zLCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJ
ZlN5bmNNZXNzYWdlQXJyaXZlcyk7CisgICAgcmV0dXJuICptX3N0cmVhbUNvbm5lY3Rpb247CiB9
CiAKLVJlZlB0cjxEaXNwbGF5TGlzdFdyaXRlckhhbmRsZT4gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5Ojptb3N0UmVjZW50bHlVc2VkRGlzcGxheUxpc3RIYW5kbGUoKQordm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgp
CiB7Ci0gICAgaWYgKFVOTElLRUxZKG1faWRlbnRpZmllcnNPZlJldXNhYmxlSGFuZGxlcy5pc0Vt
cHR5KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBtX3NoYXJlZERp
c3BsYXlMaXN0SGFuZGxlcy5nZXQobV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVzLmZpcnN0
KCkpOworICAgIGlmIChtX3N0cmVhbUNvbm5lY3Rpb24pCisgICAgICAgIG1fc3RyZWFtQ29ubmVj
dGlvbi0+c2VuZERlZmVycmVkV2FrZVVwTWVzc2FnZSgpOwogfQogCi1SZWZQdHI8RGlzcGxheUxp
c3RXcml0ZXJIYW5kbGU+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZmluZFJldXNhYmxl
RGlzcGxheUxpc3RIYW5kbGUoc2l6ZV90IGNhcGFjaXR5KQordm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OmRpZENyZWF0ZVdha2VVcFNlbWFwaG9yZUZvckRpc3BsYXlMaXN0U3RyZWFt
KElQQzo6U2VtYXBob3JlJiYgc2VtYXBob3JlKQogewotICAgIGF1dG8gbW9zdFJlY2VudGx5VXNl
ZEhhbmRsZSA9IG1vc3RSZWNlbnRseVVzZWREaXNwbGF5TGlzdEhhbmRsZSgpOwotICAgIGlmIChV
TkxJS0VMWSghbW9zdFJlY2VudGx5VXNlZEhhbmRsZSkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgbW9zdFJlY2VudGx5VXNlZEhhbmRsZS0+bW92ZVdyaXRhYmxlT2Zmc2V0VG9TdGFy
dElmUG9zc2libGUoKTsKLSAgICBpZiAobW9zdFJlY2VudGx5VXNlZEhhbmRsZS0+YXZhaWxhYmxl
Q2FwYWNpdHkoKSA+PSBjYXBhY2l0eSkKLSAgICAgICAgcmV0dXJuIG1vc3RSZWNlbnRseVVzZWRI
YW5kbGU7Ci0KLSAgICBtX2lkZW50aWZpZXJzT2ZSZXVzYWJsZUhhbmRsZXMuYXBwZW5kKG1faWRl
bnRpZmllcnNPZlJldXNhYmxlSGFuZGxlcy50YWtlRmlyc3QoKSk7Ci0KLSAgICBhdXRvIGxlYXN0
UmVjZW50bHlVc2VkSWRlbnRpZmllciA9IG1faWRlbnRpZmllcnNPZlJldXNhYmxlSGFuZGxlcy5m
aXJzdCgpOwotICAgIGlmIChsZWFzdFJlY2VudGx5VXNlZElkZW50aWZpZXIgIT0gbW9zdFJlY2Vu
dGx5VXNlZEhhbmRsZS0+aWRlbnRpZmllcigpKSB7Ci0gICAgICAgIFJlZlB0ciBoYW5kbGUgPSBt
X3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlcy5nZXQobGVhc3RSZWNlbnRseVVzZWRJZGVudGlmaWVy
KTsKLSAgICAgICAgaWYgKGhhbmRsZS0+bW92ZVdyaXRhYmxlT2Zmc2V0VG9TdGFydElmUG9zc2li
bGUoKSAmJiBoYW5kbGUtPmF2YWlsYWJsZUNhcGFjaXR5KCkgPj0gY2FwYWNpdHkpCi0gICAgICAg
ICAgICByZXR1cm4gaGFuZGxlOworICAgIGlmICghbV9zdHJlYW1Db25uZWN0aW9uKSB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
cmV0dXJuIG51bGxwdHI7CisgICAgbV9zdHJlYW1Db25uZWN0aW9uLT5zZXRXYWtlVXBTZW1hcGhv
cmUoV1RGTW92ZShzZW1hcGhvcmUpKTsKKyAgICBtX25lZWRzV2FrZVVwU2VtYXBob3JlRm9yRGlz
cGxheUxpc3RTdHJlYW0gPSBmYWxzZTsKIH0KIAotRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5k
bGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCBj
YXBhY2l0eSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGRlc3RpbmF0aW9uQnVmZmVySWRl
bnRpZmllcikKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWNvcmROYXRpdmVJ
bWFnZVVzZShOYXRpdmVJbWFnZSYgaW1hZ2UpCiB7Ci0gICAgaWYgKGF1dG8gaGFuZGxlID0gZmlu
ZFJldXNhYmxlRGlzcGxheUxpc3RIYW5kbGUoY2FwYWNpdHkpKSB7Ci0gICAgICAgIExPR19XSVRI
X1NUUkVBTShTaGFyZWREaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiUmV1c2luZyBJdGVtc1siIDw8
IGhhbmRsZS0+aWRlbnRpZmllcigpIDw8ICJdID0+IEltYWdlKCIgPDwgZGVzdGluYXRpb25CdWZm
ZXJJZGVudGlmaWVyIDw8ICIpIChyZW1haW5pbmcgY2FwYWNpdHk6ICIgPDwgaGFuZGxlLT5hdmFp
bGFibGVDYXBhY2l0eSgpIDw8ICIpIik7Ci0gICAgICAgIHJldHVybiBoYW5kbGUtPmNyZWF0ZUhh
bmRsZSgpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGRlZmF1bHRTaGFy
ZWRJdGVtQnVmZmVyU2l6ZSA9IDEgPDwgMTY7Ci0gICAgc3RhdGljX2Fzc2VydChkZWZhdWx0U2hh
cmVkSXRlbUJ1ZmZlclNpemUgPiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6aGVhZGVyU2l6ZSgp
KTsKLQotICAgIGF1dG8gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShzdGQ6
Om1heChkZWZhdWx0U2hhcmVkSXRlbUJ1ZmZlclNpemUsIGNhcGFjaXR5ICsgU2hhcmVkRGlzcGxh
eUxpc3RIYW5kbGU6OmhlYWRlclNpemUoKSkpOwotICAgIGlmICghc2hhcmVkTWVtb3J5KQotICAg
ICAgICByZXR1cm4geyB9OwotCi0gICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgc2hhcmVkTWVtb3J5
SGFuZGxlOwotICAgIHNoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKHNoYXJlZE1lbW9yeUhhbmRs
ZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkV3JpdGUpOwotCi0gICAgYXV0byBpZGVu
dGlmaWVyID0gRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOwot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRpZENyZWF0ZVNoYXJl
ZERpc3BsYXlMaXN0SGFuZGxlKGlkZW50aWZpZXIsIHsgV1RGTW92ZShzaGFyZWRNZW1vcnlIYW5k
bGUpLCBzaGFyZWRNZW1vcnktPnNpemUoKSB9LCBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIp
LCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNo
TWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7Ci0KLSAgICBhdXRvIG5ld0hhbmRs
ZSA9IERpc3BsYXlMaXN0V3JpdGVySGFuZGxlOjpjcmVhdGUoaWRlbnRpZmllciwgc2hhcmVkTWVt
b3J5LnJlbGVhc2VOb25OdWxsKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKG5ld0hhbmRsZSwgIlRo
ZXJlIG11c3QgYmUgZW5vdWdoIHNwYWNlIHRvIGNyZWF0ZSB0aGUgaGFuZGxlLiIpOwotICAgIGF1
dG8gZGlzcGxheUxpc3RIYW5kbGUgPSBuZXdIYW5kbGUtPmNyZWF0ZUhhbmRsZSgpOwotCi0gICAg
bV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVzLnByZXBlbmQoaWRlbnRpZmllcik7Ci0gICAg
bV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXMuc2V0KGlkZW50aWZpZXIsIFdURk1vdmUobmV3SGFu
ZGxlKSk7CisgICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkucmVjb3JkTmF0aXZlSW1hZ2VV
c2UoaW1hZ2UpOworfQogCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNoYXJlZERpc3BsYXlMaXN0cywg
c3RyZWFtIDw8ICJBbGxvY2F0ZWQgSXRlbXNbIiA8PCBpZGVudGlmaWVyIDw8ICJdID0+IEltYWdl
KCIgPDwgZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyIDw8ICIpIik7Ci0gICAgcmV0dXJuIGRp
c3BsYXlMaXN0SGFuZGxlOwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlY29y
ZEZvbnRVc2UoRm9udCYgZm9udCkKK3sKKyAgICBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5y
ZWNvcmRGb250VXNlKGZvbnQpOwogfQogCi1SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCkgY29u
c3QKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWNvcmRJbWFnZUJ1ZmZlclVz
ZShJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIG1fcGFyYW1ldGVycy5p
ZGVudGlmaWVyOworICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LnJlY29yZEltYWdlQnVm
ZmVyVXNlKGltYWdlQnVmZmVyKTsKIH0KIAotUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjplbnN1cmVCYWNrZW5kQ3JlYXRlZCgpCitib29sIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6aXNDYWNoZWQoY29uc3QgSW1hZ2VCdWZmZXImIGlt
YWdlQnVmZmVyKSBjb25zdAogewotICAgIGVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCk7Ci0g
ICAgcmV0dXJuIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCk7CisgICAgaWYgKGF1dG8gY2Fj
aGVkSW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jYWNoZWRJbWFnZUJ1
ZmZlcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSkpIHsKKyAgICAg
ICAgQVNTRVJUKGNhY2hlZEltYWdlQnVmZmVyID09ICZpbWFnZUJ1ZmZlcik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKaW5kZXggODdhZTUy
MmNiYmIyODFmYzRhODgwNzY1Yjk5ZjRjOTAyNTZhOWQyNS4uYjYwYTg0Mzg3NTU5MmM3ZGU1ZjQ1
M2RlNDU1YTI4ZTUzMDY0OWZjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5oCkBAIC0zMywxMSArMzMsMTMgQEAKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUuaCIKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlU2Vu
ZGVyLmgiCisjaW5jbHVkZSAiUmVtb3RlR3JhcGhpY3NDb250ZXh0TWVzc2FnZXMuaCIKICNpbmNs
dWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCisjaW5jbHVk
ZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVz
b3VyY2VDYWNoZVByb3h5LmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJpbmdVcGRhdGVJRC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRGlz
cGxheUxpc3QuaD4KKyNpbmNsdWRlICJTdHJlYW1DbGllbnRDb25uZWN0aW9uLmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1RpbWVyLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CkBAIC00NSwxMSArNDcsNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLW5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7Ci1jbGFzcyBE
aXNwbGF5TGlzdDsKLWNsYXNzIEl0ZW07Ci19Ci0KIGNsYXNzIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTsKIGNsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIFBpeGVsQnVmZmVyOwpAQCAtNjEsMTMgKzU4LDEz
IEBAIGVudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSA6IGJvb2w7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCi1jbGFzcyBEaXNwbGF5TGlzdFdyaXRlckhhbmRsZTsKIGNsYXNzIFdlYlBhZ2U7CiAKIGNs
YXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eQogICAgIDogcHVibGljIElQQzo6TWVzc2Fn
ZVNlbmRlcgogICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgotICAgICwgcHVibGlj
IEdQVVByb2Nlc3NDb25uZWN0aW9uOjpDbGllbnQgeworICAgICwgcHVibGljIEdQVVByb2Nlc3ND
b25uZWN0aW9uOjpDbGllbnQKKyAgICAsIHB1YmxpYyBSZWZDb3VudGVkPFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eT4gewogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBjcmVhdGUoV2ViUGFnZSYpOwogCkBAIC03NywxMCAr
NzQsNiBAQCBwdWJsaWM6CiAgICAgdXNpbmcgV2Vha1ZhbHVlVHlwZSA9IEdQVVByb2Nlc3NDb25u
ZWN0aW9uOjpDbGllbnQ6OldlYWtWYWx1ZVR5cGU7CiAKICAgICBSZW1vdGVSZXNvdXJjZUNhY2hl
UHJveHkmIHJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpIHsgcmV0dXJuIG1fcmVtb3RlUmVzb3Vy
Y2VDYWNoZVByb3h5OyB9Ci0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5k
bGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QgY2FwYWNpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOwotCi0gICAgdm9p
ZCBkaWRBcHBlbmREYXRhKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFu
ZGxlJiwgc2l6ZV90IG51bWJlck9mQnl0ZXMsIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaWRDaGFu
Z2VJdGVtQnVmZmVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGlu
YXRpb25JbWFnZUJ1ZmZlcik7Ci0gICAgdm9pZCB3aWxsQXBwZW5kSXRlbShXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc2VuZERlZmVycmVkV2FrZXVwTWVz
c2FnZUlmTmVlZGVkKCk7CiAKICAgICBTaGFyZWRNZW1vcnkqIHNoYXJlZE1lbW9yeUZvckdldFBp
eGVsQnVmZmVyKHNpemVfdCBkYXRhU2l6ZSwgSVBDOjpUaW1lb3V0KTsKQEAgLTg4LDYgKzgxLDcg
QEAgcHVibGljOgogICAgIHZvaWQgZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KCk7
CiAKICAgICB2b2lkIGNyZWF0ZVJlbW90ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVy
Jik7CisgICAgYm9vbCBpc0NhY2hlZChjb25zdCBXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIGNvbnN0
OwogICAgICAgICAKICAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCiAgICAgSVBDOjpDb25uZWN0
aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTAwLDcg
Kzk0LDYgQEAgcHVibGljOgogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRl
SW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmLCBXZWJDb3JlOjpQaXhlbEZvcm1hdCk7CiAgICAgU3RyaW5nIGdldERhdGFVUkxG
b3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIFZlY3Rvcjx1aW50OF90PiBnZXREYXRhRm9ySW1h
Z2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0gICAgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZsdXNoSWRlbnRpZmllciBmbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0
KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZ2V0
U2hhcmVhYmxlQml0bWFwKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV2Vi
Q29yZTo6UHJlc2VydmVSZXNvbHV0aW9uKTsKICAgICB2b2lkIGNhY2hlTmF0aXZlSW1hZ2UoY29u
c3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpOwogICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250PiYmKTsKQEAg
LTEyNCw5ICsxMTcsMzYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0dQVVByb2Nlc3NDb25uZWN0
aW9uQ2xvc2VkKCkgY29uc3QgeyByZXR1cm4gIW1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb247IH0KIAor
ICAgIHZvaWQgZGlkQ3JlYXRlV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxheUxpc3RTdHJlYW0oSVBD
OjpTZW1hcGhvcmUmJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgor
ICAgIHZvaWQgc2VuZFRvU3RyZWFtKFQmJiBtZXNzYWdlLCBPYmplY3RJZGVudGlmaWVyPFU+IGlk
ZW50aWZpZXIpCisgICAgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIG1h
a2luZyB0aGUgc2VuZCB0aW1lb3V0IGZpbml0ZS4KKyAgICAgICAgc3RyZWFtQ29ubmVjdGlvbigp
LnNlbmQoV1RGTW92ZShtZXNzYWdlKSwgaWRlbnRpZmllciwgU2Vjb25kczo6aW5maW5pdHkoKSk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNlbmRUb1N0cmVh
bShUJiYgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIHNlbmRUb1N0cmVhbShXVEZNb3ZlKG1lc3Nh
Z2UpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpKTsKKyAgICB9CisKKyAgICB2b2lkIHJl
Y29yZE5hdGl2ZUltYWdlVXNlKFdlYkNvcmU6Ok5hdGl2ZUltYWdlJik7CisgICAgdm9pZCByZWNv
cmRGb250VXNlKFdlYkNvcmU6OkZvbnQmKTsKKyAgICB2b2lkIHJlY29yZEltYWdlQnVmZmVyVXNl
KFdlYkNvcmU6OkltYWdlQnVmZmVyJik7CisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5KFdlYlBhZ2UmKTsKIAorICAgIElQQzo6U3RyZWFtQ2xpZW50
Q29ubmVjdGlvbiYgc3RyZWFtQ29ubmVjdGlvbigpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBhdXRvIHNlbmRTeW5jVG9TdHJlYW0oVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJl
cGx5JiYgcmVwbHksIElQQzo6VGltZW91dCB0aW1lb3V0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0cmVhbUNvbm5lY3Rpb24oKS5zZW5kU3luYyhXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKHJl
cGx5KSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgdGltZW91dCk7CisgICAgfQorCiAg
ICAgLy8gR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQgZ3B1UHJvY2Vzc0Nv
bm5lY3Rpb25EaWRDbG9zZShHUFVQcm9jZXNzQ29ubmVjdGlvbiYpIGZpbmFsOwogCkBAIC0xMzQs
MjQgKzE1NCwxNCBAQCBwcml2YXRlOgogCiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgcmVjZWl2ZWQu
CiAgICAgdm9pZCBkaWRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoSW1hZ2VCdWZmZXJCYWNrZW5k
SGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZvaWQg
ZGlkRmx1c2goV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICB2b2lkIGRpZEZpbmFsaXplUmVuZGVy
aW5nVXBkYXRlKFJlbmRlcmluZ1VwZGF0ZUlEIGRpZFJlbmRlcmluZ1VwZGF0ZUlEKTsKLQotICAg
IFJlZlB0cjxEaXNwbGF5TGlzdFdyaXRlckhhbmRsZT4gbW9zdFJlY2VudGx5VXNlZERpc3BsYXlM
aXN0SGFuZGxlKCk7Ci0gICAgUmVmUHRyPERpc3BsYXlMaXN0V3JpdGVySGFuZGxlPiBmaW5kUmV1
c2FibGVEaXNwbGF5TGlzdEhhbmRsZShzaXplX3QgY2FwYWNpdHkpOwotCi0gICAgdm9pZCBzZW5k
V2FrZXVwTWVzc2FnZShjb25zdCBHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cyYpOwor
ICAgIHZvaWQgZGlkRmx1c2goV2ViQ29yZTo6Rmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIHZvaWQgZGlkRmluYWxpemVSZW5kZXJpbmdV
cGRhdGUoUmVuZGVyaW5nVXBkYXRlSUQpOwogCisgICAgc3RkOjp1bmlxdWVfcHRyPElQQzo6U3Ry
ZWFtQ2xpZW50Q29ubmVjdGlvbj4gbV9zdHJlYW1Db25uZWN0aW9uOwogICAgIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwogICAgIFdlYWtQdHI8
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24+IG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb247CiAgICAgUmVtb3Rl
UmVzb3VyY2VDYWNoZVByb3h5IG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5IHsgKnRoaXMgfTsK
IAotICAgIEhhc2hNYXA8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVy
LCBSZWZQdHI8RGlzcGxheUxpc3RXcml0ZXJIYW5kbGU+PiBtX3NoYXJlZERpc3BsYXlMaXN0SGFu
ZGxlczsKLSAgICBEZXF1ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZp
ZXI+IG1faWRlbnRpZmllcnNPZlJldXNhYmxlSGFuZGxlczsKLSAgICBzdGQ6Om9wdGlvbmFsPFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gbV9jdXJyZW50RGVzdGluYXRpb25J
bWFnZUJ1ZmZlcklkZW50aWZpZXI7Ci0gICAgc3RkOjpvcHRpb25hbDxHUFVQcm9jZXNzV2FrZXVw
TWVzc2FnZUFyZ3VtZW50cz4gbV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHM7Ci0gICAg
dW5zaWduZWQgbV9yZW1haW5pbmdJdGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dha2V1cCB7IDAg
fTsKLQogICAgIHN0ZDo6b3B0aW9uYWw8SVBDOjpTZW1hcGhvcmU+IG1fZ2V0UGl4ZWxCdWZmZXJT
ZW1hcGhvcmU7CiAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9nZXRQaXhlbEJ1ZmZlclNoYXJl
ZE1lbW9yeTsKICAgICB1aW50NjRfdCBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5TGVuZ3Ro
IHsgMCB9OwpAQCAtMTU5LDYgKzE2OSw4IEBAIHByaXZhdGU6CiAKICAgICBSZW5kZXJpbmdVcGRh
dGVJRCBtX3JlbmRlcmluZ1VwZGF0ZUlEOwogICAgIFJlbmRlcmluZ1VwZGF0ZUlEIG1fZGlkUmVu
ZGVyaW5nVXBkYXRlSUQ7CisKKyAgICBib29sIG1fbmVlZHNXYWtlVXBTZW1hcGhvcmVGb3JEaXNw
bGF5TGlzdFN0cmVhbSB7IHRydWUgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgppbmRl
eCA0Njc4MzA4OWQzNjI1ZDllMzRjYTZhZGFjMThkNjFkODBjMGQ3ODhlLi5hNzM2NWM2NTFkNDcx
MWMyY2E3OWRiODkxOWY3ZDA4Mzg3NzZmMjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdl
cy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjQsOCArMjQsOSBAQAogCiBtZXNz
YWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgTm90UmVmQ291bnRlZCB7CiAgICAg
RGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKFdlYktpdDo6SW1hZ2VCdWZmZXJCYWNrZW5kSGFu
ZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcikKLSAgICBEaWRGbHVzaChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAgICBEaWRGbHVzaChX
ZWJDb3JlOjpGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAgIERp
ZEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKFdlYktpdDo6UmVuZGVyaW5nVXBkYXRlSUQgZGlkUmVu
ZGVyaW5nVXBkYXRlSUQpCisgICAgRGlkQ3JlYXRlV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxheUxp
c3RTdHJlYW0oSVBDOjpTZW1hcGhvcmUgd2FrZVVwU2VtYXBob3JlKQogfQogCiAjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCmlu
ZGV4IGMwMzc0MWNlOWRhNGI5NjkzNjc1ZjJiYWI4NmM3OWU5NjE0OTZiMzkuLjQxMTcwNGQ3MzUx
MDVmYjUxY2E5NTUyNThlZWViODk3OTNhYzQ1NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2Fj
aGVQcm94eS5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJv
eHk6OmNhY2hlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmUKICAg
ICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwogfQogCi1J
bWFnZUJ1ZmZlciogUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjYWNoZWRJbWFnZUJ1ZmZlcihS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQor
SW1hZ2VCdWZmZXIqIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6Y2FjaGVkSW1hZ2VCdWZmZXIo
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcnMuZ2V0KHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikuaW1hZ2VCdWZmZXIuZ2V0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hl
UHJveHkuaAppbmRleCBiOWU3NzJmYmNjMjc4ZTMyMDQ2YzcyZGVmODg3YTkzNTViNWRmNDliLi4z
Mzc3NGNjMjRmOTg0NjI0NTVlMzE3OWNiODQ0Mzg1YWNhMzBhOGU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVz
b3VyY2VDYWNoZVByb3h5LmgKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIH5SZW1vdGVS
ZXNvdXJjZUNhY2hlUHJveHkoKTsKIAogICAgIHZvaWQgY2FjaGVJbWFnZUJ1ZmZlcihXZWJDb3Jl
OjpJbWFnZUJ1ZmZlciYpOwotICAgIFdlYkNvcmU6OkltYWdlQnVmZmVyKiBjYWNoZWRJbWFnZUJ1
ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIFdlYkNvcmU6
OkltYWdlQnVmZmVyKiBjYWNoZWRJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpIGNvbnN0OwogICAgIHZvaWQgcmVsZWFzZUltYWdlQnVmZmVyKFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAKICAgICB2b2lkIHJlY29yZE5hdGl2ZUlt
YWdlVXNlKFdlYkNvcmU6Ok5hdGl2ZUltYWdlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCmluZGV4IDBmMTE4Mzg1MThjYjkwODll
YzVlY2NmYWFjMzM1ZTIwMWE2YzM2ZjYuLjA1M2IwMDkyMmI3M2Y2MWM3ZTUwYjYyMGY2YjdjNzQ3
MjkxNjg2ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQ
Q1Rlc3RpbmdBUEkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQ
Q1Rlc3RpbmdBUEkuY3BwCkBAIC03NzYsMTAgKzc3Niw4IEBAIHN0YXRpYyBib29sIGVuY29kZVJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMoSVBDOjpFbmNvZGVyJiBlbmNv
ZGVyCiAgICAgaWYgKCFwYWdlSUQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8g
c2VtYXBob3JlID0gc2VtYXBob3JlT2JqZWN0LT5leGNoYW5nZSgpOwotICAgIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVycyB7ICppZGVudGlmaWVyLCBX
VEZNb3ZlKHNlbWFwaG9yZSksICpwYWdlUHJveHlJRCwgKnBhZ2VJRCB9OworICAgIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVycyB7ICppZGVudGlmaWVy
LCAqcGFnZVByb3h5SUQsICpwYWdlSUQgfTsKICAgICBlbmNvZGVyIDw8IHBhcmFtZXRlcnM7Ci0g
ICAgc2VtYXBob3JlT2JqZWN0LT5leGNoYW5nZShXVEZNb3ZlKHBhcmFtZXRlcnMucmVzdW1lRGlz
cGxheUxpc3RTZW1hcGhvcmUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KICNlbmRpZgpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Rpc3BsYXlMaXN0VGVzdHMu
Y3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Rpc3BsYXlMaXN0VGVzdHMu
Y3BwCmluZGV4IDVhMTYwYWU2ZmJlMTBiNjVjOTJkMWJkYTZhZmQyYmJlZDY5OWJjMDYuLjJjN2Yx
OWI0Y2QzMGZiMjQ1ODE3MTYzMTMzMDExYTE2ZDA4OWU4MWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9EaXNwbGF5TGlzdFRlc3RzLmNwcAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRGlzcGxheUxpc3RUZXN0cy5jcHAKQEAgLTEy
Miw4ICsxMjIsNiBAQCBURVNUKERpc3BsYXlMaXN0VGVzdHMsIEFwcGVuZEl0ZW1zKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICNlbmRpZgotICAgICAgICBjYXNlIEl0ZW1UeXBlOjpN
ZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAg
ZGVmYXVsdDogewogICAgICAgICAgICAgb2JzZXJ2ZWRVbmV4cGVjdGVkSXRlbSA9IHRydWU7CiAg
ICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9j
YW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMTQ1MWIxOTI1M2MzMjM4OTI4YmJkOWY1ZTVkZWJiOTI3NGM1MGQ1Ny4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9kaXNw
bGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApA
QCAtMSwxMyArMCwwIEBACi0KLShzYXZlKQotKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDUy
NTQ1NikKLSAgKHN0cm9rZS10aGlja25lc3MgMS4wMCkKLSAgKGZpbGwtY29sb3IgI0M4MDAwMCkK
LSAgKHNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMgMSkpCi0oZmlsbC1yZWN0Ci0gIChyZWN0IGF0
ICgxMCwxMCkgc2l6ZSA1NXg1MCkgZXh0ZW50IGF0ICgxMCwxNDApIHNpemUgNTV4NTApCi0oc2V0
LWlubGluZS1maWxsLWNvbG9yCi0gIChjb2xvciAjMDAwMEM4ODApKQotKGZpbGwtcmVjdAotICAo
cmVjdCBhdCAoMzAsMzApIHNpemUgNTV4NTApIGV4dGVudCBhdCAoMzAsMTIwKSBzaXplIDU1eDUw
KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxp
c3QuaHRtbCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0Lmh0
bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZjU2ZDg2ZDY0N2YyMjlkMWYzOWJk
OTYyNGNkODE2NGIwYzA5N2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QuaHRt
bAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotCi08aHRt
bD4KLTxoZWFkPgotICAgIDxzY3JpcHQ+Ci0gICAgICAgIGZ1bmN0aW9uIGRyYXdDYW52YXMoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgY3R4ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2NhbnZhcycpLmdldENvbnRleHQoJzJkJyk7Ci0gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0g
InJnYigyMDAsMCwwKSI7Ci0gICAgICAgICAgICBjdHguZmlsbFJlY3QgKDEwLCAxMCwgNTUsIDUw
KTsKLQotICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICJyZ2JhKDAsIDAsIDIwMCwgMC41KSI7
Ci0gICAgICAgICAgICBjdHguZmlsbFJlY3QgKDMwLCAzMCwgNTUsIDUwKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgIHRlc3RSdW5uZXIu
ZHVtcEFzVGV4dCgpOwotCi0gICAgICAgIHZhciBjYW52YXM7Ci0gICAgICAgIGZ1bmN0aW9uIGRv
VGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7
Ci0gICAgICAgICAgICBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FudmFzJyk7
Ci0gICAgICAgICAgICBpZiAod2luZG93LmludGVybmFscykgewotICAgICAgICAgICAgICAgIGlu
dGVybmFscy5zZXRFbGVtZW50VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhjYW52YXMsIHRydWUpOwot
ICAgICAgICAgICAgICAgIGludGVybmFscy5zZXRFbGVtZW50VHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkoY2FudmFzLCB0cnVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgZHJhd0NhbnZhcygpOwotCi0gICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0g
ICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5kaXNwbGF5QW5kVHJhY2tSZXBhaW50cygpOwotCi0g
ICAgICAgICAgICBpZiAod2luZG93LmludGVybmFscykKLSAgICAgICAgICAgICAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnb3V0cHV0JykudGV4dENvbnRlbnQgPSBpbnRlcm5hbHMucmVwbGF5
RGlzcGxheUxpc3RGb3JFbGVtZW50KGNhbnZhcyk7Ci0gICAgICAgIH0KLSAgICAgICAgd2luZG93
LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBkb1Rlc3QsIGZhbHNlKTsKLSAgICA8L3NjcmlwdD4K
LTwvaGVhZD4KLTxib2R5PgotPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iMzAwIiBoZWlnaHQ9
IjIwMCI+PC9jYW52YXM+Ci08cHJlIGlkPSJvdXRwdXQiPjwvcHJlPgotPC9ib2R5PgotPC9odG1s
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440798</attachid>
            <date>2021-10-11 08:52:26 -0700</date>
            <delta_ts>2021-10-11 17:38:15 -0700</delta_ts>
            <desc>Final piece (still blocked on subtasks)</desc>
            <filename>bug-230860-20211011085225.patch</filename>
            <type>text/plain</type>
            <size>101366</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzODY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDViYjhkZTZkNDZiMWJhMGQ0
ZDY0MmUwNGE2ZmE2YjQ2YjJkMWNlMmYuLjEwYzdhNTIxYjUzNWI3Y2I4NmQxNzllMjBkNzY0YWIz
M2FlZTAyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcwIEBACisyMDIxLTEwLTExICBXZW5zb24g
SHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
VXNlIElQQyBzdHJlYW1pbmcgZm9yIGNvbmN1cnJlbnQgZGlzcGxheSBsaXN0IHByb2Nlc3NpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDg2MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggcmVidWlsZHMgdGhlIGNvbmN1cnJlbnQgZGlzcGxheSBsaXN0IGFyY2hpdGVjdHVyZSBpbiB0
aGUgd2ViIGFuZCBHUFUgcHJvY2Vzc2VzIG9uIHRvcCBvZiB0aGUKKyAgICAgICAgc3RyZWFtYWJs
ZSBJUEMgY29ubmVjdGlvbnMgY3VycmVudGx5IHVzZWQgYnkgV2ViR0wgaW4gdGhlIEdQVSBwcm9j
ZXNzLiBTZWUgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgICAqIEdQVVByb2Nlc3Mv
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQpOgorCisgICAgICAgIFBh
c3MgYSBTdHJlYW1Db25uZWN0aW9uQnVmZmVyIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBH
UFUgcHJvY2VzcyB3aGVuIGNvbnN0cnVjdGluZworICAgICAgICBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOyB0aGlzIHNlcnZlcyBhcyB0aGUgcG9vbCBvZiBzaGFyZWQgbWVtb3J5IHVzZWQgdG8gc3Rv
cmUgc3RyZWFtaW5nIElQQyBtZXNzYWdlcyBzZW50IGZyb20KKyAgICAgICAgdGhlIHdlYiBwcm9j
ZXNzIHRvIHRoZSBHUFUgcHJvY2Vzcy4gSSd2ZSAoc29tZXdoYXQgYXJiaXRyYXJpbHkpIGNob3Nl
biB0aGUgc2l6ZSBvZiB0aGlzIFN0cmVhbUNvbm5lY3Rpb25CdWZmZXIKKyAgICAgICAgdG8gbWF0
Y2ggV2ViR0wncyBjb25uZWN0aW9uIGJ1ZmZlciwgdGhvdWdoIHRoaXMgY2FuIGJlIHR1bmVkIGFz
IG5lZWRlZC4gSW4gYSBmdXR1cmUgcGF0Y2gsIHdlIG1heSBhbHNvIHdhbnQgdG8KKyAgICAgICAg
aW1wbGVtZW50IGEgbWVjaGFuaXNtIGZvciBzdGFydGluZyBvdXQgd2l0aCBhIHNtYWxsIGNvbm5l
Y3Rpb24gYnVmZmVyLCBhbmQgZ3Jvd2luZyBpdCBieSBzdWNjZXNzaXZlbHkgbGFyZ2VyCisgICAg
ICAgIHNlZ21lbnRzIGFzIG5lZWRlZC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2NvY29hL0dQVVBy
b2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzczo6YWRkaXRpb25hbFN0
YXRlRm9yRGlhZ25vc3RpY1JlcG9ydCBjb25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c3RhcnRMaXN0ZW5pbmdGb3JJUEMpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzdG9wTGlzdGVuaW5nRm9ySVBDKToK
KworICAgICAgICBBZGQgYW5kIHJlbW92ZSB0aGUgcmVtb3RlIGRpc3BsYXkgbGlzdCBhcyBhIGRl
c3RpbmF0aW9uIG9uIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJ3Mgc3RyZWFtIGNvbm5lY3Rp
b24uIE5vdGUKKyAgICAgICAgdGhhdCB0aGUgc3luY2hyb25vdXMgZGlzcGF0Y2ggdG8gdGhlIG1h
aW4gdGhyZWFkIGhlcmUgaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIHRoZSBvcmRlcmluZyBvZiBv
dXQtb2Ytc3RyZWFtIElQQworICAgICAgICBtZXNzYWdlcyB0aGF0IG1heSBoYXZlIGJlZW4gcmVj
ZWl2ZWQgb24gdGhlIElQQyB0aHJlYWQuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZUltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVy
OjpSZW1vdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVy
OjphcHBseSk6IERlbGV0ZWQuCisKKyAgICAgICAgSW50cm9kdWNlIGBtX3JlbW90ZURpc3BsYXlM
aXN0YCB0byBSZW1vdGVJbWFnZUJ1ZmZlciwgYW5kIHJlbW92ZSBzb21lIGxvZ2ljIGZvciBhcHBs
eWluZyBkaXNwbGF5IGxpc3QgaXRlbXMgdGhhdAorICAgICAgICBpcyBubyBsb25nZXIgbmVjZXNz
YXJ5LgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZCk6CisKKyAgICAgICAgU2V0IHVwIHRoZSBJUEMgc3RyZWFtIGNvbm5lY3Rpb24g
YW5kIHN0cmVhbSBjb25uZWN0aW9uIHdvcmsgcXVldWUsIGFuZCBpbW1lZGlhdGVseSBzZW5kIGEg
d2FrZXVwIHNlbWFwaG9yZSBiYWNrCisgICAgICAgIHRvIHRoZSB3ZWIgcHJvY2Vzcy4KKworICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzdGFydExpc3RlbmluZ0ZvcklQ
Qyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
c3RvcExpc3RlbmluZ0ZvcklQQyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmRpZEJlZ2luTGlzdGVuaW5nRm9ySVBDKToKKworICAgICAgICBBZGQgYSBtZWNoYW5p
c20gdG8gaW1tZWRpYXRlbHkgdGVsbCBhbGwgYG1fcmVtb3RlRGlzcGxheUxpc3RzYCB0byBzdG9w
IGxpc3RlbmluZyBmb3Igc3RyZWFtaW5nIElQQyBtZXNzYWdlcyB3aGVuCisgICAgICAgIHRoZSBv
d25pbmcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBzdG9wcyBsaXN0ZW5pbmcuCisKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlzcGF0Y2gpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcldpdGhRdWFsaWZp
ZWRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
Y2FjaGVOYXRpdmVJbWFnZVdpdGhRdWFsaWZpZWRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y2FjaGVGb250V2l0aFF1YWxpZmllZElkZW50aWZp
ZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmaW5hbGl6ZVJl
bmRlcmluZ1VwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmFwcGx5TWVkaWFJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6UmVwbGF5ZXJEZWxlZ2F0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdh
dGU6OmFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6ZGlkQ3JlYXRlTWFza0ltYWdlQnVmZmVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxl
Z2F0ZTo6ZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjpyZWNvcmRSZXNvdXJj
ZVVzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OnN1Ym1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6Om5leHREZXN0aW5hdGlvbkltYWdlQnVmZmVyQWZ0ZXJBcHBseWluZ0Rpc3BsYXlMaXN0cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Ondha2VV
cEFuZEFwcGx5RGlzcGxheUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjp3YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0V2l0aFF1YWxpZmllZElk
ZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpzZXROZXh0SXRlbUJ1ZmZlclRvUmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZENyZWF0ZVNoYXJlZERpc3BsYXlMaXN0SGFuZGxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlk
Q3JlYXRlU2hhcmVkRGlzcGxheUxpc3RIYW5kbGVXaXRoUXVhbGlmaWVkSWRlbnRpZmllcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlc3VtZUZy
b21QZW5kaW5nV2FrZXVwSW5mb3JtYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVNYXNrSW1hZ2VCdWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRSZXNldE1hc2tJ
bWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmRlY29kZUl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpsYXN0S25vd25TdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZUxhc3RLbm93blN0YXRlKTogRGVs
ZXRlZC4KKworICAgICAgICBSZW1vdmUgbG9naWMgZm9yIGNvb3JkaW5hdGluZyB3YWtldXBzIGFu
ZCBzaGFyZWQgZGlzcGxheSBsaXN0IGl0ZW0gYnVmZmVycyBpbiB0aGUgR1BVIHByb2Nlc3MuCisK
KyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDoK
KworICAgICAgICBTdWJjbGFzcyBJUEM6OlN0cmVhbU1lc3NhZ2VSZWNlaXZlci4gSW4gdGhpcyBu
ZXcgY29uY3VycmVudCBkaXNwbGF5IGxpc3QgbW9kZWwsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQg
c2VydmVzCisgICAgICAgIGFzIGEgc3RyZWFtaW5nIElQQyBkZXN0aW5hdGlvbiBhbG9uZ3NpZGUg
ZWFjaCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyIGluIHRoZSBHUFUgcHJvY2VzczsgYWxsIG1l
c3NhZ2VzCisgICAgICAgIHByZXZpb3VzbHkgc2VudCB0byB0aGUgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZCBhcyBub3JtYWwgSVBDIGFyZSBub3cgc2VudCB0aHJvdWdoIHRoZSBjb25uZWN0aW9uIHN0
cmVhbSAodGhvdWdoCisgICAgICAgIHNvbWUgbXVzdCBiZSBtYXJrZWQgYXMgbm9uLXN0cmVhbS1l
bmNvZGFibGUpLgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnN0
cmVhbUNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpkZWNvZGVBbmRDcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UGVuZGluZ1dha2V1cElu
Zm9ybWF0aW9uOjpzaG91bGRQZXJmb3JtV2FrZXVwIGNvbnN0KTogRGVsZXRlZC4KKworICAgICAg
ICBEZWxldGUgbW9yZSBsb2dpYyByZWxhdGVkIHRvIGNvbmN1cnJlbnQgZGlzcGxheSBsaXN0cy4K
KworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5t
ZXNzYWdlcy5pbjoKKworICAgICAgICBNYWtlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgYSBzdHJl
YW0gbWVzc2FnZSByZWNlaXZlci4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUpOgorCisgICAgICAgIFJlbW92ZSB0aGUgSVBDOjpTZW1hcGhvcmUgaGVyZSwg
dGhhdCB3YXMgcHJldmlvdXNseSB1c2VkIGZvciBxdWljayBHUFUgcHJvY2VzcyB3YWtldXBzLiBU
aGlzIHNlbWFwaG9yZSBpcyBubworICAgICAgICBsb25nZXIgbmVlZGVkIGJlY2F1c2Ugd2UgYWx3
YXlzIHVzZSBJUEM6OlNlbWFwaG9yZSBmb3Igd2FraW5nIHRoZSBHUFUgcHJvY2VzcyB3aGVuIHVz
aW5nIHN0cmVhbWluZyBJUEMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6CisKKyAgICAgICAgTWFrZSB0aGUgUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eSB0ZW1wbGF0ZSBjbGFzcyBkaXJlY3RseSBzdWJjbGFzcyBDb25jcmV0ZUltYWdl
QnVmZmVyIGluc3RlYWQgb2YKKyAgICAgICAgRGlzcGxheUxpc3Q6OkltYWdlQnVmZmVyOyBhZGRp
dGlvbmFsbHksIGludHJvZHVjZSBhIGBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkgbV9y
ZW1vdGVEaXNwbGF5TGlzdGAgaGVyZSwKKyAgICAgICAgd2hpY2ggd2UgdXNlIGFzIG91ciBkcmF3
aW5nIGdyYXBoaWNzIGNvbnRleHQuCisKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVjb3JkTmF0aXZlSW1hZ2VVc2UpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZWNvcmRGb250VXNlKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVjb3JkSW1hZ2VCdWZmZXJV
c2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpjbGVhckRpc3Bs
YXlMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZW5zdXJlR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OmdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZVJlbW90ZUltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpzaGFyZWRNZW1vcnlGb3JHZXRQ
aXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6ZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldERhdGFGb3JJ
bWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6Z2V0U2hhcmVhYmxlQml0bWFwKToKKworICAgICAgICBTZW5kIGFsbCBJUEMgbWVzc2FnZXMg
dG8gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBpbiB0aGUgR1BVIHByb2Nlc3MgdGhyb3VnaCB0aGUg
c3RyZWFtIGNvbm5lY3Rpb24sIGluc3RlYWQgb2YKKyAgICAgICAgdXNpbmcgc3RhbmRhcmQgSVBD
IG1lc3NhZ2VzLiBUaGlzIGd1YXJhbnRlZXMgb3JkZXJpbmcgd2hlbiByZWNlaXZpbmcgY2FjaGVk
IHJlc291cmNlcy4KKworICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OmNhY2hlTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OmNhY2hlRm9udCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6ZGVsZXRlQWxsRm9udHMpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZmluYWxpemVSZW5kZXJpbmdVcGRh
dGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRpZEZp
bmFsaXplUmVuZGVyaW5nVXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZW5zdXJlQmFja2VuZENyZWF0
ZWQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnN0cmVh
bUNvbm5lY3Rpb24pOgorCisgICAgICAgIEFkZCBhIG1lY2hhbmlzbSB0byBlbnN1cmUgdGhhdCB3
ZSBoYXZlIHRoZSBJUEMgc3RyZWFtIHdha2V1cCBzZW1hcGhvcmUgYmVmb3JlIGdyYWJiaW5nIHRo
ZSBzdHJlYW0gY29ubmVjdGlvbi4KKworICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OmRpZENyZWF0ZVdha2VVcFNlbWFwaG9yZUZvckRpc3BsYXlMaXN0U3RyZWFt
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp3aWxsQXBw
ZW5kSXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6c2VuZFdha2V1cE1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5l
ZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6ZGlkQXBwZW5kRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6bW9zdFJlY2VudGx5VXNlZERpc3BsYXlMaXN0SGFuZGxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpm
aW5kUmV1c2FibGVEaXNwbGF5TGlzdEhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSXRlbUJ1ZmZlcik6IERlbGV0ZWQu
CisKKyAgICAgICAgUmVtb3ZlIGFsbCBsb2dpYyBwcmV2aW91c2x5IHVzZWQgdG8gY29vcmRpbmF0
ZSBjb25jdXJyZW50IGRpc3BsYXkgbGlzdCBwcm9jZXNzaW5nIG9uIHRoZSByZW1vdGUgcmVuZGVy
aW5nCisgICAgICAgIGJhY2tlbmQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNlbmRUb1N0cmVhbSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6c2VuZFN5bmNUb1N0
cmVhbSk6CisKKyAgICAgICAgQWRkIGhlbHBlciBtZXRob2RzIHRvIHNlbmQgSVBDIG1lc3NhZ2Vz
IHRvIHRoZSByZW1vdGUgcmVuZGVyaW5nIGJhY2tlbmQgdGhyb3VnaCB0aGUgY29ubmVjdGlvbiBz
dHJlYW0uCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L0lQQ1Rlc3RpbmdBUEkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjplbmNv
ZGVSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzKToKKwogMjAyMS0xMC0x
MCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBJbnRy
b2R1Y2UgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5IGFuZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5kZXggODVjYTg4ZjdhOTgyNDYyNjJjMzFhN2ZiNDE3Nzk5
NTA1M2U0OWNlZS4uNjY5OTkwYmVjOTc4NjY4YmVmYzNjYmM5MzcwYTgyNWJjZDcxNTJlMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcApAQCAtNDc0LDEwICs0NzQsMTAgQEAgUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJv
eHkmIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmltYWdlRGVjb2RlckFWRlByb3h5KCkKIH0K
ICNlbmRpZgogCi12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmlu
Z0JhY2tlbmQoUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmIGNyZWF0
aW9uUGFyYW1ldGVycykKK3ZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVu
ZGVyaW5nQmFja2VuZChSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzJiYg
Y3JlYXRpb25QYXJhbWV0ZXJzLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJiBzdHJlYW1C
dWZmZXIpCiB7CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRN
YXAuZW5zdXJlKGNyZWF0aW9uUGFyYW1ldGVycy5pZGVudGlmaWVyLCBbJl0oKSB7Ci0gICAgICAg
IHJldHVybiBJUEM6OlNjb3BlZEFjdGl2ZU1lc3NhZ2VSZWNlaXZlUXVldWUgeyBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoY3JlYXRpb25QYXJhbWV0ZXJzKSkg
fTsKKyAgICAgICAgcmV0dXJuIElQQzo6U2NvcGVkQWN0aXZlTWVzc2FnZVJlY2VpdmVRdWV1ZSB7
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShjcmVhdGlvblBh
cmFtZXRlcnMpLCBXVEZNb3ZlKHN0cmVhbUJ1ZmZlcikpIH07CiAgICAgfSk7CiAgICAgQVNTRVJU
X1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCmluZGV4
IDA1YTUwNWZlZTMyOTM3OGIxMzBhOWM5OTczMjYwNmJlMjBiNDg3YzguLjgwZDIxZGVkZWJlZWFh
MTNiZDA4MzU1NWY2Y2ZjYzZjMTFmMmI3ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApAQCAtMTc4LDcgKzE3OCw3IEBA
IHByaXZhdGU6CiAgICAgUmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXImIG1lZGlhUmVjb3JkZXJN
YW5hZ2VyKCk7CiAjZW5kaWYKIAotICAgIHZvaWQgY3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzJiYpOworICAgIHZvaWQgY3JlYXRl
UmVuZGVyaW5nQmFja2VuZChSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJz
JiYsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmKTsKICAgICB2b2lkIHJlbGVhc2VSZW5k
ZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIAogI2lmIEVOQUJMRShX
RUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggZmU0OGNhMjBiYTA4OTVhYjhh
Zjc0ZTk2MjY3NGVmMWIzZGRlODdmZC4uYzFiZjgwMTljZWFiNDFmNzlhNmY1YWRlZTFmYTg2MTZl
MjA1ZWIwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KQEAgLTIzLDcgKzIzLDcgQEAK
ICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKIG1lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MgV2FudHNEaXNwYXRjaE1lc3NhZ2UgewotICAgIHZvaWQgQ3JlYXRlUmVuZGVyaW5n
QmFja2VuZChzdHJ1Y3QgV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJh
bWV0ZXJzIGNyZWF0aW9uUGFyYW1ldGVycykKKyAgICB2b2lkIENyZWF0ZVJlbmRlcmluZ0JhY2tl
bmQoc3RydWN0IFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVy
cyBjcmVhdGlvblBhcmFtZXRlcnMsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciBzdHJlYW1C
dWZmZXIpCiAgICAgdm9pZCBSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChXZWJLaXQ6OlJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQogI2lmIEVOQUJM
RShXRUJHTCkKICAgICB2b2lkIENyZWF0ZUdyYXBoaWNzQ29udGV4dEdMKHN0cnVjdCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcywgV2ViS2l0OjpHcmFwaGlj
c0NvbnRleHRHTElkZW50aWZpZXIgZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCBXZWJLaXQ6
OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCBJ
UEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXIgc3RyZWFtKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2NvY29hL0dQVVByb2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9jb2NvYS9HUFVQcm9jZXNzQ29jb2EubW0KaW5kZXggMmY5Y2ExODdmMzAyZTcy
NTNjMDZmOTNkNDY2ZjgxM2RlODcwMzNlMy4uYjAyZmQ5NDkyZTc1Yzk3MDg1OTM0ZjYwMThjZjgx
ZWQ1Y2I1OTI2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2NvY29hL0dQ
VVByb2Nlc3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvY29jb2EvR1BV
UHJvY2Vzc0NvY29hLm1tCkBAIC01MSwxMCArNTEsNyBAQCBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5
PiBHUFVQcm9jZXNzOjphZGRpdGlvbmFsU3RhdGVGb3JEaWFnbm9zdGljUmVwb3J0KCkgY29uc3QK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgYXV0byBzdGF0ZUluZm8g
PSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpi
YWNrZW5kTWFwLnNpemUoKV0pOwotICAgICAgICAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyQW5k
QmFja2VuZCA6IGJhY2tlbmRNYXApIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBbYmFja2VuZElk
ZW50aWZpZXIsIGJhY2tlbmRdID0gaWRlbnRpZmllckFuZEJhY2tlbmQ7Ci0gICAgICAgICAgICAg
ICAgW3N0YXRlSW5mbyBzZXRPYmplY3Q6QChuYW1lKGJhY2tlbmQtPmxhc3RLbm93blN0YXRlKCkp
KSBmb3JLZXk6YmFja2VuZElkZW50aWZpZXIubG9nZ2luZ1N0cmluZygpXTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIEZJWE1FOiBMb2cgc29tZSBhZGRpdGlvbmFsIGRpYWdub3N0aWMg
c3RhdGUgb24gUmVtb3RlUmVuZGVyaW5nQmFja2VuZC4KICAgICAgICAgICAgIFt3ZWJQcm9jZXNz
Q29ubmVjdGlvbkluZm8gc2V0T2JqZWN0OnN0YXRlSW5mby5nZXQoKSBmb3JLZXk6d2ViUHJvY2Vz
c0lkZW50aWZpZXIubG9nZ2luZ1N0cmluZygpXTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlci5jcHAKaW5kZXggZWE1NGY3ZGIxYzg1OTNiODNkYWRkYjBkZTk0MmNjNTg2ZDU3
ZmIzNC4uYTZkMTYzNGExZDljYzI2MDU3NzMyZmMwNDYwZWU1ODYzYTM0Y2ZjNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtNTQsNyArNTQsMTEgQEAgdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpzdGFydExpc3RlbmluZ0ZvcklQQygpCiB7CiAgICAgQVNTRVJUKCFt
X2lzTGlzdGVuaW5nRm9ySVBDKTsKICAgICBtX2lzTGlzdGVuaW5nRm9ySVBDID0gdHJ1ZTsKLSAg
ICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkIHlldC4KKyAgICAvLyBGSVhNRTogQ2FuIHdlIGF2
b2lkIHN5bmNocm9ub3VzIGRpc3BhdGNoIGhlcmUgYnkgYWRqdXN0aW5nIHRoZSBhc3NlcnRpb24g
aW4gYENvbm5lY3Rpb246OmVucXVldWVNYXRjaGluZ01lc3NhZ2VzVG9NZXNzYWdlUmVjZWl2ZVF1
ZXVlYD8KKyAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoWyZdIHsKKyAgICAgICAgbV9yZW5k
ZXJpbmdCYWNrZW5kLT5zdHJlYW1Db25uZWN0aW9uKCkuc3RhcnRSZWNlaXZpbmdNZXNzYWdlcygq
dGhpcywgTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIub2JqZWN0KCkudG9VSW50NjQoKSk7Cisg
ICAgfSk7CisgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5kaWRCZWdpbkxpc3RlbmluZ0ZvcklQQygq
dGhpcyk7CiB9CiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c3RvcExpc3Rlbmlu
Z0ZvcklQQygpCkBAIC02Miw3ICs2Niw3IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6c3RvcExpc3RlbmluZ0ZvcklQQygpCiAgICAgaWYgKCFtX2lzTGlzdGVuaW5nRm9ySVBDKQog
ICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkIHlldC4KKyAg
ICBtX3JlbmRlcmluZ0JhY2tlbmQtPnN0cmVhbUNvbm5lY3Rpb24oKS5zdG9wUmVjZWl2aW5nTWVz
c2FnZXMoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIub2JqZWN0KCkudG9VSW50NjQoKSk7CiAg
ICAgbV9pc0xpc3RlbmluZ0ZvcklQQyA9IGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCmluZGV4IDU3Yzg5
YWM3YzVmYzVjZTIwMTZlMWVhNDk1OGVjNzc2MTM4Mjk1MGYuLjFhM2M3ODMyODE5MzI2NjljZWVm
OGY2YzVjMjhmYjc0OWNkMGYyZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCkBAIC0zMCw2ICszMCw4IEBACiAjaW5j
bHVkZSAiRGVjb2Rlci5oIgogI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
ci5oIgorI2luY2x1ZGUgIlNjb3BlZEFjdGl2ZU1lc3NhZ2VSZWNlaXZlUXVldWUuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rp
c3BsYXlMaXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CkBAIC01
NCw3ICs1Niw5IEBAIHB1YmxpYzoKICAgICAgICAgOiBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcihw
YXJhbWV0ZXJzLCBXVEZNb3ZlKGJhY2tlbmQpLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIu
b2JqZWN0KCkpCiAgICAgICAgICwgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kKHJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQpCiAgICAgICAgICwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIocmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgICAgICAsIG1fcmVtb3RlRGlzcGxheUxpc3Qo
eyBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjcmVhdGUoKnRoaXMsIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciwgcmVtb3RlUmVuZGVyaW5nQmFja2VuZCkgfSkKICAgICB7CisgICAgICAg
IG1fcmVtb3RlRGlzcGxheUxpc3QtPnN0YXJ0TGlzdGVuaW5nRm9ySVBDKCk7CiAgICAgICAgIG1f
cmVtb3RlUmVuZGVyaW5nQmFja2VuZC5kaWRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQobV9iYWNr
ZW5kLT5jcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUoKSwgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKTsKICAgICB9CiAKQEAgLTc3LDQxICs4MSw5IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7CiAKLSAgICBib29sIGFw
cGx5KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpHZXRQaXhlbEJ1ZmZlcj4oKSkgewotICAgICAgICAgICAgYXV0byYgZ2V0
UGl4ZWxCdWZmZXJJdGVtID0gaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldFBpeGVs
QnVmZmVyPigpOwotICAgICAgICAgICAgYXV0byBwaXhlbEJ1ZmZlciA9IEJhc2VDb25jcmV0ZUlt
YWdlQnVmZmVyOjpnZXRQaXhlbEJ1ZmZlcihnZXRQaXhlbEJ1ZmZlckl0ZW0ub3V0cHV0Rm9ybWF0
KCksIGdldFBpeGVsQnVmZmVySXRlbS5zcmNSZWN0KCkpOwotICAgICAgICAgICAgbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLnBvcHVsYXRlR2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkoV1RGTW92
ZShwaXhlbEJ1ZmZlcikpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoaXRlbS5pczxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI+
KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHB1dFBpeGVsQnVmZmVySXRlbSA9IGl0ZW0uZ2V0PFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRQaXhlbEJ1ZmZlcj4oKTsKLSAgICAgICAgICAgIHB1dFBp
eGVsQnVmZmVyKHB1dFBpeGVsQnVmZmVySXRlbS5waXhlbEJ1ZmZlcigpLCBwdXRQaXhlbEJ1ZmZl
ckl0ZW0uc3JjUmVjdCgpLCBwdXRQaXhlbEJ1ZmZlckl0ZW0uZGVzdFBvaW50KCksIHB1dFBpeGVs
QnVmZmVySXRlbS5kZXN0Rm9ybWF0KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoaXRlbS5pczxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1c2hD
b250ZXh0PigpKSB7Ci0gICAgICAgICAgICBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Zmx1c2hD
b250ZXh0KCk7Ci0gICAgICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBpdGVtLmdldDxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Rmx1c2hDb250ZXh0PigpLmlkZW50aWZpZXIoKTsKLSAgICAgICAgICAg
IExPR19XSVRIX1NUUkVBTShTaGFyZWREaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiQWNrbm93bGVk
Z2luZyBGbHVzaHsiIDw8IGlkZW50aWZpZXIgPDwgIn0gaW4gSW1hZ2UoIiA8PCBtX3JlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciA8PCAiKSIpOwotICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmRpZEZsdXNoKGlkZW50aWZpZXIsIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZl
cj4oKSkgewotICAgICAgICAgICAgYXV0byBuZXh0QnVmZmVySWRlbnRpZmllciA9IGl0ZW0uZ2V0
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI+KCkuaWRl
bnRpZmllcigpOwotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNoYXJlZERpc3BsYXlMaXN0
cywgc3RyZWFtIDw8ICJTd2l0Y2hpbmcgdG8gSXRlbXNbIiA8PCBuZXh0QnVmZmVySWRlbnRpZmll
ciA8PCAiXSIpOwotICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLnNldE5leHRJ
dGVtQnVmZmVyVG9SZWFkKG5leHRCdWZmZXJJZGVudGlmaWVyLCBtX3JlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuYXBwbHlNZWRpYUl0ZW0oaXRlbSwg
Y29udGV4dCk7Ci0gICAgfQotCiAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOwogICAgIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKKyAgICBJUEM6OlNjb3BlZEFjdGl2ZU1l
c3NhZ2VSZWNlaXZlUXVldWU8UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcj4gbV9yZW1vdGVEaXNw
bGF5TGlzdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
Y3BwCmluZGV4IGM3ZDFhODNlZWZlMzFlN2MyOWQ3MjNkY2M1YWY3NTc4NjkyMmYyNDMuLmZlYzU0
ZTU2NGI0NzU2MTFlOWQyYTQyODE0M2E3OGUwZGFlMjEzNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotI2lu
Y2x1ZGUgIkRpc3BsYXlMaXN0UmVhZGVySGFuZGxlLmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bVJlbW90ZUltYWdlQnVmZmVyLmgiCkBAIC03Myw0NiArNzIsNTEgQEAKIG5hbWVzcGFjZSBXZWJL
aXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVJlZjxSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENy
ZWF0aW9uUGFyYW1ldGVycyYmIGNyZWF0aW9uUGFyYW1ldGVycykKK1JlZjxSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZENyZWF0aW9uUGFyYW1ldGVycyYmIGNyZWF0aW9uUGFyYW1ldGVycywgSVBDOjpTdHJlYW1D
b25uZWN0aW9uQnVmZmVyJiYgc3RyZWFtQnVmZmVyKQogewotICAgIGF1dG8gaW5zdGFuY2UgPSBh
ZG9wdFJlZigqbmV3IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzcywgV1RGTW92ZShjcmVhdGlvblBhcmFtZXRlcnMpKSk7CisgICAgYXV0byBpbnN0YW5jZSA9
IGFkb3B0UmVmKCpuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZChncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLCBXVEZNb3ZlKGNyZWF0aW9uUGFyYW1ldGVycyksIFdURk1vdmUoc3RyZWFtQnVmZmVy
KSkpOwogICAgIGluc3RhbmNlLT5zdGFydExpc3RlbmluZ0ZvcklQQygpOwogICAgIHJldHVybiBp
bnN0YW5jZTsKIH0KIAotUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZChHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzJiYgY3JlYXRpb25QYXJh
bWV0ZXJzKQotICAgIDogbV93b3JrUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQgd29yayBxdWV1ZSIsIFdvcmtRdWV1ZTo6VHlwZTo6U2VyaWFsLCBXb3JrUXVl
dWU6OlFPUzo6VXNlckludGVyYWN0aXZlKSkKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcywgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYm
IGNyZWF0aW9uUGFyYW1ldGVycywgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiYgc3RyZWFt
QnVmZmVyKQorICAgIDogbV93b3JrUXVldWUoIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgd29yayBx
dWV1ZSIpCisgICAgLCBtX3N0cmVhbUNvbm5lY3Rpb24oSVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0
aW9uOjpjcmVhdGUoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jb25uZWN0aW9uKCksIFdURk1v
dmUoc3RyZWFtQnVmZmVyKSwgbV93b3JrUXVldWUpKQogICAgICwgbV9ncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCiAgICAgLCBtX3JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKGNyZWF0aW9uUGFyYW1ldGVycy5pZGVudGlmaWVyKQotICAgICwgbV9y
ZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZShXVEZNb3ZlKGNyZWF0aW9uUGFyYW1ldGVycy5yZXN1
bWVEaXNwbGF5TGlzdFNlbWFwaG9yZSkpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OkRpZENy
ZWF0ZVdha2VVcFNlbWFwaG9yZUZvckRpc3BsYXlMaXN0U3RyZWFtKG1fd29ya1F1ZXVlLndha2VV
cFNlbWFwaG9yZSgpKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiB9CiAKIHZvaWQg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c3RhcnRMaXN0ZW5pbmdGb3JJUEMoKQogewotICAgIG1f
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpLmFkZFdvcmtRdWV1ZU1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBtX3dvcmtRdWV1ZSwgdGhpcywgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ci50b1VJbnQ2NCgpKTsKKyAgICBtX3N0cmVhbUNvbm5lY3Rpb24tPnN0YXJ0UmVjZWl2aW5nTWVz
c2FnZXMoKnRoaXMsIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7CiB9
CiAKIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKIHsK
ICAgICAvLyBNYWtlIHN1cmUgd2UgZGVzdHJveSB0aGUgUmVzb3VyY2VDYWNoZSBvbiB0aGUgV29y
a1F1ZXVlIHNpbmNlIGl0IGdldHMgcG9wdWxhdGVkIG9uIHRoZSBXb3JrUXVldWUuCiAgICAgLy8g
TWFrZSBzdXJlIHJlbmRlcmluZyByZXNvdXJjZSByZXF1ZXN0IGlzIHJlbGVhc2VkIGFmdGVyIGRl
c3Ryb3lpbmcgdGhlIGNhY2hlLgotICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbcmVuZGVyaW5n
UmVzb3VyY2VzUmVxdWVzdCA9IFdURk1vdmUobV9yZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0KSwg
cmVtb3RlUmVzb3VyY2VDYWNoZSA9IFdURk1vdmUobV9yZW1vdGVSZXNvdXJjZUNhY2hlKV0geyB9
KTsKKyAgICBtX3dvcmtRdWV1ZS5kaXNwYXRjaChbcmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdCA9
IFdURk1vdmUobV9yZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0KSwgcmVtb3RlUmVzb3VyY2VDYWNo
ZSA9IFdURk1vdmUobV9yZW1vdGVSZXNvdXJjZUNhY2hlKV0geyB9KTsKIH0KIAogdm9pZCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpzdG9wTGlzdGVuaW5nRm9ySVBDKCkKIHsKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOworICAgIG1fc3RyZWFtQ29ubmVjdGlvbi0+c3RvcFJlY2Vpdmlu
Z01lc3NhZ2VzKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7CisgICAg
Zm9yIChhdXRvJiByZW1vdGVDb250ZXh0IDogc3RkOjpleGNoYW5nZShtX3JlbW90ZURpc3BsYXlM
aXN0cywgeyB9KSkKKyAgICAgICAgcmVtb3RlQ29udGV4dC5zdG9wTGlzdGVuaW5nRm9ySVBDKCk7
Cit9CiAKLSAgICAvLyBUaGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBkZXN0cnVjdG9yIHdvbid0
IGJlIGNhbGxlZCB1bnRpbCBkaXNjb25uZWN0KCkgaXMgY2FsbGVkIGFuZCB3ZSB1bnJlZ2lzdGVy
IG91cnNlbHZlcyBhcyBhIFdvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlciBiZWNhdXNlCi0gICAgLy8g
dGhlIElQQzo6Q29ubmVjdGlvbiByZWZzIGl0cyBXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXJzLgot
ICAgIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpLnJlbW92ZVdvcmtR
dWV1ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0
KCkpOwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRCZWdpbkxpc3RlbmluZ0ZvcklQ
QyhSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyJiByZW1vdGVDb250ZXh0KQoreworICAgIG1fcmVt
b3RlRGlzcGxheUxpc3RzLmFkZChyZW1vdGVDb250ZXh0KTsKIH0KIAogdm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpkaXNwYXRjaChGdW5jdGlvbjx2b2lkKCk+JiYgdGFzaykKIHsKLSAgICBt
X3dvcmtRdWV1ZS0+ZGlzcGF0Y2goV1RGTW92ZSh0YXNrKSk7CisgICAgbV93b3JrUXVldWUuZGlz
cGF0Y2goV1RGTW92ZSh0YXNrKSk7CiB9CiAKIElQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdApAQCAtMTI1LDI0ICsx
MjksNiBAQCB1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVz
dGluYXRpb25JRCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIudG9VSW50NjQoKTsKIH0KIAotYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjphcHBseU1l
ZGlhSXRlbShEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIWl0
ZW0uaXM8RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYT4oKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byYgbWVkaWFJdGVtID0gaXRlbS5nZXQ8RGlzcGxheUxpc3Q6OlBh
aW50RnJhbWVGb3JNZWRpYT4oKTsKLSAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoWyYsIGdw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIG1l
ZGlhUGxheWVySWRlbnRpZmllciA9IG1lZGlhSXRlbS5pZGVudGlmaWVyKCldIHsKLSAgICAgICAg
YXV0byBwbGF5ZXIgPSBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5yZW1vdGVNZWRpYVBsYXll
ck1hbmFnZXJQcm94eSgpLm1lZGlhUGxheWVyKG1lZGlhUGxheWVySWRlbnRpZmllcik7Ci0gICAg
ICAgIGlmICghcGxheWVyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAvLyBJdCBpcyBj
dXJyZW50bHkgbm90IHNhZmUgdG8gY2FsbCBwYWludEZyYW1lRm9yTWVkaWEoKSBvZmYgdGhlIG1h
aW4gdGhyZWFkLgotICAgICAgICBjb250ZXh0LnBhaW50RnJhbWVGb3JNZWRpYSgqcGxheWVyLCBt
ZWRpYUl0ZW0uZGVzdGluYXRpb24oKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
IHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5k
KEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUsIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiB7CiAgICAgTUVTU0FH
RV9DSEVDSyhyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIucHJvY2Vzc0lkZW50aWZpZXIoKSA9
PSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPndlYlByb2Nlc3NJZGVudGlmaWVyKCksICJT
ZW5kaW5nIGRpZENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpIG1lc3NhZ2UgdG8gdGhlIHdyb25n
IHdlYiBwcm9jZXNzLiIpOwpAQCAtMTg5LDIxNCArMTc1LDYgQEAgdm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcldpdGhRdWFsaWZpZWRJZGVudGlmaWVyKGNvbnN0
IEZsb2EKIAogICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZUltYWdlQnVmZmVyKCppbWFn
ZUJ1ZmZlcik7CiAgICAgdXBkYXRlUmVuZGVyaW5nUmVzb3VyY2VSZXF1ZXN0KCk7Ci0KLSAgICBp
ZiAobV9wZW5kaW5nV2FrZXVwSW5mbyAmJiBtX3BlbmRpbmdXYWtldXBJbmZvLT5zaG91bGRQZXJm
b3JtV2FrZXVwKGltYWdlQnVmZmVyUmVzb3VyY2VJZGVudGlmaWVyKSkKLSAgICAgICAgcmVzdW1l
RnJvbVBlbmRpbmdXYWtldXBJbmZvcm1hdGlvbigpOwotfQotCi1SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpSZXBsYXllckRlbGVnYXRlOjpSZXBsYXllckRlbGVnYXRlKFdlYkNvcmU6OkltYWdlQnVm
ZmVyJiBkZXN0aW5hdGlvbiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgcmVtb3RlUmVuZGVyaW5n
QmFja2VuZCkKLSAgICA6IG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi0gICAgLCBtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQocmVtb3RlUmVuZGVyaW5nQmFja2VuZCkKLXsKLX0KLQotYm9vbCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjphcHBseShXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCkKLXsKLSAgICBhdXRvIGFwcGx5ID0gWyZdKGF1dG8mJiBkZXN0aW5hdGlv
bikgewotICAgICAgICByZXR1cm4gZGVzdGluYXRpb24uYXBwbHkoaXRlbSwgZ3JhcGhpY3NDb250
ZXh0KTsKLSAgICB9OwotCi0gICAgaWYgKG1fZGVzdGluYXRpb24ucmVuZGVyaW5nTW9kZSgpID09
IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm4gYXBwbHkoc3RhdGlj
X2Nhc3Q8QWNjZWxlcmF0ZWRSZW1vdGVJbWFnZUJ1ZmZlciY+KG1fZGVzdGluYXRpb24pKTsKLSAg
ICByZXR1cm4gYXBwbHkoc3RhdGljX2Nhc3Q8VW5hY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVy
Jj4obV9kZXN0aW5hdGlvbikpOwotfQotCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJl
cGxheWVyRGVsZWdhdGU6OmRpZENyZWF0ZU1hc2tJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1
ZmZlciYgaW1hZ2VCdWZmZXIpCi17Ci0gICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmRpZENy
ZWF0ZU1hc2tJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcik7Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6ZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIoKQot
ewotICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5kaWRSZXNldE1hc2tJbWFnZUJ1ZmZlcigp
OwotfQotCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OnJl
Y29yZFJlc291cmNlVXNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpCi17Ci0gICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLnJlbW90ZVJl
c291cmNlQ2FjaGUoKS5yZWNvcmRSZXNvdXJjZVVzZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpOwotfQotCi1EaXNwbGF5TGlzdDo6UmVwbGF5UmVzdWx0IFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OnN1Ym1pdChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBJ
bWFnZUJ1ZmZlciYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYgKGRpc3BsYXlMaXN0LmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFJlcGxheWVyRGVsZWdhdGUgcmVwbGF5ZXJE
ZWxlZ2F0ZShkZXN0aW5hdGlvbiwgKnRoaXMpOwotCi0gICAgcmV0dXJuIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZXBsYXllciB7Ci0gICAgICAgIGRlc3RpbmF0aW9uLmNvbnRleHQoKSwKLSAgICAg
ICAgZGlzcGxheUxpc3QsCi0gICAgICAgICZyZW1vdGVSZXNvdXJjZUNhY2hlKCkuaW1hZ2VCdWZm
ZXJzKCksCi0gICAgICAgICZyZW1vdGVSZXNvdXJjZUNhY2hlKCkubmF0aXZlSW1hZ2VzKCksCi0g
ICAgICAgICZyZW1vdGVSZXNvdXJjZUNhY2hlKCkuZm9udHMoKSwKLSAgICAgICAgbV9jdXJyZW50
TWFza0ltYWdlQnVmZmVyLmdldCgpLAotICAgICAgICAmcmVwbGF5ZXJEZWxlZ2F0ZQotICAgIH0u
cmVwbGF5KCk7Ci19Ci0KLVJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6bmV4dERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJBZnRlckFwcGx5aW5nRGlzcGxheUxpc3RzKElt
YWdlQnVmZmVyJiBpbml0aWFsRGVzdGluYXRpb24sIHNpemVfdCBpbml0aWFsT2Zmc2V0LCBEaXNw
bGF5TGlzdFJlYWRlckhhbmRsZSYgaGFuZGxlLCBHUFVQcm9jZXNzV2FrZXVwUmVhc29uIHJlYXNv
biwgUHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIpCi17Ci0gICAgUmVmUHRy
IGRlc3RpbmF0aW9uIHsgJmluaXRpYWxEZXN0aW5hdGlvbiB9OwotICAgIFJlZiBoYW5kbGVQcm90
ZWN0b3IgeyBoYW5kbGUgfTsKLQotICAgIGF1dG8gb2Zmc2V0ID0gaW5pdGlhbE9mZnNldDsKLSAg
ICBzaXplX3Qgc2l6ZVRvUmVhZCA9IDA7Ci0gICAgZG8gewotICAgICAgICBzaXplVG9SZWFkID0g
aGFuZGxlLnVucmVhZEJ5dGVzKCk7Ci0gICAgfSB3aGlsZSAoIXNpemVUb1JlYWQpOwotCi0gICAg
d2hpbGUgKGRlc3RpbmF0aW9uKSB7Ci0gICAgICAgIGF1dG8gZGlzcGxheUxpc3QgPSBoYW5kbGUu
ZGlzcGxheUxpc3RGb3JSZWFkaW5nKG9mZnNldCwgc2l6ZVRvUmVhZCwgKnRoaXMpOwotICAgICAg
ICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKGRpc3BsYXlMaXN0LCBudWxscHRyLCAi
RmFpbGVkIHRvIG1hcCBkaXNwbGF5IGxpc3QgZnJvbSBzaGFyZWQgbWVtb3J5Iik7Ci0KLSNpZiAh
TE9HX0RJU0FCTEVECi0gICAgICAgIGF1dG8gc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93
KCk7Ci0jZW5kaWYKLSAgICAgICAgYXV0byByZXN1bHQgPSBzdWJtaXQoKmRpc3BsYXlMaXN0LCAq
ZGVzdGluYXRpb24pOwotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2hhcmVkRGlzcGxheUxpc3Rz
LCBzdHJlYW0gPDwgIlJlYWQgWyIgPDwgb2Zmc2V0IDw8ICIsICIgPDwgb2Zmc2V0ICsgcmVzdWx0
Lm51bWJlck9mQnl0ZXNSZWFkIDw8ICJdOyBJdGVtc1siIDw8IGhhbmRsZS5pZGVudGlmaWVyKCkg
PDwgIl0gPT4gSW1hZ2UoIiA8PCBkZXN0aW5hdGlvbi0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKCkgPDwgIikgaW4gIiA8PCBNb25vdG9uaWNUaW1lOjpub3coKSAtIHN0YXJ0VGltZSk7Ci0g
ICAgICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUocmVzdWx0LnJlYXNvbkZvclN0
b3BwaW5nICE9IERpc3BsYXlMaXN0OjpTdG9wUmVwbGF5UmVhc29uOjpJbnZhbGlkSXRlbU9yRXh0
ZW50LCBudWxscHRyLCAiRGV0ZWN0ZWQgaW52YWxpZCBkaXNwbGF5IGxpc3QgaXRlbSBvciBleHRl
bnQiKTsKLSAgICAgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRShyZXN1bHQucmVh
c29uRm9yU3RvcHBpbmcgIT0gRGlzcGxheUxpc3Q6OlN0b3BSZXBsYXlSZWFzb246Ok91dE9mTWVt
b3J5LCBudWxscHRyLCAiQ291bmQgbm90IGFsbG9jYXRlIG1lbW9yeSIpOwotCi0gICAgICAgIGF1
dG8gYWR2YW5jZVJlc3VsdCA9IGhhbmRsZS5hZHZhbmNlKHJlc3VsdC5udW1iZXJPZkJ5dGVzUmVh
ZCk7Ci0gICAgICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUoYWR2YW5jZVJlc3Vs
dCwgbnVsbHB0ciwgIkZhaWxlZCB0byBhZHZhbmNlIGRpc3BsYXkgbGlzdCByZWFkZXIgaGFuZGxl
Iik7Ci0gICAgICAgIHNpemVUb1JlYWQgPSAqYWR2YW5jZVJlc3VsdDsKLQotICAgICAgICBDaGVj
a2VkU2l6ZSBjaGVja2VkT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBjaGVja2VkT2Zmc2V0ICs9
IHJlc3VsdC5udW1iZXJPZkJ5dGVzUmVhZDsKLSAgICAgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JF
VFVSTl9WQUxVRSghY2hlY2tlZE9mZnNldC5oYXNPdmVyZmxvd2VkKCksIG51bGxwdHIsICJPdmVy
Zmxvd2VkIHdoZW4gYWR2YW5jaW5nIHNoYXJlZCBkaXNwbGF5IGxpc3QgaGFuZGxlIG9mZnNldCIp
OwotCi0gICAgICAgIG9mZnNldCA9IGNoZWNrZWRPZmZzZXQ7Ci0gICAgICAgIE1FU1NBR0VfQ0hF
Q0tfV0lUSF9SRVRVUk5fVkFMVUUob2Zmc2V0IDw9IGhhbmRsZS5zaGFyZWRNZW1vcnkoKS5zaXpl
KCksIG51bGxwdHIsICJPdXQtb2YtYm91bmRzIG9mZnNldCBpbnRvIHNoYXJlZCBkaXNwbGF5IGxp
c3QgaGFuZGxlIik7Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5yZWFzb25Gb3JTdG9wcGluZyA9PSBE
aXNwbGF5TGlzdDo6U3RvcFJlcGxheVJlYXNvbjo6Q2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZl
cikgewotICAgICAgICAgICAgZGVzdGluYXRpb24gPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2Fj
aGVkSW1hZ2VCdWZmZXIoKnJlc3VsdC5uZXh0RGVzdGluYXRpb25JbWFnZUJ1ZmZlcik7Ci0gICAg
ICAgICAgICBpZiAoIWRlc3RpbmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFtX3Bl
bmRpbmdXYWtldXBJbmZvKTsKLSAgICAgICAgICAgICAgICBtX3BlbmRpbmdXYWtldXBJbmZvID0g
e3sKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlLmlkZW50aWZpZXIoKSwKLSAgICAgICAgICAg
ICAgICAgICAgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICB7ICpyZXN1bHQubmV4dERlc3Rp
bmF0aW9uSW1hZ2VCdWZmZXIsIHdlYlByb2Nlc3NJZGVudGlmaWVyIH0sCi0gICAgICAgICAgICAg
ICAgICAgIHJlYXNvbiwKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpudWxsb3B0LAotICAgICAg
ICAgICAgICAgICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGU6OldhaXRpbmdGb3JEZXN0
aW5hdGlvbkltYWdlQnVmZmVyCi0gICAgICAgICAgICAgICAgfX07Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAocmVzdWx0LnJlYXNvbkZvclN0b3BwaW5nID09IERpc3Bs
YXlMaXN0OjpTdG9wUmVwbGF5UmVhc29uOjpNaXNzaW5nQ2FjaGVkUmVzb3VyY2UpIHsKLSAgICAg
ICAgICAgIG1fcGVuZGluZ1dha2V1cEluZm8gPSB7ewotICAgICAgICAgICAgICAgIGhhbmRsZS5p
ZGVudGlmaWVyKCksCi0gICAgICAgICAgICAgICAgb2Zmc2V0LAotICAgICAgICAgICAgICAgIHsg
ZGVzdGluYXRpb24tPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCB3ZWJQcm9jZXNzSWRl
bnRpZmllciB9LAotICAgICAgICAgICAgICAgIHJlYXNvbiwKLSAgICAgICAgICAgICAgICB7IHsg
KnJlc3VsdC5taXNzaW5nQ2FjaGVkUmVzb3VyY2VJZGVudGlmaWVyLCB3ZWJQcm9jZXNzSWRlbnRp
ZmllciB9IH0sCi0gICAgICAgICAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpX
YWl0aW5nRm9yQ2FjaGVkUmVzb3VyY2UKLSAgICAgICAgICAgIH19OwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG1fcGVuZGluZ1dha2V1cEluZm8pCi0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBpZiAoIXNpemVUb1JlYWQpIHsKLSAgICAgICAgICAgIGlmIChyZWFzb24gIT0gR1BVUHJv
Y2Vzc1dha2V1cFJlYXNvbjo6SXRlbUNvdW50SHlzdGVyZXNpc0V4Y2VlZGVkKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBoYW5kbGUuc3RhcnRXYWl0aW5nKCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlLndhaXRGb3IoMzBfdXMpOwotCi0g
ICAgICAgICAgICBhdXRvIHN0b3BXYWl0aW5nUmVzdWx0ID0gaGFuZGxlLnN0b3BXYWl0aW5nKCk7
Ci0gICAgICAgICAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKHN0b3BXYWl0aW5n
UmVzdWx0LCBudWxscHRyLCAiSW52YWxpZCB3YWl0aW5nIHN0YXR1cyBkZXRlY3RlZCB3aGVuIHJl
c3VtaW5nIGRpc3BsYXkgbGlzdCBwcm9jZXNzaW5nIik7Ci0KLSAgICAgICAgICAgIGF1dG8gcmVz
dW1lUmVhZGluZ0luZm8gPSBzdG9wV2FpdGluZ1Jlc3VsdC52YWx1ZSgpOwotICAgICAgICAgICAg
aWYgKCFyZXN1bWVSZWFkaW5nSW5mbykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgc2l6ZVRvUmVhZCA9IGhhbmRsZS51bnJlYWRCeXRlcygpOwotICAgICAgICAgICAgTUVT
U0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRShzaXplVG9SZWFkLCBudWxscHRyLCAiTm8gdW5y
ZWFkIGJ5dGVzIHdoZW4gcmVzdW1pbmcgZGlzcGxheSBsaXN0IHByb2Nlc3NpbmciKTsKLQotICAg
ICAgICAgICAgYXV0byBuZXdEZXN0aW5hdGlvbklkZW50aWZpZXIgPSBtYWtlT2JqZWN0SWRlbnRp
ZmllcjxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXJUeXBlPihyZXN1bWVSZWFkaW5nSW5mby0+
ZGVzdGluYXRpb24pOwotICAgICAgICAgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxV
RShuZXdEZXN0aW5hdGlvbklkZW50aWZpZXIuaXNWYWxpZCgpLCBudWxscHRyLCAiSW52YWxpZCBp
bWFnZSBidWZmZXIgZGVzdGluYXRpb24gd2hlbiByZXN1bWluZyBkaXNwbGF5IGxpc3QgcHJvY2Vz
c2luZyIpOwotCi0gICAgICAgICAgICBkZXN0aW5hdGlvbiA9IG1fcmVtb3RlUmVzb3VyY2VDYWNo
ZS5jYWNoZWRJbWFnZUJ1ZmZlcihuZXdEZXN0aW5hdGlvbklkZW50aWZpZXIpOwotICAgICAgICAg
ICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRShkZXN0aW5hdGlvbiwgbnVsbHB0ciwg
Ik1pc3NpbmcgaW1hZ2UgYnVmZmVyIGRlc3RpbmF0aW9uIHdoZW4gcmVzdW1pbmcgZGlzcGxheSBs
aXN0IHByb2Nlc3NpbmciKTsKLQotICAgICAgICAgICAgb2Zmc2V0ID0gcmVzdW1lUmVhZGluZ0lu
Zm8tPm9mZnNldDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBkZXN0aW5hdGlvbjsK
LX0KLQotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp3YWtlVXBBbmRBcHBseURpc3BsYXlM
aXN0KGNvbnN0IEdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzJiBhcmd1bWVudHMpCi17
Ci0gICAgLy8gSW1tZWRpYXRlbHkgdHVybiB0aGUgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
ICh3aGljaCBpcyBlcnJvci1wcm9uZSkgdG8gYSBRdWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIsCi0gICAgLy8gYW5kIHVzZSBhIGhlbHBlciBmdW5jdGlvbiB0byBtYWtlIHN1cmUg
dGhhdCBkb24ndCBhY2NpZGVudGFsbHkgdXNlIHRoZSBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgKGJlY2F1c2UgdGhlIGhlbHBlciBmdW5jdGlvbiBjYW4ndCBzZWUgaXQpLgotICAgIHdha2VV
cEFuZEFwcGx5RGlzcGxheUxpc3RXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihhcmd1bWVudHMuaXRl
bUJ1ZmZlcklkZW50aWZpZXIsIGFyZ3VtZW50cy5vZmZzZXQsIHsgYXJndW1lbnRzLmRlc3RpbmF0
aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPndl
YlByb2Nlc3NJZGVudGlmaWVyKCkgfSwgYXJndW1lbnRzLnJlYXNvbik7Ci19Ci0KLXZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6d2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdFdpdGhRdWFsaWZp
ZWRJZGVudGlmaWVyKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBp
dGVtQnVmZmVySWRlbnRpZmllciwgdWludDY0X3Qgb2Zmc2V0LCBRdWFsaWZpZWRSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIsIEdQVVBy
b2Nlc3NXYWtldXBSZWFzb24gcmVhc29uKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwotCi0gICAgVHJhY2VTY29wZSB0cmFjaW5nU2NvcGUoV2FrZVVwQW5kQXBwbHlEaXNwbGF5
TGlzdFN0YXJ0LCBXYWtlVXBBbmRBcHBseURpc3BsYXlMaXN0RW5kKTsKLQotICAgIHVwZGF0ZUxh
c3RLbm93blN0YXRlKFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZTo6QmVnYW5SZXBsYXlpbmdE
aXNwbGF5TGlzdCk7Ci0KLSAgICBSZWZQdHIgZGVzdGluYXRpb25JbWFnZUJ1ZmZlciA9IG1fcmVt
b3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihkZXN0aW5hdGlvbkltYWdlQnVmZmVy
SWRlbnRpZmllci5vYmplY3QoKSk7Ci0gICAgTUVTU0FHRV9DSEVDSyhkZXN0aW5hdGlvbkltYWdl
QnVmZmVyLCAiTWlzc2luZyBkZXN0aW5hdGlvbiBpbWFnZSBidWZmZXIiKTsKLQotICAgIGF1dG8g
aW5pdGlhbEhhbmRsZSA9IG1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzLmdldChpdGVtQnVmZmVy
SWRlbnRpZmllcik7Ci0gICAgTUVTU0FHRV9DSEVDSyhpbml0aWFsSGFuZGxlLCAiTWlzc2luZyBp
bml0aWFsIHNoYXJlZCBkaXNwbGF5IGxpc3QgaGFuZGxlIik7Ci0KLSAgICBMT0dfV0lUSF9TVFJF
QU0oU2hhcmVkRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIldha2luZyB1cCB0byBJdGVtc1siIDw8
IGl0ZW1CdWZmZXJJZGVudGlmaWVyIDw8ICJdID0+IEltYWdlKCIgPDwgZGVzdGluYXRpb25JbWFn
ZUJ1ZmZlcklkZW50aWZpZXIub2JqZWN0KCkgPDwgIikgYXQgIiA8PCBvZmZzZXQpOwotICAgIGRl
c3RpbmF0aW9uSW1hZ2VCdWZmZXIgPSBuZXh0RGVzdGluYXRpb25JbWFnZUJ1ZmZlckFmdGVyQXBw
bHlpbmdEaXNwbGF5TGlzdHMoKmRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsIG9mZnNldCwgKmluaXRp
YWxIYW5kbGUsIHJlYXNvbiwgbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT53ZWJQcm9jZXNz
SWRlbnRpZmllcigpKTsKLQotICAgIC8vIEZJWE1FOiBBbGwgdGhlIGNhbGxlcnMgcGFzcyBtX3Bl
bmRpbmdXYWtldXBJbmZvJ3MgZmllbGRzIHNvIHRoZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24gc2hv
dWxkIGp1c3QgYmUgdGhpcyBsb29wLgotICAgIHdoaWxlIChkZXN0aW5hdGlvbkltYWdlQnVmZmVy
ICYmIG1fcGVuZGluZ1dha2V1cEluZm8pIHsKLSAgICAgICAgaWYgKG1fcGVuZGluZ1dha2V1cElu
Zm8tPm1pc3NpbmdDYWNoZWRSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBhdXRvIG5leHRIYW5kbGUgPSBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlcy5n
ZXQobV9wZW5kaW5nV2FrZXVwSW5mby0+aXRlbUJ1ZmZlcklkZW50aWZpZXIpOwotICAgICAgICBp
ZiAoIW5leHRIYW5kbGUpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBoYW5kbGUgaWRlbnRpZmll
ciBpcyBjdXJyZW50bHkgdW5rbm93biwgd2FpdCB1bnRpbCB0aGUgR1BVIHByb2Nlc3MgcmVjZWl2
ZXMgYW4KLSAgICAgICAgICAgIC8vIElQQyBtZXNzYWdlIHdpdGggYSBzaGFyZWQgbWVtb3J5IGhh
bmRsZSB0byB0aGUgbmV4dCBpdGVtIGJ1ZmZlci4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gT3RoZXJ3aXNlLCBjb250aW51ZSByZWFkaW5nIHRoZSBuZXh0IGRp
c3BsYXkgbGlzdCBpdGVtIGJ1ZmZlciBmcm9tIHRoZSBzdGFydC4KLSAgICAgICAgYXV0byBvZmZz
ZXQgPSBtX3BlbmRpbmdXYWtldXBJbmZvLT5vZmZzZXQ7Ci0gICAgICAgIGF1dG8gcmVhc29uID0g
bV9wZW5kaW5nV2FrZXVwSW5mby0+cmVhc29uOwotICAgICAgICBtX3BlbmRpbmdXYWtldXBJbmZv
ID0gc3RkOjpudWxsb3B0OwotICAgICAgICBkZXN0aW5hdGlvbkltYWdlQnVmZmVyID0gbmV4dERl
c3RpbmF0aW9uSW1hZ2VCdWZmZXJBZnRlckFwcGx5aW5nRGlzcGxheUxpc3RzKCpkZXN0aW5hdGlv
bkltYWdlQnVmZmVyLCBvZmZzZXQsICpuZXh0SGFuZGxlLCByZWFzb24sIG1fZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2Vzcy0+d2ViUHJvY2Vzc0lkZW50aWZpZXIoKSk7Ci0gICAgfQotICAgIExPR19X
SVRIX1NUUkVBTShTaGFyZWREaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiR29pbmcgYmFjayB0byBz
bGVlcC4iKTsKLQotICAgIGlmIChtX3BlbmRpbmdXYWtldXBJbmZvKQotICAgICAgICB1cGRhdGVM
YXN0S25vd25TdGF0ZShtX3BlbmRpbmdXYWtldXBJbmZvLT5zdGF0ZSk7Ci0gICAgZWxzZQotICAg
ICAgICB1cGRhdGVMYXN0S25vd25TdGF0ZShSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGU6OkZp
bmlzaGVkUmVwbGF5aW5nRGlzcGxheUxpc3QpOwotfQotCi12b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OnNldE5leHRJdGVtQnVmZmVyVG9SZWFkKERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRl
bnRpZmllciBpZGVudGlmaWVyLCBRdWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
ZGVzdGluYXRpb25JZGVudGlmaWVyKQotewotICAgIG1fcGVuZGluZ1dha2V1cEluZm8gPSB7ewot
ICAgICAgICBpZGVudGlmaWVyLAotICAgICAgICBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6aGVh
ZGVyU2l6ZSgpLAotICAgICAgICBkZXN0aW5hdGlvbklkZW50aWZpZXIsCi0gICAgICAgIEdQVVBy
b2Nlc3NXYWtldXBSZWFzb246OlVuc3BlY2lmaWVkLAotICAgICAgICBzdGQ6Om51bGxvcHQsCi0g
ICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZTo6V2FpdGluZ0Zvckl0ZW1CdWZmZXIK
LSAgICB9fTsKIH0KIAogc3RkOjpvcHRpb25hbDxTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZT4gUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXJI
ZWxwZXIoc2l6ZV90IGJ5dGVDb3VudCkKQEAgLTU0Nyw5ICszMjUsNiBAQCB2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmNhY2hlTmF0aXZlSW1hZ2VXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihj
b25zdCBTaGFyZQogICAgICAgICByZXR1cm47CiAKICAgICBtX3JlbW90ZVJlc291cmNlQ2FjaGUu
Y2FjaGVOYXRpdmVJbWFnZSgqaW1hZ2UpOwotCi0gICAgaWYgKG1fcGVuZGluZ1dha2V1cEluZm8g
JiYgbV9wZW5kaW5nV2FrZXVwSW5mby0+c2hvdWxkUGVyZm9ybVdha2V1cChuYXRpdmVJbWFnZVJl
c291cmNlSWRlbnRpZmllcikpCi0gICAgICAgIHJlc3VtZUZyb21QZW5kaW5nV2FrZXVwSW5mb3Jt
YXRpb24oKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjYWNoZUZvbnQoUmVm
PFdlYkNvcmU6OkZvbnQ+JiYgZm9udCkKQEAgLTU2MywxMCArMzM4LDcgQEAgdm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYgZm9udCkKIHZv
aWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y2FjaGVGb250V2l0aFF1YWxpZmllZElkZW50aWZp
ZXIoUmVmPEZvbnQ+JiYgZm9udCwgUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IGZvbnRSZXNvdXJjZUlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0KICAgICBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVGb250KFdURk1vdmUoZm9udCkp
OwotICAgIGlmIChtX3BlbmRpbmdXYWtldXBJbmZvICYmIG1fcGVuZGluZ1dha2V1cEluZm8tPnNo
b3VsZFBlcmZvcm1XYWtldXAoZm9udFJlc291cmNlSWRlbnRpZmllcikpCi0gICAgICAgIHJlc3Vt
ZUZyb21QZW5kaW5nV2FrZXVwSW5mb3JtYXRpb24oKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpkZWxldGVBbGxGb250cygpCkBAIC01OTIsMTY5ICszNjQsOSBAQCB2b2lkIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZVdpdGhRdWFsaWZpZWRJ
ZGVudGlmaWVyKFF1YWxpZgogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZpbmFsaXpl
UmVuZGVyaW5nVXBkYXRlKFJlbmRlcmluZ1VwZGF0ZUlEIHJlbmRlcmluZ1VwZGF0ZUlEKQogewot
ICAgIGF1dG8gc2hvdWxkUGVyZm9ybVdha2V1cCA9IFsmXSB7Ci0gICAgICAgIHJldHVybiBtX3Jl
bW90ZVJlc291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIobV9wZW5kaW5nV2FrZXVwSW5mby0+
ZGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIub2JqZWN0KCkpICYmIG1fc2hhcmVkRGlz
cGxheUxpc3RIYW5kbGVzLmNvbnRhaW5zKG1fcGVuZGluZ1dha2V1cEluZm8tPml0ZW1CdWZmZXJJ
ZGVudGlmaWVyKTsKLSAgICB9OwotCi0gICAgaWYgKG1fcGVuZGluZ1dha2V1cEluZm8gJiYgc2hv
dWxkUGVyZm9ybVdha2V1cCgpKQotICAgICAgICByZXN1bWVGcm9tUGVuZGluZ1dha2V1cEluZm9y
bWF0aW9uKCk7Ci0KICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OkRpZEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKHJlbmRlcmluZ1VwZGF0ZUlEKSwgbV9yZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6ZGlkQ3JlYXRlU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoRGlzcGxheUxpc3Q6Okl0ZW1CdWZm
ZXJJZGVudGlmaWVyIGl0ZW1CdWZmZXJJZGVudGlmaWVyLCBjb25zdCBTaGFyZWRNZW1vcnk6OklQ
Q0hhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb25C
dWZmZXJJZGVudGlmaWVyKQotewotICAgIC8vIEltbWVkaWF0ZWx5IHR1cm4gdGhlIFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciAod2hpY2ggaXMgZXJyb3ItcHJvbmUpIHRvIGEgUXVhbGlmaWVk
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLAotICAgIC8vIGFuZCB1c2UgYSBoZWxwZXIgZnVu
Y3Rpb24gdG8gbWFrZSBzdXJlIHRoYXQgZG9uJ3QgYWNjaWRlbnRhbGx5IHVzZSB0aGUgUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIChiZWNhdXNlIHRoZSBoZWxwZXIgZnVuY3Rpb24gY2FuJ3Qg
c2VlIGl0KS4KLSAgICBkaWRDcmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZVdpdGhRdWFsaWZp
ZWRJZGVudGlmaWVyKGl0ZW1CdWZmZXJJZGVudGlmaWVyLCBoYW5kbGUsIHsgZGVzdGluYXRpb25C
dWZmZXJJZGVudGlmaWVyLCBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPndlYlByb2Nlc3NJ
ZGVudGlmaWVyKCkgfSk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkQ3Jl
YXRlU2hhcmVkRGlzcGxheUxpc3RIYW5kbGVXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihEaXNwbGF5
TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaXRlbUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IFNo
YXJlZE1lbW9yeTo6SVBDSGFuZGxlJiBoYW5kbGUsIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBNRVNT
QUdFX0NIRUNLKCFtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlcy5jb250YWlucyhpdGVtQnVmZmVy
SWRlbnRpZmllciksICJEdXBsaWNhdGUgc2hhcmVkIGRpc3BsYXkgbGlzdCBoYW5kbGUiKTsKLQot
ICAgIGlmIChhdXRvIHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6bWFwKGhhbmRsZS5oYW5k
bGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZFdyaXRlKSkgewotICAgICAgICBhdXRv
IGhhbmRsZSA9IERpc3BsYXlMaXN0UmVhZGVySGFuZGxlOjpjcmVhdGUoaXRlbUJ1ZmZlcklkZW50
aWZpZXIsIHNoYXJlZE1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgTUVTU0FHRV9D
SEVDSyhoYW5kbGUsICJUaGVyZSBtdXN0IGJlIGVub3VnaCBzcGFjZSB0byBjcmVhdGUgdGhlIGhh
bmRsZS4iKTsKLSAgICAgICAgbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXMuc2V0KGl0ZW1CdWZm
ZXJJZGVudGlmaWVyLCBoYW5kbGUpOwotICAgIH0KLQotICAgIGlmIChtX3BlbmRpbmdXYWtldXBJ
bmZvICYmIG1fcGVuZGluZ1dha2V1cEluZm8tPnNob3VsZFBlcmZvcm1XYWtldXAoaXRlbUJ1ZmZl
cklkZW50aWZpZXIpKQotICAgICAgICByZXN1bWVGcm9tUGVuZGluZ1dha2V1cEluZm9ybWF0aW9u
KCk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVzdW1lRnJvbVBlbmRpbmdX
YWtldXBJbmZvcm1hdGlvbigpCi17Ci0gICAgYXV0byBpdGVtQnVmZmVySWRlbnRpZmllciA9IG1f
cGVuZGluZ1dha2V1cEluZm8tPml0ZW1CdWZmZXJJZGVudGlmaWVyOwotICAgIGF1dG8gb2Zmc2V0
ID0gbV9wZW5kaW5nV2FrZXVwSW5mby0+b2Zmc2V0OwotICAgIGF1dG8gZGVzdGluYXRpb25JbWFn
ZUJ1ZmZlcklkZW50aWZpZXIgPSBtX3BlbmRpbmdXYWtldXBJbmZvLT5kZXN0aW5hdGlvbkltYWdl
QnVmZmVySWRlbnRpZmllcjsKLSAgICBhdXRvIHJlYXNvbiA9IG1fcGVuZGluZ1dha2V1cEluZm8t
PnJlYXNvbjsKLSAgICBtX3BlbmRpbmdXYWtldXBJbmZvID0gc3RkOjpudWxsb3B0OwotICAgIHdh
a2VVcEFuZEFwcGx5RGlzcGxheUxpc3RXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihpdGVtQnVmZmVy
SWRlbnRpZmllciwgb2Zmc2V0LCBkZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllciwgcmVh
c29uKTsKLX0KLQotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVNYXNrSW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQotewotICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwotICAgIE1FU1NBR0VfQ0hFQ0soIW1fY3VycmVudE1hc2tJbWFnZUJ1ZmZl
ciwgIkN1cnJlbnQgbWFzayBpbWFnZSBidWZmZXIgaXMgYWxyZWFkeSBzZXQuIik7Ci0gICAgbV9j
dXJyZW50TWFza0ltYWdlQnVmZmVyID0gJmltYWdlQnVmZmVyOwotfQotCi12b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmRpZFJlc2V0TWFza0ltYWdlQnVmZmVyKCkKLXsKLSAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBNRVNTQUdFX0NIRUNLKG1fY3VycmVudE1hc2tJbWFn
ZUJ1ZmZlciwgIkN1cnJlbnQgbWFzayBpbWFnZSBidWZmZXIgd2FzIG5vdCBhbHJlYWR5IHNldC4i
KTsKLSAgICBtX2N1cnJlbnRNYXNrSW1hZ2VCdWZmZXIgPSBudWxscHRyOwotfQotCi1zdGQ6Om9w
dGlvbmFsPERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6ZGVjb2RlSXRlbShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qg
bGVuZ3RoLCBEaXNwbGF5TGlzdDo6SXRlbVR5cGUgdHlwZSwgdWludDhfdCogaGFuZGxlTG9jYXRp
b24pCi17Ci0gICAgLyogVGhpcyBuZWVkcyB0byBtYXRjaCAoMSkgaXNJbmxpbmVJdGVtKCkgaW4g
RGlzcGxheUxpc3RJdGVtVHlwZS5jcHAsICgyKSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjplbmNv
ZGVJdGVtKCksCi0gICAgICogYW5kICgzKSBhbGwgdGhlICJzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtInMgaW5zaWRlIHRoZSBpbmRpdmlkdWFsIGl0ZW0gY2xhc3Nlcy4KLSAgICAg
KiBTZWUgdGhlIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiBEaXNwbGF5TGlzdEl0ZW1zLmggZm9yIHdo
eS4gKi8KLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpCZWdpbkNsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFu
ZENyZWF0ZTxEaXNwbGF5TGlzdDo6QmVnaW5DbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGRhdGEsIGxl
bmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpD
bGlwT3V0VG9QYXRoOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0
OjpDbGlwT3V0VG9QYXRoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNl
IERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgICAgIHJldHVybiBkZWNvZGVB
bmRDcmVhdGU8RGlzcGxheUxpc3Q6OkNsaXBQYXRoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0
aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6
Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1Jp
bmdQYXRoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAgICByZXR1cm4gZGVjb2Rl
QW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM+KGRhdGEsIGxlbmd0aCwg
aGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3R2x5
cGhzOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpEcmF3R2x5
cGhzPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENy
ZWF0ZTxEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVM
b2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdQYXRoOgotICAg
ICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpEcmF3UGF0aD4oZGF0YSwg
bGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNw
bGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9u
KTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFBhdGg6Ci0gICAgICAgIHJl
dHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkZpbGxQYXRoPihkYXRhLCBsZW5ndGgs
IGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoQ29sb3I6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6
OkZpbGxSZWN0V2l0aENvbG9yPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBj
YXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAg
IHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50
PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAgIHJldHVybiBkZWNvZGVB
bmRDcmVhdGU8RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihkYXRhLCBsZW5n
dGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Rmls
bFJvdW5kZWRSZWN0OgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0
OjpGaWxsUm91bmRlZFJlY3Q+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNh
c2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjoKLSAgICAgICAgcmV0dXJu
IGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6R2V0UGl4ZWxCdWZmZXI+KGRhdGEsIGxlbmd0
aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQdXRQ
aXhlbEJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6
UHV0UGl4ZWxCdWZmZXI+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2Ug
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIGRlY29k
ZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g+KGRhdGEsIGxlbmd0aCwgaGFuZGxl
TG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdGF0ZToKLSAg
ICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6U2V0U3RhdGU+KGRhdGEs
IGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpTdHJva2VQYXRoOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0
OjpTdHJva2VQYXRoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSNpZiBVU0UoQ0cp
Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46Ci0gICAg
Y2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSNlbmRpZgot
ICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgot
ICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVhclJlY3Q6Ci0gICAgY2FzZSBEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpDbGlwOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0Ogot
ICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjoKLSAgICBj
YXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOgotICAg
IGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICBjYXNlIERp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKLSAgICBjYXNl
IERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgY2FzZSBEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6RHJhd05hdGl2ZUltYWdlOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpE
cmF3UGF0dGVybjoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xpbmU6Ci0g
ICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdSZWN0OgotICAgIGNhc2UgRGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKLSAgICBjYXNlIERpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RmlsbEVsbGlwc2U6Ci0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEp
Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxMaW5lOgotICAgIGNhc2UgRGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsQXJjOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpGaWxsUXVhZEN1cnZlOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxs
QmV6aWVyQ3VydmU6Ci0jZW5kaWYKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Rmls
bFJlY3Q6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZsdXNoQ29udGV4dDoKLSAg
ICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlv
bkltYWdlQnVmZmVyOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpNZXRhQ29tbWFu
ZENoYW5nZUl0ZW1CdWZmZXI6Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIGNhc2UgRGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6Ci0jZW5kaWYKLSAgICBjYXNlIERpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6UmVzdG9yZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6Um90YXRlOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTYXZlOgotICAgIGNh
c2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTY2FsZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2V0Q1RNOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxp
bmVGaWxsQ29sb3I6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZVN0
cm9rZUNvbG9yOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgot
ICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICBjYXNlIERp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICBjYXNlIERpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAg
IGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VBcmM6Ci0gICAgY2FzZSBEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVF1YWRDdXJ2ZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U3Ryb2tlQmV6aWVyQ3VydmU6Ci0jZW5kaWYKLSAgICBjYXNlIERpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U3Ryb2tlTGluZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VHJhbnNsYXRlOgot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLX0KLQogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVSZW5kZXJpbmdS
ZXNvdXJjZVJlcXVlc3QoKQogewogICAgIGJvb2wgaGFzQWN0aXZlRHJhd2FibGVzID0gbV9yZW1v
dGVSZXNvdXJjZUNhY2hlLmhhc0FjdGl2ZURyYXdhYmxlcygpOwpAQCAtNzcxLDE4ICszODMsNiBA
QCBib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFsbG93c0V4aXRVbmRlck1lbW9yeVByZXNz
dXJlKCkgY29uc3QKICAgICByZXR1cm4gIW1fcmVtb3RlUmVzb3VyY2VDYWNoZS5oYXNBY3RpdmVE
cmF3YWJsZXMoKTsKIH0KIAotUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6Omxhc3RLbm93blN0YXRlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwotICAgIHJldHVybiBtX2xhc3RLbm93blN0YXRlLmxvYWQoKTsKLX0KLQot
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVMYXN0S25vd25TdGF0ZShSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kU3RhdGUgc3RhdGUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgbV9sYXN0S25vd25TdGF0ZS5zdG9yZVJlbGF4ZWQoc3RhdGUpOwotfQotCiB2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnBlcmZvcm1XaXRoTWVkaWFQbGF5ZXJPbk1haW5U
aHJlYWQoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoTWVk
aWFQbGF5ZXImKT4mJiBjYWxsYmFjaykKIHsKICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQo
WyYsIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MsIGlkZW50aWZpZXJdIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCmluZGV4IDYyOGVjMzliNmExODli
ODJlYmE0ZmZmMjU4ZjY2YWQ5NjgwZDcyZDUuLmU4ZjMxMWJjMmUyZTYwZDZmOGQ4ZTJlNzA0MTYz
YjM5NTI1YWEzZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMjgsMTcgKzI4LDIwIEBACiAj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1
ZGUgIkdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSVBDU2Vt
YXBob3JlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgiCiAjaW5jbHVk
ZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1
ZGUgIlF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaCIKICNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kU3RhdGUuaCIKICNpbmNsdWRlICJSZW1vdGVSZXNvdXJjZUNhY2hlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdVcGRhdGVJ
RC5oIgogI2luY2x1ZGUgIlNjb3BlZFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuaCIKKyNpbmNs
dWRlICJTdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmgiCisjaW5jbHVkZSAiU3RyZWFtTWVzc2Fn
ZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3Qu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KQEAgLTQ3LDExICs1MCw2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKLWNs
YXNzIERpc3BsYXlMaXN0OwotY2xhc3MgSXRlbTsKLX0KLQogY2xhc3MgRGVzdGluYXRpb25Db2xv
clNwYWNlOwogY2xhc3MgRmxvYXRTaXplOwogY2xhc3MgTmF0aXZlSW1hZ2U7CkBAIC02MiwzNCAr
NjAsMjUgQEAgZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIDogYm9vbDsKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLWNsYXNzIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlOwogY2xhc3MgR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2VzczsKK2NsYXNzIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI7CiBzdHJ1
Y3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVyczsKIAotY2xhc3MgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZAotICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKLSAg
ICAsIHB1YmxpYyBJUEM6OkNvbm5lY3Rpb246OldvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlcgotICAg
ICwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCB7
CitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5k
ZXIsIHB1YmxpYyBJUEM6OlN0cmVhbU1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0KLSAgICBz
dGF0aWMgUmVmPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzJiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmKTsK
KyAgICBzdGF0aWMgUmVmPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZShHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzJiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVy
cyYmLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJik7CiAgICAgdmlydHVhbCB+UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZCgpOwogICAgIHZvaWQgc3RvcExpc3RlbmluZ0ZvcklQQygpOwogCiAg
ICAgUmVtb3RlUmVzb3VyY2VDYWNoZSYgcmVtb3RlUmVzb3VyY2VDYWNoZSgpIHsgcmV0dXJuIG1f
cmVtb3RlUmVzb3VyY2VDYWNoZTsgfQogCi0gICAgLy8gUmVuZGVyaW5nIG9wZXJhdGlvbnMuCi0g
ICAgYm9vbCBhcHBseU1lZGlhSXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSwg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBkaWRSZWNlaXZlU3RyZWFtTWVz
c2FnZShJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlJiwgSVBDOjpEZWNvZGVyJikgZmlu
YWw7CisgICAgdm9pZCBkaWRCZWdpbkxpc3RlbmluZ0ZvcklQQyhSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyJik7CiAKICAgICAvLyBNZXNzYWdlcyB0byBiZSBzZW50LgogICAgIHZvaWQgZGlkQ3Jl
YXRlSW1hZ2VCdWZmZXJCYWNrZW5kKEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSwgUXVhbGlmaWVk
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGRpZEZsdXNoKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllciwgUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKTsKIAotICAgIHZvaWQgc2V0TmV4dEl0ZW1CdWZmZXJUb1JlYWQoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBRdWFsaWZpZWRSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb24pOwotCi0gICAgdm9pZCBkaWRDcmVhdGVNYXNr
SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKTsKLSAgICB2b2lkIGRpZFJlc2V0TWFz
a0ltYWdlQnVmZmVyKCk7Ci0KICAgICB2b2lkIHBvcHVsYXRlR2V0UGl4ZWxCdWZmZXJTaGFyZWRN
ZW1vcnkoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4mJik7CiAKICAgICBib29s
IGFsbG93c0V4aXRVbmRlck1lbW9yeVByZXNzdXJlKCkgY29uc3Q7CkBAIC05Nyw0NyArODYsMjIg
QEAgcHVibGljOgogICAgIC8vIFJ1bnMgRnVuY3Rpb24gaW4gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZCB0YXNrIHF1ZXVlLgogICAgIHZvaWQgZGlzcGF0Y2goRnVuY3Rpb248dm9pZCgpPiYmKTsKIAot
ICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZSBsYXN0S25vd25TdGF0ZSgpIGNvbnN0Owot
CisgICAgSVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uJiBzdHJlYW1Db25uZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJlYW1Db25uZWN0aW9uLmdldCgpOyB9CiAgICAgdm9pZCBwZXJmb3Jt
V2l0aE1lZGlhUGxheWVyT25NYWluVGhyZWFkKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmll
ciwgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpNZWRpYVBsYXllciYpPiYmKTsKIAogcHJpdmF0ZToK
LSAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzJiYpOworICAgIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJiwgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVy
JiYpOwogICAgIHZvaWQgc3RhcnRMaXN0ZW5pbmdGb3JJUEMoKTsKIAotICAgIHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVSTiBk
ZWNvZGVJdGVtKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgsIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZSwgdWludDhfdCogaGFuZGxlTG9jYXRpb24pIG92ZXJyaWRlOwot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlQW5kQ3JlYXRl
KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QqIGhhbmRsZUxvY2F0
aW9uKQotICAgIHsKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IElQQzo6RGVjb2Rlcjo6ZGVjb2Rl
U2luZ2xlT2JqZWN0PFQ+KGRhdGEsIGxlbmd0aCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBX
ZWJLaXQyIHNob3VsZCBub3QgbmVlZCB0byBrbm93IHRoYXQgdGhlIGZpcnN0IDggYnl0ZXMgYXQg
dGhlIGhhbmRsZSBhcmUgcmVzZXJ2ZWQgZm9yIHRoZSB0eXBlLgotICAgICAgICAgICAgLy8gTmVl
ZCB0byBmaWd1cmUgb3V0IGEgd2F5IHRvIGtlZXAgdGhpcyBrbm93bGVkZ2Ugd2l0aGluIGRpc3Bs
YXkgbGlzdCBjb2RlIGluIFdlYkNvcmUuCi0gICAgICAgICAgICBuZXcgKGhhbmRsZUxvY2F0aW9u
ICsgc2l6ZW9mKHVpbnQ2NF90KSkgVChXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgICAgICByZXR1
cm4ge3sgaGFuZGxlTG9jYXRpb24gfX07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLSAgICB9Ci0KLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5UmVzdWx0
IHN1Ym1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBXZWJDb3Jl
OjpJbWFnZUJ1ZmZlciYgZGVzdGluYXRpb24pOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1
ZmZlcj4gbmV4dERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJBZnRlckFwcGx5aW5nRGlzcGxheUxpc3Rz
KFdlYkNvcmU6OkltYWdlQnVmZmVyJiBpbml0aWFsRGVzdGluYXRpb24sIHNpemVfdCBpbml0aWFs
T2Zmc2V0LCBEaXNwbGF5TGlzdFJlYWRlckhhbmRsZSYsIEdQVVByb2Nlc3NXYWtldXBSZWFzb24s
IFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHdlYlByb2Nlc3NJZGVudGlmaWVyKTsKLQogICAg
IHN0ZDo6b3B0aW9uYWw8U2hhcmVkTWVtb3J5OjpJUENIYW5kbGU+IHVwZGF0ZVNoYXJlZE1lbW9y
eUZvckdldFBpeGVsQnVmZmVySGVscGVyKHNpemVfdCBieXRlQ291bnQpOwogICAgIHZvaWQgdXBk
YXRlUmVuZGVyaW5nUmVzb3VyY2VSZXF1ZXN0KCk7CiAKLSAgICB2b2lkIHVwZGF0ZUxhc3RLbm93
blN0YXRlKFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZSk7Ci0KICAgICAvLyBJUEM6Ok1lc3Nh
Z2VTZW5kZXIuCiAgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklE
KCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgotICAgIHZv
aWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3Zl
cnJpZGU7Ci0gICAgYm9vbCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpEZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mKSBvdmVycmlkZTsKLQogICAg
IC8vIE1lc3NhZ2VzIHRvIGJlIHJlY2VpdmVkLgogICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIo
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmLCBXZWJDb3JlOjpQaXhlbEZvcm1hdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKTsKLSAgICB2b2lkIHdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3QoY29uc3Qg
R1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMmKTsKICAgICB2b2lkIHVwZGF0ZVNoYXJl
ZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpPiYmKTsKICAgICB2b2lk
IHNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
SVBDOjpTZW1hcGhvcmUmKT4mJik7CiAgICAgdm9pZCB1cGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1h
cGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmLCBjb25zdCBJUEM6OlNlbWFw
aG9yZSYpPiYmKTsKQEAgLTE1MCwxMCArMTE0LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlbGV0
ZUFsbEZvbnRzKCk7CiAgICAgdm9pZCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCk7CiAgICAgdm9pZCBm
aW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShSZW5kZXJpbmdVcGRhdGVJRCk7Ci0gICAgdm9pZCBkaWRD
cmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1
ZmZlcklkZW50aWZpZXIsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGRlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcik7
CiAKICAgICAvLyBSZWNlaXZlZCBtZXNzYWdlcyB0cmFuc2xhdGVkIHRvIHVzZSBRdWFsaWZpZWRS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuCi0gICAgdm9pZCB3YWtlVXBBbmRBcHBseURpc3Bs
YXlMaXN0V2l0aFF1YWxpZmllZElkZW50aWZpZXIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1C
dWZmZXJJZGVudGlmaWVyLCB1aW50NjRfdCBvZmZzZXQsIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciwgR1BVUHJvY2Vzc1dha2V1cFJlYXNvbik7CiAgICAgdm9pZCBjcmVhdGVJ
bWFnZUJ1ZmZlcldpdGhRdWFsaWZpZWRJZGVudGlmaWVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgY29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgV2ViQ29yZTo6UGl4
ZWxGb3JtYXQsIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9p
ZCBnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXJXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6
UHJlc2VydmVSZXNvbHV0aW9uLCBRdWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdldERhdGFG
b3JJbWFnZUJ1ZmZlcldpdGhRdWFsaWZpZWRJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBRdWFsaWZpZWRSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYp
PiYmKTsKQEAgLTE2Myw1NCArMTI1LDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWxlYXNlUmVt
b3RlUmVzb3VyY2VXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihRdWFsaWZpZWRSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KTsKICAgICB2b2lkIGNhY2hlRm9udFdp
dGhRdWFsaWZpZWRJZGVudGlmaWVyKFJlZjxXZWJDb3JlOjpGb250PiYmLCBRdWFsaWZpZWRSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogCi0gICAgdm9pZCByZXN1bWVGcm9tUGVuZGluZ1dh
a2V1cEluZm9ybWF0aW9uKCk7Ci0KLSAgICBjbGFzcyBSZXBsYXllckRlbGVnYXRlIDogcHVibGlj
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6RGVsZWdhdGUgewotICAgIHB1YmxpYzoK
LSAgICAgICAgUmVwbGF5ZXJEZWxlZ2F0ZShXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQmKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wgYXBwbHkoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYp
IGZpbmFsOwotICAgICAgICB2b2lkIGRpZENyZWF0ZU1hc2tJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJ
bWFnZUJ1ZmZlciYpIGZpbmFsOwotICAgICAgICB2b2lkIGRpZFJlc2V0TWFza0ltYWdlQnVmZmVy
KCkgZmluYWw7Ci0gICAgICAgIHZvaWQgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKSBmaW5hbDsKLQotICAgICAgICBXZWJDb3JlOjpJbWFnZUJ1
ZmZlciYgbV9kZXN0aW5hdGlvbjsKLSAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGVuZGluZ1dha2V1
cEluZm9ybWF0aW9uIHsKLSAgICAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJ
ZGVudGlmaWVyIGl0ZW1CdWZmZXJJZGVudGlmaWVyOwotICAgICAgICB1aW50NjRfdCBvZmZzZXQg
eyAwIH07Ci0gICAgICAgIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0
aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllcjsKLSAgICAgICAgR1BVUHJvY2Vzc1dha2V1cFJl
YXNvbiByZWFzb24geyBHUFVQcm9jZXNzV2FrZXVwUmVhc29uOjpVbnNwZWNpZmllZCB9OwotICAg
ICAgICBzdGQ6Om9wdGlvbmFsPFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4g
bWlzc2luZ0NhY2hlZFJlc291cmNlSWRlbnRpZmllcjsKLSAgICAgICAgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFN0YXRlIHN0YXRlIHsgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpJbml0aWFs
aXplZCB9OwotCi0gICAgICAgIGJvb2wgc2hvdWxkUGVyZm9ybVdha2V1cChRdWFsaWZpZWRSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaWRlbnRpZmllcikgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyID09IGlkZW50
aWZpZXIKLSAgICAgICAgICAgICAgICB8fCBtaXNzaW5nQ2FjaGVkUmVzb3VyY2VJZGVudGlmaWVy
ID09IGlkZW50aWZpZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHNob3VsZFBlcmZvcm1X
YWtldXAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZp
ZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVtQnVmZmVySWRlbnRp
ZmllciA9PSBpZGVudGlmaWVyOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIFJlZjxXb3JrUXVl
dWU+IG1fd29ya1F1ZXVlOworICAgIElQQzo6U3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZSBtX3dv
cmtRdWV1ZTsKKyAgICBSZWY8SVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uPiBtX3N0cmVhbUNv
bm5lY3Rpb247CiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZSBtX3JlbW90ZVJlc291cmNlQ2FjaGU7
CiAgICAgUmVmPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzczsKICAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyOwotICAgIEhhc2hNYXA8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZm
ZXJJZGVudGlmaWVyLCBSZWZQdHI8RGlzcGxheUxpc3RSZWFkZXJIYW5kbGU+PiBtX3NoYXJlZERp
c3BsYXlMaXN0SGFuZGxlczsKLSAgICBzdGQ6Om9wdGlvbmFsPFBlbmRpbmdXYWtldXBJbmZvcm1h
dGlvbj4gbV9wZW5kaW5nV2FrZXVwSW5mbzsKLSAgICBJUEM6OlNlbWFwaG9yZSBtX3Jlc3VtZURp
c3BsYXlMaXN0U2VtYXBob3JlOwogICAgIElQQzo6U2VtYXBob3JlIG1fZ2V0UGl4ZWxCdWZmZXJT
ZW1hcGhvcmU7CiAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9nZXRQaXhlbEJ1ZmZlclNoYXJl
ZE1lbW9yeTsKICAgICBTY29wZWRSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0IG1fcmVuZGVyaW5n
UmVzb3VyY2VzUmVxdWVzdDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IG1fY3Vy
cmVudE1hc2tJbWFnZUJ1ZmZlcjsKLSAgICBBdG9taWM8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0
YXRlPiBtX2xhc3RLbm93blN0YXRlIHsgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpJbml0
aWFsaXplZCB9OworICAgIFdlYWtIYXNoU2V0PFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI+IG1f
cmVtb3RlRGlzcGxheUxpc3RzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IDFlZjU2ZGNjOTc2Mjc0ZTM1NmFi
MjJiNGVhNGU3MWJjZmFjMGIwZGYuLmExNDJmNDg5NjZmNWM0OTc1OTQ1NjU0NzcyYzc5YzMxOTc2
ZjUzZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0yMiwy
MCArMjIsMTggQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMgLT4gUmVt
b3RlUmVuZGVyaW5nQmFja2VuZCB7CittZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
IE5vdFJlZkNvdW50ZWQgU3RyZWFtIHsKICAgICBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpG
bG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgZW51bTp1aW50OF90IFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKQotICAgIFdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3Qoc3RydWN0IFdlYktpdDo6
R1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMgYXJndW1lbnRzKQotICAgIFVwZGF0ZVNo
YXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCkgLT4gKFdlYktp
dDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cwotICAgIFNlbWFw
aG9yZUZvckdldFBpeGVsQnVmZmVyKCkgLT4gKElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3lu
Y2hyb25vdXMKLSAgICBVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1
ZmZlcih1aW50MzJfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFu
ZGxlIGhhbmRsZSwgSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cworICAgIFVw
ZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCkgLT4g
KFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cyBOb3RT
dHJlYW1FbmNvZGFibGVSZXBseQorICAgIFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKCkgLT4g
KElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMgTm90U3RyZWFtRW5jb2RhYmxl
UmVwbHkKKyAgICBVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZl
cih1aW50MzJfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxl
IGhhbmRsZSwgSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cyBOb3RTdHJlYW1F
bmNvZGFibGVSZXBseQogICAgIERlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpCiAg
ICAgR2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgc3RkOjpvcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRp
b24gcHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoU3RyaW5nIHVybFN0cmluZykgU3lu
Y2hyb25vdXMKICAgICBHZXREYXRhRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBzdGQ6
Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rvcjx1aW50OF90PiBk
YXRhKSBTeW5jaHJvbm91cwotICAgIEdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyKFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgZW51bTp1aW50
OF90IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIC0+IChX
ZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKLSAgICBD
YWNoZU5hdGl2ZUltYWdlKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlLCBX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKQotICAgIENhY2hlRm9udChJUEM6OkZvbnRSZWZlcmVuY2UgZm9udCkKKyAgICBHZXRT
aGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgaW1hZ2VCdWZmZXIsIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29s
dXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSAtPiAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzIE5vdFN0cmVhbUVuY29kYWJsZVJlcGx5CisgICAgQ2Fj
aGVOYXRpdmVJbWFnZShXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSwgV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcikgTm90U3RyZWFtRW5jb2RhYmxlCisgICAgQ2FjaGVGb250KElQQzo6Rm9udFJlZmVyZW5j
ZSBmb250KSBOb3RTdHJlYW1FbmNvZGFibGUKICAgICBEZWxldGVBbGxGb250cygpCi0gICAgRGlk
Q3JlYXRlU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1C
dWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5k
bGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRp
b25CdWZmZXJJZGVudGlmaWVyKQogICAgIFJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1
aW50NjRfdCB1c2VDb3VudCkKICAgICBGaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShXZWJLaXQ6OlJl
bmRlcmluZ1VwZGF0ZUlEIHJlbmRlcmluZ1VwZGF0ZUlEKQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlv
blBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggNDRhMjc4MjY1MmE4ZmVi
MTNkNWQ0Y2E3NTUxMDFmMGYzZWJlZGU4Yy4uMTc5N2Q1YmE0YWExMWY1ZmE0ZjU3MzE5MGVlNTBm
YzhiYjdiOTkwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9u
UGFyYW1ldGVycy5oCkBAIC0zNiwxMyArMzYsMTIgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0
cnVjdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBSZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllciBpZGVudGlmaWVyOwotICAgIElQQzo6U2VtYXBob3JlIHJl
c3VtZURpc3BsYXlMaXN0U2VtYXBob3JlOwogICAgIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFn
ZVByb3h5SUQ7CiAgICAgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlEOwogCiAgICAgdm9p
ZCBlbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgZW5j
b2RlciA8PCBpZGVudGlmaWVyIDw8IHJlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlIDw8IHBhZ2VQ
cm94eUlEIDw8IHBhZ2VJRDsKKyAgICAgICAgZW5jb2RlciA8PCBpZGVudGlmaWVyIDw8IHBhZ2VQ
cm94eUlEIDw8IHBhZ2VJRDsKICAgICB9CiAKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzPiBkZWNvZGUoSVBDOjpEZWNvZGVy
JiBkZWNvZGVyKQpAQCAtNTIsMTEgKzUxLDYgQEAgc3RydWN0IFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRDcmVhdGlvblBhcmFtZXRlcnMgewogICAgICAgICBpZiAoIWlkZW50aWZpZXIpCiAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8SVBDOjpT
ZW1hcGhvcmU+IHJlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlOwotICAgICAgICBkZWNvZGVyID4+
IHJlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlOwotICAgICAgICBpZiAoIXJlc3VtZURpc3BsYXlM
aXN0U2VtYXBob3JlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQogICAgICAg
ICBzdGQ6Om9wdGlvbmFsPFdlYlBhZ2VQcm94eUlkZW50aWZpZXI+IHBhZ2VQcm94eUlEOwogICAg
ICAgICBkZWNvZGVyID4+IHBhZ2VQcm94eUlEOwogICAgICAgICBpZiAoIXBhZ2VQcm94eUlEKQpA
QCAtNjcsNyArNjEsNyBAQCBzdHJ1Y3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFy
YW1ldGVycyB7CiAgICAgICAgIGlmICghcGFnZUlEKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKIAotICAgICAgICByZXR1cm4ge3sgKmlkZW50aWZpZXIsIFdURk1vdmUoKnJlc3Vt
ZURpc3BsYXlMaXN0U2VtYXBob3JlKSwgKnBhZ2VQcm94eUlELCAqcGFnZUlEIH19OworICAgICAg
ICByZXR1cm4geyB7ICppZGVudGlmaWVyLCAqcGFnZVByb3h5SUQsICpwYWdlSUQgfSB9OwogICAg
IH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggOGNlYzkyNDI2ODc1MTRj
NmMyYzc3Yjc4OThjMGEzNGM5MDdkNWJjNC4uMmJhOTM2OTlhOGNjYTEzYWI3MWJhNmFhNDRkMGY0
ODdmNWIzNTRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTI5LDEzICsyOSwx
MyBAQAogCiAjaW5jbHVkZSAiRW5jb2Rlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlICJSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaCIKKyNpbmNsdWRlICJSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMuaCIKICNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0NvbmNyZXRlSW1hZ2VCdWZmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlz
dFJlY29yZGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJlcGxheWVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8d3RmL0NvbmRp
dGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CkBAIC00NywxMiArNDcsMTEgQEAgY2xhc3Mg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDsKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPiBj
bGFzcyBUaHJlYWRTYWZlUmVtb3RlSW1hZ2VCdWZmZXJGbHVzaGVyOwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBCYWNrZW5kVHlwZT4KLWNsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgOiBwdWJsaWMg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OkRlbGVnYXRlLCBwdWJsaWMgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50IHsKLSAgICB1c2luZyBCYXNl
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT47Ci0gICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6Om1f
YmFja2VuZDsKLSAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9kcmF3aW5n
Q29udGV4dDsKLSAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9yZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXI7Ci0gICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXI6OnJlc29sdXRpb25TY2FsZTsKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgOiBwdWJs
aWMgV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4geworICAgIHVzaW5n
IEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyID0gV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxC
YWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6Om1fYmFja2Vu
ZDsKKyAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6bV9yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXI7CisgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OnJlc29sdXRp
b25TY2FsZTsKIAogcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8UmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eT4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3Bh
Y2UsIFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkmIHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKQEAgLTY2LDcgKzY1LDcgQEAg
cHVibGljOgogICAgIH5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCkKICAgICB7CiAgICAgICAgIGlm
ICghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgfHwgbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHktPmlzR1BVUHJvY2Vzc0Nvbm5lY3Rpb25DbG9zZWQoKSkgewotICAgICAgICAgICAg
Y2xlYXJEaXNwbGF5TGlzdCgpOworICAgICAgICAgICAgbV9yZW1vdGVEaXNwbGF5TGlzdC5yZXNl
dE5lZWRzRmx1c2goKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC05OCwx
OSArOTcsMTQgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eShjb25zdCBXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OlBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSYgcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KQotICAgICAgICA6IEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyKHBhcmFtZXRlcnMs
IHRoaXMpCisgICAgICAgIDogQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXIocGFyYW1ldGVycykKICAg
ICAgICAgLCBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShtYWtlV2Vha1B0cihyZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkpKQorICAgICAgICAsIG1fcmVtb3RlRGlzcGxheUxpc3QoKnRo
aXMsIHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSwgeyB7IH0sIEJhc2VDb25jcmV0ZUltYWdl
QnVmZmVyOjpsb2dpY2FsU2l6ZSgpIH0sIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpiYXNlVHJh
bnNmb3JtKCkpCiAgICAgewogICAgICAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpOwogICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVtb3RlUmVz
b3VyY2VDYWNoZVByb3h5KCkuY2FjaGVJbWFnZUJ1ZmZlcigqdGhpcyk7Ci0KLSAgICAgICAgbV9k
cmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpLnNldEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50KHRo
aXMpOwotICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuc2V0SXRlbUJ1ZmZl
clJlYWRpbmdDbGllbnQobnVsbHB0cik7Ci0gICAgICAgIG1fZHJhd2luZ0NvbnRleHQuZGlzcGxh
eUxpc3QoKS5zZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMoZmFsc2UpOwogICAgIH0KIAotICAg
IFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpyZW5kZXJpbmdNb2RlKCk7IH0KLQogICAg
IC8vIEl0IGlzIHNhZmUgdG8gYWNjZXNzIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXIgZnJvbSB0
aGUgbWFpbiB0aHJlYWQgd2l0aG91dCBsb2NraW5nIHNpbmNlIGl0CiAgICAgLy8gb25seSBnZXRz
IG1vZGlmaWVkIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICBib29sIGhhc1BlbmRpbmdGbHVzaCgp
IGNvbnN0IFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKQEAgLTIxOSw3ICsyMTMs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAg
ICAgIGF1dG8mIG11dGFibGVUaGlzID0gY29uc3RfY2FzdDxSZW1vdGVJbWFnZUJ1ZmZlclByb3h5
Jj4oKnRoaXMpOwotICAgICAgICBtdXRhYmxlVGhpcy5tX2RyYXdpbmdDb250ZXh0LnJlY29yZGVy
KCkuZ2V0UGl4ZWxCdWZmZXIoZGVzdGluYXRpb25Gb3JtYXQsIHNyY1JlY3QpOworICAgICAgICBt
dXRhYmxlVGhpcy5tX3JlbW90ZURpc3BsYXlMaXN0LmdldFBpeGVsQnVmZmVyKGRlc3RpbmF0aW9u
Rm9ybWF0LCBzcmNSZWN0KTsKICAgICAgICAgbXV0YWJsZVRoaXMuZmx1c2hEcmF3aW5nQ29udGV4
dEFzeW5jKCk7CiAKICAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT53
YWl0Rm9yR2V0UGl4ZWxCdWZmZXJUb0NvbXBsZXRlKHRpbWVvdXQpKQpAQCAtMjI5LDEyICsyMjMs
MjggQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gcGl4ZWxCdWZmZXI7CiAgICAgfQogCisg
ICAgdm9pZCBjbGVhckJhY2tlbmQoKSBmaW5hbAorICAgIHsKKyAgICAgICAgbV9yZW1vdGVEaXNw
bGF5TGlzdC5yZXNldE5lZWRzRmx1c2goKTsKKyAgICAgICAgQmFzZUNvbmNyZXRlSW1hZ2VCdWZm
ZXI6OmNsZWFyQmFja2VuZCgpOworICAgIH0KKworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCgpIGNvbnN0IGZpbmFsCisgICAgeworICAgICAgICByZXR1cm4gY29uc3RfY2Fz
dDxSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Kj4odGhpcyktPm1fcmVtb3RlRGlzcGxheUxpc3Q7Cisg
ICAgfQorCisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIGZp
bmFsCisgICAgeworICAgICAgICByZXR1cm4gJm1fcmVtb3RlRGlzcGxheUxpc3Q7CisgICAgfQor
CiAgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYgcGl4
ZWxCdWZmZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCA9IFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpIGZpbmFsCiAgICAgewogICAgICAgICAvLyBUaGUgbWF0aCBpbnNpZGUgUGl4ZWxCdWZm
ZXI6OmNyZWF0ZSgpIGRvZXNuJ3QgYWdyZWUgd2l0aCB0aGUgbWF0aCBpbnNpZGUgSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcigpIGFib3V0IGhvdyBtX3Jlc29sdXRpb25TY2FsZSBp
bnRlcmFjdHMgd2l0aCB0aGUgZGF0YSBpbiB0aGUgSW1hZ2VCdWZmZXIuCiAgICAgICAgIC8vIFRo
aXMgbWVhbnMgdGhhdCBwdXRQaXhlbEJ1ZmZlcigpIGlzIG9ubHkgY2FsbGVkIHdoZW4gcmVzb2x1
dGlvblNjYWxlKCkgPT0gMS4KICAgICAgICAgQVNTRVJUKHJlc29sdXRpb25TY2FsZSgpID09IDEp
OwotICAgICAgICBtX2RyYXdpbmdDb250ZXh0LnJlY29yZGVyKCkucHV0UGl4ZWxCdWZmZXIocGl4
ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCk7CisgICAgICAgIG1fcmVt
b3RlRGlzcGxheUxpc3QucHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQ
b2ludCwgZGVzdEZvcm1hdCk7CiAgICAgfQogCiAgICAgYm9vbCBwcmVmZXJzUHJlcGFyYXRpb25G
b3JEaXNwbGF5KCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMjYwLDk0ICsyNzAsMzIgQEAg
cHJvdGVjdGVkOgogICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAoIW1fZHJhd2luZ0Nv
bnRleHQuZGlzcGxheUxpc3QoKS5pc0VtcHR5KCkgfHwgIWhhc1BlbmRpbmdGbHVzaCgpKSB7Cisg
ICAgICAgIGlmIChtX3JlbW90ZURpc3BsYXlMaXN0Lm5lZWRzRmx1c2goKSB8fCAhaGFzUGVuZGlu
Z0ZsdXNoKCkpIHsKICAgICAgICAgICAgIG1fc2VudEZsdXNoSWRlbnRpZmllciA9IFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKLSAgICAgICAgICAg
IG1fZHJhd2luZ0NvbnRleHQucmVjb3JkZXIoKS5mbHVzaENvbnRleHQobV9zZW50Rmx1c2hJZGVu
dGlmaWVyKTsKKyAgICAgICAgICAgIG1fcmVtb3RlRGlzcGxheUxpc3QuZmx1c2hDb250ZXh0KG1f
c2VudEZsdXNoSWRlbnRpZmllcik7CiAgICAgICAgIH0KIAotICAgICAgICBtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS0+c2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7Ci0g
ICAgICAgIGNsZWFyRGlzcGxheUxpc3QoKTsKKyAgICAgICAgbV9yZW1vdGVEaXNwbGF5TGlzdC5y
ZXNldE5lZWRzRmx1c2goKTsKICAgICB9CiAKLSAgICB2b2lkIHJlY29yZE5hdGl2ZUltYWdlVXNl
KFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiBpbWFnZSkgZmluYWwKKyAgICB2b2lkIHJlY29yZE5hdGl2
ZUltYWdlVXNlKFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiBpbWFnZSkKICAgICB7CiAgICAgICAgIGlm
IChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKICAgICAgICAgICAgIG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LT5yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkoKS5yZWNvcmROYXRp
dmVJbWFnZVVzZShpbWFnZSk7CiAgICAgfQogCi0gICAgYm9vbCBpc0NhY2hlZEltYWdlQnVmZmVy
KGNvbnN0IFdlYkNvcmU6OkltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikgY29uc3QgZmluYWwKLSAg
ICB7Ci0gICAgICAgIGlmICghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gY2FjaGVkSW1hZ2VCdWZmZXIgPSBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5KCkuY2Fj
aGVkSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkp
OwotICAgICAgICBBU1NFUlQoIWNhY2hlZEltYWdlQnVmZmVyIHx8IGNhY2hlZEltYWdlQnVmZmVy
ID09ICZpbWFnZUJ1ZmZlcik7Ci0gICAgICAgIHJldHVybiBjYWNoZWRJbWFnZUJ1ZmZlcjsKLSAg
ICB9Ci0KLSAgICB2b2lkIGNoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIG5leHRJbWFnZUJ1ZmZlcikgZmluYWwKLSAgICB7Ci0g
ICAgICAgIGJvb2wgd2FzRW1wdHkgPSBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuaXNF
bXB0eSgpOwotICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkudGVtcGxhdGUg
YXBwZW5kPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9u
SW1hZ2VCdWZmZXI+KG5leHRJbWFnZUJ1ZmZlcik7Ci0gICAgICAgIGlmICh3YXNFbXB0eSkKLSAg
ICAgICAgICAgIGNsZWFyRGlzcGxheUxpc3QoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHByZXBhcmVU
b0FwcGVuZERpc3BsYXlMaXN0SXRlbXMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJI
YW5kbGUmJiBoYW5kbGUpIGZpbmFsCi0gICAgewotICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRp
c3BsYXlMaXN0KCkucHJlcGFyZVRvQXBwZW5kKFdURk1vdmUoaGFuZGxlKSk7Ci0gICAgfQotCi0g
ICAgdm9pZCBjbGVhckRpc3BsYXlMaXN0KCkKLSAgICB7Ci0gICAgICAgIG1fZHJhd2luZ0NvbnRl
eHQuZGlzcGxheUxpc3QoKS5jbGVhcigpOwotICAgIH0KLQotICAgIGJvb2wgY2FuQXBwZW5kSXRl
bU9mVHlwZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGUpIGZpbmFsCi0gICAgewotICAg
ICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHktPndpbGxBcHBlbmRJdGVtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBkaWRBcHBlbmREYXRhKGNvbnN0IFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlJiBoYW5kbGUsIHNpemVfdCBudW1i
ZXJPZkJ5dGVzLCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlkQ2hhbmdlSXRlbUJ1ZmZlciBkaWRD
aGFuZ2VJdGVtQnVmZmVyKSBmaW5hbAotICAgIHsKLSAgICAgICAgaWYgKExJS0VMWShtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCi0gICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS0+ZGlkQXBwZW5kRGF0YShoYW5kbGUsIG51bWJlck9mQnl0ZXMsIGRpZENoYW5n
ZUl0ZW1CdWZmZXIsIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHJlY29yZEZvbnRVc2UoV2ViQ29yZTo6Rm9udCYgZm9udCkgZmluYWwKKyAgICB2b2lk
IHJlY29yZEZvbnRVc2UoV2ViQ29yZTo6Rm9udCYgZm9udCkKICAgICB7CiAgICAgICAgIGlmICht
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKICAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LT5yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkoKS5yZWNvcmRGb250VXNl
KGZvbnQpOwogICAgIH0KIAotICAgIHZvaWQgcmVjb3JkSW1hZ2VCdWZmZXJVc2UoV2ViQ29yZTo6
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKSBmaW5hbAorICAgIHZvaWQgcmVjb3JkSW1hZ2VCdWZm
ZXJVc2UoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQogICAgIHsKICAgICAgICAg
aWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQogICAgICAgICAgICAgbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpLnJlY29yZElt
YWdlQnVmZmVyVXNlKGltYWdlQnVmZmVyKTsKICAgICB9CiAKLSAgICBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSBjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCBjYXBhY2l0eSkg
ZmluYWwKLSAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpKQotICAgICAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LT5jcmVhdGVJdGVtQnVmZmVyKGNhcGFjaXR5LCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cik7Ci0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07
Ci0gICAgfQotCi0gICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZW5jb2RlSXRlbU91
dE9mTGluZShjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3RJdGVtJiBpdGVt
KSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oY29uc3Qg
YXV0byYgZGlzcGxheUxpc3RJdGVtKSAtPiBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiB7
Ci0gICAgICAgICAgICB1c2luZyBEaXNwbGF5TGlzdEl0ZW1UeXBlID0gdHlwZW5hbWUgV1RGOjpS
ZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZShkaXNwbGF5TGlzdEl0ZW0pPjo6dHlwZTsKLSAg
ICAgICAgICAgIGlmIGNvbnN0ZXhwciAoIURpc3BsYXlMaXN0SXRlbVR5cGU6OmlzSW5saW5lSXRl
bSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmpl
Y3Q8RGlzcGxheUxpc3RJdGVtVHlwZT4oZGlzcGxheUxpc3RJdGVtKTsKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgfSwgaXRlbSk7Ci0gICAgfQotCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OlRocmVhZFNhZmVJbWFnZUJ1ZmZlckZsdXNoZXI+IGNyZWF0ZUZsdXNoZXIoKSBmaW5hbAogICAg
IHsKICAgICAgICAgcmV0dXJuIFdURjo6bWFrZVVuaXF1ZTxUaHJlYWRTYWZlUmVtb3RlSW1hZ2VC
dWZmZXJGbHVzaGVyPEJhY2tlbmRUeXBlPj4oKnRoaXMpOwpAQCAtMzU4LDYgKzMwNiw3IEBAIHBy
b3RlY3RlZDoKICAgICBDb25kaXRpb24gbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllckNoYW5nZWRD
b25kaXRpb247CiAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyIG1f
cmVjZWl2ZWRGbHVzaElkZW50aWZpZXIgV1RGX0dVQVJERURfQllfTE9DSyhtX3JlY2VpdmVkRmx1
c2hJZGVudGlmaWVyTG9jayk7IC8vIE9ubHkgbW9kaWZpZWQgb24gdGhlIG1haW4gdGhyZWFkIGJ1
dCBtYXkgZ2V0IHF1ZXJpZWQgb24gYSBzZWNvbmRhcnkgdGhyZWFkLgogICAgIFdlYWtQdHI8UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTsK
KyAgICBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkgbV9yZW1vdGVEaXNwbGF5TGlzdDsK
IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4IGJmNDlhODI3ZDIwMjgyNGE0N2IwZDY1Njk2YzZj
YTJjN2Q4ZmI5MWUuLjViODE4M2FkZTlkZGUxZmI3Y2NkZTQzNmQxM2JjNzliNTc4ZWM5MzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTI4LDcgKzI4LDYg
QEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotI2luY2x1ZGUgIkRpc3BsYXlMaXN0V3Jp
dGVySGFuZGxlLmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJv
eHkuaCIKQEAgLTUyLDcgKzUxLDYgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUKIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KFdlYlBhZ2Um
IHdlYlBhZ2UpCiAgICAgOiBtX3BhcmFtZXRlcnMgewogICAgICAgICBSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcjo6Z2VuZXJhdGUoKSwKLSAgICAgICAgSVBDOjpTZW1hcGhvcmUgeyB9LAogICAg
ICAgICB3ZWJQYWdlLndlYlBhZ2VQcm94eUlkZW50aWZpZXIoKSwKICAgICAgICAgd2ViUGFnZS5p
ZGVudGlmaWVyKCkKICAgICB9CkBAIC03Nyw3ICs3NSw4IEBAIEdQVVByb2Nlc3NDb25uZWN0aW9u
JiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9u
KCkKICAgICAgICAgYXV0byYgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpOwogICAgICAgICBncHVQcm9jZXNz
Q29ubmVjdGlvbi5hZGRDbGllbnQoKnRoaXMpOwogICAgICAgICBncHVQcm9jZXNzQ29ubmVjdGlv
bi5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCByZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcigpLnRvVUludDY0KCksICp0aGlzKTsKLSAgICAgICAgZ3B1UHJvY2Vz
c0Nvbm5lY3Rpb24uY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OkNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQobV9wYXJhbWV0ZXJzKSwgMCwgSVBDOjpT
ZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwor
ICAgICAgICBtX3N0cmVhbUNvbm5lY3Rpb24gPSBtYWtlVW5pcXVlPElQQzo6U3RyZWFtQ2xpZW50
Q29ubmVjdGlvbj4oZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24uY29ubmVjdGlvbigpLCAxIDw8IDIxKTsK
KyAgICAgICAgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24uY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6
OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQobV9wYXJh
bWV0ZXJzLCBtX3N0cmVhbUNvbm5lY3Rpb24tPnN0cmVhbUJ1ZmZlcigpKSwgMCwgSVBDOjpTZW5k
T3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwogICAg
ICAgICBtX2dwdVByb2Nlc3NDb25uZWN0aW9uID0gbWFrZVdlYWtQdHIoZ3B1UHJvY2Vzc0Nvbm5l
Y3Rpb24pOwogICAgIH0KICAgICByZXR1cm4gKm1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb247CkBAIC05
MSwxMiArOTAsNiBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z3B1UHJvY2Vz
c0Nvbm5lY3Rpb25EaWRDbG9zZShHUFVQcm9jZXNzQ29ubmVjdAogCiAgICAgbV9yZW1vdGVSZXNv
dXJjZUNhY2hlUHJveHkucmVtb3RlUmVzb3VyY2VDYWNoZVdhc0Rlc3Ryb3llZCgpOwogCi0gICAg
bV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVzLmNsZWFyKCk7Ci0gICAgbV9zaGFyZWREaXNw
bGF5TGlzdEhhbmRsZXMuY2xlYXIoKTsKLSAgICBtX2N1cnJlbnREZXN0aW5hdGlvbkltYWdlQnVm
ZmVySWRlbnRpZmllciA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX2RlZmVycmVkV2FrZXVwTWVzc2Fn
ZUFyZ3VtZW50cyA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3JlbWFpbmluZ0l0ZW1zVG9BcHBlbmRC
ZWZvcmVTZW5kaW5nV2FrZXVwID0gMDsKLQogICAgIGlmIChtX2Rlc3Ryb3lHZXRQaXhlbEJ1ZmZl
clNoYXJlZE1lbW9yeVRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fZGVzdHJveUdldFBpeGVs
QnVmZmVyU2hhcmVkTWVtb3J5VGltZXIuc3RvcCgpOwogICAgIG1fZ2V0UGl4ZWxCdWZmZXJTZW1h
cGhvcmUgPSBzdGQ6Om51bGxvcHQ7CkBAIC0xMzMsNyArMTI2LDcgQEAgYm9vbCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OndhaXRGb3JEaWRGbHVzaCgpCiAKIHZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpjcmVhdGVSZW1vdGVJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1h
Z2VCdWZmZXIpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
Q3JlYXRlSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIubG9naWNhbFNpemUoKSwgaW1hZ2VCdWZmZXIu
cmVuZGVyaW5nTW9kZSgpLCBpbWFnZUJ1ZmZlci5yZXNvbHV0aW9uU2NhbGUoKSwgaW1hZ2VCdWZm
ZXIuY29sb3JTcGFjZSgpLCBpbWFnZUJ1ZmZlci5waXhlbEZvcm1hdCgpLCBpbWFnZUJ1ZmZlci5y
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3lu
Y1JlcGx5KTsKKyAgICBzZW5kVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OkNyZWF0ZUltYWdlQnVmZmVyKGltYWdlQnVmZmVyLmxvZ2ljYWxTaXplKCksIGltYWdlQnVm
ZmVyLnJlbmRlcmluZ01vZGUoKSwgaW1hZ2VCdWZmZXIucmVzb2x1dGlvblNjYWxlKCksIGltYWdl
QnVmZmVyLmNvbG9yU3BhY2UoKSwgaW1hZ2VCdWZmZXIucGl4ZWxGb3JtYXQoKSwgaW1hZ2VCdWZm
ZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpKTsKIH0KIAogUmVmUHRyPEltYWdlQnVm
ZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgUGl4
ZWxGb3JtYXQgcGl4ZWxGb3JtYXQpCkBAIC0xNjMsOCArMTU2LDYgQEAgUmVmUHRyPEltYWdlQnVm
ZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2kKIAogU2hhcmVkTWVtb3J5KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNo
YXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHNpemVfdCBkYXRhU2l6ZSwgSVBDOjpUaW1lb3V0
IHRpbWVvdXQpCiB7Ci0gICAgc2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7Ci0K
ICAgICBib29sIG5lZWRzU2hhcmVkTWVtb3J5ID0gIW1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1v
cnkgfHwgZGF0YVNpemUgPiBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5TGVuZ3RoOwogICAg
IGJvb2wgbmVlZHNTZW1hcGhvcmUgPSAhbV9nZXRQaXhlbEJ1ZmZlclNlbWFwaG9yZTsKIApAQCAt
MTc1LDExICsxNjYsMTEgQEAgU2hhcmVkTWVtb3J5KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OnNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHNpemVfdAogICAgIElQQzo6U2VtYXBo
b3JlIHNlbWFwaG9yZTsKIAogICAgIGlmIChuZWVkc1NoYXJlZE1lbW9yeSAmJiBuZWVkc1NlbWFw
aG9yZSkKLSAgICAgICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OlVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKGRhdGFTaXpl
KSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUFu
ZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyOjpSZXBseShoYW5kbGUsIHNlbWFwaG9yZSksIHJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIHRpbWVvdXQsIElQQzo6U2VuZFN5bmNPcHRpb246
Ok1haW50YWluT3JkZXJpbmdXaXRoQXN5bmNNZXNzYWdlcyk7CisgICAgICAgIHNlbmRTeW5jVG9T
dHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9y
eUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKGRhdGFTaXplKSwgTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBp
eGVsQnVmZmVyOjpSZXBseShoYW5kbGUsIHNlbWFwaG9yZSksIHRpbWVvdXQpOwogICAgIGVsc2Ug
aWYgKG5lZWRzU2hhcmVkTWVtb3J5KQotICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIoZGF0
YVNpemUpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVt
b3J5Rm9yR2V0UGl4ZWxCdWZmZXI6OlJlcGx5KGhhbmRsZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKCksIHRpbWVvdXQsIElQQzo6U2VuZFN5bmNPcHRpb246Ok1haW50YWluT3JkZXJpbmdX
aXRoQXN5bmNNZXNzYWdlcyk7CisgICAgICAgIHNlbmRTeW5jVG9TdHJlYW0oTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVy
KGRhdGFTaXplKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJl
ZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyOjpSZXBseShoYW5kbGUpLCB0aW1lb3V0KTsKICAgICBl
bHNlIGlmIChuZWVkc1NlbWFwaG9yZSkKLSAgICAgICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OlNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKCksIE1lc3NhZ2Vz
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcjo6UmVw
bHkoc2VtYXBob3JlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgdGltZW91dCk7Cisg
ICAgICAgIHNlbmRTeW5jVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OlNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKCksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcjo6UmVwbHkoc2VtYXBob3JlKSwgdGlt
ZW91dCk7CiAKICAgICBpZiAoIWhhbmRsZS5oYW5kbGUuaXNOdWxsKCkpIHsKICAgICAgICAgbV9n
ZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6bWFwKGhhbmRsZS5oYW5k
bGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwpAQCAtMjA0LDMzICsxOTUs
MjcgQEAgYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndhaXRGb3JHZXRQaXhlbEJ1
ZmZlclRvQ29tcGxldGUoSVBDOjpUaW1lb3V0IHQKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpkZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkoKQogewogICAgIG1fZ2V0
UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkgPSBudWxscHRyOwotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgp
LCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNo
TWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAgc2VuZFRvU3RyZWFtKE1l
c3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpEZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFy
ZWRNZW1vcnkoKSk7CiB9CiAKIFN0cmluZyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Omdl
dERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
biwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikKIHsKLSAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKLQogICAgIFN0
cmluZyB1cmxTdHJpbmc7Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OkdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2Vy
dmVSZXNvbHV0aW9uLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0RGF0YVVSTEZvckltYWdlQnVmZmVyOjpSZXBseSh1cmxT
dHJpbmcpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCAxX3MpOworICAgIHNlbmRTeW5j
VG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldERhdGFVUkxGb3JJ
bWFnZUJ1ZmZlcihtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uLCByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
R2V0RGF0YVVSTEZvckltYWdlQnVmZmVyOjpSZXBseSh1cmxTdHJpbmcpLCAzX3MpOwogICAgIHJl
dHVybiB1cmxTdHJpbmc7CiB9CiAKIFZlY3Rvcjx1aW50OF90PiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OmdldERhdGFGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsKLSAgICBzZW5kRGVmZXJyZWRXYWtldXBN
ZXNzYWdlSWZOZWVkZWQoKTsKLQogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIHNlbmRT
eW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXREYXRhRm9ySW1hZ2VCdWZm
ZXIobWltZVR5cGUsIHF1YWxpdHksIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciksIE1lc3Nh
Z2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXREYXRhRm9ySW1hZ2VCdWZmZXI6OlJlcGx5
KGRhdGEpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCAxX3MpOworICAgIHNlbmRTeW5j
VG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldERhdGFGb3JJbWFn
ZUJ1ZmZlcihtaW1lVHlwZSwgcXVhbGl0eSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwg
TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldERhdGFGb3JJbWFnZUJ1ZmZlcjo6
UmVwbHkoZGF0YSksIDNfcyk7CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKIFJlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0U2hhcmVhYmxlQml0bWFw
KFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0
aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKIHsKLSAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdl
SWZOZWVkZWQoKTsKLQogICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6R2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIHByZXNlcnZl
UmVzb2x1dGlvbiksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRTaGFyZWFi
bGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcjo6UmVwbHkoaGFuZGxlKSwgcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIoKSwgMV9zKTsKKyAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luY1RvU3RyZWFt
KE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRTaGFyZWFibGVCaXRtYXBGb3JJ
bWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgcHJlc2VydmVSZXNvbHV0aW9uKSwgTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyOjpS
ZXBseShoYW5kbGUpLCAzX3MpOwogICAgIGlmIChoYW5kbGUuaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgQVNTRVJUX1VOVVNFRChzZW5kUmVzdWx0LCBzZW5kUmVzdWx0KTsKQEAg
LTIzOSwzMCArMjI0LDI3IEBAIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6Z2V0U2hhcmVhYmxlQml0bWFwKFJlbmRlcmluCiAKIHZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6Q2FjaGVOYXRpdmVJbWFnZShoYW5kbGUsIHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6
RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICBzZW5kVG9T
dHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNhY2hlTmF0aXZlSW1hZ2Uo
aGFuZGxlLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKTsKIH0KIAotdm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNhY2hlRm9udChSZWY8V2ViQ29yZTo6Rm9udD4mJiBmb250
KQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNhY2hlRm9udChSZWY8Rm9udD4m
JiBmb250KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNh
Y2hlRm9udChXVEZNb3ZlKGZvbnQpKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBD
OjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkp
OworICAgIHNlbmRUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q2Fj
aGVGb250KFdURk1vdmUoZm9udCkpKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmRlbGV0ZUFsbEZvbnRzKCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpEZWxldGVBbGxGb250cygpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5
bmNSZXBseSk7CisgICAgc2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpEZWxldGVBbGxGb250cygpKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCkKIHsKLSAgICBp
ZiAocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyID09IG1fY3VycmVudERlc3RpbmF0aW9uSW1h
Z2VCdWZmZXJJZGVudGlmaWVyKQotICAgICAgICBtX2N1cnJlbnREZXN0aW5hdGlvbkltYWdlQnVm
ZmVySWRlbnRpZmllciA9IHN0ZDo6bnVsbG9wdDsKLQotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIsIHVzZUNvdW50KSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBD
OjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkp
OworICAgIHNlbmRUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVs
ZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdXNlQ291bnQp
KTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZpbmFsaXplUmVuZGVy
aW5nVXBkYXRlKCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpGaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShtX3JlbmRlcmluZ1VwZGF0ZUlEKSwgcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVu
V2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIHNlbmRUb1N0cmVhbShNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6RmluYWxpemVSZW5kZXJpbmdVcGRhdGUobV9yZW5kZXJpbmdV
cGRhdGVJRCkpOwogICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmZpbmFsaXplUmVuZGVy
aW5nVXBkYXRlKCk7CiAgICAgbV9yZW5kZXJpbmdVcGRhdGVJRC5pbmNyZW1lbnQoKTsKIH0KQEAg
LTI4NywxNjQgKzI2OSw0MCBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGlk
Rmx1c2goR3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSQogICAgICAgICBpbWFn
ZUJ1ZmZlci0+ZGlkRmx1c2goZmx1c2hJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OmRpZEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKFJlbmRlcmluZ1Vw
ZGF0ZUlEIGRpZFJlbmRlcmluZ1VwZGF0ZUlEKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmRpZEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKFJlbmRlcmluZ1VwZGF0ZUlEIHJlbmRl
cmluZ1VwZGF0ZUlEKQogewotICAgIEFTU0VSVChkaWRSZW5kZXJpbmdVcGRhdGVJRCA8PSBtX3Jl
bmRlcmluZ1VwZGF0ZUlEKTsKLSAgICBtX2RpZFJlbmRlcmluZ1VwZGF0ZUlEID0gc3RkOjptaW4o
ZGlkUmVuZGVyaW5nVXBkYXRlSUQsIG1fcmVuZGVyaW5nVXBkYXRlSUQpOworICAgIEFTU0VSVChy
ZW5kZXJpbmdVcGRhdGVJRCA8PSBtX3JlbmRlcmluZ1VwZGF0ZUlEKTsKKyAgICBtX2RpZFJlbmRl
cmluZ1VwZGF0ZUlEID0gc3RkOjptaW4ocmVuZGVyaW5nVXBkYXRlSUQsIG1fcmVuZGVyaW5nVXBk
YXRlSUQpOwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2lsbEFwcGVu
ZEl0ZW0oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIG5ld0Rlc3RpbmF0aW9uSWRlbnRpZmll
cikKLXsKLSAgICBpZiAobV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIg
PT0gbmV3RGVzdGluYXRpb25JZGVudGlmaWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
YXV0byBwcmV2aW91c0Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllciA9IHN0ZDo6ZXhjaGFuZ2Uo
bV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIsIG5ld0Rlc3RpbmF0aW9u
SWRlbnRpZmllcikpIHsKLSAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJl
c291cmNlQ2FjaGVQcm94eS5jYWNoZWRJbWFnZUJ1ZmZlcigqcHJldmlvdXNEZXN0aW5hdGlvbkJ1
ZmZlcklkZW50aWZpZXIpKQotICAgICAgICAgICAgaW1hZ2VCdWZmZXItPmNoYW5nZURlc3RpbmF0
aW9uSW1hZ2VCdWZmZXIobmV3RGVzdGluYXRpb25JZGVudGlmaWVyKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgYXV0byBoYW5k
bGUgPSBtb3N0UmVjZW50bHlVc2VkRGlzcGxheUxpc3RIYW5kbGUoKTsKLSAgICBpZiAoVU5MSUtF
TFkoIWhhbmRsZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gbmV3RGVzdGluYXRpb24g
PSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jYWNoZWRJbWFnZUJ1ZmZlcihuZXdEZXN0aW5h
dGlvbklkZW50aWZpZXIpOwotICAgIGlmIChVTkxJS0VMWSghbmV3RGVzdGluYXRpb24pKSB7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaGFuZGxlLT5tb3ZlV3JpdGFibGVPZmZzZXRUb1N0YXJ0SWZQb3NzaWJsZSgpOwotICAgIG5l
d0Rlc3RpbmF0aW9uLT5wcmVwYXJlVG9BcHBlbmREaXNwbGF5TGlzdEl0ZW1zKGhhbmRsZS0+Y3Jl
YXRlSGFuZGxlKCkpOwotfQotCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6c2Vu
ZFdha2V1cE1lc3NhZ2UoY29uc3QgR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMmIGFy
Z3VtZW50cykKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2hhcmVkRGlzcGxheUxpc3RzLCBzdHJl
YW0gPDwgIlNlbmRpbmcgd2FrZXVwOiBJdGVtc1siIDw8IGFyZ3VtZW50cy5pdGVtQnVmZmVySWRl
bnRpZmllciA8PCAiXSA9PiBJbWFnZSgiIDw8IGFyZ3VtZW50cy5kZXN0aW5hdGlvbkltYWdlQnVm
ZmVySWRlbnRpZmllciA8PCAiKSBhdCAiIDw8IGFyZ3VtZW50cy5vZmZzZXQpOwotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Oldha2VVcEFuZEFwcGx5RGlzcGxheUxp
c3QoYXJndW1lbnRzKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0
aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwotfQotCi12
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6c2VuZERlZmVycmVkV2FrZXVwTWVzc2Fn
ZUlmTmVlZGVkKCkKK1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSBjb25zdAogewotICAgIGF1
dG8gYXJndW1lbnRzID0gc3RkOjpleGNoYW5nZShtX2RlZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3Vt
ZW50cywgc3RkOjpudWxsb3B0KTsKLSAgICBpZiAoIWFyZ3VtZW50cykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgc2VuZFdha2V1cE1lc3NhZ2UoKmFyZ3VtZW50cyk7Ci0gICAgbV9yZW1haW5pbmdJ
dGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dha2V1cCA9IDA7Ci19Ci0KLXZvaWQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpkaWRBcHBlbmREYXRhKGNvbnN0IERpc3BsYXlMaXN0OjpJdGVt
QnVmZmVySGFuZGxlJiBoYW5kbGUsIHNpemVfdCBudW1iZXJPZkJ5dGVzLCBEaXNwbGF5TGlzdDo6
RGlkQ2hhbmdlSXRlbUJ1ZmZlciBkaWRDaGFuZ2VJdGVtQnVmZmVyLCBSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgZGVzdGluYXRpb25JbWFnZUJ1ZmZlcikKLXsKLSAgICBhdXRvKiBzaGFyZWRI
YW5kbGUgPSBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlcy5nZXQoaGFuZGxlLmlkZW50aWZpZXIp
OwotICAgIGlmIChVTkxJS0VMWSghc2hhcmVkSGFuZGxlKSkKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIGJvb2wgd2FzRW1wdHkgPSBzaGFyZWRIYW5kbGUtPmFk
dmFuY2UobnVtYmVyT2ZCeXRlcykgPT0gbnVtYmVyT2ZCeXRlczsKLSAgICBpZiAoIXdhc0VtcHR5
IHx8IGRpZENoYW5nZUl0ZW1CdWZmZXIgPT0gRGlzcGxheUxpc3Q6OkRpZENoYW5nZUl0ZW1CdWZm
ZXI6OlllcykgewotICAgICAgICBpZiAobV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMp
IHsKLSAgICAgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQ
cm94eS5jYWNoZWRJbWFnZUJ1ZmZlcihtX2RlZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50cy0+
ZGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIpOwotICAgICAgICAgICAgaWYgKGltYWdl
QnVmZmVyICYmIGltYWdlQnVmZmVyLT5iYWNrZW5kKCkgJiYgc2hhcmVkSGFuZGxlLT50cnlUb1Jl
c3VtZSh7IG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzLT5vZmZzZXQsIG1fZGVmZXJy
ZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzLT5kZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmll
ci50b1VJbnQ2NCgpIH0pKSB7Ci0gICAgICAgICAgICAgICAgbV9wYXJhbWV0ZXJzLnJlc3VtZURp
c3BsYXlMaXN0U2VtYXBob3JlLnNpZ25hbCgpOwotICAgICAgICAgICAgICAgIG1fZGVmZXJyZWRX
YWtldXBNZXNzYWdlQXJndW1lbnRzID0gc3RkOjpudWxsb3B0OwotICAgICAgICAgICAgICAgIG1f
cmVtYWluaW5nSXRlbXNUb0FwcGVuZEJlZm9yZVNlbmRpbmdXYWtldXAgPSAwOwotICAgICAgICAg
ICAgfSBlbHNlIGlmICghLS1tX3JlbWFpbmluZ0l0ZW1zVG9BcHBlbmRCZWZvcmVTZW5kaW5nV2Fr
ZXVwKSB7Ci0gICAgICAgICAgICAgICAgbV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMt
PnJlYXNvbiA9IEdQVVByb2Nlc3NXYWtldXBSZWFzb246Okl0ZW1Db3VudEh5c3RlcmVzaXNFeGNl
ZWRlZDsKLSAgICAgICAgICAgICAgICBzZW5kV2FrZXVwTWVzc2FnZSgqc3RkOjpleGNoYW5nZSht
X2RlZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50cywgc3RkOjpudWxsb3B0KSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNlbmREZWZl
cnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwotCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IG1f
cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNhY2hlZEltYWdlQnVmZmVyKGRlc3RpbmF0aW9uSW1h
Z2VCdWZmZXIpOwotICAgIGF1dG8gb2Zmc2V0VG9SZWFkID0gc2hhcmVkSGFuZGxlLT53cml0YWJs
ZU9mZnNldCgpIC0gbnVtYmVyT2ZCeXRlczsKLSAgICBpZiAoaW1hZ2VCdWZmZXIgJiYgaW1hZ2VC
dWZmZXItPmJhY2tlbmQoKSAmJiBzaGFyZWRIYW5kbGUtPnRyeVRvUmVzdW1lKHsgb2Zmc2V0VG9S
ZWFkLCBkZXN0aW5hdGlvbkltYWdlQnVmZmVyLnRvVUludDY0KCkgfSkpIHsKLSAgICAgICAgbV9w
YXJhbWV0ZXJzLnJlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlLnNpZ25hbCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSW5zdGVhZCBvZiBzZW5kaW5nIHRoZSB3YWtldXAgbWVz
c2FnZSBpbW1lZGlhdGVseSwgd2FpdCBmb3Igc29tZSBhZGRpdGlvbmFsIGRhdGEuIFRoaXMgZ2l2
ZXMgdGhlCi0gICAgLy8gd2ViIHByb2Nlc3MgYSAiaGVhZCBzdGFydCIsIGRlY3JlYXNpbmcgdGhl
IGxpa2VsaWhvb2QgdGhhdCB0aGUgR1BVIHByb2Nlc3Mgd2lsbCBlbmNvdW50ZXIgZnJlcXVlbnQK
LSAgICAvLyB3YWtldXBzIHdoZW4gcHJvY2Vzc2luZyBhIGxhcmdlIGFtb3VudCBvZiBkaXNwbGF5
IGxpc3QgaXRlbXMuCi0gICAgY29uc3RleHByIHVuc2lnbmVkIGl0ZW1Db3VudEh5c3RlcmVzaXNC
ZWZvcmVTZW5kaW5nV2FrZXVwID0gNTEyOwotCi0gICAgbV9yZW1haW5pbmdJdGVtc1RvQXBwZW5k
QmVmb3JlU2VuZGluZ1dha2V1cCA9IGl0ZW1Db3VudEh5c3RlcmVzaXNCZWZvcmVTZW5kaW5nV2Fr
ZXVwOwotICAgIG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzID0ge3sgaGFuZGxlLmlk
ZW50aWZpZXIsIG9mZnNldFRvUmVhZCwgZGVzdGluYXRpb25JbWFnZUJ1ZmZlciB9fTsKKyAgICBy
ZXR1cm4gbV9wYXJhbWV0ZXJzLmlkZW50aWZpZXI7CiB9CiAKLVJlZlB0cjxEaXNwbGF5TGlzdFdy
aXRlckhhbmRsZT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojptb3N0UmVjZW50bHlVc2Vk
RGlzcGxheUxpc3RIYW5kbGUoKQorUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjplbnN1cmVCYWNrZW5kQ3JlYXRlZCgpCiB7Ci0gICAgaWYgKFVO
TElLRUxZKG1faWRlbnRpZmllcnNPZlJldXNhYmxlSGFuZGxlcy5pc0VtcHR5KCkpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxl
cy5nZXQobV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVzLmZpcnN0KCkpOworICAgIGVuc3Vy
ZUdQVVByb2Nlc3NDb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKCk7CiB9CiAKLVJlZlB0cjxEaXNwbGF5TGlzdFdyaXRlckhhbmRsZT4gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpmaW5kUmV1c2FibGVEaXNwbGF5TGlzdEhhbmRsZShzaXplX3Qg
Y2FwYWNpdHkpCitJUEM6OlN0cmVhbUNsaWVudENvbm5lY3Rpb24mIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6c3RyZWFtQ29ubmVjdGlvbigpCiB7Ci0gICAgYXV0byBtb3N0UmVjZW50bHlV
c2VkSGFuZGxlID0gbW9zdFJlY2VudGx5VXNlZERpc3BsYXlMaXN0SGFuZGxlKCk7Ci0gICAgaWYg
KFVOTElLRUxZKCFtb3N0UmVjZW50bHlVc2VkSGFuZGxlKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBtb3N0UmVjZW50bHlVc2VkSGFuZGxlLT5tb3ZlV3JpdGFibGVPZmZzZXRUb1N0
YXJ0SWZQb3NzaWJsZSgpOwotICAgIGlmIChtb3N0UmVjZW50bHlVc2VkSGFuZGxlLT5hdmFpbGFi
bGVDYXBhY2l0eSgpID49IGNhcGFjaXR5KQotICAgICAgICByZXR1cm4gbW9zdFJlY2VudGx5VXNl
ZEhhbmRsZTsKLQotICAgIG1faWRlbnRpZmllcnNPZlJldXNhYmxlSGFuZGxlcy5hcHBlbmQobV9p
ZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVzLnRha2VGaXJzdCgpKTsKLQotICAgIGF1dG8gbGVh
c3RSZWNlbnRseVVzZWRJZGVudGlmaWVyID0gbV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVz
LmZpcnN0KCk7Ci0gICAgaWYgKGxlYXN0UmVjZW50bHlVc2VkSWRlbnRpZmllciAhPSBtb3N0UmVj
ZW50bHlVc2VkSGFuZGxlLT5pZGVudGlmaWVyKCkpIHsKLSAgICAgICAgUmVmUHRyIGhhbmRsZSA9
IG1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzLmdldChsZWFzdFJlY2VudGx5VXNlZElkZW50aWZp
ZXIpOwotICAgICAgICBpZiAoaGFuZGxlLT5tb3ZlV3JpdGFibGVPZmZzZXRUb1N0YXJ0SWZQb3Nz
aWJsZSgpICYmIGhhbmRsZS0+YXZhaWxhYmxlQ2FwYWNpdHkoKSA+PSBjYXBhY2l0eSkKLSAgICAg
ICAgICAgIHJldHVybiBoYW5kbGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKKyAgICBpZiAoVU5MSUtFTFkobV9uZWVkc1dh
a2VVcFNlbWFwaG9yZUZvckRpc3BsYXlMaXN0U3RyZWFtKSkKKyAgICAgICAgbWVzc2FnZVNlbmRl
ckNvbm5lY3Rpb24oKS0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6RGlkQ3JlYXRlV2FrZVVwU2VtYXBob3JlRm9yRGlz
cGxheUxpc3RTdHJlYW0+KHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIDNfcywgSVBDOjpX
YWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOworICAg
IHJldHVybiAqbV9zdHJlYW1Db25uZWN0aW9uOwogfQogCi1EaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
ckhhbmRsZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUl0ZW1CdWZmZXIoc2l6
ZV90IGNhcGFjaXR5LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb25CdWZm
ZXJJZGVudGlmaWVyKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRpZENyZWF0
ZVdha2VVcFNlbWFwaG9yZUZvckRpc3BsYXlMaXN0U3RyZWFtKElQQzo6U2VtYXBob3JlJiYgc2Vt
YXBob3JlKQogewotICAgIGlmIChhdXRvIGhhbmRsZSA9IGZpbmRSZXVzYWJsZURpc3BsYXlMaXN0
SGFuZGxlKGNhcGFjaXR5KSkgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2hhcmVkRGlzcGxh
eUxpc3RzLCBzdHJlYW0gPDwgIlJldXNpbmcgSXRlbXNbIiA8PCBoYW5kbGUtPmlkZW50aWZpZXIo
KSA8PCAiXSA9PiBJbWFnZSgiIDw8IGRlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllciA8PCAiKSAo
cmVtYWluaW5nIGNhcGFjaXR5OiAiIDw8IGhhbmRsZS0+YXZhaWxhYmxlQ2FwYWNpdHkoKSA8PCAi
KSIpOwotICAgICAgICByZXR1cm4gaGFuZGxlLT5jcmVhdGVIYW5kbGUoKTsKKyAgICBpZiAoIW1f
c3RyZWFtQ29ubmVjdGlvbikgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGRlZmF1bHRT
aGFyZWRJdGVtQnVmZmVyU2l6ZSA9IDEgPDwgMTY7Ci0gICAgc3RhdGljX2Fzc2VydChkZWZhdWx0
U2hhcmVkSXRlbUJ1ZmZlclNpemUgPiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6aGVhZGVyU2l6
ZSgpKTsKLQotICAgIGF1dG8gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShz
dGQ6Om1heChkZWZhdWx0U2hhcmVkSXRlbUJ1ZmZlclNpemUsIGNhcGFjaXR5ICsgU2hhcmVkRGlz
cGxheUxpc3RIYW5kbGU6OmhlYWRlclNpemUoKSkpOwotICAgIGlmICghc2hhcmVkTWVtb3J5KQot
ICAgICAgICByZXR1cm4geyB9OwotCi0gICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgc2hhcmVkTWVt
b3J5SGFuZGxlOwotICAgIHNoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKHNoYXJlZE1lbW9yeUhh
bmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkV3JpdGUpOwotCi0gICAgYXV0byBp
ZGVudGlmaWVyID0gRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyOjpnZW5lcmF0ZSgp
OwotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRpZENyZWF0ZVNo
YXJlZERpc3BsYXlMaXN0SGFuZGxlKGlkZW50aWZpZXIsIHsgV1RGTW92ZShzaGFyZWRNZW1vcnlI
YW5kbGUpLCBzaGFyZWRNZW1vcnktPnNpemUoKSB9LCBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZp
ZXIpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3Bh
dGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7Ci0KLSAgICBhdXRvIG5ld0hh
bmRsZSA9IERpc3BsYXlMaXN0V3JpdGVySGFuZGxlOjpjcmVhdGUoaWRlbnRpZmllciwgc2hhcmVk
TWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKG5ld0hhbmRsZSwg
IlRoZXJlIG11c3QgYmUgZW5vdWdoIHNwYWNlIHRvIGNyZWF0ZSB0aGUgaGFuZGxlLiIpOwotICAg
IGF1dG8gZGlzcGxheUxpc3RIYW5kbGUgPSBuZXdIYW5kbGUtPmNyZWF0ZUhhbmRsZSgpOwotCi0g
ICAgbV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVzLnByZXBlbmQoaWRlbnRpZmllcik7Ci0g
ICAgbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXMuc2V0KGlkZW50aWZpZXIsIFdURk1vdmUobmV3
SGFuZGxlKSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2hhcmVkRGlzcGxheUxpc3RzLCBzdHJl
YW0gPDwgIkFsbG9jYXRlZCBJdGVtc1siIDw8IGlkZW50aWZpZXIgPDwgIl0gPT4gSW1hZ2UoIiA8
PCBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIgPDwgIikiKTsKLSAgICByZXR1cm4gZGlzcGxh
eUxpc3RIYW5kbGU7Ci19Ci0KLVJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3BhcmFtZXRlcnMuaWRlbnRpZmllcjsKLX0KLQotUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjplbnN1cmVCYWNrZW5kQ3Jl
YXRlZCgpCi17Ci0gICAgZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKLSAgICByZXR1cm4g
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKTsKKyAgICBtX3N0cmVhbUNvbm5lY3Rpb24tPnNl
dFdha2VVcFNlbWFwaG9yZShXVEZNb3ZlKHNlbWFwaG9yZSkpOworICAgIG1fbmVlZHNXYWtlVXBT
ZW1hcGhvcmVGb3JEaXNwbGF5TGlzdFN0cmVhbSA9IGZhbHNlOwogfQogCiB2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6cmVjb3JkTmF0aXZlSW1hZ2VVc2UoTmF0aXZlSW1hZ2UmIGlt
YWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKaW5kZXggYWEwMjNkY2Yy
ZGI1YTMzYWFiMTNmNjliYTAxNjI5MmQzMDVhZjc2OS4uYmFlNGM3OTc1MTM0MWE2MzVjZTM5Njcx
NGJkNDAwZmI0ZGU0MjJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
CkBAIC0zMywxMSArMzMsMTMgQEAKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUu
aCIKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVy
LmgiCisjaW5jbHVkZSAiUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlck1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycy5oIgorI2luY2x1
ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlJlbW90ZVJl
c291cmNlQ2FjaGVQcm94eS5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nVXBkYXRlSUQuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Rp
c3BsYXlMaXN0Lmg+CisjaW5jbHVkZSAiU3RyZWFtQ2xpZW50Q29ubmVjdGlvbi5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9UaW1lci5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgpAQCAtNDUsMTEgKzQ3LDYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1uYW1lc3BhY2UgRGlzcGxheUxpc3QgewotY2xhc3Mg
RGlzcGxheUxpc3Q7Ci1jbGFzcyBJdGVtOwotfQotCiBjbGFzcyBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U7CiBjbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBQaXhlbEJ1ZmZlcjsKQEAgLTYxLDEzICs1OCwx
MyBAQCBlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUgOiBib29sOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotY2xhc3MgRGlzcGxheUxpc3RXcml0ZXJIYW5kbGU7CiBjbGFzcyBXZWJQYWdlOwogCiBj
bGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkKICAgICA6IHB1YmxpYyBJUEM6Ok1lc3Nh
Z2VTZW5kZXIKICAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIKLSAgICAsIHB1Ymxp
YyBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6Q2xpZW50IHsKKyAgICAsIHB1YmxpYyBHUFVQcm9jZXNz
Q29ubmVjdGlvbjo6Q2xpZW50CisgICAgLCBwdWJsaWMgUmVmQ291bnRlZDxSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gY3JlYXRlKFdlYlBhZ2UmKTsKIApAQCAtNzcsMTEg
Kzc0LDYgQEAgcHVibGljOgogICAgIHVzaW5nIFdlYWtWYWx1ZVR5cGUgPSBHUFVQcm9jZXNzQ29u
bmVjdGlvbjo6Q2xpZW50OjpXZWFrVmFsdWVUeXBlOwogCiAgICAgUmVtb3RlUmVzb3VyY2VDYWNo
ZVByb3h5JiByZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkoKSB7IHJldHVybiBtX3JlbW90ZVJlc291
cmNlQ2FjaGVQcm94eTsgfQotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFu
ZGxlIGNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90IGNhcGFjaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKTsKLQotICAgIHZv
aWQgZGlkQXBwZW5kRGF0YShjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhh
bmRsZSYsIHNpemVfdCBudW1iZXJPZkJ5dGVzLCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlkQ2hh
bmdlSXRlbUJ1ZmZlciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGRlc3Rp
bmF0aW9uSW1hZ2VCdWZmZXIpOwotICAgIHZvaWQgd2lsbEFwcGVuZEl0ZW0oV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICB2b2lkIHNlbmREZWZlcnJlZFdha2V1cE1l
c3NhZ2VJZk5lZWRlZCgpOwogCiAgICAgU2hhcmVkTWVtb3J5KiBzaGFyZWRNZW1vcnlGb3JHZXRQ
aXhlbEJ1ZmZlcihzaXplX3QgZGF0YVNpemUsIElQQzo6VGltZW91dCk7CiAgICAgYm9vbCB3YWl0
Rm9yR2V0UGl4ZWxCdWZmZXJUb0NvbXBsZXRlKElQQzo6VGltZW91dCk7CkBAIC0xMDEsNyArOTMs
NiBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFn
ZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2Rl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JT
cGFjZSYsIFdlYkNvcmU6OlBpeGVsRm9ybWF0KTsKICAgICBTdHJpbmcgZ2V0RGF0YVVSTEZvcklt
YWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcik7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGdldERhdGFGb3JJbWFnZUJ1
ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChj
b25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGdldFNo
YXJlYWJsZUJpdG1hcChXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNv
cmU6OlByZXNlcnZlUmVzb2x1dGlvbik7CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKGNvbnN0
IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKTsKICAgICB2b2lkIGNhY2hlRm9udChSZWY8V2ViQ29yZTo6Rm9udD4mJik7CkBAIC0x
MjUsMTAgKzExNiwxMyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzR1BVUHJvY2Vzc0Nvbm5lY3Rp
b25DbG9zZWQoKSBjb25zdCB7IHJldHVybiAhbV9ncHVQcm9jZXNzQ29ubmVjdGlvbjsgfQogCisg
ICAgdm9pZCBkaWRDcmVhdGVXYWtlVXBTZW1hcGhvcmVGb3JEaXNwbGF5TGlzdFN0cmVhbShJUEM6
OlNlbWFwaG9yZSYmKTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiAg
ICAgdm9pZCBzZW5kVG9TdHJlYW0oVCYmIG1lc3NhZ2UsIE9iamVjdElkZW50aWZpZXI8VT4gaWRl
bnRpZmllcikKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkLgor
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIG1ha2luZyB0aGUgc2VuZCB0aW1l
b3V0IGZpbml0ZS4KKyAgICAgICAgc3RyZWFtQ29ubmVjdGlvbigpLnNlbmQoV1RGTW92ZShtZXNz
YWdlKSwgaWRlbnRpZmllciwgU2Vjb25kczo6aW5maW5pdHkoKSk7CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KQEAgLTE0NCw2ICsxMzgsMTQgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBleHBsaWNpdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoV2ViUGFnZSYpOwogCisg
ICAgSVBDOjpTdHJlYW1DbGllbnRDb25uZWN0aW9uJiBzdHJlYW1Db25uZWN0aW9uKCk7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGF1dG8gc2VuZFN5bmNUb1N0cmVhbShUJiYgbWVz
c2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiByZXBseSwgSVBDOjpUaW1lb3V0IHRpbWVvdXQpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RyZWFtQ29ubmVjdGlvbigpLnNlbmRTeW5jKFdURk1vdmUo
bWVzc2FnZSksIFdURk1vdmUocmVwbHkpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCB0
aW1lb3V0KTsKKyAgICB9CisKICAgICAvLyBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6Q2xpZW50CiAg
ICAgdm9pZCBncHVQcm9jZXNzQ29ubmVjdGlvbkRpZENsb3NlKEdQVVByb2Nlc3NDb25uZWN0aW9u
JikgZmluYWw7CiAKQEAgLTE1NCwyMSArMTU2LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRG
bHVzaChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRGaW5hbGl6ZVJlbmRlcmlu
Z1VwZGF0ZShSZW5kZXJpbmdVcGRhdGVJRCBkaWRSZW5kZXJpbmdVcGRhdGVJRCk7CiAKLSAgICBS
ZWZQdHI8RGlzcGxheUxpc3RXcml0ZXJIYW5kbGU+IG1vc3RSZWNlbnRseVVzZWREaXNwbGF5TGlz
dEhhbmRsZSgpOwotICAgIFJlZlB0cjxEaXNwbGF5TGlzdFdyaXRlckhhbmRsZT4gZmluZFJldXNh
YmxlRGlzcGxheUxpc3RIYW5kbGUoc2l6ZV90IGNhcGFjaXR5KTsKLQotICAgIHZvaWQgc2VuZFdh
a2V1cE1lc3NhZ2UoY29uc3QgR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMmKTsKLQor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OlN0cmVhbUNsaWVudENvbm5lY3Rpb24+IG1fc3RyZWFt
Q29ubmVjdGlvbjsKICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJz
IG1fcGFyYW1ldGVyczsKICAgICBXZWFrUHRyPEdQVVByb2Nlc3NDb25uZWN0aW9uPiBtX2dwdVBy
b2Nlc3NDb25uZWN0aW9uOwogICAgIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSBtX3JlbW90ZVJl
c291cmNlQ2FjaGVQcm94eSB7ICp0aGlzIH07CiAKLSAgICBIYXNoTWFwPFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgUmVmUHRyPERpc3BsYXlMaXN0V3JpdGVySGFu
ZGxlPj4gbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXM7Ci0gICAgRGVxdWU8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyPiBtX2lkZW50aWZpZXJzT2ZSZXVzYWJsZUhh
bmRsZXM7Ci0gICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXI+IG1fY3VycmVudERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyOwotICAgIHN0
ZDo6b3B0aW9uYWw8R1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHM+IG1fZGVmZXJyZWRX
YWtldXBNZXNzYWdlQXJndW1lbnRzOwotICAgIHVuc2lnbmVkIG1fcmVtYWluaW5nSXRlbXNUb0Fw
cGVuZEJlZm9yZVNlbmRpbmdXYWtldXAgeyAwIH07Ci0KICAgICBzdGQ6Om9wdGlvbmFsPElQQzo6
U2VtYXBob3JlPiBtX2dldFBpeGVsQnVmZmVyU2VtYXBob3JlOwogICAgIFJlZlB0cjxTaGFyZWRN
ZW1vcnk+IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnk7CiAgICAgdWludDY0X3QgbV9nZXRQ
aXhlbEJ1ZmZlclNoYXJlZE1lbW9yeUxlbmd0aCB7IDAgfTsKQEAgLTE3Niw2ICsxNjgsOCBAQCBw
cml2YXRlOgogCiAgICAgUmVuZGVyaW5nVXBkYXRlSUQgbV9yZW5kZXJpbmdVcGRhdGVJRDsKICAg
ICBSZW5kZXJpbmdVcGRhdGVJRCBtX2RpZFJlbmRlcmluZ1VwZGF0ZUlEOworCisgICAgYm9vbCBt
X25lZWRzV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxheUxpc3RTdHJlYW0geyB0cnVlIH07CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmlu
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkubWVzc2FnZXMuaW4KaW5kZXggYjVlZTk1OTFhZjFmZmVlNTMzNWUxMjljOTRh
Zjk2YjU0N2Y4NDFhNS4uNzlhYmRiZTI0MjY0YjNiYTRjM2Q1YWY0MjJlOWM3M2ZkOGZhY2YzMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMu
aW4KQEAgLTI2LDYgKzI2LDcgQEAgbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5IE5vdFJlZkNvdW50ZWQgewogICAgIERpZENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChXZWJL
aXQ6OkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiAgICAgRGlkRmx1
c2goV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmll
ciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikKICAgICBEaWRGaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShXZWJLaXQ6OlJlbmRl
cmluZ1VwZGF0ZUlEIGRpZFJlbmRlcmluZ1VwZGF0ZUlEKQorICAgIERpZENyZWF0ZVdha2VVcFNl
bWFwaG9yZUZvckRpc3BsYXlMaXN0U3RyZWFtKElQQzo6U2VtYXBob3JlIHdha2VVcFNlbWFwaG9y
ZSkKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKaW5kZXggMGYxMTgzODUx
OGNiOTA4OWVjNWVjY2ZhYWMzMzVlMjAxYTZjMzZmNi4uNjAwNTRhYTkzZTNiNWEyN2I3YzU4YjIz
MWE3ZGFhYWJmYzM4YjQ0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKQEAgLTc2MSwxMyArNzYxLDYgQEAgc3RhdGljIGJvb2wg
ZW5jb2RlUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyhJUEM6OkVuY29k
ZXImIGVuY29kZXIKICAgICBpZiAoIWlkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGF1dG8ganNTZW1hcGhvcmUgPSBqc09iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGdsb2JhbE9iamVjdC0+dm0oKSwgInNlbWFwaG9yZSJf
cykpOwotICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIFJlZlB0ciBzZW1hcGhvcmVPYmplY3QgPSBKU0lQQ1NlbWFwaG9yZTo6dG9XcmFwcGVkKHRv
UmVmKGdsb2JhbE9iamVjdCksIHRvUmVmKGpzU2VtYXBob3JlKSk7Ci0gICAgaWYgKCFzZW1hcGhv
cmVPYmplY3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIGF1dG8gcGFnZVByb3h5SUQg
PSBnZXRPYmplY3RJZGVudGlmaWVyRnJvbVByb3BlcnR5PFdlYlBhZ2VQcm94eUlkZW50aWZpZXJU
eXBlPihnbG9iYWxPYmplY3QsIGpzT2JqZWN0LCAicGFnZVByb3h5SUQiX3MsIHNjb3BlKTsKICAg
ICBpZiAoIXBhZ2VQcm94eUlEKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03NzYsMTAgKzc2
OSw4IEBAIHN0YXRpYyBib29sIGVuY29kZVJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBh
cmFtZXRlcnMoSVBDOjpFbmNvZGVyJiBlbmNvZGVyCiAgICAgaWYgKCFwYWdlSUQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gc2VtYXBob3JlID0gc2VtYXBob3JlT2JqZWN0LT5l
eGNoYW5nZSgpOwotICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMg
cGFyYW1ldGVycyB7ICppZGVudGlmaWVyLCBXVEZNb3ZlKHNlbWFwaG9yZSksICpwYWdlUHJveHlJ
RCwgKnBhZ2VJRCB9OworICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRl
cnMgcGFyYW1ldGVycyB7ICppZGVudGlmaWVyLCAqcGFnZVByb3h5SUQsICpwYWdlSUQgfTsKICAg
ICBlbmNvZGVyIDw8IHBhcmFtZXRlcnM7Ci0gICAgc2VtYXBob3JlT2JqZWN0LT5leGNoYW5nZShX
VEZNb3ZlKHBhcmFtZXRlcnMucmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmUpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440866</attachid>
            <date>2021-10-11 17:38:17 -0700</date>
            <delta_ts>2021-10-12 09:38:59 -0700</delta_ts>
            <desc>Rebase on trunk</desc>
            <filename>bug-230860-20211011173816.patch</filename>
            <type>text/plain</type>
            <size>103805</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzOTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGJlY2RhNDY0YTUwYjU5NDYx
ZGZhM2QzMzA4ZTEyYTcwMWI2NGY1ZTMuLjFhODI1N2YzM2UxMGQ5YWY2ZGE2MDFjMWUyZTU5NDAy
YWI1MTdlMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcwIEBACisyMDIxLTEwLTExICBXZW5zb24g
SHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
VXNlIElQQyBzdHJlYW1pbmcgZm9yIGNvbmN1cnJlbnQgZGlzcGxheSBsaXN0IHByb2Nlc3NpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDg2MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggcmVidWlsZHMgdGhlIGNvbmN1cnJlbnQgZGlzcGxheSBsaXN0IGFyY2hpdGVjdHVyZSBpbiB0
aGUgd2ViIGFuZCBHUFUgcHJvY2Vzc2VzIG9uIHRvcCBvZiB0aGUKKyAgICAgICAgc3RyZWFtYWJs
ZSBJUEMgY29ubmVjdGlvbnMgY3VycmVudGx5IHVzZWQgYnkgV2ViR0wgaW4gdGhlIEdQVSBwcm9j
ZXNzLiBTZWUgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgICAqIEdQVVByb2Nlc3Mv
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQpOgorCisgICAgICAgIFBh
c3MgYSBTdHJlYW1Db25uZWN0aW9uQnVmZmVyIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBH
UFUgcHJvY2VzcyB3aGVuIGNvbnN0cnVjdGluZworICAgICAgICBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOyB0aGlzIHNlcnZlcyBhcyB0aGUgcG9vbCBvZiBzaGFyZWQgbWVtb3J5IHVzZWQgdG8gc3Rv
cmUgc3RyZWFtaW5nIElQQyBtZXNzYWdlcyBzZW50IGZyb20KKyAgICAgICAgdGhlIHdlYiBwcm9j
ZXNzIHRvIHRoZSBHUFUgcHJvY2Vzcy4gSSd2ZSAoc29tZXdoYXQgYXJiaXRyYXJpbHkpIGNob3Nl
biB0aGUgc2l6ZSBvZiB0aGlzIFN0cmVhbUNvbm5lY3Rpb25CdWZmZXIKKyAgICAgICAgdG8gbWF0
Y2ggV2ViR0wncyBjb25uZWN0aW9uIGJ1ZmZlciwgdGhvdWdoIHRoaXMgY2FuIGJlIHR1bmVkIGFz
IG5lZWRlZC4gSW4gYSBmdXR1cmUgcGF0Y2gsIHdlIG1heSBhbHNvIHdhbnQgdG8KKyAgICAgICAg
aW1wbGVtZW50IGEgbWVjaGFuaXNtIGZvciBzdGFydGluZyBvdXQgd2l0aCBhIHNtYWxsIGNvbm5l
Y3Rpb24gYnVmZmVyLCBhbmQgZ3Jvd2luZyBpdCBieSBzdWNjZXNzaXZlbHkgbGFyZ2VyCisgICAg
ICAgIHNlZ21lbnRzIGFzIG5lZWRlZC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2NvY29hL0dQVVBy
b2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzczo6YWRkaXRpb25hbFN0
YXRlRm9yRGlhZ25vc3RpY1JlcG9ydCBjb25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c3RhcnRMaXN0ZW5pbmdGb3JJUEMpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzdG9wTGlzdGVuaW5nRm9ySVBDKToK
KworICAgICAgICBBZGQgYW5kIHJlbW92ZSB0aGUgcmVtb3RlIGRpc3BsYXkgbGlzdCBhcyBhIGRl
c3RpbmF0aW9uIG9uIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJ3Mgc3RyZWFtIGNvbm5lY3Rp
b24uIE5vdGUKKyAgICAgICAgdGhhdCB0aGUgc3luY2hyb25vdXMgZGlzcGF0Y2ggdG8gdGhlIG1h
aW4gdGhyZWFkIGhlcmUgaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIHRoZSBvcmRlcmluZyBvZiBv
dXQtb2Ytc3RyZWFtIElQQworICAgICAgICBtZXNzYWdlcyB0aGF0IG1heSBoYXZlIGJlZW4gcmVj
ZWl2ZWQgb24gdGhlIElQQyB0aHJlYWQuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZUltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVy
OjpSZW1vdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVy
OjphcHBseSk6IERlbGV0ZWQuCisKKyAgICAgICAgSW50cm9kdWNlIGBtX3JlbW90ZURpc3BsYXlM
aXN0YCB0byBSZW1vdGVJbWFnZUJ1ZmZlciwgYW5kIHJlbW92ZSBzb21lIGxvZ2ljIGZvciBhcHBs
eWluZyBkaXNwbGF5IGxpc3QgaXRlbXMgdGhhdAorICAgICAgICBpcyBubyBsb25nZXIgbmVjZXNz
YXJ5LgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZCk6CisKKyAgICAgICAgU2V0IHVwIHRoZSBJUEMgc3RyZWFtIGNvbm5lY3Rpb24g
YW5kIHN0cmVhbSBjb25uZWN0aW9uIHdvcmsgcXVldWUsIGFuZCBpbW1lZGlhdGVseSBzZW5kIGEg
d2FrZXVwIHNlbWFwaG9yZSBiYWNrCisgICAgICAgIHRvIHRoZSB3ZWIgcHJvY2Vzcy4KKworICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzdGFydExpc3RlbmluZ0ZvcklQ
Qyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
c3RvcExpc3RlbmluZ0ZvcklQQyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmRpZEJlZ2luTGlzdGVuaW5nRm9ySVBDKToKKworICAgICAgICBBZGQgYSBtZWNoYW5p
c20gdG8gaW1tZWRpYXRlbHkgdGVsbCBhbGwgYG1fcmVtb3RlRGlzcGxheUxpc3RzYCB0byBzdG9w
IGxpc3RlbmluZyBmb3Igc3RyZWFtaW5nIElQQyBtZXNzYWdlcyB3aGVuCisgICAgICAgIHRoZSBv
d25pbmcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBzdG9wcyBsaXN0ZW5pbmcuCisKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlzcGF0Y2gpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcldpdGhRdWFsaWZp
ZWRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
Y2FjaGVOYXRpdmVJbWFnZVdpdGhRdWFsaWZpZWRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y2FjaGVGb250V2l0aFF1YWxpZmllZElkZW50aWZp
ZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmaW5hbGl6ZVJl
bmRlcmluZ1VwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmFwcGx5TWVkaWFJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6UmVwbGF5ZXJEZWxlZ2F0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdh
dGU6OmFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6ZGlkQ3JlYXRlTWFza0ltYWdlQnVmZmVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxl
Z2F0ZTo6ZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjpyZWNvcmRSZXNvdXJj
ZVVzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OnN1Ym1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6Om5leHREZXN0aW5hdGlvbkltYWdlQnVmZmVyQWZ0ZXJBcHBseWluZ0Rpc3BsYXlMaXN0cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Ondha2VV
cEFuZEFwcGx5RGlzcGxheUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjp3YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0V2l0aFF1YWxpZmllZElk
ZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpzZXROZXh0SXRlbUJ1ZmZlclRvUmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZENyZWF0ZVNoYXJlZERpc3BsYXlMaXN0SGFuZGxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlk
Q3JlYXRlU2hhcmVkRGlzcGxheUxpc3RIYW5kbGVXaXRoUXVhbGlmaWVkSWRlbnRpZmllcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlc3VtZUZy
b21QZW5kaW5nV2FrZXVwSW5mb3JtYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVNYXNrSW1hZ2VCdWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRSZXNldE1hc2tJ
bWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmRlY29kZUl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpsYXN0S25vd25TdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZUxhc3RLbm93blN0YXRlKTogRGVs
ZXRlZC4KKworICAgICAgICBSZW1vdmUgbG9naWMgZm9yIGNvb3JkaW5hdGluZyB3YWtldXBzIGFu
ZCBzaGFyZWQgZGlzcGxheSBsaXN0IGl0ZW0gYnVmZmVycyBpbiB0aGUgR1BVIHByb2Nlc3MuCisK
KyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDoK
KworICAgICAgICBTdWJjbGFzcyBJUEM6OlN0cmVhbU1lc3NhZ2VSZWNlaXZlci4gSW4gdGhpcyBu
ZXcgY29uY3VycmVudCBkaXNwbGF5IGxpc3QgbW9kZWwsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQg
c2VydmVzCisgICAgICAgIGFzIGEgc3RyZWFtaW5nIElQQyBkZXN0aW5hdGlvbiBhbG9uZ3NpZGUg
ZWFjaCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyIGluIHRoZSBHUFUgcHJvY2VzczsgYWxsIG1l
c3NhZ2VzCisgICAgICAgIHByZXZpb3VzbHkgc2VudCB0byB0aGUgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZCBhcyBub3JtYWwgSVBDIGFyZSBub3cgc2VudCB0aHJvdWdoIHRoZSBjb25uZWN0aW9uIHN0
cmVhbSAodGhvdWdoCisgICAgICAgIHNvbWUgbXVzdCBiZSBtYXJrZWQgYXMgbm9uLXN0cmVhbS1l
bmNvZGFibGUpLgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnN0
cmVhbUNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpkZWNvZGVBbmRDcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UGVuZGluZ1dha2V1cElu
Zm9ybWF0aW9uOjpzaG91bGRQZXJmb3JtV2FrZXVwIGNvbnN0KTogRGVsZXRlZC4KKworICAgICAg
ICBEZWxldGUgbW9yZSBsb2dpYyByZWxhdGVkIHRvIGNvbmN1cnJlbnQgZGlzcGxheSBsaXN0cy4K
KworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5t
ZXNzYWdlcy5pbjoKKworICAgICAgICBNYWtlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgYSBzdHJl
YW0gbWVzc2FnZSByZWNlaXZlci4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUpOgorCisgICAgICAgIFJlbW92ZSB0aGUgSVBDOjpTZW1hcGhvcmUgaGVyZSwg
dGhhdCB3YXMgcHJldmlvdXNseSB1c2VkIGZvciBxdWljayBHUFUgcHJvY2VzcyB3YWtldXBzLiBU
aGlzIHNlbWFwaG9yZSBpcyBubworICAgICAgICBsb25nZXIgbmVlZGVkIGJlY2F1c2Ugd2UgYWx3
YXlzIHVzZSBJUEM6OlNlbWFwaG9yZSBmb3Igd2FraW5nIHRoZSBHUFUgcHJvY2VzcyB3aGVuIHVz
aW5nIHN0cmVhbWluZyBJUEMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6CisKKyAgICAgICAgTWFrZSB0aGUgUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eSB0ZW1wbGF0ZSBjbGFzcyBkaXJlY3RseSBzdWJjbGFzcyBDb25jcmV0ZUltYWdl
QnVmZmVyIGluc3RlYWQgb2YKKyAgICAgICAgRGlzcGxheUxpc3Q6OkltYWdlQnVmZmVyOyBhZGRp
dGlvbmFsbHksIGludHJvZHVjZSBhIGBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkgbV9y
ZW1vdGVEaXNwbGF5TGlzdGAgaGVyZSwKKyAgICAgICAgd2hpY2ggd2UgdXNlIGFzIG91ciBkcmF3
aW5nIGdyYXBoaWNzIGNvbnRleHQuCisKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVjb3JkTmF0aXZlSW1hZ2VVc2UpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZWNvcmRGb250VXNlKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVjb3JkSW1hZ2VCdWZmZXJV
c2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpjbGVhckRpc3Bs
YXlMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZW5zdXJlR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OmdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZVJlbW90ZUltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpzaGFyZWRNZW1vcnlGb3JHZXRQ
aXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6ZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldERhdGFGb3JJ
bWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6Z2V0U2hhcmVhYmxlQml0bWFwKToKKworICAgICAgICBTZW5kIGFsbCBJUEMgbWVzc2FnZXMg
dG8gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBpbiB0aGUgR1BVIHByb2Nlc3MgdGhyb3VnaCB0aGUg
c3RyZWFtIGNvbm5lY3Rpb24sIGluc3RlYWQgb2YKKyAgICAgICAgdXNpbmcgc3RhbmRhcmQgSVBD
IG1lc3NhZ2VzLiBUaGlzIGd1YXJhbnRlZXMgb3JkZXJpbmcgd2hlbiByZWNlaXZpbmcgY2FjaGVk
IHJlc291cmNlcy4KKworICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OmNhY2hlTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OmNhY2hlRm9udCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6ZGVsZXRlQWxsRm9udHMpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZmluYWxpemVSZW5kZXJpbmdVcGRh
dGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRpZEZp
bmFsaXplUmVuZGVyaW5nVXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZW5zdXJlQmFja2VuZENyZWF0
ZWQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnN0cmVh
bUNvbm5lY3Rpb24pOgorCisgICAgICAgIEFkZCBhIG1lY2hhbmlzbSB0byBlbnN1cmUgdGhhdCB3
ZSBoYXZlIHRoZSBJUEMgc3RyZWFtIHdha2V1cCBzZW1hcGhvcmUgYmVmb3JlIGdyYWJiaW5nIHRo
ZSBzdHJlYW0gY29ubmVjdGlvbi4KKworICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OmRpZENyZWF0ZVdha2VVcFNlbWFwaG9yZUZvckRpc3BsYXlMaXN0U3RyZWFt
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp3aWxsQXBw
ZW5kSXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6c2VuZFdha2V1cE1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5l
ZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6ZGlkQXBwZW5kRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6bW9zdFJlY2VudGx5VXNlZERpc3BsYXlMaXN0SGFuZGxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpm
aW5kUmV1c2FibGVEaXNwbGF5TGlzdEhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSXRlbUJ1ZmZlcik6IERlbGV0ZWQu
CisKKyAgICAgICAgUmVtb3ZlIGFsbCBsb2dpYyBwcmV2aW91c2x5IHVzZWQgdG8gY29vcmRpbmF0
ZSBjb25jdXJyZW50IGRpc3BsYXkgbGlzdCBwcm9jZXNzaW5nIG9uIHRoZSByZW1vdGUgcmVuZGVy
aW5nCisgICAgICAgIGJhY2tlbmQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNlbmRUb1N0cmVhbSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6c2VuZFN5bmNUb1N0
cmVhbSk6CisKKyAgICAgICAgQWRkIGhlbHBlciBtZXRob2RzIHRvIHNlbmQgSVBDIG1lc3NhZ2Vz
IHRvIHRoZSByZW1vdGUgcmVuZGVyaW5nIGJhY2tlbmQgdGhyb3VnaCB0aGUgY29ubmVjdGlvbiBz
dHJlYW0uCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L0lQQ1Rlc3RpbmdBUEkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjplbmNv
ZGVSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzKToKKwogMjAyMS0xMC0x
MSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVh
biB1cCBzb21lIGNvZGUgaW4gRGlzcGxheUxpc3Q6OlJlY29yZGVyIGluIHByZXBhcmF0aW9uIGZv
ciBidWcgIzIzMDg2MApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDg1Y2E4OGY3YTk4MjQ2MjYyYzMxYTdmYjQx
Nzc5OTUwNTNlNDljZWUuLjY2OTk5MGJlYzk3ODY2OGJlZmMzY2JjOTM3MGE4MjViY2Q3MTUyZTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAKQEAgLTQ3NCwxMCArNDc0LDEwIEBAIFJlbW90ZUltYWdlRGVjb2RlckFW
RlByb3h5JiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjppbWFnZURlY29kZXJBVkZQcm94eSgp
CiB9CiAjZW5kaWYKIAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGVSZW5k
ZXJpbmdCYWNrZW5kKFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJiBj
cmVhdGlvblBhcmFtZXRlcnMpCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0
ZVJlbmRlcmluZ0JhY2tlbmQoUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVy
cyYmIGNyZWF0aW9uUGFyYW1ldGVycywgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiYgc3Ry
ZWFtQnVmZmVyKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kTWFwLmVuc3VyZShjcmVhdGlvblBhcmFtZXRlcnMuaWRlbnRpZmllciwgWyZdKCkgewotICAg
ICAgICByZXR1cm4gSVBDOjpTY29wZWRBY3RpdmVNZXNzYWdlUmVjZWl2ZVF1ZXVlIHsgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKGNyZWF0aW9uUGFyYW1ldGVy
cykpIH07CisgICAgICAgIHJldHVybiBJUEM6OlNjb3BlZEFjdGl2ZU1lc3NhZ2VSZWNlaXZlUXVl
dWUgeyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoY3JlYXRp
b25QYXJhbWV0ZXJzKSwgV1RGTW92ZShzdHJlYW1CdWZmZXIpKSB9OwogICAgIH0pOwogICAgIEFT
U0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5o
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApp
bmRleCAwNWE1MDVmZWUzMjkzNzhiMTMwYTljOTk3MzI2MDZiZTIwYjQ4N2M4Li44MGQyMWRlZGVi
ZWVhYTEzYmQwODM1NTVmNmNmY2M2YzExZjJiN2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTE3OCw3ICsxNzgs
NyBAQCBwcml2YXRlOgogICAgIFJlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyJiBtZWRpYVJlY29y
ZGVyTWFuYWdlcigpOwogI2VuZGlmCiAKLSAgICB2b2lkIGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQo
UmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmKTsKKyAgICB2b2lkIGNy
ZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1l
dGVycyYmLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJik7CiAgICAgdm9pZCByZWxlYXNl
UmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiAKICNpZiBFTkFC
TEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IGZlNDhjYTIwYmEwODk1
YWI4YWY3NGU5NjI2NzRlZjFiM2RkZTg3ZmQuLmMxYmY4MDE5Y2VhYjQxZjc5YTZmNWFkZWUxZmE4
NjE2ZTIwNWViMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0yMyw3ICsyMyw3
IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiBtZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKLSAgICB2b2lkIENyZWF0ZVJlbmRl
cmluZ0JhY2tlbmQoc3RydWN0IFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9u
UGFyYW1ldGVycyBjcmVhdGlvblBhcmFtZXRlcnMpCisgICAgdm9pZCBDcmVhdGVSZW5kZXJpbmdC
YWNrZW5kKHN0cnVjdCBXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFt
ZXRlcnMgY3JlYXRpb25QYXJhbWV0ZXJzLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXIgc3Ry
ZWFtQnVmZmVyKQogICAgIHZvaWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKICNpZiBF
TkFCTEUoV0VCR0wpCiAgICAgdm9pZCBDcmVhdGVHcmFwaGljc0NvbnRleHRHTChzdHJ1Y3QgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIFdlYktpdDo6R3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyIGdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgV2Vi
S2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ciwgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyIHN0cmVhbSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9jb2NvYS9HUFVQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvY29jb2EvR1BVUHJvY2Vzc0NvY29hLm1tCmluZGV4IDJmOWNhMTg3ZjMw
MmU3MjUzYzA2ZjkzZDQ2NmY4MTNkZTg3MDMzZTMuLmIwMmZkOTQ5MmU3NWM5NzA4NTkzNGY2MDE4
Y2Y4MWVkNWNiNTkyNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9jb2Nv
YS9HUFVQcm9jZXNzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2NvY29h
L0dQVVByb2Nlc3NDb2NvYS5tbQpAQCAtNTEsMTAgKzUxLDcgQEAgUmV0YWluUHRyPE5TRGljdGlv
bmFyeT4gR1BVUHJvY2Vzczo6YWRkaXRpb25hbFN0YXRlRm9yRGlhZ25vc3RpY1JlcG9ydCgpIGNv
bnN0CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGF1dG8gc3RhdGVJ
bmZvID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoQ2FwYWNp
dHk6YmFja2VuZE1hcC5zaXplKCldKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgaWRlbnRpZmll
ckFuZEJhY2tlbmQgOiBiYWNrZW5kTWFwKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgW2JhY2tl
bmRJZGVudGlmaWVyLCBiYWNrZW5kXSA9IGlkZW50aWZpZXJBbmRCYWNrZW5kOwotICAgICAgICAg
ICAgICAgIFtzdGF0ZUluZm8gc2V0T2JqZWN0OkAobmFtZShiYWNrZW5kLT5sYXN0S25vd25TdGF0
ZSgpKSkgZm9yS2V5OmJhY2tlbmRJZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKV07Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBGSVhNRTogTG9nIHNvbWUgYWRkaXRpb25hbCBkaWFnbm9z
dGljIHN0YXRlIG9uIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuCiAgICAgICAgICAgICBbd2ViUHJv
Y2Vzc0Nvbm5lY3Rpb25JbmZvIHNldE9iamVjdDpzdGF0ZUluZm8uZ2V0KCkgZm9yS2V5OndlYlBy
b2Nlc3NJZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKV07CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXIuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGVhNTRmN2RiMWM4NTkzYjgzZGFkZGIwZGU5NDJjYzU4
NmQ1N2ZiMzQuLmE2ZDE2MzRhMWQ5Y2MyNjA1NzczMmZjMDQ2MGVlNTg2M2EzNGNmYzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTU0LDcgKzU0LDExIEBAIHZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6c3RhcnRMaXN0ZW5pbmdGb3JJUEMoKQogewogICAgIEFTU0VS
VCghbV9pc0xpc3RlbmluZ0ZvcklQQyk7CiAgICAgbV9pc0xpc3RlbmluZ0ZvcklQQyA9IHRydWU7
Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZCB5ZXQuCisgICAgLy8gRklYTUU6IENhbiB3
ZSBhdm9pZCBzeW5jaHJvbm91cyBkaXNwYXRjaCBoZXJlIGJ5IGFkanVzdGluZyB0aGUgYXNzZXJ0
aW9uIGluIGBDb25uZWN0aW9uOjplbnF1ZXVlTWF0Y2hpbmdNZXNzYWdlc1RvTWVzc2FnZVJlY2Vp
dmVRdWV1ZWA/CisgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFsmXSB7CisgICAgICAgIG1f
cmVuZGVyaW5nQmFja2VuZC0+c3RyZWFtQ29ubmVjdGlvbigpLnN0YXJ0UmVjZWl2aW5nTWVzc2Fn
ZXMoKnRoaXMsIE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLm9iamVjdCgpLnRvVUludDY0KCkp
OworICAgIH0pOworICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+ZGlkQmVnaW5MaXN0ZW5pbmdGb3JJ
UEMoKnRoaXMpOwogfQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnN0b3BMaXN0
ZW5pbmdGb3JJUEMoKQpAQCAtNjIsNyArNjYsNyBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OnN0b3BMaXN0ZW5pbmdGb3JJUEMoKQogICAgIGlmICghbV9pc0xpc3RlbmluZ0ZvcklQ
QykKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZCB5ZXQu
CisgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zdHJlYW1Db25uZWN0aW9uKCkuc3RvcFJlY2Vpdmlu
Z01lc3NhZ2VzKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLm9iamVjdCgpLnRvVUludDY0KCkp
OwogICAgIG1faXNMaXN0ZW5pbmdGb3JJUEMgPSBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmggYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAppbmRleCA1
N2M4OWFjN2M1ZmM1Y2UyMDE2ZTFlYTQ5NThlYzc3NjEzODI5NTBmLi44ODJkNGRkMDAwZmZmMmI2
YzI3NGNhZmI5ZjRkNmZlMzdiNGMzZDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtMzAsNiArMzAsOCBAQAog
I2luY2x1ZGUgIkRlY29kZXIuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXIuaCIKKyNpbmNsdWRlICJTY29wZWRBY3RpdmVNZXNzYWdlUmVjZWl2ZVF1ZXVlLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9Db25jcmV0ZUltYWdlQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9EaXNwbGF5TGlzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgpA
QCAtNTQsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIDogQmFzZUNvbmNyZXRlSW1hZ2VCdWZm
ZXIocGFyYW1ldGVycywgV1RGTW92ZShiYWNrZW5kKSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLm9iamVjdCgpKQogICAgICAgICAsIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZChyZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kKQogICAgICAgICAsIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAgICAgICAgLCBtX3JlbW90ZURpc3BsYXlM
aXN0KHsgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y3JlYXRlKCp0aGlzLCByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIsIHJlbW90ZVJlbmRlcmluZ0JhY2tlbmQpIH0pCiAgICAgewogICAg
ICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5k
KG1fYmFja2VuZC0+Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKCksIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcik7CiAgICAgfQpAQCAtNzcsNDEgKzgwLDkgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDsKIAotICAgIGJv
b2wgYXBwbHkoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUgaXRlbSwgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgaWYgKGl0ZW0uaXM8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkdldFBpeGVsQnVmZmVyPigpKSB7Ci0gICAgICAgICAgICBhdXRv
JiBnZXRQaXhlbEJ1ZmZlckl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0
UGl4ZWxCdWZmZXI+KCk7Ci0gICAgICAgICAgICBhdXRvIHBpeGVsQnVmZmVyID0gQmFzZUNvbmNy
ZXRlSW1hZ2VCdWZmZXI6OmdldFBpeGVsQnVmZmVyKGdldFBpeGVsQnVmZmVySXRlbS5vdXRwdXRG
b3JtYXQoKSwgZ2V0UGl4ZWxCdWZmZXJJdGVtLnNyY1JlY3QoKSk7Ci0gICAgICAgICAgICBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQucG9wdWxhdGVHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeShX
VEZNb3ZlKHBpeGVsQnVmZmVyKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRQaXhlbEJ1
ZmZlcj4oKSkgewotICAgICAgICAgICAgYXV0byYgcHV0UGl4ZWxCdWZmZXJJdGVtID0gaXRlbS5n
ZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyPigpOwotICAgICAgICAgICAg
cHV0UGl4ZWxCdWZmZXIocHV0UGl4ZWxCdWZmZXJJdGVtLnBpeGVsQnVmZmVyKCksIHB1dFBpeGVs
QnVmZmVySXRlbS5zcmNSZWN0KCksIHB1dFBpeGVsQnVmZmVySXRlbS5kZXN0UG9pbnQoKSwgcHV0
UGl4ZWxCdWZmZXJJdGVtLmRlc3RGb3JtYXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
bHVzaENvbnRleHQ+KCkpIHsKLSAgICAgICAgICAgIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpm
bHVzaENvbnRleHQoKTsKLSAgICAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IGl0ZW0uZ2V0PFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaENvbnRleHQ+KCkuaWRlbnRpZmllcigpOwotICAgICAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKFNoYXJlZERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJBY2tu
b3dsZWRnaW5nIEZsdXNoeyIgPDwgaWRlbnRpZmllciA8PCAifSBpbiBJbWFnZSgiIDw8IG1fcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIDw8ICIpIik7Ci0gICAgICAgICAgICBtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuZGlkRmx1c2goaWRlbnRpZmllciwgbV9yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoaXRlbS5pczxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVt
QnVmZmVyPigpKSB7Ci0gICAgICAgICAgICBhdXRvIG5leHRCdWZmZXJJZGVudGlmaWVyID0gaXRl
bS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcj4o
KS5pZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2hhcmVkRGlzcGxh
eUxpc3RzLCBzdHJlYW0gPDwgIlN3aXRjaGluZyB0byBJdGVtc1siIDw8IG5leHRCdWZmZXJJZGVu
dGlmaWVyIDw8ICJdIik7Ci0gICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuc2V0
TmV4dEl0ZW1CdWZmZXJUb1JlYWQobmV4dEJ1ZmZlcklkZW50aWZpZXIsIG1fcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5hcHBseU1lZGlhSXRlbShp
dGVtLCBjb250ZXh0KTsKLSAgICB9Ci0KICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ7CiAgICAgUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOworICAgIElQQzo6U2NvcGVkQWN0
aXZlTWVzc2FnZVJlY2VpdmVRdWV1ZTxSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyPiBtX3JlbW90
ZURpc3BsYXlMaXN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5jcHAKaW5kZXggYzdkMWE4M2VlZmUzMWU3YzI5ZDcyM2RjYzVhZjc1Nzg2OTIyZjI0My4u
ZmVjNTRlNTY0YjQ3NTYxMWU5ZDJhNDI4MTQzYTc4ZTBkYWUyMTM0ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQog
Ci0jaW5jbHVkZSAiRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUuaCIKICNpbmNsdWRlICJHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXIuaCIKQEAgLTczLDQ2ICs3Miw1MSBAQAogbmFtZXNwYWNl
IFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotUmVmPFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZShHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kQ3JlYXRpb25QYXJhbWV0ZXJzJiYgY3JlYXRpb25QYXJhbWV0ZXJzKQorUmVmPFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZShHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzJiYgY3JlYXRpb25QYXJhbWV0ZXJzLCBJUEM6OlN0
cmVhbUNvbm5lY3Rpb25CdWZmZXImJiBzdHJlYW1CdWZmZXIpCiB7Ci0gICAgYXV0byBpbnN0YW5j
ZSA9IGFkb3B0UmVmKCpuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZChncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLCBXVEZNb3ZlKGNyZWF0aW9uUGFyYW1ldGVycykpKTsKKyAgICBhdXRvIGluc3Rh
bmNlID0gYWRvcHRSZWYoKm5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MsIFdURk1vdmUoY3JlYXRpb25QYXJhbWV0ZXJzKSwgV1RGTW92ZShzdHJlYW1C
dWZmZXIpKSk7CiAgICAgaW5zdGFuY2UtPnN0YXJ0TGlzdGVuaW5nRm9ySVBDKCk7CiAgICAgcmV0
dXJuIGluc3RhbmNlOwogfQogCi1SZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJiBjcmVhdGlv
blBhcmFtZXRlcnMpCi0gICAgOiBtX3dvcmtRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZCB3b3JrIHF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpTZXJpYWwsIFdv
cmtRdWV1ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmUpKQorUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZChHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0
ZXJzJiYgY3JlYXRpb25QYXJhbWV0ZXJzLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJiBz
dHJlYW1CdWZmZXIpCisgICAgOiBtX3dvcmtRdWV1ZSgiUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB3
b3JrIHF1ZXVlIikKKyAgICAsIG1fc3RyZWFtQ29ubmVjdGlvbihJUEM6OlN0cmVhbVNlcnZlckNv
bm5lY3Rpb246OmNyZWF0ZShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNvbm5lY3Rpb24oKSwg
V1RGTW92ZShzdHJlYW1CdWZmZXIpLCBtX3dvcmtRdWV1ZSkpCiAgICAgLCBtX2dwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykKICAgICAsIG1fcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIoY3JlYXRpb25QYXJhbWV0ZXJzLmlkZW50aWZpZXIpCi0gICAg
LCBtX3Jlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlKFdURk1vdmUoY3JlYXRpb25QYXJhbWV0ZXJz
LnJlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlKSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
RGlkQ3JlYXRlV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxheUxpc3RTdHJlYW0obV93b3JrUXVldWUu
d2FrZVVwU2VtYXBob3JlKCkpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KIAog
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzdGFydExpc3RlbmluZ0ZvcklQQygpCiB7Ci0g
ICAgbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCkuYWRkV29ya1F1ZXVl
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksIG1fd29ya1F1ZXVlLCB0aGlzLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyLnRvVUludDY0KCkpOworICAgIG1fc3RyZWFtQ29ubmVjdGlvbi0+c3RhcnRSZWNlaXZp
bmdNZXNzYWdlcygqdGhpcywgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgp
KTsKIH0KIAogUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQo
KQogewogICAgIC8vIE1ha2Ugc3VyZSB3ZSBkZXN0cm95IHRoZSBSZXNvdXJjZUNhY2hlIG9uIHRo
ZSBXb3JrUXVldWUgc2luY2UgaXQgZ2V0cyBwb3B1bGF0ZWQgb24gdGhlIFdvcmtRdWV1ZS4KICAg
ICAvLyBNYWtlIHN1cmUgcmVuZGVyaW5nIHJlc291cmNlIHJlcXVlc3QgaXMgcmVsZWFzZWQgYWZ0
ZXIgZGVzdHJveWluZyB0aGUgY2FjaGUuCi0gICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFtyZW5k
ZXJpbmdSZXNvdXJjZXNSZXF1ZXN0ID0gV1RGTW92ZShtX3JlbmRlcmluZ1Jlc291cmNlc1JlcXVl
c3QpLCByZW1vdGVSZXNvdXJjZUNhY2hlID0gV1RGTW92ZShtX3JlbW90ZVJlc291cmNlQ2FjaGUp
XSB7IH0pOworICAgIG1fd29ya1F1ZXVlLmRpc3BhdGNoKFtyZW5kZXJpbmdSZXNvdXJjZXNSZXF1
ZXN0ID0gV1RGTW92ZShtX3JlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QpLCByZW1vdGVSZXNvdXJj
ZUNhY2hlID0gV1RGTW92ZShtX3JlbW90ZVJlc291cmNlQ2FjaGUpXSB7IH0pOwogfQogCiB2b2lk
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnN0b3BMaXN0ZW5pbmdGb3JJUEMoKQogewogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgbV9zdHJlYW1Db25uZWN0aW9uLT5zdG9wUmVj
ZWl2aW5nTWVzc2FnZXMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpKTsK
KyAgICBmb3IgKGF1dG8mIHJlbW90ZUNvbnRleHQgOiBzdGQ6OmV4Y2hhbmdlKG1fcmVtb3RlRGlz
cGxheUxpc3RzLCB7IH0pKQorICAgICAgICByZW1vdGVDb250ZXh0LnN0b3BMaXN0ZW5pbmdGb3JJ
UEMoKTsKK30KIAotICAgIC8vIFRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIGRlc3RydWN0b3Ig
d29uJ3QgYmUgY2FsbGVkIHVudGlsIGRpc2Nvbm5lY3QoKSBpcyBjYWxsZWQgYW5kIHdlIHVucmVn
aXN0ZXIgb3Vyc2VsdmVzIGFzIGEgV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyIGJlY2F1c2UKLSAg
ICAvLyB0aGUgSVBDOjpDb25uZWN0aW9uIHJlZnMgaXRzIFdvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZl
cnMuCi0gICAgbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCkucmVtb3Zl
V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9V
SW50NjQoKSk7Cit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZEJlZ2luTGlzdGVuaW5n
Rm9ySVBDKFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXImIHJlbW90ZUNvbnRleHQpCit7CisgICAg
bV9yZW1vdGVEaXNwbGF5TGlzdHMuYWRkKHJlbW90ZUNvbnRleHQpOwogfQogCiB2b2lkIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpc3BhdGNoKEZ1bmN0aW9uPHZvaWQoKT4mJiB0YXNrKQogewot
ICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChXVEZNb3ZlKHRhc2spKTsKKyAgICBtX3dvcmtRdWV1
ZS5kaXNwYXRjaChXVEZNb3ZlKHRhc2spKTsKIH0KIAogSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0CkBAIC0xMjUs
MjQgKzEyOSw2IEBAIHVpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5k
ZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKICAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci50b1VJbnQ2NCgpOwogfQogCi1ib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFw
cGx5TWVkaWFJdGVtKERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlm
ICghaXRlbS5pczxEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhPigpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiBtZWRpYUl0ZW0gPSBpdGVtLmdldDxEaXNwbGF5TGlz
dDo6UGFpbnRGcmFtZUZvck1lZGlhPigpOwotICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChb
JiwgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cywgbWVkaWFQbGF5ZXJJZGVudGlmaWVyID0gbWVkaWFJdGVtLmlkZW50aWZpZXIoKV0gewotICAg
ICAgICBhdXRvIHBsYXllciA9IGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPnJlbW90ZU1lZGlh
UGxheWVyTWFuYWdlclByb3h5KCkubWVkaWFQbGF5ZXIobWVkaWFQbGF5ZXJJZGVudGlmaWVyKTsK
LSAgICAgICAgaWYgKCFwbGF5ZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIC8vIEl0
IGlzIGN1cnJlbnRseSBub3Qgc2FmZSB0byBjYWxsIHBhaW50RnJhbWVGb3JNZWRpYSgpIG9mZiB0
aGUgbWFpbiB0aHJlYWQuCi0gICAgICAgIGNvbnRleHQucGFpbnRGcmFtZUZvck1lZGlhKCpwbGF5
ZXIsIG1lZGlhSXRlbS5kZXN0aW5hdGlvbigpKTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVJbWFnZUJ1ZmZlckJh
Y2tlbmQoSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSwgUXVhbGlmaWVkUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsKICAgICBN
RVNTQUdFX0NIRUNLKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5wcm9jZXNzSWRlbnRpZmll
cigpID09IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+d2ViUHJvY2Vzc0lkZW50aWZpZXIo
KSwgIlNlbmRpbmcgZGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCkgbWVzc2FnZSB0byB0aGUg
d3Jvbmcgd2ViIHByb2Nlc3MuIik7CkBAIC0xODksMjE0ICsxNzUsNiBAQCB2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyV2l0aFF1YWxpZmllZElkZW50aWZpZXIo
Y29uc3QgRmxvYQogCiAgICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlSW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyKTsKICAgICB1cGRhdGVSZW5kZXJpbmdSZXNvdXJjZVJlcXVlc3QoKTsKLQot
ICAgIGlmIChtX3BlbmRpbmdXYWtldXBJbmZvICYmIG1fcGVuZGluZ1dha2V1cEluZm8tPnNob3Vs
ZFBlcmZvcm1XYWtldXAoaW1hZ2VCdWZmZXJSZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAgICBy
ZXN1bWVGcm9tUGVuZGluZ1dha2V1cEluZm9ybWF0aW9uKCk7Ci19Ci0KLVJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OlJlcGxheWVyRGVsZWdhdGUoV2ViQ29yZTo6SW1h
Z2VCdWZmZXImIGRlc3RpbmF0aW9uLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiByZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kKQotICAgIDogbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLSAgICAsIG1f
cmVtb3RlUmVuZGVyaW5nQmFja2VuZChyZW1vdGVSZW5kZXJpbmdCYWNrZW5kKQotewotfQotCi1i
b29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OmFwcGx5KFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0KQotewotICAgIGF1dG8gYXBwbHkgPSBbJl0oYXV0byYmIGRlc3Rp
bmF0aW9uKSB7Ci0gICAgICAgIHJldHVybiBkZXN0aW5hdGlvbi5hcHBseShpdGVtLCBncmFwaGlj
c0NvbnRleHQpOwotICAgIH07Ci0KLSAgICBpZiAobV9kZXN0aW5hdGlvbi5yZW5kZXJpbmdNb2Rl
KCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCi0gICAgICAgIHJldHVybiBhcHBseShz
dGF0aWNfY2FzdDxBY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyJj4obV9kZXN0aW5hdGlvbikp
OwotICAgIHJldHVybiBhcHBseShzdGF0aWNfY2FzdDxVbmFjY2VsZXJhdGVkUmVtb3RlSW1hZ2VC
dWZmZXImPihtX2Rlc3RpbmF0aW9uKSk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6ZGlkQ3JlYXRlTWFza0ltYWdlQnVmZmVyKFdlYkNvcmU6Oklt
YWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikKLXsKLSAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
ZGlkQ3JlYXRlTWFza0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyKTsKLX0KLQotdm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjpkaWRSZXNldE1hc2tJbWFnZUJ1ZmZl
cigpCi17Ci0gICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmRpZFJlc2V0TWFza0ltYWdlQnVm
ZmVyKCk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0
ZTo6cmVjb3JkUmVzb3VyY2VVc2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcikKLXsKLSAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQucmVt
b3RlUmVzb3VyY2VDYWNoZSgpLnJlY29yZFJlc291cmNlVXNlKHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcik7Ci19Ci0KLURpc3BsYXlMaXN0OjpSZXBsYXlSZXN1bHQgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6c3VibWl0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxp
c3QsIEltYWdlQnVmZmVyJiBkZXN0aW5hdGlvbikKLXsKLSAgICBpZiAoZGlzcGxheUxpc3QuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgUmVwbGF5ZXJEZWxlZ2F0ZSByZXBs
YXllckRlbGVnYXRlKGRlc3RpbmF0aW9uLCAqdGhpcyk7Ci0KLSAgICByZXR1cm4gV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlcGxheWVyIHsKLSAgICAgICAgZGVzdGluYXRpb24uY29udGV4dCgpLAot
ICAgICAgICBkaXNwbGF5TGlzdCwKLSAgICAgICAgJnJlbW90ZVJlc291cmNlQ2FjaGUoKS5pbWFn
ZUJ1ZmZlcnMoKSwKLSAgICAgICAgJnJlbW90ZVJlc291cmNlQ2FjaGUoKS5uYXRpdmVJbWFnZXMo
KSwKLSAgICAgICAgJnJlbW90ZVJlc291cmNlQ2FjaGUoKS5mb250cygpLAotICAgICAgICBtX2N1
cnJlbnRNYXNrSW1hZ2VCdWZmZXIuZ2V0KCksCi0gICAgICAgICZyZXBsYXllckRlbGVnYXRlCi0g
ICAgfS5yZXBsYXkoKTsKLX0KLQotUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpuZXh0RGVzdGluYXRpb25JbWFnZUJ1ZmZlckFmdGVyQXBwbHlpbmdEaXNwbGF5TGlz
dHMoSW1hZ2VCdWZmZXImIGluaXRpYWxEZXN0aW5hdGlvbiwgc2l6ZV90IGluaXRpYWxPZmZzZXQs
IERpc3BsYXlMaXN0UmVhZGVySGFuZGxlJiBoYW5kbGUsIEdQVVByb2Nlc3NXYWtldXBSZWFzb24g
cmVhc29uLCBQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcikKLXsKLSAgICBS
ZWZQdHIgZGVzdGluYXRpb24geyAmaW5pdGlhbERlc3RpbmF0aW9uIH07Ci0gICAgUmVmIGhhbmRs
ZVByb3RlY3RvciB7IGhhbmRsZSB9OwotCi0gICAgYXV0byBvZmZzZXQgPSBpbml0aWFsT2Zmc2V0
OwotICAgIHNpemVfdCBzaXplVG9SZWFkID0gMDsKLSAgICBkbyB7Ci0gICAgICAgIHNpemVUb1Jl
YWQgPSBoYW5kbGUudW5yZWFkQnl0ZXMoKTsKLSAgICB9IHdoaWxlICghc2l6ZVRvUmVhZCk7Ci0K
LSAgICB3aGlsZSAoZGVzdGluYXRpb24pIHsKLSAgICAgICAgYXV0byBkaXNwbGF5TGlzdCA9IGhh
bmRsZS5kaXNwbGF5TGlzdEZvclJlYWRpbmcob2Zmc2V0LCBzaXplVG9SZWFkLCAqdGhpcyk7Ci0g
ICAgICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUoZGlzcGxheUxpc3QsIG51bGxw
dHIsICJGYWlsZWQgdG8gbWFwIGRpc3BsYXkgbGlzdCBmcm9tIHNoYXJlZCBtZW1vcnkiKTsKLQot
I2lmICFMT0dfRElTQUJMRUQKLSAgICAgICAgYXV0byBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1l
Ojpub3coKTsKLSNlbmRpZgotICAgICAgICBhdXRvIHJlc3VsdCA9IHN1Ym1pdCgqZGlzcGxheUxp
c3QsICpkZXN0aW5hdGlvbik7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShTaGFyZWREaXNwbGF5
TGlzdHMsIHN0cmVhbSA8PCAiUmVhZCBbIiA8PCBvZmZzZXQgPDwgIiwgIiA8PCBvZmZzZXQgKyBy
ZXN1bHQubnVtYmVyT2ZCeXRlc1JlYWQgPDwgIl07IEl0ZW1zWyIgPDwgaGFuZGxlLmlkZW50aWZp
ZXIoKSA8PCAiXSA9PiBJbWFnZSgiIDw8IGRlc3RpbmF0aW9uLT5yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIoKSA8PCAiKSBpbiAiIDw8IE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnRUaW1l
KTsKLSAgICAgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRShyZXN1bHQucmVhc29u
Rm9yU3RvcHBpbmcgIT0gRGlzcGxheUxpc3Q6OlN0b3BSZXBsYXlSZWFzb246OkludmFsaWRJdGVt
T3JFeHRlbnQsIG51bGxwdHIsICJEZXRlY3RlZCBpbnZhbGlkIGRpc3BsYXkgbGlzdCBpdGVtIG9y
IGV4dGVudCIpOwotICAgICAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKHJlc3Vs
dC5yZWFzb25Gb3JTdG9wcGluZyAhPSBEaXNwbGF5TGlzdDo6U3RvcFJlcGxheVJlYXNvbjo6T3V0
T2ZNZW1vcnksIG51bGxwdHIsICJDb3VuZCBub3QgYWxsb2NhdGUgbWVtb3J5Iik7Ci0KLSAgICAg
ICAgYXV0byBhZHZhbmNlUmVzdWx0ID0gaGFuZGxlLmFkdmFuY2UocmVzdWx0Lm51bWJlck9mQnl0
ZXNSZWFkKTsKLSAgICAgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRShhZHZhbmNl
UmVzdWx0LCBudWxscHRyLCAiRmFpbGVkIHRvIGFkdmFuY2UgZGlzcGxheSBsaXN0IHJlYWRlciBo
YW5kbGUiKTsKLSAgICAgICAgc2l6ZVRvUmVhZCA9ICphZHZhbmNlUmVzdWx0OwotCi0gICAgICAg
IENoZWNrZWRTaXplIGNoZWNrZWRPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgIGNoZWNrZWRPZmZz
ZXQgKz0gcmVzdWx0Lm51bWJlck9mQnl0ZXNSZWFkOwotICAgICAgICBNRVNTQUdFX0NIRUNLX1dJ
VEhfUkVUVVJOX1ZBTFVFKCFjaGVja2VkT2Zmc2V0Lmhhc092ZXJmbG93ZWQoKSwgbnVsbHB0ciwg
Ik92ZXJmbG93ZWQgd2hlbiBhZHZhbmNpbmcgc2hhcmVkIGRpc3BsYXkgbGlzdCBoYW5kbGUgb2Zm
c2V0Iik7Ci0KLSAgICAgICAgb2Zmc2V0ID0gY2hlY2tlZE9mZnNldDsKLSAgICAgICAgTUVTU0FH
RV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRShvZmZzZXQgPD0gaGFuZGxlLnNoYXJlZE1lbW9yeSgp
LnNpemUoKSwgbnVsbHB0ciwgIk91dC1vZi1ib3VuZHMgb2Zmc2V0IGludG8gc2hhcmVkIGRpc3Bs
YXkgbGlzdCBoYW5kbGUiKTsKLQotICAgICAgICBpZiAocmVzdWx0LnJlYXNvbkZvclN0b3BwaW5n
ID09IERpc3BsYXlMaXN0OjpTdG9wUmVwbGF5UmVhc29uOjpDaGFuZ2VEZXN0aW5hdGlvbkltYWdl
QnVmZmVyKSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbiA9IG1fcmVtb3RlUmVzb3VyY2VDYWNo
ZS5jYWNoZWRJbWFnZUJ1ZmZlcigqcmVzdWx0Lm5leHREZXN0aW5hdGlvbkltYWdlQnVmZmVyKTsK
LSAgICAgICAgICAgIGlmICghZGVzdGluYXRpb24pIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
IW1fcGVuZGluZ1dha2V1cEluZm8pOwotICAgICAgICAgICAgICAgIG1fcGVuZGluZ1dha2V1cElu
Zm8gPSB7ewotICAgICAgICAgICAgICAgICAgICBoYW5kbGUuaWRlbnRpZmllcigpLAotICAgICAg
ICAgICAgICAgICAgICBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgIHsgKnJlc3VsdC5uZXh0
RGVzdGluYXRpb25JbWFnZUJ1ZmZlciwgd2ViUHJvY2Vzc0lkZW50aWZpZXIgfSwKLSAgICAgICAg
ICAgICAgICAgICAgcmVhc29uLAotICAgICAgICAgICAgICAgICAgICBzdGQ6Om51bGxvcHQsCi0g
ICAgICAgICAgICAgICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZTo6V2FpdGluZ0Zv
ckRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIKLSAgICAgICAgICAgICAgICB9fTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQucmVhc29uRm9yU3RvcHBpbmcgPT0g
RGlzcGxheUxpc3Q6OlN0b3BSZXBsYXlSZWFzb246Ok1pc3NpbmdDYWNoZWRSZXNvdXJjZSkgewot
ICAgICAgICAgICAgbV9wZW5kaW5nV2FrZXVwSW5mbyA9IHt7Ci0gICAgICAgICAgICAgICAgaGFu
ZGxlLmlkZW50aWZpZXIoKSwKLSAgICAgICAgICAgICAgICBvZmZzZXQsCi0gICAgICAgICAgICAg
ICAgeyBkZXN0aW5hdGlvbi0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIHdlYlByb2Nl
c3NJZGVudGlmaWVyIH0sCi0gICAgICAgICAgICAgICAgcmVhc29uLAotICAgICAgICAgICAgICAg
IHsgeyAqcmVzdWx0Lm1pc3NpbmdDYWNoZWRSZXNvdXJjZUlkZW50aWZpZXIsIHdlYlByb2Nlc3NJ
ZGVudGlmaWVyIH0gfSwKLSAgICAgICAgICAgICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3Rh
dGU6OldhaXRpbmdGb3JDYWNoZWRSZXNvdXJjZQotICAgICAgICAgICAgfX07Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAobV9wZW5kaW5nV2FrZXVwSW5mbykKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGlmICghc2l6ZVRvUmVhZCkgewotICAgICAgICAgICAgaWYgKHJlYXNvbiAhPSBH
UFVQcm9jZXNzV2FrZXVwUmVhc29uOjpJdGVtQ291bnRIeXN0ZXJlc2lzRXhjZWVkZWQpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGhhbmRsZS5zdGFydFdhaXRpbmcoKTsK
LSAgICAgICAgICAgIG1fcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmUud2FpdEZvcigzMF91cyk7
Ci0KLSAgICAgICAgICAgIGF1dG8gc3RvcFdhaXRpbmdSZXN1bHQgPSBoYW5kbGUuc3RvcFdhaXRp
bmcoKTsKLSAgICAgICAgICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUoc3RvcFdh
aXRpbmdSZXN1bHQsIG51bGxwdHIsICJJbnZhbGlkIHdhaXRpbmcgc3RhdHVzIGRldGVjdGVkIHdo
ZW4gcmVzdW1pbmcgZGlzcGxheSBsaXN0IHByb2Nlc3NpbmciKTsKLQotICAgICAgICAgICAgYXV0
byByZXN1bWVSZWFkaW5nSW5mbyA9IHN0b3BXYWl0aW5nUmVzdWx0LnZhbHVlKCk7Ci0gICAgICAg
ICAgICBpZiAoIXJlc3VtZVJlYWRpbmdJbmZvKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBzaXplVG9SZWFkID0gaGFuZGxlLnVucmVhZEJ5dGVzKCk7Ci0gICAgICAgICAg
ICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKHNpemVUb1JlYWQsIG51bGxwdHIsICJO
byB1bnJlYWQgYnl0ZXMgd2hlbiByZXN1bWluZyBkaXNwbGF5IGxpc3QgcHJvY2Vzc2luZyIpOwot
Ci0gICAgICAgICAgICBhdXRvIG5ld0Rlc3RpbmF0aW9uSWRlbnRpZmllciA9IG1ha2VPYmplY3RJ
ZGVudGlmaWVyPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllclR5cGU+KHJlc3VtZVJlYWRpbmdJ
bmZvLT5kZXN0aW5hdGlvbik7Ci0gICAgICAgICAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJO
X1ZBTFVFKG5ld0Rlc3RpbmF0aW9uSWRlbnRpZmllci5pc1ZhbGlkKCksIG51bGxwdHIsICJJbnZh
bGlkIGltYWdlIGJ1ZmZlciBkZXN0aW5hdGlvbiB3aGVuIHJlc3VtaW5nIGRpc3BsYXkgbGlzdCBw
cm9jZXNzaW5nIik7Ci0KLSAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gbV9yZW1vdGVSZXNvdXJj
ZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVyKG5ld0Rlc3RpbmF0aW9uSWRlbnRpZmllcik7Ci0gICAg
ICAgICAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKGRlc3RpbmF0aW9uLCBudWxs
cHRyLCAiTWlzc2luZyBpbWFnZSBidWZmZXIgZGVzdGluYXRpb24gd2hlbiByZXN1bWluZyBkaXNw
bGF5IGxpc3QgcHJvY2Vzc2luZyIpOwotCi0gICAgICAgICAgICBvZmZzZXQgPSByZXN1bWVSZWFk
aW5nSW5mby0+b2Zmc2V0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlc3RpbmF0
aW9uOwotfQotCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Ondha2VVcEFuZEFwcGx5RGlz
cGxheUxpc3QoY29uc3QgR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMmIGFyZ3VtZW50
cykKLXsKLSAgICAvLyBJbW1lZGlhdGVseSB0dXJuIHRoZSBSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgKHdoaWNoIGlzIGVycm9yLXByb25lKSB0byBhIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciwKLSAgICAvLyBhbmQgdXNlIGEgaGVscGVyIGZ1bmN0aW9uIHRvIG1ha2Ug
c3VyZSB0aGF0IGRvbid0IGFjY2lkZW50YWxseSB1c2UgdGhlIFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciAoYmVjYXVzZSB0aGUgaGVscGVyIGZ1bmN0aW9uIGNhbid0IHNlZSBpdCkuCi0gICAg
d2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdFdpdGhRdWFsaWZpZWRJZGVudGlmaWVyKGFyZ3VtZW50
cy5pdGVtQnVmZmVySWRlbnRpZmllciwgYXJndW1lbnRzLm9mZnNldCwgeyBhcmd1bWVudHMuZGVz
dGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIsIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cy0+d2ViUHJvY2Vzc0lkZW50aWZpZXIoKSB9LCBhcmd1bWVudHMucmVhc29uKTsKLX0KLQotdm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp3YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0V2l0aFF1
YWxpZmllZElkZW50aWZpZXIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlm
aWVyIGl0ZW1CdWZmZXJJZGVudGlmaWVyLCB1aW50NjRfdCBvZmZzZXQsIFF1YWxpZmllZFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllciwg
R1BVUHJvY2Vzc1dha2V1cFJlYXNvbiByZWFzb24pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29wZShXYWtlVXBBbmRBcHBseURp
c3BsYXlMaXN0U3RhcnQsIFdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3RFbmQpOwotCi0gICAgdXBk
YXRlTGFzdEtub3duU3RhdGUoUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpCZWdhblJlcGxh
eWluZ0Rpc3BsYXlMaXN0KTsKLQotICAgIFJlZlB0ciBkZXN0aW5hdGlvbkltYWdlQnVmZmVyID0g
bV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVyKGRlc3RpbmF0aW9uSW1hZ2VC
dWZmZXJJZGVudGlmaWVyLm9iamVjdCgpKTsKLSAgICBNRVNTQUdFX0NIRUNLKGRlc3RpbmF0aW9u
SW1hZ2VCdWZmZXIsICJNaXNzaW5nIGRlc3RpbmF0aW9uIGltYWdlIGJ1ZmZlciIpOwotCi0gICAg
YXV0byBpbml0aWFsSGFuZGxlID0gbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXMuZ2V0KGl0ZW1C
dWZmZXJJZGVudGlmaWVyKTsKLSAgICBNRVNTQUdFX0NIRUNLKGluaXRpYWxIYW5kbGUsICJNaXNz
aW5nIGluaXRpYWwgc2hhcmVkIGRpc3BsYXkgbGlzdCBoYW5kbGUiKTsKLQotICAgIExPR19XSVRI
X1NUUkVBTShTaGFyZWREaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiV2FraW5nIHVwIHRvIEl0ZW1z
WyIgPDwgaXRlbUJ1ZmZlcklkZW50aWZpZXIgPDwgIl0gPT4gSW1hZ2UoIiA8PCBkZXN0aW5hdGlv
bkltYWdlQnVmZmVySWRlbnRpZmllci5vYmplY3QoKSA8PCAiKSBhdCAiIDw8IG9mZnNldCk7Ci0g
ICAgZGVzdGluYXRpb25JbWFnZUJ1ZmZlciA9IG5leHREZXN0aW5hdGlvbkltYWdlQnVmZmVyQWZ0
ZXJBcHBseWluZ0Rpc3BsYXlMaXN0cygqZGVzdGluYXRpb25JbWFnZUJ1ZmZlciwgb2Zmc2V0LCAq
aW5pdGlhbEhhbmRsZSwgcmVhc29uLCBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPndlYlBy
b2Nlc3NJZGVudGlmaWVyKCkpOwotCi0gICAgLy8gRklYTUU6IEFsbCB0aGUgY2FsbGVycyBwYXNz
IG1fcGVuZGluZ1dha2V1cEluZm8ncyBmaWVsZHMgc28gdGhlIGJvZHkgb2YgdGhpcyBmdW5jdGlv
biBzaG91bGQganVzdCBiZSB0aGlzIGxvb3AuCi0gICAgd2hpbGUgKGRlc3RpbmF0aW9uSW1hZ2VC
dWZmZXIgJiYgbV9wZW5kaW5nV2FrZXVwSW5mbykgewotICAgICAgICBpZiAobV9wZW5kaW5nV2Fr
ZXVwSW5mby0+bWlzc2luZ0NhY2hlZFJlc291cmNlSWRlbnRpZmllcikKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGF1dG8gbmV4dEhhbmRsZSA9IG1fc2hhcmVkRGlzcGxheUxpc3RIYW5k
bGVzLmdldChtX3BlbmRpbmdXYWtldXBJbmZvLT5pdGVtQnVmZmVySWRlbnRpZmllcik7Ci0gICAg
ICAgIGlmICghbmV4dEhhbmRsZSkgewotICAgICAgICAgICAgLy8gSWYgdGhlIGhhbmRsZSBpZGVu
dGlmaWVyIGlzIGN1cnJlbnRseSB1bmtub3duLCB3YWl0IHVudGlsIHRoZSBHUFUgcHJvY2VzcyBy
ZWNlaXZlcyBhbgotICAgICAgICAgICAgLy8gSVBDIG1lc3NhZ2Ugd2l0aCBhIHNoYXJlZCBtZW1v
cnkgaGFuZGxlIHRvIHRoZSBuZXh0IGl0ZW0gYnVmZmVyLgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBPdGhlcndpc2UsIGNvbnRpbnVlIHJlYWRpbmcgdGhlIG5l
eHQgZGlzcGxheSBsaXN0IGl0ZW0gYnVmZmVyIGZyb20gdGhlIHN0YXJ0LgotICAgICAgICBhdXRv
IG9mZnNldCA9IG1fcGVuZGluZ1dha2V1cEluZm8tPm9mZnNldDsKLSAgICAgICAgYXV0byByZWFz
b24gPSBtX3BlbmRpbmdXYWtldXBJbmZvLT5yZWFzb247Ci0gICAgICAgIG1fcGVuZGluZ1dha2V1
cEluZm8gPSBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIgPSBu
ZXh0RGVzdGluYXRpb25JbWFnZUJ1ZmZlckFmdGVyQXBwbHlpbmdEaXNwbGF5TGlzdHMoKmRlc3Rp
bmF0aW9uSW1hZ2VCdWZmZXIsIG9mZnNldCwgKm5leHRIYW5kbGUsIHJlYXNvbiwgbV9ncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLT53ZWJQcm9jZXNzSWRlbnRpZmllcigpKTsKLSAgICB9Ci0gICAg
TE9HX1dJVEhfU1RSRUFNKFNoYXJlZERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJHb2luZyBiYWNr
IHRvIHNsZWVwLiIpOwotCi0gICAgaWYgKG1fcGVuZGluZ1dha2V1cEluZm8pCi0gICAgICAgIHVw
ZGF0ZUxhc3RLbm93blN0YXRlKG1fcGVuZGluZ1dha2V1cEluZm8tPnN0YXRlKTsKLSAgICBlbHNl
Ci0gICAgICAgIHVwZGF0ZUxhc3RLbm93blN0YXRlKFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0
ZTo6RmluaXNoZWRSZXBsYXlpbmdEaXNwbGF5TGlzdCk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6c2V0TmV4dEl0ZW1CdWZmZXJUb1JlYWQoRGlzcGxheUxpc3Q6Okl0ZW1CdWZm
ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciBkZXN0aW5hdGlvbklkZW50aWZpZXIpCi17Ci0gICAgbV9wZW5kaW5nV2FrZXVwSW5mbyA9
IHt7Ci0gICAgICAgIGlkZW50aWZpZXIsCi0gICAgICAgIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxl
OjpoZWFkZXJTaXplKCksCi0gICAgICAgIGRlc3RpbmF0aW9uSWRlbnRpZmllciwKLSAgICAgICAg
R1BVUHJvY2Vzc1dha2V1cFJlYXNvbjo6VW5zcGVjaWZpZWQsCi0gICAgICAgIHN0ZDo6bnVsbG9w
dCwKLSAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpXYWl0aW5nRm9ySXRlbUJ1
ZmZlcgotICAgIH19OwogfQogCiBzdGQ6Om9wdGlvbmFsPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxl
PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1
ZmZlckhlbHBlcihzaXplX3QgYnl0ZUNvdW50KQpAQCAtNTQ3LDkgKzMyNSw2IEBAIHZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6Y2FjaGVOYXRpdmVJbWFnZVdpdGhRdWFsaWZpZWRJZGVudGlm
aWVyKGNvbnN0IFNoYXJlCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcmVtb3RlUmVzb3VyY2VD
YWNoZS5jYWNoZU5hdGl2ZUltYWdlKCppbWFnZSk7Ci0KLSAgICBpZiAobV9wZW5kaW5nV2FrZXVw
SW5mbyAmJiBtX3BlbmRpbmdXYWtldXBJbmZvLT5zaG91bGRQZXJmb3JtV2FrZXVwKG5hdGl2ZUlt
YWdlUmVzb3VyY2VJZGVudGlmaWVyKSkKLSAgICAgICAgcmVzdW1lRnJvbVBlbmRpbmdXYWtldXBJ
bmZvcm1hdGlvbigpOwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNhY2hlRm9u
dChSZWY8V2ViQ29yZTo6Rm9udD4mJiBmb250KQpAQCAtNTYzLDEwICszMzgsNyBAQCB2b2lkIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNhY2hlRm9udChSZWY8V2ViQ29yZTo6Rm9udD4mJiBmb250
KQogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjYWNoZUZvbnRXaXRoUXVhbGlmaWVkSWRl
bnRpZmllcihSZWY8Rm9udD4mJiBmb250LCBRdWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgZm9udFJlc291cmNlSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKLQogICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZUZvbnQoV1RGTW92ZShm
b250KSk7Ci0gICAgaWYgKG1fcGVuZGluZ1dha2V1cEluZm8gJiYgbV9wZW5kaW5nV2FrZXVwSW5m
by0+c2hvdWxkUGVyZm9ybVdha2V1cChmb250UmVzb3VyY2VJZGVudGlmaWVyKSkKLSAgICAgICAg
cmVzdW1lRnJvbVBlbmRpbmdXYWtldXBJbmZvcm1hdGlvbigpOwogfQogCiB2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmRlbGV0ZUFsbEZvbnRzKCkKQEAgLTU5MiwxNjkgKzM2NCw5IEBAIHZv
aWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZVJlbW90ZVJlc291cmNlV2l0aFF1YWxp
ZmllZElkZW50aWZpZXIoUXVhbGlmCiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Zmlu
YWxpemVSZW5kZXJpbmdVcGRhdGUoUmVuZGVyaW5nVXBkYXRlSUQgcmVuZGVyaW5nVXBkYXRlSUQp
CiB7Ci0gICAgYXV0byBzaG91bGRQZXJmb3JtV2FrZXVwID0gWyZdIHsKLSAgICAgICAgcmV0dXJu
IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihtX3BlbmRpbmdXYWtldXBJ
bmZvLT5kZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllci5vYmplY3QoKSkgJiYgbV9zaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZXMuY29udGFpbnMobV9wZW5kaW5nV2FrZXVwSW5mby0+aXRlbUJ1
ZmZlcklkZW50aWZpZXIpOwotICAgIH07Ci0KLSAgICBpZiAobV9wZW5kaW5nV2FrZXVwSW5mbyAm
JiBzaG91bGRQZXJmb3JtV2FrZXVwKCkpCi0gICAgICAgIHJlc3VtZUZyb21QZW5kaW5nV2FrZXVw
SW5mb3JtYXRpb24oKTsKLQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6RGlkRmluYWxpemVSZW5kZXJpbmdVcGRhdGUocmVuZGVyaW5nVXBkYXRlSUQpLCBt
X3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpkaWRDcmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShEaXNwbGF5TGlzdDo6SXRl
bUJ1ZmZlcklkZW50aWZpZXIgaXRlbUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IFNoYXJlZE1lbW9y
eTo6SVBDSGFuZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5h
dGlvbkJ1ZmZlcklkZW50aWZpZXIpCi17Ci0gICAgLy8gSW1tZWRpYXRlbHkgdHVybiB0aGUgUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyICh3aGljaCBpcyBlcnJvci1wcm9uZSkgdG8gYSBRdWFs
aWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsCi0gICAgLy8gYW5kIHVzZSBhIGhlbHBl
ciBmdW5jdGlvbiB0byBtYWtlIHN1cmUgdGhhdCBkb24ndCBhY2NpZGVudGFsbHkgdXNlIHRoZSBS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgKGJlY2F1c2UgdGhlIGhlbHBlciBmdW5jdGlvbiBj
YW4ndCBzZWUgaXQpLgotICAgIGRpZENyZWF0ZVNoYXJlZERpc3BsYXlMaXN0SGFuZGxlV2l0aFF1
YWxpZmllZElkZW50aWZpZXIoaXRlbUJ1ZmZlcklkZW50aWZpZXIsIGhhbmRsZSwgeyBkZXN0aW5h
dGlvbkJ1ZmZlcklkZW50aWZpZXIsIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+d2ViUHJv
Y2Vzc0lkZW50aWZpZXIoKSB9KTsKLX0KLQotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpk
aWRDcmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZVdpdGhRdWFsaWZpZWRJZGVudGlmaWVyKERp
c3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpdGVtQnVmZmVySWRlbnRpZmllciwgY29u
c3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmIGhhbmRsZSwgUXVhbGlmaWVkUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAg
IE1FU1NBR0VfQ0hFQ0soIW1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzLmNvbnRhaW5zKGl0ZW1C
dWZmZXJJZGVudGlmaWVyKSwgIkR1cGxpY2F0ZSBzaGFyZWQgZGlzcGxheSBsaXN0IGhhbmRsZSIp
OwotCi0gICAgaWYgKGF1dG8gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjptYXAoaGFuZGxl
LmhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkV3JpdGUpKSB7Ci0gICAgICAg
IGF1dG8gaGFuZGxlID0gRGlzcGxheUxpc3RSZWFkZXJIYW5kbGU6OmNyZWF0ZShpdGVtQnVmZmVy
SWRlbnRpZmllciwgc2hhcmVkTWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICBNRVNT
QUdFX0NIRUNLKGhhbmRsZSwgIlRoZXJlIG11c3QgYmUgZW5vdWdoIHNwYWNlIHRvIGNyZWF0ZSB0
aGUgaGFuZGxlLiIpOwotICAgICAgICBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlcy5zZXQoaXRl
bUJ1ZmZlcklkZW50aWZpZXIsIGhhbmRsZSk7Ci0gICAgfQotCi0gICAgaWYgKG1fcGVuZGluZ1dh
a2V1cEluZm8gJiYgbV9wZW5kaW5nV2FrZXVwSW5mby0+c2hvdWxkUGVyZm9ybVdha2V1cChpdGVt
QnVmZmVySWRlbnRpZmllcikpCi0gICAgICAgIHJlc3VtZUZyb21QZW5kaW5nV2FrZXVwSW5mb3Jt
YXRpb24oKTsKLX0KLQotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpyZXN1bWVGcm9tUGVu
ZGluZ1dha2V1cEluZm9ybWF0aW9uKCkKLXsKLSAgICBhdXRvIGl0ZW1CdWZmZXJJZGVudGlmaWVy
ID0gbV9wZW5kaW5nV2FrZXVwSW5mby0+aXRlbUJ1ZmZlcklkZW50aWZpZXI7Ci0gICAgYXV0byBv
ZmZzZXQgPSBtX3BlbmRpbmdXYWtldXBJbmZvLT5vZmZzZXQ7Ci0gICAgYXV0byBkZXN0aW5hdGlv
bkltYWdlQnVmZmVySWRlbnRpZmllciA9IG1fcGVuZGluZ1dha2V1cEluZm8tPmRlc3RpbmF0aW9u
SW1hZ2VCdWZmZXJJZGVudGlmaWVyOwotICAgIGF1dG8gcmVhc29uID0gbV9wZW5kaW5nV2FrZXVw
SW5mby0+cmVhc29uOwotICAgIG1fcGVuZGluZ1dha2V1cEluZm8gPSBzdGQ6Om51bGxvcHQ7Ci0g
ICAgd2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdFdpdGhRdWFsaWZpZWRJZGVudGlmaWVyKGl0ZW1C
dWZmZXJJZGVudGlmaWVyLCBvZmZzZXQsIGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVy
LCByZWFzb24pOwotfQotCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZENyZWF0ZU1h
c2tJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0gICAgTUVTU0FHRV9DSEVDSyghbV9jdXJyZW50TWFza0ltYWdl
QnVmZmVyLCAiQ3VycmVudCBtYXNrIGltYWdlIGJ1ZmZlciBpcyBhbHJlYWR5IHNldC4iKTsKLSAg
ICBtX2N1cnJlbnRNYXNrSW1hZ2VCdWZmZXIgPSAmaW1hZ2VCdWZmZXI7Ci19Ci0KLXZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIoKQotewotICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIE1FU1NBR0VfQ0hFQ0sobV9jdXJyZW50TWFz
a0ltYWdlQnVmZmVyLCAiQ3VycmVudCBtYXNrIGltYWdlIGJ1ZmZlciB3YXMgbm90IGFscmVhZHkg
c2V0LiIpOwotICAgIG1fY3VycmVudE1hc2tJbWFnZUJ1ZmZlciA9IG51bGxwdHI7Ci19Ci0KLXN0
ZDo6b3B0aW9uYWw8RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVSTiBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkZWNvZGVJdGVtKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBsZW5ndGgsIERpc3BsYXlMaXN0OjpJdGVtVHlwZSB0eXBlLCB1aW50OF90KiBoYW5kbGVM
b2NhdGlvbikKLXsKLSAgICAvKiBUaGlzIG5lZWRzIHRvIG1hdGNoICgxKSBpc0lubGluZUl0ZW0o
KSBpbiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcCwgKDIpIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6
OmVuY29kZUl0ZW0oKSwKLSAgICAgKiBhbmQgKDMpIGFsbCB0aGUgInN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0icyBpbnNpZGUgdGhlIGluZGl2aWR1YWwgaXRlbSBjbGFzc2VzLgot
ICAgICAqIFNlZSB0aGUgY29tbWVudCBhdCB0aGUgdG9wIG9mIERpc3BsYXlMaXN0SXRlbXMuaCBm
b3Igd2h5LiAqLwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkJlZ2luQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOgotICAgICAgICByZXR1cm4gZGVj
b2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpCZWdpbkNsaXBUb0RyYXdpbmdDb21tYW5kcz4oZGF0
YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkNsaXBPdXRUb1BhdGg6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxh
eUxpc3Q6OkNsaXBPdXRUb1BhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAg
IGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwUGF0aDoKLSAgICAgICAgcmV0dXJuIGRl
Y29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6Q2xpcFBhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxl
TG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5n
UGF0aDoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6RHJhd0Zv
Y3VzUmluZ1BhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6Ci0gICAgICAgIHJldHVybiBk
ZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0cz4oZGF0YSwgbGVu
Z3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRy
YXdHbHlwaHM6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkRy
YXdHbHlwaHM+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgotICAgICAgICByZXR1cm4gZGVjb2Rl
QW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0PihkYXRhLCBsZW5ndGgsIGhh
bmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdGg6
Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkRyYXdQYXRoPihk
YXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRl
PERpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9j
YXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUGF0aDoKLSAgICAg
ICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6RmlsbFBhdGg+KGRhdGEsIGxl
bmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpG
aWxsUmVjdFdpdGhDb2xvcjoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5
TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3I+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwot
ICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKLSAg
ICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3Jh
ZGllbnQ+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKLSAgICAgICAgcmV0dXJuIGRl
Y29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGRhdGEs
IGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpGaWxsUm91bmRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxh
eUxpc3Q6OkZpbGxSb3VuZGVkUmVjdD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0g
ICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyOgotICAgICAgICBy
ZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpHZXRQaXhlbEJ1ZmZlcj4oZGF0YSwg
bGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OlB1dFBpeGVsQnVmZmVyOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlM
aXN0OjpQdXRQaXhlbEJ1ZmZlcj4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAg
Y2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4g
ZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaD4oZGF0YSwgbGVuZ3RoLCBo
YW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldFN0YXRl
OgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpTZXRTdGF0ZT4o
ZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxh
eUxpc3Q6OlN0cm9rZVBhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNh
c2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOgotI2lmIFVT
RShDRykKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoK
LSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgotI2Vu
ZGlmCi0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsZWFyUmVjdDoKLSAgICBjYXNl
IERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgY2FzZSBEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkNsaXA6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBP
dXQ6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyOgot
ICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpFbmRDbGlwVG9EcmF3aW5nQ29tbWFuZHM6
Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgIGNh
c2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgotICAg
IGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKLSAgICBjYXNlIERpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkRyYXdQYXR0ZXJuOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TGlu
ZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1JlY3Q6Ci0gICAgY2FzZSBE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAgIGNhc2UgRGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbExpbmU6Ci0gICAgY2Fz
ZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxBcmM6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkZpbGxRdWFkQ3VydmU6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkZpbGxCZXppZXJDdXJ2ZToKLSNlbmRpZgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpGaWxsUmVjdDoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Rmx1c2hDb250ZXh0
OgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZURlc3Rp
bmF0aW9uSW1hZ2VCdWZmZXI6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6Ok1ldGFD
b21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgY2FzZSBEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKLSNlbmRpZgotICAgIGNhc2Ug
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSZXN0b3JlOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpSb3RhdGU6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNhdmU6Ci0g
ICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNjYWxlOgotICAgIGNhc2UgRGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNl
dElubGluZUZpbGxDb2xvcjoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5s
aW5lU3Ryb2tlQ29sb3I6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVD
YXA6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgIGNh
c2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgIGNhc2UgRGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6Ci0gICAgY2FzZSBEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6Ci0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEp
Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZUFyYzoKLSAgICBjYXNlIERp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlUXVhZEN1cnZlOgotICAgIGNhc2UgRGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTdHJva2VCZXppZXJDdXJ2ZToKLSNlbmRpZgotICAgIGNhc2UgRGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VSZWN0OgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpTdHJva2VMaW5lOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpUcmFuc2xh
dGU6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotfQotCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVJlbmRl
cmluZ1Jlc291cmNlUmVxdWVzdCgpCiB7CiAgICAgYm9vbCBoYXNBY3RpdmVEcmF3YWJsZXMgPSBt
X3JlbW90ZVJlc291cmNlQ2FjaGUuaGFzQWN0aXZlRHJhd2FibGVzKCk7CkBAIC03NzEsMTggKzM4
Myw2IEBAIGJvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6YWxsb3dzRXhpdFVuZGVyTWVtb3J5
UHJlc3N1cmUoKSBjb25zdAogICAgIHJldHVybiAhbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmhhc0Fj
dGl2ZURyYXdhYmxlcygpOwogfQogCi1SZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGUgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6bGFzdEtub3duU3RhdGUoKSBjb25zdAotewotICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7Ci0gICAgcmV0dXJuIG1fbGFzdEtub3duU3RhdGUubG9hZCgpOwot
fQotCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZUxhc3RLbm93blN0YXRlKFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZSBzdGF0ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLSAgICBtX2xhc3RLbm93blN0YXRlLnN0b3JlUmVsYXhlZChzdGF0ZSk7Ci19
Ci0KIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cGVyZm9ybVdpdGhNZWRpYVBsYXllck9u
TWFpblRocmVhZChNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllciwgRnVuY3Rpb248dm9p
ZChNZWRpYVBsYXllciYpPiYmIGNhbGxiYWNrKQogewogICAgIGNhbGxPbk1haW5SdW5Mb29wQW5k
V2FpdChbJiwgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcywgaWRlbnRpZmllcl0gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKaW5kZXggNjI4ZWMzOWI2
YTE4OWI4MmViYTRmZmYyNThmNjZhZDk2ODBkNzJkNS4uZThmMzExYmMyZTJlNjBkNmY4ZDhlMmU3
MDQxNjNiMzk1MjVhYTNmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0yOCwxNyArMjgsMjAg
QEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0j
aW5jbHVkZSAiR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMuaCIKICNpbmNsdWRlICJJ
UENTZW1hcGhvcmUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCIKICNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAj
aW5jbHVkZSAiUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmgiCisjaW5jbHVk
ZSAiUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oIgogI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbW90ZVJlc291cmNlQ2FjaGUuaCIKICNpbmNs
dWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ1Vw
ZGF0ZUlELmgiCiAjaW5jbHVkZSAiU2NvcGVkUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5oIgor
I2luY2x1ZGUgIlN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuaCIKKyNpbmNsdWRlICJTdHJlYW1N
ZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5
TGlzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgpAQCAtNDcsMTEg
KzUwLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1uYW1lc3BhY2UgRGlzcGxheUxpc3Qg
ewotY2xhc3MgRGlzcGxheUxpc3Q7Ci1jbGFzcyBJdGVtOwotfQotCiBjbGFzcyBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U7CiBjbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBOYXRpdmVJbWFnZTsKQEAgLTYy
LDM0ICs2MCwyNSBAQCBlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUgOiBib29sOwogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAotY2xhc3MgRGlzcGxheUxpc3RSZWFkZXJIYW5kbGU7CiBjbGFzcyBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOworY2xhc3MgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjsK
IHN0cnVjdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzOwogCi1jbGFz
cyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kCi0gICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRl
cgotICAgICwgcHVibGljIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVy
Ci0gICAgLCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJSZWFkaW5nQ2xp
ZW50IHsKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgOiBwcml2YXRlIElQQzo6TWVzc2Fn
ZVNlbmRlciwgcHVibGljIElQQzo6U3RyZWFtTWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLQot
ICAgIHN0YXRpYyBSZWY8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MmLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJz
JiYpOworICAgIHN0YXRpYyBSZWY8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJh
bWV0ZXJzJiYsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmKTsKICAgICB2aXJ0dWFsIH5S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCk7CiAgICAgdm9pZCBzdG9wTGlzdGVuaW5nRm9ySVBDKCk7
CiAKICAgICBSZW1vdGVSZXNvdXJjZUNhY2hlJiByZW1vdGVSZXNvdXJjZUNhY2hlKCkgeyByZXR1
cm4gbV9yZW1vdGVSZXNvdXJjZUNhY2hlOyB9CiAKLSAgICAvLyBSZW5kZXJpbmcgb3BlcmF0aW9u
cy4KLSAgICBib29sIGFwcGx5TWVkaWFJdGVtKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFu
ZGxlLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVTdHJl
YW1NZXNzYWdlKElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbkJhc2UmLCBJUEM6OkRlY29kZXIm
KSBmaW5hbDsKKyAgICB2b2lkIGRpZEJlZ2luTGlzdGVuaW5nRm9ySVBDKFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXImKTsKIAogICAgIC8vIE1lc3NhZ2VzIHRvIGJlIHNlbnQuCiAgICAgdm9pZCBk
aWRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLCBRdWFs
aWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZGlkRmx1c2goV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyLCBRdWFsaWZpZWRSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpOwogCi0gICAgdm9pZCBzZXROZXh0SXRlbUJ1ZmZlclRvUmVhZChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIFF1YWxpZmllZFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbik7Ci0KLSAgICB2b2lkIGRpZENyZWF0
ZU1hc2tJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpOwotICAgIHZvaWQgZGlkUmVz
ZXRNYXNrSW1hZ2VCdWZmZXIoKTsKLQogICAgIHZvaWQgcG9wdWxhdGVHZXRQaXhlbEJ1ZmZlclNo
YXJlZE1lbW9yeShzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiYmKTsKIAogICAg
IGJvb2wgYWxsb3dzRXhpdFVuZGVyTWVtb3J5UHJlc3N1cmUoKSBjb25zdDsKQEAgLTk3LDQ3ICs4
NiwyMiBAQCBwdWJsaWM6CiAgICAgLy8gUnVucyBGdW5jdGlvbiBpbiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kIHRhc2sgcXVldWUuCiAgICAgdm9pZCBkaXNwYXRjaChGdW5jdGlvbjx2b2lkKCk+JiYp
OwogCi0gICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlIGxhc3RLbm93blN0YXRlKCkgY29u
c3Q7Ci0KKyAgICBJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb24mIHN0cmVhbUNvbm5lY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX3N0cmVhbUNvbm5lY3Rpb24uZ2V0KCk7IH0KICAgICB2b2lkIHBl
cmZvcm1XaXRoTWVkaWFQbGF5ZXJPbk1haW5UaHJlYWQoV2ViQ29yZTo6TWVkaWFQbGF5ZXJJZGVu
dGlmaWVyLCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok1lZGlhUGxheWVyJik+JiYpOwogCiBwcml2
YXRlOgotICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cyYsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJik7CisgICAgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZChHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25C
dWZmZXImJik7CiAgICAgdm9pZCBzdGFydExpc3RlbmluZ0ZvcklQQygpOwogCi0gICAgc3RkOjpv
cHRpb25hbDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZT4gV0FSTl9VTlVTRURfUkVU
VVJOIGRlY29kZUl0ZW0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCwgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlLCB1aW50OF90KiBoYW5kbGVMb2NhdGlvbikgb3ZlcnJp
ZGU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVBbmRD
cmVhdGUoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCwgdWludDhfdCogaGFuZGxl
TG9jYXRpb24pCi0gICAgewotICAgICAgICBpZiAoYXV0byBpdGVtID0gSVBDOjpEZWNvZGVyOjpk
ZWNvZGVTaW5nbGVPYmplY3Q8VD4oZGF0YSwgbGVuZ3RoKSkgewotICAgICAgICAgICAgLy8gRklY
TUU6IFdlYktpdDIgc2hvdWxkIG5vdCBuZWVkIHRvIGtub3cgdGhhdCB0aGUgZmlyc3QgOCBieXRl
cyBhdCB0aGUgaGFuZGxlIGFyZSByZXNlcnZlZCBmb3IgdGhlIHR5cGUuCi0gICAgICAgICAgICAv
LyBOZWVkIHRvIGZpZ3VyZSBvdXQgYSB3YXkgdG8ga2VlcCB0aGlzIGtub3dsZWRnZSB3aXRoaW4g
ZGlzcGxheSBsaXN0IGNvZGUgaW4gV2ViQ29yZS4KLSAgICAgICAgICAgIG5ldyAoaGFuZGxlTG9j
YXRpb24gKyBzaXplb2YodWludDY0X3QpKSBUKFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgICAg
IHJldHVybiB7eyBoYW5kbGVMb2NhdGlvbiB9fTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotICAgIH0KLQotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXlS
ZXN1bHQgc3VibWl0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIFdl
YkNvcmU6OkltYWdlQnVmZmVyJiBkZXN0aW5hdGlvbik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6Oklt
YWdlQnVmZmVyPiBuZXh0RGVzdGluYXRpb25JbWFnZUJ1ZmZlckFmdGVyQXBwbHlpbmdEaXNwbGF5
TGlzdHMoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGluaXRpYWxEZXN0aW5hdGlvbiwgc2l6ZV90IGlu
aXRpYWxPZmZzZXQsIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlJiwgR1BVUHJvY2Vzc1dha2V1cFJl
YXNvbiwgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIpOwot
CiAgICAgc3RkOjpvcHRpb25hbDxTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZT4gdXBkYXRlU2hhcmVk
TWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXJIZWxwZXIoc2l6ZV90IGJ5dGVDb3VudCk7CiAgICAgdm9p
ZCB1cGRhdGVSZW5kZXJpbmdSZXNvdXJjZVJlcXVlc3QoKTsKIAotICAgIHZvaWQgdXBkYXRlTGFz
dEtub3duU3RhdGUoUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlKTsKLQogICAgIC8vIElQQzo6
TWVzc2FnZVNlbmRlci4KICAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0
aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0
aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCi0g
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KSBvdmVycmlkZTsKLSAgICBib29sIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OkRlY29kZXImLCBVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYpIG92ZXJyaWRlOwot
CiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgcmVjZWl2ZWQuCiAgICAgdm9pZCBjcmVhdGVJbWFnZUJ1
ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0
aW9uQ29sb3JTcGFjZSYsIFdlYkNvcmU6OlBpeGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZvaWQgd2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChj
b25zdCBHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cyYpOwogICAgIHZvaWQgdXBkYXRl
U2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik+JiYpOwogICAg
IHZvaWQgc2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBJUEM6OlNlbWFwaG9yZSYpPiYmKTsKICAgICB2b2lkIHVwZGF0ZVNoYXJlZE1lbW9yeUFu
ZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQQzo6
U2VtYXBob3JlJik+JiYpOwpAQCAtMTUwLDEwICsxMTQsOCBAQCBwcml2YXRlOgogICAgIHZvaWQg
ZGVsZXRlQWxsRm9udHMoKTsKICAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KTsKICAgICB2
b2lkIGZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKFJlbmRlcmluZ1VwZGF0ZUlEKTsKLSAgICB2b2lk
IGRpZENyZWF0ZVNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVySWRlbnRpZmllciwgY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmLCBXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb25CdWZmZXJJZGVudGlm
aWVyKTsKIAogICAgIC8vIFJlY2VpdmVkIG1lc3NhZ2VzIHRyYW5zbGF0ZWQgdG8gdXNlIFF1YWxp
ZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci4KLSAgICB2b2lkIHdha2VVcEFuZEFwcGx5
RGlzcGxheUxpc3RXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlcklkZW50aWZpZXIsIHVpbnQ2NF90IG9mZnNldCwgUXVhbGlmaWVkUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyLCBHUFVQcm9jZXNzV2FrZXVwUmVhc29uKTsKICAgICB2b2lkIGNy
ZWF0ZUltYWdlQnVmZmVyV2l0aFF1YWxpZmllZElkZW50aWZpZXIoY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBXZWJDb3Jl
OjpQaXhlbEZvcm1hdCwgUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAg
ICB2b2lkIGdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcldpdGhRdWFsaWZpZWRJZGVudGlmaWVyKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJD
b3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+JiYpOwogICAgIHZvaWQgZ2V0
RGF0YUZvckltYWdlQnVmZmVyV2l0aFF1YWxpZmllZElkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFF1YWxpZmllZFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhf
dD4mJik+JiYpOwpAQCAtMTYzLDU0ICsxMjUsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbGVh
c2VSZW1vdGVSZXNvdXJjZVdpdGhRdWFsaWZpZWRJZGVudGlmaWVyKFF1YWxpZmllZFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpOwogICAgIHZvaWQgY2FjaGVG
b250V2l0aFF1YWxpZmllZElkZW50aWZpZXIoUmVmPFdlYkNvcmU6OkZvbnQ+JiYsIFF1YWxpZmll
ZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAKLSAgICB2b2lkIHJlc3VtZUZyb21QZW5k
aW5nV2FrZXVwSW5mb3JtYXRpb24oKTsKLQotICAgIGNsYXNzIFJlcGxheWVyRGVsZWdhdGUgOiBw
dWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyOjpEZWxlZ2F0ZSB7Ci0gICAgcHVi
bGljOgotICAgICAgICBSZXBsYXllckRlbGVnYXRlKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZCYpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgYm9vbCBhcHBs
eShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JikgZmluYWw7Ci0gICAgICAgIHZvaWQgZGlkQ3JlYXRlTWFza0ltYWdlQnVmZmVyKFdlYkNv
cmU6OkltYWdlQnVmZmVyJikgZmluYWw7Ci0gICAgICAgIHZvaWQgZGlkUmVzZXRNYXNrSW1hZ2VC
dWZmZXIoKSBmaW5hbDsKLSAgICAgICAgdm9pZCByZWNvcmRSZXNvdXJjZVVzZShXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIGZpbmFsOwotCi0gICAgICAgIFdlYkNvcmU6Oklt
YWdlQnVmZmVyJiBtX2Rlc3RpbmF0aW9uOwotICAgICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
JiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQZW5kaW5n
V2FrZXVwSW5mb3JtYXRpb24gewotICAgICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1
ZmZlcklkZW50aWZpZXIgaXRlbUJ1ZmZlcklkZW50aWZpZXI7Ci0gICAgICAgIHVpbnQ2NF90IG9m
ZnNldCB7IDAgfTsKLSAgICAgICAgUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyOwotICAgICAgICBHUFVQcm9jZXNzV2Fr
ZXVwUmVhc29uIHJlYXNvbiB7IEdQVVByb2Nlc3NXYWtldXBSZWFzb246OlVuc3BlY2lmaWVkIH07
Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8UXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyPiBtaXNzaW5nQ2FjaGVkUmVzb3VyY2VJZGVudGlmaWVyOwotICAgICAgICBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kU3RhdGUgc3RhdGUgeyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGU6Oklu
aXRpYWxpemVkIH07Ci0KLSAgICAgICAgYm9vbCBzaG91bGRQZXJmb3JtV2FrZXVwKFF1YWxpZmll
ZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpZGVudGlmaWVyKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIgPT0g
aWRlbnRpZmllcgotICAgICAgICAgICAgICAgIHx8IG1pc3NpbmdDYWNoZWRSZXNvdXJjZUlkZW50
aWZpZXIgPT0gaWRlbnRpZmllcjsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgc2hvdWxkUGVy
Zm9ybVdha2V1cChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRl
bnRpZmllcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZW1CdWZmZXJJ
ZGVudGlmaWVyID09IGlkZW50aWZpZXI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgUmVmPFdv
cmtRdWV1ZT4gbV93b3JrUXVldWU7CisgICAgSVBDOjpTdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVl
IG1fd29ya1F1ZXVlOworICAgIFJlZjxJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb24+IG1fc3Ry
ZWFtQ29ubmVjdGlvbjsKICAgICBSZW1vdGVSZXNvdXJjZUNhY2hlIG1fcmVtb3RlUmVzb3VyY2VD
YWNoZTsKICAgICBSZWY8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOwogICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXI7Ci0gICAgSGFzaE1hcDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUJ1ZmZlcklkZW50aWZpZXIsIFJlZlB0cjxEaXNwbGF5TGlzdFJlYWRlckhhbmRsZT4+IG1fc2hh
cmVkRGlzcGxheUxpc3RIYW5kbGVzOwotICAgIHN0ZDo6b3B0aW9uYWw8UGVuZGluZ1dha2V1cElu
Zm9ybWF0aW9uPiBtX3BlbmRpbmdXYWtldXBJbmZvOwotICAgIElQQzo6U2VtYXBob3JlIG1fcmVz
dW1lRGlzcGxheUxpc3RTZW1hcGhvcmU7CiAgICAgSVBDOjpTZW1hcGhvcmUgbV9nZXRQaXhlbEJ1
ZmZlclNlbWFwaG9yZTsKICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtX2dldFBpeGVsQnVmZmVy
U2hhcmVkTWVtb3J5OwogICAgIFNjb3BlZFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QgbV9yZW5k
ZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OwotICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4g
bV9jdXJyZW50TWFza0ltYWdlQnVmZmVyOwotICAgIEF0b21pYzxSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kU3RhdGU+IG1fbGFzdEtub3duU3RhdGUgeyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGU6
OkluaXRpYWxpemVkIH07CisgICAgV2Vha0hhc2hTZXQ8UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cj4gbV9yZW1vdGVEaXNwbGF5TGlzdHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggMWVmNTZkY2M5NzYyNzRl
MzU2YWIyMmI0ZWE0ZTcxYmNmYWMwYjBkZi4uYTE0MmY0ODk2NmY1YzQ5NzU5NDU2NTQ3NzJjNzlj
MzE5NzZmNTNkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KQEAg
LTIyLDIwICsyMiwxOCBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAt
PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHsKK21lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQgTm90UmVmQ291bnRlZCBTdHJlYW0gewogICAgIENyZWF0ZUltYWdlQnVmZmVyKFdlYkNv
cmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UGl4ZWxGb3JtYXQgcGl4ZWxG
b3JtYXQsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpCi0gICAgV2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChzdHJ1Y3QgV2Vi
S2l0OjpHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cyBhcmd1bWVudHMpCi0gICAgVXBk
YXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50KSAtPiAo
V2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzCi0gICAg
U2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoKSAtPiAoSVBDOjpTZW1hcGhvcmUgc2VtYXBob3Jl
KSBTeW5jaHJvbm91cwotICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBp
eGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJ
UENIYW5kbGUgaGFuZGxlLCBJUEM6OlNlbWFwaG9yZSBzZW1hcGhvcmUpIFN5bmNocm9ub3VzCisg
ICAgVXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50
KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3Vz
IE5vdFN0cmVhbUVuY29kYWJsZVJlcGx5CisgICAgU2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIo
KSAtPiAoSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cyBOb3RTdHJlYW1FbmNv
ZGFibGVSZXBseQorICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBpeGVs
QnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENI
YW5kbGUgaGFuZGxlLCBJUEM6OlNlbWFwaG9yZSBzZW1hcGhvcmUpIFN5bmNocm9ub3VzIE5vdFN0
cmVhbUVuY29kYWJsZVJlcGx5CiAgICAgRGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5
KCkKICAgICBHZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgZW51bTp1aW50OF90IFdlYkNvcmU6OlByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChTdHJpbmcgdXJsU3RyaW5n
KSBTeW5jaHJvbm91cwogICAgIEdldERhdGFGb3JJbWFnZUJ1ZmZlcihTdHJpbmcgbWltZVR5cGUs
IHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoVmVjdG9yPHVpbnQ4
X3Q+IGRhdGEpIFN5bmNocm9ub3VzCi0gICAgR2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZm
ZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVyLCBlbnVt
OnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikg
LT4gKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cwot
ICAgIENhY2hlTmF0aXZlSW1hZ2UoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5k
bGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpCi0gICAgQ2FjaGVGb250KElQQzo6Rm9udFJlZmVyZW5jZSBmb250KQorICAg
IEdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgZW51bTp1aW50OF90IFdlYkNvcmU6OlByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIC0+IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1h
cDo6SGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMgTm90U3RyZWFtRW5jb2RhYmxlUmVwbHkKKyAg
ICBDYWNoZU5hdGl2ZUltYWdlKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxl
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKSBOb3RTdHJlYW1FbmNvZGFibGUKKyAgICBDYWNoZUZvbnQoSVBDOjpGb250UmVm
ZXJlbmNlIGZvbnQpIE5vdFN0cmVhbUVuY29kYWJsZQogICAgIERlbGV0ZUFsbEZvbnRzKCkKLSAg
ICBEaWRDcmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQ
Q0hhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0
aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpCiAgICAgUmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIHVpbnQ2NF90IHVzZUNvdW50KQogICAgIEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKFdlYktp
dDo6UmVuZGVyaW5nVXBkYXRlSUQgcmVuZGVyaW5nVXBkYXRlSUQpCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZENy
ZWF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCA0NGEyNzgyNjUy
YThmZWIxM2Q1ZDRjYTc1NTEwMWYwZjNlYmVkZThjLi4xNzk3ZDViYTRhYTExZjVmYTRmNTczMTkw
ZWU1MGZjOGJiN2I5OTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKQEAgLTM2LDEzICszNiwxMiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogc3RydWN0IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMgewogICAg
IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIGlkZW50aWZpZXI7Ci0gICAgSVBDOjpTZW1hcGhv
cmUgcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmU7CiAgICAgV2ViUGFnZVByb3h5SWRlbnRpZmll
ciBwYWdlUHJveHlJRDsKICAgICBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQ7CiAKICAg
ICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgewotICAgICAg
ICBlbmNvZGVyIDw8IGlkZW50aWZpZXIgPDwgcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmUgPDwg
cGFnZVByb3h5SUQgPDwgcGFnZUlEOworICAgICAgICBlbmNvZGVyIDw8IGlkZW50aWZpZXIgPDwg
cGFnZVByb3h5SUQgPDwgcGFnZUlEOwogICAgIH0KIAogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnM+IGRlY29kZShJUEM6OkRl
Y29kZXImIGRlY29kZXIpCkBAIC01MiwxMSArNTEsNiBAQCBzdHJ1Y3QgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgICAgIGlmICghaWRlbnRpZmllcikKICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICAgICAgc3RkOjpvcHRpb25hbDxJ
UEM6OlNlbWFwaG9yZT4gcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmU7Ci0gICAgICAgIGRlY29k
ZXIgPj4gcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmU7Ci0gICAgICAgIGlmICghcmVzdW1lRGlz
cGxheUxpc3RTZW1hcGhvcmUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCiAg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4gcGFnZVByb3h5SUQ7
CiAgICAgICAgIGRlY29kZXIgPj4gcGFnZVByb3h5SUQ7CiAgICAgICAgIGlmICghcGFnZVByb3h5
SUQpCkBAIC02Nyw3ICs2MSw3IEBAIHN0cnVjdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRp
b25QYXJhbWV0ZXJzIHsKICAgICAgICAgaWYgKCFwYWdlSUQpCiAgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCi0gICAgICAgIHJldHVybiB7eyAqaWRlbnRpZmllciwgV1RGTW92ZSgq
cmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmUpLCAqcGFnZVByb3h5SUQsICpwYWdlSUQgfX07Cisg
ICAgICAgIHJldHVybiB7IHsgKmlkZW50aWZpZXIsICpwYWdlUHJveHlJRCwgKnBhZ2VJRCB9IH07
CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3Byb2Nlc3Mt
ZW50aXRsZW1lbnRzLnNoIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3Byb2Nlc3MtZW50aXRsZW1l
bnRzLnNoCmluZGV4IGRmYTEwZjMzNDIyMDI5YTM3MTViZGY5NjZmYjkxM2NhNDZjM2EwZTYuLmJk
MjE0Y2NiYmIyOWE0ZGMwYzllZjU5NjY4Mjc3OTcyZWU3YzgyYjUgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU2NyaXB0cy9wcm9jZXNzLWVudGl0bGVtZW50cy5zaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvcHJvY2Vzcy1lbnRpdGxlbWVudHMuc2gKQEAgLTYxLDYgKzYxLDcgQEAgZnVu
Y3Rpb24gbWFjX3Byb2Nlc3NfZ3B1X2VudGl0bGVtZW50cygpCiAgICAgICAgIGZpCiAKICAgICAg
ICAgcGxpc3RidWRkeSBBZGQgOmNvbS5hcHBsZS5wcml2YXRlLm1lbW9yeS5vd25lcnNoaXBfdHJh
bnNmZXIgYm9vbCBZRVMKKyAgICAgICAgcGxpc3RidWRkeSBBZGQgOmNvbS5hcHBsZS5wcml2YXRl
LndlYmtpdC51c2UteHBjLWVuZHBvaW50IGJvb2wgWUVTCiAgICAgICAgIHBsaXN0YnVkZHkgQWRk
IDpjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFnZS5XZWJLaXRHUFVTYW5kYm94IGJvb2wgWUVTCiAg
ICAgICAgIHBsaXN0YnVkZHkgQWRkIDpjb20uYXBwbGUuUXVhcnR6Q29yZS53ZWJraXQtZW5kLXBv
aW50cyBib29sIFlFUwogICAgIGZpCkBAIC0yMDgsNiArMjA5LDcgQEAgZnVuY3Rpb24gbWFjY2F0
YWx5c3RfcHJvY2Vzc19ncHVfZW50aXRsZW1lbnRzKCkKICAgICBwbGlzdGJ1ZGR5IEFkZCA6Y29t
LmFwcGxlLnJ1bm5pbmdib2FyZC5hc3NlcnRpb25zLndlYmtpdCBib29sIFlFUwogICAgIHBsaXN0
YnVkZHkgQWRkIDpjb20uYXBwbGUuUXVhcnR6Q29yZS53ZWJraXQtZW5kLXBvaW50cyBib29sIFlF
UwogICAgIHBsaXN0YnVkZHkgQWRkIDpjb20uYXBwbGUucHJpdmF0ZS5tZW1vcnkub3duZXJzaGlw
X3RyYW5zZmVyIGJvb2wgWUVTCisgICAgcGxpc3RidWRkeSBBZGQgOmNvbS5hcHBsZS5wcml2YXRl
LndlYmtpdC51c2UteHBjLWVuZHBvaW50IGJvb2wgWUVTCiAgICAgcGxpc3RidWRkeSBBZGQgOmNv
bS5hcHBsZS5RdWFydHpDb3JlLndlYmtpdC1saW1pdGVkLXR5cGVzIGJvb2wgWUVTCiAKICAgICBp
ZiBbWyAiJHtXS19VU0VfUkVTVFJJQ1RFRF9FTlRJVExFTUVOVFN9IiA9PSBZRVMgXV0KQEAgLTMw
OSw2ICszMTEsNyBAQCBmdW5jdGlvbiBpb3NfZmFtaWx5X3Byb2Nlc3NfZ3B1X2VudGl0bGVtZW50
cygpCiAgICAgcGxpc3RidWRkeSBBZGQgOmNvbS5hcHBsZS5wcml2YXRlLmNvcmVtZWRpYS5waWRp
bmhlcml0YW5jZS5hbGxvdyBib29sIFlFUwogICAgIHBsaXN0YnVkZHkgQWRkIDpjb20uYXBwbGUu
cHJpdmF0ZS5tZW1vcnlzdGF0dXMgYm9vbCBZRVMKICAgICBwbGlzdGJ1ZGR5IEFkZCA6Y29tLmFw
cGxlLnByaXZhdGUubWVtb3J5Lm93bmVyc2hpcF90cmFuc2ZlciBib29sIFlFUworICAgIHBsaXN0
YnVkZHkgQWRkIDpjb20uYXBwbGUucHJpdmF0ZS53ZWJraXQudXNlLXhwYy1lbmRwb2ludCBib29s
IFlFUwogICAgIHBsaXN0YnVkZHkgQWRkIDpjb20uYXBwbGUucHJpdmF0ZS5uZXR3b3JrLnNvY2tl
dC1kZWxlZ2F0ZSBib29sIFlFUwogICAgIHBsaXN0YnVkZHkgQWRkIDpjb20uYXBwbGUucnVubmlu
Z2JvYXJkLmFzc2VydGlvbnMud2Via2l0IGJvb2wgWUVTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMv
d2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IDc4MzlmNjk4ZGQ4MWE4MjQyZDFhYzNmMzI1NDY1YmYx
NTAxNTU1MmYuLmM0NDY0MGYyOTE4ZTc4NmExNTJhZDliYTQyYzBkNThiZjk5ZGFmOTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291
cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQpAQCAtNjgzLDcgKzY4Myw2IEBA
IGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgogICAgICAgICAnSW5zcGVjdG9yOjpFeHRlbnNp
b25FcnJvcic6IFsnIkluc3BlY3RvckV4dGVuc2lvblR5cGVzLmgiJ10sCiAgICAgICAgICdJbnNw
ZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUnOiBbJzxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nXSwKICAgICAgICAgJ0luc3BlY3Rvcjo6SW5z
cGVjdG9yVGFyZ2V0VHlwZSc6IFsnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldC5oPidd
LAotICAgICAgICAnV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyJzog
Wyc8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPiddLAogICAgICAgICAnTWVkaWFUaW1lJzogWyc8d3Rm
L01lZGlhVGltZS5oPiddLAogICAgICAgICAnTW9ub3RvbmljVGltZSc6IFsnPHd0Zi9Nb25vdG9u
aWNUaW1lLmg+J10sCiAgICAgICAgICdTZWNvbmRzJzogWyc8d3RmL1NlY29uZHMuaD4nXSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggOGNlYzkyNDI2ODc1MTRjNmMyYzc3Yjc4OThj
MGEzNGM5MDdkNWJjNC4uMmJhOTM2OTlhOGNjYTEzYWI3MWJhNmFhNDRkMGY0ODdmNWIzNTRhNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTI5LDEzICsyOSwxMyBAQAogCiAjaW5j
bHVkZSAiRW5jb2Rlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kTWVzc2FnZXMuaCIKICNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIK
ICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbmNyZXRlSW1h
Z2VCdWZmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNw
bGF5TGlzdEl0ZW1zLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJlY29yZGVyLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJlcGxheWVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CkBAIC00NywxMiArNDcsMTEgQEAgY2xhc3MgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDsKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPiBjbGFzcyBUaHJlYWRT
YWZlUmVtb3RlSW1hZ2VCdWZmZXJGbHVzaGVyOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5k
VHlwZT4KLWNsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlckltcGw6OkRlbGVnYXRlLCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50IHsKLSAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlciA9IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlw
ZT47Ci0gICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKLSAg
ICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9kcmF3aW5nQ29udGV4dDsKLSAg
ICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXI7Ci0gICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OnJlc29sdXRp
b25TY2FsZTsKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6
Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4geworICAgIHVzaW5nIEJhc2VDb25jcmV0
ZUltYWdlQnVmZmVyID0gV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47
CisgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKKyAgICB1c2lu
ZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6bV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7
CisgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZTsKIAog
cHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8UmVtb3RlSW1hZ2VCdWZmZXJQcm94eT4gY3JlYXRl
KGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBj
b25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIFdlYkNvcmU6
OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkmIHJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKQEAgLTY2LDcgKzY1LDcgQEAgcHVibGljOgogICAg
IH5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCkKICAgICB7CiAgICAgICAgIGlmICghbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkgfHwgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPmlz
R1BVUHJvY2Vzc0Nvbm5lY3Rpb25DbG9zZWQoKSkgewotICAgICAgICAgICAgY2xlYXJEaXNwbGF5
TGlzdCgpOworICAgICAgICAgICAgbV9yZW1vdGVEaXNwbGF5TGlzdC5yZXNldE5lZWRzRmx1c2go
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC05OCwxOSArOTcsMTQgQEAg
cHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eShjb25zdCBX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OlBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSYgcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQotICAg
ICAgICA6IEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyKHBhcmFtZXRlcnMsIHRoaXMpCisgICAg
ICAgIDogQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXIocGFyYW1ldGVycykKICAgICAgICAgLCBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShtYWtlV2Vha1B0cihyZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpKQorICAgICAgICAsIG1fcmVtb3RlRGlzcGxheUxpc3QoKnRoaXMsIHJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSwgeyB7IH0sIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpsb2dp
Y2FsU2l6ZSgpIH0sIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpiYXNlVHJhbnNmb3JtKCkpCiAg
ICAgewogICAgICAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOwogICAg
ICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVtb3RlUmVzb3VyY2VDYWNoZVBy
b3h5KCkuY2FjaGVJbWFnZUJ1ZmZlcigqdGhpcyk7Ci0KLSAgICAgICAgbV9kcmF3aW5nQ29udGV4
dC5kaXNwbGF5TGlzdCgpLnNldEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50KHRoaXMpOwotICAgICAg
ICBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuc2V0SXRlbUJ1ZmZlclJlYWRpbmdDbGll
bnQobnVsbHB0cik7Ci0gICAgICAgIG1fZHJhd2luZ0NvbnRleHQuZGlzcGxheUxpc3QoKS5zZXRU
cmFja3NEcmF3aW5nSXRlbUV4dGVudHMoZmFsc2UpOwogICAgIH0KIAotICAgIFdlYkNvcmU6OlJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEJhc2VEaXNw
bGF5TGlzdEltYWdlQnVmZmVyOjpyZW5kZXJpbmdNb2RlKCk7IH0KLQogICAgIC8vIEl0IGlzIHNh
ZmUgdG8gYWNjZXNzIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXIgZnJvbSB0aGUgbWFpbiB0aHJl
YWQgd2l0aG91dCBsb2NraW5nIHNpbmNlIGl0CiAgICAgLy8gb25seSBnZXRzIG1vZGlmaWVkIG9u
IHRoZSBtYWluIHRocmVhZC4KICAgICBib29sIGhhc1BlbmRpbmdGbHVzaCgpIGNvbnN0IFdURl9J
R05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKQEAgLTIxOSw3ICsyMTMsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgICAgIGF1dG8mIG11
dGFibGVUaGlzID0gY29uc3RfY2FzdDxSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Jj4oKnRoaXMpOwot
ICAgICAgICBtdXRhYmxlVGhpcy5tX2RyYXdpbmdDb250ZXh0LnJlY29yZGVyKCkuZ2V0UGl4ZWxC
dWZmZXIoZGVzdGluYXRpb25Gb3JtYXQsIHNyY1JlY3QpOworICAgICAgICBtdXRhYmxlVGhpcy5t
X3JlbW90ZURpc3BsYXlMaXN0LmdldFBpeGVsQnVmZmVyKGRlc3RpbmF0aW9uRm9ybWF0LCBzcmNS
ZWN0KTsKICAgICAgICAgbXV0YWJsZVRoaXMuZmx1c2hEcmF3aW5nQ29udGV4dEFzeW5jKCk7CiAK
ICAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT53YWl0Rm9yR2V0UGl4
ZWxCdWZmZXJUb0NvbXBsZXRlKHRpbWVvdXQpKQpAQCAtMjI5LDEyICsyMjMsMjggQEAgcHJvdGVj
dGVkOgogICAgICAgICByZXR1cm4gcGl4ZWxCdWZmZXI7CiAgICAgfQogCisgICAgdm9pZCBjbGVh
ckJhY2tlbmQoKSBmaW5hbAorICAgIHsKKyAgICAgICAgbV9yZW1vdGVEaXNwbGF5TGlzdC5yZXNl
dE5lZWRzRmx1c2goKTsKKyAgICAgICAgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNsZWFyQmFj
a2VuZCgpOworICAgIH0KKworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgp
IGNvbnN0IGZpbmFsCisgICAgeworICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5Kj4odGhpcyktPm1fcmVtb3RlRGlzcGxheUxpc3Q7CisgICAgfQorCisgICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIGZpbmFsCisgICAgewor
ICAgICAgICByZXR1cm4gJm1fcmVtb3RlRGlzcGxheUxpc3Q7CisgICAgfQorCiAgICAgdm9pZCBw
dXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBk
ZXN0UG9pbnQgPSB7IH0sIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1h
dCA9IFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpIGZpbmFs
CiAgICAgewogICAgICAgICAvLyBUaGUgbWF0aCBpbnNpZGUgUGl4ZWxCdWZmZXI6OmNyZWF0ZSgp
IGRvZXNuJ3QgYWdyZWUgd2l0aCB0aGUgbWF0aCBpbnNpZGUgSW1hZ2VCdWZmZXJCYWNrZW5kOjpw
dXRQaXhlbEJ1ZmZlcigpIGFib3V0IGhvdyBtX3Jlc29sdXRpb25TY2FsZSBpbnRlcmFjdHMgd2l0
aCB0aGUgZGF0YSBpbiB0aGUgSW1hZ2VCdWZmZXIuCiAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhh
dCBwdXRQaXhlbEJ1ZmZlcigpIGlzIG9ubHkgY2FsbGVkIHdoZW4gcmVzb2x1dGlvblNjYWxlKCkg
PT0gMS4KICAgICAgICAgQVNTRVJUKHJlc29sdXRpb25TY2FsZSgpID09IDEpOwotICAgICAgICBt
X2RyYXdpbmdDb250ZXh0LnJlY29yZGVyKCkucHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIHNy
Y1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCk7CisgICAgICAgIG1fcmVtb3RlRGlzcGxheUxp
c3QucHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZv
cm1hdCk7CiAgICAgfQogCiAgICAgYm9vbCBwcmVmZXJzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCkg
ZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMjYwLDk0ICsyNzAsMzIgQEAgcHJvdGVjdGVkOgog
ICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAoIW1fZHJhd2luZ0NvbnRleHQuZGlzcGxh
eUxpc3QoKS5pc0VtcHR5KCkgfHwgIWhhc1BlbmRpbmdGbHVzaCgpKSB7CisgICAgICAgIGlmICht
X3JlbW90ZURpc3BsYXlMaXN0Lm5lZWRzRmx1c2goKSB8fCAhaGFzUGVuZGluZ0ZsdXNoKCkpIHsK
ICAgICAgICAgICAgIG1fc2VudEZsdXNoSWRlbnRpZmllciA9IFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEZsdXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKLSAgICAgICAgICAgIG1fZHJhd2luZ0Nv
bnRleHQucmVjb3JkZXIoKS5mbHVzaENvbnRleHQobV9zZW50Rmx1c2hJZGVudGlmaWVyKTsKKyAg
ICAgICAgICAgIG1fcmVtb3RlRGlzcGxheUxpc3QuZmx1c2hDb250ZXh0KG1fc2VudEZsdXNoSWRl
bnRpZmllcik7CiAgICAgICAgIH0KIAotICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS0+c2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7Ci0gICAgICAgIGNsZWFy
RGlzcGxheUxpc3QoKTsKKyAgICAgICAgbV9yZW1vdGVEaXNwbGF5TGlzdC5yZXNldE5lZWRzRmx1
c2goKTsKICAgICB9CiAKLSAgICB2b2lkIHJlY29yZE5hdGl2ZUltYWdlVXNlKFdlYkNvcmU6Ok5h
dGl2ZUltYWdlJiBpbWFnZSkgZmluYWwKKyAgICB2b2lkIHJlY29yZE5hdGl2ZUltYWdlVXNlKFdl
YkNvcmU6Ok5hdGl2ZUltYWdlJiBpbWFnZSkKICAgICB7CiAgICAgICAgIGlmIChtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSkKICAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LT5yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkoKS5yZWNvcmROYXRpdmVJbWFnZVVzZShp
bWFnZSk7CiAgICAgfQogCi0gICAgYm9vbCBpc0NhY2hlZEltYWdlQnVmZmVyKGNvbnN0IFdlYkNv
cmU6OkltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAg
IGlmICghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGF1dG8gY2FjaGVkSW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS0+cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5KCkuY2FjaGVkSW1hZ2VCdWZm
ZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpOwotICAgICAgICBB
U1NFUlQoIWNhY2hlZEltYWdlQnVmZmVyIHx8IGNhY2hlZEltYWdlQnVmZmVyID09ICZpbWFnZUJ1
ZmZlcik7Ci0gICAgICAgIHJldHVybiBjYWNoZWRJbWFnZUJ1ZmZlcjsKLSAgICB9Ci0KLSAgICB2
b2lkIGNoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIG5leHRJbWFnZUJ1ZmZlcikgZmluYWwKLSAgICB7Ci0gICAgICAgIGJvb2wg
d2FzRW1wdHkgPSBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuaXNFbXB0eSgpOwotICAg
ICAgICBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkudGVtcGxhdGUgYXBwZW5kPFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI+
KG5leHRJbWFnZUJ1ZmZlcik7Ci0gICAgICAgIGlmICh3YXNFbXB0eSkKLSAgICAgICAgICAgIGNs
ZWFyRGlzcGxheUxpc3QoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHByZXBhcmVUb0FwcGVuZERpc3Bs
YXlMaXN0SXRlbXMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUmJiBoYW5k
bGUpIGZpbmFsCi0gICAgewotICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCku
cHJlcGFyZVRvQXBwZW5kKFdURk1vdmUoaGFuZGxlKSk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVh
ckRpc3BsYXlMaXN0KCkKLSAgICB7Ci0gICAgICAgIG1fZHJhd2luZ0NvbnRleHQuZGlzcGxheUxp
c3QoKS5jbGVhcigpOwotICAgIH0KLQotICAgIGJvb2wgY2FuQXBwZW5kSXRlbU9mVHlwZShXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGUpIGZpbmFsCi0gICAgewotICAgICAgICBpZiAoVU5M
SUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPndpbGxBcHBl
bmRJdGVtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgdm9pZCBkaWRBcHBlbmREYXRhKGNvbnN0IFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlJiBoYW5kbGUsIHNpemVfdCBudW1iZXJPZkJ5dGVzLCBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlkQ2hhbmdlSXRlbUJ1ZmZlciBkaWRDaGFuZ2VJdGVtQnVm
ZmVyKSBmaW5hbAotICAgIHsKLSAgICAgICAgaWYgKExJS0VMWShtX3JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eSkpCi0gICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+
ZGlkQXBwZW5kRGF0YShoYW5kbGUsIG51bWJlck9mQnl0ZXMsIGRpZENoYW5nZUl0ZW1CdWZmZXIs
IG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlY29y
ZEZvbnRVc2UoV2ViQ29yZTo6Rm9udCYgZm9udCkgZmluYWwKKyAgICB2b2lkIHJlY29yZEZvbnRV
c2UoV2ViQ29yZTo6Rm9udCYgZm9udCkKICAgICB7CiAgICAgICAgIGlmIChtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSkKICAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LT5yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkoKS5yZWNvcmRGb250VXNlKGZvbnQpOwogICAg
IH0KIAotICAgIHZvaWQgcmVjb3JkSW1hZ2VCdWZmZXJVc2UoV2ViQ29yZTo6SW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyKSBmaW5hbAorICAgIHZvaWQgcmVjb3JkSW1hZ2VCdWZmZXJVc2UoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQogICAgIHsKICAgICAgICAgaWYgKG1fcmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5KQogICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHktPnJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpLnJlY29yZEltYWdlQnVmZmVyVXNl
KGltYWdlQnVmZmVyKTsKICAgICB9CiAKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1
ZmZlckhhbmRsZSBjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCBjYXBhY2l0eSkgZmluYWwKLSAgICB7
Ci0gICAgICAgIGlmIChMSUtFTFkobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQotICAg
ICAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5jcmVhdGVJdGVt
QnVmZmVyKGNhcGFjaXR5LCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0KLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0g
ICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZW5jb2RlSXRlbU91dE9mTGluZShjb25z
dCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3RJdGVtJiBpdGVtKSBjb25zdCBmaW5h
bAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oY29uc3QgYXV0byYgZGlzcGxh
eUxpc3RJdGVtKSAtPiBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiB7Ci0gICAgICAgICAg
ICB1c2luZyBEaXNwbGF5TGlzdEl0ZW1UeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJl
ZmVyZW5jZTxkZWNsdHlwZShkaXNwbGF5TGlzdEl0ZW0pPjo6dHlwZTsKLSAgICAgICAgICAgIGlm
IGNvbnN0ZXhwciAoIURpc3BsYXlMaXN0SXRlbVR5cGU6OmlzSW5saW5lSXRlbSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8RGlzcGxheUxp
c3RJdGVtVHlwZT4oZGlzcGxheUxpc3RJdGVtKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfSwg
aXRlbSk7Ci0gICAgfQotCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRocmVhZFNhZmVJ
bWFnZUJ1ZmZlckZsdXNoZXI+IGNyZWF0ZUZsdXNoZXIoKSBmaW5hbAogICAgIHsKICAgICAgICAg
cmV0dXJuIFdURjo6bWFrZVVuaXF1ZTxUaHJlYWRTYWZlUmVtb3RlSW1hZ2VCdWZmZXJGbHVzaGVy
PEJhY2tlbmRUeXBlPj4oKnRoaXMpOwpAQCAtMzU4LDYgKzMwNiw3IEBAIHByb3RlY3RlZDoKICAg
ICBDb25kaXRpb24gbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllckNoYW5nZWRDb25kaXRpb247CiAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyIG1fcmVjZWl2ZWRGbHVz
aElkZW50aWZpZXIgV1RGX0dVQVJERURfQllfTE9DSyhtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVy
TG9jayk7IC8vIE9ubHkgbW9kaWZpZWQgb24gdGhlIG1haW4gdGhyZWFkIGJ1dCBtYXkgZ2V0IHF1
ZXJpZWQgb24gYSBzZWNvbmRhcnkgdGhyZWFkLgogICAgIFdlYWtQdHI8UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5PiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTsKKyAgICBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHkgbV9yZW1vdGVEaXNwbGF5TGlzdDsKIH07CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuY3BwCmluZGV4IGJmNDlhODI3ZDIwMjgyNGE0N2IwZDY1Njk2YzZjYTJjN2Q4ZmI5MWUu
LjViODE4M2FkZTlkZGUxZmI3Y2NkZTQzNmQxM2JjNzliNTc4ZWM5MzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKIAotI2luY2x1ZGUgIkRpc3BsYXlMaXN0V3JpdGVySGFuZGxlLmgi
CiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKQEAgLTUy
LDcgKzUxLDYgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUKIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KFdlYlBhZ2UmIHdlYlBhZ2UpCiAg
ICAgOiBtX3BhcmFtZXRlcnMgewogICAgICAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjo6
Z2VuZXJhdGUoKSwKLSAgICAgICAgSVBDOjpTZW1hcGhvcmUgeyB9LAogICAgICAgICB3ZWJQYWdl
LndlYlBhZ2VQcm94eUlkZW50aWZpZXIoKSwKICAgICAgICAgd2ViUGFnZS5pZGVudGlmaWVyKCkK
ICAgICB9CkBAIC03Nyw3ICs3NSw4IEBAIEdQVVByb2Nlc3NDb25uZWN0aW9uJiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkKICAgICAgICAg
YXV0byYgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1
cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpOwogICAgICAgICBncHVQcm9jZXNzQ29ubmVjdGlvbi5h
ZGRDbGllbnQoKnRoaXMpOwogICAgICAgICBncHVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlUmVj
ZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcigpLnRvVUludDY0KCksICp0aGlzKTsKLSAgICAgICAgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24u
Y29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNy
ZWF0ZVJlbmRlcmluZ0JhY2tlbmQobV9wYXJhbWV0ZXJzKSwgMCwgSVBDOjpTZW5kT3B0aW9uOjpE
aXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgICAgICBtX3N0
cmVhbUNvbm5lY3Rpb24gPSBtYWtlVW5pcXVlPElQQzo6U3RyZWFtQ2xpZW50Q29ubmVjdGlvbj4o
Z3B1UHJvY2Vzc0Nvbm5lY3Rpb24uY29ubmVjdGlvbigpLCAxIDw8IDIxKTsKKyAgICAgICAgZ3B1
UHJvY2Vzc0Nvbm5lY3Rpb24uY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OkNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQobV9wYXJhbWV0ZXJzLCBtX3N0
cmVhbUNvbm5lY3Rpb24tPnN0cmVhbUJ1ZmZlcigpKSwgMCwgSVBDOjpTZW5kT3B0aW9uOjpEaXNw
YXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwogICAgICAgICBtX2dwdVBy
b2Nlc3NDb25uZWN0aW9uID0gbWFrZVdlYWtQdHIoZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24pOwogICAg
IH0KICAgICByZXR1cm4gKm1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb247CkBAIC05MSwxMiArOTAsNiBA
QCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z3B1UHJvY2Vzc0Nvbm5lY3Rpb25E
aWRDbG9zZShHUFVQcm9jZXNzQ29ubmVjdAogCiAgICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hlUHJv
eHkucmVtb3RlUmVzb3VyY2VDYWNoZVdhc0Rlc3Ryb3llZCgpOwogCi0gICAgbV9pZGVudGlmaWVy
c09mUmV1c2FibGVIYW5kbGVzLmNsZWFyKCk7Ci0gICAgbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRs
ZXMuY2xlYXIoKTsKLSAgICBtX2N1cnJlbnREZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmll
ciA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX2RlZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50cyA9
IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3JlbWFpbmluZ0l0ZW1zVG9BcHBlbmRCZWZvcmVTZW5kaW5n
V2FrZXVwID0gMDsKLQogICAgIGlmIChtX2Rlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9y
eVRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVk
TWVtb3J5VGltZXIuc3RvcCgpOwogICAgIG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmUgPSBzdGQ6
Om51bGxvcHQ7CkBAIC0xMzMsNyArMTI2LDcgQEAgYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OndhaXRGb3JEaWRGbHVzaCgpCiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjpjcmVhdGVSZW1vdGVJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q3JlYXRlSW1hZ2VC
dWZmZXIoaW1hZ2VCdWZmZXIubG9naWNhbFNpemUoKSwgaW1hZ2VCdWZmZXIucmVuZGVyaW5nTW9k
ZSgpLCBpbWFnZUJ1ZmZlci5yZXNvbHV0aW9uU2NhbGUoKSwgaW1hZ2VCdWZmZXIuY29sb3JTcGFj
ZSgpLCBpbWFnZUJ1ZmZlci5waXhlbEZvcm1hdCgpLCBpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIoKSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2Vu
ZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAg
ICBzZW5kVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNyZWF0ZUlt
YWdlQnVmZmVyKGltYWdlQnVmZmVyLmxvZ2ljYWxTaXplKCksIGltYWdlQnVmZmVyLnJlbmRlcmlu
Z01vZGUoKSwgaW1hZ2VCdWZmZXIucmVzb2x1dGlvblNjYWxlKCksIGltYWdlQnVmZmVyLmNvbG9y
U3BhY2UoKSwgaW1hZ2VCdWZmZXIucGl4ZWxGb3JtYXQoKSwgaW1hZ2VCdWZmZXIucmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKCkpKTsKIH0KIAogUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQgcGl4
ZWxGb3JtYXQpCkBAIC0xNjMsOCArMTU2LDYgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2kKIAog
U2hhcmVkTWVtb3J5KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNoYXJlZE1lbW9yeUZv
ckdldFBpeGVsQnVmZmVyKHNpemVfdCBkYXRhU2l6ZSwgSVBDOjpUaW1lb3V0IHRpbWVvdXQpCiB7
Ci0gICAgc2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7Ci0KICAgICBib29sIG5l
ZWRzU2hhcmVkTWVtb3J5ID0gIW1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkgfHwgZGF0YVNp
emUgPiBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5TGVuZ3RoOwogICAgIGJvb2wgbmVlZHNT
ZW1hcGhvcmUgPSAhbV9nZXRQaXhlbEJ1ZmZlclNlbWFwaG9yZTsKIApAQCAtMTc1LDExICsxNjYs
MTEgQEAgU2hhcmVkTWVtb3J5KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNoYXJlZE1l
bW9yeUZvckdldFBpeGVsQnVmZmVyKHNpemVfdAogICAgIElQQzo6U2VtYXBob3JlIHNlbWFwaG9y
ZTsKIAogICAgIGlmIChuZWVkc1NoYXJlZE1lbW9yeSAmJiBuZWVkc1NlbWFwaG9yZSkKLSAgICAg
ICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJl
ZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKGRhdGFTaXplKSwgTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZv
ckdldFBpeGVsQnVmZmVyOjpSZXBseShoYW5kbGUsIHNlbWFwaG9yZSksIHJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKCksIHRpbWVvdXQsIElQQzo6U2VuZFN5bmNPcHRpb246Ok1haW50YWluT3Jk
ZXJpbmdXaXRoQXN5bmNNZXNzYWdlcyk7CisgICAgICAgIHNlbmRTeW5jVG9TdHJlYW0oTWVzc2Fn
ZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9y
ZUZvckdldFBpeGVsQnVmZmVyKGRhdGFTaXplKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyOjpS
ZXBseShoYW5kbGUsIHNlbWFwaG9yZSksIHRpbWVvdXQpOwogICAgIGVsc2UgaWYgKG5lZWRzU2hh
cmVkTWVtb3J5KQotICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIoZGF0YVNpemUpLCBNZXNz
YWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4
ZWxCdWZmZXI6OlJlcGx5KGhhbmRsZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIHRp
bWVvdXQsIElQQzo6U2VuZFN5bmNPcHRpb246Ok1haW50YWluT3JkZXJpbmdXaXRoQXN5bmNNZXNz
YWdlcyk7CisgICAgICAgIHNlbmRTeW5jVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKGRhdGFTaXplKSwg
TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUZvckdl
dFBpeGVsQnVmZmVyOjpSZXBseShoYW5kbGUpLCB0aW1lb3V0KTsKICAgICBlbHNlIGlmIChuZWVk
c1NlbWFwaG9yZSkKLSAgICAgICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OlNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKCksIE1lc3NhZ2VzOjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcjo6UmVwbHkoc2VtYXBob3Jl
KSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgdGltZW91dCk7CisgICAgICAgIHNlbmRT
eW5jVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlNlbWFwaG9yZUZv
ckdldFBpeGVsQnVmZmVyKCksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpTZW1h
cGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcjo6UmVwbHkoc2VtYXBob3JlKSwgdGltZW91dCk7CiAKICAg
ICBpZiAoIWhhbmRsZS5oYW5kbGUuaXNOdWxsKCkpIHsKICAgICAgICAgbV9nZXRQaXhlbEJ1ZmZl
clNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6bWFwKGhhbmRsZS5oYW5kbGUsIFNoYXJlZE1l
bW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwpAQCAtMjA0LDMzICsxOTUsMjcgQEAgYm9vbCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndhaXRGb3JHZXRQaXhlbEJ1ZmZlclRvQ29tcGxl
dGUoSVBDOjpUaW1lb3V0IHQKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkZXN0
cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkoKQogewogICAgIG1fZ2V0UGl4ZWxCdWZmZXJT
aGFyZWRNZW1vcnkgPSBudWxscHRyOwotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OkRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpLCByZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5X
aGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAgc2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpEZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkoKSk7
CiB9CiAKIFN0cmluZyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldERhdGFVUkxGb3JJ
bWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsKLSAgICBz
ZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKLQogICAgIFN0cmluZyB1cmxTdHJp
bmc7Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldERh
dGFVUkxGb3JJbWFnZUJ1ZmZlcihtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9u
LCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6R2V0RGF0YVVSTEZvckltYWdlQnVmZmVyOjpSZXBseSh1cmxTdHJpbmcpLCByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCAxX3MpOworICAgIHNlbmRTeW5jVG9TdHJlYW0oTWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlciht
aW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uLCByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0RGF0YVVSTEZv
ckltYWdlQnVmZmVyOjpSZXBseSh1cmxTdHJpbmcpLCAzX3MpOwogICAgIHJldHVybiB1cmxTdHJp
bmc7CiB9CiAKIFZlY3Rvcjx1aW50OF90PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Omdl
dERhdGFGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcikKIHsKLSAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVk
ZWQoKTsKLQogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIHNlbmRTeW5jKE1lc3NhZ2Vz
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXREYXRhRm9ySW1hZ2VCdWZmZXIobWltZVR5cGUs
IHF1YWxpdHksIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciksIE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpHZXREYXRhRm9ySW1hZ2VCdWZmZXI6OlJlcGx5KGRhdGEpLCByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCAxX3MpOworICAgIHNlbmRTeW5jVG9TdHJlYW0oTWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldERhdGFGb3JJbWFnZUJ1ZmZlcihtaW1l
VHlwZSwgcXVhbGl0eSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldERhdGFGb3JJbWFnZUJ1ZmZlcjo6UmVwbHkoZGF0YSks
IDNfcyk7CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0U2hhcmVhYmxlQml0bWFwKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZl
UmVzb2x1dGlvbikKIHsKLSAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsK
LQogICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICBhdXRvIHNlbmRSZXN1
bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0U2hhcmVh
YmxlQml0bWFwRm9ySW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIHByZXNlcnZlUmVzb2x1dGlvbiks
IE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRTaGFyZWFibGVCaXRtYXBGb3JJ
bWFnZUJ1ZmZlcjo6UmVwbHkoaGFuZGxlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwg
MV9zKTsKKyAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luY1RvU3RyZWFtKE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihp
bWFnZUJ1ZmZlciwgcHJlc2VydmVSZXNvbHV0aW9uKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OkdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyOjpSZXBseShoYW5kbGUp
LCAzX3MpOwogICAgIGlmIChoYW5kbGUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgQVNTRVJUX1VOVVNFRChzZW5kUmVzdWx0LCBzZW5kUmVzdWx0KTsKQEAgLTIzOSwzMCArMjI0
LDI3IEBAIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6Z2V0U2hhcmVhYmxlQml0bWFwKFJlbmRlcmluCiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
JiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
Q2FjaGVOYXRpdmVJbWFnZShoYW5kbGUsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciksIHJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNz
YWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICBzZW5kVG9TdHJlYW0oTWVzc2Fn
ZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNhY2hlTmF0aXZlSW1hZ2UoaGFuZGxlLCByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OmNhY2hlRm9udChSZWY8V2ViQ29yZTo6Rm9udD4mJiBmb250KQordm9pZCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNhY2hlRm9udChSZWY8Rm9udD4mJiBmb250KQogewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNhY2hlRm9udChXVEZN
b3ZlKGZvbnQpKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9u
OjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIHNlbmRU
b1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q2FjaGVGb250KFdURk1v
dmUoZm9udCkpKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRlbGV0
ZUFsbEZvbnRzKCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpEZWxldGVBbGxGb250cygpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNl
bmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7Cisg
ICAgc2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpEZWxldGVB
bGxGb250cygpKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVh
c2VSZW1vdGVSZXNvdXJjZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCkKIHsKLSAgICBpZiAocmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyID09IG1fY3VycmVudERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKQotICAgICAgICBtX2N1cnJlbnREZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmll
ciA9IHN0ZDo6bnVsbG9wdDsKLQotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OlJlbGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIs
IHVzZUNvdW50KSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9u
OjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIHNlbmRU
b1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVsZWFzZVJlbW90ZVJl
c291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdXNlQ291bnQpKTsKIH0KIAogdm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKCkK
IHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpGaW5hbGl6ZVJl
bmRlcmluZ1VwZGF0ZShtX3JlbmRlcmluZ1VwZGF0ZUlEKSwgcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdG
b3JTeW5jUmVwbHkpOworICAgIHNlbmRUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6RmluYWxpemVSZW5kZXJpbmdVcGRhdGUobV9yZW5kZXJpbmdVcGRhdGVJRCkpOwog
ICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKCk7
CiAgICAgbV9yZW5kZXJpbmdVcGRhdGVJRC5pbmNyZW1lbnQoKTsKIH0KQEAgLTI4NywxNjQgKzI2
OSw0MCBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGlkRmx1c2goR3JhcGhp
Y3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSQogICAgICAgICBpbWFnZUJ1ZmZlci0+ZGlk
Rmx1c2goZmx1c2hJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmRpZEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKFJlbmRlcmluZ1VwZGF0ZUlEIGRpZFJl
bmRlcmluZ1VwZGF0ZUlEKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRpZEZp
bmFsaXplUmVuZGVyaW5nVXBkYXRlKFJlbmRlcmluZ1VwZGF0ZUlEIHJlbmRlcmluZ1VwZGF0ZUlE
KQogewotICAgIEFTU0VSVChkaWRSZW5kZXJpbmdVcGRhdGVJRCA8PSBtX3JlbmRlcmluZ1VwZGF0
ZUlEKTsKLSAgICBtX2RpZFJlbmRlcmluZ1VwZGF0ZUlEID0gc3RkOjptaW4oZGlkUmVuZGVyaW5n
VXBkYXRlSUQsIG1fcmVuZGVyaW5nVXBkYXRlSUQpOworICAgIEFTU0VSVChyZW5kZXJpbmdVcGRh
dGVJRCA8PSBtX3JlbmRlcmluZ1VwZGF0ZUlEKTsKKyAgICBtX2RpZFJlbmRlcmluZ1VwZGF0ZUlE
ID0gc3RkOjptaW4ocmVuZGVyaW5nVXBkYXRlSUQsIG1fcmVuZGVyaW5nVXBkYXRlSUQpOwogfQog
Ci12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2lsbEFwcGVuZEl0ZW0oUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIG5ld0Rlc3RpbmF0aW9uSWRlbnRpZmllcikKLXsKLSAgICBp
ZiAobV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIgPT0gbmV3RGVzdGlu
YXRpb25JZGVudGlmaWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byBwcmV2aW91
c0Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllciA9IHN0ZDo6ZXhjaGFuZ2UobV9jdXJyZW50RGVz
dGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIsIG5ld0Rlc3RpbmF0aW9uSWRlbnRpZmllcikp
IHsKLSAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQ
cm94eS5jYWNoZWRJbWFnZUJ1ZmZlcigqcHJldmlvdXNEZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZp
ZXIpKQotICAgICAgICAgICAgaW1hZ2VCdWZmZXItPmNoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZm
ZXIobmV3RGVzdGluYXRpb25JZGVudGlmaWVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgYXV0byBoYW5kbGUgPSBtb3N0UmVj
ZW50bHlVc2VkRGlzcGxheUxpc3RIYW5kbGUoKTsKLSAgICBpZiAoVU5MSUtFTFkoIWhhbmRsZSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gbmV3RGVzdGluYXRpb24gPSBtX3JlbW90ZVJl
c291cmNlQ2FjaGVQcm94eS5jYWNoZWRJbWFnZUJ1ZmZlcihuZXdEZXN0aW5hdGlvbklkZW50aWZp
ZXIpOwotICAgIGlmIChVTkxJS0VMWSghbmV3RGVzdGluYXRpb24pKSB7Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaGFuZGxlLT5t
b3ZlV3JpdGFibGVPZmZzZXRUb1N0YXJ0SWZQb3NzaWJsZSgpOwotICAgIG5ld0Rlc3RpbmF0aW9u
LT5wcmVwYXJlVG9BcHBlbmREaXNwbGF5TGlzdEl0ZW1zKGhhbmRsZS0+Y3JlYXRlSGFuZGxlKCkp
OwotfQotCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6c2VuZFdha2V1cE1lc3Nh
Z2UoY29uc3QgR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMmIGFyZ3VtZW50cykKLXsK
LSAgICBMT0dfV0lUSF9TVFJFQU0oU2hhcmVkRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlNlbmRp
bmcgd2FrZXVwOiBJdGVtc1siIDw8IGFyZ3VtZW50cy5pdGVtQnVmZmVySWRlbnRpZmllciA8PCAi
XSA9PiBJbWFnZSgiIDw8IGFyZ3VtZW50cy5kZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmll
ciA8PCAiKSBhdCAiIDw8IGFyZ3VtZW50cy5vZmZzZXQpOwotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6Oldha2VVcEFuZEFwcGx5RGlzcGxheUxpc3QoYXJndW1lbnRz
KSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRj
aE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwotfQotCi12b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6c2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCkK
K1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSBjb25zdAogewotICAgIGF1dG8gYXJndW1lbnRz
ID0gc3RkOjpleGNoYW5nZShtX2RlZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50cywgc3RkOjpu
dWxsb3B0KTsKLSAgICBpZiAoIWFyZ3VtZW50cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2Vu
ZFdha2V1cE1lc3NhZ2UoKmFyZ3VtZW50cyk7Ci0gICAgbV9yZW1haW5pbmdJdGVtc1RvQXBwZW5k
QmVmb3JlU2VuZGluZ1dha2V1cCA9IDA7Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpkaWRBcHBlbmREYXRhKGNvbnN0IERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxl
JiBoYW5kbGUsIHNpemVfdCBudW1iZXJPZkJ5dGVzLCBEaXNwbGF5TGlzdDo6RGlkQ2hhbmdlSXRl
bUJ1ZmZlciBkaWRDaGFuZ2VJdGVtQnVmZmVyLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
ZGVzdGluYXRpb25JbWFnZUJ1ZmZlcikKLXsKLSAgICBhdXRvKiBzaGFyZWRIYW5kbGUgPSBtX3No
YXJlZERpc3BsYXlMaXN0SGFuZGxlcy5nZXQoaGFuZGxlLmlkZW50aWZpZXIpOwotICAgIGlmIChV
TkxJS0VMWSghc2hhcmVkSGFuZGxlKSkKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLQotICAgIGJvb2wgd2FzRW1wdHkgPSBzaGFyZWRIYW5kbGUtPmFkdmFuY2UobnVtYmVy
T2ZCeXRlcykgPT0gbnVtYmVyT2ZCeXRlczsKLSAgICBpZiAoIXdhc0VtcHR5IHx8IGRpZENoYW5n
ZUl0ZW1CdWZmZXIgPT0gRGlzcGxheUxpc3Q6OkRpZENoYW5nZUl0ZW1CdWZmZXI6Olllcykgewot
ICAgICAgICBpZiAobV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMpIHsKLSAgICAgICAg
ICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jYWNoZWRJ
bWFnZUJ1ZmZlcihtX2RlZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50cy0+ZGVzdGluYXRpb25J
bWFnZUJ1ZmZlcklkZW50aWZpZXIpOwotICAgICAgICAgICAgaWYgKGltYWdlQnVmZmVyICYmIGlt
YWdlQnVmZmVyLT5iYWNrZW5kKCkgJiYgc2hhcmVkSGFuZGxlLT50cnlUb1Jlc3VtZSh7IG1fZGVm
ZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzLT5vZmZzZXQsIG1fZGVmZXJyZWRXYWtldXBNZXNz
YWdlQXJndW1lbnRzLT5kZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgp
IH0pKSB7Ci0gICAgICAgICAgICAgICAgbV9wYXJhbWV0ZXJzLnJlc3VtZURpc3BsYXlMaXN0U2Vt
YXBob3JlLnNpZ25hbCgpOwotICAgICAgICAgICAgICAgIG1fZGVmZXJyZWRXYWtldXBNZXNzYWdl
QXJndW1lbnRzID0gc3RkOjpudWxsb3B0OwotICAgICAgICAgICAgICAgIG1fcmVtYWluaW5nSXRl
bXNUb0FwcGVuZEJlZm9yZVNlbmRpbmdXYWtldXAgPSAwOwotICAgICAgICAgICAgfSBlbHNlIGlm
ICghLS1tX3JlbWFpbmluZ0l0ZW1zVG9BcHBlbmRCZWZvcmVTZW5kaW5nV2FrZXVwKSB7Ci0gICAg
ICAgICAgICAgICAgbV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMtPnJlYXNvbiA9IEdQ
VVByb2Nlc3NXYWtldXBSZWFzb246Okl0ZW1Db3VudEh5c3RlcmVzaXNFeGNlZWRlZDsKLSAgICAg
ICAgICAgICAgICBzZW5kV2FrZXVwTWVzc2FnZSgqc3RkOjpleGNoYW5nZShtX2RlZmVycmVkV2Fr
ZXVwTWVzc2FnZUFyZ3VtZW50cywgc3RkOjpudWxsb3B0KSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNlbmREZWZlcnJlZFdha2V1cE1l
c3NhZ2VJZk5lZWRlZCgpOwotCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3Vy
Y2VDYWNoZVByb3h5LmNhY2hlZEltYWdlQnVmZmVyKGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIpOwot
ICAgIGF1dG8gb2Zmc2V0VG9SZWFkID0gc2hhcmVkSGFuZGxlLT53cml0YWJsZU9mZnNldCgpIC0g
bnVtYmVyT2ZCeXRlczsKLSAgICBpZiAoaW1hZ2VCdWZmZXIgJiYgaW1hZ2VCdWZmZXItPmJhY2tl
bmQoKSAmJiBzaGFyZWRIYW5kbGUtPnRyeVRvUmVzdW1lKHsgb2Zmc2V0VG9SZWFkLCBkZXN0aW5h
dGlvbkltYWdlQnVmZmVyLnRvVUludDY0KCkgfSkpIHsKLSAgICAgICAgbV9wYXJhbWV0ZXJzLnJl
c3VtZURpc3BsYXlMaXN0U2VtYXBob3JlLnNpZ25hbCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gSW5zdGVhZCBvZiBzZW5kaW5nIHRoZSB3YWtldXAgbWVzc2FnZSBpbW1lZGlh
dGVseSwgd2FpdCBmb3Igc29tZSBhZGRpdGlvbmFsIGRhdGEuIFRoaXMgZ2l2ZXMgdGhlCi0gICAg
Ly8gd2ViIHByb2Nlc3MgYSAiaGVhZCBzdGFydCIsIGRlY3JlYXNpbmcgdGhlIGxpa2VsaWhvb2Qg
dGhhdCB0aGUgR1BVIHByb2Nlc3Mgd2lsbCBlbmNvdW50ZXIgZnJlcXVlbnQKLSAgICAvLyB3YWtl
dXBzIHdoZW4gcHJvY2Vzc2luZyBhIGxhcmdlIGFtb3VudCBvZiBkaXNwbGF5IGxpc3QgaXRlbXMu
Ci0gICAgY29uc3RleHByIHVuc2lnbmVkIGl0ZW1Db3VudEh5c3RlcmVzaXNCZWZvcmVTZW5kaW5n
V2FrZXVwID0gNTEyOwotCi0gICAgbV9yZW1haW5pbmdJdGVtc1RvQXBwZW5kQmVmb3JlU2VuZGlu
Z1dha2V1cCA9IGl0ZW1Db3VudEh5c3RlcmVzaXNCZWZvcmVTZW5kaW5nV2FrZXVwOwotICAgIG1f
ZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzID0ge3sgaGFuZGxlLmlkZW50aWZpZXIsIG9m
ZnNldFRvUmVhZCwgZGVzdGluYXRpb25JbWFnZUJ1ZmZlciB9fTsKKyAgICByZXR1cm4gbV9wYXJh
bWV0ZXJzLmlkZW50aWZpZXI7CiB9CiAKLVJlZlB0cjxEaXNwbGF5TGlzdFdyaXRlckhhbmRsZT4g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojptb3N0UmVjZW50bHlVc2VkRGlzcGxheUxpc3RI
YW5kbGUoKQorUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjplbnN1cmVCYWNrZW5kQ3JlYXRlZCgpCiB7Ci0gICAgaWYgKFVOTElLRUxZKG1faWRl
bnRpZmllcnNPZlJldXNhYmxlSGFuZGxlcy5pc0VtcHR5KCkpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIHJldHVybiBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlcy5nZXQobV9pZGVu
dGlmaWVyc09mUmV1c2FibGVIYW5kbGVzLmZpcnN0KCkpOworICAgIGVuc3VyZUdQVVByb2Nlc3ND
b25uZWN0aW9uKCk7CisgICAgcmV0dXJuIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCk7CiB9
CiAKLVJlZlB0cjxEaXNwbGF5TGlzdFdyaXRlckhhbmRsZT4gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpmaW5kUmV1c2FibGVEaXNwbGF5TGlzdEhhbmRsZShzaXplX3QgY2FwYWNpdHkpCitJ
UEM6OlN0cmVhbUNsaWVudENvbm5lY3Rpb24mIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
c3RyZWFtQ29ubmVjdGlvbigpCiB7Ci0gICAgYXV0byBtb3N0UmVjZW50bHlVc2VkSGFuZGxlID0g
bW9zdFJlY2VudGx5VXNlZERpc3BsYXlMaXN0SGFuZGxlKCk7Ci0gICAgaWYgKFVOTElLRUxZKCFt
b3N0UmVjZW50bHlVc2VkSGFuZGxlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBt
b3N0UmVjZW50bHlVc2VkSGFuZGxlLT5tb3ZlV3JpdGFibGVPZmZzZXRUb1N0YXJ0SWZQb3NzaWJs
ZSgpOwotICAgIGlmIChtb3N0UmVjZW50bHlVc2VkSGFuZGxlLT5hdmFpbGFibGVDYXBhY2l0eSgp
ID49IGNhcGFjaXR5KQotICAgICAgICByZXR1cm4gbW9zdFJlY2VudGx5VXNlZEhhbmRsZTsKLQot
ICAgIG1faWRlbnRpZmllcnNPZlJldXNhYmxlSGFuZGxlcy5hcHBlbmQobV9pZGVudGlmaWVyc09m
UmV1c2FibGVIYW5kbGVzLnRha2VGaXJzdCgpKTsKLQotICAgIGF1dG8gbGVhc3RSZWNlbnRseVVz
ZWRJZGVudGlmaWVyID0gbV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVzLmZpcnN0KCk7Ci0g
ICAgaWYgKGxlYXN0UmVjZW50bHlVc2VkSWRlbnRpZmllciAhPSBtb3N0UmVjZW50bHlVc2VkSGFu
ZGxlLT5pZGVudGlmaWVyKCkpIHsKLSAgICAgICAgUmVmUHRyIGhhbmRsZSA9IG1fc2hhcmVkRGlz
cGxheUxpc3RIYW5kbGVzLmdldChsZWFzdFJlY2VudGx5VXNlZElkZW50aWZpZXIpOwotICAgICAg
ICBpZiAoaGFuZGxlLT5tb3ZlV3JpdGFibGVPZmZzZXRUb1N0YXJ0SWZQb3NzaWJsZSgpICYmIGhh
bmRsZS0+YXZhaWxhYmxlQ2FwYWNpdHkoKSA+PSBjYXBhY2l0eSkKLSAgICAgICAgICAgIHJldHVy
biBoYW5kbGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgZW5zdXJlR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24oKTsKKyAgICBpZiAoVU5MSUtFTFkobV9uZWVkc1dha2VVcFNlbWFwaG9y
ZUZvckRpc3BsYXlMaXN0U3RyZWFtKSkKKyAgICAgICAgbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24o
KS0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6RGlkQ3JlYXRlV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxheUxpc3RTdHJl
YW0+KHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIDNfcywgSVBDOjpXYWl0Rm9yT3B0aW9u
OjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOworICAgIHJldHVybiAqbV9z
dHJlYW1Db25uZWN0aW9uOwogfQogCi1EaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90IGNhcGFjaXR5
LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVy
KQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRpZENyZWF0ZVdha2VVcFNlbWFw
aG9yZUZvckRpc3BsYXlMaXN0U3RyZWFtKElQQzo6U2VtYXBob3JlJiYgc2VtYXBob3JlKQogewot
ICAgIGlmIChhdXRvIGhhbmRsZSA9IGZpbmRSZXVzYWJsZURpc3BsYXlMaXN0SGFuZGxlKGNhcGFj
aXR5KSkgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2hhcmVkRGlzcGxheUxpc3RzLCBzdHJl
YW0gPDwgIlJldXNpbmcgSXRlbXNbIiA8PCBoYW5kbGUtPmlkZW50aWZpZXIoKSA8PCAiXSA9PiBJ
bWFnZSgiIDw8IGRlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllciA8PCAiKSAocmVtYWluaW5nIGNh
cGFjaXR5OiAiIDw8IGhhbmRsZS0+YXZhaWxhYmxlQ2FwYWNpdHkoKSA8PCAiKSIpOwotICAgICAg
ICByZXR1cm4gaGFuZGxlLT5jcmVhdGVIYW5kbGUoKTsKKyAgICBpZiAoIW1fc3RyZWFtQ29ubmVj
dGlvbikgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGRlZmF1bHRTaGFyZWRJdGVtQnVm
ZmVyU2l6ZSA9IDEgPDwgMTY7Ci0gICAgc3RhdGljX2Fzc2VydChkZWZhdWx0U2hhcmVkSXRlbUJ1
ZmZlclNpemUgPiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6aGVhZGVyU2l6ZSgpKTsKLQotICAg
IGF1dG8gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShzdGQ6Om1heChkZWZh
dWx0U2hhcmVkSXRlbUJ1ZmZlclNpemUsIGNhcGFjaXR5ICsgU2hhcmVkRGlzcGxheUxpc3RIYW5k
bGU6OmhlYWRlclNpemUoKSkpOwotICAgIGlmICghc2hhcmVkTWVtb3J5KQotICAgICAgICByZXR1
cm4geyB9OwotCi0gICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgc2hhcmVkTWVtb3J5SGFuZGxlOwot
ICAgIHNoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKHNoYXJlZE1lbW9yeUhhbmRsZSwgU2hhcmVk
TWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkV3JpdGUpOwotCi0gICAgYXV0byBpZGVudGlmaWVyID0g
RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOwotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRpZENyZWF0ZVNoYXJlZERpc3BsYXlM
aXN0SGFuZGxlKGlkZW50aWZpZXIsIHsgV1RGTW92ZShzaGFyZWRNZW1vcnlIYW5kbGUpLCBzaGFy
ZWRNZW1vcnktPnNpemUoKSB9LCBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpLCByZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2
ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7Ci0KLSAgICBhdXRvIG5ld0hhbmRsZSA9IERpc3Bs
YXlMaXN0V3JpdGVySGFuZGxlOjpjcmVhdGUoaWRlbnRpZmllciwgc2hhcmVkTWVtb3J5LnJlbGVh
c2VOb25OdWxsKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKG5ld0hhbmRsZSwgIlRoZXJlIG11c3Qg
YmUgZW5vdWdoIHNwYWNlIHRvIGNyZWF0ZSB0aGUgaGFuZGxlLiIpOwotICAgIGF1dG8gZGlzcGxh
eUxpc3RIYW5kbGUgPSBuZXdIYW5kbGUtPmNyZWF0ZUhhbmRsZSgpOwotCi0gICAgbV9pZGVudGlm
aWVyc09mUmV1c2FibGVIYW5kbGVzLnByZXBlbmQoaWRlbnRpZmllcik7Ci0gICAgbV9zaGFyZWRE
aXNwbGF5TGlzdEhhbmRsZXMuc2V0KGlkZW50aWZpZXIsIFdURk1vdmUobmV3SGFuZGxlKSk7Ci0K
LSAgICBMT0dfV0lUSF9TVFJFQU0oU2hhcmVkRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIkFsbG9j
YXRlZCBJdGVtc1siIDw8IGlkZW50aWZpZXIgPDwgIl0gPT4gSW1hZ2UoIiA8PCBkZXN0aW5hdGlv
bkJ1ZmZlcklkZW50aWZpZXIgPDwgIikiKTsKLSAgICByZXR1cm4gZGlzcGxheUxpc3RIYW5kbGU7
Ci19Ci0KLVJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSBjb25zdAotewotICAgIHJldHVybiBt
X3BhcmFtZXRlcnMuaWRlbnRpZmllcjsKLX0KLQotUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjplbnN1cmVCYWNrZW5kQ3JlYXRlZCgpCi17Ci0g
ICAgZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKLSAgICByZXR1cm4gcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIoKTsKKyAgICBtX3N0cmVhbUNvbm5lY3Rpb24tPnNldFdha2VVcFNlbWFw
aG9yZShXVEZNb3ZlKHNlbWFwaG9yZSkpOworICAgIG1fbmVlZHNXYWtlVXBTZW1hcGhvcmVGb3JE
aXNwbGF5TGlzdFN0cmVhbSA9IGZhbHNlOwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6cmVjb3JkTmF0aXZlSW1hZ2VVc2UoTmF0aXZlSW1hZ2UmIGltYWdlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKaW5kZXggYWEwMjNkY2YyZGI1YTMzYWFiMTNm
NjliYTAxNjI5MmQzMDVhZjc2OS4uYmFlNGM3OTc1MTM0MWE2MzVjZTM5NjcxNGJkNDAwZmI0ZGU0
MjJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCkBAIC0zMywxMSAr
MzMsMTMgQEAKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCIKICNpbmNsdWRl
ICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVk
ZSAiUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycy5oIgorI2luY2x1ZGUgIlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlJlbW90ZVJlc291cmNlQ2FjaGVQ
cm94eS5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyaW5nVXBkYXRlSUQuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+
CisjaW5jbHVkZSAiU3RyZWFtQ2xpZW50Q29ubmVjdGlvbi5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5o
PgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgpAQCAtNDUsMTEgKzQ3LDYgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1uYW1lc3BhY2UgRGlzcGxheUxpc3QgewotY2xhc3MgRGlzcGxheUxpc3Q7
Ci1jbGFzcyBJdGVtOwotfQotCiBjbGFzcyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U7CiBjbGFzcyBG
bG9hdFNpemU7CiBjbGFzcyBQaXhlbEJ1ZmZlcjsKQEAgLTYxLDEzICs1OCwxMyBAQCBlbnVtIGNs
YXNzIFJlbmRlcmluZ01vZGUgOiBib29sOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3Mg
RGlzcGxheUxpc3RXcml0ZXJIYW5kbGU7CiBjbGFzcyBXZWJQYWdlOwogCiBjbGFzcyBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkKICAgICA6IHB1YmxpYyBJUEM6Ok1lc3NhZ2VTZW5kZXIKICAg
ICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIKLSAgICAsIHB1YmxpYyBHUFVQcm9jZXNz
Q29ubmVjdGlvbjo6Q2xpZW50IHsKKyAgICAsIHB1YmxpYyBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6
Q2xpZW50CisgICAgLCBwdWJsaWMgUmVmQ291bnRlZDxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eT4gY3JlYXRlKFdlYlBhZ2UmKTsKIApAQCAtNzcsMTEgKzc0LDYgQEAgcHVi
bGljOgogICAgIHVzaW5nIFdlYWtWYWx1ZVR5cGUgPSBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6Q2xp
ZW50OjpXZWFrVmFsdWVUeXBlOwogCiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5JiByZW1v
dGVSZXNvdXJjZUNhY2hlUHJveHkoKSB7IHJldHVybiBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94
eTsgfQotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlIGNyZWF0ZUl0
ZW1CdWZmZXIoc2l6ZV90IGNhcGFjaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKTsKLQotICAgIHZvaWQgZGlkQXBwZW5k
RGF0YShjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSYsIHNpemVf
dCBudW1iZXJPZkJ5dGVzLCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlkQ2hhbmdlSXRlbUJ1ZmZl
ciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGRlc3RpbmF0aW9uSW1hZ2VC
dWZmZXIpOwotICAgIHZvaWQgd2lsbEFwcGVuZEl0ZW0oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKTsKLSAgICB2b2lkIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRl
ZCgpOwogCiAgICAgU2hhcmVkTWVtb3J5KiBzaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcihz
aXplX3QgZGF0YVNpemUsIElQQzo6VGltZW91dCk7CiAgICAgYm9vbCB3YWl0Rm9yR2V0UGl4ZWxC
dWZmZXJUb0NvbXBsZXRlKElQQzo6VGltZW91dCk7CkBAIC0xMDEsNyArOTMsNiBAQCBwdWJsaWM6
CiAgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFdlYkNv
cmU6OlBpeGVsRm9ybWF0KTsKICAgICBTdHJpbmcgZ2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJD
b3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcik7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGdldERhdGFGb3JJbWFnZUJ1ZmZlcihjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRGbHVzaElkZW50aWZpZXIgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpOwogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGdldFNoYXJlYWJsZUJpdG1h
cChXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlByZXNlcnZl
UmVzb2x1dGlvbik7CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAg
ICB2b2lkIGNhY2hlRm9udChSZWY8V2ViQ29yZTo6Rm9udD4mJik7CkBAIC0xMjUsMTAgKzExNiwx
MyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzR1BVUHJvY2Vzc0Nvbm5lY3Rpb25DbG9zZWQoKSBj
b25zdCB7IHJldHVybiAhbV9ncHVQcm9jZXNzQ29ubmVjdGlvbjsgfQogCisgICAgdm9pZCBkaWRD
cmVhdGVXYWtlVXBTZW1hcGhvcmVGb3JEaXNwbGF5TGlzdFN0cmVhbShJUEM6OlNlbWFwaG9yZSYm
KTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiAgICAgdm9pZCBzZW5k
VG9TdHJlYW0oVCYmIG1lc3NhZ2UsIE9iamVjdElkZW50aWZpZXI8VT4gaWRlbnRpZmllcikKICAg
ICB7Ci0gICAgICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkLgorICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIG1ha2luZyB0aGUgc2VuZCB0aW1lb3V0IGZpbml0ZS4K
KyAgICAgICAgc3RyZWFtQ29ubmVjdGlvbigpLnNlbmQoV1RGTW92ZShtZXNzYWdlKSwgaWRlbnRp
ZmllciwgU2Vjb25kczo6aW5maW5pdHkoKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KQEAgLTE0NCw2ICsxMzgsMTQgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBleHBsaWNp
dCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoV2ViUGFnZSYpOwogCisgICAgSVBDOjpTdHJl
YW1DbGllbnRDb25uZWN0aW9uJiBzdHJlYW1Db25uZWN0aW9uKCk7CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIGF1dG8gc2VuZFN5bmNUb1N0cmVhbShUJiYgbWVzc2FnZSwgdHlwZW5h
bWUgVDo6UmVwbHkmJiByZXBseSwgSVBDOjpUaW1lb3V0IHRpbWVvdXQpCisgICAgeworICAgICAg
ICByZXR1cm4gc3RyZWFtQ29ubmVjdGlvbigpLnNlbmRTeW5jKFdURk1vdmUobWVzc2FnZSksIFdU
Rk1vdmUocmVwbHkpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCB0aW1lb3V0KTsKKyAg
ICB9CisKICAgICAvLyBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBncHVQ
cm9jZXNzQ29ubmVjdGlvbkRpZENsb3NlKEdQVVByb2Nlc3NDb25uZWN0aW9uJikgZmluYWw7CiAK
QEAgLTE1NCwyMSArMTU2LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRGbHVzaChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRGaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShSZW5k
ZXJpbmdVcGRhdGVJRCBkaWRSZW5kZXJpbmdVcGRhdGVJRCk7CiAKLSAgICBSZWZQdHI8RGlzcGxh
eUxpc3RXcml0ZXJIYW5kbGU+IG1vc3RSZWNlbnRseVVzZWREaXNwbGF5TGlzdEhhbmRsZSgpOwot
ICAgIFJlZlB0cjxEaXNwbGF5TGlzdFdyaXRlckhhbmRsZT4gZmluZFJldXNhYmxlRGlzcGxheUxp
c3RIYW5kbGUoc2l6ZV90IGNhcGFjaXR5KTsKLQotICAgIHZvaWQgc2VuZFdha2V1cE1lc3NhZ2Uo
Y29uc3QgR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMmKTsKLQorICAgIHN0ZDo6dW5p
cXVlX3B0cjxJUEM6OlN0cmVhbUNsaWVudENvbm5lY3Rpb24+IG1fc3RyZWFtQ29ubmVjdGlvbjsK
ICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzIG1fcGFyYW1ldGVy
czsKICAgICBXZWFrUHRyPEdQVVByb2Nlc3NDb25uZWN0aW9uPiBtX2dwdVByb2Nlc3NDb25uZWN0
aW9uOwogICAgIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQ
cm94eSB7ICp0aGlzIH07CiAKLSAgICBIYXNoTWFwPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
QnVmZmVySWRlbnRpZmllciwgUmVmUHRyPERpc3BsYXlMaXN0V3JpdGVySGFuZGxlPj4gbV9zaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZXM7Ci0gICAgRGVxdWU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1CdWZmZXJJZGVudGlmaWVyPiBtX2lkZW50aWZpZXJzT2ZSZXVzYWJsZUhhbmRsZXM7Ci0gICAg
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IG1fY3Vy
cmVudERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyOwotICAgIHN0ZDo6b3B0aW9uYWw8
R1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHM+IG1fZGVmZXJyZWRXYWtldXBNZXNzYWdl
QXJndW1lbnRzOwotICAgIHVuc2lnbmVkIG1fcmVtYWluaW5nSXRlbXNUb0FwcGVuZEJlZm9yZVNl
bmRpbmdXYWtldXAgeyAwIH07Ci0KICAgICBzdGQ6Om9wdGlvbmFsPElQQzo6U2VtYXBob3JlPiBt
X2dldFBpeGVsQnVmZmVyU2VtYXBob3JlOwogICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1fZ2V0
UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnk7CiAgICAgdWludDY0X3QgbV9nZXRQaXhlbEJ1ZmZlclNo
YXJlZE1lbW9yeUxlbmd0aCB7IDAgfTsKQEAgLTE3Niw2ICsxNjgsOCBAQCBwcml2YXRlOgogCiAg
ICAgUmVuZGVyaW5nVXBkYXRlSUQgbV9yZW5kZXJpbmdVcGRhdGVJRDsKICAgICBSZW5kZXJpbmdV
cGRhdGVJRCBtX2RpZFJlbmRlcmluZ1VwZGF0ZUlEOworCisgICAgYm9vbCBtX25lZWRzV2FrZVVw
U2VtYXBob3JlRm9yRGlzcGxheUxpc3RTdHJlYW0geyB0cnVlIH07CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
bWVzc2FnZXMuaW4KaW5kZXggYjVlZTk1OTFhZjFmZmVlNTMzNWUxMjljOTRhZjk2YjU0N2Y4NDFh
NS4uNzlhYmRiZTI0MjY0YjNiYTRjM2Q1YWY0MjJlOWM3M2ZkOGZhY2YzMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KQEAgLTI2LDYg
KzI2LDcgQEAgbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IE5vdFJlZkNv
dW50ZWQgewogICAgIERpZENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChXZWJLaXQ6OkltYWdlQnVm
ZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiAgICAgRGlkRmx1c2goV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikK
ICAgICBEaWRGaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShXZWJLaXQ6OlJlbmRlcmluZ1VwZGF0ZUlE
IGRpZFJlbmRlcmluZ1VwZGF0ZUlEKQorICAgIERpZENyZWF0ZVdha2VVcFNlbWFwaG9yZUZvckRp
c3BsYXlMaXN0U3RyZWFtKElQQzo6U2VtYXBob3JlIHdha2VVcFNlbWFwaG9yZSkKIH0KIAogI2Vu
ZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKaW5kZXggMGYxMTgzODUxOGNiOTA4OWVjNWVj
Y2ZhYWMzMzVlMjAxYTZjMzZmNi4uNjAwNTRhYTkzZTNiNWEyN2I3YzU4YjIzMWE3ZGFhYWJmYzM4
YjQ0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVz
dGluZ0FQSS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVz
dGluZ0FQSS5jcHAKQEAgLTc2MSwxMyArNzYxLDYgQEAgc3RhdGljIGJvb2wgZW5jb2RlUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyhJUEM6OkVuY29kZXImIGVuY29kZXIK
ICAgICBpZiAoIWlkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8g
anNTZW1hcGhvcmUgPSBqc09iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGdsb2JhbE9iamVjdC0+dm0oKSwgInNlbWFwaG9yZSJfcykpOwotICAgIGlm
IChzY29wZS5leGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlZlB0ciBz
ZW1hcGhvcmVPYmplY3QgPSBKU0lQQ1NlbWFwaG9yZTo6dG9XcmFwcGVkKHRvUmVmKGdsb2JhbE9i
amVjdCksIHRvUmVmKGpzU2VtYXBob3JlKSk7Ci0gICAgaWYgKCFzZW1hcGhvcmVPYmplY3QpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIGF1dG8gcGFnZVByb3h5SUQgPSBnZXRPYmplY3RJ
ZGVudGlmaWVyRnJvbVByb3BlcnR5PFdlYlBhZ2VQcm94eUlkZW50aWZpZXJUeXBlPihnbG9iYWxP
YmplY3QsIGpzT2JqZWN0LCAicGFnZVByb3h5SUQiX3MsIHNjb3BlKTsKICAgICBpZiAoIXBhZ2VQ
cm94eUlEKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03NzYsMTAgKzc2OSw4IEBAIHN0YXRp
YyBib29sIGVuY29kZVJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMoSVBD
OjpFbmNvZGVyJiBlbmNvZGVyCiAgICAgaWYgKCFwYWdlSUQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGF1dG8gc2VtYXBob3JlID0gc2VtYXBob3JlT2JqZWN0LT5leGNoYW5nZSgpOwot
ICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVycyB7
ICppZGVudGlmaWVyLCBXVEZNb3ZlKHNlbWFwaG9yZSksICpwYWdlUHJveHlJRCwgKnBhZ2VJRCB9
OworICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVy
cyB7ICppZGVudGlmaWVyLCAqcGFnZVByb3h5SUQsICpwYWdlSUQgfTsKICAgICBlbmNvZGVyIDw8
IHBhcmFtZXRlcnM7Ci0gICAgc2VtYXBob3JlT2JqZWN0LT5leGNoYW5nZShXVEZNb3ZlKHBhcmFt
ZXRlcnMucmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
ICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440949</attachid>
            <date>2021-10-12 09:39:00 -0700</date>
            <delta_ts>2021-10-12 15:36:37 -0700</delta_ts>
            <desc>Rebase again</desc>
            <filename>bug-230860-20211012093900.patch</filename>
            <type>text/plain</type>
            <size>103204</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzOTgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU4ODUzM2MzZmUyM2JmYzg1
NjEwM2QxODg1ZTRiZjVlMGU1ZWY2MjYuLmJlMWE2NGM1ZTdjNDgyYTA5NzM0MGI1MjJjZWM1ZWZj
ODRmNTI5OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgxIEBACisyMDIxLTEwLTEyICBXZW5zb24g
SHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
VXNlIElQQyBzdHJlYW1pbmcgZm9yIGNvbmN1cnJlbnQgZGlzcGxheSBsaXN0IHByb2Nlc3NpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDg2MAor
ICAgICAgICByZGFyOi8vODM0MzgwMzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlYnVpbGRzIHRoZSBjb25jdXJyZW50IGRpc3Bs
YXkgbGlzdCBhcmNoaXRlY3R1cmUgaW4gdGhlIHdlYiBhbmQgR1BVIHByb2Nlc3NlcyBvbiB0b3Ag
b2YgdGhlCisgICAgICAgIHN0cmVhbWFibGUgSVBDIGNvbm5lY3Rpb25zIGN1cnJlbnRseSB1c2Vk
IGJ5IFdlYkdMIGluIHRoZSBHUFUgcHJvY2Vzcy4gU2VlIGJlbG93IGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICAgICAgVGhlcmUgc2hvdWxkIGJlIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAg
ICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tl
bmQpOgorCisgICAgICAgIFBhc3MgYSBTdHJlYW1Db25uZWN0aW9uQnVmZmVyIGZyb20gdGhlIHdl
YiBwcm9jZXNzIHRvIHRoZSBHUFUgcHJvY2VzcyB3aGVuIGNvbnN0cnVjdGluZworICAgICAgICBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOyB0aGlzIHNlcnZlcyBhcyB0aGUgcG9vbCBvZiBzaGFyZWQg
bWVtb3J5IHVzZWQgdG8gc3RvcmUgc3RyZWFtaW5nIElQQyBtZXNzYWdlcyBzZW50IGZyb20KKyAg
ICAgICAgdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBHUFUgcHJvY2Vzcy4gSSd2ZSAoc29tZXdoYXQg
YXJiaXRyYXJpbHkpIGNob3NlbiB0aGUgc2l6ZSBvZiB0aGlzIFN0cmVhbUNvbm5lY3Rpb25CdWZm
ZXIKKyAgICAgICAgdG8gbWF0Y2ggV2ViR0wncyBjb25uZWN0aW9uIGJ1ZmZlciwgdGhvdWdoIHRo
aXMgY2FuIGJlIHR1bmVkIGFzIG5lZWRlZC4gSW4gYSBmdXR1cmUgcGF0Y2gsIHdlIG1heSBhbHNv
IHdhbnQgdG8KKyAgICAgICAgaW1wbGVtZW50IGEgbWVjaGFuaXNtIGZvciBzdGFydGluZyBvdXQg
d2l0aCBhIHNtYWxsIGNvbm5lY3Rpb24gYnVmZmVyLCBhbmQgZ3Jvd2luZyBpdCBieSBzdWNjZXNz
aXZlbHkgbGFyZ2VyCisgICAgICAgIHNlZ21lbnRzIGFzIG5lZWRlZC4KKworICAgICAgICAqIEdQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAqIEdQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQ
cm9jZXNzL2NvY29hL0dQVVByb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJv
Y2Vzczo6YWRkaXRpb25hbFN0YXRlRm9yRGlhZ25vc3RpY1JlcG9ydCBjb25zdCk6CisKKyAgICAg
ICAgQWRkIGEgRklYTUUgZm9yIHJlLWludHJvZHVjaW5nIGRpYWdub3N0aWMgc3RhdGUgbG9nZ2lu
ZyB3aGVuIHVzaW5nIHN0cmVhbWFibGUgSVBDLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcik6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnN0YXJ0TGlzdGVuaW5nRm9y
SVBDKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c3RvcExp
c3RlbmluZ0ZvcklQQyk6CisKKyAgICAgICAgQWRkIGFuZCByZW1vdmUgdGhlIHJlbW90ZSBkaXNw
bGF5IGxpc3QgYXMgYSBkZXN0aW5hdGlvbiBvbiB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCdz
IHN0cmVhbSBjb25uZWN0aW9uLiBOb3RlCisgICAgICAgIHRoYXQgdGhlIHN5bmNocm9ub3VzIGRp
c3BhdGNoIHRvIHRoZSBtYWluIHRocmVhZCBoZXJlIGlzIG5lY2Vzc2FyeSB0byBtYWludGFpbiB0
aGUgb3JkZXJpbmcgb2Ygb3V0LW9mLXN0cmVhbSBJUEMKKyAgICAgICAgbWVzc2FnZXMgdGhhdCBt
YXkgaGF2ZSBiZWVuIHJlY2VpdmVkIG9uIHRoZSBJUEMgdGhyZWFkLgorCisgICAgICAgICogR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmhhbmRsZUl0ZW0pOgorICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXI6OmFwcGx5KTogRGVsZXRlZC4KKworICAgICAgICBJbnRyb2R1Y2Ug
YG1fcmVtb3RlRGlzcGxheUxpc3RgIHRvIFJlbW90ZUltYWdlQnVmZmVyLCBhbmQgcmVtb3ZlIHNv
bWUgbG9naWMgZm9yIGFwcGx5aW5nIGRpc3BsYXkgbGlzdCBpdGVtcyB0aGF0CisgICAgICAgIGlz
IG5vIGxvbmdlciBuZWNlc3NhcnkuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKworICAgICAgICBTZXQgdXAgdGhlIElQQyBz
dHJlYW0gY29ubmVjdGlvbiBhbmQgc3RyZWFtIGNvbm5lY3Rpb24gd29yayBxdWV1ZSwgYW5kIGlt
bWVkaWF0ZWx5IHNlbmQgYSB3YWtldXAgc2VtYXBob3JlIGJhY2sKKyAgICAgICAgdG8gdGhlIHdl
YiBwcm9jZXNzLgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnN0
YXJ0TGlzdGVuaW5nRm9ySVBDKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpzdG9wTGlzdGVuaW5nRm9ySVBDKToKKworICAgICAgICBBZGQgYSBt
ZWNoYW5pc20gdG8gaW1tZWRpYXRlbHkgdGVsbCBhbGwgYG1fcmVtb3RlRGlzcGxheUxpc3RzYCB0
byBzdG9wIGxpc3RlbmluZyBmb3Igc3RyZWFtaW5nIElQQyBtZXNzYWdlcyB3aGVuCisgICAgICAg
IHRoZSBvd25pbmcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBzdG9wcyBsaXN0ZW5pbmcuCisKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlzcGF0Y2gpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVJbWFnZUJ1ZmZlckJh
Y2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJ
bWFnZUJ1ZmZlcldpdGhRdWFsaWZpZWRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6Y2FjaGVOYXRpdmVJbWFnZVdpdGhRdWFsaWZpZWRJZGVudGlm
aWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y2FjaGVGb250
V2l0aFF1YWxpZmllZElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpmaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5TWVkaWFJdGVtKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6UmVwbGF5
ZXJEZWxlZ2F0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OmFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6ZGlkQ3JlYXRlTWFz
a0ltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6ZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRl
bGVnYXRlOjpyZWNvcmRSZXNvdXJjZVVzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnN1Ym1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om5leHREZXN0aW5hdGlvbkltYWdlQnVmZmVyQWZ0ZXJB
cHBseWluZ0Rpc3BsYXlMaXN0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6Ondha2VVcEFuZEFwcGx5RGlzcGxheUxpc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp3YWtlVXBBbmRBcHBseURpc3Bs
YXlMaXN0V2l0aFF1YWxpZmllZElkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZXROZXh0SXRlbUJ1ZmZlclRvUmVhZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZENyZWF0ZVNo
YXJlZERpc3BsYXlMaXN0SGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6ZGlkQ3JlYXRlU2hhcmVkRGlzcGxheUxpc3RIYW5kbGVXaXRoUXVh
bGlmaWVkSWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OnJlc3VtZUZyb21QZW5kaW5nV2FrZXVwSW5mb3JtYXRpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVNYXNr
SW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpkaWRSZXNldE1hc2tJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRlY29kZUl0ZW0pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpsYXN0S25vd25TdGF0ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0
ZUxhc3RLbm93blN0YXRlKTogRGVsZXRlZC4KKworICAgICAgICBSZW1vdmUgbG9naWMgZm9yIGNv
b3JkaW5hdGluZyB3YWtldXBzIGFuZCBzaGFyZWQgZGlzcGxheSBsaXN0IGl0ZW0gYnVmZmVycyBp
biB0aGUgR1BVIHByb2Nlc3MuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKworICAgICAgICBTdWJjbGFzcyBJUEM6OlN0cmVhbU1lc3Nh
Z2VSZWNlaXZlci4gSW4gdGhpcyBuZXcgY29uY3VycmVudCBkaXNwbGF5IGxpc3QgbW9kZWwsIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQgc2VydmVzCisgICAgICAgIGFzIGEgc3RyZWFtaW5nIElQQyBk
ZXN0aW5hdGlvbiBhbG9uZ3NpZGUgZWFjaCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyIGluIHRo
ZSBHUFUgcHJvY2VzczsgYWxsIG1lc3NhZ2VzCisgICAgICAgIHByZXZpb3VzbHkgc2VudCB0byB0
aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBhcyBub3JtYWwgSVBDIGFyZSBub3cgc2VudCB0aHJv
dWdoIHRoZSBjb25uZWN0aW9uIHN0cmVhbSAodGhvdWdoCisgICAgICAgIHNvbWUgbXVzdCBiZSBt
YXJrZWQgYXMgbm9uLXN0cmVhbS1lbmNvZGFibGUpLgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OnN0cmVhbUNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkZWNvZGVBbmRDcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6UGVuZGluZ1dha2V1cEluZm9ybWF0aW9uOjpzaG91bGRQZXJmb3JtV2FrZXVwIGNvbnN0
KTogRGVsZXRlZC4KKworICAgICAgICBEZWxldGUgbW9yZSBsb2dpYyByZWxhdGVkIHRvIGNvbmN1
cnJlbnQgZGlzcGxheSBsaXN0cy4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbjoKKworICAgICAgICBNYWtlIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQgYSBzdHJlYW0gbWVzc2FnZSByZWNlaXZlci4KKworICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVy
cy5oOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJh
bWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorCisgICAgICAgIFJlbW92ZSB0aGUg
SVBDOjpTZW1hcGhvcmUgaGVyZSwgdGhhdCB3YXMgcHJldmlvdXNseSB1c2VkIGZvciBxdWljayBH
UFUgcHJvY2VzcyB3YWtldXBzLiBUaGlzIHNlbWFwaG9yZSBpcyBubworICAgICAgICBsb25nZXIg
bmVlZGVkIGJlY2F1c2Ugd2UgYWx3YXlzIHVzZSBJUEM6OlNlbWFwaG9yZSBmb3Igd2FraW5nIHRo
ZSBHUFUgcHJvY2VzcyB3aGVuIHVzaW5nIHN0cmVhbWluZyBJUEMuCisKKyAgICAgICAgKiBHUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6CisKKyAgICAgICAgTWFr
ZSB0aGUgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSB0ZW1wbGF0ZSBjbGFzcyBkaXJlY3RseSBzdWJj
bGFzcyBDb25jcmV0ZUltYWdlQnVmZmVyIGluc3RlYWQgb2YKKyAgICAgICAgRGlzcGxheUxpc3Q6
OkltYWdlQnVmZmVyOyBhZGRpdGlvbmFsbHksIGludHJvZHVjZSBhIGBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHkgbV9yZW1vdGVEaXNwbGF5TGlzdGAgaGVyZSwKKyAgICAgICAgd2hpY2gg
d2UgdXNlIGFzIG91ciBkcmF3aW5nIGdyYXBoaWNzIGNvbnRleHQuCisKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVjb3JkTmF0
aXZlSW1hZ2VVc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojpy
ZWNvcmRGb250VXNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6
cmVjb3JkSW1hZ2VCdWZmZXJVc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5OjpjbGVhckRpc3BsYXlMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
ZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OmdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZVJlbW90ZUltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpz
aGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6ZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXREYXRhVVJM
Rm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmdldERhdGFGb3JJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0U2hhcmVhYmxlQml0bWFwKToKKworICAgICAgICBTZW5k
IGFsbCBJUEMgbWVzc2FnZXMgdG8gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBpbiB0aGUgR1BVIHBy
b2Nlc3MgdGhyb3VnaCB0aGUgc3RyZWFtIGNvbm5lY3Rpb24sIGluc3RlYWQgb2YKKyAgICAgICAg
dXNpbmcgc3RhbmRhcmQgSVBDIG1lc3NhZ2VzLiBUaGlzIGd1YXJhbnRlZXMgb3JkZXJpbmcgd2hl
biByZWNlaXZpbmcgY2FjaGVkIHJlc291cmNlcy4KKworICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNhY2hlTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNhY2hlRm9udCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGVsZXRlQWxsRm9udHMpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VSZW1vdGVSZXNv
dXJjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Zmlu
YWxpemVSZW5kZXJpbmdVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OmRpZEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
ZW5zdXJlQmFja2VuZENyZWF0ZWQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OnN0cmVhbUNvbm5lY3Rpb24pOgorCisgICAgICAgIEFkZCBhIG1lY2hhbmlz
bSB0byBlbnN1cmUgdGhhdCB3ZSBoYXZlIHRoZSBJUEMgc3RyZWFtIHdha2V1cCBzZW1hcGhvcmUg
YmVmb3JlIGdyYWJiaW5nIHRoZSBzdHJlYW0gY29ubmVjdGlvbi4KKworICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRpZENyZWF0ZVdha2VVcFNlbWFwaG9yZUZv
ckRpc3BsYXlMaXN0U3RyZWFtKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5Ojp3aWxsQXBwZW5kSXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6c2VuZFdha2V1cE1lc3NhZ2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNlbmREZWZlcnJl
ZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGlkQXBwZW5kRGF0YSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bW9zdFJlY2VudGx5VXNlZERp
c3BsYXlMaXN0SGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpmaW5kUmV1c2FibGVEaXNwbGF5TGlzdEhhbmRsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSXRl
bUJ1ZmZlcik6IERlbGV0ZWQuCisKKyAgICAgICAgUmVtb3ZlIGFsbCBsb2dpYyBwcmV2aW91c2x5
IHVzZWQgdG8gY29vcmRpbmF0ZSBjb25jdXJyZW50IGRpc3BsYXkgbGlzdCBwcm9jZXNzaW5nIG9u
IHRoZSByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGJhY2tlbmQuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDoKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW1vdGVSZXNvdXJjZUNh
Y2hlUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OnNlbmRUb1N0cmVhbSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6c2VuZFN5bmNUb1N0cmVhbSk6CisKKyAgICAgICAgQWRkIGhlbHBlciBtZXRob2RzIHRv
IHNlbmQgSVBDIG1lc3NhZ2VzIHRvIHRoZSByZW1vdGUgcmVuZGVyaW5nIGJhY2tlbmQgdGhyb3Vn
aCB0aGUgY29ubmVjdGlvbiBzdHJlYW0uCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJ
UENUZXN0aW5nQVBJOjplbmNvZGVSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0
ZXJzKToKKwogMjAyMS0xMC0xMiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgc29tZSBtaXNzaW5nIFdlYkNvcmU6OiBuYW1lc3BhY2VzIGluIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDg1Y2E4OGY3YTk4
MjQ2MjYyYzMxYTdmYjQxNzc5OTUwNTNlNDljZWUuLjY2OTk5MGJlYzk3ODY2OGJlZmMzY2JjOTM3
MGE4MjViY2Q3MTUyZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTQ3NCwxMCArNDc0LDEwIEBAIFJlbW90
ZUltYWdlRGVjb2RlckFWRlByb3h5JiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjppbWFnZURl
Y29kZXJBVkZQcm94eSgpCiB9CiAjZW5kaWYKIAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlv
blBhcmFtZXRlcnMmJiBjcmVhdGlvblBhcmFtZXRlcnMpCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVtb3RlUmVuZGVyaW5nQmFja2VuZENy
ZWF0aW9uUGFyYW1ldGVycyYmIGNyZWF0aW9uUGFyYW1ldGVycywgSVBDOjpTdHJlYW1Db25uZWN0
aW9uQnVmZmVyJiYgc3RyZWFtQnVmZmVyKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kTWFwLmVuc3VyZShjcmVhdGlvblBhcmFtZXRlcnMuaWRlbnRpZmll
ciwgWyZdKCkgewotICAgICAgICByZXR1cm4gSVBDOjpTY29wZWRBY3RpdmVNZXNzYWdlUmVjZWl2
ZVF1ZXVlIHsgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKGNy
ZWF0aW9uUGFyYW1ldGVycykpIH07CisgICAgICAgIHJldHVybiBJUEM6OlNjb3BlZEFjdGl2ZU1l
c3NhZ2VSZWNlaXZlUXVldWUgeyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKnRoaXMs
IFdURk1vdmUoY3JlYXRpb25QYXJhbWV0ZXJzKSwgV1RGTW92ZShzdHJlYW1CdWZmZXIpKSB9Owog
ICAgIH0pOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuaAppbmRleCAwNWE1MDVmZWUzMjkzNzhiMTMwYTljOTk3MzI2MDZiZTIwYjQ4
N2M4Li44MGQyMWRlZGViZWVhYTEzYmQwODM1NTVmNmNmY2M2YzExZjJiN2RjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgK
QEAgLTE3OCw3ICsxNzgsNyBAQCBwcml2YXRlOgogICAgIFJlbW90ZU1lZGlhUmVjb3JkZXJNYW5h
Z2VyJiBtZWRpYVJlY29yZGVyTWFuYWdlcigpOwogI2VuZGlmCiAKLSAgICB2b2lkIGNyZWF0ZVJl
bmRlcmluZ0JhY2tlbmQoUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYm
KTsKKyAgICB2b2lkIGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZENyZWF0aW9uUGFyYW1ldGVycyYmLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJik7CiAg
ICAgdm9pZCByZWxlYXNlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cik7CiAKICNpZiBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4
IGZlNDhjYTIwYmEwODk1YWI4YWY3NGU5NjI2NzRlZjFiM2RkZTg3ZmQuLmMxYmY4MDE5Y2VhYjQx
Zjc5YTZmNWFkZWUxZmE4NjE2ZTIwNWViMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmlu
CkBAIC0yMyw3ICsyMyw3IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiBtZXNzYWdlcyAt
PiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKLSAgICB2
b2lkIENyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoc3RydWN0IFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyBjcmVhdGlvblBhcmFtZXRlcnMpCisgICAgdm9pZCBD
cmVhdGVSZW5kZXJpbmdCYWNrZW5kKHN0cnVjdCBXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRDcmVhdGlvblBhcmFtZXRlcnMgY3JlYXRpb25QYXJhbWV0ZXJzLCBJUEM6OlN0cmVhbUNvbm5l
Y3Rpb25CdWZmZXIgc3RyZWFtQnVmZmVyKQogICAgIHZvaWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tl
bmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcikKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgdm9pZCBDcmVhdGVHcmFwaGljc0NvbnRl
eHRHTChzdHJ1Y3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXMsIFdlYktpdDo6R3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyIGdyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllciwgV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllciwgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyIHN0cmVhbSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9jb2NvYS9HUFVQcm9jZXNzQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvY29jb2EvR1BVUHJvY2Vzc0NvY29hLm1tCmlu
ZGV4IDJmOWNhMTg3ZjMwMmU3MjUzYzA2ZjkzZDQ2NmY4MTNkZTg3MDMzZTMuLmIwMmZkOTQ5MmU3
NWM5NzA4NTkzNGY2MDE4Y2Y4MWVkNWNiNTkyNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9jb2NvYS9HUFVQcm9jZXNzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2NvY29hL0dQVVByb2Nlc3NDb2NvYS5tbQpAQCAtNTEsMTAgKzUxLDcgQEAgUmV0
YWluUHRyPE5TRGljdGlvbmFyeT4gR1BVUHJvY2Vzczo6YWRkaXRpb25hbFN0YXRlRm9yRGlhZ25v
c3RpY1JlcG9ydCgpIGNvbnN0CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
ICAgIGF1dG8gc3RhdGVJbmZvID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2Nd
IGluaXRXaXRoQ2FwYWNpdHk6YmFja2VuZE1hcC5zaXplKCldKTsKLSAgICAgICAgICAgIGZvciAo
YXV0byYgaWRlbnRpZmllckFuZEJhY2tlbmQgOiBiYWNrZW5kTWFwKSB7Ci0gICAgICAgICAgICAg
ICAgYXV0byYgW2JhY2tlbmRJZGVudGlmaWVyLCBiYWNrZW5kXSA9IGlkZW50aWZpZXJBbmRCYWNr
ZW5kOwotICAgICAgICAgICAgICAgIFtzdGF0ZUluZm8gc2V0T2JqZWN0OkAobmFtZShiYWNrZW5k
LT5sYXN0S25vd25TdGF0ZSgpKSkgZm9yS2V5OmJhY2tlbmRJZGVudGlmaWVyLmxvZ2dpbmdTdHJp
bmcoKV07Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBGSVhNRTogTG9nIHNvbWUgYWRk
aXRpb25hbCBkaWFnbm9zdGljIHN0YXRlIG9uIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuCiAgICAg
ICAgICAgICBbd2ViUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvIHNldE9iamVjdDpzdGF0ZUluZm8uZ2V0
KCkgZm9yS2V5OndlYlByb2Nlc3NJZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKV07CiAgICAgICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGJiOGQ2NDRiNmEyYjdiNmUx
MDg2YTY1NjJiM2UxNTM5OGEzZDFhYjMuLjdmNjNmOTZjMTVkM2U0MmNmOTQ4YjhkZmJhOTFmNWIx
ZjQxZDFjMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTU1LDcgKzU1LDEw
IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c3RhcnRMaXN0ZW5pbmdGb3JJUEMo
KQogewogICAgIEFTU0VSVCghbV9pc0xpc3RlbmluZ0ZvcklQQyk7CiAgICAgbV9pc0xpc3Rlbmlu
Z0ZvcklQQyA9IHRydWU7Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZCB5ZXQuCisgICAg
Ly8gRklYTUU6IENhbiB3ZSBhdm9pZCBzeW5jaHJvbm91cyBkaXNwYXRjaCBoZXJlIGJ5IGFkanVz
dGluZyB0aGUgYXNzZXJ0aW9uIGluIGBDb25uZWN0aW9uOjplbnF1ZXVlTWF0Y2hpbmdNZXNzYWdl
c1RvTWVzc2FnZVJlY2VpdmVRdWV1ZWA/CisgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFsm
XSB7CisgICAgICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+c3RyZWFtQ29ubmVjdGlvbigpLnN0YXJ0
UmVjZWl2aW5nTWVzc2FnZXMoKnRoaXMsIE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLm9iamVj
dCgpLnRvVUludDY0KCkpOworICAgIH0pOwogfQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OnN0b3BMaXN0ZW5pbmdGb3JJUEMoKQpAQCAtNjMsNyArNjYsNyBAQCB2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnN0b3BMaXN0ZW5pbmdGb3JJUEMoKQogICAgIGlmICghbV9p
c0xpc3RlbmluZ0ZvcklQQykKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6IE5vdCBp
bXBsZW1lbnRlZCB5ZXQuCisgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zdHJlYW1Db25uZWN0aW9u
KCkuc3RvcFJlY2VpdmluZ01lc3NhZ2VzKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLm9iamVj
dCgpLnRvVUludDY0KCkpOwogICAgIG1faXNMaXN0ZW5pbmdGb3JJUEMgPSBmYWxzZTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdl
QnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXIuaAppbmRleCA1N2M4OWFjN2M1ZmM1Y2UyMDE2ZTFlYTQ5NThlYzc3NjEzODI5NTBmLi5h
M2Q0OTRmZThiZjZhMTk2NDdlZjE5MGM5ZGI0MDQyYWVjZTY3MjIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAt
MzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIkRlY29kZXIuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXIuaCIKKyNpbmNsdWRlICJTY29wZWRBY3RpdmVNZXNzYWdlUmVj
ZWl2ZVF1ZXVlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db25jcmV0ZUltYWdlQnVmZmVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxh
eUxpc3RJdGVtcy5oPgpAQCAtNTQsOCArNTYsOSBAQCBwdWJsaWM6CiAgICAgICAgIDogQmFzZUNv
bmNyZXRlSW1hZ2VCdWZmZXIocGFyYW1ldGVycywgV1RGTW92ZShiYWNrZW5kKSwgcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyLm9iamVjdCgpKQogICAgICAgICAsIG1fcmVtb3RlUmVuZGVyaW5n
QmFja2VuZChyZW1vdGVSZW5kZXJpbmdCYWNrZW5kKQogICAgICAgICAsIG1fcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAgICAgICAgLCBt
X3JlbW90ZURpc3BsYXlMaXN0KHsgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y3JlYXRlKCp0
aGlzLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllci5wcm9jZXNzSWRlbnRpZmllcigpLCByZW1vdGVSZW5kZXJpbmdCYWNrZW5kKSB9KQogICAg
IHsKLSAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmRpZENyZWF0ZUltYWdlQnVmZmVy
QmFja2VuZChtX2JhY2tlbmQtPmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpLCByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuZGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKG1fYmFja2VuZC0+Y3JlYXRlSW1hZ2VCdWZm
ZXJCYWNrZW5kSGFuZGxlKCksIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgKm1fcmVtb3Rl
RGlzcGxheUxpc3QuZ2V0KCkpOwogICAgIH0KIAogICAgIH5SZW1vdGVJbWFnZUJ1ZmZlcigpCkBA
IC03Nyw0MSArODAsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOwogCi0gICAgYm9vbCBhcHBseShXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbUhhbmRsZSBpdGVtLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0g
ICAgewotICAgICAgICBpZiAoaXRlbS5pczxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0UGl4ZWxC
dWZmZXI+KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGdldFBpeGVsQnVmZmVySXRlbSA9IGl0ZW0u
Z2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRQaXhlbEJ1ZmZlcj4oKTsKLSAgICAgICAgICAg
IGF1dG8gcGl4ZWxCdWZmZXIgPSBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Z2V0UGl4ZWxCdWZm
ZXIoZ2V0UGl4ZWxCdWZmZXJJdGVtLm91dHB1dEZvcm1hdCgpLCBnZXRQaXhlbEJ1ZmZlckl0ZW0u
c3JjUmVjdCgpKTsKLSAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5wb3B1bGF0
ZUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KFdURk1vdmUocGl4ZWxCdWZmZXIpKTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGl0ZW0uaXM8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyPigpKSB7Ci0gICAgICAgICAgICBhdXRv
JiBwdXRQaXhlbEJ1ZmZlckl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0
UGl4ZWxCdWZmZXI+KCk7Ci0gICAgICAgICAgICBwdXRQaXhlbEJ1ZmZlcihwdXRQaXhlbEJ1ZmZl
ckl0ZW0ucGl4ZWxCdWZmZXIoKSwgcHV0UGl4ZWxCdWZmZXJJdGVtLnNyY1JlY3QoKSwgcHV0UGl4
ZWxCdWZmZXJJdGVtLmRlc3RQb2ludCgpLCBwdXRQaXhlbEJ1ZmZlckl0ZW0uZGVzdEZvcm1hdCgp
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGl0
ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNoQ29udGV4dD4oKSkgewotICAgICAgICAg
ICAgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpOwotICAgICAgICAgICAg
YXV0byBpZGVudGlmaWVyID0gaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNoQ29u
dGV4dD4oKS5pZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2hhcmVk
RGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIkFja25vd2xlZGdpbmcgRmx1c2h7IiA8PCBpZGVudGlm
aWVyIDw8ICJ9IGluIEltYWdlKCIgPDwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPDwg
IikiKTsKLSAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5kaWRGbHVzaChpZGVu
dGlmaWVyLCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI+KCkpIHsKLSAgICAgICAgICAgIGF1
dG8gbmV4dEJ1ZmZlcklkZW50aWZpZXIgPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyPigpLmlkZW50aWZpZXIoKTsKLSAgICAgICAgICAg
IExPR19XSVRIX1NUUkVBTShTaGFyZWREaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiU3dpdGNoaW5n
IHRvIEl0ZW1zWyIgPDwgbmV4dEJ1ZmZlcklkZW50aWZpZXIgPDwgIl0iKTsKLSAgICAgICAgICAg
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5zZXROZXh0SXRlbUJ1ZmZlclRvUmVhZChuZXh0QnVm
ZmVySWRlbnRpZmllciwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmFwcGx5TWVkaWFJdGVtKGl0ZW0sIGNvbnRleHQpOwotICAgIH0KLQogICAg
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZDsKICAgICBR
dWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgbV9yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXI7CisgICAgSVBDOjpTY29wZWRBY3RpdmVNZXNzYWdlUmVjZWl2ZVF1ZXVlPFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI+IG1fcmVtb3RlRGlzcGxheUxpc3Q7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAppbmRleCBjMjg3N2UxZTkxYzlm
YWY1YWI1MDI1OWFhNGNhMTc0ZjI3MjFkOTgxLi43ZDkxZjM4MzM5NWE1MGVjZGM2ODE2MjFiMTI3
MWZiM2Q5OGVhM2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0yOCw3ICsyOCw2IEBA
CiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKLSNpbmNsdWRlICJEaXNwbGF5TGlzdFJlYWRl
ckhhbmRsZS5oIgogI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKICNpbmNs
dWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlci5oIgpA
QCAtNzMsNDcgKzcyLDQ3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCi1SZWY8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4gUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJiBjcmVh
dGlvblBhcmFtZXRlcnMpCitSZWY8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4gUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMm
JiBjcmVhdGlvblBhcmFtZXRlcnMsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmIHN0cmVh
bUJ1ZmZlcikKIHsKLSAgICBhdXRvIGluc3RhbmNlID0gYWRvcHRSZWYoKm5ldyBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFdURk1vdmUoY3JlYXRpb25Q
YXJhbWV0ZXJzKSkpOworICAgIGF1dG8gaW5zdGFuY2UgPSBhZG9wdFJlZigqbmV3IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgV1RGTW92ZShjcmVhdGlv
blBhcmFtZXRlcnMpLCBXVEZNb3ZlKHN0cmVhbUJ1ZmZlcikpKTsKICAgICBpbnN0YW5jZS0+c3Rh
cnRMaXN0ZW5pbmdGb3JJUEMoKTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKLVJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZENyZWF0aW9uUGFyYW1ldGVycyYmIGNyZWF0aW9uUGFyYW1ldGVycykKLSAgICA6IG1fd29ya1F1
ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHdvcmsgcXVldWUi
LCBXb3JrUXVldWU6OlR5cGU6OlNlcmlhbCwgV29ya1F1ZXVlOjpRT1M6OlVzZXJJbnRlcmFjdGl2
ZSkpCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJiBjcmVhdGlvblBhcmFtZXRlcnMsIElQ
Qzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmIHN0cmVhbUJ1ZmZlcikKKyAgICA6IG1fd29ya1F1
ZXVlKCJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHdvcmsgcXVldWUiKQorICAgICwgbV9zdHJlYW1D
b25uZWN0aW9uKElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbjo6Y3JlYXRlKGdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuY29ubmVjdGlvbigpLCBXVEZNb3ZlKHN0cmVhbUJ1ZmZlciksIG1fd29y
a1F1ZXVlKSkKICAgICAsIG1fcmVtb3RlUmVzb3VyY2VDYWNoZShncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLndlYlByb2Nlc3NJZGVudGlmaWVyKCkpCiAgICAgLCBtX2dwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykKICAgICAsIG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIoY3JlYXRpb25QYXJhbWV0ZXJzLmlkZW50aWZpZXIpCi0gICAgLCBtX3Jl
c3VtZURpc3BsYXlMaXN0U2VtYXBob3JlKFdURk1vdmUoY3JlYXRpb25QYXJhbWV0ZXJzLnJlc3Vt
ZURpc3BsYXlMaXN0U2VtYXBob3JlKSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6RGlkQ3Jl
YXRlV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxheUxpc3RTdHJlYW0obV93b3JrUXVldWUud2FrZVVw
U2VtYXBob3JlKCkpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzdGFydExpc3RlbmluZ0ZvcklQQygpCiB7Ci0gICAgbV9n
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCkuYWRkV29ya1F1ZXVlTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1fd29ya1F1ZXVlLCB0aGlzLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
LnRvVUludDY0KCkpOworICAgIG1fc3RyZWFtQ29ubmVjdGlvbi0+c3RhcnRSZWNlaXZpbmdNZXNz
YWdlcygqdGhpcywgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpKTsKIH0K
IAogUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQogewog
ICAgIC8vIE1ha2Ugc3VyZSB3ZSBkZXN0cm95IHRoZSBSZXNvdXJjZUNhY2hlIG9uIHRoZSBXb3Jr
UXVldWUgc2luY2UgaXQgZ2V0cyBwb3B1bGF0ZWQgb24gdGhlIFdvcmtRdWV1ZS4KICAgICAvLyBN
YWtlIHN1cmUgcmVuZGVyaW5nIHJlc291cmNlIHJlcXVlc3QgaXMgcmVsZWFzZWQgYWZ0ZXIgZGVz
dHJveWluZyB0aGUgY2FjaGUuCi0gICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFtyZW5kZXJpbmdS
ZXNvdXJjZXNSZXF1ZXN0ID0gV1RGTW92ZShtX3JlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QpLCBy
ZW1vdGVSZXNvdXJjZUNhY2hlID0gV1RGTW92ZShtX3JlbW90ZVJlc291cmNlQ2FjaGUpXSB7IH0p
OworICAgIG1fd29ya1F1ZXVlLmRpc3BhdGNoKFtyZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0ID0g
V1RGTW92ZShtX3JlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QpLCByZW1vdGVSZXNvdXJjZUNhY2hl
ID0gV1RGTW92ZShtX3JlbW90ZVJlc291cmNlQ2FjaGUpXSB7IH0pOwogfQogCiB2b2lkIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OnN0b3BMaXN0ZW5pbmdGb3JJUEMoKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICAvLyBUaGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBk
ZXN0cnVjdG9yIHdvbid0IGJlIGNhbGxlZCB1bnRpbCBkaXNjb25uZWN0KCkgaXMgY2FsbGVkIGFu
ZCB3ZSB1bnJlZ2lzdGVyIG91cnNlbHZlcyBhcyBhIFdvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlciBi
ZWNhdXNlCi0gICAgLy8gdGhlIElQQzo6Q29ubmVjdGlvbiByZWZzIGl0cyBXb3JrUXVldWVNZXNz
YWdlUmVjZWl2ZXJzLgotICAgIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlv
bigpLnJlbW92ZVdvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyLnRvVUludDY0KCkpOworICAgIG1fc3RyZWFtQ29ubmVjdGlvbi0+c3RvcFJlY2Vpdmlu
Z01lc3NhZ2VzKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7CisgICAg
Zm9yIChhdXRvJiByZW1vdGVDb250ZXh0IDogc3RkOjpleGNoYW5nZShtX3JlbW90ZURpc3BsYXlM
aXN0cywgeyB9KSkKKyAgICAgICAgcmVtb3RlQ29udGV4dC5zdG9wTGlzdGVuaW5nRm9ySVBDKCk7
CiB9CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlzcGF0Y2goRnVuY3Rpb248dm9p
ZCgpPiYmIHRhc2spCiB7Ci0gICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFdURk1vdmUodGFzaykp
OworICAgIG1fd29ya1F1ZXVlLmRpc3BhdGNoKFdURk1vdmUodGFzaykpOwogfQogCiBJUEM6OkNv
bm5lY3Rpb24qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9u
KCkgY29uc3QKQEAgLTEyNiwyNiArMTI1LDkgQEAgdWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAogICAgIHJldHVybiBtX3Jl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCk7CiB9CiAKLWJvb2wgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6YXBwbHlNZWRpYUl0ZW0oRGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUgaXRl
bSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwotCi0gICAgaWYgKCFpdGVtLmlzPERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVk
aWE+KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8mIG1lZGlhSXRlbSA9IGl0
ZW0uZ2V0PERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE+KCk7Ci0gICAgY2FsbE9uTWFp
blJ1bkxvb3BBbmRXYWl0KFsmLCBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLCBtZWRpYVBsYXllcklkZW50aWZpZXIgPSBtZWRpYUl0ZW0uaWRl
bnRpZmllcigpXSB7Ci0gICAgICAgIGF1dG8gcGxheWVyID0gZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy0+cmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5tZWRpYVBsYXllcihtZWRpYVBs
YXllcklkZW50aWZpZXIpOwotICAgICAgICBpZiAoIXBsYXllcikKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgLy8gSXQgaXMgY3VycmVudGx5IG5vdCBzYWZlIHRvIGNhbGwgcGFpbnRGcmFt
ZUZvck1lZGlhKCkgb2ZmIHRoZSBtYWluIHRocmVhZC4KLSAgICAgICAgY29udGV4dC5wYWludEZy
YW1lRm9yTWVkaWEoKnBsYXllciwgbWVkaWFJdGVtLmRlc3RpbmF0aW9uKCkpOwotICAgIH0pOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZENy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZChJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlLCBR
dWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVJbWFnZUJ1ZmZl
ckJhY2tlbmQoSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSwgUXVhbGlmaWVkUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlciYgcmVtb3RlRGlzcGxheUxpc3QpCiB7CisgICAgbV9yZW1vdGVE
aXNwbGF5TGlzdHMuYWRkKHJlbW90ZURpc3BsYXlMaXN0KTsKICAgICBNRVNTQUdFX0NIRUNLKHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5wcm9jZXNzSWRlbnRpZmllcigpID09IG1fZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2Vzcy0+d2ViUHJvY2Vzc0lkZW50aWZpZXIoKSwgIlNlbmRpbmcgZGlk
Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCkgbWVzc2FnZSB0byB0aGUgd3Jvbmcgd2ViIHByb2Nl
c3MuIik7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpE
aWRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoV1RGTW92ZShoYW5kbGUpLCByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIub2JqZWN0KCkpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsK
IH0KQEAgLTE5MCwyMTMgKzE3Miw2IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3Jl
YXRlSW1hZ2VCdWZmZXJXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihjb25zdCBGbG9hCiAKICAgICBt
X3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdl
QnVmZmVyUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB1cGRhdGVSZW5kZXJpbmdSZXNvdXJjZVJl
cXVlc3QoKTsKLQotICAgIGlmIChtX3BlbmRpbmdXYWtldXBJbmZvICYmIG1fcGVuZGluZ1dha2V1
cEluZm8tPnNob3VsZFBlcmZvcm1XYWtldXAoaW1hZ2VCdWZmZXJSZXNvdXJjZUlkZW50aWZpZXIp
KQotICAgICAgICByZXN1bWVGcm9tUGVuZGluZ1dha2V1cEluZm9ybWF0aW9uKCk7Ci19Ci0KLVJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OlJlcGxheWVyRGVsZWdhdGUo
V2ViQ29yZTo6SW1hZ2VCdWZmZXImIGRlc3RpbmF0aW9uLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
JiByZW1vdGVSZW5kZXJpbmdCYWNrZW5kLCBQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRl
bnRpZmllcikKLSAgICA6IG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi0gICAgLCBtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQocmVtb3RlUmVuZGVyaW5nQmFja2VuZCkKLSAgICAsIG1fd2ViUHJv
Y2Vzc0lkZW50aWZpZXIod2ViUHJvY2Vzc0lkZW50aWZpZXIpCi17Ci19Ci0KLWJvb2wgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6YXBwbHkoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1IYW5kbGUgaXRlbSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleHQpCi17Ci0gICAgYXV0byBhcHBseSA9IFsmXShhdXRvJiYgZGVzdGluYXRpb24pIHsK
LSAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uLmFwcGx5KGl0ZW0sIGdyYXBoaWNzQ29udGV4dCk7
Ci0gICAgfTsKLQotICAgIGlmIChtX2Rlc3RpbmF0aW9uLnJlbmRlcmluZ01vZGUoKSA9PSBSZW5k
ZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0dXJuIGFwcGx5KHN0YXRpY19jYXN0
PEFjY2VsZXJhdGVkUmVtb3RlSW1hZ2VCdWZmZXImPihtX2Rlc3RpbmF0aW9uKSk7Ci0gICAgcmV0
dXJuIGFwcGx5KHN0YXRpY19jYXN0PFVuYWNjZWxlcmF0ZWRSZW1vdGVJbWFnZUJ1ZmZlciY+KG1f
ZGVzdGluYXRpb24pKTsKLX0KLQotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXll
ckRlbGVnYXRlOjpkaWRDcmVhdGVNYXNrSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyKQotewotICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5kaWRDcmVhdGVN
YXNrSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpOwotfQotCi12b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OmRpZFJlc2V0TWFza0ltYWdlQnVmZmVyKCkKLXsKLSAg
ICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIoKTsKLX0K
LQotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjpyZWNvcmRS
ZXNvdXJjZVVzZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKQotewotICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5yZW1vdGVSZXNvdXJj
ZUNhY2hlKCkucmVjb3JkUmVzb3VyY2VVc2UoeyByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIs
IG1fd2ViUHJvY2Vzc0lkZW50aWZpZXIgfSk7Ci19Ci0KLURpc3BsYXlMaXN0OjpSZXBsYXlSZXN1
bHQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c3VibWl0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdCYgZGlzcGxheUxpc3QsIEltYWdlQnVmZmVyJiBkZXN0aW5hdGlvbikKLXsKLSAgICBp
ZiAoZGlzcGxheUxpc3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgUmVw
bGF5ZXJEZWxlZ2F0ZSByZXBsYXllckRlbGVnYXRlKGRlc3RpbmF0aW9uLCAqdGhpcywgbV9ncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLT53ZWJQcm9jZXNzSWRlbnRpZmllcigpKTsKLQotICAgIHJl
dHVybiBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXIgewotICAgICAgICBkZXN0aW5hdGlv
bi5jb250ZXh0KCksCi0gICAgICAgIGRpc3BsYXlMaXN0LAotICAgICAgICAmcmVtb3RlUmVzb3Vy
Y2VDYWNoZSgpLnJlc291cmNlSGVhcCgpLAotICAgICAgICBtX2N1cnJlbnRNYXNrSW1hZ2VCdWZm
ZXIuZ2V0KCksCi0gICAgICAgICZyZXBsYXllckRlbGVnYXRlCi0gICAgfS5yZXBsYXkoKTsKLX0K
LQotUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpuZXh0RGVzdGlu
YXRpb25JbWFnZUJ1ZmZlckFmdGVyQXBwbHlpbmdEaXNwbGF5TGlzdHMoSW1hZ2VCdWZmZXImIGlu
aXRpYWxEZXN0aW5hdGlvbiwgc2l6ZV90IGluaXRpYWxPZmZzZXQsIERpc3BsYXlMaXN0UmVhZGVy
SGFuZGxlJiBoYW5kbGUsIEdQVVByb2Nlc3NXYWtldXBSZWFzb24gcmVhc29uLCBQcm9jZXNzSWRl
bnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcikKLXsKLSAgICBSZWZQdHIgZGVzdGluYXRpb24g
eyAmaW5pdGlhbERlc3RpbmF0aW9uIH07Ci0gICAgUmVmIGhhbmRsZVByb3RlY3RvciB7IGhhbmRs
ZSB9OwotCi0gICAgYXV0byBvZmZzZXQgPSBpbml0aWFsT2Zmc2V0OwotICAgIHNpemVfdCBzaXpl
VG9SZWFkID0gMDsKLSAgICBkbyB7Ci0gICAgICAgIHNpemVUb1JlYWQgPSBoYW5kbGUudW5yZWFk
Qnl0ZXMoKTsKLSAgICB9IHdoaWxlICghc2l6ZVRvUmVhZCk7Ci0KLSAgICB3aGlsZSAoZGVzdGlu
YXRpb24pIHsKLSAgICAgICAgYXV0byBkaXNwbGF5TGlzdCA9IGhhbmRsZS5kaXNwbGF5TGlzdEZv
clJlYWRpbmcob2Zmc2V0LCBzaXplVG9SZWFkLCAqdGhpcyk7Ci0gICAgICAgIE1FU1NBR0VfQ0hF
Q0tfV0lUSF9SRVRVUk5fVkFMVUUoZGlzcGxheUxpc3QsIG51bGxwdHIsICJGYWlsZWQgdG8gbWFw
IGRpc3BsYXkgbGlzdCBmcm9tIHNoYXJlZCBtZW1vcnkiKTsKLQotI2lmICFMT0dfRElTQUJMRUQK
LSAgICAgICAgYXV0byBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSNlbmRpZgot
ICAgICAgICBhdXRvIHJlc3VsdCA9IHN1Ym1pdCgqZGlzcGxheUxpc3QsICpkZXN0aW5hdGlvbik7
Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShTaGFyZWREaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAi
UmVhZCBbIiA8PCBvZmZzZXQgPDwgIiwgIiA8PCBvZmZzZXQgKyByZXN1bHQubnVtYmVyT2ZCeXRl
c1JlYWQgPDwgIl07IEl0ZW1zWyIgPDwgaGFuZGxlLmlkZW50aWZpZXIoKSA8PCAiXSA9PiBJbWFn
ZSgiIDw8IGRlc3RpbmF0aW9uLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSA8PCAiKSBp
biAiIDw8IE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnRUaW1lKTsKLSAgICAgICAgTUVTU0FH
RV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRShyZXN1bHQucmVhc29uRm9yU3RvcHBpbmcgIT0gRGlz
cGxheUxpc3Q6OlN0b3BSZXBsYXlSZWFzb246OkludmFsaWRJdGVtT3JFeHRlbnQsIG51bGxwdHIs
ICJEZXRlY3RlZCBpbnZhbGlkIGRpc3BsYXkgbGlzdCBpdGVtIG9yIGV4dGVudCIpOwotICAgICAg
ICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKHJlc3VsdC5yZWFzb25Gb3JTdG9wcGlu
ZyAhPSBEaXNwbGF5TGlzdDo6U3RvcFJlcGxheVJlYXNvbjo6T3V0T2ZNZW1vcnksIG51bGxwdHIs
ICJDb3VuZCBub3QgYWxsb2NhdGUgbWVtb3J5Iik7Ci0KLSAgICAgICAgYXV0byBhZHZhbmNlUmVz
dWx0ID0gaGFuZGxlLmFkdmFuY2UocmVzdWx0Lm51bWJlck9mQnl0ZXNSZWFkKTsKLSAgICAgICAg
TUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRShhZHZhbmNlUmVzdWx0LCBudWxscHRyLCAi
RmFpbGVkIHRvIGFkdmFuY2UgZGlzcGxheSBsaXN0IHJlYWRlciBoYW5kbGUiKTsKLSAgICAgICAg
c2l6ZVRvUmVhZCA9ICphZHZhbmNlUmVzdWx0OwotCi0gICAgICAgIENoZWNrZWRTaXplIGNoZWNr
ZWRPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgIGNoZWNrZWRPZmZzZXQgKz0gcmVzdWx0Lm51bWJl
ck9mQnl0ZXNSZWFkOwotICAgICAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKCFj
aGVja2VkT2Zmc2V0Lmhhc092ZXJmbG93ZWQoKSwgbnVsbHB0ciwgIk92ZXJmbG93ZWQgd2hlbiBh
ZHZhbmNpbmcgc2hhcmVkIGRpc3BsYXkgbGlzdCBoYW5kbGUgb2Zmc2V0Iik7Ci0KLSAgICAgICAg
b2Zmc2V0ID0gY2hlY2tlZE9mZnNldDsKLSAgICAgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVS
Tl9WQUxVRShvZmZzZXQgPD0gaGFuZGxlLnNoYXJlZE1lbW9yeSgpLnNpemUoKSwgbnVsbHB0ciwg
Ik91dC1vZi1ib3VuZHMgb2Zmc2V0IGludG8gc2hhcmVkIGRpc3BsYXkgbGlzdCBoYW5kbGUiKTsK
LQotICAgICAgICBpZiAocmVzdWx0LnJlYXNvbkZvclN0b3BwaW5nID09IERpc3BsYXlMaXN0OjpT
dG9wUmVwbGF5UmVhc29uOjpDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyKSB7Ci0gICAgICAg
ICAgICBkZXN0aW5hdGlvbiA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZl
cih7ICpyZXN1bHQubmV4dERlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsIG1fZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2Vzcy0+d2ViUHJvY2Vzc0lkZW50aWZpZXIoKSB9KTsKLSAgICAgICAgICAgIGlmICgh
ZGVzdGluYXRpb24pIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIW1fcGVuZGluZ1dha2V1cElu
Zm8pOwotICAgICAgICAgICAgICAgIG1fcGVuZGluZ1dha2V1cEluZm8gPSB7ewotICAgICAgICAg
ICAgICAgICAgICBoYW5kbGUuaWRlbnRpZmllcigpLAotICAgICAgICAgICAgICAgICAgICBvZmZz
ZXQsCi0gICAgICAgICAgICAgICAgICAgIHsgKnJlc3VsdC5uZXh0RGVzdGluYXRpb25JbWFnZUJ1
ZmZlciwgd2ViUHJvY2Vzc0lkZW50aWZpZXIgfSwKLSAgICAgICAgICAgICAgICAgICAgcmVhc29u
LAotICAgICAgICAgICAgICAgICAgICBzdGQ6Om51bGxvcHQsCi0gICAgICAgICAgICAgICAgICAg
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZTo6V2FpdGluZ0ZvckRlc3RpbmF0aW9uSW1hZ2VC
dWZmZXIKLSAgICAgICAgICAgICAgICB9fTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChyZXN1bHQucmVhc29uRm9yU3RvcHBpbmcgPT0gRGlzcGxheUxpc3Q6OlN0b3BS
ZXBsYXlSZWFzb246Ok1pc3NpbmdDYWNoZWRSZXNvdXJjZSkgewotICAgICAgICAgICAgbV9wZW5k
aW5nV2FrZXVwSW5mbyA9IHt7Ci0gICAgICAgICAgICAgICAgaGFuZGxlLmlkZW50aWZpZXIoKSwK
LSAgICAgICAgICAgICAgICBvZmZzZXQsCi0gICAgICAgICAgICAgICAgeyBkZXN0aW5hdGlvbi0+
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIHdlYlByb2Nlc3NJZGVudGlmaWVyIH0sCi0g
ICAgICAgICAgICAgICAgcmVhc29uLAotICAgICAgICAgICAgICAgIHsgeyAqcmVzdWx0Lm1pc3Np
bmdDYWNoZWRSZXNvdXJjZUlkZW50aWZpZXIsIHdlYlByb2Nlc3NJZGVudGlmaWVyIH0gfSwKLSAg
ICAgICAgICAgICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGU6OldhaXRpbmdGb3JDYWNo
ZWRSZXNvdXJjZQotICAgICAgICAgICAgfX07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9w
ZW5kaW5nV2FrZXVwSW5mbykKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmICghc2l6
ZVRvUmVhZCkgewotICAgICAgICAgICAgaWYgKHJlYXNvbiAhPSBHUFVQcm9jZXNzV2FrZXVwUmVh
c29uOjpJdGVtQ291bnRIeXN0ZXJlc2lzRXhjZWVkZWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgIGhhbmRsZS5zdGFydFdhaXRpbmcoKTsKLSAgICAgICAgICAgIG1fcmVz
dW1lRGlzcGxheUxpc3RTZW1hcGhvcmUud2FpdEZvcigzMF91cyk7Ci0KLSAgICAgICAgICAgIGF1
dG8gc3RvcFdhaXRpbmdSZXN1bHQgPSBoYW5kbGUuc3RvcFdhaXRpbmcoKTsKLSAgICAgICAgICAg
IE1FU1NBR0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUoc3RvcFdhaXRpbmdSZXN1bHQsIG51bGxw
dHIsICJJbnZhbGlkIHdhaXRpbmcgc3RhdHVzIGRldGVjdGVkIHdoZW4gcmVzdW1pbmcgZGlzcGxh
eSBsaXN0IHByb2Nlc3NpbmciKTsKLQotICAgICAgICAgICAgYXV0byByZXN1bWVSZWFkaW5nSW5m
byA9IHN0b3BXYWl0aW5nUmVzdWx0LnZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VtZVJl
YWRpbmdJbmZvKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBzaXplVG9S
ZWFkID0gaGFuZGxlLnVucmVhZEJ5dGVzKCk7Ci0gICAgICAgICAgICBNRVNTQUdFX0NIRUNLX1dJ
VEhfUkVUVVJOX1ZBTFVFKHNpemVUb1JlYWQsIG51bGxwdHIsICJObyB1bnJlYWQgYnl0ZXMgd2hl
biByZXN1bWluZyBkaXNwbGF5IGxpc3QgcHJvY2Vzc2luZyIpOwotCi0gICAgICAgICAgICBhdXRv
IG5ld0Rlc3RpbmF0aW9uSWRlbnRpZmllciA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllclR5cGU+KHJlc3VtZVJlYWRpbmdJbmZvLT5kZXN0aW5hdGlvbik7
Ci0gICAgICAgICAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKG5ld0Rlc3RpbmF0
aW9uSWRlbnRpZmllci5pc1ZhbGlkKCksIG51bGxwdHIsICJJbnZhbGlkIGltYWdlIGJ1ZmZlciBk
ZXN0aW5hdGlvbiB3aGVuIHJlc3VtaW5nIGRpc3BsYXkgbGlzdCBwcm9jZXNzaW5nIik7Ci0KLSAg
ICAgICAgICAgIGRlc3RpbmF0aW9uID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdl
QnVmZmVyKHsgbmV3RGVzdGluYXRpb25JZGVudGlmaWVyLCBtX2dwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MtPndlYlByb2Nlc3NJZGVudGlmaWVyKCkgfSk7Ci0gICAgICAgICAgICBNRVNTQUdFX0NI
RUNLX1dJVEhfUkVUVVJOX1ZBTFVFKGRlc3RpbmF0aW9uLCBudWxscHRyLCAiTWlzc2luZyBpbWFn
ZSBidWZmZXIgZGVzdGluYXRpb24gd2hlbiByZXN1bWluZyBkaXNwbGF5IGxpc3QgcHJvY2Vzc2lu
ZyIpOwotCi0gICAgICAgICAgICBvZmZzZXQgPSByZXN1bWVSZWFkaW5nSW5mby0+b2Zmc2V0Owot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlc3RpbmF0aW9uOwotfQotCi12b2lkIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6Ondha2VVcEFuZEFwcGx5RGlzcGxheUxpc3QoY29uc3QgR1BV
UHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMmIGFyZ3VtZW50cykKLXsKLSAgICAvLyBJbW1l
ZGlhdGVseSB0dXJuIHRoZSBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgKHdoaWNoIGlzIGVy
cm9yLXByb25lKSB0byBhIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwKLSAg
ICAvLyBhbmQgdXNlIGEgaGVscGVyIGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSB0aGF0IGRvbid0IGFj
Y2lkZW50YWxseSB1c2UgdGhlIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciAoYmVjYXVzZSB0
aGUgaGVscGVyIGZ1bmN0aW9uIGNhbid0IHNlZSBpdCkuCi0gICAgd2FrZVVwQW5kQXBwbHlEaXNw
bGF5TGlzdFdpdGhRdWFsaWZpZWRJZGVudGlmaWVyKGFyZ3VtZW50cy5pdGVtQnVmZmVySWRlbnRp
ZmllciwgYXJndW1lbnRzLm9mZnNldCwgeyBhcmd1bWVudHMuZGVzdGluYXRpb25JbWFnZUJ1ZmZl
cklkZW50aWZpZXIsIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+d2ViUHJvY2Vzc0lkZW50
aWZpZXIoKSB9LCBhcmd1bWVudHMucmVhc29uKTsKLX0KLQotdm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjp3YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0V2l0aFF1YWxpZmllZElkZW50aWZpZXIo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGl0ZW1CdWZmZXJJZGVu
dGlmaWVyLCB1aW50NjRfdCBvZmZzZXQsIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciBkZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllciwgR1BVUHJvY2Vzc1dha2V1cFJl
YXNvbiByZWFzb24pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBU
cmFjZVNjb3BlIHRyYWNpbmdTY29wZShXYWtlVXBBbmRBcHBseURpc3BsYXlMaXN0U3RhcnQsIFdh
a2VVcEFuZEFwcGx5RGlzcGxheUxpc3RFbmQpOwotCi0gICAgdXBkYXRlTGFzdEtub3duU3RhdGUo
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpCZWdhblJlcGxheWluZ0Rpc3BsYXlMaXN0KTsK
LQotICAgIFJlZlB0ciBkZXN0aW5hdGlvbkltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNh
Y2hlLmNhY2hlZEltYWdlQnVmZmVyKGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsK
LSAgICBNRVNTQUdFX0NIRUNLKGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJNaXNzaW5nIGRlc3Rp
bmF0aW9uIGltYWdlIGJ1ZmZlciIpOwotCi0gICAgYXV0byBpbml0aWFsSGFuZGxlID0gbV9zaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZXMuZ2V0KGl0ZW1CdWZmZXJJZGVudGlmaWVyKTsKLSAgICBNRVNT
QUdFX0NIRUNLKGluaXRpYWxIYW5kbGUsICJNaXNzaW5nIGluaXRpYWwgc2hhcmVkIGRpc3BsYXkg
bGlzdCBoYW5kbGUiKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShTaGFyZWREaXNwbGF5TGlzdHMs
IHN0cmVhbSA8PCAiV2FraW5nIHVwIHRvIEl0ZW1zWyIgPDwgaXRlbUJ1ZmZlcklkZW50aWZpZXIg
PDwgIl0gPT4gSW1hZ2UoIiA8PCBkZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllci5vYmpl
Y3QoKSA8PCAiKSBhdCAiIDw8IG9mZnNldCk7Ci0gICAgZGVzdGluYXRpb25JbWFnZUJ1ZmZlciA9
IG5leHREZXN0aW5hdGlvbkltYWdlQnVmZmVyQWZ0ZXJBcHBseWluZ0Rpc3BsYXlMaXN0cygqZGVz
dGluYXRpb25JbWFnZUJ1ZmZlciwgb2Zmc2V0LCAqaW5pdGlhbEhhbmRsZSwgcmVhc29uLCBtX2dw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPndlYlByb2Nlc3NJZGVudGlmaWVyKCkpOwotCi0gICAg
Ly8gRklYTUU6IEFsbCB0aGUgY2FsbGVycyBwYXNzIG1fcGVuZGluZ1dha2V1cEluZm8ncyBmaWVs
ZHMgc28gdGhlIGJvZHkgb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQganVzdCBiZSB0aGlzIGxvb3Au
Ci0gICAgd2hpbGUgKGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIgJiYgbV9wZW5kaW5nV2FrZXVwSW5m
bykgewotICAgICAgICBpZiAobV9wZW5kaW5nV2FrZXVwSW5mby0+bWlzc2luZ0NhY2hlZFJlc291
cmNlSWRlbnRpZmllcikKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGF1dG8gbmV4dEhh
bmRsZSA9IG1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzLmdldChtX3BlbmRpbmdXYWtldXBJbmZv
LT5pdGVtQnVmZmVySWRlbnRpZmllcik7Ci0gICAgICAgIGlmICghbmV4dEhhbmRsZSkgewotICAg
ICAgICAgICAgLy8gSWYgdGhlIGhhbmRsZSBpZGVudGlmaWVyIGlzIGN1cnJlbnRseSB1bmtub3du
LCB3YWl0IHVudGlsIHRoZSBHUFUgcHJvY2VzcyByZWNlaXZlcyBhbgotICAgICAgICAgICAgLy8g
SVBDIG1lc3NhZ2Ugd2l0aCBhIHNoYXJlZCBtZW1vcnkgaGFuZGxlIHRvIHRoZSBuZXh0IGl0ZW0g
YnVmZmVyLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBPdGhl
cndpc2UsIGNvbnRpbnVlIHJlYWRpbmcgdGhlIG5leHQgZGlzcGxheSBsaXN0IGl0ZW0gYnVmZmVy
IGZyb20gdGhlIHN0YXJ0LgotICAgICAgICBhdXRvIG9mZnNldCA9IG1fcGVuZGluZ1dha2V1cElu
Zm8tPm9mZnNldDsKLSAgICAgICAgYXV0byByZWFzb24gPSBtX3BlbmRpbmdXYWtldXBJbmZvLT5y
ZWFzb247Ci0gICAgICAgIG1fcGVuZGluZ1dha2V1cEluZm8gPSBzdGQ6Om51bGxvcHQ7Ci0gICAg
ICAgIGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIgPSBuZXh0RGVzdGluYXRpb25JbWFnZUJ1ZmZlckFm
dGVyQXBwbHlpbmdEaXNwbGF5TGlzdHMoKmRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsIG9mZnNldCwg
Km5leHRIYW5kbGUsIHJlYXNvbiwgbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT53ZWJQcm9j
ZXNzSWRlbnRpZmllcigpKTsKLSAgICB9Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFNoYXJlZERpc3Bs
YXlMaXN0cywgc3RyZWFtIDw8ICJHb2luZyBiYWNrIHRvIHNsZWVwLiIpOwotCi0gICAgaWYgKG1f
cGVuZGluZ1dha2V1cEluZm8pCi0gICAgICAgIHVwZGF0ZUxhc3RLbm93blN0YXRlKG1fcGVuZGlu
Z1dha2V1cEluZm8tPnN0YXRlKTsKLSAgICBlbHNlCi0gICAgICAgIHVwZGF0ZUxhc3RLbm93blN0
YXRlKFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRTdGF0ZTo6RmluaXNoZWRSZXBsYXlpbmdEaXNwbGF5
TGlzdCk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c2V0TmV4dEl0ZW1CdWZm
ZXJUb1JlYWQoRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFF1
YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbklkZW50aWZpZXIp
Ci17Ci0gICAgbV9wZW5kaW5nV2FrZXVwSW5mbyA9IHt7Ci0gICAgICAgIGlkZW50aWZpZXIsCi0g
ICAgICAgIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpoZWFkZXJTaXplKCksCi0gICAgICAgIGRl
c3RpbmF0aW9uSWRlbnRpZmllciwKLSAgICAgICAgR1BVUHJvY2Vzc1dha2V1cFJlYXNvbjo6VW5z
cGVjaWZpZWQsCi0gICAgICAgIHN0ZDo6bnVsbG9wdCwKLSAgICAgICAgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFN0YXRlOjpXYWl0aW5nRm9ySXRlbUJ1ZmZlcgotICAgIH19OwogfQogCiBzdGQ6Om9w
dGlvbmFsPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1
cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlckhlbHBlcihzaXplX3QgYnl0ZUNvdW50
KQpAQCAtNTQ3LDkgKzMyMiw2IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y2FjaGVO
YXRpdmVJbWFnZVdpdGhRdWFsaWZpZWRJZGVudGlmaWVyKGNvbnN0IFNoYXJlCiAgICAgICAgIHJl
dHVybjsKIAogICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZU5hdGl2ZUltYWdlKCppbWFn
ZSwgbmF0aXZlSW1hZ2VSZXNvdXJjZUlkZW50aWZpZXIpOwotCi0gICAgaWYgKG1fcGVuZGluZ1dh
a2V1cEluZm8gJiYgbV9wZW5kaW5nV2FrZXVwSW5mby0+c2hvdWxkUGVyZm9ybVdha2V1cChuYXRp
dmVJbWFnZVJlc291cmNlSWRlbnRpZmllcikpCi0gICAgICAgIHJlc3VtZUZyb21QZW5kaW5nV2Fr
ZXVwSW5mb3JtYXRpb24oKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjYWNo
ZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYgZm9udCkKQEAgLTU2NSw4ICszMzcsNiBAQCB2b2lk
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNhY2hlRm9udFdpdGhRdWFsaWZpZWRJZGVudGlmaWVy
KFJlZjxGb250PiYmIGZvbnQsCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAg
ICBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVGb250KFdURk1vdmUoZm9udCksIGZvbnRSZXNv
dXJjZUlkZW50aWZpZXIpOwotICAgIGlmIChtX3BlbmRpbmdXYWtldXBJbmZvICYmIG1fcGVuZGlu
Z1dha2V1cEluZm8tPnNob3VsZFBlcmZvcm1XYWtldXAoZm9udFJlc291cmNlSWRlbnRpZmllcikp
Ci0gICAgICAgIHJlc3VtZUZyb21QZW5kaW5nV2FrZXVwSW5mb3JtYXRpb24oKTsKIH0KIAogdm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkZWxldGVBbGxGb250cygpCkBAIC01OTIsMTY5ICsz
NjIsOSBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VSZW1vdGVSZXNvdXJj
ZVdpdGhRdWFsaWZpZWRJZGVudGlmaWVyKFF1YWxpZgogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKFJlbmRlcmluZ1VwZGF0ZUlEIHJlbmRlcmlu
Z1VwZGF0ZUlEKQogewotICAgIGF1dG8gc2hvdWxkUGVyZm9ybVdha2V1cCA9IFsmXSB7Ci0gICAg
ICAgIHJldHVybiBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIobV9wZW5k
aW5nV2FrZXVwSW5mby0+ZGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIpICYmIG1fc2hh
cmVkRGlzcGxheUxpc3RIYW5kbGVzLmNvbnRhaW5zKG1fcGVuZGluZ1dha2V1cEluZm8tPml0ZW1C
dWZmZXJJZGVudGlmaWVyKTsKLSAgICB9OwotCi0gICAgaWYgKG1fcGVuZGluZ1dha2V1cEluZm8g
JiYgc2hvdWxkUGVyZm9ybVdha2V1cCgpKQotICAgICAgICByZXN1bWVGcm9tUGVuZGluZ1dha2V1
cEluZm9ybWF0aW9uKCk7Ci0KICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OkRpZEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKHJlbmRlcmluZ1VwZGF0ZUlEKSwg
bV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6ZGlkQ3JlYXRlU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoRGlzcGxheUxpc3Q6Okl0
ZW1CdWZmZXJJZGVudGlmaWVyIGl0ZW1CdWZmZXJJZGVudGlmaWVyLCBjb25zdCBTaGFyZWRNZW1v
cnk6OklQQ0hhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGlu
YXRpb25CdWZmZXJJZGVudGlmaWVyKQotewotICAgIC8vIEltbWVkaWF0ZWx5IHR1cm4gdGhlIFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciAod2hpY2ggaXMgZXJyb3ItcHJvbmUpIHRvIGEgUXVh
bGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLAotICAgIC8vIGFuZCB1c2UgYSBoZWxw
ZXIgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHRoYXQgZG9uJ3QgYWNjaWRlbnRhbGx5IHVzZSB0aGUg
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIChiZWNhdXNlIHRoZSBoZWxwZXIgZnVuY3Rpb24g
Y2FuJ3Qgc2VlIGl0KS4KLSAgICBkaWRDcmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZVdpdGhR
dWFsaWZpZWRJZGVudGlmaWVyKGl0ZW1CdWZmZXJJZGVudGlmaWVyLCBoYW5kbGUsIHsgZGVzdGlu
YXRpb25CdWZmZXJJZGVudGlmaWVyLCBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPndlYlBy
b2Nlc3NJZGVudGlmaWVyKCkgfSk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
ZGlkQ3JlYXRlU2hhcmVkRGlzcGxheUxpc3RIYW5kbGVXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaXRlbUJ1ZmZlcklkZW50aWZpZXIsIGNv
bnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiBoYW5kbGUsIFF1YWxpZmllZFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAg
ICBNRVNTQUdFX0NIRUNLKCFtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlcy5jb250YWlucyhpdGVt
QnVmZmVySWRlbnRpZmllciksICJEdXBsaWNhdGUgc2hhcmVkIGRpc3BsYXkgbGlzdCBoYW5kbGUi
KTsKLQotICAgIGlmIChhdXRvIHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6bWFwKGhhbmRs
ZS5oYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZFdyaXRlKSkgewotICAgICAg
ICBhdXRvIGhhbmRsZSA9IERpc3BsYXlMaXN0UmVhZGVySGFuZGxlOjpjcmVhdGUoaXRlbUJ1ZmZl
cklkZW50aWZpZXIsIHNoYXJlZE1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgTUVT
U0FHRV9DSEVDSyhoYW5kbGUsICJUaGVyZSBtdXN0IGJlIGVub3VnaCBzcGFjZSB0byBjcmVhdGUg
dGhlIGhhbmRsZS4iKTsKLSAgICAgICAgbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXMuc2V0KGl0
ZW1CdWZmZXJJZGVudGlmaWVyLCBoYW5kbGUpOwotICAgIH0KLQotICAgIGlmIChtX3BlbmRpbmdX
YWtldXBJbmZvICYmIG1fcGVuZGluZ1dha2V1cEluZm8tPnNob3VsZFBlcmZvcm1XYWtldXAoaXRl
bUJ1ZmZlcklkZW50aWZpZXIpKQotICAgICAgICByZXN1bWVGcm9tUGVuZGluZ1dha2V1cEluZm9y
bWF0aW9uKCk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVzdW1lRnJvbVBl
bmRpbmdXYWtldXBJbmZvcm1hdGlvbigpCi17Ci0gICAgYXV0byBpdGVtQnVmZmVySWRlbnRpZmll
ciA9IG1fcGVuZGluZ1dha2V1cEluZm8tPml0ZW1CdWZmZXJJZGVudGlmaWVyOwotICAgIGF1dG8g
b2Zmc2V0ID0gbV9wZW5kaW5nV2FrZXVwSW5mby0+b2Zmc2V0OwotICAgIGF1dG8gZGVzdGluYXRp
b25JbWFnZUJ1ZmZlcklkZW50aWZpZXIgPSBtX3BlbmRpbmdXYWtldXBJbmZvLT5kZXN0aW5hdGlv
bkltYWdlQnVmZmVySWRlbnRpZmllcjsKLSAgICBhdXRvIHJlYXNvbiA9IG1fcGVuZGluZ1dha2V1
cEluZm8tPnJlYXNvbjsKLSAgICBtX3BlbmRpbmdXYWtldXBJbmZvID0gc3RkOjpudWxsb3B0Owot
ICAgIHdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3RXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihpdGVt
QnVmZmVySWRlbnRpZmllciwgb2Zmc2V0LCBkZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmll
ciwgcmVhc29uKTsKLX0KLQotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVN
YXNrSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotICAgIE1FU1NBR0VfQ0hFQ0soIW1fY3VycmVudE1hc2tJbWFn
ZUJ1ZmZlciwgIkN1cnJlbnQgbWFzayBpbWFnZSBidWZmZXIgaXMgYWxyZWFkeSBzZXQuIik7Ci0g
ICAgbV9jdXJyZW50TWFza0ltYWdlQnVmZmVyID0gJmltYWdlQnVmZmVyOwotfQotCi12b2lkIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZFJlc2V0TWFza0ltYWdlQnVmZmVyKCkKLXsKLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBNRVNTQUdFX0NIRUNLKG1fY3VycmVudE1h
c2tJbWFnZUJ1ZmZlciwgIkN1cnJlbnQgbWFzayBpbWFnZSBidWZmZXIgd2FzIG5vdCBhbHJlYWR5
IHNldC4iKTsKLSAgICBtX2N1cnJlbnRNYXNrSW1hZ2VCdWZmZXIgPSBudWxscHRyOwotfQotCi1z
dGQ6Om9wdGlvbmFsPERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGVjb2RlSXRlbShjb25zdCB1aW50OF90KiBkYXRhLCBz
aXplX3QgbGVuZ3RoLCBEaXNwbGF5TGlzdDo6SXRlbVR5cGUgdHlwZSwgdWludDhfdCogaGFuZGxl
TG9jYXRpb24pCi17Ci0gICAgLyogVGhpcyBuZWVkcyB0byBtYXRjaCAoMSkgaXNJbmxpbmVJdGVt
KCkgaW4gRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAsICgyKSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5
OjplbmNvZGVJdGVtKCksCi0gICAgICogYW5kICgzKSBhbGwgdGhlICJzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtInMgaW5zaWRlIHRoZSBpbmRpdmlkdWFsIGl0ZW0gY2xhc3Nlcy4K
LSAgICAgKiBTZWUgdGhlIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiBEaXNwbGF5TGlzdEl0ZW1zLmgg
Zm9yIHdoeS4gKi8KLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpCZWdpbkNsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICAgICAgcmV0dXJuIGRl
Y29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6QmVnaW5DbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGRh
dGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3Bs
YXlMaXN0OjpDbGlwT3V0VG9QYXRoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAg
ICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgICAgIHJldHVybiBk
ZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkNsaXBQYXRoPihkYXRhLCBsZW5ndGgsIGhhbmRs
ZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmlu
Z1BhdGg6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkRyYXdG
b2N1c1JpbmdQYXRoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAgICByZXR1cm4g
ZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM+KGRhdGEsIGxl
bmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpE
cmF3R2x5cGhzOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpE
cmF3R2x5cGhzPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKLSAgICAgICAgcmV0dXJuIGRlY29k
ZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dD4oZGF0YSwgbGVuZ3RoLCBo
YW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdQYXRo
OgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpEcmF3UGF0aD4o
ZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0
ZTxEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxv
Y2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFBhdGg6Ci0gICAg
ICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkZpbGxQYXRoPihkYXRhLCBs
ZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RmlsbFJlY3RXaXRoQ29sb3I6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxh
eUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsK
LSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0g
ICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdy
YWRpZW50PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAgIHJldHVybiBk
ZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihkYXRh
LCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6RmlsbFJvdW5kZWRSZWN0OgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3Bs
YXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwot
ICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjoKLSAgICAgICAg
cmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6R2V0UGl4ZWxCdWZmZXI+KGRhdGEs
IGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpQdXRQaXhlbEJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5
TGlzdDo6UHV0UGl4ZWxCdWZmZXI+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAg
IGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgcmV0dXJu
IGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g+KGRhdGEsIGxlbmd0aCwg
aGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdGF0
ZToKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6U2V0U3RhdGU+
KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpTdHJva2VQYXRoOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3Bs
YXlMaXN0OjpTdHJva2VQYXRoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBj
YXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSNpZiBV
U0UoQ0cpCi0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46
Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSNl
bmRpZgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxh
eWVyOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVhclJlY3Q6Ci0gICAgY2Fz
ZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgIGNhc2UgRGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpDbGlwOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlw
T3V0OgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjoK
LSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRz
OgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICBj
YXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKLSAg
ICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgY2FzZSBEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKLSAgICBjYXNlIERpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpEcmF3UGF0dGVybjoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xp
bmU6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdSZWN0OgotICAgIGNhc2Ug
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKLSAgICBjYXNlIERp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbEVsbGlwc2U6Ci0jaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCi0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxMaW5lOgotICAgIGNh
c2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsQXJjOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpGaWxsUXVhZEN1cnZlOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpGaWxsQmV6aWVyQ3VydmU6Ci0jZW5kaWYKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6RmlsbFJlY3Q6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZsdXNoQ29udGV4
dDoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0
aW5hdGlvbkltYWdlQnVmZmVyOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpNZXRh
Q29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIGNhc2UgRGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6Ci0jZW5kaWYKLSAgICBjYXNl
IERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UmVzdG9yZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6Um90YXRlOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTYXZlOgot
ICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTY2FsZToKLSAgICBjYXNlIERpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6U2V0Q1RNOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpT
ZXRJbmxpbmVGaWxsQ29sb3I6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElu
bGluZVN0cm9rZUNvbG9yOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5l
Q2FwOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICBj
YXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICBjYXNlIERpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAgIGNhc2UgRGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VBcmM6Ci0gICAgY2FzZSBE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVF1YWRDdXJ2ZToKLSAgICBjYXNlIERpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6U3Ryb2tlQmV6aWVyQ3VydmU6Ci0jZW5kaWYKLSAgICBjYXNlIERpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6U3Ryb2tlTGluZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VHJhbnNs
YXRlOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLX0KLQogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVSZW5k
ZXJpbmdSZXNvdXJjZVJlcXVlc3QoKQogewogICAgIGJvb2wgaGFzQWN0aXZlRHJhd2FibGVzID0g
bV9yZW1vdGVSZXNvdXJjZUNhY2hlLmhhc0FjdGl2ZURyYXdhYmxlcygpOwpAQCAtNzcxLDE4ICsz
ODEsNiBAQCBib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFsbG93c0V4aXRVbmRlck1lbW9y
eVByZXNzdXJlKCkgY29uc3QKICAgICByZXR1cm4gIW1fcmVtb3RlUmVzb3VyY2VDYWNoZS5oYXNB
Y3RpdmVEcmF3YWJsZXMoKTsKIH0KIAotUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6Omxhc3RLbm93blN0YXRlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwotICAgIHJldHVybiBtX2xhc3RLbm93blN0YXRlLmxvYWQoKTsK
LX0KLQotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVMYXN0S25vd25TdGF0ZShS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGUgc3RhdGUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0gICAgbV9sYXN0S25vd25TdGF0ZS5zdG9yZVJlbGF4ZWQoc3RhdGUpOwot
fQotCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnBlcmZvcm1XaXRoTWVkaWFQbGF5ZXJP
bk1haW5UaHJlYWQoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZv
aWQoTWVkaWFQbGF5ZXImKT4mJiBjYWxsYmFjaykKIHsKICAgICBjYWxsT25NYWluUnVuTG9vcEFu
ZFdhaXQoWyYsIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MsIGlkZW50aWZpZXJdIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCmluZGV4IGQ5MmI3NGMw
MDNkNDBjNjUwYWE0Yjg1ZTcwNzYxNDQzMTdjNzgxZjguLjFkMDI3Zjg4MDYxZjE0OGEzM2RhMjk0
YjcyMWUwNzBkMDFlNzdkMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMjgsMTcgKzI4LDIw
IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgot
I2luY2x1ZGUgIkdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAi
SVBDU2VtYXBob3JlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgiCiAj
aW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgog
I2luY2x1ZGUgIlF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oIgorI2luY2x1
ZGUgIlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaCIKICNpbmNsdWRlICJSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kU3RhdGUuaCIKICNpbmNsdWRlICJSZW1vdGVSZXNvdXJjZUNhY2hlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdV
cGRhdGVJRC5oIgogI2luY2x1ZGUgIlNjb3BlZFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuaCIK
KyNpbmNsdWRlICJTdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmgiCisjaW5jbHVkZSAiU3RyZWFt
TWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxh
eUxpc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KQEAgLTQ4LDEx
ICs1MSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotbmFtZXNwYWNlIERpc3BsYXlMaXN0
IHsKLWNsYXNzIERpc3BsYXlMaXN0OwotY2xhc3MgSXRlbTsKLX0KLQogY2xhc3MgRGVzdGluYXRp
b25Db2xvclNwYWNlOwogY2xhc3MgRmxvYXRTaXplOwogY2xhc3MgTmF0aXZlSW1hZ2U7CkBAIC02
MywzNCArNjEsMjQgQEAgZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIDogYm9vbDsKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLWNsYXNzIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlOwogY2xhc3MgR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKK2NsYXNzIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI7
CiBzdHJ1Y3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVyczsKIAotY2xh
c3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAotICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5k
ZXIKLSAgICAsIHB1YmxpYyBJUEM6OkNvbm5lY3Rpb246OldvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZl
cgotICAgICwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyUmVhZGluZ0Ns
aWVudCB7CitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIDogcHJpdmF0ZSBJUEM6Ok1lc3Nh
Z2VTZW5kZXIsIHB1YmxpYyBJUEM6OlN0cmVhbU1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0K
LSAgICBzdGF0aWMgUmVmPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZShHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzJiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVy
cyYmKTsKKyAgICBzdGF0aWMgUmVmPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZShHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFy
YW1ldGVycyYmLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJik7CiAgICAgdmlydHVhbCB+
UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpOwogICAgIHZvaWQgc3RvcExpc3RlbmluZ0ZvcklQQygp
OwogCiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZSYgcmVtb3RlUmVzb3VyY2VDYWNoZSgpIHsgcmV0
dXJuIG1fcmVtb3RlUmVzb3VyY2VDYWNoZTsgfQogCi0gICAgLy8gUmVuZGVyaW5nIG9wZXJhdGlv
bnMuCi0gICAgYm9vbCBhcHBseU1lZGlhSXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhh
bmRsZSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBkaWRSZWNlaXZlU3Ry
ZWFtTWVzc2FnZShJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlJiwgSVBDOjpEZWNvZGVy
JikgZmluYWw7CiAKICAgICAvLyBNZXNzYWdlcyB0byBiZSBzZW50LgotICAgIHZvaWQgZGlkQ3Jl
YXRlSW1hZ2VCdWZmZXJCYWNrZW5kKEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSwgUXVhbGlmaWVk
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIGRpZENyZWF0ZUltYWdlQnVm
ZmVyQmFja2VuZChJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUsIFF1YWxpZmllZFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciwgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciYpOwogICAgIHZvaWQg
ZGlkRmx1c2goV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyLCBRdWFsaWZp
ZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogCi0gICAgdm9pZCBzZXROZXh0SXRlbUJ1
ZmZlclRvUmVhZChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIFF1
YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbik7Ci0KLSAgICB2
b2lkIGRpZENyZWF0ZU1hc2tJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpOwotICAg
IHZvaWQgZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIoKTsKLQogICAgIHZvaWQgcG9wdWxhdGVHZXRQ
aXhlbEJ1ZmZlclNoYXJlZE1lbW9yeShzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVy
PiYmKTsKIAogICAgIGJvb2wgYWxsb3dzRXhpdFVuZGVyTWVtb3J5UHJlc3N1cmUoKSBjb25zdDsK
QEAgLTk4LDQ3ICs4NiwyMiBAQCBwdWJsaWM6CiAgICAgLy8gUnVucyBGdW5jdGlvbiBpbiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kIHRhc2sgcXVldWUuCiAgICAgdm9pZCBkaXNwYXRjaChGdW5jdGlv
bjx2b2lkKCk+JiYpOwogCi0gICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlIGxhc3RLbm93
blN0YXRlKCkgY29uc3Q7Ci0KKyAgICBJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb24mIHN0cmVh
bUNvbm5lY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3N0cmVhbUNvbm5lY3Rpb24uZ2V0KCk7IH0K
ICAgICB2b2lkIHBlcmZvcm1XaXRoTWVkaWFQbGF5ZXJPbk1haW5UaHJlYWQoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJJZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok1lZGlhUGxheWVyJik+
JiYpOwogCiBwcml2YXRlOgotICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyYsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMm
Jik7CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZChHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
JiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmLCBJUEM6OlN0cmVh
bUNvbm5lY3Rpb25CdWZmZXImJik7CiAgICAgdm9pZCBzdGFydExpc3RlbmluZ0ZvcklQQygpOwog
Ci0gICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZT4gV0FS
Tl9VTlVTRURfUkVUVVJOIGRlY29kZUl0ZW0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxl
bmd0aCwgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlLCB1aW50OF90KiBoYW5kbGVMb2Nh
dGlvbikgb3ZlcnJpZGU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0ZDo6b3B0
aW9uYWw8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVS
TiBkZWNvZGVBbmRDcmVhdGUoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCwgdWlu
dDhfdCogaGFuZGxlTG9jYXRpb24pCi0gICAgewotICAgICAgICBpZiAoYXV0byBpdGVtID0gSVBD
OjpEZWNvZGVyOjpkZWNvZGVTaW5nbGVPYmplY3Q8VD4oZGF0YSwgbGVuZ3RoKSkgewotICAgICAg
ICAgICAgLy8gRklYTUU6IFdlYktpdDIgc2hvdWxkIG5vdCBuZWVkIHRvIGtub3cgdGhhdCB0aGUg
Zmlyc3QgOCBieXRlcyBhdCB0aGUgaGFuZGxlIGFyZSByZXNlcnZlZCBmb3IgdGhlIHR5cGUuCi0g
ICAgICAgICAgICAvLyBOZWVkIHRvIGZpZ3VyZSBvdXQgYSB3YXkgdG8ga2VlcCB0aGlzIGtub3ds
ZWRnZSB3aXRoaW4gZGlzcGxheSBsaXN0IGNvZGUgaW4gV2ViQ29yZS4KLSAgICAgICAgICAgIG5l
dyAoaGFuZGxlTG9jYXRpb24gKyBzaXplb2YodWludDY0X3QpKSBUKFdURk1vdmUoKml0ZW0pKTsK
LSAgICAgICAgICAgIHJldHVybiB7eyBoYW5kbGVMb2NhdGlvbiB9fTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLQotICAgIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZXBsYXlSZXN1bHQgc3VibWl0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdCYsIFdlYkNvcmU6OkltYWdlQnVmZmVyJiBkZXN0aW5hdGlvbik7Ci0gICAgUmVmUHRy
PFdlYkNvcmU6OkltYWdlQnVmZmVyPiBuZXh0RGVzdGluYXRpb25JbWFnZUJ1ZmZlckFmdGVyQXBw
bHlpbmdEaXNwbGF5TGlzdHMoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGluaXRpYWxEZXN0aW5hdGlv
biwgc2l6ZV90IGluaXRpYWxPZmZzZXQsIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlJiwgR1BVUHJv
Y2Vzc1dha2V1cFJlYXNvbiwgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lk
ZW50aWZpZXIpOwotCiAgICAgc3RkOjpvcHRpb25hbDxTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZT4g
dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXJIZWxwZXIoc2l6ZV90IGJ5dGVDb3Vu
dCk7CiAgICAgdm9pZCB1cGRhdGVSZW5kZXJpbmdSZXNvdXJjZVJlcXVlc3QoKTsKIAotICAgIHZv
aWQgdXBkYXRlTGFzdEtub3duU3RhdGUoUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlKTsKLQog
ICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KICAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VT
ZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdWludDY0X3QgbWVzc2FnZVNl
bmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIC8vIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImKSBvdmVycmlkZTsKLSAgICBib29sIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYp
IG92ZXJyaWRlOwotCiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgcmVjZWl2ZWQuCiAgICAgdm9pZCBj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBX
ZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IFdlYkNv
cmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFdlYkNvcmU6OlBpeGVsRm9ybWF0LCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZvaWQgd2FrZVVwQW5kQXBwbHlE
aXNwbGF5TGlzdChjb25zdCBHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cyYpOwogICAg
IHZvaWQgdXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNv
dW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxl
Jik+JiYpOwogICAgIHZvaWQgc2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCBJUEM6OlNlbWFwaG9yZSYpPiYmKTsKICAgICB2b2lkIHVwZGF0ZVNo
YXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3Vu
dCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYs
IGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYpOwpAQCAtMTUxLDEwICsxMTQsOCBAQCBwcml2YXRl
OgogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsKICAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNv
dXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNv
dW50KTsKICAgICB2b2lkIGZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKFJlbmRlcmluZ1VwZGF0ZUlE
KTsKLSAgICB2b2lkIGRpZENyZWF0ZVNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgY29uc3QgU2hhcmVkTWVtb3J5OjpJUENI
YW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb25C
dWZmZXJJZGVudGlmaWVyKTsKIAogICAgIC8vIFJlY2VpdmVkIG1lc3NhZ2VzIHRyYW5zbGF0ZWQg
dG8gdXNlIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci4KLSAgICB2b2lkIHdh
a2VVcEFuZEFwcGx5RGlzcGxheUxpc3RXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIHVpbnQ2NF90IG9mZnNldCwgUXVhbGlm
aWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBHUFVQcm9jZXNzV2FrZXVwUmVhc29uKTsK
ICAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyV2l0aFF1YWxpZmllZElkZW50aWZpZXIoY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmLCBXZWJDb3JlOjpQaXhlbEZvcm1hdCwgUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKTsKICAgICB2b2lkIGdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcldpdGhRdWFsaWZpZWRJ
ZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFF1YWxpZmllZFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+JiYpOwog
ICAgIHZvaWQgZ2V0RGF0YUZvckltYWdlQnVmZmVyV2l0aFF1YWxpZmllZElkZW50aWZpZXIoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFF1YWxp
ZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChW
ZWN0b3I8dWludDhfdD4mJik+JiYpOwpAQCAtMTY0LDU1ICsxMjUsMTUgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZVdpdGhRdWFsaWZpZWRJZGVudGlmaWVyKFF1YWxp
ZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpOwogICAg
IHZvaWQgY2FjaGVGb250V2l0aFF1YWxpZmllZElkZW50aWZpZXIoUmVmPFdlYkNvcmU6OkZvbnQ+
JiYsIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAKLSAgICB2b2lkIHJl
c3VtZUZyb21QZW5kaW5nV2FrZXVwSW5mb3JtYXRpb24oKTsKLQotICAgIGNsYXNzIFJlcGxheWVy
RGVsZWdhdGUgOiBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyOjpEZWxlZ2F0
ZSB7Ci0gICAgcHVibGljOgotICAgICAgICBSZXBsYXllckRlbGVnYXRlKFdlYkNvcmU6OkltYWdl
QnVmZmVyJiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlm
aWVyIHdlYlByb2Nlc3NJZGVudGlmaWVyKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wg
YXBwbHkoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUsIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYpIGZpbmFsOwotICAgICAgICB2b2lkIGRpZENyZWF0ZU1hc2tJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIGZpbmFsOwotICAgICAgICB2b2lkIGRpZFJlc2V0TWFza0lt
YWdlQnVmZmVyKCkgZmluYWw7Ci0gICAgICAgIHZvaWQgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSBmaW5hbDsKLQotICAgICAgICBXZWJDb3Jl
OjpJbWFnZUJ1ZmZlciYgbV9kZXN0aW5hdGlvbjsKLSAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZCYgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwotICAgICAgICBXZWJDb3JlOjpQcm9jZXNz
SWRlbnRpZmllciBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOwotICAgIH07Ci0KLSAgICBzdHJ1Y3Qg
UGVuZGluZ1dha2V1cEluZm9ybWF0aW9uIHsKLSAgICAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGl0ZW1CdWZmZXJJZGVudGlmaWVyOwotICAgICAgICB1aW50
NjRfdCBvZmZzZXQgeyAwIH07Ci0gICAgICAgIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciBkZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllcjsKLSAgICAgICAgR1BVUHJv
Y2Vzc1dha2V1cFJlYXNvbiByZWFzb24geyBHUFVQcm9jZXNzV2FrZXVwUmVhc29uOjpVbnNwZWNp
ZmllZCB9OwotICAgICAgICBzdGQ6Om9wdGlvbmFsPFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcj4gbWlzc2luZ0NhY2hlZFJlc291cmNlSWRlbnRpZmllcjsKLSAgICAgICAgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlIHN0YXRlIHsgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0
YXRlOjpJbml0aWFsaXplZCB9OwotCi0gICAgICAgIGJvb2wgc2hvdWxkUGVyZm9ybVdha2V1cChR
dWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaWRlbnRpZmllcikgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlm
aWVyID09IGlkZW50aWZpZXIKLSAgICAgICAgICAgICAgICB8fCBtaXNzaW5nQ2FjaGVkUmVzb3Vy
Y2VJZGVudGlmaWVyID09IGlkZW50aWZpZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHNo
b3VsZFBlcmZvcm1XYWtldXAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlm
aWVyIGlkZW50aWZpZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVt
QnVmZmVySWRlbnRpZmllciA9PSBpZGVudGlmaWVyOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOworICAgIElQQzo6U3RyZWFtQ29ubmVjdGlvbldv
cmtRdWV1ZSBtX3dvcmtRdWV1ZTsKKyAgICBSZWY8SVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0aW9u
PiBtX3N0cmVhbUNvbm5lY3Rpb247CiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZSBtX3JlbW90ZVJl
c291cmNlQ2FjaGU7CiAgICAgUmVmPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzczsKICAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3Jl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOwotICAgIEhhc2hNYXA8V2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBSZWZQdHI8RGlzcGxheUxpc3RSZWFkZXJIYW5kbGU+
PiBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlczsKLSAgICBzdGQ6Om9wdGlvbmFsPFBlbmRpbmdX
YWtldXBJbmZvcm1hdGlvbj4gbV9wZW5kaW5nV2FrZXVwSW5mbzsKLSAgICBJUEM6OlNlbWFwaG9y
ZSBtX3Jlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlOwogICAgIElQQzo6U2VtYXBob3JlIG1fZ2V0
UGl4ZWxCdWZmZXJTZW1hcGhvcmU7CiAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9nZXRQaXhl
bEJ1ZmZlclNoYXJlZE1lbW9yeTsKICAgICBTY29wZWRSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0
IG1fcmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VC
dWZmZXI+IG1fY3VycmVudE1hc2tJbWFnZUJ1ZmZlcjsKLSAgICBBdG9taWM8UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFN0YXRlPiBtX2xhc3RLbm93blN0YXRlIHsgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFN0YXRlOjpJbml0aWFsaXplZCB9OworICAgIFdlYWtIYXNoU2V0PFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI+IG1fcmVtb3RlRGlzcGxheUxpc3RzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IDFlZjU2ZGNj
OTc2Mjc0ZTM1NmFiMjJiNGVhNGU3MWJjZmFjMGIwZGYuLmExNDJmNDg5NjZmNWM0OTc1OTQ1NjU0
NzcyYzc5YzMxOTc2ZjUzZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2Vz
LmluCkBAIC0yMiwyMCArMjIsMTggQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVz
c2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB7CittZXNzYWdlcyAtPiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kIE5vdFJlZkNvdW50ZWQgU3RyZWFtIHsKICAgICBDcmVhdGVJbWFnZUJ1ZmZl
cihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlv
bkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgZW51bTp1aW50OF90IFdlYkNvcmU6OlBpeGVsRm9ybWF0
IHBpeGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKQotICAgIFdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3Qoc3Ry
dWN0IFdlYktpdDo6R1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMgYXJndW1lbnRzKQot
ICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3Vu
dCkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91
cwotICAgIFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKCkgLT4gKElQQzo6U2VtYXBob3JlIHNl
bWFwaG9yZSkgU3luY2hyb25vdXMKLSAgICBVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVG
b3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1l
bW9yeTo6SVBDSGFuZGxlIGhhbmRsZSwgSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJv
bm91cworICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5
dGVDb3VudCkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlKSBTeW5j
aHJvbm91cyBOb3RTdHJlYW1FbmNvZGFibGVSZXBseQorICAgIFNlbWFwaG9yZUZvckdldFBpeGVs
QnVmZmVyKCkgLT4gKElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMgTm90U3Ry
ZWFtRW5jb2RhYmxlUmVwbHkKKyAgICBVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JH
ZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9y
eTo6SVBDSGFuZGxlIGhhbmRsZSwgSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91
cyBOb3RTdHJlYW1FbmNvZGFibGVSZXBseQogICAgIERlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJl
ZE1lbW9yeSgpCiAgICAgR2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwg
c3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoU3RyaW5nIHVy
bFN0cmluZykgU3luY2hyb25vdXMKICAgICBHZXREYXRhRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1p
bWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rv
cjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwotICAgIEdldFNoYXJlYWJsZUJpdG1hcEZvcklt
YWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZl
ciwgZW51bTp1aW50OF90IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29s
dXRpb24pIC0+IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkgU3luY2hy
b25vdXMKLSAgICBDYWNoZU5hdGl2ZUltYWdlKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5k
bGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKQotICAgIENhY2hlRm9udChJUEM6OkZvbnRSZWZlcmVuY2UgZm9u
dCkKKyAgICBHZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIsIGVudW06dWludDhfdCBXZWJDb3JlOjpQ
cmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSAtPiAoV2ViS2l0OjpTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzIE5vdFN0cmVhbUVuY29kYWJsZVJl
cGx5CisgICAgQ2FjaGVOYXRpdmVJbWFnZShXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
IGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcikgTm90U3RyZWFtRW5jb2RhYmxlCisgICAgQ2FjaGVGb250KElQQzo6
Rm9udFJlZmVyZW5jZSBmb250KSBOb3RTdHJlYW1FbmNvZGFibGUKICAgICBEZWxldGVBbGxGb250
cygpCi0gICAgRGlkQ3JlYXRlU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYktpdDo6U2hhcmVkTWVt
b3J5OjpJUENIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKQogICAgIFJlbGVhc2VSZW1vdGVSZXNvdXJj
ZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCkKICAgICBGaW5hbGl6ZVJlbmRlcmluZ1VwZGF0
ZShXZWJLaXQ6OlJlbmRlcmluZ1VwZGF0ZUlEIHJlbmRlcmluZ1VwZGF0ZUlEKQogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRDcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggNDRh
Mjc4MjY1MmE4ZmViMTNkNWQ0Y2E3NTUxMDFmMGYzZWJlZGU4Yy4uMTc5N2Q1YmE0YWExMWY1ZmE0
ZjU3MzE5MGVlNTBmYzhiYjdiOTkwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZENyZWF0aW9uUGFyYW1ldGVycy5oCkBAIC0zNiwxMyArMzYsMTIgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiAKIHN0cnVjdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJz
IHsKICAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBpZGVudGlmaWVyOwotICAgIElQQzo6
U2VtYXBob3JlIHJlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlOwogICAgIFdlYlBhZ2VQcm94eUlk
ZW50aWZpZXIgcGFnZVByb3h5SUQ7CiAgICAgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlE
OwogCiAgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIHsK
LSAgICAgICAgZW5jb2RlciA8PCBpZGVudGlmaWVyIDw8IHJlc3VtZURpc3BsYXlMaXN0U2VtYXBo
b3JlIDw8IHBhZ2VQcm94eUlEIDw8IHBhZ2VJRDsKKyAgICAgICAgZW5jb2RlciA8PCBpZGVudGlm
aWVyIDw8IHBhZ2VQcm94eUlEIDw8IHBhZ2VJRDsKICAgICB9CiAKICAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzPiBkZWNvZGUo
SVBDOjpEZWNvZGVyJiBkZWNvZGVyKQpAQCAtNTIsMTEgKzUxLDYgQEAgc3RydWN0IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMgewogICAgICAgICBpZiAoIWlkZW50aWZp
ZXIpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgICAgIHN0ZDo6b3B0
aW9uYWw8SVBDOjpTZW1hcGhvcmU+IHJlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlOwotICAgICAg
ICBkZWNvZGVyID4+IHJlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlOwotICAgICAgICBpZiAoIXJl
c3VtZURpc3BsYXlMaXN0U2VtYXBob3JlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLQogICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYlBhZ2VQcm94eUlkZW50aWZpZXI+IHBhZ2VQ
cm94eUlEOwogICAgICAgICBkZWNvZGVyID4+IHBhZ2VQcm94eUlEOwogICAgICAgICBpZiAoIXBh
Z2VQcm94eUlEKQpAQCAtNjcsNyArNjEsNyBAQCBzdHJ1Y3QgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZENyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgICAgIGlmICghcGFnZUlEKQogICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgICAgICByZXR1cm4ge3sgKmlkZW50aWZpZXIsIFdU
Rk1vdmUoKnJlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlKSwgKnBhZ2VQcm94eUlELCAqcGFnZUlE
IH19OworICAgICAgICByZXR1cm4geyB7ICppZGVudGlmaWVyLCAqcGFnZVByb3h5SUQsICpwYWdl
SUQgfSB9OwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oCmluZGV4IDIwMTYyMmRkZDdlMGU1NWQ2
ODMwZmRlNTYzNWRjMGE3NTMwMDdjNTIuLjMzODA2MGZhOTczOGM1NmYzZWNiYTA5YWQxNDljZWZm
MWEzMDkxZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZXNvdXJjZUNhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIlF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ZvbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9OYXRpdmVJbWFnZS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAppbmRleCA4
Y2VjOTI0MjY4NzUxNGM2YzJjNzdiNzg5OGMwYTM0YzkwN2Q1YmM0Li4yYmE5MzY5OWE4Y2NhMTNh
YjcxYmE2YWE0NGQwZjQ4N2Y1YjM1NGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApA
QCAtMjksMTMgKzI5LDEzIEBACiAKICNpbmNsdWRlICJFbmNvZGVyLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgorI2luY2x1ZGUgIlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oIgorI2lu
Y2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgogI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29uY3JldGVJbWFnZUJ1ZmZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RGlzcGxheUxpc3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0
UmVwbGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KICNpbmNs
dWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KQEAgLTQ3LDEyICs0
NywxMSBAQCBjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwogdGVtcGxhdGU8dHlwZW5hbWUg
QmFja2VuZFR5cGU+IGNsYXNzIFRocmVhZFNhZmVSZW1vdGVJbWFnZUJ1ZmZlckZsdXNoZXI7CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgotY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SW1hZ2VCdWZmZXI8QmFja2VuZFR5
cGU+LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6RGVsZWdhdGUs
IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQgewot
ICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyID0gV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKLSAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOwotICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyOjptX2RyYXdpbmdDb250ZXh0OwotICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyOjptX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKLSAgICB1c2luZyBCYXNlRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlOworY2xhc3MgUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBl
PiB7CisgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXIgPSBXZWJDb3JlOjpDb25jcmV0
ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1
ZmZlcjo6bV9iYWNrZW5kOworICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjptX3Jl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKKyAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1
ZmZlcjo6cmVzb2x1dGlvblNjYWxlOwogCiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5PiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBzaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgY29sb3JTcGFjZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSYgcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQpAQCAt
NjYsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgflJlbW90ZUltYWdlQnVmZmVyUHJveHkoKQogICAg
IHsKICAgICAgICAgaWYgKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSB8fCBtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+aXNHUFVQcm9jZXNzQ29ubmVjdGlvbkNsb3NlZCgpKSB7
Ci0gICAgICAgICAgICBjbGVhckRpc3BsYXlMaXN0KCk7CisgICAgICAgICAgICBtX3JlbW90ZURp
c3BsYXlMaXN0LnJlc2V0TmVlZHNGbHVzaCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKQEAgLTk4LDE5ICs5NywxNCBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5KGNvbnN0IFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6UGFy
YW1ldGVycyYgcGFyYW1ldGVycywgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5JiByZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkpCi0gICAgICAgIDogQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIocGFyYW1ldGVycywgdGhpcykKKyAgICAgICAgOiBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcihw
YXJhbWV0ZXJzKQogICAgICAgICAsIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KG1ha2VX
ZWFrUHRyKHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCisgICAgICAgICwgbV9yZW1vdGVE
aXNwbGF5TGlzdCgqdGhpcywgcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LCB7IHsgfSwgQmFz
ZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmxvZ2ljYWxTaXplKCkgfSwgQmFzZUNvbmNyZXRlSW1hZ2VC
dWZmZXI6OmJhc2VUcmFuc2Zvcm0oKSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSk7CiAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LT5yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkoKS5jYWNoZUltYWdlQnVmZmVyKCp0aGlzKTsK
LQotICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuc2V0SXRlbUJ1ZmZlcldy
aXRpbmdDbGllbnQodGhpcyk7Ci0gICAgICAgIG1fZHJhd2luZ0NvbnRleHQuZGlzcGxheUxpc3Qo
KS5zZXRJdGVtQnVmZmVyUmVhZGluZ0NsaWVudChudWxscHRyKTsKLSAgICAgICAgbV9kcmF3aW5n
Q29udGV4dC5kaXNwbGF5TGlzdCgpLnNldFRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyhmYWxzZSk7
CiAgICAgfQogCi0gICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OnJlbmRlcmluZ01v
ZGUoKTsgfQotCiAgICAgLy8gSXQgaXMgc2FmZSB0byBhY2Nlc3MgbV9yZWNlaXZlZEZsdXNoSWRl
bnRpZmllciBmcm9tIHRoZSBtYWluIHRocmVhZCB3aXRob3V0IGxvY2tpbmcgc2luY2UgaXQKICAg
ICAvLyBvbmx5IGdldHMgbW9kaWZpZWQgb24gdGhlIG1haW4gdGhyZWFkLgogICAgIGJvb2wgaGFz
UGVuZGluZ0ZsdXNoKCkgY29uc3QgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVUWV9BTkFMWVNJUwpA
QCAtMjE5LDcgKzIxMyw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAKICAgICAgICAgYXV0byYgbXV0YWJsZVRoaXMgPSBjb25zdF9jYXN0PFJlbW90ZUlt
YWdlQnVmZmVyUHJveHkmPigqdGhpcyk7Ci0gICAgICAgIG11dGFibGVUaGlzLm1fZHJhd2luZ0Nv
bnRleHQucmVjb3JkZXIoKS5nZXRQaXhlbEJ1ZmZlcihkZXN0aW5hdGlvbkZvcm1hdCwgc3JjUmVj
dCk7CisgICAgICAgIG11dGFibGVUaGlzLm1fcmVtb3RlRGlzcGxheUxpc3QuZ2V0UGl4ZWxCdWZm
ZXIoZGVzdGluYXRpb25Gb3JtYXQsIHNyY1JlY3QpOwogICAgICAgICBtdXRhYmxlVGhpcy5mbHVz
aERyYXdpbmdDb250ZXh0QXN5bmMoKTsKIAogICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHktPndhaXRGb3JHZXRQaXhlbEJ1ZmZlclRvQ29tcGxldGUodGltZW91dCkpCkBA
IC0yMjksMTIgKzIyMywyOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBwaXhlbEJ1ZmZl
cjsKICAgICB9CiAKKyAgICB2b2lkIGNsZWFyQmFja2VuZCgpIGZpbmFsCisgICAgeworICAgICAg
ICBtX3JlbW90ZURpc3BsYXlMaXN0LnJlc2V0TmVlZHNGbHVzaCgpOworICAgICAgICBCYXNlQ29u
Y3JldGVJbWFnZUJ1ZmZlcjo6Y2xlYXJCYWNrZW5kKCk7CisgICAgfQorCisgICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIHJl
dHVybiBjb25zdF9jYXN0PFJlbW90ZUltYWdlQnVmZmVyUHJveHkqPih0aGlzKS0+bV9yZW1vdGVE
aXNwbGF5TGlzdDsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqIGRyYXdp
bmdDb250ZXh0KCkgZmluYWwKKyAgICB7CisgICAgICAgIHJldHVybiAmbV9yZW1vdGVEaXNwbGF5
TGlzdDsKKyAgICB9CisKICAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBp
eGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSwgV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCkgZmluYWwKICAgICB7CiAgICAgICAgIC8vIFRoZSBtYXRoIGlu
c2lkZSBQaXhlbEJ1ZmZlcjo6Y3JlYXRlKCkgZG9lc24ndCBhZ3JlZSB3aXRoIHRoZSBtYXRoIGlu
c2lkZSBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKCkgYWJvdXQgaG93IG1fcmVz
b2x1dGlvblNjYWxlIGludGVyYWN0cyB3aXRoIHRoZSBkYXRhIGluIHRoZSBJbWFnZUJ1ZmZlci4K
ICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHB1dFBpeGVsQnVmZmVyKCkgaXMgb25seSBjYWxs
ZWQgd2hlbiByZXNvbHV0aW9uU2NhbGUoKSA9PSAxLgogICAgICAgICBBU1NFUlQocmVzb2x1dGlv
blNjYWxlKCkgPT0gMSk7Ci0gICAgICAgIG1fZHJhd2luZ0NvbnRleHQucmVjb3JkZXIoKS5wdXRQ
aXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsK
KyAgICAgICAgbV9yZW1vdGVEaXNwbGF5TGlzdC5wdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwg
c3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKICAgICB9CiAKICAgICBib29sIHByZWZl
cnNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CkBAIC0yNjAs
OTQgKzI3MCwzMiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlm
ICghbV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpLmlzRW1wdHkoKSB8fCAhaGFzUGVuZGlu
Z0ZsdXNoKCkpIHsKKyAgICAgICAgaWYgKG1fcmVtb3RlRGlzcGxheUxpc3QubmVlZHNGbHVzaCgp
IHx8ICFoYXNQZW5kaW5nRmx1c2goKSkgewogICAgICAgICAgICAgbV9zZW50Rmx1c2hJZGVudGlm
aWVyID0gV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyOjpnZW5lcmF0ZSgp
OwotICAgICAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLmZsdXNoQ29udGV4dCht
X3NlbnRGbHVzaElkZW50aWZpZXIpOworICAgICAgICAgICAgbV9yZW1vdGVEaXNwbGF5TGlzdC5m
bHVzaENvbnRleHQobV9zZW50Rmx1c2hJZGVudGlmaWVyKTsKICAgICAgICAgfQogCi0gICAgICAg
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdl
SWZOZWVkZWQoKTsKLSAgICAgICAgY2xlYXJEaXNwbGF5TGlzdCgpOworICAgICAgICBtX3JlbW90
ZURpc3BsYXlMaXN0LnJlc2V0TmVlZHNGbHVzaCgpOwogICAgIH0KIAotICAgIHZvaWQgcmVjb3Jk
TmF0aXZlSW1hZ2VVc2UoV2ViQ29yZTo6TmF0aXZlSW1hZ2UmIGltYWdlKSBmaW5hbAorICAgIHZv
aWQgcmVjb3JkTmF0aXZlSW1hZ2VVc2UoV2ViQ29yZTo6TmF0aXZlSW1hZ2UmIGltYWdlKQogICAg
IHsKICAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQogICAgICAgICAg
ICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbW90ZVJlc291cmNlQ2FjaGVQcm94
eSgpLnJlY29yZE5hdGl2ZUltYWdlVXNlKGltYWdlKTsKICAgICB9CiAKLSAgICBib29sIGlzQ2Fj
aGVkSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKSBj
b25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgaWYgKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byBjYWNoZWRJbWFn
ZUJ1ZmZlciA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5yZW1vdGVSZXNvdXJjZUNh
Y2hlUHJveHkoKS5jYWNoZWRJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgIEFTU0VSVCghY2FjaGVkSW1hZ2VCdWZmZXIgfHwgY2Fj
aGVkSW1hZ2VCdWZmZXIgPT0gJmltYWdlQnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIGNhY2hlZElt
YWdlQnVmZmVyOwotICAgIH0KLQotICAgIHZvaWQgY2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZl
cihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgbmV4dEltYWdlQnVmZmVyKSBm
aW5hbAotICAgIHsKLSAgICAgICAgYm9vbCB3YXNFbXB0eSA9IG1fZHJhd2luZ0NvbnRleHQuZGlz
cGxheUxpc3QoKS5pc0VtcHR5KCk7Ci0gICAgICAgIG1fZHJhd2luZ0NvbnRleHQuZGlzcGxheUxp
c3QoKS50ZW1wbGF0ZSBhcHBlbmQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Ok1ldGFDb21tYW5kQ2hh
bmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcj4obmV4dEltYWdlQnVmZmVyKTsKLSAgICAgICAgaWYg
KHdhc0VtcHR5KQotICAgICAgICAgICAgY2xlYXJEaXNwbGF5TGlzdCgpOwotICAgIH0KLQotICAg
IHZvaWQgcHJlcGFyZVRvQXBwZW5kRGlzcGxheUxpc3RJdGVtcyhXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbUJ1ZmZlckhhbmRsZSYmIGhhbmRsZSkgZmluYWwKLSAgICB7Ci0gICAgICAgIG1fZHJh
d2luZ0NvbnRleHQuZGlzcGxheUxpc3QoKS5wcmVwYXJlVG9BcHBlbmQoV1RGTW92ZShoYW5kbGUp
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyRGlzcGxheUxpc3QoKQotICAgIHsKLSAgICAgICAg
bV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpLmNsZWFyKCk7Ci0gICAgfQotCi0gICAgYm9v
bCBjYW5BcHBlbmRJdGVtT2ZUeXBlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSkgZmlu
YWwKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS0+d2lsbEFwcGVuZEl0ZW0obV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGRpZEFwcGVu
ZERhdGEoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUmIGhhbmRs
ZSwgc2l6ZV90IG51bWJlck9mQnl0ZXMsIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaWRDaGFuZ2VJ
dGVtQnVmZmVyIGRpZENoYW5nZUl0ZW1CdWZmZXIpIGZpbmFsCi0gICAgewotICAgICAgICBpZiAo
TElLRUxZKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKLSAgICAgICAgICAgIG1fcmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5kaWRBcHBlbmREYXRhKGhhbmRsZSwgbnVtYmVyT2ZC
eXRlcywgZGlkQ2hhbmdlSXRlbUJ1ZmZlciwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
OwotICAgIH0KLQotICAgIHZvaWQgcmVjb3JkRm9udFVzZShXZWJDb3JlOjpGb250JiBmb250KSBm
aW5hbAorICAgIHZvaWQgcmVjb3JkRm9udFVzZShXZWJDb3JlOjpGb250JiBmb250KQogICAgIHsK
ICAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQogICAgICAgICAgICAg
bV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgp
LnJlY29yZEZvbnRVc2UoZm9udCk7CiAgICAgfQogCi0gICAgdm9pZCByZWNvcmRJbWFnZUJ1ZmZl
clVzZShXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpIGZpbmFsCisgICAgdm9pZCBy
ZWNvcmRJbWFnZUJ1ZmZlclVzZShXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCiAg
ICAgewogICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCiAgICAgICAg
ICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVtb3RlUmVzb3VyY2VDYWNoZVBy
b3h5KCkucmVjb3JkSW1hZ2VCdWZmZXJVc2UoaW1hZ2VCdWZmZXIpOwogICAgIH0KIAotICAgIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlIGNyZWF0ZUl0ZW1CdWZmZXIoc2l6
ZV90IGNhcGFjaXR5KSBmaW5hbAotICAgIHsKLSAgICAgICAgaWYgKExJS0VMWShtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSkpCi0gICAgICAgICAgICByZXR1cm4gbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHktPmNyZWF0ZUl0ZW1CdWZmZXIoY2FwYWNpdHksIG1fcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKTsKLQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVy
PiBlbmNvZGVJdGVtT3V0T2ZMaW5lKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdEl0ZW0mIGl0ZW0pIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICByZXR1cm4gV1RGOjp2
aXNpdChbXShjb25zdCBhdXRvJiBkaXNwbGF5TGlzdEl0ZW0pIC0+IFJlZlB0cjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+IHsKLSAgICAgICAgICAgIHVzaW5nIERpc3BsYXlMaXN0SXRlbVR5cGUgPSB0
eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKGRpc3BsYXlMaXN0SXRl
bSk+Ojp0eXBlOwotICAgICAgICAgICAgaWYgY29uc3RleHByICghRGlzcGxheUxpc3RJdGVtVHlw
ZTo6aXNJbmxpbmVJdGVtKQotICAgICAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVu
Y29kZVNpbmdsZU9iamVjdDxEaXNwbGF5TGlzdEl0ZW1UeXBlPihkaXNwbGF5TGlzdEl0ZW0pOwot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICB9LCBpdGVtKTsKLSAgICB9Ci0KICAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6VGhyZWFkU2FmZUltYWdlQnVmZmVyRmx1c2hlcj4gY3JlYXRlRmx1c2hl
cigpIGZpbmFsCiAgICAgewogICAgICAgICByZXR1cm4gV1RGOjptYWtlVW5pcXVlPFRocmVhZFNh
ZmVSZW1vdGVJbWFnZUJ1ZmZlckZsdXNoZXI8QmFja2VuZFR5cGU+PigqdGhpcyk7CkBAIC0zNTgs
NiArMzA2LDcgQEAgcHJvdGVjdGVkOgogICAgIENvbmRpdGlvbiBtX3JlY2VpdmVkRmx1c2hJZGVu
dGlmaWVyQ2hhbmdlZENvbmRpdGlvbjsKICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRGbHVz
aElkZW50aWZpZXIgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllciBXVEZfR1VBUkRFRF9CWV9MT0NL
KG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXJMb2NrKTsgLy8gT25seSBtb2RpZmllZCBvbiB0aGUg
bWFpbiB0aHJlYWQgYnV0IG1heSBnZXQgcXVlcmllZCBvbiBhIHNlY29uZGFyeSB0aHJlYWQuCiAg
ICAgV2Vha1B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IG1fcmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OworICAgIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eSBtX3JlbW90
ZURpc3BsYXlMaXN0OwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKaW5kZXggYmY0OWE4MjdkMjAyODI0
YTQ3YjBkNjU2OTZjNmNhMmM3ZDhmYjkxZS4uNWI4MTgzYWRlOWRkZTFmYjdjY2RlNDM2ZDEzYmM3
OWI1NzhlYzkzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApA
QCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi0jaW5jbHVkZSAi
RGlzcGxheUxpc3RXcml0ZXJIYW5kbGUuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5oIgpAQCAtNTIsNyArNTEsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNy
ZWF0ZQogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkoV2ViUGFnZSYgd2ViUGFnZSkKICAgICA6IG1fcGFyYW1ldGVycyB7CiAgICAgICAgIFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpLAotICAgICAgICBJUEM6OlNlbWFw
aG9yZSB7IH0sCiAgICAgICAgIHdlYlBhZ2Uud2ViUGFnZVByb3h5SWRlbnRpZmllcigpLAogICAg
ICAgICB3ZWJQYWdlLmlkZW50aWZpZXIoKQogICAgIH0KQEAgLTc3LDcgKzc1LDggQEAgR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24mIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZW5zdXJlR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24oKQogICAgICAgICBhdXRvJiBncHVQcm9jZXNzQ29ubmVjdGlvbiA9IFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCk7CiAgICAg
ICAgIGdwdVByb2Nlc3NDb25uZWN0aW9uLmFkZENsaWVudCgqdGhpcyk7CiAgICAgICAgIGdwdVBy
b2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCkudG9VSW50NjQoKSwgKnRoaXMpOwotICAg
ICAgICBncHVQcm9jZXNzQ29ubmVjdGlvbi5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6R1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5nQmFja2VuZChtX3BhcmFtZXRl
cnMpLCAwLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0Zv
clN5bmNSZXBseSk7CisgICAgICAgIG1fc3RyZWFtQ29ubmVjdGlvbiA9IG1ha2VVbmlxdWU8SVBD
OjpTdHJlYW1DbGllbnRDb25uZWN0aW9uPihncHVQcm9jZXNzQ29ubmVjdGlvbi5jb25uZWN0aW9u
KCksIDEgPDwgMjEpOworICAgICAgICBncHVQcm9jZXNzQ29ubmVjdGlvbi5jb25uZWN0aW9uKCku
c2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5n
QmFja2VuZChtX3BhcmFtZXRlcnMsIG1fc3RyZWFtQ29ubmVjdGlvbi0+c3RyZWFtQnVmZmVyKCkp
LCAwLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5
bmNSZXBseSk7CiAgICAgICAgIG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24gPSBtYWtlV2Vha1B0cihn
cHVQcm9jZXNzQ29ubmVjdGlvbik7CiAgICAgfQogICAgIHJldHVybiAqbV9ncHVQcm9jZXNzQ29u
bmVjdGlvbjsKQEAgLTkxLDEyICs5MCw2IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjpncHVQcm9jZXNzQ29ubmVjdGlvbkRpZENsb3NlKEdQVVByb2Nlc3NDb25uZWN0CiAKICAg
ICBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5yZW1vdGVSZXNvdXJjZUNhY2hlV2FzRGVzdHJv
eWVkKCk7CiAKLSAgICBtX2lkZW50aWZpZXJzT2ZSZXVzYWJsZUhhbmRsZXMuY2xlYXIoKTsKLSAg
ICBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlcy5jbGVhcigpOwotICAgIG1fY3VycmVudERlc3Rp
bmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyID0gc3RkOjpudWxsb3B0OwotICAgIG1fZGVmZXJy
ZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzID0gc3RkOjpudWxsb3B0OwotICAgIG1fcmVtYWluaW5n
SXRlbXNUb0FwcGVuZEJlZm9yZVNlbmRpbmdXYWtldXAgPSAwOwotCiAgICAgaWYgKG1fZGVzdHJv
eUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5VGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9k
ZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlUaW1lci5zdG9wKCk7CiAgICAgbV9nZXRQ
aXhlbEJ1ZmZlclNlbWFwaG9yZSA9IHN0ZDo6bnVsbG9wdDsKQEAgLTEzMyw3ICsxMjYsNyBAQCBi
b29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckRpZEZsdXNoKCkKIAogdm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZVJlbW90ZUltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpDcmVhdGVJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5sb2dpY2FsU2l6ZSgp
LCBpbWFnZUJ1ZmZlci5yZW5kZXJpbmdNb2RlKCksIGltYWdlQnVmZmVyLnJlc29sdXRpb25TY2Fs
ZSgpLCBpbWFnZUJ1ZmZlci5jb2xvclNwYWNlKCksIGltYWdlQnVmZmVyLnBpeGVsRm9ybWF0KCks
IGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKSwgcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hl
bldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIHNlbmRUb1N0cmVhbShNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6Q3JlYXRlSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIubG9naWNhbFNp
emUoKSwgaW1hZ2VCdWZmZXIucmVuZGVyaW5nTW9kZSgpLCBpbWFnZUJ1ZmZlci5yZXNvbHV0aW9u
U2NhbGUoKSwgaW1hZ2VCdWZmZXIuY29sb3JTcGFjZSgpLCBpbWFnZUJ1ZmZlci5waXhlbEZvcm1h
dCgpLCBpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSkpOwogfQogCiBS
ZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBj
b2xvclNwYWNlLCBQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCkKQEAgLTE2Myw4ICsxNTYsNiBAQCBS
ZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaQogCiBTaGFyZWRNZW1vcnkqIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6c2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIoc2l6ZV90IGRhdGFTaXpl
LCBJUEM6OlRpbWVvdXQgdGltZW91dCkKIHsKLSAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdl
SWZOZWVkZWQoKTsKLQogICAgIGJvb2wgbmVlZHNTaGFyZWRNZW1vcnkgPSAhbV9nZXRQaXhlbEJ1
ZmZlclNoYXJlZE1lbW9yeSB8fCBkYXRhU2l6ZSA+IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1v
cnlMZW5ndGg7CiAgICAgYm9vbCBuZWVkc1NlbWFwaG9yZSA9ICFtX2dldFBpeGVsQnVmZmVyU2Vt
YXBob3JlOwogCkBAIC0xNzUsMTEgKzE2NiwxMSBAQCBTaGFyZWRNZW1vcnkqIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6c2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIoc2l6ZV90CiAg
ICAgSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlOwogCiAgICAgaWYgKG5lZWRzU2hhcmVkTWVtb3J5
ICYmIG5lZWRzU2VtYXBob3JlKQotICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0UGl4ZWxC
dWZmZXIoZGF0YVNpemUpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRl
U2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXI6OlJlcGx5KGhhbmRsZSwg
c2VtYXBob3JlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgdGltZW91dCwgSVBDOjpT
ZW5kU3luY09wdGlvbjo6TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzKTsKKyAgICAg
ICAgc2VuZFN5bmNUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBk
YXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoZGF0YVNpemUpLCBN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5QW5kU2Vt
YXBob3JlRm9yR2V0UGl4ZWxCdWZmZXI6OlJlcGx5KGhhbmRsZSwgc2VtYXBob3JlKSwgdGltZW91
dCk7CiAgICAgZWxzZSBpZiAobmVlZHNTaGFyZWRNZW1vcnkpCi0gICAgICAgIHNlbmRTeW5jKE1l
c3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQ
aXhlbEJ1ZmZlcihkYXRhU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpV
cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcjo6UmVwbHkoaGFuZGxlKSwgcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIoKSwgdGltZW91dCwgSVBDOjpTZW5kU3luY09wdGlvbjo6TWFp
bnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzKTsKKyAgICAgICAgc2VuZFN5bmNUb1N0cmVh
bShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9y
R2V0UGl4ZWxCdWZmZXIoZGF0YVNpemUpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXI6OlJlcGx5KGhhbmRsZSksIHRp
bWVvdXQpOwogICAgIGVsc2UgaWYgKG5lZWRzU2VtYXBob3JlKQotICAgICAgICBzZW5kU3luYyhN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6U2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZm
ZXIoKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlNlbWFwaG9yZUZvckdldFBp
eGVsQnVmZmVyOjpSZXBseShzZW1hcGhvcmUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigp
LCB0aW1lb3V0KTsKKyAgICAgICAgc2VuZFN5bmNUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6U2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoKSwgTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyOjpSZXBseShz
ZW1hcGhvcmUpLCB0aW1lb3V0KTsKIAogICAgIGlmICghaGFuZGxlLmhhbmRsZS5pc051bGwoKSkg
ewogICAgICAgICBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5Ojpt
YXAoaGFuZGxlLmhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CkBA
IC0yMDQsMzMgKzE5NSwyNyBAQCBib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2Fp
dEZvckdldFBpeGVsQnVmZmVyVG9Db21wbGV0ZShJUEM6OlRpbWVvdXQgdAogdm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgp
CiB7CiAgICAgbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSA9IG51bGxwdHI7Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6RGVzdHJveUdldFBpeGVsQnVmZmVy
U2hhcmVkTWVtb3J5KCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9w
dGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICBz
ZW5kVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRlc3Ryb3lHZXRQ
aXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpKTsKIH0KIAogU3RyaW5nIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6Z2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJl
c2VydmVSZXNvbHV0aW9uLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKQogewotICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRl
ZCgpOwotCiAgICAgU3RyaW5nIHVybFN0cmluZzsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKG1pbWVUeXBlLCBx
dWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24sIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciks
IE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXREYXRhVVJMRm9ySW1hZ2VCdWZm
ZXI6OlJlcGx5KHVybFN0cmluZyksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIDFfcyk7
CisgICAgc2VuZFN5bmNUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
R2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29s
dXRpb24sIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciksIE1lc3NhZ2VzOjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpHZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXI6OlJlcGx5KHVybFN0cmluZyks
IDNfcyk7CiAgICAgcmV0dXJuIHVybFN0cmluZzsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewotICAgIHNlbmRE
ZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwotCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRh
dGE7Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldERh
dGFGb3JJbWFnZUJ1ZmZlcihtaW1lVHlwZSwgcXVhbGl0eSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldERhdGFGb3JJbWFn
ZUJ1ZmZlcjo6UmVwbHkoZGF0YSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIDFfcyk7
CisgICAgc2VuZFN5bmNUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
R2V0RGF0YUZvckltYWdlQnVmZmVyKG1pbWVUeXBlLCBxdWFsaXR5LCByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0RGF0YUZv
ckltYWdlQnVmZmVyOjpSZXBseShkYXRhKSwgM19zKTsKICAgICByZXR1cm4gZGF0YTsKIH0KIAog
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRT
aGFyZWFibGVCaXRtYXAoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVyLCBQ
cmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQogewotICAgIHNlbmREZWZlcnJl
ZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwotCiAgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUg
aGFuZGxlOwotICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpHZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihpbWFnZUJ1
ZmZlciwgcHJlc2VydmVSZXNvbHV0aW9uKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OkdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyOjpSZXBseShoYW5kbGUpLCByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCAxX3MpOworICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNl
bmRTeW5jVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldFNoYXJl
YWJsZUJpdG1hcEZvckltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBwcmVzZXJ2ZVJlc29sdXRpb24p
LCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0U2hhcmVhYmxlQml0bWFwRm9y
SW1hZ2VCdWZmZXI6OlJlcGx5KGhhbmRsZSksIDNfcyk7CiAgICAgaWYgKGhhbmRsZS5pc051bGwo
KSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICBBU1NFUlRfVU5VU0VEKHNlbmRSZXN1bHQsIHNl
bmRSZXN1bHQpOwpAQCAtMjM5LDMwICsyMjQsMjcgQEAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRTaGFyZWFibGVCaXRtYXAoUmVuZGVyaW4K
IAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNhY2hlTmF0aXZlSW1hZ2UoY29u
c3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDYWNoZU5hdGl2ZUltYWdlKGhhbmRsZSwgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBD
OjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkp
OworICAgIHNlbmRUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q2Fj
aGVOYXRpdmVJbWFnZShoYW5kbGUsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpOwogfQog
Ci12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y2FjaGVGb250KFJlZjxXZWJDb3Jl
OjpGb250PiYmIGZvbnQpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y2FjaGVG
b250KFJlZjxGb250PiYmIGZvbnQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6Q2FjaGVGb250KFdURk1vdmUoZm9udCkpLCByZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGlu
Z0ZvclN5bmNSZXBseSk7CisgICAgc2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpDYWNoZUZvbnQoV1RGTW92ZShmb250KSkpOwogfQogCiB2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6ZGVsZXRlQWxsRm9udHMoKQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRlbGV0ZUFsbEZvbnRzKCksIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldo
ZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICBzZW5kVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OkRlbGV0ZUFsbEZvbnRzKCkpOwogfQogCiB2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNv
dW50KQogewotICAgIGlmIChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPT0gbV9jdXJyZW50
RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIpCi0gICAgICAgIG1fY3VycmVudERlc3Rp
bmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyID0gc3RkOjpudWxsb3B0OwotCi0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVsZWFzZVJlbW90ZVJlc291cmNlKHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdXNlQ291bnQpLCByZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGlu
Z0ZvclN5bmNSZXBseSk7CisgICAgc2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpSZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLCB1c2VDb3VudCkpOwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
ZmluYWxpemVSZW5kZXJpbmdVcGRhdGUoKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OkZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKG1fcmVuZGVyaW5nVXBkYXRl
SUQpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3Bh
dGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAgc2VuZFRvU3RyZWFt
KE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpGaW5hbGl6ZVJlbmRlcmluZ1VwZGF0
ZShtX3JlbmRlcmluZ1VwZGF0ZUlEKSk7CiAgICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHku
ZmluYWxpemVSZW5kZXJpbmdVcGRhdGUoKTsKICAgICBtX3JlbmRlcmluZ1VwZGF0ZUlELmluY3Jl
bWVudCgpOwogfQpAQCAtMjg3LDE2NCArMjY5LDQwIEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpkaWRGbHVzaChHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgZmx1c2hJ
CiAgICAgICAgIGltYWdlQnVmZmVyLT5kaWRGbHVzaChmbHVzaElkZW50aWZpZXIpOwogfQogCi12
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGlkRmluYWxpemVSZW5kZXJpbmdVcGRh
dGUoUmVuZGVyaW5nVXBkYXRlSUQgZGlkUmVuZGVyaW5nVXBkYXRlSUQpCit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6ZGlkRmluYWxpemVSZW5kZXJpbmdVcGRhdGUoUmVuZGVyaW5n
VXBkYXRlSUQgcmVuZGVyaW5nVXBkYXRlSUQpCiB7Ci0gICAgQVNTRVJUKGRpZFJlbmRlcmluZ1Vw
ZGF0ZUlEIDw9IG1fcmVuZGVyaW5nVXBkYXRlSUQpOwotICAgIG1fZGlkUmVuZGVyaW5nVXBkYXRl
SUQgPSBzdGQ6Om1pbihkaWRSZW5kZXJpbmdVcGRhdGVJRCwgbV9yZW5kZXJpbmdVcGRhdGVJRCk7
CisgICAgQVNTRVJUKHJlbmRlcmluZ1VwZGF0ZUlEIDw9IG1fcmVuZGVyaW5nVXBkYXRlSUQpOwor
ICAgIG1fZGlkUmVuZGVyaW5nVXBkYXRlSUQgPSBzdGQ6Om1pbihyZW5kZXJpbmdVcGRhdGVJRCwg
bV9yZW5kZXJpbmdVcGRhdGVJRCk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5Ojp3aWxsQXBwZW5kSXRlbShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgbmV3RGVzdGlu
YXRpb25JZGVudGlmaWVyKQotewotICAgIGlmIChtX2N1cnJlbnREZXN0aW5hdGlvbkltYWdlQnVm
ZmVySWRlbnRpZmllciA9PSBuZXdEZXN0aW5hdGlvbklkZW50aWZpZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChhdXRvIHByZXZpb3VzRGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyID0g
c3RkOjpleGNoYW5nZShtX2N1cnJlbnREZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllciwg
bmV3RGVzdGluYXRpb25JZGVudGlmaWVyKSkgewotICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZl
ciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNhY2hlZEltYWdlQnVmZmVyKCpwcmV2aW91
c0Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcikpCi0gICAgICAgICAgICBpbWFnZUJ1ZmZlci0+
Y2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcihuZXdEZXN0aW5hdGlvbklkZW50aWZpZXIpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0K
LSAgICBhdXRvIGhhbmRsZSA9IG1vc3RSZWNlbnRseVVzZWREaXNwbGF5TGlzdEhhbmRsZSgpOwot
ICAgIGlmIChVTkxJS0VMWSghaGFuZGxlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBu
ZXdEZXN0aW5hdGlvbiA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNhY2hlZEltYWdlQnVm
ZmVyKG5ld0Rlc3RpbmF0aW9uSWRlbnRpZmllcik7Ci0gICAgaWYgKFVOTElLRUxZKCFuZXdEZXN0
aW5hdGlvbikpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBoYW5kbGUtPm1vdmVXcml0YWJsZU9mZnNldFRvU3RhcnRJZlBvc3Np
YmxlKCk7Ci0gICAgbmV3RGVzdGluYXRpb24tPnByZXBhcmVUb0FwcGVuZERpc3BsYXlMaXN0SXRl
bXMoaGFuZGxlLT5jcmVhdGVIYW5kbGUoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpzZW5kV2FrZXVwTWVzc2FnZShjb25zdCBHUFVQcm9jZXNzV2FrZXVwTWVzc2Fn
ZUFyZ3VtZW50cyYgYXJndW1lbnRzKQotewotICAgIExPR19XSVRIX1NUUkVBTShTaGFyZWREaXNw
bGF5TGlzdHMsIHN0cmVhbSA8PCAiU2VuZGluZyB3YWtldXA6IEl0ZW1zWyIgPDwgYXJndW1lbnRz
Lml0ZW1CdWZmZXJJZGVudGlmaWVyIDw8ICJdID0+IEltYWdlKCIgPDwgYXJndW1lbnRzLmRlc3Rp
bmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyIDw8ICIpIGF0ICIgPDwgYXJndW1lbnRzLm9mZnNl
dCk7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6V2FrZVVwQW5k
QXBwbHlEaXNwbGF5TGlzdChhcmd1bWVudHMpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigp
LCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNS
ZXBseSk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpzZW5kRGVmZXJy
ZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKQorUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpIGNv
bnN0CiB7Ci0gICAgYXV0byBhcmd1bWVudHMgPSBzdGQ6OmV4Y2hhbmdlKG1fZGVmZXJyZWRXYWtl
dXBNZXNzYWdlQXJndW1lbnRzLCBzdGQ6Om51bGxvcHQpOwotICAgIGlmICghYXJndW1lbnRzKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzZW5kV2FrZXVwTWVzc2FnZSgqYXJndW1lbnRzKTsKLSAg
ICBtX3JlbWFpbmluZ0l0ZW1zVG9BcHBlbmRCZWZvcmVTZW5kaW5nV2FrZXVwID0gMDsKLX0KLQot
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRpZEFwcGVuZERhdGEoY29uc3QgRGlz
cGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUmIGhhbmRsZSwgc2l6ZV90IG51bWJlck9mQnl0ZXMs
IERpc3BsYXlMaXN0OjpEaWRDaGFuZ2VJdGVtQnVmZmVyIGRpZENoYW5nZUl0ZW1CdWZmZXIsIFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkltYWdlQnVmZmVyKQotewotICAg
IGF1dG8qIHNoYXJlZEhhbmRsZSA9IG1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzLmdldChoYW5k
bGUuaWRlbnRpZmllcik7Ci0gICAgaWYgKFVOTElLRUxZKCFzaGFyZWRIYW5kbGUpKQotICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgYm9vbCB3YXNFbXB0eSA9IHNo
YXJlZEhhbmRsZS0+YWR2YW5jZShudW1iZXJPZkJ5dGVzKSA9PSBudW1iZXJPZkJ5dGVzOwotICAg
IGlmICghd2FzRW1wdHkgfHwgZGlkQ2hhbmdlSXRlbUJ1ZmZlciA9PSBEaXNwbGF5TGlzdDo6RGlk
Q2hhbmdlSXRlbUJ1ZmZlcjo6WWVzKSB7Ci0gICAgICAgIGlmIChtX2RlZmVycmVkV2FrZXVwTWVz
c2FnZUFyZ3VtZW50cykgewotICAgICAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3Rl
UmVzb3VyY2VDYWNoZVByb3h5LmNhY2hlZEltYWdlQnVmZmVyKG1fZGVmZXJyZWRXYWtldXBNZXNz
YWdlQXJndW1lbnRzLT5kZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllcik7Ci0gICAgICAg
ICAgICBpZiAoaW1hZ2VCdWZmZXIgJiYgaW1hZ2VCdWZmZXItPmJhY2tlbmQoKSAmJiBzaGFyZWRI
YW5kbGUtPnRyeVRvUmVzdW1lKHsgbV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMtPm9m
ZnNldCwgbV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMtPmRlc3RpbmF0aW9uSW1hZ2VC
dWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCkgfSkpIHsKLSAgICAgICAgICAgICAgICBtX3BhcmFt
ZXRlcnMucmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmUuc2lnbmFsKCk7Ci0gICAgICAgICAgICAg
ICAgbV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMgPSBzdGQ6Om51bGxvcHQ7Ci0gICAg
ICAgICAgICAgICAgbV9yZW1haW5pbmdJdGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dha2V1cCA9
IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCEtLW1fcmVtYWluaW5nSXRlbXNUb0FwcGVuZEJl
Zm9yZVNlbmRpbmdXYWtldXApIHsKLSAgICAgICAgICAgICAgICBtX2RlZmVycmVkV2FrZXVwTWVz
c2FnZUFyZ3VtZW50cy0+cmVhc29uID0gR1BVUHJvY2Vzc1dha2V1cFJlYXNvbjo6SXRlbUNvdW50
SHlzdGVyZXNpc0V4Y2VlZGVkOwotICAgICAgICAgICAgICAgIHNlbmRXYWtldXBNZXNzYWdlKCpz
dGQ6OmV4Y2hhbmdlKG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzLCBzdGQ6Om51bGxv
cHQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgc2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7Ci0KLSAgICBhdXRvIGlt
YWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY2FjaGVkSW1hZ2VCdWZmZXIo
ZGVzdGluYXRpb25JbWFnZUJ1ZmZlcik7Ci0gICAgYXV0byBvZmZzZXRUb1JlYWQgPSBzaGFyZWRI
YW5kbGUtPndyaXRhYmxlT2Zmc2V0KCkgLSBudW1iZXJPZkJ5dGVzOwotICAgIGlmIChpbWFnZUJ1
ZmZlciAmJiBpbWFnZUJ1ZmZlci0+YmFja2VuZCgpICYmIHNoYXJlZEhhbmRsZS0+dHJ5VG9SZXN1
bWUoeyBvZmZzZXRUb1JlYWQsIGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIudG9VSW50NjQoKSB9KSkg
ewotICAgICAgICBtX3BhcmFtZXRlcnMucmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmUuc2lnbmFs
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJbnN0ZWFkIG9mIHNlbmRpbmcg
dGhlIHdha2V1cCBtZXNzYWdlIGltbWVkaWF0ZWx5LCB3YWl0IGZvciBzb21lIGFkZGl0aW9uYWwg
ZGF0YS4gVGhpcyBnaXZlcyB0aGUKLSAgICAvLyB3ZWIgcHJvY2VzcyBhICJoZWFkIHN0YXJ0Iiwg
ZGVjcmVhc2luZyB0aGUgbGlrZWxpaG9vZCB0aGF0IHRoZSBHUFUgcHJvY2VzcyB3aWxsIGVuY291
bnRlciBmcmVxdWVudAotICAgIC8vIHdha2V1cHMgd2hlbiBwcm9jZXNzaW5nIGEgbGFyZ2UgYW1v
dW50IG9mIGRpc3BsYXkgbGlzdCBpdGVtcy4KLSAgICBjb25zdGV4cHIgdW5zaWduZWQgaXRlbUNv
dW50SHlzdGVyZXNpc0JlZm9yZVNlbmRpbmdXYWtldXAgPSA1MTI7Ci0KLSAgICBtX3JlbWFpbmlu
Z0l0ZW1zVG9BcHBlbmRCZWZvcmVTZW5kaW5nV2FrZXVwID0gaXRlbUNvdW50SHlzdGVyZXNpc0Jl
Zm9yZVNlbmRpbmdXYWtldXA7Ci0gICAgbV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMg
PSB7eyBoYW5kbGUuaWRlbnRpZmllciwgb2Zmc2V0VG9SZWFkLCBkZXN0aW5hdGlvbkltYWdlQnVm
ZmVyIH19OworICAgIHJldHVybiBtX3BhcmFtZXRlcnMuaWRlbnRpZmllcjsKIH0KIAotUmVmUHRy
PERpc3BsYXlMaXN0V3JpdGVySGFuZGxlPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1v
c3RSZWNlbnRseVVzZWREaXNwbGF5TGlzdEhhbmRsZSgpCitSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllciBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmVuc3VyZUJhY2tlbmRDcmVhdGVkKCkK
IHsKLSAgICBpZiAoVU5MSUtFTFkobV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVzLmlzRW1w
dHkoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIG1fc2hhcmVkRGlz
cGxheUxpc3RIYW5kbGVzLmdldChtX2lkZW50aWZpZXJzT2ZSZXVzYWJsZUhhbmRsZXMuZmlyc3Qo
KSk7CisgICAgZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIoKTsKIH0KIAotUmVmUHRyPERpc3BsYXlMaXN0V3JpdGVySGFu
ZGxlPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZpbmRSZXVzYWJsZURpc3BsYXlMaXN0
SGFuZGxlKHNpemVfdCBjYXBhY2l0eSkKK0lQQzo6U3RyZWFtQ2xpZW50Q29ubmVjdGlvbiYgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpzdHJlYW1Db25uZWN0aW9uKCkKIHsKLSAgICBhdXRv
IG1vc3RSZWNlbnRseVVzZWRIYW5kbGUgPSBtb3N0UmVjZW50bHlVc2VkRGlzcGxheUxpc3RIYW5k
bGUoKTsKLSAgICBpZiAoVU5MSUtFTFkoIW1vc3RSZWNlbnRseVVzZWRIYW5kbGUpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIG1vc3RSZWNlbnRseVVzZWRIYW5kbGUtPm1vdmVXcml0
YWJsZU9mZnNldFRvU3RhcnRJZlBvc3NpYmxlKCk7Ci0gICAgaWYgKG1vc3RSZWNlbnRseVVzZWRI
YW5kbGUtPmF2YWlsYWJsZUNhcGFjaXR5KCkgPj0gY2FwYWNpdHkpCi0gICAgICAgIHJldHVybiBt
b3N0UmVjZW50bHlVc2VkSGFuZGxlOwotCi0gICAgbV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5k
bGVzLmFwcGVuZChtX2lkZW50aWZpZXJzT2ZSZXVzYWJsZUhhbmRsZXMudGFrZUZpcnN0KCkpOwot
Ci0gICAgYXV0byBsZWFzdFJlY2VudGx5VXNlZElkZW50aWZpZXIgPSBtX2lkZW50aWZpZXJzT2ZS
ZXVzYWJsZUhhbmRsZXMuZmlyc3QoKTsKLSAgICBpZiAobGVhc3RSZWNlbnRseVVzZWRJZGVudGlm
aWVyICE9IG1vc3RSZWNlbnRseVVzZWRIYW5kbGUtPmlkZW50aWZpZXIoKSkgewotICAgICAgICBS
ZWZQdHIgaGFuZGxlID0gbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXMuZ2V0KGxlYXN0UmVjZW50
bHlVc2VkSWRlbnRpZmllcik7Ci0gICAgICAgIGlmIChoYW5kbGUtPm1vdmVXcml0YWJsZU9mZnNl
dFRvU3RhcnRJZlBvc3NpYmxlKCkgJiYgaGFuZGxlLT5hdmFpbGFibGVDYXBhY2l0eSgpID49IGNh
cGFjaXR5KQotICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBlbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpOworICAgIGlmIChVTkxJ
S0VMWShtX25lZWRzV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxheUxpc3RTdHJlYW0pKQorICAgICAg
ICBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVs
eTxNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpEaWRDcmVhdGVXYWtlVXBT
ZW1hcGhvcmVGb3JEaXNwbGF5TGlzdFN0cmVhbT4ocmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIo
KSwgM19zLCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdl
QXJyaXZlcyk7CisgICAgcmV0dXJuICptX3N0cmVhbUNvbm5lY3Rpb247CiB9CiAKLURpc3BsYXlM
aXN0OjpJdGVtQnVmZmVySGFuZGxlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRl
SXRlbUJ1ZmZlcihzaXplX3QgY2FwYWNpdHksIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBk
ZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6ZGlkQ3JlYXRlV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxheUxpc3RTdHJlYW0oSVBDOjpT
ZW1hcGhvcmUmJiBzZW1hcGhvcmUpCiB7Ci0gICAgaWYgKGF1dG8gaGFuZGxlID0gZmluZFJldXNh
YmxlRGlzcGxheUxpc3RIYW5kbGUoY2FwYWNpdHkpKSB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVB
TShTaGFyZWREaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiUmV1c2luZyBJdGVtc1siIDw8IGhhbmRs
ZS0+aWRlbnRpZmllcigpIDw8ICJdID0+IEltYWdlKCIgPDwgZGVzdGluYXRpb25CdWZmZXJJZGVu
dGlmaWVyIDw8ICIpIChyZW1haW5pbmcgY2FwYWNpdHk6ICIgPDwgaGFuZGxlLT5hdmFpbGFibGVD
YXBhY2l0eSgpIDw8ICIpIik7Ci0gICAgICAgIHJldHVybiBoYW5kbGUtPmNyZWF0ZUhhbmRsZSgp
OworICAgIGlmICghbV9zdHJlYW1Db25uZWN0aW9uKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgZGVmYXVsdFNoYXJlZEl0ZW1CdWZmZXJTaXplID0gMSA8PCAxNjsKLSAgICBzdGF0aWNf
YXNzZXJ0KGRlZmF1bHRTaGFyZWRJdGVtQnVmZmVyU2l6ZSA+IFNoYXJlZERpc3BsYXlMaXN0SGFu
ZGxlOjpoZWFkZXJTaXplKCkpOwotCi0gICAgYXV0byBzaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1v
cnk6OmFsbG9jYXRlKHN0ZDo6bWF4KGRlZmF1bHRTaGFyZWRJdGVtQnVmZmVyU2l6ZSwgY2FwYWNp
dHkgKyBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6aGVhZGVyU2l6ZSgpKSk7Ci0gICAgaWYgKCFz
aGFyZWRNZW1vcnkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBTaGFyZWRNZW1vcnk6Okhh
bmRsZSBzaGFyZWRNZW1vcnlIYW5kbGU7Ci0gICAgc2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUo
c2hhcmVkTWVtb3J5SGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRXcml0ZSk7
Ci0KLSAgICBhdXRvIGlkZW50aWZpZXIgPSBEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZp
ZXI6OmdlbmVyYXRlKCk7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6RGlkQ3JlYXRlU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoaWRlbnRpZmllciwgeyBXVEZNb3Zl
KHNoYXJlZE1lbW9yeUhhbmRsZSksIHNoYXJlZE1lbW9yeS0+c2l6ZSgpIH0sIGRlc3RpbmF0aW9u
QnVmZmVySWRlbnRpZmllciksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2Vu
ZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKLQot
ICAgIGF1dG8gbmV3SGFuZGxlID0gRGlzcGxheUxpc3RXcml0ZXJIYW5kbGU6OmNyZWF0ZShpZGVu
dGlmaWVyLCBzaGFyZWRNZW1vcnkucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgUkVMRUFTRV9BU1NF
UlQobmV3SGFuZGxlLCAiVGhlcmUgbXVzdCBiZSBlbm91Z2ggc3BhY2UgdG8gY3JlYXRlIHRoZSBo
YW5kbGUuIik7Ci0gICAgYXV0byBkaXNwbGF5TGlzdEhhbmRsZSA9IG5ld0hhbmRsZS0+Y3JlYXRl
SGFuZGxlKCk7Ci0KLSAgICBtX2lkZW50aWZpZXJzT2ZSZXVzYWJsZUhhbmRsZXMucHJlcGVuZChp
ZGVudGlmaWVyKTsKLSAgICBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlcy5zZXQoaWRlbnRpZmll
ciwgV1RGTW92ZShuZXdIYW5kbGUpKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShTaGFyZWREaXNw
bGF5TGlzdHMsIHN0cmVhbSA8PCAiQWxsb2NhdGVkIEl0ZW1zWyIgPDwgaWRlbnRpZmllciA8PCAi
XSA9PiBJbWFnZSgiIDw8IGRlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllciA8PCAiKSIpOwotICAg
IHJldHVybiBkaXNwbGF5TGlzdEhhbmRsZTsKLX0KLQotUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFyYW1ldGVycy5pZGVudGlmaWVyOwotfQotCi1S
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmVu
c3VyZUJhY2tlbmRDcmVhdGVkKCkKLXsKLSAgICBlbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigp
OwotICAgIHJldHVybiByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpOworICAgIG1fc3RyZWFt
Q29ubmVjdGlvbi0+c2V0V2FrZVVwU2VtYXBob3JlKFdURk1vdmUoc2VtYXBob3JlKSk7CisgICAg
bV9uZWVkc1dha2VVcFNlbWFwaG9yZUZvckRpc3BsYXlMaXN0U3RyZWFtID0gZmFsc2U7CiB9CiAK
IHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWNvcmROYXRpdmVJbWFnZVVzZShO
YXRpdmVJbWFnZSYgaW1hZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApp
bmRleCBhYTAyM2RjZjJkYjVhMzNhYWIxM2Y2OWJhMDE2MjkyZDMwNWFmNzY5Li5iYWU0Yzc5NzUx
MzQxYTYzNWNlMzk2NzE0YmQ0MDBmYjRkZTQyMmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmgKQEAgLTMzLDExICszMywxMyBAQAogI2luY2x1ZGUgIkltYWdlQnVmZmVy
QmFja2VuZEhhbmRsZS5oIgogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUg
Ik1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyTWVz
c2FnZXMuaCIKICNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0
ZXJzLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdVcGRhdGVJRC5oIgotI2luY2x1
ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KKyNpbmNsdWRlICJTdHJlYW1DbGllbnRDb25uZWN0
aW9uLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CkBAIC00
NSwxMSArNDcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLW5hbWVzcGFjZSBEaXNwbGF5
TGlzdCB7Ci1jbGFzcyBEaXNwbGF5TGlzdDsKLWNsYXNzIEl0ZW07Ci19Ci0KIGNsYXNzIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTsKIGNsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIFBpeGVsQnVmZmVyOwpA
QCAtNjEsMTMgKzU4LDEzIEBAIGVudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSA6IGJvb2w7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBEaXNwbGF5TGlzdFdyaXRlckhhbmRsZTsKIGNsYXNz
IFdlYlBhZ2U7CiAKIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eQogICAgIDogcHVi
bGljIElQQzo6TWVzc2FnZVNlbmRlcgogICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZl
cgotICAgICwgcHVibGljIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpDbGllbnQgeworICAgICwgcHVi
bGljIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpDbGllbnQKKyAgICAsIHB1YmxpYyBSZWZDb3VudGVk
PFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gewogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBjcmVhdGUoV2ViUGFnZSYp
OwogCkBAIC03NywxMSArNzQsNiBAQCBwdWJsaWM6CiAgICAgdXNpbmcgV2Vha1ZhbHVlVHlwZSA9
IEdQVVByb2Nlc3NDb25uZWN0aW9uOjpDbGllbnQ6OldlYWtWYWx1ZVR5cGU7CiAKICAgICBSZW1v
dGVSZXNvdXJjZUNhY2hlUHJveHkmIHJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpIHsgcmV0dXJu
IG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OyB9Ci0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1CdWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QgY2FwYWNpdHksIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZp
ZXIpOwotCi0gICAgdm9pZCBkaWRBcHBlbmREYXRhKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtQnVmZmVySGFuZGxlJiwgc2l6ZV90IG51bWJlck9mQnl0ZXMsIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaWRDaGFuZ2VJdGVtQnVmZmVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgZGVzdGluYXRpb25JbWFnZUJ1ZmZlcik7Ci0gICAgdm9pZCB3aWxsQXBwZW5kSXRl
bShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZvaWQgc2VuZERl
ZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7CiAKICAgICBTaGFyZWRNZW1vcnkqIHNoYXJl
ZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHNpemVfdCBkYXRhU2l6ZSwgSVBDOjpUaW1lb3V0KTsK
ICAgICBib29sIHdhaXRGb3JHZXRQaXhlbEJ1ZmZlclRvQ29tcGxldGUoSVBDOjpUaW1lb3V0KTsK
QEAgLTEwMSw3ICs5Myw2IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZm
ZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6
OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgV2ViQ29yZTo6RGVz
dGluYXRpb25Db2xvclNwYWNlJiwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQpOwogICAgIFN0cmluZyBn
ZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRp
b25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICBWZWN0b3I8dWludDhfdD4gZ2V0
RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwot
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllciBmbHVzaERpc3BsYXlM
aXN0QW5kQ29tbWl0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gZ2V0U2hhcmVhYmxlQml0bWFwKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uKTsKICAgICB2b2lkIGNhY2hlTmF0
aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpG
b250PiYmKTsKQEAgLTEyNSwxMCArMTE2LDEzIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNHUFVQ
cm9jZXNzQ29ubmVjdGlvbkNsb3NlZCgpIGNvbnN0IHsgcmV0dXJuICFtX2dwdVByb2Nlc3NDb25u
ZWN0aW9uOyB9CiAKKyAgICB2b2lkIGRpZENyZWF0ZVdha2VVcFNlbWFwaG9yZUZvckRpc3BsYXlM
aXN0U3RyZWFtKElQQzo6U2VtYXBob3JlJiYpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4KICAgICB2b2lkIHNlbmRUb1N0cmVhbShUJiYgbWVzc2FnZSwgT2JqZWN0SWRl
bnRpZmllcjxVPiBpZGVudGlmaWVyKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IE5vdCB5ZXQg
aW1wbGVtZW50ZWQuCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgbWFraW5n
IHRoZSBzZW5kIHRpbWVvdXQgZmluaXRlLgorICAgICAgICBzdHJlYW1Db25uZWN0aW9uKCkuc2Vu
ZChXVEZNb3ZlKG1lc3NhZ2UpLCBpZGVudGlmaWVyLCBTZWNvbmRzOjppbmZpbml0eSgpKTsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMTQ0LDYgKzEzOCwxNCBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShX
ZWJQYWdlJik7CiAKKyAgICBJUEM6OlN0cmVhbUNsaWVudENvbm5lY3Rpb24mIHN0cmVhbUNvbm5l
Y3Rpb24oKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYXV0byBzZW5kU3luY1Rv
U3RyZWFtKFQmJiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCBJUEM6OlRpbWVv
dXQgdGltZW91dCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdHJlYW1Db25uZWN0aW9uKCkuc2Vu
ZFN5bmMoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShyZXBseSksIHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKCksIHRpbWVvdXQpOworICAgIH0KKwogICAgIC8vIEdQVVByb2Nlc3NDb25uZWN0
aW9uOjpDbGllbnQKICAgICB2b2lkIGdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UoR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24mKSBmaW5hbDsKIApAQCAtMTU0LDIxICsxNTYsMTEgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGRpZEZsdXNoKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmll
ciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGRpZEZp
bmFsaXplUmVuZGVyaW5nVXBkYXRlKFJlbmRlcmluZ1VwZGF0ZUlEIGRpZFJlbmRlcmluZ1VwZGF0
ZUlEKTsKIAotICAgIFJlZlB0cjxEaXNwbGF5TGlzdFdyaXRlckhhbmRsZT4gbW9zdFJlY2VudGx5
VXNlZERpc3BsYXlMaXN0SGFuZGxlKCk7Ci0gICAgUmVmUHRyPERpc3BsYXlMaXN0V3JpdGVySGFu
ZGxlPiBmaW5kUmV1c2FibGVEaXNwbGF5TGlzdEhhbmRsZShzaXplX3QgY2FwYWNpdHkpOwotCi0g
ICAgdm9pZCBzZW5kV2FrZXVwTWVzc2FnZShjb25zdCBHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFy
Z3VtZW50cyYpOwotCisgICAgc3RkOjp1bmlxdWVfcHRyPElQQzo6U3RyZWFtQ2xpZW50Q29ubmVj
dGlvbj4gbV9zdHJlYW1Db25uZWN0aW9uOwogICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVh
dGlvblBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwogICAgIFdlYWtQdHI8R1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24+IG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb247CiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZVBy
b3h5IG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5IHsgKnRoaXMgfTsKIAotICAgIEhhc2hNYXA8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBSZWZQdHI8RGlzcGxh
eUxpc3RXcml0ZXJIYW5kbGU+PiBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlczsKLSAgICBEZXF1
ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXI+IG1faWRlbnRpZmll
cnNPZlJldXNhYmxlSGFuZGxlczsKLSAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcj4gbV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50
aWZpZXI7Ci0gICAgc3RkOjpvcHRpb25hbDxHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50
cz4gbV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHM7Ci0gICAgdW5zaWduZWQgbV9yZW1h
aW5pbmdJdGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dha2V1cCB7IDAgfTsKLQogICAgIHN0ZDo6
b3B0aW9uYWw8SVBDOjpTZW1hcGhvcmU+IG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmU7CiAgICAg
UmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeTsKICAgICB1
aW50NjRfdCBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5TGVuZ3RoIHsgMCB9OwpAQCAtMTc2
LDYgKzE2OCw4IEBAIHByaXZhdGU6CiAKICAgICBSZW5kZXJpbmdVcGRhdGVJRCBtX3JlbmRlcmlu
Z1VwZGF0ZUlEOwogICAgIFJlbmRlcmluZ1VwZGF0ZUlEIG1fZGlkUmVuZGVyaW5nVXBkYXRlSUQ7
CisKKyAgICBib29sIG1fbmVlZHNXYWtlVXBTZW1hcGhvcmVGb3JEaXNwbGF5TGlzdFN0cmVhbSB7
IHRydWUgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgppbmRleCBiNWVlOTU5MWFmMWZm
ZWU1MzM1ZTEyOWM5NGFmOTZiNTQ3Zjg0MWE1Li43OWFiZGJlMjQyNjRiM2JhNGMzZDVhZjQyMmU5
YzczZmQ4ZmFjZjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5tZXNzYWdlcy5pbgpAQCAtMjYsNiArMjYsNyBAQCBtZXNzYWdlcyAtPiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkgTm90UmVmQ291bnRlZCB7CiAgICAgRGlkQ3JlYXRlSW1hZ2VCdWZm
ZXJCYWNrZW5kKFdlYktpdDo6SW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSwgV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikKICAgICBEaWRGbHVzaChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIg
Zmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAgIERpZEZpbmFsaXplUmVuZGVyaW5nVXBkYXRl
KFdlYktpdDo6UmVuZGVyaW5nVXBkYXRlSUQgZGlkUmVuZGVyaW5nVXBkYXRlSUQpCisgICAgRGlk
Q3JlYXRlV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxheUxpc3RTdHJlYW0oSVBDOjpTZW1hcGhvcmUg
d2FrZVVwU2VtYXBob3JlKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcApp
bmRleCAwZjExODM4NTE4Y2I5MDg5ZWM1ZWNjZmFhYzMzNWUyMDFhNmMzNmY2Li42MDA1NGFhOTNl
M2I1YTI3YjdjNThiMjMxYTdkYWFhYmZjMzhiNDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcApAQCAtNzYxLDEzICs3NjEsNiBA
QCBzdGF0aWMgYm9vbCBlbmNvZGVSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0
ZXJzKElQQzo6RW5jb2RlciYgZW5jb2RlcgogICAgIGlmICghaWRlbnRpZmllcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBqc1NlbWFwaG9yZSA9IGpzT2JqZWN0LT5nZXQoZ2xv
YmFsT2JqZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT52bSgp
LCAic2VtYXBob3JlIl9zKSk7Ci0gICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgUmVmUHRyIHNlbWFwaG9yZU9iamVjdCA9IEpTSVBDU2VtYXBob3Jl
Ojp0b1dyYXBwZWQodG9SZWYoZ2xvYmFsT2JqZWN0KSwgdG9SZWYoanNTZW1hcGhvcmUpKTsKLSAg
ICBpZiAoIXNlbWFwaG9yZU9iamVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgYXV0
byBwYWdlUHJveHlJRCA9IGdldE9iamVjdElkZW50aWZpZXJGcm9tUHJvcGVydHk8V2ViUGFnZVBy
b3h5SWRlbnRpZmllclR5cGU+KGdsb2JhbE9iamVjdCwganNPYmplY3QsICJwYWdlUHJveHlJRCJf
cywgc2NvcGUpOwogICAgIGlmICghcGFnZVByb3h5SUQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTc3NiwxMCArNzY5LDggQEAgc3RhdGljIGJvb2wgZW5jb2RlUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZENyZWF0aW9uUGFyYW1ldGVycyhJUEM6OkVuY29kZXImIGVuY29kZXIKICAgICBpZiAoIXBh
Z2VJRCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBzZW1hcGhvcmUgPSBzZW1h
cGhvcmVPYmplY3QtPmV4Y2hhbmdlKCk7Ci0gICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0
aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzIHsgKmlkZW50aWZpZXIsIFdURk1vdmUoc2VtYXBob3Jl
KSwgKnBhZ2VQcm94eUlELCAqcGFnZUlEIH07CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENy
ZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzIHsgKmlkZW50aWZpZXIsICpwYWdlUHJveHlJRCwg
KnBhZ2VJRCB9OwogICAgIGVuY29kZXIgPDwgcGFyYW1ldGVyczsKLSAgICBzZW1hcGhvcmVPYmpl
Y3QtPmV4Y2hhbmdlKFdURk1vdmUocGFyYW1ldGVycy5yZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9y
ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441004</attachid>
            <date>2021-10-12 15:37:46 -0700</date>
            <delta_ts>2021-10-12 22:50:44 -0700</delta_ts>
            <desc>Rebase again + fix test failures</desc>
            <filename>bug-230860-20211012153745.patch</filename>
            <type>text/plain</type>
            <size>102685</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0MDI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDcxMmRhYWUwNzdlM2RiZDNi
Mjg2NDRkMDBhZmNhMTRhYmRmYzAwMGYuLmQyNTA0NjFiNTRhNzc1MWE1YzUzMTgwMDgzMGM0NWI5
M2FmZDBhNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgwIEBACisyMDIxLTEwLTEyICBXZW5zb24g
SHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
VXNlIElQQyBzdHJlYW1pbmcgZm9yIGNvbmN1cnJlbnQgZGlzcGxheSBsaXN0IHByb2Nlc3NpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDg2MAor
ICAgICAgICByZGFyOi8vODM0MzgwMzgKKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9u
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVidWlsZHMgdGhlIGNvbmN1cnJlbnQgZGlzcGxheSBs
aXN0IGFyY2hpdGVjdHVyZSBpbiB0aGUgd2ViIGFuZCBHUFUgcHJvY2Vzc2VzIG9uIHRvcCBvZiB0
aGUKKyAgICAgICAgc3RyZWFtYWJsZSBJUEMgY29ubmVjdGlvbnMgY3VycmVudGx5IHVzZWQgYnkg
V2ViR0wgaW4gdGhlIEdQVSBwcm9jZXNzLiBTZWUgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgICAgICBUaGVyZSBzaG91bGQgYmUgbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAg
ICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCk6
CisKKyAgICAgICAgUGFzcyBhIFN0cmVhbUNvbm5lY3Rpb25CdWZmZXIgZnJvbSB0aGUgd2ViIHBy
b2Nlc3MgdG8gdGhlIEdQVSBwcm9jZXNzIHdoZW4gY29uc3RydWN0aW5nCisgICAgICAgIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ7IHRoaXMgc2VydmVzIGFzIHRoZSBwb29sIG9mIHNoYXJlZCBtZW1v
cnkgdXNlZCB0byBzdG9yZSBzdHJlYW1pbmcgSVBDIG1lc3NhZ2VzIHNlbnQgZnJvbQorICAgICAg
ICB0aGUgd2ViIHByb2Nlc3MgdG8gdGhlIEdQVSBwcm9jZXNzLiBJJ3ZlIChzb21ld2hhdCBhcmJp
dHJhcmlseSkgY2hvc2VuIHRoZSBzaXplIG9mIHRoaXMgU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcgor
ICAgICAgICB0byBtYXRjaCBXZWJHTCdzIGNvbm5lY3Rpb24gYnVmZmVyLCB0aG91Z2ggdGhpcyBj
YW4gYmUgdHVuZWQgYXMgbmVlZGVkLiBJbiBhIGZ1dHVyZSBwYXRjaCwgd2UgbWF5IGFsc28gd2Fu
dCB0bworICAgICAgICBpbXBsZW1lbnQgYSBtZWNoYW5pc20gZm9yIHN0YXJ0aW5nIG91dCB3aXRo
IGEgc21hbGwgY29ubmVjdGlvbiBidWZmZXIsIGFuZCBncm93aW5nIGl0IGJ5IHN1Y2Nlc3NpdmVs
eSBsYXJnZXIKKyAgICAgICAgc2VnbWVudHMgYXMgbmVlZGVkLgorCisgICAgICAgICogR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIEdQVVByb2Nl
c3MvY29jb2EvR1BVUHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNz
OjphZGRpdGlvbmFsU3RhdGVGb3JEaWFnbm9zdGljUmVwb3J0IGNvbnN0KToKKworICAgICAgICBB
ZGQgYSBGSVhNRSBmb3IgcmUtaW50cm9kdWNpbmcgZGlhZ25vc3RpYyBzdGF0ZSBsb2dnaW5nIHdo
ZW4gdXNpbmcgc3RyZWFtYWJsZSBJUEMuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c3RhcnRMaXN0ZW5pbmdGb3JJUEMp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzdG9wTGlzdGVu
aW5nRm9ySVBDKToKKworICAgICAgICBBZGQgYW5kIHJlbW92ZSB0aGUgcmVtb3RlIGRpc3BsYXkg
bGlzdCBhcyBhIGRlc3RpbmF0aW9uIG9uIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJ3Mgc3Ry
ZWFtIGNvbm5lY3Rpb24uIE5vdGUKKyAgICAgICAgdGhhdCB0aGUgc3luY2hyb25vdXMgZGlzcGF0
Y2ggdG8gdGhlIG1haW4gdGhyZWFkIGhlcmUgaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIHRoZSBv
cmRlcmluZyBvZiBvdXQtb2Ytc3RyZWFtIElQQworICAgICAgICBtZXNzYWdlcyB0aGF0IG1heSBo
YXZlIGJlZW4gcmVjZWl2ZWQgb24gdGhlIElQQyB0aHJlYWQuCisKKyAgICAgICAgKiBHUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6aGFuZGxlSXRlbSk6CisgICAgICAgICogR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVJbWFnZUJ1ZmZlcjo6UmVtb3RlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVJbWFnZUJ1ZmZlcjo6YXBwbHkpOiBEZWxldGVkLgorCisgICAgICAgIEludHJvZHVjZSBgbV9y
ZW1vdGVEaXNwbGF5TGlzdGAgdG8gUmVtb3RlSW1hZ2VCdWZmZXIsIGFuZCByZW1vdmUgc29tZSBs
b2dpYyBmb3IgYXBwbHlpbmcgZGlzcGxheSBsaXN0IGl0ZW1zIHRoYXQKKyAgICAgICAgaXMgbm8g
bG9uZ2VyIG5lY2Vzc2FyeS4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQpOgorCisgICAgICAgIFNldCB1cCB0aGUgSVBDIHN0cmVh
bSBjb25uZWN0aW9uIGFuZCBzdHJlYW0gY29ubmVjdGlvbiB3b3JrIHF1ZXVlLCBhbmQgaW1tZWRp
YXRlbHkgc2VuZCBhIHdha2V1cCBzZW1hcGhvcmUgYmFjaworICAgICAgICB0byB0aGUgd2ViIHBy
b2Nlc3MuCisKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c3RhcnRM
aXN0ZW5pbmdGb3JJUEMpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
Ojp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OnN0b3BMaXN0ZW5pbmdGb3JJUEMpOgorCisgICAgICAgIEFkZCBhIG1lY2hh
bmlzbSB0byBpbW1lZGlhdGVseSB0ZWxsIGFsbCBgbV9yZW1vdGVEaXNwbGF5TGlzdHNgIHRvIHN0
b3AgbGlzdGVuaW5nIGZvciBzdHJlYW1pbmcgSVBDIG1lc3NhZ2VzIHdoZW4KKyAgICAgICAgdGhl
IG93bmluZyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHN0b3BzIGxpc3RlbmluZy4KKworICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaXNwYXRjaCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZENyZWF0ZUltYWdlQnVmZmVyQmFja2Vu
ZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdl
QnVmZmVyV2l0aFF1YWxpZmllZElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpjYWNoZU5hdGl2ZUltYWdlV2l0aFF1YWxpZmllZElkZW50aWZpZXIp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjYWNoZUZvbnRXaXRo
UXVhbGlmaWVkSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6YXBwbHlNZWRpYUl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjpSZXBsYXllckRl
bGVnYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjpkaWRDcmVhdGVNYXNrSW1h
Z2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpSZXBsYXllckRlbGVnYXRlOjpkaWRSZXNldE1hc2tJbWFnZUJ1ZmZlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdh
dGU6OnJlY29yZFJlc291cmNlVXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6c3VibWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6bmV4dERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJBZnRlckFwcGx5
aW5nRGlzcGxheUxpc3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6d2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Ondha2VVcEFuZEFwcGx5RGlzcGxheUxp
c3RXaXRoUXVhbGlmaWVkSWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNldE5leHRJdGVtQnVmZmVyVG9SZWFkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkQ3JlYXRlU2hhcmVk
RGlzcGxheUxpc3RIYW5kbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZVdpdGhRdWFsaWZp
ZWRJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6cmVzdW1lRnJvbVBlbmRpbmdXYWtldXBJbmZvcm1hdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZENyZWF0ZU1hc2tJbWFn
ZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OmRpZFJlc2V0TWFza0ltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGVjb2RlSXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Omxhc3RLbm93blN0YXRlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlTGFz
dEtub3duU3RhdGUpOiBEZWxldGVkLgorCisgICAgICAgIFJlbW92ZSBsb2dpYyBmb3IgY29vcmRp
bmF0aW5nIHdha2V1cHMgYW5kIHNoYXJlZCBkaXNwbGF5IGxpc3QgaXRlbSBidWZmZXJzIGluIHRo
ZSBHUFUgcHJvY2Vzcy4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5oOgorCisgICAgICAgIFN1YmNsYXNzIElQQzo6U3RyZWFtTWVzc2FnZVJl
Y2VpdmVyLiBJbiB0aGlzIG5ldyBjb25jdXJyZW50IGRpc3BsYXkgbGlzdCBtb2RlbCwgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZCBzZXJ2ZXMKKyAgICAgICAgYXMgYSBzdHJlYW1pbmcgSVBDIGRlc3Rp
bmF0aW9uIGFsb25nc2lkZSBlYWNoIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgaW4gdGhlIEdQ
VSBwcm9jZXNzOyBhbGwgbWVzc2FnZXMKKyAgICAgICAgcHJldmlvdXNseSBzZW50IHRvIHRoZSBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kIGFzIG5vcm1hbCBJUEMgYXJlIG5vdyBzZW50IHRocm91Z2gg
dGhlIGNvbm5lY3Rpb24gc3RyZWFtICh0aG91Z2gKKyAgICAgICAgc29tZSBtdXN0IGJlIG1hcmtl
ZCBhcyBub24tc3RyZWFtLWVuY29kYWJsZSkuCisKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6c3RyZWFtQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRlY29kZUFuZENyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpQZW5kaW5nV2FrZXVwSW5mb3JtYXRpb246OnNob3VsZFBlcmZvcm1XYWtldXAgY29uc3QpOiBE
ZWxldGVkLgorCisgICAgICAgIERlbGV0ZSBtb3JlIGxvZ2ljIHJlbGF0ZWQgdG8gY29uY3VycmVu
dCBkaXNwbGF5IGxpc3RzLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluOgorCisgICAgICAgIE1ha2UgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZCBhIHN0cmVhbSBtZXNzYWdlIHJlY2VpdmVyLgorCisgICAgICAgICogR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzLmg6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRl
cnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6CisKKyAgICAgICAgUmVtb3ZlIHRoZSBJUEM6
OlNlbWFwaG9yZSBoZXJlLCB0aGF0IHdhcyBwcmV2aW91c2x5IHVzZWQgZm9yIHF1aWNrIEdQVSBw
cm9jZXNzIHdha2V1cHMuIFRoaXMgc2VtYXBob3JlIGlzIG5vCisgICAgICAgIGxvbmdlciBuZWVk
ZWQgYmVjYXVzZSB3ZSBhbHdheXMgdXNlIElQQzo6U2VtYXBob3JlIGZvciB3YWtpbmcgdGhlIEdQ
VSBwcm9jZXNzIHdoZW4gdXNpbmcgc3RyZWFtaW5nIElQQy4KKworICAgICAgICAqIEdQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDoKKworICAgICAgICBNYWtlIHRo
ZSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IHRlbXBsYXRlIGNsYXNzIGRpcmVjdGx5IHN1YmNsYXNz
IENvbmNyZXRlSW1hZ2VCdWZmZXIgaW5zdGVhZCBvZgorICAgICAgICBEaXNwbGF5TGlzdDo6SW1h
Z2VCdWZmZXI7IGFkZGl0aW9uYWxseSwgaW50cm9kdWNlIGEgYFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eSBtX3JlbW90ZURpc3BsYXlMaXN0YCBoZXJlLAorICAgICAgICB3aGljaCB3ZSB1
c2UgYXMgb3VyIGRyYXdpbmcgZ3JhcGhpY3MgY29udGV4dC4KKworICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojp+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OlJlbW90ZUltYWdlQnVmZmVyUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZWNvcmROYXRpdmVJ
bWFnZVVzZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnJlY29y
ZEZvbnRVc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZWNv
cmRJbWFnZUJ1ZmZlclVzZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJv
eHk6OmNsZWFyRGlzcGxheUxpc3QpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjplbnN1
cmVHUFVQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6Z3B1UHJvY2Vzc0Nvbm5lY3Rpb25EaWRDbG9zZSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlUmVtb3RlSW1hZ2VCdWZm
ZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNoYXJl
ZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpkZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldERhdGFVUkxGb3JJ
bWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6Z2V0RGF0YUZvckltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpnZXRTaGFyZWFibGVCaXRtYXApOgorCisgICAgICAgIFNlbmQgYWxs
IElQQyBtZXNzYWdlcyB0byBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIGluIHRoZSBHUFUgcHJvY2Vz
cyB0aHJvdWdoIHRoZSBzdHJlYW0gY29ubmVjdGlvbiwgaW5zdGVhZCBvZgorICAgICAgICB1c2lu
ZyBzdGFuZGFyZCBJUEMgbWVzc2FnZXMuIFRoaXMgZ3VhcmFudGVlcyBvcmRlcmluZyB3aGVuIHJl
Y2VpdmluZyBjYWNoZWQgcmVzb3VyY2VzLgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6Y2FjaGVOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y2FjaGVGb250KToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkZWxldGVBbGxGb250cyk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZVJlbW90ZVJlc291cmNl
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmaW5hbGl6
ZVJlbmRlcmluZ1VwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmVuc3VyZUJhY2tlbmRDcmVhdGVkKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpzdHJlYW1Db25u
ZWN0aW9uKToKKworICAgICAgICBBZGQgYSBtZWNoYW5pc20gdG8gZW5zdXJlIHRoYXQgd2UgaGF2
ZSB0aGUgSVBDIHN0cmVhbSB3YWtldXAgc2VtYXBob3JlIGJlZm9yZSBncmFiYmluZyB0aGUgc3Ry
ZWFtIGNvbm5lY3Rpb24uCisKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpkaWRDcmVhdGVXYWtlVXBTZW1hcGhvcmVGb3JEaXNwbGF5TGlzdFN0cmVhbSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2lsbEFwcGVuZEl0
ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OnNlbmRXYWtldXBNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OmRpZEFwcGVuZERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6Om1vc3RSZWNlbnRseVVzZWREaXNwbGF5TGlzdEhhbmRsZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZmluZFJl
dXNhYmxlRGlzcGxheUxpc3RIYW5kbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUl0ZW1CdWZmZXIpOiBEZWxldGVkLgorCisg
ICAgICAgIFJlbW92ZSBhbGwgbG9naWMgcHJldmlvdXNseSB1c2VkIHRvIGNvb3JkaW5hdGUgY29u
Y3VycmVudCBkaXNwbGF5IGxpc3QgcHJvY2Vzc2luZyBvbiB0aGUgcmVtb3RlIHJlbmRlcmluZwor
ICAgICAgICBiYWNrZW5kLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5KToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpzZW5kVG9TdHJlYW0pOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNlbmRTeW5jVG9TdHJlYW0p
OgorCisgICAgICAgIEFkZCBoZWxwZXIgbWV0aG9kcyB0byBzZW5kIElQQyBtZXNzYWdlcyB0byB0
aGUgcmVtb3RlIHJlbmRlcmluZyBiYWNrZW5kIHRocm91Z2ggdGhlIGNvbm5lY3Rpb24gc3RyZWFt
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9JUENU
ZXN0aW5nQVBJLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6ZW5jb2RlUmVt
b3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyk6CisKIDIwMjEtMTAtMTIgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgU2Nyb2xsaW5n
IHRocmVhZCBhbmltYXRpb25zIG5lZWQgdG8gY29tbWl0IGxheWVycyBvbiB0aGUgc2Nyb2xsaW5n
IHRocmVhZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDg1Y2E4OGY3YTk4MjQ2MjYyYzMxYTdmYjQxNzc5OTUw
NTNlNDljZWUuLjY2OTk5MGJlYzk3ODY2OGJlZmMzY2JjOTM3MGE4MjViY2Q3MTUyZTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAKQEAgLTQ3NCwxMCArNDc0LDEwIEBAIFJlbW90ZUltYWdlRGVjb2RlckFWRlByb3h5
JiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjppbWFnZURlY29kZXJBVkZQcm94eSgpCiB9CiAj
ZW5kaWYKIAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGVSZW5kZXJpbmdC
YWNrZW5kKFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJiBjcmVhdGlv
blBhcmFtZXRlcnMpCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRl
cmluZ0JhY2tlbmQoUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmIGNy
ZWF0aW9uUGFyYW1ldGVycywgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiYgc3RyZWFtQnVm
ZmVyKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWFw
LmVuc3VyZShjcmVhdGlvblBhcmFtZXRlcnMuaWRlbnRpZmllciwgWyZdKCkgewotICAgICAgICBy
ZXR1cm4gSVBDOjpTY29wZWRBY3RpdmVNZXNzYWdlUmVjZWl2ZVF1ZXVlIHsgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKGNyZWF0aW9uUGFyYW1ldGVycykpIH07
CisgICAgICAgIHJldHVybiBJUEM6OlNjb3BlZEFjdGl2ZU1lc3NhZ2VSZWNlaXZlUXVldWUgeyBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoY3JlYXRpb25QYXJh
bWV0ZXJzKSwgV1RGTW92ZShzdHJlYW1CdWZmZXIpKSB9OwogICAgIH0pOwogICAgIEFTU0VSVF9V
TlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCAw
NWE1MDVmZWUzMjkzNzhiMTMwYTljOTk3MzI2MDZiZTIwYjQ4N2M4Li44MGQyMWRlZGViZWVhYTEz
YmQwODM1NTVmNmNmY2M2YzExZjJiN2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTE3OCw3ICsxNzgsNyBAQCBw
cml2YXRlOgogICAgIFJlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyJiBtZWRpYVJlY29yZGVyTWFu
YWdlcigpOwogI2VuZGlmCiAKLSAgICB2b2lkIGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmKTsKKyAgICB2b2lkIGNyZWF0ZVJl
bmRlcmluZ0JhY2tlbmQoUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYm
LCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJik7CiAgICAgdm9pZCByZWxlYXNlUmVuZGVy
aW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiAKICNpZiBFTkFCTEUoV0VC
R0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IGZlNDhjYTIwYmEwODk1YWI4YWY3
NGU5NjI2NzRlZjFiM2RkZTg3ZmQuLmMxYmY4MDE5Y2VhYjQxZjc5YTZmNWFkZWUxZmE4NjE2ZTIw
NWViMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0yMyw3ICsyMyw3IEBACiAj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiBtZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKLSAgICB2b2lkIENyZWF0ZVJlbmRlcmluZ0Jh
Y2tlbmQoc3RydWN0IFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1l
dGVycyBjcmVhdGlvblBhcmFtZXRlcnMpCisgICAgdm9pZCBDcmVhdGVSZW5kZXJpbmdCYWNrZW5k
KHN0cnVjdCBXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMg
Y3JlYXRpb25QYXJhbWV0ZXJzLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXIgc3RyZWFtQnVm
ZmVyKQogICAgIHZvaWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKICNpZiBFTkFCTEUo
V0VCR0wpCiAgICAgdm9pZCBDcmVhdGVHcmFwaGljc0NvbnRleHRHTChzdHJ1Y3QgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIFdlYktpdDo6R3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyIGdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgV2ViS2l0OjpS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciwgSVBD
OjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyIHN0cmVhbSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9jb2NvYS9HUFVQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvY29jb2EvR1BVUHJvY2Vzc0NvY29hLm1tCmluZGV4IDJmOWNhMTg3ZjMwMmU3MjUz
YzA2ZjkzZDQ2NmY4MTNkZTg3MDMzZTMuLmIwMmZkOTQ5MmU3NWM5NzA4NTkzNGY2MDE4Y2Y4MWVk
NWNiNTkyNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9jb2NvYS9HUFVQ
cm9jZXNzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2NvY29hL0dQVVBy
b2Nlc3NDb2NvYS5tbQpAQCAtNTEsMTAgKzUxLDcgQEAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4g
R1BVUHJvY2Vzczo6YWRkaXRpb25hbFN0YXRlRm9yRGlhZ25vc3RpY1JlcG9ydCgpIGNvbnN0CiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGF1dG8gc3RhdGVJbmZvID0g
YWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6YmFj
a2VuZE1hcC5zaXplKCldKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgaWRlbnRpZmllckFuZEJh
Y2tlbmQgOiBiYWNrZW5kTWFwKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgW2JhY2tlbmRJZGVu
dGlmaWVyLCBiYWNrZW5kXSA9IGlkZW50aWZpZXJBbmRCYWNrZW5kOwotICAgICAgICAgICAgICAg
IFtzdGF0ZUluZm8gc2V0T2JqZWN0OkAobmFtZShiYWNrZW5kLT5sYXN0S25vd25TdGF0ZSgpKSkg
Zm9yS2V5OmJhY2tlbmRJZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKV07Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICAvLyBGSVhNRTogTG9nIHNvbWUgYWRkaXRpb25hbCBkaWFnbm9zdGljIHN0
YXRlIG9uIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuCiAgICAgICAgICAgICBbd2ViUHJvY2Vzc0Nv
bm5lY3Rpb25JbmZvIHNldE9iamVjdDpzdGF0ZUluZm8uZ2V0KCkgZm9yS2V5OndlYlByb2Nlc3NJ
ZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKV07CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXIuY3BwCmluZGV4IGJiOGQ2NDRiNmEyYjdiNmUxMDg2YTY1NjJiM2UxNTM5OGEzZDFh
YjMuLjdmNjNmOTZjMTVkM2U0MmNmOTQ4YjhkZmJhOTFmNWIxZjQxZDFjMTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTU1LDcgKzU1LDEwIEBAIHZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6c3RhcnRMaXN0ZW5pbmdGb3JJUEMoKQogewogICAgIEFTU0VSVCghbV9p
c0xpc3RlbmluZ0ZvcklQQyk7CiAgICAgbV9pc0xpc3RlbmluZ0ZvcklQQyA9IHRydWU7Ci0gICAg
Ly8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZCB5ZXQuCisgICAgLy8gRklYTUU6IENhbiB3ZSBhdm9p
ZCBzeW5jaHJvbm91cyBkaXNwYXRjaCBoZXJlIGJ5IGFkanVzdGluZyB0aGUgYXNzZXJ0aW9uIGlu
IGBDb25uZWN0aW9uOjplbnF1ZXVlTWF0Y2hpbmdNZXNzYWdlc1RvTWVzc2FnZVJlY2VpdmVRdWV1
ZWA/CisgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFsmXSB7CisgICAgICAgIG1fcmVuZGVy
aW5nQmFja2VuZC0+c3RyZWFtQ29ubmVjdGlvbigpLnN0YXJ0UmVjZWl2aW5nTWVzc2FnZXMoKnRo
aXMsIE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLm9iamVjdCgpLnRvVUludDY0KCkpOworICAg
IH0pOwogfQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnN0b3BMaXN0ZW5pbmdG
b3JJUEMoKQpAQCAtNjMsNyArNjYsNyBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OnN0b3BMaXN0ZW5pbmdGb3JJUEMoKQogICAgIGlmICghbV9pc0xpc3RlbmluZ0ZvcklQQykKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZCB5ZXQuCisgICAg
bV9yZW5kZXJpbmdCYWNrZW5kLT5zdHJlYW1Db25uZWN0aW9uKCkuc3RvcFJlY2VpdmluZ01lc3Nh
Z2VzKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLm9iamVjdCgpLnRvVUludDY0KCkpOwogICAg
IG1faXNMaXN0ZW5pbmdGb3JJUEMgPSBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAppbmRleCA1N2M4OWFj
N2M1ZmM1Y2UyMDE2ZTFlYTQ5NThlYzc3NjEzODI5NTBmLi5hM2Q0OTRmZThiZjZhMTk2NDdlZjE5
MGM5ZGI0MDQyYWVjZTY3MjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1
ZGUgIkRlY29kZXIuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIu
aCIKKyNpbmNsdWRlICJTY29wZWRBY3RpdmVNZXNzYWdlUmVjZWl2ZVF1ZXVlLmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9Db25jcmV0ZUltYWdlQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNw
bGF5TGlzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgpAQCAtNTQs
OCArNTYsOSBAQCBwdWJsaWM6CiAgICAgICAgIDogQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXIocGFy
YW1ldGVycywgV1RGTW92ZShiYWNrZW5kKSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLm9i
amVjdCgpKQogICAgICAgICAsIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZChyZW1vdGVSZW5kZXJp
bmdCYWNrZW5kKQogICAgICAgICAsIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAgICAgICAgLCBtX3JlbW90ZURpc3BsYXlMaXN0KHsg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y3JlYXRlKCp0aGlzLCByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5wcm9jZXNzSWRlbnRpZmll
cigpLCByZW1vdGVSZW5kZXJpbmdCYWNrZW5kKSB9KQogICAgIHsKLSAgICAgICAgbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmRpZENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChtX2JhY2tlbmQtPmNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpOworICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZGlkQ3JlYXRlSW1hZ2VCdWZm
ZXJCYWNrZW5kKG1fYmFja2VuZC0+Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKCksIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgKm1fcmVtb3RlRGlzcGxheUxpc3QuZ2V0KCkpOwog
ICAgIH0KIAogICAgIH5SZW1vdGVJbWFnZUJ1ZmZlcigpCkBAIC03Nyw0MSArODAsOSBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwog
Ci0gICAgYm9vbCBhcHBseShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAgewotICAgICAgICBpZiAoaXRl
bS5pczxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0UGl4ZWxCdWZmZXI+KCkpIHsKLSAgICAgICAg
ICAgIGF1dG8mIGdldFBpeGVsQnVmZmVySXRlbSA9IGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpHZXRQaXhlbEJ1ZmZlcj4oKTsKLSAgICAgICAgICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBC
YXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Z2V0UGl4ZWxCdWZmZXIoZ2V0UGl4ZWxCdWZmZXJJdGVt
Lm91dHB1dEZvcm1hdCgpLCBnZXRQaXhlbEJ1ZmZlckl0ZW0uc3JjUmVjdCgpKTsKLSAgICAgICAg
ICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5wb3B1bGF0ZUdldFBpeGVsQnVmZmVyU2hhcmVk
TWVtb3J5KFdURk1vdmUocGl4ZWxCdWZmZXIpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1
dFBpeGVsQnVmZmVyPigpKSB7Ci0gICAgICAgICAgICBhdXRvJiBwdXRQaXhlbEJ1ZmZlckl0ZW0g
PSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI+KCk7Ci0gICAg
ICAgICAgICBwdXRQaXhlbEJ1ZmZlcihwdXRQaXhlbEJ1ZmZlckl0ZW0ucGl4ZWxCdWZmZXIoKSwg
cHV0UGl4ZWxCdWZmZXJJdGVtLnNyY1JlY3QoKSwgcHV0UGl4ZWxCdWZmZXJJdGVtLmRlc3RQb2lu
dCgpLCBwdXRQaXhlbEJ1ZmZlckl0ZW0uZGVzdEZvcm1hdCgpKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZsdXNoQ29udGV4dD4oKSkgewotICAgICAgICAgICAgQmFzZUNvbmNyZXRlSW1hZ2VC
dWZmZXI6OmZsdXNoQ29udGV4dCgpOwotICAgICAgICAgICAgYXV0byBpZGVudGlmaWVyID0gaXRl
bS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNoQ29udGV4dD4oKS5pZGVudGlmaWVyKCk7
Ci0gICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2hhcmVkRGlzcGxheUxpc3RzLCBzdHJlYW0g
PDwgIkFja25vd2xlZGdpbmcgRmx1c2h7IiA8PCBpZGVudGlmaWVyIDw8ICJ9IGluIEltYWdlKCIg
PDwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPDwgIikiKTsKLSAgICAgICAgICAgIG1f
cmVtb3RlUmVuZGVyaW5nQmFja2VuZC5kaWRGbHVzaChpZGVudGlmaWVyLCBtX3JlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpNZXRhQ29tbWFuZENo
YW5nZUl0ZW1CdWZmZXI+KCkpIHsKLSAgICAgICAgICAgIGF1dG8gbmV4dEJ1ZmZlcklkZW50aWZp
ZXIgPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVt
QnVmZmVyPigpLmlkZW50aWZpZXIoKTsKLSAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShTaGFy
ZWREaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiU3dpdGNoaW5nIHRvIEl0ZW1zWyIgPDwgbmV4dEJ1
ZmZlcklkZW50aWZpZXIgPDwgIl0iKTsKLSAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5zZXROZXh0SXRlbUJ1ZmZlclRvUmVhZChuZXh0QnVmZmVySWRlbnRpZmllciwgbV9yZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmFwcGx5TWVk
aWFJdGVtKGl0ZW0sIGNvbnRleHQpOwotICAgIH0KLQogICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQmIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZDsKICAgICBRdWFsaWZpZWRSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7CisgICAgSVBDOjpT
Y29wZWRBY3RpdmVNZXNzYWdlUmVjZWl2ZVF1ZXVlPFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI+
IG1fcmVtb3RlRGlzcGxheUxpc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmNwcAppbmRleCBjMjg3N2UxZTkxYzlmYWY1YWI1MDI1OWFhNGNhMTc0ZjI3
MjFkOTgxLi43ZDkxZjM4MzM5NWE1MGVjZGM2ODE2MjFiMTI3MWZiM2Q5OGVhM2UxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCiAKLSNpbmNsdWRlICJEaXNwbGF5TGlzdFJlYWRlckhhbmRsZS5oIgogI2luY2x1ZGUg
IkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlci5oIgpAQCAtNzMsNDcgKzcyLDQ3IEBACiBu
YW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1SZWY8UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJiBjcmVhdGlvblBhcmFtZXRlcnMpCitSZWY8
UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJiBjcmVhdGlvblBhcmFtZXRlcnMs
IElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmIHN0cmVhbUJ1ZmZlcikKIHsKLSAgICBhdXRv
IGluc3RhbmNlID0gYWRvcHRSZWYoKm5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKGdwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MsIFdURk1vdmUoY3JlYXRpb25QYXJhbWV0ZXJzKSkpOworICAgIGF1
dG8gaW5zdGFuY2UgPSBhZG9wdFJlZigqbmV3IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzcywgV1RGTW92ZShjcmVhdGlvblBhcmFtZXRlcnMpLCBXVEZNb3Zl
KHN0cmVhbUJ1ZmZlcikpKTsKICAgICBpbnN0YW5jZS0+c3RhcnRMaXN0ZW5pbmdGb3JJUEMoKTsK
ICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKLVJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcywgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYm
IGNyZWF0aW9uUGFyYW1ldGVycykKLSAgICA6IG1fd29ya1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRl
KCJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHdvcmsgcXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OlNl
cmlhbCwgV29ya1F1ZXVlOjpRT1M6OlVzZXJJbnRlcmFjdGl2ZSkpCitSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mm
IGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlv
blBhcmFtZXRlcnMmJiBjcmVhdGlvblBhcmFtZXRlcnMsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1
ZmZlciYmIHN0cmVhbUJ1ZmZlcikKKyAgICA6IG1fd29ya1F1ZXVlKCJSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kIHdvcmsgcXVldWUiKQorICAgICwgbV9zdHJlYW1Db25uZWN0aW9uKElQQzo6U3RyZWFt
U2VydmVyQ29ubmVjdGlvbjo6Y3JlYXRlKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY29ubmVj
dGlvbigpLCBXVEZNb3ZlKHN0cmVhbUJ1ZmZlciksIG1fd29ya1F1ZXVlKSkKICAgICAsIG1fcmVt
b3RlUmVzb3VyY2VDYWNoZShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLndlYlByb2Nlc3NJZGVu
dGlmaWVyKCkpCiAgICAgLCBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcykKICAgICAsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoY3JlYXRp
b25QYXJhbWV0ZXJzLmlkZW50aWZpZXIpCi0gICAgLCBtX3Jlc3VtZURpc3BsYXlMaXN0U2VtYXBo
b3JlKFdURk1vdmUoY3JlYXRpb25QYXJhbWV0ZXJzLnJlc3VtZURpc3BsYXlMaXN0U2VtYXBob3Jl
KSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6RGlkQ3JlYXRlV2FrZVVwU2VtYXBob3JlRm9y
RGlzcGxheUxpc3RTdHJlYW0obV93b3JrUXVldWUud2FrZVVwU2VtYXBob3JlKCkpLCBtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpzdGFydExpc3RlbmluZ0ZvcklQQygpCiB7Ci0gICAgbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLT5jb25uZWN0aW9uKCkuYWRkV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd29ya1F1ZXVl
LCB0aGlzLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCkpOworICAgIG1f
c3RyZWFtQ29ubmVjdGlvbi0+c3RhcnRSZWNlaXZpbmdNZXNzYWdlcygqdGhpcywgTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9yZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpKTsKIH0KIAogUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQogewogICAgIC8vIE1ha2Ugc3VyZSB3ZSBk
ZXN0cm95IHRoZSBSZXNvdXJjZUNhY2hlIG9uIHRoZSBXb3JrUXVldWUgc2luY2UgaXQgZ2V0cyBw
b3B1bGF0ZWQgb24gdGhlIFdvcmtRdWV1ZS4KICAgICAvLyBNYWtlIHN1cmUgcmVuZGVyaW5nIHJl
c291cmNlIHJlcXVlc3QgaXMgcmVsZWFzZWQgYWZ0ZXIgZGVzdHJveWluZyB0aGUgY2FjaGUuCi0g
ICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFtyZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0ID0gV1RG
TW92ZShtX3JlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QpLCByZW1vdGVSZXNvdXJjZUNhY2hlID0g
V1RGTW92ZShtX3JlbW90ZVJlc291cmNlQ2FjaGUpXSB7IH0pOworICAgIG1fd29ya1F1ZXVlLmRp
c3BhdGNoKFtyZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0ID0gV1RGTW92ZShtX3JlbmRlcmluZ1Jl
c291cmNlc1JlcXVlc3QpLCByZW1vdGVSZXNvdXJjZUNhY2hlID0gV1RGTW92ZShtX3JlbW90ZVJl
c291cmNlQ2FjaGUpXSB7IH0pOwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnN0
b3BMaXN0ZW5pbmdGb3JJUEMoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICAvLyBUaGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBkZXN0cnVjdG9yIHdvbid0IGJlIGNh
bGxlZCB1bnRpbCBkaXNjb25uZWN0KCkgaXMgY2FsbGVkIGFuZCB3ZSB1bnJlZ2lzdGVyIG91cnNl
bHZlcyBhcyBhIFdvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlciBiZWNhdXNlCi0gICAgLy8gdGhlIElQ
Qzo6Q29ubmVjdGlvbiByZWZzIGl0cyBXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXJzLgotICAgIG1f
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpLnJlbW92ZVdvcmtRdWV1ZU1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCkpOwor
ICAgIG1fc3RyZWFtQ29ubmVjdGlvbi0+c3RvcFJlY2VpdmluZ01lc3NhZ2VzKE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7CisgICAgZm9yIChhdXRvJiByZW1vdGVDb250
ZXh0IDogc3RkOjpleGNoYW5nZShtX3JlbW90ZURpc3BsYXlMaXN0cywgeyB9KSkKKyAgICAgICAg
cmVtb3RlQ29udGV4dC5zdG9wTGlzdGVuaW5nRm9ySVBDKCk7CiB9CiAKIHZvaWQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6ZGlzcGF0Y2goRnVuY3Rpb248dm9pZCgpPiYmIHRhc2spCiB7Ci0gICAg
bV93b3JrUXVldWUtPmRpc3BhdGNoKFdURk1vdmUodGFzaykpOworICAgIG1fd29ya1F1ZXVlLmRp
c3BhdGNoKFdURk1vdmUodGFzaykpOwogfQogCiBJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKQEAgLTEyNiwyNiAr
MTI1LDkgQEAgdWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckRl
c3RpbmF0aW9uSUQoKSBjb25zdAogICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyLnRvVUludDY0KCk7CiB9CiAKLWJvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6YXBwbHlN
ZWRpYUl0ZW0oRGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUgaXRlbSwgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKCFp
dGVtLmlzPERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE+KCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGF1dG8mIG1lZGlhSXRlbSA9IGl0ZW0uZ2V0PERpc3BsYXlMaXN0OjpQ
YWludEZyYW1lRm9yTWVkaWE+KCk7Ci0gICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFsmLCBn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBt
ZWRpYVBsYXllcklkZW50aWZpZXIgPSBtZWRpYUl0ZW0uaWRlbnRpZmllcigpXSB7Ci0gICAgICAg
IGF1dG8gcGxheWVyID0gZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+cmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyUHJveHkoKS5tZWRpYVBsYXllcihtZWRpYVBsYXllcklkZW50aWZpZXIpOwotICAg
ICAgICBpZiAoIXBsYXllcikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgLy8gSXQgaXMg
Y3VycmVudGx5IG5vdCBzYWZlIHRvIGNhbGwgcGFpbnRGcmFtZUZvck1lZGlhKCkgb2ZmIHRoZSBt
YWluIHRocmVhZC4KLSAgICAgICAgY29udGV4dC5wYWludEZyYW1lRm9yTWVkaWEoKnBsYXllciwg
bWVkaWFJdGVtLmRlc3RpbmF0aW9uKCkpOwotICAgIH0pOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZENyZWF0ZUltYWdlQnVmZmVyQmFja2Vu
ZChJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlLCBRdWFsaWZpZWRSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQordm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoSW1hZ2VCdWZmZXJC
YWNrZW5kSGFuZGxlIGhhbmRsZSwgUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciYg
cmVtb3RlRGlzcGxheUxpc3QpCiB7CisgICAgbV9yZW1vdGVEaXNwbGF5TGlzdHMuYWRkKHJlbW90
ZURpc3BsYXlMaXN0KTsKICAgICBNRVNTQUdFX0NIRUNLKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllci5wcm9jZXNzSWRlbnRpZmllcigpID09IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+
d2ViUHJvY2Vzc0lkZW50aWZpZXIoKSwgIlNlbmRpbmcgZGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNr
ZW5kKCkgbWVzc2FnZSB0byB0aGUgd3Jvbmcgd2ViIHByb2Nlc3MuIik7CiAgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpEaWRDcmVhdGVJbWFnZUJ1ZmZlckJh
Y2tlbmQoV1RGTW92ZShoYW5kbGUpLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIub2JqZWN0
KCkpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KQEAgLTE5MCwyMTMgKzE3Miw2
IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXJXaXRoUXVh
bGlmaWVkSWRlbnRpZmllcihjb25zdCBGbG9hCiAKICAgICBtX3JlbW90ZVJlc291cmNlQ2FjaGUu
Y2FjaGVJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlQnVmZmVyUmVzb3VyY2VJZGVudGlm
aWVyKTsKICAgICB1cGRhdGVSZW5kZXJpbmdSZXNvdXJjZVJlcXVlc3QoKTsKLQotICAgIGlmICht
X3BlbmRpbmdXYWtldXBJbmZvICYmIG1fcGVuZGluZ1dha2V1cEluZm8tPnNob3VsZFBlcmZvcm1X
YWtldXAoaW1hZ2VCdWZmZXJSZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAgICByZXN1bWVGcm9t
UGVuZGluZ1dha2V1cEluZm9ybWF0aW9uKCk7Ci19Ci0KLVJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OlJlcGxheWVyRGVsZWdhdGU6OlJlcGxheWVyRGVsZWdhdGUoV2ViQ29yZTo6SW1hZ2VCdWZmZXIm
IGRlc3RpbmF0aW9uLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiByZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLCBQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcikKLSAgICA6IG1fZGVz
dGluYXRpb24oZGVzdGluYXRpb24pCi0gICAgLCBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQocmVt
b3RlUmVuZGVyaW5nQmFja2VuZCkKLSAgICAsIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXIod2ViUHJv
Y2Vzc0lkZW50aWZpZXIpCi17Ci19Ci0KLWJvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVw
bGF5ZXJEZWxlZ2F0ZTo6YXBwbHkoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUgaXRl
bSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQpCi17Ci0gICAgYXV0
byBhcHBseSA9IFsmXShhdXRvJiYgZGVzdGluYXRpb24pIHsKLSAgICAgICAgcmV0dXJuIGRlc3Rp
bmF0aW9uLmFwcGx5KGl0ZW0sIGdyYXBoaWNzQ29udGV4dCk7Ci0gICAgfTsKLQotICAgIGlmICht
X2Rlc3RpbmF0aW9uLnJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRl
ZCkKLSAgICAgICAgcmV0dXJuIGFwcGx5KHN0YXRpY19jYXN0PEFjY2VsZXJhdGVkUmVtb3RlSW1h
Z2VCdWZmZXImPihtX2Rlc3RpbmF0aW9uKSk7Ci0gICAgcmV0dXJuIGFwcGx5KHN0YXRpY19jYXN0
PFVuYWNjZWxlcmF0ZWRSZW1vdGVJbWFnZUJ1ZmZlciY+KG1fZGVzdGluYXRpb24pKTsKLX0KLQot
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjpkaWRDcmVhdGVN
YXNrSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQotewotICAg
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5kaWRDcmVhdGVNYXNrSW1hZ2VCdWZmZXIoaW1hZ2VC
dWZmZXIpOwotfQotCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdh
dGU6OmRpZFJlc2V0TWFza0ltYWdlQnVmZmVyKCkKLXsKLSAgICBtX3JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIoKTsKLX0KLQotdm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjpyZWNvcmRSZXNvdXJjZVVzZShSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQotewotICAgIG1f
cmVtb3RlUmVuZGVyaW5nQmFja2VuZC5yZW1vdGVSZXNvdXJjZUNhY2hlKCkucmVjb3JkUmVzb3Vy
Y2VVc2UoeyByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIG1fd2ViUHJvY2Vzc0lkZW50aWZp
ZXIgfSk7Ci19Ci0KLURpc3BsYXlMaXN0OjpSZXBsYXlSZXN1bHQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6c3VibWl0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3Qs
IEltYWdlQnVmZmVyJiBkZXN0aW5hdGlvbikKLXsKLSAgICBpZiAoZGlzcGxheUxpc3QuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgUmVwbGF5ZXJEZWxlZ2F0ZSByZXBsYXll
ckRlbGVnYXRlKGRlc3RpbmF0aW9uLCAqdGhpcywgbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LT53ZWJQcm9jZXNzSWRlbnRpZmllcigpKTsKLQotICAgIHJldHVybiBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVwbGF5ZXIgewotICAgICAgICBkZXN0aW5hdGlvbi5jb250ZXh0KCksCi0gICAgICAg
IGRpc3BsYXlMaXN0LAotICAgICAgICAmcmVtb3RlUmVzb3VyY2VDYWNoZSgpLnJlc291cmNlSGVh
cCgpLAotICAgICAgICBtX2N1cnJlbnRNYXNrSW1hZ2VCdWZmZXIuZ2V0KCksCi0gICAgICAgICZy
ZXBsYXllckRlbGVnYXRlCi0gICAgfS5yZXBsYXkoKTsKLX0KLQotUmVmUHRyPEltYWdlQnVmZmVy
PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpuZXh0RGVzdGluYXRpb25JbWFnZUJ1ZmZlckFmdGVy
QXBwbHlpbmdEaXNwbGF5TGlzdHMoSW1hZ2VCdWZmZXImIGluaXRpYWxEZXN0aW5hdGlvbiwgc2l6
ZV90IGluaXRpYWxPZmZzZXQsIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlJiBoYW5kbGUsIEdQVVBy
b2Nlc3NXYWtldXBSZWFzb24gcmVhc29uLCBQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRl
bnRpZmllcikKLXsKLSAgICBSZWZQdHIgZGVzdGluYXRpb24geyAmaW5pdGlhbERlc3RpbmF0aW9u
IH07Ci0gICAgUmVmIGhhbmRsZVByb3RlY3RvciB7IGhhbmRsZSB9OwotCi0gICAgYXV0byBvZmZz
ZXQgPSBpbml0aWFsT2Zmc2V0OwotICAgIHNpemVfdCBzaXplVG9SZWFkID0gMDsKLSAgICBkbyB7
Ci0gICAgICAgIHNpemVUb1JlYWQgPSBoYW5kbGUudW5yZWFkQnl0ZXMoKTsKLSAgICB9IHdoaWxl
ICghc2l6ZVRvUmVhZCk7Ci0KLSAgICB3aGlsZSAoZGVzdGluYXRpb24pIHsKLSAgICAgICAgYXV0
byBkaXNwbGF5TGlzdCA9IGhhbmRsZS5kaXNwbGF5TGlzdEZvclJlYWRpbmcob2Zmc2V0LCBzaXpl
VG9SZWFkLCAqdGhpcyk7Ci0gICAgICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUo
ZGlzcGxheUxpc3QsIG51bGxwdHIsICJGYWlsZWQgdG8gbWFwIGRpc3BsYXkgbGlzdCBmcm9tIHNo
YXJlZCBtZW1vcnkiKTsKLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICAgICAgYXV0byBzdGFydFRp
bWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSNlbmRpZgotICAgICAgICBhdXRvIHJlc3VsdCA9
IHN1Ym1pdCgqZGlzcGxheUxpc3QsICpkZXN0aW5hdGlvbik7Ci0gICAgICAgIExPR19XSVRIX1NU
UkVBTShTaGFyZWREaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiUmVhZCBbIiA8PCBvZmZzZXQgPDwg
IiwgIiA8PCBvZmZzZXQgKyByZXN1bHQubnVtYmVyT2ZCeXRlc1JlYWQgPDwgIl07IEl0ZW1zWyIg
PDwgaGFuZGxlLmlkZW50aWZpZXIoKSA8PCAiXSA9PiBJbWFnZSgiIDw8IGRlc3RpbmF0aW9uLT5y
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSA8PCAiKSBpbiAiIDw8IE1vbm90b25pY1RpbWU6
Om5vdygpIC0gc3RhcnRUaW1lKTsKLSAgICAgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9W
QUxVRShyZXN1bHQucmVhc29uRm9yU3RvcHBpbmcgIT0gRGlzcGxheUxpc3Q6OlN0b3BSZXBsYXlS
ZWFzb246OkludmFsaWRJdGVtT3JFeHRlbnQsIG51bGxwdHIsICJEZXRlY3RlZCBpbnZhbGlkIGRp
c3BsYXkgbGlzdCBpdGVtIG9yIGV4dGVudCIpOwotICAgICAgICBNRVNTQUdFX0NIRUNLX1dJVEhf
UkVUVVJOX1ZBTFVFKHJlc3VsdC5yZWFzb25Gb3JTdG9wcGluZyAhPSBEaXNwbGF5TGlzdDo6U3Rv
cFJlcGxheVJlYXNvbjo6T3V0T2ZNZW1vcnksIG51bGxwdHIsICJDb3VuZCBub3QgYWxsb2NhdGUg
bWVtb3J5Iik7Ci0KLSAgICAgICAgYXV0byBhZHZhbmNlUmVzdWx0ID0gaGFuZGxlLmFkdmFuY2Uo
cmVzdWx0Lm51bWJlck9mQnl0ZXNSZWFkKTsKLSAgICAgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JF
VFVSTl9WQUxVRShhZHZhbmNlUmVzdWx0LCBudWxscHRyLCAiRmFpbGVkIHRvIGFkdmFuY2UgZGlz
cGxheSBsaXN0IHJlYWRlciBoYW5kbGUiKTsKLSAgICAgICAgc2l6ZVRvUmVhZCA9ICphZHZhbmNl
UmVzdWx0OwotCi0gICAgICAgIENoZWNrZWRTaXplIGNoZWNrZWRPZmZzZXQgPSBvZmZzZXQ7Ci0g
ICAgICAgIGNoZWNrZWRPZmZzZXQgKz0gcmVzdWx0Lm51bWJlck9mQnl0ZXNSZWFkOwotICAgICAg
ICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKCFjaGVja2VkT2Zmc2V0Lmhhc092ZXJm
bG93ZWQoKSwgbnVsbHB0ciwgIk92ZXJmbG93ZWQgd2hlbiBhZHZhbmNpbmcgc2hhcmVkIGRpc3Bs
YXkgbGlzdCBoYW5kbGUgb2Zmc2V0Iik7Ci0KLSAgICAgICAgb2Zmc2V0ID0gY2hlY2tlZE9mZnNl
dDsKLSAgICAgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRShvZmZzZXQgPD0gaGFu
ZGxlLnNoYXJlZE1lbW9yeSgpLnNpemUoKSwgbnVsbHB0ciwgIk91dC1vZi1ib3VuZHMgb2Zmc2V0
IGludG8gc2hhcmVkIGRpc3BsYXkgbGlzdCBoYW5kbGUiKTsKLQotICAgICAgICBpZiAocmVzdWx0
LnJlYXNvbkZvclN0b3BwaW5nID09IERpc3BsYXlMaXN0OjpTdG9wUmVwbGF5UmVhc29uOjpDaGFu
Z2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyKSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbiA9IG1f
cmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcih7ICpyZXN1bHQubmV4dERlc3Rp
bmF0aW9uSW1hZ2VCdWZmZXIsIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+d2ViUHJvY2Vz
c0lkZW50aWZpZXIoKSB9KTsKLSAgICAgICAgICAgIGlmICghZGVzdGluYXRpb24pIHsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoIW1fcGVuZGluZ1dha2V1cEluZm8pOwotICAgICAgICAgICAgICAg
IG1fcGVuZGluZ1dha2V1cEluZm8gPSB7ewotICAgICAgICAgICAgICAgICAgICBoYW5kbGUuaWRl
bnRpZmllcigpLAotICAgICAgICAgICAgICAgICAgICBvZmZzZXQsCi0gICAgICAgICAgICAgICAg
ICAgIHsgKnJlc3VsdC5uZXh0RGVzdGluYXRpb25JbWFnZUJ1ZmZlciwgd2ViUHJvY2Vzc0lkZW50
aWZpZXIgfSwKLSAgICAgICAgICAgICAgICAgICAgcmVhc29uLAotICAgICAgICAgICAgICAgICAg
ICBzdGQ6Om51bGxvcHQsCi0gICAgICAgICAgICAgICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRTdGF0ZTo6V2FpdGluZ0ZvckRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIKLSAgICAgICAgICAgICAg
ICB9fTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQucmVh
c29uRm9yU3RvcHBpbmcgPT0gRGlzcGxheUxpc3Q6OlN0b3BSZXBsYXlSZWFzb246Ok1pc3NpbmdD
YWNoZWRSZXNvdXJjZSkgewotICAgICAgICAgICAgbV9wZW5kaW5nV2FrZXVwSW5mbyA9IHt7Ci0g
ICAgICAgICAgICAgICAgaGFuZGxlLmlkZW50aWZpZXIoKSwKLSAgICAgICAgICAgICAgICBvZmZz
ZXQsCi0gICAgICAgICAgICAgICAgeyBkZXN0aW5hdGlvbi0+cmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKCksIHdlYlByb2Nlc3NJZGVudGlmaWVyIH0sCi0gICAgICAgICAgICAgICAgcmVhc29u
LAotICAgICAgICAgICAgICAgIHsgeyAqcmVzdWx0Lm1pc3NpbmdDYWNoZWRSZXNvdXJjZUlkZW50
aWZpZXIsIHdlYlByb2Nlc3NJZGVudGlmaWVyIH0gfSwKLSAgICAgICAgICAgICAgICBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kU3RhdGU6OldhaXRpbmdGb3JDYWNoZWRSZXNvdXJjZQotICAgICAgICAg
ICAgfX07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9wZW5kaW5nV2FrZXVwSW5mbykKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmICghc2l6ZVRvUmVhZCkgewotICAgICAgICAg
ICAgaWYgKHJlYXNvbiAhPSBHUFVQcm9jZXNzV2FrZXVwUmVhc29uOjpJdGVtQ291bnRIeXN0ZXJl
c2lzRXhjZWVkZWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGhhbmRs
ZS5zdGFydFdhaXRpbmcoKTsKLSAgICAgICAgICAgIG1fcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhv
cmUud2FpdEZvcigzMF91cyk7Ci0KLSAgICAgICAgICAgIGF1dG8gc3RvcFdhaXRpbmdSZXN1bHQg
PSBoYW5kbGUuc3RvcFdhaXRpbmcoKTsKLSAgICAgICAgICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9S
RVRVUk5fVkFMVUUoc3RvcFdhaXRpbmdSZXN1bHQsIG51bGxwdHIsICJJbnZhbGlkIHdhaXRpbmcg
c3RhdHVzIGRldGVjdGVkIHdoZW4gcmVzdW1pbmcgZGlzcGxheSBsaXN0IHByb2Nlc3NpbmciKTsK
LQotICAgICAgICAgICAgYXV0byByZXN1bWVSZWFkaW5nSW5mbyA9IHN0b3BXYWl0aW5nUmVzdWx0
LnZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VtZVJlYWRpbmdJbmZvKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBzaXplVG9SZWFkID0gaGFuZGxlLnVucmVhZEJ5
dGVzKCk7Ci0gICAgICAgICAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKHNpemVU
b1JlYWQsIG51bGxwdHIsICJObyB1bnJlYWQgYnl0ZXMgd2hlbiByZXN1bWluZyBkaXNwbGF5IGxp
c3QgcHJvY2Vzc2luZyIpOwotCi0gICAgICAgICAgICBhdXRvIG5ld0Rlc3RpbmF0aW9uSWRlbnRp
ZmllciA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllclR5
cGU+KHJlc3VtZVJlYWRpbmdJbmZvLT5kZXN0aW5hdGlvbik7Ci0gICAgICAgICAgICBNRVNTQUdF
X0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKG5ld0Rlc3RpbmF0aW9uSWRlbnRpZmllci5pc1ZhbGlk
KCksIG51bGxwdHIsICJJbnZhbGlkIGltYWdlIGJ1ZmZlciBkZXN0aW5hdGlvbiB3aGVuIHJlc3Vt
aW5nIGRpc3BsYXkgbGlzdCBwcm9jZXNzaW5nIik7Ci0KLSAgICAgICAgICAgIGRlc3RpbmF0aW9u
ID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVyKHsgbmV3RGVzdGluYXRp
b25JZGVudGlmaWVyLCBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPndlYlByb2Nlc3NJZGVu
dGlmaWVyKCkgfSk7Ci0gICAgICAgICAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVF
KGRlc3RpbmF0aW9uLCBudWxscHRyLCAiTWlzc2luZyBpbWFnZSBidWZmZXIgZGVzdGluYXRpb24g
d2hlbiByZXN1bWluZyBkaXNwbGF5IGxpc3QgcHJvY2Vzc2luZyIpOwotCi0gICAgICAgICAgICBv
ZmZzZXQgPSByZXN1bWVSZWFkaW5nSW5mby0+b2Zmc2V0OwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGRlc3RpbmF0aW9uOwotfQotCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
Ondha2VVcEFuZEFwcGx5RGlzcGxheUxpc3QoY29uc3QgR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VB
cmd1bWVudHMmIGFyZ3VtZW50cykKLXsKLSAgICAvLyBJbW1lZGlhdGVseSB0dXJuIHRoZSBSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgKHdoaWNoIGlzIGVycm9yLXByb25lKSB0byBhIFF1YWxp
ZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwKLSAgICAvLyBhbmQgdXNlIGEgaGVscGVy
IGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSB0aGF0IGRvbid0IGFjY2lkZW50YWxseSB1c2UgdGhlIFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciAoYmVjYXVzZSB0aGUgaGVscGVyIGZ1bmN0aW9uIGNh
bid0IHNlZSBpdCkuCi0gICAgd2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdFdpdGhRdWFsaWZpZWRJ
ZGVudGlmaWVyKGFyZ3VtZW50cy5pdGVtQnVmZmVySWRlbnRpZmllciwgYXJndW1lbnRzLm9mZnNl
dCwgeyBhcmd1bWVudHMuZGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIsIG1fZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2Vzcy0+d2ViUHJvY2Vzc0lkZW50aWZpZXIoKSB9LCBhcmd1bWVudHMu
cmVhc29uKTsKLX0KLQotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp3YWtlVXBBbmRBcHBs
eURpc3BsYXlMaXN0V2l0aFF1YWxpZmllZElkZW50aWZpZXIoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGl0ZW1CdWZmZXJJZGVudGlmaWVyLCB1aW50NjRfdCBvZmZz
ZXQsIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkltYWdl
QnVmZmVySWRlbnRpZmllciwgR1BVUHJvY2Vzc1dha2V1cFJlYXNvbiByZWFzb24pCi17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29w
ZShXYWtlVXBBbmRBcHBseURpc3BsYXlMaXN0U3RhcnQsIFdha2VVcEFuZEFwcGx5RGlzcGxheUxp
c3RFbmQpOwotCi0gICAgdXBkYXRlTGFzdEtub3duU3RhdGUoUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFN0YXRlOjpCZWdhblJlcGxheWluZ0Rpc3BsYXlMaXN0KTsKLQotICAgIFJlZlB0ciBkZXN0aW5h
dGlvbkltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVy
KGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKLSAgICBNRVNTQUdFX0NIRUNLKGRl
c3RpbmF0aW9uSW1hZ2VCdWZmZXIsICJNaXNzaW5nIGRlc3RpbmF0aW9uIGltYWdlIGJ1ZmZlciIp
OwotCi0gICAgYXV0byBpbml0aWFsSGFuZGxlID0gbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXMu
Z2V0KGl0ZW1CdWZmZXJJZGVudGlmaWVyKTsKLSAgICBNRVNTQUdFX0NIRUNLKGluaXRpYWxIYW5k
bGUsICJNaXNzaW5nIGluaXRpYWwgc2hhcmVkIGRpc3BsYXkgbGlzdCBoYW5kbGUiKTsKLQotICAg
IExPR19XSVRIX1NUUkVBTShTaGFyZWREaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiV2FraW5nIHVw
IHRvIEl0ZW1zWyIgPDwgaXRlbUJ1ZmZlcklkZW50aWZpZXIgPDwgIl0gPT4gSW1hZ2UoIiA8PCBk
ZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllci5vYmplY3QoKSA8PCAiKSBhdCAiIDw8IG9m
ZnNldCk7Ci0gICAgZGVzdGluYXRpb25JbWFnZUJ1ZmZlciA9IG5leHREZXN0aW5hdGlvbkltYWdl
QnVmZmVyQWZ0ZXJBcHBseWluZ0Rpc3BsYXlMaXN0cygqZGVzdGluYXRpb25JbWFnZUJ1ZmZlciwg
b2Zmc2V0LCAqaW5pdGlhbEhhbmRsZSwgcmVhc29uLCBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MtPndlYlByb2Nlc3NJZGVudGlmaWVyKCkpOwotCi0gICAgLy8gRklYTUU6IEFsbCB0aGUgY2Fs
bGVycyBwYXNzIG1fcGVuZGluZ1dha2V1cEluZm8ncyBmaWVsZHMgc28gdGhlIGJvZHkgb2YgdGhp
cyBmdW5jdGlvbiBzaG91bGQganVzdCBiZSB0aGlzIGxvb3AuCi0gICAgd2hpbGUgKGRlc3RpbmF0
aW9uSW1hZ2VCdWZmZXIgJiYgbV9wZW5kaW5nV2FrZXVwSW5mbykgewotICAgICAgICBpZiAobV9w
ZW5kaW5nV2FrZXVwSW5mby0+bWlzc2luZ0NhY2hlZFJlc291cmNlSWRlbnRpZmllcikKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGF1dG8gbmV4dEhhbmRsZSA9IG1fc2hhcmVkRGlzcGxh
eUxpc3RIYW5kbGVzLmdldChtX3BlbmRpbmdXYWtldXBJbmZvLT5pdGVtQnVmZmVySWRlbnRpZmll
cik7Ci0gICAgICAgIGlmICghbmV4dEhhbmRsZSkgewotICAgICAgICAgICAgLy8gSWYgdGhlIGhh
bmRsZSBpZGVudGlmaWVyIGlzIGN1cnJlbnRseSB1bmtub3duLCB3YWl0IHVudGlsIHRoZSBHUFUg
cHJvY2VzcyByZWNlaXZlcyBhbgotICAgICAgICAgICAgLy8gSVBDIG1lc3NhZ2Ugd2l0aCBhIHNo
YXJlZCBtZW1vcnkgaGFuZGxlIHRvIHRoZSBuZXh0IGl0ZW0gYnVmZmVyLgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBPdGhlcndpc2UsIGNvbnRpbnVlIHJlYWRp
bmcgdGhlIG5leHQgZGlzcGxheSBsaXN0IGl0ZW0gYnVmZmVyIGZyb20gdGhlIHN0YXJ0LgotICAg
ICAgICBhdXRvIG9mZnNldCA9IG1fcGVuZGluZ1dha2V1cEluZm8tPm9mZnNldDsKLSAgICAgICAg
YXV0byByZWFzb24gPSBtX3BlbmRpbmdXYWtldXBJbmZvLT5yZWFzb247Ci0gICAgICAgIG1fcGVu
ZGluZ1dha2V1cEluZm8gPSBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uSW1hZ2VC
dWZmZXIgPSBuZXh0RGVzdGluYXRpb25JbWFnZUJ1ZmZlckFmdGVyQXBwbHlpbmdEaXNwbGF5TGlz
dHMoKmRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsIG9mZnNldCwgKm5leHRIYW5kbGUsIHJlYXNvbiwg
bV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT53ZWJQcm9jZXNzSWRlbnRpZmllcigpKTsKLSAg
ICB9Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFNoYXJlZERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJH
b2luZyBiYWNrIHRvIHNsZWVwLiIpOwotCi0gICAgaWYgKG1fcGVuZGluZ1dha2V1cEluZm8pCi0g
ICAgICAgIHVwZGF0ZUxhc3RLbm93blN0YXRlKG1fcGVuZGluZ1dha2V1cEluZm8tPnN0YXRlKTsK
LSAgICBlbHNlCi0gICAgICAgIHVwZGF0ZUxhc3RLbm93blN0YXRlKFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRTdGF0ZTo6RmluaXNoZWRSZXBsYXlpbmdEaXNwbGF5TGlzdCk7Ci19Ci0KLXZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6c2V0TmV4dEl0ZW1CdWZmZXJUb1JlYWQoRGlzcGxheUxpc3Q6
Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbklkZW50aWZpZXIpCi17Ci0gICAgbV9wZW5kaW5nV2Fr
ZXVwSW5mbyA9IHt7Ci0gICAgICAgIGlkZW50aWZpZXIsCi0gICAgICAgIFNoYXJlZERpc3BsYXlM
aXN0SGFuZGxlOjpoZWFkZXJTaXplKCksCi0gICAgICAgIGRlc3RpbmF0aW9uSWRlbnRpZmllciwK
LSAgICAgICAgR1BVUHJvY2Vzc1dha2V1cFJlYXNvbjo6VW5zcGVjaWZpZWQsCi0gICAgICAgIHN0
ZDo6bnVsbG9wdCwKLSAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpXYWl0aW5n
Rm9ySXRlbUJ1ZmZlcgotICAgIH19OwogfQogCiBzdGQ6Om9wdGlvbmFsPFNoYXJlZE1lbW9yeTo6
SVBDSGFuZGxlPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlGb3JH
ZXRQaXhlbEJ1ZmZlckhlbHBlcihzaXplX3QgYnl0ZUNvdW50KQpAQCAtNTQ3LDkgKzMyMiw2IEBA
IHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y2FjaGVOYXRpdmVJbWFnZVdpdGhRdWFsaWZp
ZWRJZGVudGlmaWVyKGNvbnN0IFNoYXJlCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcmVtb3Rl
UmVzb3VyY2VDYWNoZS5jYWNoZU5hdGl2ZUltYWdlKCppbWFnZSwgbmF0aXZlSW1hZ2VSZXNvdXJj
ZUlkZW50aWZpZXIpOwotCi0gICAgaWYgKG1fcGVuZGluZ1dha2V1cEluZm8gJiYgbV9wZW5kaW5n
V2FrZXVwSW5mby0+c2hvdWxkUGVyZm9ybVdha2V1cChuYXRpdmVJbWFnZVJlc291cmNlSWRlbnRp
ZmllcikpCi0gICAgICAgIHJlc3VtZUZyb21QZW5kaW5nV2FrZXVwSW5mb3JtYXRpb24oKTsKIH0K
IAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZv
bnQ+JiYgZm9udCkKQEAgLTU2NSw4ICszMzcsNiBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OmNhY2hlRm9udFdpdGhRdWFsaWZpZWRJZGVudGlmaWVyKFJlZjxGb250PiYmIGZvbnQsCiAg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBtX3JlbW90ZVJlc291cmNlQ2Fj
aGUuY2FjaGVGb250KFdURk1vdmUoZm9udCksIGZvbnRSZXNvdXJjZUlkZW50aWZpZXIpOwotICAg
IGlmIChtX3BlbmRpbmdXYWtldXBJbmZvICYmIG1fcGVuZGluZ1dha2V1cEluZm8tPnNob3VsZFBl
cmZvcm1XYWtldXAoZm9udFJlc291cmNlSWRlbnRpZmllcikpCi0gICAgICAgIHJlc3VtZUZyb21Q
ZW5kaW5nV2FrZXVwSW5mb3JtYXRpb24oKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpkZWxldGVBbGxGb250cygpCkBAIC01OTIsMTY5ICszNjIsOSBAQCB2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZVdpdGhRdWFsaWZpZWRJZGVudGlm
aWVyKFF1YWxpZgogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZpbmFsaXplUmVuZGVy
aW5nVXBkYXRlKFJlbmRlcmluZ1VwZGF0ZUlEIHJlbmRlcmluZ1VwZGF0ZUlEKQogewotICAgIGF1
dG8gc2hvdWxkUGVyZm9ybVdha2V1cCA9IFsmXSB7Ci0gICAgICAgIHJldHVybiBtX3JlbW90ZVJl
c291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIobV9wZW5kaW5nV2FrZXVwSW5mby0+ZGVzdGlu
YXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIpICYmIG1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVz
LmNvbnRhaW5zKG1fcGVuZGluZ1dha2V1cEluZm8tPml0ZW1CdWZmZXJJZGVudGlmaWVyKTsKLSAg
ICB9OwotCi0gICAgaWYgKG1fcGVuZGluZ1dha2V1cEluZm8gJiYgc2hvdWxkUGVyZm9ybVdha2V1
cCgpKQotICAgICAgICByZXN1bWVGcm9tUGVuZGluZ1dha2V1cEluZm9ybWF0aW9uKCk7Ci0KICAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OkRpZEZpbmFsaXpl
UmVuZGVyaW5nVXBkYXRlKHJlbmRlcmluZ1VwZGF0ZUlEKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcik7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkQ3JlYXRlU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGUoRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGl0
ZW1CdWZmZXJJZGVudGlmaWVyLCBjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYgaGFuZGxl
LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVy
KQotewotICAgIC8vIEltbWVkaWF0ZWx5IHR1cm4gdGhlIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciAod2hpY2ggaXMgZXJyb3ItcHJvbmUpIHRvIGEgUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyLAotICAgIC8vIGFuZCB1c2UgYSBoZWxwZXIgZnVuY3Rpb24gdG8gbWFrZSBz
dXJlIHRoYXQgZG9uJ3QgYWNjaWRlbnRhbGx5IHVzZSB0aGUgUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIChiZWNhdXNlIHRoZSBoZWxwZXIgZnVuY3Rpb24gY2FuJ3Qgc2VlIGl0KS4KLSAgICBk
aWRDcmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZVdpdGhRdWFsaWZpZWRJZGVudGlmaWVyKGl0
ZW1CdWZmZXJJZGVudGlmaWVyLCBoYW5kbGUsIHsgZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVy
LCBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPndlYlByb2Nlc3NJZGVudGlmaWVyKCkgfSk7
Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkQ3JlYXRlU2hhcmVkRGlzcGxh
eUxpc3RIYW5kbGVXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
cklkZW50aWZpZXIgaXRlbUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBD
SGFuZGxlJiBoYW5kbGUsIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKLXsK
LSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBNRVNTQUdFX0NIRUNLKCFtX3No
YXJlZERpc3BsYXlMaXN0SGFuZGxlcy5jb250YWlucyhpdGVtQnVmZmVySWRlbnRpZmllciksICJE
dXBsaWNhdGUgc2hhcmVkIGRpc3BsYXkgbGlzdCBoYW5kbGUiKTsKLQotICAgIGlmIChhdXRvIHNo
YXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6bWFwKGhhbmRsZS5oYW5kbGUsIFNoYXJlZE1lbW9y
eTo6UHJvdGVjdGlvbjo6UmVhZFdyaXRlKSkgewotICAgICAgICBhdXRvIGhhbmRsZSA9IERpc3Bs
YXlMaXN0UmVhZGVySGFuZGxlOjpjcmVhdGUoaXRlbUJ1ZmZlcklkZW50aWZpZXIsIHNoYXJlZE1l
bW9yeS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgTUVTU0FHRV9DSEVDSyhoYW5kbGUsICJU
aGVyZSBtdXN0IGJlIGVub3VnaCBzcGFjZSB0byBjcmVhdGUgdGhlIGhhbmRsZS4iKTsKLSAgICAg
ICAgbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXMuc2V0KGl0ZW1CdWZmZXJJZGVudGlmaWVyLCBo
YW5kbGUpOwotICAgIH0KLQotICAgIGlmIChtX3BlbmRpbmdXYWtldXBJbmZvICYmIG1fcGVuZGlu
Z1dha2V1cEluZm8tPnNob3VsZFBlcmZvcm1XYWtldXAoaXRlbUJ1ZmZlcklkZW50aWZpZXIpKQot
ICAgICAgICByZXN1bWVGcm9tUGVuZGluZ1dha2V1cEluZm9ybWF0aW9uKCk7Ci19Ci0KLXZvaWQg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVzdW1lRnJvbVBlbmRpbmdXYWtldXBJbmZvcm1hdGlv
bigpCi17Ci0gICAgYXV0byBpdGVtQnVmZmVySWRlbnRpZmllciA9IG1fcGVuZGluZ1dha2V1cElu
Zm8tPml0ZW1CdWZmZXJJZGVudGlmaWVyOwotICAgIGF1dG8gb2Zmc2V0ID0gbV9wZW5kaW5nV2Fr
ZXVwSW5mby0+b2Zmc2V0OwotICAgIGF1dG8gZGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZp
ZXIgPSBtX3BlbmRpbmdXYWtldXBJbmZvLT5kZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmll
cjsKLSAgICBhdXRvIHJlYXNvbiA9IG1fcGVuZGluZ1dha2V1cEluZm8tPnJlYXNvbjsKLSAgICBt
X3BlbmRpbmdXYWtldXBJbmZvID0gc3RkOjpudWxsb3B0OwotICAgIHdha2VVcEFuZEFwcGx5RGlz
cGxheUxpc3RXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihpdGVtQnVmZmVySWRlbnRpZmllciwgb2Zm
c2V0LCBkZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllciwgcmVhc29uKTsKLX0KLQotdm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVNYXNrSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImIGltYWdlQnVmZmVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIE1FU1NBR0VfQ0hFQ0soIW1fY3VycmVudE1hc2tJbWFnZUJ1ZmZlciwgIkN1cnJlbnQgbWFz
ayBpbWFnZSBidWZmZXIgaXMgYWxyZWFkeSBzZXQuIik7Ci0gICAgbV9jdXJyZW50TWFza0ltYWdl
QnVmZmVyID0gJmltYWdlQnVmZmVyOwotfQotCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmRpZFJlc2V0TWFza0ltYWdlQnVmZmVyKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLSAgICBNRVNTQUdFX0NIRUNLKG1fY3VycmVudE1hc2tJbWFnZUJ1ZmZlciwgIkN1cnJl
bnQgbWFzayBpbWFnZSBidWZmZXIgd2FzIG5vdCBhbHJlYWR5IHNldC4iKTsKLSAgICBtX2N1cnJl
bnRNYXNrSW1hZ2VCdWZmZXIgPSBudWxscHRyOwotfQotCi1zdGQ6Om9wdGlvbmFsPERpc3BsYXlM
aXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6ZGVjb2RlSXRlbShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBEaXNwbGF5
TGlzdDo6SXRlbVR5cGUgdHlwZSwgdWludDhfdCogaGFuZGxlTG9jYXRpb24pCi17Ci0gICAgLyog
VGhpcyBuZWVkcyB0byBtYXRjaCAoMSkgaXNJbmxpbmVJdGVtKCkgaW4gRGlzcGxheUxpc3RJdGVt
VHlwZS5jcHAsICgyKSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjplbmNvZGVJdGVtKCksCi0gICAg
ICogYW5kICgzKSBhbGwgdGhlICJzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtInMg
aW5zaWRlIHRoZSBpbmRpdmlkdWFsIGl0ZW0gY2xhc3Nlcy4KLSAgICAgKiBTZWUgdGhlIGNvbW1l
bnQgYXQgdGhlIHRvcCBvZiBEaXNwbGF5TGlzdEl0ZW1zLmggZm9yIHdoeS4gKi8KLQotICAgIHN3
aXRjaCAodHlwZSkgewotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpCZWdpbkNsaXBU
b0RyYXdpbmdDb21tYW5kczoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5
TGlzdDo6QmVnaW5DbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9j
YXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgot
ICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRo
PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxh
eUxpc3Q6OkNsaXBQYXRoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNl
IERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Ci0gICAgICAgIHJldHVy
biBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoPihkYXRhLCBs
ZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3Bs
YXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24p
OwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3R2x5cGhzOgotICAgICAgICBy
ZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzPihkYXRhLCBsZW5n
dGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJh
d0xpbmVzRm9yVGV4dDoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlz
dDo6RHJhd0xpbmVzRm9yVGV4dD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAg
Y2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdQYXRoOgotICAgICAgICByZXR1cm4gZGVj
b2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpEcmF3UGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVM
b2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxDb21wb3NpdGVk
UmVjdDoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6RmlsbENv
bXBvc2l0ZWRSZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFBhdGg6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRD
cmVhdGU8RGlzcGxheUxpc3Q6OkZpbGxQYXRoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9u
KTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6Ci0g
ICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENv
bG9yPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAgIHJldHVybiBkZWNvZGVB
bmRDcmVhdGU8RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50PihkYXRhLCBsZW5ndGgs
IGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxh
eUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0
aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0Ogot
ICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJl
Y3Q+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0
ZTxEaXNwbGF5TGlzdDo6R2V0UGl4ZWxCdWZmZXI+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRp
b24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlcjoKLSAg
ICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI+
KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNw
bGF5TGlzdDo6U2V0TGluZURhc2g+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAg
IGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdGF0ZToKLSAgICAgICAgcmV0dXJuIGRl
Y29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6U2V0U3RhdGU+KGRhdGEsIGxlbmd0aCwgaGFuZGxl
TG9jYXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VQYXRoOgot
ICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpTdHJva2VQYXRoPihk
YXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSNpZiBVU0UoQ0cpCi0gICAgY2FzZSBEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46Ci0gICAgY2FzZSBEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSNlbmRpZgotICAgIGNhc2UgRGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgotICAgIGNhc2UgRGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpDbGVhclJlY3Q6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkNsZWFyU2hhZG93OgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwOgot
ICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0OgotICAgIGNhc2UgRGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjoKLSAgICBjYXNlIERpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOgotICAgIGNhc2UgRGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRy
YXdJbWFnZUJ1ZmZlcjoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd05hdGl2
ZUltYWdlOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKLSAg
ICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xpbmU6Ci0gICAgY2FzZSBEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkRyYXdSZWN0OgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RmlsbEVsbGlwc2U6Ci0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAgY2FzZSBEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxMaW5lOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpGaWxsQXJjOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUXVhZEN1
cnZlOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsQmV6aWVyQ3VydmU6Ci0j
ZW5kaWYKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0gICAgY2Fz
ZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZsdXNoQ29udGV4dDoKLSAgICBjYXNlIERpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyOgot
ICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZm
ZXI6Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQ
YWludEZyYW1lRm9yTWVkaWE6Ci0jZW5kaWYKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6UmVzdG9yZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Um90YXRlOgotICAg
IGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTYXZlOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTY2FsZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0Q1RN
OgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6Ci0g
ICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAg
IGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgIGNhc2UgRGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0
U3Ryb2tlVGhpY2tuZXNzOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VF
bGxpcHNlOgotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNhc2UgRGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTdHJva2VBcmM6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OlN0cm9rZVF1YWRDdXJ2ZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tl
QmV6aWVyQ3VydmU6Ci0jZW5kaWYKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ry
b2tlUmVjdDoKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlTGluZToKLSAg
ICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQogdm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVSZW5kZXJpbmdSZXNvdXJjZVJlcXVlc3Qo
KQogewogICAgIGJvb2wgaGFzQWN0aXZlRHJhd2FibGVzID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hl
Lmhhc0FjdGl2ZURyYXdhYmxlcygpOwpAQCAtNzcxLDE4ICszODEsNiBAQCBib29sIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmFsbG93c0V4aXRVbmRlck1lbW9yeVByZXNzdXJlKCkgY29uc3QKICAg
ICByZXR1cm4gIW1fcmVtb3RlUmVzb3VyY2VDYWNoZS5oYXNBY3RpdmVEcmF3YWJsZXMoKTsKIH0K
IAotUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Omxh
c3RLbm93blN0YXRlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIHJldHVybiBtX2xhc3RLbm93blN0YXRlLmxvYWQoKTsKLX0KLQotdm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjp1cGRhdGVMYXN0S25vd25TdGF0ZShSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
U3RhdGUgc3RhdGUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbV9s
YXN0S25vd25TdGF0ZS5zdG9yZVJlbGF4ZWQoc3RhdGUpOwotfQotCiB2b2lkIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OnBlcmZvcm1XaXRoTWVkaWFQbGF5ZXJPbk1haW5UaHJlYWQoTWVkaWFQbGF5
ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoTWVkaWFQbGF5ZXImKT4mJiBj
YWxsYmFjaykKIHsKICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoWyYsIGdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGlkZW50aWZpZXJd
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oCmluZGV4IGQ5MmI3NGMwMDNkNDBjNjUwYWE0Yjg1ZTcwNzYx
NDQzMTdjNzgxZjguLjFkMDI3Zjg4MDYxZjE0OGEzM2RhMjk0YjcyMWUwNzBkMDFlNzdkMWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMjgsMTcgKzI4LDIwIEBACiAjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkdQVVByb2Nlc3NX
YWtldXBNZXNzYWdlQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSVBDU2VtYXBob3JlLmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2Vp
dmVyLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIlF1YWxpZmllZFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXIuaCIKICNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kU3RhdGUuaCIKICNp
bmNsdWRlICJSZW1vdGVSZXNvdXJjZUNhY2hlLmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdVcGRhdGVJRC5oIgogI2luY2x1ZGUg
IlNjb3BlZFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuaCIKKyNpbmNsdWRlICJTdHJlYW1Db25u
ZWN0aW9uV29ya1F1ZXVlLmgiCisjaW5jbHVkZSAiU3RyZWFtTWVzc2FnZVJlY2VpdmVyLmgiCisj
aW5jbHVkZSAiU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29s
b3JTcGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KQEAgLTQ4LDExICs1MSw2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKLWNsYXNzIERpc3BsYXlMaXN0
OwotY2xhc3MgSXRlbTsKLX0KLQogY2xhc3MgRGVzdGluYXRpb25Db2xvclNwYWNlOwogY2xhc3Mg
RmxvYXRTaXplOwogY2xhc3MgTmF0aXZlSW1hZ2U7CkBAIC02MywzNCArNjEsMjQgQEAgZW51bSBj
bGFzcyBSZW5kZXJpbmdNb2RlIDogYm9vbDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNz
IERpc3BsYXlMaXN0UmVhZGVySGFuZGxlOwogY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czsKK2NsYXNzIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI7CiBzdHJ1Y3QgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVyczsKIAotY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZAotICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKLSAgICAsIHB1YmxpYyBJUEM6
OkNvbm5lY3Rpb246OldvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlcgotICAgICwgcHVibGljIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCB7CitjbGFzcyBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIsIHB1YmxpYyBJUEM6
OlN0cmVhbU1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0KLSAgICBzdGF0aWMgUmVmPFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmKTsKKyAgICBzdGF0aWMgUmVm
PFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
JiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmLCBJUEM6OlN0cmVh
bUNvbm5lY3Rpb25CdWZmZXImJik7CiAgICAgdmlydHVhbCB+UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZCgpOwogICAgIHZvaWQgc3RvcExpc3RlbmluZ0ZvcklQQygpOwogCiAgICAgUmVtb3RlUmVzb3Vy
Y2VDYWNoZSYgcmVtb3RlUmVzb3VyY2VDYWNoZSgpIHsgcmV0dXJuIG1fcmVtb3RlUmVzb3VyY2VD
YWNoZTsgfQogCi0gICAgLy8gUmVuZGVyaW5nIG9wZXJhdGlvbnMuCi0gICAgYm9vbCBhcHBseU1l
ZGlhSXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSwgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Jik7CisgICAgdm9pZCBkaWRSZWNlaXZlU3RyZWFtTWVzc2FnZShJUEM6OlN0cmVh
bVNlcnZlckNvbm5lY3Rpb25CYXNlJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CiAKICAgICAvLyBN
ZXNzYWdlcyB0byBiZSBzZW50LgotICAgIHZvaWQgZGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5k
KEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSwgUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKTsKKyAgICB2b2lkIGRpZENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChJbWFnZUJ1ZmZl
ckJhY2tlbmRIYW5kbGUsIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlciYpOwogICAgIHZvaWQgZGlkRmx1c2goV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyLCBRdWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpOwogCi0gICAgdm9pZCBzZXROZXh0SXRlbUJ1ZmZlclRvUmVhZChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbik7Ci0KLSAgICB2b2lkIGRpZENyZWF0ZU1hc2tJbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpOwotICAgIHZvaWQgZGlkUmVzZXRNYXNrSW1h
Z2VCdWZmZXIoKTsKLQogICAgIHZvaWQgcG9wdWxhdGVHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9y
eShzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiYmKTsKIAogICAgIGJvb2wgYWxs
b3dzRXhpdFVuZGVyTWVtb3J5UHJlc3N1cmUoKSBjb25zdDsKQEAgLTk4LDQ3ICs4NiwyMiBAQCBw
dWJsaWM6CiAgICAgLy8gUnVucyBGdW5jdGlvbiBpbiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHRh
c2sgcXVldWUuCiAgICAgdm9pZCBkaXNwYXRjaChGdW5jdGlvbjx2b2lkKCk+JiYpOwogCi0gICAg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlIGxhc3RLbm93blN0YXRlKCkgY29uc3Q7Ci0KKyAg
ICBJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb24mIHN0cmVhbUNvbm5lY3Rpb24oKSBjb25zdCB7
IHJldHVybiBtX3N0cmVhbUNvbm5lY3Rpb24uZ2V0KCk7IH0KICAgICB2b2lkIHBlcmZvcm1XaXRo
TWVkaWFQbGF5ZXJPbk1haW5UaHJlYWQoV2ViQ29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBG
dW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok1lZGlhUGxheWVyJik+JiYpOwogCiBwcml2YXRlOgotICAg
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJik7CisgICAgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZChHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZENyZWF0aW9uUGFyYW1ldGVycyYmLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJik7
CiAgICAgdm9pZCBzdGFydExpc3RlbmluZ0ZvcklQQygpOwogCi0gICAgc3RkOjpvcHRpb25hbDxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZT4gV0FSTl9VTlVTRURfUkVUVVJOIGRlY29k
ZUl0ZW0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCwgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlLCB1aW50OF90KiBoYW5kbGVMb2NhdGlvbikgb3ZlcnJpZGU7Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1IYW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVBbmRDcmVhdGUoY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCwgdWludDhfdCogaGFuZGxlTG9jYXRpb24p
Ci0gICAgewotICAgICAgICBpZiAoYXV0byBpdGVtID0gSVBDOjpEZWNvZGVyOjpkZWNvZGVTaW5n
bGVPYmplY3Q8VD4oZGF0YSwgbGVuZ3RoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFdlYktp
dDIgc2hvdWxkIG5vdCBuZWVkIHRvIGtub3cgdGhhdCB0aGUgZmlyc3QgOCBieXRlcyBhdCB0aGUg
aGFuZGxlIGFyZSByZXNlcnZlZCBmb3IgdGhlIHR5cGUuCi0gICAgICAgICAgICAvLyBOZWVkIHRv
IGZpZ3VyZSBvdXQgYSB3YXkgdG8ga2VlcCB0aGlzIGtub3dsZWRnZSB3aXRoaW4gZGlzcGxheSBs
aXN0IGNvZGUgaW4gV2ViQ29yZS4KLSAgICAgICAgICAgIG5ldyAoaGFuZGxlTG9jYXRpb24gKyBz
aXplb2YodWludDY0X3QpKSBUKFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgICAgIHJldHVybiB7
eyBoYW5kbGVMb2NhdGlvbiB9fTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotICAgIH0KLQotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXlSZXN1bHQgc3Vi
bWl0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIFdlYkNvcmU6Oklt
YWdlQnVmZmVyJiBkZXN0aW5hdGlvbik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVy
PiBuZXh0RGVzdGluYXRpb25JbWFnZUJ1ZmZlckFmdGVyQXBwbHlpbmdEaXNwbGF5TGlzdHMoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXImIGluaXRpYWxEZXN0aW5hdGlvbiwgc2l6ZV90IGluaXRpYWxPZmZz
ZXQsIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlJiwgR1BVUHJvY2Vzc1dha2V1cFJlYXNvbiwgV2Vi
Q29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIpOwotCiAgICAgc3Rk
OjpvcHRpb25hbDxTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZT4gdXBkYXRlU2hhcmVkTWVtb3J5Rm9y
R2V0UGl4ZWxCdWZmZXJIZWxwZXIoc2l6ZV90IGJ5dGVDb3VudCk7CiAgICAgdm9pZCB1cGRhdGVS
ZW5kZXJpbmdSZXNvdXJjZVJlcXVlc3QoKTsKIAotICAgIHZvaWQgdXBkYXRlTGFzdEtub3duU3Rh
dGUoUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlKTsKLQogICAgIC8vIElQQzo6TWVzc2FnZVNl
bmRlci4KICAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCi0gICAgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlk
ZTsKLSAgICBib29sIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OkRlY29kZXImLCBVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYpIG92ZXJyaWRlOwotCiAgICAgLy8g
TWVzc2FnZXMgdG8gYmUgcmVjZWl2ZWQuCiAgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcihjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2Rl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JT
cGFjZSYsIFdlYkNvcmU6OlBpeGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpOwotICAgIHZvaWQgd2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChjb25zdCBHUFVQ
cm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cyYpOwogICAgIHZvaWQgdXBkYXRlU2hhcmVkTWVt
b3J5Rm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik+JiYpOwogICAgIHZvaWQgc2Vt
YXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6
OlNlbWFwaG9yZSYpPiYmKTsKICAgICB2b2lkIHVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9y
ZUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQQzo6U2VtYXBob3Jl
Jik+JiYpOwpAQCAtMTUxLDEwICsxMTQsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVsZXRlQWxs
Rm9udHMoKTsKICAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KTsKICAgICB2b2lkIGZpbmFs
aXplUmVuZGVyaW5nVXBkYXRlKFJlbmRlcmluZ1VwZGF0ZUlEKTsKLSAgICB2b2lkIGRpZENyZWF0
ZVNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVy
SWRlbnRpZmllciwgY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmLCBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKTsKIAog
ICAgIC8vIFJlY2VpdmVkIG1lc3NhZ2VzIHRyYW5zbGF0ZWQgdG8gdXNlIFF1YWxpZmllZFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllci4KLSAgICB2b2lkIHdha2VVcEFuZEFwcGx5RGlzcGxheUxp
c3RXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
cklkZW50aWZpZXIsIHVpbnQ2NF90IG9mZnNldCwgUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLCBHUFVQcm9jZXNzV2FrZXVwUmVhc29uKTsKICAgICB2b2lkIGNyZWF0ZUltYWdl
QnVmZmVyV2l0aFF1YWxpZmllZElkZW50aWZpZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBs
b2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBXZWJDb3JlOjpQaXhlbEZv
cm1hdCwgUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGdl
dERhdGFVUkxGb3JJbWFnZUJ1ZmZlcldpdGhRdWFsaWZpZWRJZGVudGlmaWVyKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVz
ZXJ2ZVJlc29sdXRpb24sIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+JiYpOwogICAgIHZvaWQgZ2V0RGF0YUZvcklt
YWdlQnVmZmVyV2l0aFF1YWxpZmllZElkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
c3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYp
OwpAQCAtMTY0LDU1ICsxMjUsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbGVhc2VSZW1vdGVS
ZXNvdXJjZVdpdGhRdWFsaWZpZWRJZGVudGlmaWVyKFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpOwogICAgIHZvaWQgY2FjaGVGb250V2l0aFF1
YWxpZmllZElkZW50aWZpZXIoUmVmPFdlYkNvcmU6OkZvbnQ+JiYsIFF1YWxpZmllZFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcik7CiAKLSAgICB2b2lkIHJlc3VtZUZyb21QZW5kaW5nV2FrZXVw
SW5mb3JtYXRpb24oKTsKLQotICAgIGNsYXNzIFJlcGxheWVyRGVsZWdhdGUgOiBwdWJsaWMgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyOjpEZWxlZ2F0ZSB7Ci0gICAgcHVibGljOgotICAg
ICAgICBSZXBsYXllckRlbGVnYXRlKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZCYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHdlYlByb2Nlc3NJZGVudGlm
aWVyKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wgYXBwbHkoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1IYW5kbGUsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpIGZpbmFsOwotICAg
ICAgICB2b2lkIGRpZENyZWF0ZU1hc2tJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYp
IGZpbmFsOwotICAgICAgICB2b2lkIGRpZFJlc2V0TWFza0ltYWdlQnVmZmVyKCkgZmluYWw7Ci0g
ICAgICAgIHZvaWQgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKSBmaW5hbDsKLQotICAgICAgICBXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgbV9kZXN0
aW5hdGlvbjsKLSAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOwotICAgICAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBtX3dlYlByb2Nl
c3NJZGVudGlmaWVyOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGVuZGluZ1dha2V1cEluZm9ybWF0
aW9uIHsKLSAgICAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVy
IGl0ZW1CdWZmZXJJZGVudGlmaWVyOwotICAgICAgICB1aW50NjRfdCBvZmZzZXQgeyAwIH07Ci0g
ICAgICAgIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbklt
YWdlQnVmZmVySWRlbnRpZmllcjsKLSAgICAgICAgR1BVUHJvY2Vzc1dha2V1cFJlYXNvbiByZWFz
b24geyBHUFVQcm9jZXNzV2FrZXVwUmVhc29uOjpVbnNwZWNpZmllZCB9OwotICAgICAgICBzdGQ6
Om9wdGlvbmFsPFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gbWlzc2luZ0Nh
Y2hlZFJlc291cmNlSWRlbnRpZmllcjsKLSAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0
YXRlIHN0YXRlIHsgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpJbml0aWFsaXplZCB9Owot
Ci0gICAgICAgIGJvb2wgc2hvdWxkUGVyZm9ybVdha2V1cChRdWFsaWZpZWRSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgaWRlbnRpZmllcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyID09IGlkZW50aWZpZXIKLSAg
ICAgICAgICAgICAgICB8fCBtaXNzaW5nQ2FjaGVkUmVzb3VyY2VJZGVudGlmaWVyID09IGlkZW50
aWZpZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHNob3VsZFBlcmZvcm1XYWtldXAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIpIGNvbnN0
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVtQnVmZmVySWRlbnRpZmllciA9PSBp
ZGVudGlmaWVyOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIFJlZjxXb3JrUXVldWU+IG1fd29y
a1F1ZXVlOworICAgIElQQzo6U3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZSBtX3dvcmtRdWV1ZTsK
KyAgICBSZWY8SVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uPiBtX3N0cmVhbUNvbm5lY3Rpb247
CiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZSBtX3JlbW90ZVJlc291cmNlQ2FjaGU7CiAgICAgUmVm
PEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsK
ICAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyOwotICAgIEhhc2hNYXA8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlm
aWVyLCBSZWZQdHI8RGlzcGxheUxpc3RSZWFkZXJIYW5kbGU+PiBtX3NoYXJlZERpc3BsYXlMaXN0
SGFuZGxlczsKLSAgICBzdGQ6Om9wdGlvbmFsPFBlbmRpbmdXYWtldXBJbmZvcm1hdGlvbj4gbV9w
ZW5kaW5nV2FrZXVwSW5mbzsKLSAgICBJUEM6OlNlbWFwaG9yZSBtX3Jlc3VtZURpc3BsYXlMaXN0
U2VtYXBob3JlOwogICAgIElQQzo6U2VtYXBob3JlIG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmU7
CiAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeTsK
ICAgICBTY29wZWRSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0IG1fcmVuZGVyaW5nUmVzb3VyY2Vz
UmVxdWVzdDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IG1fY3VycmVudE1hc2tJ
bWFnZUJ1ZmZlcjsKLSAgICBBdG9taWM8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlPiBtX2xh
c3RLbm93blN0YXRlIHsgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFN0YXRlOjpJbml0aWFsaXplZCB9
OworICAgIFdlYWtIYXNoU2V0PFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI+IG1fcmVtb3RlRGlz
cGxheUxpc3RzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IDFlZjU2ZGNjOTc2Mjc0ZTM1NmFiMjJiNGVhNGU3
MWJjZmFjMGIwZGYuLmExNDJmNDg5NjZmNWM0OTc1OTQ1NjU0NzcyYzc5YzMxOTc2ZjUzZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0yMiwyMCArMjIsMTgg
QEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVy
aW5nQmFja2VuZCB7CittZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIE5vdFJlZkNv
dW50ZWQgU3RyZWFtIHsKICAgICBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUg
bG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgZW51bTp1aW50OF90IFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KQotICAgIFdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3Qoc3RydWN0IFdlYktpdDo6R1BVUHJvY2Vz
c1dha2V1cE1lc3NhZ2VBcmd1bWVudHMgYXJndW1lbnRzKQotICAgIFVwZGF0ZVNoYXJlZE1lbW9y
eUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCkgLT4gKFdlYktpdDo6U2hhcmVk
TWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cwotICAgIFNlbWFwaG9yZUZvckdl
dFBpeGVsQnVmZmVyKCkgLT4gKElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMK
LSAgICBVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcih1aW50
MzJfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRs
ZSwgSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cworICAgIFVwZGF0ZVNoYXJl
ZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCkgLT4gKFdlYktpdDo6
U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cyBOb3RTdHJlYW1FbmNv
ZGFibGVSZXBseQorICAgIFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKCkgLT4gKElQQzo6U2Vt
YXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMgTm90U3RyZWFtRW5jb2RhYmxlUmVwbHkKKyAg
ICBVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJf
dCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZSwg
SVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cyBOb3RTdHJlYW1FbmNvZGFibGVS
ZXBseQogICAgIERlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpCiAgICAgR2V0RGF0
YVVSTEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2Vy
dmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoU3RyaW5nIHVybFN0cmluZykgU3luY2hyb25vdXMK
ICAgICBHZXREYXRhRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rvcjx1aW50OF90PiBkYXRhKSBTeW5j
aHJvbm91cwotICAgIEdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgZW51bTp1aW50OF90IFdlYkNv
cmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIC0+IChXZWJLaXQ6OlNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKLSAgICBDYWNoZU5hdGl2
ZUltYWdlKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQot
ICAgIENhY2hlRm9udChJUEM6OkZvbnRSZWZlcmVuY2UgZm9udCkKKyAgICBHZXRTaGFyZWFibGVC
aXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
aW1hZ2VCdWZmZXIsIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJl
c2VydmVSZXNvbHV0aW9uKSAtPiAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5k
bGUpIFN5bmNocm9ub3VzIE5vdFN0cmVhbUVuY29kYWJsZVJlcGx5CisgICAgQ2FjaGVOYXRpdmVJ
bWFnZShXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgTm90
U3RyZWFtRW5jb2RhYmxlCisgICAgQ2FjaGVGb250KElQQzo6Rm9udFJlZmVyZW5jZSBmb250KSBO
b3RTdHJlYW1FbmNvZGFibGUKICAgICBEZWxldGVBbGxGb250cygpCi0gICAgRGlkQ3JlYXRlU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxl
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb25CdWZmZXJJ
ZGVudGlmaWVyKQogICAgIFJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCB1
c2VDb3VudCkKICAgICBGaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZShXZWJLaXQ6OlJlbmRlcmluZ1Vw
ZGF0ZUlEIHJlbmRlcmluZ1VwZGF0ZUlEKQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRl
cnMuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggNDRhMjc4MjY1MmE4ZmViMTNkNWQ0Y2E3
NTUxMDFmMGYzZWJlZGU4Yy4uMTc5N2Q1YmE0YWExMWY1ZmE0ZjU3MzE5MGVlNTBmYzhiYjdiOTkw
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVy
cy5oCkBAIC0zNiwxMyArMzYsMTIgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0cnVjdCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllciBpZGVudGlmaWVyOwotICAgIElQQzo6U2VtYXBob3JlIHJlc3VtZURpc3Bs
YXlMaXN0U2VtYXBob3JlOwogICAgIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZVByb3h5SUQ7
CiAgICAgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlEOwogCiAgICAgdm9pZCBlbmNvZGUo
SVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgZW5jb2RlciA8PCBp
ZGVudGlmaWVyIDw8IHJlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlIDw8IHBhZ2VQcm94eUlEIDw8
IHBhZ2VJRDsKKyAgICAgICAgZW5jb2RlciA8PCBpZGVudGlmaWVyIDw8IHBhZ2VQcm94eUlEIDw8
IHBhZ2VJRDsKICAgICB9CiAKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzPiBkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVy
KQpAQCAtNTIsMTEgKzUxLDYgQEAgc3RydWN0IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlv
blBhcmFtZXRlcnMgewogICAgICAgICBpZiAoIWlkZW50aWZpZXIpCiAgICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8SVBDOjpTZW1hcGhvcmU+
IHJlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlOwotICAgICAgICBkZWNvZGVyID4+IHJlc3VtZURp
c3BsYXlMaXN0U2VtYXBob3JlOwotICAgICAgICBpZiAoIXJlc3VtZURpc3BsYXlMaXN0U2VtYXBo
b3JlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQogICAgICAgICBzdGQ6Om9w
dGlvbmFsPFdlYlBhZ2VQcm94eUlkZW50aWZpZXI+IHBhZ2VQcm94eUlEOwogICAgICAgICBkZWNv
ZGVyID4+IHBhZ2VQcm94eUlEOwogICAgICAgICBpZiAoIXBhZ2VQcm94eUlEKQpAQCAtNjcsNyAr
NjEsNyBAQCBzdHJ1Y3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyB7
CiAgICAgICAgIGlmICghcGFnZUlEKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
IAotICAgICAgICByZXR1cm4ge3sgKmlkZW50aWZpZXIsIFdURk1vdmUoKnJlc3VtZURpc3BsYXlM
aXN0U2VtYXBob3JlKSwgKnBhZ2VQcm94eUlELCAqcGFnZUlEIH19OworICAgICAgICByZXR1cm4g
eyB7ICppZGVudGlmaWVyLCAqcGFnZVByb3h5SUQsICpwYWdlSUQgfSB9OwogICAgIH0KIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tYWMvY29tLmFwcGxlLldlYktp
dC5HUFVQcm9jZXNzLnNiLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21hYy9jb20uYXBw
bGUuV2ViS2l0LkdQVVByb2Nlc3Muc2IuaW4KaW5kZXggNmE0ZjFjOGUzNDIxMzc5ZTVlMGI0ZTU3
NzRmNGU4M2EwNGQyZjgzNi4uY2ViYTk2YWQ1ZWJhOTZkMDcwOGE5NDJkYzE5OTBhZTdiZWY5MjBj
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21hYy9jb20uYXBwbGUuV2Vi
S2l0LkdQVVByb2Nlc3Muc2IuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21hYy9j
b20uYXBwbGUuV2ViS2l0LkdQVVByb2Nlc3Muc2IuaW4KQEAgLTc0Miw5ICs3NDIsNyBAQAogKGFs
bG93IG1hY2gtbG9va3VwCiAgICAgICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuYXVkaW8uYXVk
aW9oYWxkIikKICAgICAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5DQVJlbmRlclNlcnZlciIp
IDsgTmVlZGVkIGZvciBbQ0FDb250ZXh0IHJlbW90ZUNvbnRleHRXaXRoT3B0aW9uc10KLSNpZiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTIwMDAwCiAgICAgICAgKGdsb2JhbC1u
YW1lICJjb20uYXBwbGUubHNkLm1hcGRiIikKLSNlbmRpZgogICAgICAgIChnbG9iYWwtbmFtZSAi
Y29tLmFwcGxlLmZvbnRzIikKICAgICAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5Qb3dlck1h
bmFnZW1lbnQuY29udHJvbCIpCiAgICAgICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUudHJ1c3Rk
LmFnZW50IikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggODc1NWZiYWRmM2JmMTYw
ODc5YzYzYjc5NDY4NjYzYzVlNTIzNzM1MS4uMmJhOTM2OTlhOGNjYTEzYWI3MWJhNmFhNDRkMGY0
ODdmNWIzNTRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTI5LDEzICsyOSwx
MyBAQAogCiAjaW5jbHVkZSAiRW5jb2Rlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlICJSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaCIKKyNpbmNsdWRlICJSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMuaCIKICNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0NvbmNyZXRlSW1hZ2VCdWZmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlz
dFJlY29yZGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJlcGxheWVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8d3RmL0NvbmRp
dGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CkBAIC00NywxMiArNDcsMTEgQEAgY2xhc3Mg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDsKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPiBj
bGFzcyBUaHJlYWRTYWZlUmVtb3RlSW1hZ2VCdWZmZXJGbHVzaGVyOwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBCYWNrZW5kVHlwZT4KLWNsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgOiBwdWJsaWMg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OkRlbGVnYXRlLCBwdWJsaWMgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50IHsKLSAgICB1c2luZyBCYXNl
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT47Ci0gICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6Om1f
YmFja2VuZDsKLSAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9kcmF3aW5n
Q29udGV4dDsKLSAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9yZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXI7Ci0gICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXI6OnJlc29sdXRpb25TY2FsZTsKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgOiBwdWJs
aWMgV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4geworICAgIHVzaW5n
IEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyID0gV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxC
YWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6Om1fYmFja2Vu
ZDsKKyAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6bV9yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXI7CisgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OnJlc29sdXRp
b25TY2FsZTsKIAogcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8UmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eT4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3Bh
Y2UsIFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkmIHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKQEAgLTY2LDcgKzY1LDcgQEAg
cHVibGljOgogICAgIH5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCkKICAgICB7CiAgICAgICAgIGlm
ICghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgfHwgbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHktPmlzR1BVUHJvY2Vzc0Nvbm5lY3Rpb25DbG9zZWQoKSkgewotICAgICAgICAgICAg
Y2xlYXJEaXNwbGF5TGlzdCgpOworICAgICAgICAgICAgbV9yZW1vdGVEaXNwbGF5TGlzdC5yZXNl
dE5lZWRzRmx1c2goKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC05OCwx
OSArOTcsMTQgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eShjb25zdCBXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OlBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSYgcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KQotICAgICAgICA6IEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyKHBhcmFtZXRlcnMs
IHRoaXMpCisgICAgICAgIDogQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXIocGFyYW1ldGVycykKICAg
ICAgICAgLCBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShtYWtlV2Vha1B0cihyZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkpKQorICAgICAgICAsIG1fcmVtb3RlRGlzcGxheUxpc3QoKnRo
aXMsIHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSwgeyB7IH0sIEJhc2VDb25jcmV0ZUltYWdl
QnVmZmVyOjpsb2dpY2FsU2l6ZSgpIH0sIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpiYXNlVHJh
bnNmb3JtKCkpCiAgICAgewogICAgICAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpOwogICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVtb3RlUmVz
b3VyY2VDYWNoZVByb3h5KCkuY2FjaGVJbWFnZUJ1ZmZlcigqdGhpcyk7Ci0KLSAgICAgICAgbV9k
cmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpLnNldEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50KHRo
aXMpOwotICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuc2V0SXRlbUJ1ZmZl
clJlYWRpbmdDbGllbnQobnVsbHB0cik7Ci0gICAgICAgIG1fZHJhd2luZ0NvbnRleHQuZGlzcGxh
eUxpc3QoKS5zZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMoZmFsc2UpOwogICAgIH0KIAotICAg
IFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpyZW5kZXJpbmdNb2RlKCk7IH0KLQogICAg
IC8vIEl0IGlzIHNhZmUgdG8gYWNjZXNzIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXIgZnJvbSB0
aGUgbWFpbiB0aHJlYWQgd2l0aG91dCBsb2NraW5nIHNpbmNlIGl0CiAgICAgLy8gb25seSBnZXRz
IG1vZGlmaWVkIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICBib29sIGhhc1BlbmRpbmdGbHVzaCgp
IGNvbnN0IFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKQEAgLTIxOSw3ICsyMTMs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAg
ICAgIGF1dG8mIG11dGFibGVUaGlzID0gY29uc3RfY2FzdDxSZW1vdGVJbWFnZUJ1ZmZlclByb3h5
Jj4oKnRoaXMpOwotICAgICAgICBtdXRhYmxlVGhpcy5tX2RyYXdpbmdDb250ZXh0LnJlY29yZGVy
KCkuZ2V0UGl4ZWxCdWZmZXIoZGVzdGluYXRpb25Gb3JtYXQsIHNyY1JlY3QpOworICAgICAgICBt
dXRhYmxlVGhpcy5tX3JlbW90ZURpc3BsYXlMaXN0LmdldFBpeGVsQnVmZmVyKGRlc3RpbmF0aW9u
Rm9ybWF0LCBzcmNSZWN0KTsKICAgICAgICAgbXV0YWJsZVRoaXMuZmx1c2hEcmF3aW5nQ29udGV4
dEFzeW5jKCk7CiAKICAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT53
YWl0Rm9yR2V0UGl4ZWxCdWZmZXJUb0NvbXBsZXRlKHRpbWVvdXQpKQpAQCAtMjI5LDEyICsyMjMs
MjggQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gcGl4ZWxCdWZmZXI7CiAgICAgfQogCisg
ICAgdm9pZCBjbGVhckJhY2tlbmQoKSBmaW5hbAorICAgIHsKKyAgICAgICAgbV9yZW1vdGVEaXNw
bGF5TGlzdC5yZXNldE5lZWRzRmx1c2goKTsKKyAgICAgICAgQmFzZUNvbmNyZXRlSW1hZ2VCdWZm
ZXI6OmNsZWFyQmFja2VuZCgpOworICAgIH0KKworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCgpIGNvbnN0IGZpbmFsCisgICAgeworICAgICAgICByZXR1cm4gY29uc3RfY2Fz
dDxSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Kj4odGhpcyktPm1fcmVtb3RlRGlzcGxheUxpc3Q7Cisg
ICAgfQorCisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIGZp
bmFsCisgICAgeworICAgICAgICByZXR1cm4gJm1fcmVtb3RlRGlzcGxheUxpc3Q7CisgICAgfQor
CiAgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYgcGl4
ZWxCdWZmZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCA9IFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpIGZpbmFsCiAgICAgewogICAgICAgICAvLyBUaGUgbWF0aCBpbnNpZGUgUGl4ZWxCdWZm
ZXI6OmNyZWF0ZSgpIGRvZXNuJ3QgYWdyZWUgd2l0aCB0aGUgbWF0aCBpbnNpZGUgSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcigpIGFib3V0IGhvdyBtX3Jlc29sdXRpb25TY2FsZSBp
bnRlcmFjdHMgd2l0aCB0aGUgZGF0YSBpbiB0aGUgSW1hZ2VCdWZmZXIuCiAgICAgICAgIC8vIFRo
aXMgbWVhbnMgdGhhdCBwdXRQaXhlbEJ1ZmZlcigpIGlzIG9ubHkgY2FsbGVkIHdoZW4gcmVzb2x1
dGlvblNjYWxlKCkgPT0gMS4KICAgICAgICAgQVNTRVJUKHJlc29sdXRpb25TY2FsZSgpID09IDEp
OwotICAgICAgICBtX2RyYXdpbmdDb250ZXh0LnJlY29yZGVyKCkucHV0UGl4ZWxCdWZmZXIocGl4
ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCk7CisgICAgICAgIG1fcmVt
b3RlRGlzcGxheUxpc3QucHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQ
b2ludCwgZGVzdEZvcm1hdCk7CiAgICAgfQogCiAgICAgYm9vbCBwcmVmZXJzUHJlcGFyYXRpb25G
b3JEaXNwbGF5KCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMjYwLDk0ICsyNzAsMzIgQEAg
cHJvdGVjdGVkOgogICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAoIW1fZHJhd2luZ0Nv
bnRleHQuZGlzcGxheUxpc3QoKS5pc0VtcHR5KCkgfHwgIWhhc1BlbmRpbmdGbHVzaCgpKSB7Cisg
ICAgICAgIGlmIChtX3JlbW90ZURpc3BsYXlMaXN0Lm5lZWRzRmx1c2goKSB8fCAhaGFzUGVuZGlu
Z0ZsdXNoKCkpIHsKICAgICAgICAgICAgIG1fc2VudEZsdXNoSWRlbnRpZmllciA9IFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKLSAgICAgICAgICAg
IG1fZHJhd2luZ0NvbnRleHQucmVjb3JkZXIoKS5mbHVzaENvbnRleHQobV9zZW50Rmx1c2hJZGVu
dGlmaWVyKTsKKyAgICAgICAgICAgIG1fcmVtb3RlRGlzcGxheUxpc3QuZmx1c2hDb250ZXh0KG1f
c2VudEZsdXNoSWRlbnRpZmllcik7CiAgICAgICAgIH0KIAotICAgICAgICBtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS0+c2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7Ci0g
ICAgICAgIGNsZWFyRGlzcGxheUxpc3QoKTsKKyAgICAgICAgbV9yZW1vdGVEaXNwbGF5TGlzdC5y
ZXNldE5lZWRzRmx1c2goKTsKICAgICB9CiAKLSAgICB2b2lkIHJlY29yZE5hdGl2ZUltYWdlVXNl
KFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiBpbWFnZSkgZmluYWwKKyAgICB2b2lkIHJlY29yZE5hdGl2
ZUltYWdlVXNlKFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiBpbWFnZSkKICAgICB7CiAgICAgICAgIGlm
IChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKICAgICAgICAgICAgIG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LT5yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkoKS5yZWNvcmROYXRp
dmVJbWFnZVVzZShpbWFnZSk7CiAgICAgfQogCi0gICAgYm9vbCBpc0NhY2hlZEltYWdlQnVmZmVy
KGNvbnN0IFdlYkNvcmU6OkltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikgY29uc3QgZmluYWwKLSAg
ICB7Ci0gICAgICAgIGlmICghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gY2FjaGVkSW1hZ2VCdWZmZXIgPSBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5KCkuY2Fj
aGVkSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkp
OwotICAgICAgICBBU1NFUlQoIWNhY2hlZEltYWdlQnVmZmVyIHx8IGNhY2hlZEltYWdlQnVmZmVy
ID09ICZpbWFnZUJ1ZmZlcik7Ci0gICAgICAgIHJldHVybiBjYWNoZWRJbWFnZUJ1ZmZlcjsKLSAg
ICB9Ci0KLSAgICB2b2lkIGNoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIG5leHRJbWFnZUJ1ZmZlcikgZmluYWwKLSAgICB7Ci0g
ICAgICAgIGJvb2wgd2FzRW1wdHkgPSBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuaXNF
bXB0eSgpOwotICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkudGVtcGxhdGUg
YXBwZW5kPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9u
SW1hZ2VCdWZmZXI+KG5leHRJbWFnZUJ1ZmZlcik7Ci0gICAgICAgIGlmICh3YXNFbXB0eSkKLSAg
ICAgICAgICAgIGNsZWFyRGlzcGxheUxpc3QoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHByZXBhcmVU
b0FwcGVuZERpc3BsYXlMaXN0SXRlbXMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJI
YW5kbGUmJiBoYW5kbGUpIGZpbmFsCi0gICAgewotICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRp
c3BsYXlMaXN0KCkucHJlcGFyZVRvQXBwZW5kKFdURk1vdmUoaGFuZGxlKSk7Ci0gICAgfQotCi0g
ICAgdm9pZCBjbGVhckRpc3BsYXlMaXN0KCkKLSAgICB7Ci0gICAgICAgIG1fZHJhd2luZ0NvbnRl
eHQuZGlzcGxheUxpc3QoKS5jbGVhcigpOwotICAgIH0KLQotICAgIGJvb2wgY2FuQXBwZW5kSXRl
bU9mVHlwZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGUpIGZpbmFsCi0gICAgewotICAg
ICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHktPndpbGxBcHBlbmRJdGVtKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBkaWRBcHBlbmREYXRhKGNvbnN0IFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlJiBoYW5kbGUsIHNpemVfdCBudW1i
ZXJPZkJ5dGVzLCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlkQ2hhbmdlSXRlbUJ1ZmZlciBkaWRD
aGFuZ2VJdGVtQnVmZmVyKSBmaW5hbAotICAgIHsKLSAgICAgICAgaWYgKExJS0VMWShtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCi0gICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS0+ZGlkQXBwZW5kRGF0YShoYW5kbGUsIG51bWJlck9mQnl0ZXMsIGRpZENoYW5n
ZUl0ZW1CdWZmZXIsIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHJlY29yZEZvbnRVc2UoV2ViQ29yZTo6Rm9udCYgZm9udCkgZmluYWwKKyAgICB2b2lk
IHJlY29yZEZvbnRVc2UoV2ViQ29yZTo6Rm9udCYgZm9udCkKICAgICB7CiAgICAgICAgIGlmICht
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKICAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LT5yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkoKS5yZWNvcmRGb250VXNl
KGZvbnQpOwogICAgIH0KIAotICAgIHZvaWQgcmVjb3JkSW1hZ2VCdWZmZXJVc2UoV2ViQ29yZTo6
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKSBmaW5hbAorICAgIHZvaWQgcmVjb3JkSW1hZ2VCdWZm
ZXJVc2UoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQogICAgIHsKICAgICAgICAg
aWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQogICAgICAgICAgICAgbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpLnJlY29yZElt
YWdlQnVmZmVyVXNlKGltYWdlQnVmZmVyKTsKICAgICB9CiAKLSAgICBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSBjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCBjYXBhY2l0eSkg
ZmluYWwKLSAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpKQotICAgICAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LT5jcmVhdGVJdGVtQnVmZmVyKGNhcGFjaXR5LCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cik7Ci0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07
Ci0gICAgfQotCi0gICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZW5jb2RlSXRlbU91
dE9mTGluZShjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3RJdGVtJiBpdGVt
KSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6dmlzaXQoW10oY29uc3Qg
YXV0byYgZGlzcGxheUxpc3RJdGVtKSAtPiBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiB7
Ci0gICAgICAgICAgICB1c2luZyBEaXNwbGF5TGlzdEl0ZW1UeXBlID0gdHlwZW5hbWUgV1RGOjpS
ZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZShkaXNwbGF5TGlzdEl0ZW0pPjo6dHlwZTsKLSAg
ICAgICAgICAgIGlmIGNvbnN0ZXhwciAoIURpc3BsYXlMaXN0SXRlbVR5cGU6OmlzSW5saW5lSXRl
bSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmpl
Y3Q8RGlzcGxheUxpc3RJdGVtVHlwZT4oZGlzcGxheUxpc3RJdGVtKTsKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgfSwgaXRlbSk7Ci0gICAgfQotCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OlRocmVhZFNhZmVJbWFnZUJ1ZmZlckZsdXNoZXI+IGNyZWF0ZUZsdXNoZXIoKSBmaW5hbAogICAg
IHsKICAgICAgICAgcmV0dXJuIFdURjo6bWFrZVVuaXF1ZTxUaHJlYWRTYWZlUmVtb3RlSW1hZ2VC
dWZmZXJGbHVzaGVyPEJhY2tlbmRUeXBlPj4oKnRoaXMpOwpAQCAtMzU4LDYgKzMwNiw3IEBAIHBy
b3RlY3RlZDoKICAgICBDb25kaXRpb24gbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllckNoYW5nZWRD
b25kaXRpb247CiAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyIG1f
cmVjZWl2ZWRGbHVzaElkZW50aWZpZXIgV1RGX0dVQVJERURfQllfTE9DSyhtX3JlY2VpdmVkRmx1
c2hJZGVudGlmaWVyTG9jayk7IC8vIE9ubHkgbW9kaWZpZWQgb24gdGhlIG1haW4gdGhyZWFkIGJ1
dCBtYXkgZ2V0IHF1ZXJpZWQgb24gYSBzZWNvbmRhcnkgdGhyZWFkLgogICAgIFdlYWtQdHI8UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTsK
KyAgICBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkgbV9yZW1vdGVEaXNwbGF5TGlzdDsK
IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4IGJmNDlhODI3ZDIwMjgyNGE0N2IwZDY1Njk2YzZj
YTJjN2Q4ZmI5MWUuLmQ5ODIxYWM1N2E3NzdkMDRjYjk1NDdmYjQzNzJkNDcwODVlZjI2ZTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTI4LDcgKzI4LDYg
QEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotI2luY2x1ZGUgIkRpc3BsYXlMaXN0V3Jp
dGVySGFuZGxlLmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJv
eHkuaCIKQEAgLTUyLDcgKzUxLDYgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUKIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KFdlYlBhZ2Um
IHdlYlBhZ2UpCiAgICAgOiBtX3BhcmFtZXRlcnMgewogICAgICAgICBSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcjo6Z2VuZXJhdGUoKSwKLSAgICAgICAgSVBDOjpTZW1hcGhvcmUgeyB9LAogICAg
ICAgICB3ZWJQYWdlLndlYlBhZ2VQcm94eUlkZW50aWZpZXIoKSwKICAgICAgICAgd2ViUGFnZS5p
ZGVudGlmaWVyKCkKICAgICB9CkBAIC03Nyw3ICs3NSw5IEBAIEdQVVByb2Nlc3NDb25uZWN0aW9u
JiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9u
KCkKICAgICAgICAgYXV0byYgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpOwogICAgICAgICBncHVQcm9jZXNz
Q29ubmVjdGlvbi5hZGRDbGllbnQoKnRoaXMpOwogICAgICAgICBncHVQcm9jZXNzQ29ubmVjdGlv
bi5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCByZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcigpLnRvVUludDY0KCksICp0aGlzKTsKLSAgICAgICAgZ3B1UHJvY2Vz
c0Nvbm5lY3Rpb24uY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OkNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQobV9wYXJhbWV0ZXJzKSwgMCwgSVBDOjpT
ZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwor
ICAgICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29ubmVjdGlvbkJ1ZmZlclNpemUgPSAxIDw8
IDIxOworICAgICAgICBtX3N0cmVhbUNvbm5lY3Rpb24gPSBtYWtlVW5pcXVlPElQQzo6U3RyZWFt
Q2xpZW50Q29ubmVjdGlvbj4oZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24uY29ubmVjdGlvbigpLCBjb25u
ZWN0aW9uQnVmZmVyU2l6ZSk7CisgICAgICAgIGdwdVByb2Nlc3NDb25uZWN0aW9uLmNvbm5lY3Rp
b24oKS5zZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVSZW5k
ZXJpbmdCYWNrZW5kKG1fcGFyYW1ldGVycywgbV9zdHJlYW1Db25uZWN0aW9uLT5zdHJlYW1CdWZm
ZXIoKSksIDAsIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5n
Rm9yU3luY1JlcGx5KTsKICAgICAgICAgbV9ncHVQcm9jZXNzQ29ubmVjdGlvbiA9IG1ha2VXZWFr
UHRyKGdwdVByb2Nlc3NDb25uZWN0aW9uKTsKICAgICB9CiAgICAgcmV0dXJuICptX2dwdVByb2Nl
c3NDb25uZWN0aW9uOwpAQCAtOTEsMTIgKzkxLDYgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OmdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UoR1BVUHJvY2Vzc0Nvbm5lY3QK
IAogICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LnJlbW90ZVJlc291cmNlQ2FjaGVXYXNE
ZXN0cm95ZWQoKTsKIAotICAgIG1faWRlbnRpZmllcnNPZlJldXNhYmxlSGFuZGxlcy5jbGVhcigp
OwotICAgIG1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzLmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50
RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9k
ZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9yZW1h
aW5pbmdJdGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dha2V1cCA9IDA7Ci0KICAgICBpZiAobV9k
ZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlUaW1lci5pc0FjdGl2ZSgpKQogICAgICAg
ICBtX2Rlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeVRpbWVyLnN0b3AoKTsKICAgICBt
X2dldFBpeGVsQnVmZmVyU2VtYXBob3JlID0gc3RkOjpudWxsb3B0OwpAQCAtMTMzLDcgKzEyNyw3
IEBAIGJvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp3YWl0Rm9yRGlkRmx1c2goKQog
CiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlUmVtb3RlSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OkNyZWF0ZUltYWdlQnVmZmVyKGltYWdlQnVmZmVyLmxvZ2ljYWxT
aXplKCksIGltYWdlQnVmZmVyLnJlbmRlcmluZ01vZGUoKSwgaW1hZ2VCdWZmZXIucmVzb2x1dGlv
blNjYWxlKCksIGltYWdlQnVmZmVyLmNvbG9yU3BhY2UoKSwgaW1hZ2VCdWZmZXIucGl4ZWxGb3Jt
YXQoKSwgaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpLCByZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2
ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAgc2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDcmVhdGVJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5sb2dp
Y2FsU2l6ZSgpLCBpbWFnZUJ1ZmZlci5yZW5kZXJpbmdNb2RlKCksIGltYWdlQnVmZmVyLnJlc29s
dXRpb25TY2FsZSgpLCBpbWFnZUJ1ZmZlci5jb2xvclNwYWNlKCksIGltYWdlQnVmZmVyLnBpeGVs
Rm9ybWF0KCksIGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKSk7CiB9
CiAKIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVh
dGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0KQpAQCAtMTYzLDggKzE1Nyw2
IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVh
dGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpCiAKIFNoYXJlZE1lbW9yeSogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpzaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcihzaXplX3QgZGF0
YVNpemUsIElQQzo6VGltZW91dCB0aW1lb3V0KQogewotICAgIHNlbmREZWZlcnJlZFdha2V1cE1l
c3NhZ2VJZk5lZWRlZCgpOwotCiAgICAgYm9vbCBuZWVkc1NoYXJlZE1lbW9yeSA9ICFtX2dldFBp
eGVsQnVmZmVyU2hhcmVkTWVtb3J5IHx8IGRhdGFTaXplID4gbV9nZXRQaXhlbEJ1ZmZlclNoYXJl
ZE1lbW9yeUxlbmd0aDsKICAgICBib29sIG5lZWRzU2VtYXBob3JlID0gIW1fZ2V0UGl4ZWxCdWZm
ZXJTZW1hcGhvcmU7CiAKQEAgLTE3NSwxMSArMTY3LDExIEBAIFNoYXJlZE1lbW9yeSogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpzaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcihzaXpl
X3QKICAgICBJUEM6OlNlbWFwaG9yZSBzZW1hcGhvcmU7CiAKICAgICBpZiAobmVlZHNTaGFyZWRN
ZW1vcnkgJiYgbmVlZHNTZW1hcGhvcmUpCi0gICAgICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQ
aXhlbEJ1ZmZlcihkYXRhU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpV
cGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcjo6UmVwbHkoaGFu
ZGxlLCBzZW1hcGhvcmUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCB0aW1lb3V0LCBJ
UEM6OlNlbmRTeW5jT3B0aW9uOjpNYWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMpOwor
ICAgICAgICBzZW5kU3luY1RvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcihkYXRhU2l6
ZSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlB
bmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcjo6UmVwbHkoaGFuZGxlLCBzZW1hcGhvcmUpLCB0
aW1lb3V0KTsKICAgICBlbHNlIGlmIChuZWVkc1NoYXJlZE1lbW9yeSkKLSAgICAgICAgc2VuZFN5
bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUZv
ckdldFBpeGVsQnVmZmVyKGRhdGFTaXplKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyOjpSZXBseShoYW5kbGUpLCBy
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCB0aW1lb3V0LCBJUEM6OlNlbmRTeW5jT3B0aW9u
OjpNYWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMpOworICAgICAgICBzZW5kU3luY1Rv
U3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1v
cnlGb3JHZXRQaXhlbEJ1ZmZlcihkYXRhU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcjo6UmVwbHkoaGFuZGxl
KSwgdGltZW91dCk7CiAgICAgZWxzZSBpZiAobmVlZHNTZW1hcGhvcmUpCi0gICAgICAgIHNlbmRT
eW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpTZW1hcGhvcmVGb3JHZXRQaXhl
bEJ1ZmZlcigpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6U2VtYXBob3JlRm9y
R2V0UGl4ZWxCdWZmZXI6OlJlcGx5KHNlbWFwaG9yZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKCksIHRpbWVvdXQpOworICAgICAgICBzZW5kU3luY1RvU3RyZWFtKE1lc3NhZ2VzOjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcigpLCBNZXNzYWdl
czo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6U2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXI6OlJl
cGx5KHNlbWFwaG9yZSksIHRpbWVvdXQpOwogCiAgICAgaWYgKCFoYW5kbGUuaGFuZGxlLmlzTnVs
bCgpKSB7CiAgICAgICAgIG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1v
cnk6Om1hcChoYW5kbGUuaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5
KTsKQEAgLTIwNCwzMyArMTk2LDI3IEBAIGJvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
Ojp3YWl0Rm9yR2V0UGl4ZWxCdWZmZXJUb0NvbXBsZXRlKElQQzo6VGltZW91dCB0CiB2b2lkIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVt
b3J5KCkKIHsKICAgICBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5ID0gbnVsbHB0cjsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpEZXN0cm95R2V0UGl4ZWxC
dWZmZXJTaGFyZWRNZW1vcnkoKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpT
ZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwor
ICAgIHNlbmRUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6RGVzdHJv
eUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KCkpOwogfQogCiBTdHJpbmcgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24sIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpCiB7Ci0gICAgc2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlm
TmVlZGVkKCk7Ci0KICAgICBTdHJpbmcgdXJsU3RyaW5nOwotICAgIHNlbmRTeW5jKE1lc3NhZ2Vz
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIobWltZVR5
cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbiwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldERhdGFVUkxGb3JJbWFn
ZUJ1ZmZlcjo6UmVwbHkodXJsU3RyaW5nKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwg
MV9zKTsKKyAgICBzZW5kU3luY1RvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpHZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZl
UmVzb2x1dGlvbiwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcjo6UmVwbHkodXJsU3Ry
aW5nKSwgMV9zKTsKICAgICByZXR1cm4gdXJsU3RyaW5nOwogfQogCiBWZWN0b3I8dWludDhfdD4g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXREYXRhRm9ySW1hZ2VCdWZmZXIoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiB7Ci0gICAg
c2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7Ci0KICAgICBWZWN0b3I8dWludDhf
dD4gZGF0YTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
R2V0RGF0YUZvckltYWdlQnVmZmVyKG1pbWVUeXBlLCBxdWFsaXR5LCByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0RGF0YUZv
ckltYWdlQnVmZmVyOjpSZXBseShkYXRhKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwg
MV9zKTsKKyAgICBzZW5kU3luY1RvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpHZXREYXRhRm9ySW1hZ2VCdWZmZXIobWltZVR5cGUsIHF1YWxpdHksIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRE
YXRhRm9ySW1hZ2VCdWZmZXI6OlJlcGx5KGRhdGEpLCAxX3MpOwogICAgIHJldHVybiBkYXRhOwog
fQogCiBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OmdldFNoYXJlYWJsZUJpdG1hcChSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZm
ZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCiB7Ci0gICAgc2VuZERl
ZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7Ci0KICAgICBTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSBoYW5kbGU7Ci0gICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyKGlt
YWdlQnVmZmVyLCBwcmVzZXJ2ZVJlc29sdXRpb24pLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6R2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXI6OlJlcGx5KGhhbmRsZSks
IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIDFfcyk7CisgICAgYXV0byBzZW5kUmVzdWx0
ID0gc2VuZFN5bmNUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0
U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIHByZXNlcnZlUmVzb2x1
dGlvbiksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRTaGFyZWFibGVCaXRt
YXBGb3JJbWFnZUJ1ZmZlcjo6UmVwbHkoaGFuZGxlKSwgMV9zKTsKICAgICBpZiAoaGFuZGxlLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4geyB9OwogICAgIEFTU0VSVF9VTlVTRUQoc2VuZFJlc3Vs
dCwgc2VuZFJlc3VsdCk7CkBAIC0yMzksMzAgKzIyNSwyNyBAQCBSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldFNoYXJlYWJsZUJpdG1hcChSZW5k
ZXJpbgogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y2FjaGVOYXRpdmVJbWFn
ZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNhY2hlTmF0aXZlSW1hZ2UoaGFuZGxlLCBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigp
LCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNS
ZXBseSk7CisgICAgc2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpDYWNoZU5hdGl2ZUltYWdlKGhhbmRsZSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSk7
CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjYWNoZUZvbnQoUmVmPFdl
YkNvcmU6OkZvbnQ+JiYgZm9udCkKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpj
YWNoZUZvbnQoUmVmPEZvbnQ+JiYgZm9udCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpDYWNoZUZvbnQoV1RGTW92ZShmb250KSksIHJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5X
YWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICBzZW5kVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OkNhY2hlRm9udChXVEZNb3ZlKGZvbnQpKSk7CiB9CiAKIHZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkZWxldGVBbGxGb250cygpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6RGVsZXRlQWxsRm9udHMoKSwgcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VF
dmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIHNlbmRUb1N0cmVhbShNZXNzYWdlczo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6RGVsZXRlQWxsRm9udHMoKSk7CiB9CiAKIHZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlUmVtb3RlUmVzb3VyY2UoUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3Qg
dXNlQ291bnQpCiB7Ci0gICAgaWYgKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciA9PSBtX2N1
cnJlbnREZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllcikKLSAgICAgICAgbV9jdXJyZW50
RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIgPSBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZWxlYXNlUmVtb3RlUmVzb3Vy
Y2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1c2VDb3VudCksIHJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5X
YWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICBzZW5kVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OlJlbGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIsIHVzZUNvdW50KSk7CiB9CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjpmaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZSgpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6RmluYWxpemVSZW5kZXJpbmdVcGRhdGUobV9yZW5kZXJpbmdV
cGRhdGVJRCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6
RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICBzZW5kVG9T
dHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkZpbmFsaXplUmVuZGVyaW5n
VXBkYXRlKG1fcmVuZGVyaW5nVXBkYXRlSUQpKTsKICAgICBtX3JlbW90ZVJlc291cmNlQ2FjaGVQ
cm94eS5maW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZSgpOwogICAgIG1fcmVuZGVyaW5nVXBkYXRlSUQu
aW5jcmVtZW50KCk7CiB9CkBAIC0yOTMsMTU4ICsyNzYsMzQgQEAgdm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6OmRpZEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKFJlbmRlcmluZ1VwZGF0
ZUlEIGQKICAgICBtX2RpZFJlbmRlcmluZ1VwZGF0ZUlEID0gc3RkOjptaW4oZGlkUmVuZGVyaW5n
VXBkYXRlSUQsIG1fcmVuZGVyaW5nVXBkYXRlSUQpOwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6d2lsbEFwcGVuZEl0ZW0oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IG5ld0Rlc3RpbmF0aW9uSWRlbnRpZmllcikKLXsKLSAgICBpZiAobV9jdXJyZW50RGVzdGluYXRp
b25JbWFnZUJ1ZmZlcklkZW50aWZpZXIgPT0gbmV3RGVzdGluYXRpb25JZGVudGlmaWVyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byBwcmV2aW91c0Rlc3RpbmF0aW9uQnVmZmVySWRl
bnRpZmllciA9IHN0ZDo6ZXhjaGFuZ2UobV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklk
ZW50aWZpZXIsIG5ld0Rlc3RpbmF0aW9uSWRlbnRpZmllcikpIHsKLSAgICAgICAgaWYgKGF1dG8g
aW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jYWNoZWRJbWFnZUJ1ZmZl
cigqcHJldmlvdXNEZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpKQotICAgICAgICAgICAgaW1h
Z2VCdWZmZXItPmNoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIobmV3RGVzdGluYXRpb25JZGVu
dGlmaWVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgfQotCi0gICAgYXV0byBoYW5kbGUgPSBtb3N0UmVjZW50bHlVc2VkRGlzcGxheUxpc3RI
YW5kbGUoKTsKLSAgICBpZiAoVU5MSUtFTFkoIWhhbmRsZSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGF1dG8gbmV3RGVzdGluYXRpb24gPSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jYWNo
ZWRJbWFnZUJ1ZmZlcihuZXdEZXN0aW5hdGlvbklkZW50aWZpZXIpOwotICAgIGlmIChVTkxJS0VM
WSghbmV3RGVzdGluYXRpb24pKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaGFuZGxlLT5tb3ZlV3JpdGFibGVPZmZzZXRUb1N0
YXJ0SWZQb3NzaWJsZSgpOwotICAgIG5ld0Rlc3RpbmF0aW9uLT5wcmVwYXJlVG9BcHBlbmREaXNw
bGF5TGlzdEl0ZW1zKGhhbmRsZS0+Y3JlYXRlSGFuZGxlKCkpOwotfQotCi12b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6c2VuZFdha2V1cE1lc3NhZ2UoY29uc3QgR1BVUHJvY2Vzc1dh
a2V1cE1lc3NhZ2VBcmd1bWVudHMmIGFyZ3VtZW50cykKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0o
U2hhcmVkRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlNlbmRpbmcgd2FrZXVwOiBJdGVtc1siIDw8
IGFyZ3VtZW50cy5pdGVtQnVmZmVySWRlbnRpZmllciA8PCAiXSA9PiBJbWFnZSgiIDw8IGFyZ3Vt
ZW50cy5kZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllciA8PCAiKSBhdCAiIDw8IGFyZ3Vt
ZW50cy5vZmZzZXQpOwotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
Oldha2VVcEFuZEFwcGx5RGlzcGxheUxpc3QoYXJndW1lbnRzKSwgcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRp
bmdGb3JTeW5jUmVwbHkpOwotfQotCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
c2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCkKK1JlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIoKSBjb25zdAogewotICAgIGF1dG8gYXJndW1lbnRzID0gc3RkOjpleGNoYW5nZShtX2Rl
ZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50cywgc3RkOjpudWxsb3B0KTsKLSAgICBpZiAoIWFy
Z3VtZW50cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2VuZFdha2V1cE1lc3NhZ2UoKmFyZ3Vt
ZW50cyk7Ci0gICAgbV9yZW1haW5pbmdJdGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dha2V1cCA9
IDA7Ci19Ci0KLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRBcHBlbmREYXRh
KGNvbnN0IERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlJiBoYW5kbGUsIHNpemVfdCBudW1i
ZXJPZkJ5dGVzLCBEaXNwbGF5TGlzdDo6RGlkQ2hhbmdlSXRlbUJ1ZmZlciBkaWRDaGFuZ2VJdGVt
QnVmZmVyLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb25JbWFnZUJ1ZmZl
cikKLXsKLSAgICBhdXRvKiBzaGFyZWRIYW5kbGUgPSBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxl
cy5nZXQoaGFuZGxlLmlkZW50aWZpZXIpOwotICAgIGlmIChVTkxJS0VMWSghc2hhcmVkSGFuZGxl
KSkKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIGJvb2wgd2Fz
RW1wdHkgPSBzaGFyZWRIYW5kbGUtPmFkdmFuY2UobnVtYmVyT2ZCeXRlcykgPT0gbnVtYmVyT2ZC
eXRlczsKLSAgICBpZiAoIXdhc0VtcHR5IHx8IGRpZENoYW5nZUl0ZW1CdWZmZXIgPT0gRGlzcGxh
eUxpc3Q6OkRpZENoYW5nZUl0ZW1CdWZmZXI6OlllcykgewotICAgICAgICBpZiAobV9kZWZlcnJl
ZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMpIHsKLSAgICAgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIg
PSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jYWNoZWRJbWFnZUJ1ZmZlcihtX2RlZmVycmVk
V2FrZXVwTWVzc2FnZUFyZ3VtZW50cy0+ZGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIp
OwotICAgICAgICAgICAgaWYgKGltYWdlQnVmZmVyICYmIGltYWdlQnVmZmVyLT5iYWNrZW5kKCkg
JiYgc2hhcmVkSGFuZGxlLT50cnlUb1Jlc3VtZSh7IG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJn
dW1lbnRzLT5vZmZzZXQsIG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzLT5kZXN0aW5h
dGlvbkltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpIH0pKSB7Ci0gICAgICAgICAgICAg
ICAgbV9wYXJhbWV0ZXJzLnJlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlLnNpZ25hbCgpOwotICAg
ICAgICAgICAgICAgIG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzID0gc3RkOjpudWxs
b3B0OwotICAgICAgICAgICAgICAgIG1fcmVtYWluaW5nSXRlbXNUb0FwcGVuZEJlZm9yZVNlbmRp
bmdXYWtldXAgPSAwOwotICAgICAgICAgICAgfSBlbHNlIGlmICghLS1tX3JlbWFpbmluZ0l0ZW1z
VG9BcHBlbmRCZWZvcmVTZW5kaW5nV2FrZXVwKSB7Ci0gICAgICAgICAgICAgICAgbV9kZWZlcnJl
ZFdha2V1cE1lc3NhZ2VBcmd1bWVudHMtPnJlYXNvbiA9IEdQVVByb2Nlc3NXYWtldXBSZWFzb246
Okl0ZW1Db3VudEh5c3RlcmVzaXNFeGNlZWRlZDsKLSAgICAgICAgICAgICAgICBzZW5kV2FrZXVw
TWVzc2FnZSgqc3RkOjpleGNoYW5nZShtX2RlZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50cywg
c3RkOjpudWxsb3B0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwotCi0g
ICAgYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNhY2hlZElt
YWdlQnVmZmVyKGRlc3RpbmF0aW9uSW1hZ2VCdWZmZXIpOwotICAgIGF1dG8gb2Zmc2V0VG9SZWFk
ID0gc2hhcmVkSGFuZGxlLT53cml0YWJsZU9mZnNldCgpIC0gbnVtYmVyT2ZCeXRlczsKLSAgICBp
ZiAoaW1hZ2VCdWZmZXIgJiYgaW1hZ2VCdWZmZXItPmJhY2tlbmQoKSAmJiBzaGFyZWRIYW5kbGUt
PnRyeVRvUmVzdW1lKHsgb2Zmc2V0VG9SZWFkLCBkZXN0aW5hdGlvbkltYWdlQnVmZmVyLnRvVUlu
dDY0KCkgfSkpIHsKLSAgICAgICAgbV9wYXJhbWV0ZXJzLnJlc3VtZURpc3BsYXlMaXN0U2VtYXBo
b3JlLnNpZ25hbCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSW5zdGVhZCBv
ZiBzZW5kaW5nIHRoZSB3YWtldXAgbWVzc2FnZSBpbW1lZGlhdGVseSwgd2FpdCBmb3Igc29tZSBh
ZGRpdGlvbmFsIGRhdGEuIFRoaXMgZ2l2ZXMgdGhlCi0gICAgLy8gd2ViIHByb2Nlc3MgYSAiaGVh
ZCBzdGFydCIsIGRlY3JlYXNpbmcgdGhlIGxpa2VsaWhvb2QgdGhhdCB0aGUgR1BVIHByb2Nlc3Mg
d2lsbCBlbmNvdW50ZXIgZnJlcXVlbnQKLSAgICAvLyB3YWtldXBzIHdoZW4gcHJvY2Vzc2luZyBh
IGxhcmdlIGFtb3VudCBvZiBkaXNwbGF5IGxpc3QgaXRlbXMuCi0gICAgY29uc3RleHByIHVuc2ln
bmVkIGl0ZW1Db3VudEh5c3RlcmVzaXNCZWZvcmVTZW5kaW5nV2FrZXVwID0gNTEyOwotCi0gICAg
bV9yZW1haW5pbmdJdGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dha2V1cCA9IGl0ZW1Db3VudEh5
c3RlcmVzaXNCZWZvcmVTZW5kaW5nV2FrZXVwOwotICAgIG1fZGVmZXJyZWRXYWtldXBNZXNzYWdl
QXJndW1lbnRzID0ge3sgaGFuZGxlLmlkZW50aWZpZXIsIG9mZnNldFRvUmVhZCwgZGVzdGluYXRp
b25JbWFnZUJ1ZmZlciB9fTsKKyAgICByZXR1cm4gbV9wYXJhbWV0ZXJzLmlkZW50aWZpZXI7CiB9
CiAKLVJlZlB0cjxEaXNwbGF5TGlzdFdyaXRlckhhbmRsZT4gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5Ojptb3N0UmVjZW50bHlVc2VkRGlzcGxheUxpc3RIYW5kbGUoKQorUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjplbnN1cmVCYWNrZW5k
Q3JlYXRlZCgpCiB7Ci0gICAgaWYgKFVOTElLRUxZKG1faWRlbnRpZmllcnNPZlJldXNhYmxlSGFu
ZGxlcy5pc0VtcHR5KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBt
X3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlcy5nZXQobV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5k
bGVzLmZpcnN0KCkpOworICAgIGVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCk7CisgICAgcmV0
dXJuIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCk7CiB9CiAKLVJlZlB0cjxEaXNwbGF5TGlz
dFdyaXRlckhhbmRsZT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmaW5kUmV1c2FibGVE
aXNwbGF5TGlzdEhhbmRsZShzaXplX3QgY2FwYWNpdHkpCitJUEM6OlN0cmVhbUNsaWVudENvbm5l
Y3Rpb24mIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6c3RyZWFtQ29ubmVjdGlvbigpCiB7
Ci0gICAgYXV0byBtb3N0UmVjZW50bHlVc2VkSGFuZGxlID0gbW9zdFJlY2VudGx5VXNlZERpc3Bs
YXlMaXN0SGFuZGxlKCk7Ci0gICAgaWYgKFVOTElLRUxZKCFtb3N0UmVjZW50bHlVc2VkSGFuZGxl
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBtb3N0UmVjZW50bHlVc2VkSGFuZGxl
LT5tb3ZlV3JpdGFibGVPZmZzZXRUb1N0YXJ0SWZQb3NzaWJsZSgpOwotICAgIGlmIChtb3N0UmVj
ZW50bHlVc2VkSGFuZGxlLT5hdmFpbGFibGVDYXBhY2l0eSgpID49IGNhcGFjaXR5KQotICAgICAg
ICByZXR1cm4gbW9zdFJlY2VudGx5VXNlZEhhbmRsZTsKLQotICAgIG1faWRlbnRpZmllcnNPZlJl
dXNhYmxlSGFuZGxlcy5hcHBlbmQobV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVzLnRha2VG
aXJzdCgpKTsKLQotICAgIGF1dG8gbGVhc3RSZWNlbnRseVVzZWRJZGVudGlmaWVyID0gbV9pZGVu
dGlmaWVyc09mUmV1c2FibGVIYW5kbGVzLmZpcnN0KCk7Ci0gICAgaWYgKGxlYXN0UmVjZW50bHlV
c2VkSWRlbnRpZmllciAhPSBtb3N0UmVjZW50bHlVc2VkSGFuZGxlLT5pZGVudGlmaWVyKCkpIHsK
LSAgICAgICAgUmVmUHRyIGhhbmRsZSA9IG1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzLmdldChs
ZWFzdFJlY2VudGx5VXNlZElkZW50aWZpZXIpOwotICAgICAgICBpZiAoaGFuZGxlLT5tb3ZlV3Jp
dGFibGVPZmZzZXRUb1N0YXJ0SWZQb3NzaWJsZSgpICYmIGhhbmRsZS0+YXZhaWxhYmxlQ2FwYWNp
dHkoKSA+PSBjYXBhY2l0eSkKLSAgICAgICAgICAgIHJldHVybiBoYW5kbGU7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKKyAg
ICBpZiAoVU5MSUtFTFkobV9uZWVkc1dha2VVcFNlbWFwaG9yZUZvckRpc3BsYXlMaXN0U3RyZWFt
KSkKKyAgICAgICAgbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKS0+d2FpdEZvckFuZERpc3BhdGNo
SW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6RGlkQ3Jl
YXRlV2FrZVVwU2VtYXBob3JlRm9yRGlzcGxheUxpc3RTdHJlYW0+KHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKCksIDNfcywgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZT
eW5jTWVzc2FnZUFycml2ZXMpOworICAgIHJldHVybiAqbV9zdHJlYW1Db25uZWN0aW9uOwogfQog
Ci1EaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OmNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90IGNhcGFjaXR5LCBSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKQordm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6OmRpZENyZWF0ZVdha2VVcFNlbWFwaG9yZUZvckRpc3BsYXlMaXN0U3Ry
ZWFtKElQQzo6U2VtYXBob3JlJiYgc2VtYXBob3JlKQogewotICAgIGlmIChhdXRvIGhhbmRsZSA9
IGZpbmRSZXVzYWJsZURpc3BsYXlMaXN0SGFuZGxlKGNhcGFjaXR5KSkgewotICAgICAgICBMT0df
V0lUSF9TVFJFQU0oU2hhcmVkRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlJldXNpbmcgSXRlbXNb
IiA8PCBoYW5kbGUtPmlkZW50aWZpZXIoKSA8PCAiXSA9PiBJbWFnZSgiIDw8IGRlc3RpbmF0aW9u
QnVmZmVySWRlbnRpZmllciA8PCAiKSAocmVtYWluaW5nIGNhcGFjaXR5OiAiIDw8IGhhbmRsZS0+
YXZhaWxhYmxlQ2FwYWNpdHkoKSA8PCAiKSIpOwotICAgICAgICByZXR1cm4gaGFuZGxlLT5jcmVh
dGVIYW5kbGUoKTsKKyAgICBpZiAoIW1fc3RyZWFtQ29ubmVjdGlvbikgeworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IGRlZmF1bHRTaGFyZWRJdGVtQnVmZmVyU2l6ZSA9IDEgPDwgMTY7Ci0g
ICAgc3RhdGljX2Fzc2VydChkZWZhdWx0U2hhcmVkSXRlbUJ1ZmZlclNpemUgPiBTaGFyZWREaXNw
bGF5TGlzdEhhbmRsZTo6aGVhZGVyU2l6ZSgpKTsKLQotICAgIGF1dG8gc2hhcmVkTWVtb3J5ID0g
U2hhcmVkTWVtb3J5OjphbGxvY2F0ZShzdGQ6Om1heChkZWZhdWx0U2hhcmVkSXRlbUJ1ZmZlclNp
emUsIGNhcGFjaXR5ICsgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmhlYWRlclNpemUoKSkpOwot
ICAgIGlmICghc2hhcmVkTWVtb3J5KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgU2hhcmVk
TWVtb3J5OjpIYW5kbGUgc2hhcmVkTWVtb3J5SGFuZGxlOwotICAgIHNoYXJlZE1lbW9yeS0+Y3Jl
YXRlSGFuZGxlKHNoYXJlZE1lbW9yeUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpS
ZWFkV3JpdGUpOwotCi0gICAgYXV0byBpZGVudGlmaWVyID0gRGlzcGxheUxpc3Q6Okl0ZW1CdWZm
ZXJJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOwotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OkRpZENyZWF0ZVNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKGlkZW50aWZpZXIs
IHsgV1RGTW92ZShzaGFyZWRNZW1vcnlIYW5kbGUpLCBzaGFyZWRNZW1vcnktPnNpemUoKSB9LCBk
ZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigp
LCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNS
ZXBseSk7Ci0KLSAgICBhdXRvIG5ld0hhbmRsZSA9IERpc3BsYXlMaXN0V3JpdGVySGFuZGxlOjpj
cmVhdGUoaWRlbnRpZmllciwgc2hhcmVkTWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpOwotICAgIFJF
TEVBU0VfQVNTRVJUKG5ld0hhbmRsZSwgIlRoZXJlIG11c3QgYmUgZW5vdWdoIHNwYWNlIHRvIGNy
ZWF0ZSB0aGUgaGFuZGxlLiIpOwotICAgIGF1dG8gZGlzcGxheUxpc3RIYW5kbGUgPSBuZXdIYW5k
bGUtPmNyZWF0ZUhhbmRsZSgpOwotCi0gICAgbV9pZGVudGlmaWVyc09mUmV1c2FibGVIYW5kbGVz
LnByZXBlbmQoaWRlbnRpZmllcik7Ci0gICAgbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXMuc2V0
KGlkZW50aWZpZXIsIFdURk1vdmUobmV3SGFuZGxlKSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0o
U2hhcmVkRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIkFsbG9jYXRlZCBJdGVtc1siIDw8IGlkZW50
aWZpZXIgPDwgIl0gPT4gSW1hZ2UoIiA8PCBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIgPDwg
IikiKTsKLSAgICByZXR1cm4gZGlzcGxheUxpc3RIYW5kbGU7Ci19Ci0KLVJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX3BhcmFtZXRlcnMuaWRlbnRpZmll
cjsKLX0KLQotUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjplbnN1cmVCYWNrZW5kQ3JlYXRlZCgpCi17Ci0gICAgZW5zdXJlR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24oKTsKLSAgICByZXR1cm4gcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKTsKKyAg
ICBtX3N0cmVhbUNvbm5lY3Rpb24tPnNldFdha2VVcFNlbWFwaG9yZShXVEZNb3ZlKHNlbWFwaG9y
ZSkpOworICAgIG1fbmVlZHNXYWtlVXBTZW1hcGhvcmVGb3JEaXNwbGF5TGlzdFN0cmVhbSA9IGZh
bHNlOwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVjb3JkTmF0aXZl
SW1hZ2VVc2UoTmF0aXZlSW1hZ2UmIGltYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmgKaW5kZXggYWEwMjNkY2YyZGI1YTMzYWFiMTNmNjliYTAxNjI5MmQzMDVhZjc2OS4u
NjRiYjkyNjdmZTZiMzM0OTZiMzNmZTU3MGQ5YTcxZWFjYTU1NGNjZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCkBAIC0zMywxMSArMzMsMTMgQEAKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCIKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIK
ICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0
aW9uUGFyYW1ldGVycy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdl
cy5oIgogI2luY2x1ZGUgIlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5oIgogI2luY2x1ZGUgIlJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nVXBkYXRlSUQu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+CisjaW5jbHVkZSAiU3RyZWFtQ2xp
ZW50Q29ubmVjdGlvbi5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1
ZS5oPgpAQCAtNDUsMTEgKzQ3LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1uYW1lc3Bh
Y2UgRGlzcGxheUxpc3QgewotY2xhc3MgRGlzcGxheUxpc3Q7Ci1jbGFzcyBJdGVtOwotfQotCiBj
bGFzcyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U7CiBjbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBQaXhl
bEJ1ZmZlcjsKQEAgLTYxLDcgKzU4LDYgQEAgZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIDogYm9v
bDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIERpc3BsYXlMaXN0V3JpdGVySGFuZGxl
OwogY2xhc3MgV2ViUGFnZTsKIAogY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5CkBA
IC03NywxMSArNzMsNiBAQCBwdWJsaWM6CiAgICAgdXNpbmcgV2Vha1ZhbHVlVHlwZSA9IEdQVVBy
b2Nlc3NDb25uZWN0aW9uOjpDbGllbnQ6OldlYWtWYWx1ZVR5cGU7CiAKICAgICBSZW1vdGVSZXNv
dXJjZUNhY2hlUHJveHkmIHJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpIHsgcmV0dXJuIG1fcmVt
b3RlUmVzb3VyY2VDYWNoZVByb3h5OyB9Ci0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1C
dWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QgY2FwYWNpdHksIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOwot
Ci0gICAgdm9pZCBkaWRBcHBlbmREYXRhKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
QnVmZmVySGFuZGxlJiwgc2l6ZV90IG51bWJlck9mQnl0ZXMsIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaWRDaGFuZ2VJdGVtQnVmZmVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgZGVzdGluYXRpb25JbWFnZUJ1ZmZlcik7Ci0gICAgdm9pZCB3aWxsQXBwZW5kSXRlbShXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZvaWQgc2VuZERlZmVycmVk
V2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7CiAKICAgICBTaGFyZWRNZW1vcnkqIHNoYXJlZE1lbW9y
eUZvckdldFBpeGVsQnVmZmVyKHNpemVfdCBkYXRhU2l6ZSwgSVBDOjpUaW1lb3V0KTsKICAgICBi
b29sIHdhaXRGb3JHZXRQaXhlbEJ1ZmZlclRvQ29tcGxldGUoSVBDOjpUaW1lb3V0KTsKQEAgLTEw
MSw3ICs5Miw2IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNy
ZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRl
cmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgV2ViQ29yZTo6RGVzdGluYXRp
b25Db2xvclNwYWNlJiwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQpOwogICAgIFN0cmluZyBnZXREYXRh
VVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxk
b3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICBWZWN0b3I8dWludDhfdD4gZ2V0RGF0YUZv
ckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllciBmbHVzaERpc3BsYXlMaXN0QW5k
Q29tbWl0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gZ2V0U2hhcmVhYmxlQml0bWFwKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uKTsKICAgICB2b2lkIGNhY2hlTmF0aXZlSW1h
Z2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250PiYm
KTsKQEAgLTEyNSwxMCArMTE1LDEzIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNHUFVQcm9jZXNz
Q29ubmVjdGlvbkNsb3NlZCgpIGNvbnN0IHsgcmV0dXJuICFtX2dwdVByb2Nlc3NDb25uZWN0aW9u
OyB9CiAKKyAgICB2b2lkIGRpZENyZWF0ZVdha2VVcFNlbWFwaG9yZUZvckRpc3BsYXlMaXN0U3Ry
ZWFtKElQQzo6U2VtYXBob3JlJiYpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4KICAgICB2b2lkIHNlbmRUb1N0cmVhbShUJiYgbWVzc2FnZSwgT2JqZWN0SWRlbnRpZmll
cjxVPiBpZGVudGlmaWVyKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVt
ZW50ZWQuCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgbWFraW5nIHRoZSBz
ZW5kIHRpbWVvdXQgZmluaXRlLgorICAgICAgICBzdHJlYW1Db25uZWN0aW9uKCkuc2VuZChXVEZN
b3ZlKG1lc3NhZ2UpLCBpZGVudGlmaWVyLCBTZWNvbmRzOjppbmZpbml0eSgpKTsKICAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMTQ0LDYgKzEzNywxNCBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIGV4cGxpY2l0IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShXZWJQYWdl
Jik7CiAKKyAgICBJUEM6OlN0cmVhbUNsaWVudENvbm5lY3Rpb24mIHN0cmVhbUNvbm5lY3Rpb24o
KTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYXV0byBzZW5kU3luY1RvU3RyZWFt
KFQmJiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCBJUEM6OlRpbWVvdXQgdGlt
ZW91dCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdHJlYW1Db25uZWN0aW9uKCkuc2VuZFN5bmMo
V1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShyZXBseSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKCksIHRpbWVvdXQpOworICAgIH0KKwogICAgIC8vIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpD
bGllbnQKICAgICB2b2lkIGdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UoR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24mKSBmaW5hbDsKIApAQCAtMTU0LDIxICsxNTUsMTEgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGRpZEZsdXNoKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllciwgV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGRpZEZpbmFsaXpl
UmVuZGVyaW5nVXBkYXRlKFJlbmRlcmluZ1VwZGF0ZUlEIGRpZFJlbmRlcmluZ1VwZGF0ZUlEKTsK
IAotICAgIFJlZlB0cjxEaXNwbGF5TGlzdFdyaXRlckhhbmRsZT4gbW9zdFJlY2VudGx5VXNlZERp
c3BsYXlMaXN0SGFuZGxlKCk7Ci0gICAgUmVmUHRyPERpc3BsYXlMaXN0V3JpdGVySGFuZGxlPiBm
aW5kUmV1c2FibGVEaXNwbGF5TGlzdEhhbmRsZShzaXplX3QgY2FwYWNpdHkpOwotCi0gICAgdm9p
ZCBzZW5kV2FrZXVwTWVzc2FnZShjb25zdCBHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50
cyYpOwotCisgICAgc3RkOjp1bmlxdWVfcHRyPElQQzo6U3RyZWFtQ2xpZW50Q29ubmVjdGlvbj4g
bV9zdHJlYW1Db25uZWN0aW9uOwogICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBh
cmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwogICAgIFdlYWtQdHI8R1BVUHJvY2Vzc0Nvbm5lY3Rpb24+
IG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb247CiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5IG1f
cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5IHsgKnRoaXMgfTsKIAotICAgIEhhc2hNYXA8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBSZWZQdHI8RGlzcGxheUxpc3RX
cml0ZXJIYW5kbGU+PiBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlczsKLSAgICBEZXF1ZTxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXI+IG1faWRlbnRpZmllcnNPZlJl
dXNhYmxlSGFuZGxlczsKLSAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcj4gbV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXI7
Ci0gICAgc3RkOjpvcHRpb25hbDxHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cz4gbV9k
ZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHM7Ci0gICAgdW5zaWduZWQgbV9yZW1haW5pbmdJ
dGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dha2V1cCB7IDAgfTsKLQogICAgIHN0ZDo6b3B0aW9u
YWw8SVBDOjpTZW1hcGhvcmU+IG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmU7CiAgICAgUmVmUHRy
PFNoYXJlZE1lbW9yeT4gbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeTsKICAgICB1aW50NjRf
dCBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5TGVuZ3RoIHsgMCB9OwpAQCAtMTc2LDYgKzE2
Nyw4IEBAIHByaXZhdGU6CiAKICAgICBSZW5kZXJpbmdVcGRhdGVJRCBtX3JlbmRlcmluZ1VwZGF0
ZUlEOwogICAgIFJlbmRlcmluZ1VwZGF0ZUlEIG1fZGlkUmVuZGVyaW5nVXBkYXRlSUQ7CisKKyAg
ICBib29sIG1fbmVlZHNXYWtlVXBTZW1hcGhvcmVGb3JEaXNwbGF5TGlzdFN0cmVhbSB7IHRydWUg
fTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgppbmRleCBiNWVlOTU5MWFmMWZmZWU1MzM1
ZTEyOWM5NGFmOTZiNTQ3Zjg0MWE1Li43OWFiZGJlMjQyNjRiM2JhNGMzZDVhZjQyMmU5YzczZmQ4
ZmFjZjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5t
ZXNzYWdlcy5pbgpAQCAtMjYsNiArMjYsNyBAQCBtZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkgTm90UmVmQ291bnRlZCB7CiAgICAgRGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNr
ZW5kKFdlYktpdDo6SW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKICAg
ICBEaWRGbHVzaChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgZmx1c2hJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKQogICAgIERpZEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlKFdlYktp
dDo6UmVuZGVyaW5nVXBkYXRlSUQgZGlkUmVuZGVyaW5nVXBkYXRlSUQpCisgICAgRGlkQ3JlYXRl
V2FrZVVwU2VtYXBob3JlRm9yRGlzcGxheUxpc3RTdHJlYW0oSVBDOjpTZW1hcGhvcmUgd2FrZVVw
U2VtYXBob3JlKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAppbmRleCAw
ZjExODM4NTE4Y2I5MDg5ZWM1ZWNjZmFhYzMzNWUyMDFhNmMzNmY2Li42MDA1NGFhOTNlM2I1YTI3
YjdjNThiMjMxYTdkYWFhYmZjMzhiNDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcApAQCAtNzYxLDEzICs3NjEsNiBAQCBzdGF0
aWMgYm9vbCBlbmNvZGVSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzKElQ
Qzo6RW5jb2RlciYgZW5jb2RlcgogICAgIGlmICghaWRlbnRpZmllcikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgYXV0byBqc1NlbWFwaG9yZSA9IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2Jq
ZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT52bSgpLCAic2Vt
YXBob3JlIl9zKSk7Ci0gICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgUmVmUHRyIHNlbWFwaG9yZU9iamVjdCA9IEpTSVBDU2VtYXBob3JlOjp0b1dy
YXBwZWQodG9SZWYoZ2xvYmFsT2JqZWN0KSwgdG9SZWYoanNTZW1hcGhvcmUpKTsKLSAgICBpZiAo
IXNlbWFwaG9yZU9iamVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgYXV0byBwYWdl
UHJveHlJRCA9IGdldE9iamVjdElkZW50aWZpZXJGcm9tUHJvcGVydHk8V2ViUGFnZVByb3h5SWRl
bnRpZmllclR5cGU+KGdsb2JhbE9iamVjdCwganNPYmplY3QsICJwYWdlUHJveHlJRCJfcywgc2Nv
cGUpOwogICAgIGlmICghcGFnZVByb3h5SUQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc3
NiwxMCArNzY5LDggQEAgc3RhdGljIGJvb2wgZW5jb2RlUmVtb3RlUmVuZGVyaW5nQmFja2VuZENy
ZWF0aW9uUGFyYW1ldGVycyhJUEM6OkVuY29kZXImIGVuY29kZXIKICAgICBpZiAoIXBhZ2VJRCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBzZW1hcGhvcmUgPSBzZW1hcGhvcmVP
YmplY3QtPmV4Y2hhbmdlKCk7Ci0gICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFy
YW1ldGVycyBwYXJhbWV0ZXJzIHsgKmlkZW50aWZpZXIsIFdURk1vdmUoc2VtYXBob3JlKSwgKnBh
Z2VQcm94eUlELCAqcGFnZUlEIH07CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9u
UGFyYW1ldGVycyBwYXJhbWV0ZXJzIHsgKmlkZW50aWZpZXIsICpwYWdlUHJveHlJRCwgKnBhZ2VJ
RCB9OwogICAgIGVuY29kZXIgPDwgcGFyYW1ldGVyczsKLSAgICBzZW1hcGhvcmVPYmplY3QtPmV4
Y2hhbmdlKFdURk1vdmUocGFyYW1ldGVycy5yZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZSkpOwog
ICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>