<?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>228222</bug_id>
          
          <creation_ts>2021-07-22 23:34:30 -0700</creation_ts>
          <short_desc>[GPU Process] Add resource use counter infrastructure to RemoteResourceCache</short_desc>
          <delta_ts>2021-07-26 21:09:04 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>228219</dependson>
          <blocked>228224</blocked>
    
    <blocked>228225</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1778992</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-22 23:34:30 -0700</bug_when>
    <thetext>[GPU Process] Add resource use counter infrastructure to RemoteResourceCache</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778993</commentid>
    <comment_count>1</comment_count>
      <attachid>434067</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-23 00:13:28 -0700</bug_when>
    <thetext>Created attachment 434067
Patch for reviewing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779002</commentid>
    <comment_count>2</comment_count>
      <attachid>434072</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-23 00:47:34 -0700</bug_when>
    <thetext>Created attachment 434072
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779079</commentid>
    <comment_count>3</comment_count>
      <attachid>434094</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-23 09:56:18 -0700</bug_when>
    <thetext>Created attachment 434094
Patch for reviewing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779134</commentid>
    <comment_count>4</comment_count>
      <attachid>434094</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-07-23 12:21:07 -0700</bug_when>
    <thetext>Comment on attachment 434094
Patch for reviewing

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

&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:63
&gt; +void RemoteResourceCache::incrementOpenCount(WebCore::RenderingResourceIdentifier renderingResourceIdentifier)

I think this function is not needed. See below.

&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:103
&gt; +void RemoteResourceCache::recordResourceUse(WebCore::RenderingResourceIdentifier renderingResourceIdentifier)

This function is not called in this patch.

&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:130
&gt; +bool RemoteResourceCache::prune()
&gt; +{
&gt; +    for (auto renderingResourceIdentifier : m_resourcesForMaybeRemoving) {
&gt; +        auto iterator = m_resourceUseCounters.find(renderingResourceIdentifier);
&gt; +        ASSERT(iterator != m_resourceUseCounters.end());
&gt; +        auto messagesAreInOrder = maybeRemoveResource(renderingResourceIdentifier, iterator);
&gt; +        if (!messagesAreInOrder)
&gt; +            return false;
&gt; +    }
&gt; +    m_resourcesForMaybeRemoving.clear();
&gt; +    return true;
&gt; +}

Instead of running this pass at the end of replaying the DL items, can&apos;t it be done for each resource individually? For example Replayer::applyItem() can get the renderingResourceIdentifier from the DL item and it call a function in ReplayerDelegate which will call RemoteResourceCache::recordResourceUse(). 

RemoteResourceCache::recordResourceUse() will increment the useCount and it is it in to_be_removed_state and the useCount matches the useCount of the WebProcess, the resource will be deleted.

&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h:73
&gt; +        uint64_t openCount { 0 }; // The number of cacheFoo messages we&apos;ve received without a corresponding release message

I think this is incorrect. The job of RemoteResourceCacheProxy is manage the sequence to be always: cacheFoo(), releaseResource(), cacheFoo(), releaseResource(), ... etc

RemoteResourceCacheProxy keeps HashMaps for the resources which are cached in GPUP. So it sends a cacheFoo() message only once for the resource and it does not send other cacheFoo() as long as it is in one of these HashMaps. The resource is removed from the cache when it sends releaseResource(). And I think the IPC messages have to be dispatched in the same order they are sent with.

I think the problem we want to address is if the resource is added to m_resourcesForMaybeRemoving when the first releaseResource() is received and it stays there till the second cacheFoo() is received.

&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h:75
&gt; +        uint64_t useCount { 0 }; // The number of rendering commands we&apos;ve executed which reference this resource
&gt; +        uint64_t totalUseCount { 0 }; // Once useCount hits this limit, we can free the resource

I have an idea for these counters which may or may not be correct. I think we can use a single counter which can serve as useOrPendingCount.

1. useOrPendingCount is signed int and is initialized with { 0 };
2. When the resource is moved from cached_state to to_be_removed_state: useOrPendingCount -= useCount     // Now it is used as pendingCount and it will be either zero or negative
3. When the resource is moved from to_be_removed_state to cached_state: useOrPendingCount is not changed  // Now it is used as useCount even if it is negative. It will be incremented by the DL items which were sent after the old and the new cacheFoo() messages.
4. When the resource is used, useOrPendingCount will be incremented.
5. When the resource is used and it is in to_be_removed_state and useOrPendingCount == 0, the resource will be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779202</commentid>
    <comment_count>5</comment_count>
      <attachid>434094</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-23 15:31:37 -0700</bug_when>
    <thetext>Comment on attachment 434094
Patch for reviewing

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

&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:103
&gt;&gt; +void RemoteResourceCache::recordResourceUse(WebCore::RenderingResourceIdentifier renderingResourceIdentifier)
&gt; 
&gt; This function is not called in this patch.

Right, it&apos;s called in the follow-ups. This patch just adds the infrastructure. I split the patch up to aid reviewing.
- https://bugs.webkit.org/show_bug.cgi?id=228224
- https://bugs.webkit.org/show_bug.cgi?id=228225

&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:130
&gt;&gt; +}
&gt; 
&gt; Instead of running this pass at the end of replaying the DL items, can&apos;t it be done for each resource individually? For example Replayer::applyItem() can get the renderingResourceIdentifier from the DL item and it call a function in ReplayerDelegate which will call RemoteResourceCache::recordResourceUse(). 
&gt; 
&gt; RemoteResourceCache::recordResourceUse() will increment the useCount and it is it in to_be_removed_state and the useCount matches the useCount of the WebProcess, the resource will be deleted.

The ChangeLog explains this under the notes for WebKit::RemoteResourceCache::recordResourceUse(). We can&apos;t actually delete the resource inside Replayer::Delegate::apply(), because after the replayer delegate returns, the DL item needs to actually execute, and in order to execute, it needs access to the resource. So, we have to wait until the item has finished executing before we can actually delete the resource.

&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h:73
&gt;&gt; +        uint64_t openCount { 0 }; // The number of cacheFoo messages we&apos;ve received without a corresponding release message
&gt; 
&gt; I think this is incorrect. The job of RemoteResourceCacheProxy is manage the sequence to be always: cacheFoo(), releaseResource(), cacheFoo(), releaseResource(), ... etc
&gt; 
&gt; RemoteResourceCacheProxy keeps HashMaps for the resources which are cached in GPUP. So it sends a cacheFoo() message only once for the resource and it does not send other cacheFoo() as long as it is in one of these HashMaps. The resource is removed from the cache when it sends releaseResource(). And I think the IPC messages have to be dispatched in the same order they are sent with.
&gt; 
&gt; I think the problem we want to address is if the resource is added to m_resourcesForMaybeRemoving when the first releaseResource() is received and it stays there till the second cacheFoo() is received.

I think you&apos;re right about having to support resources migrating back and forth between the &quot;between a cacheResource / release pair&quot; state and the &quot;after the release message&quot; state.

&gt; I think this is incorrect.

What does &quot;this&quot; refer to?

&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h:75
&gt;&gt; +        uint64_t totalUseCount { 0 }; // Once useCount hits this limit, we can free the resource
&gt; 
&gt; I have an idea for these counters which may or may not be correct. I think we can use a single counter which can serve as useOrPendingCount.
&gt; 
&gt; 1. useOrPendingCount is signed int and is initialized with { 0 };
&gt; 2. When the resource is moved from cached_state to to_be_removed_state: useOrPendingCount -= useCount     // Now it is used as pendingCount and it will be either zero or negative
&gt; 3. When the resource is moved from to_be_removed_state to cached_state: useOrPendingCount is not changed  // Now it is used as useCount even if it is negative. It will be incremented by the DL items which were sent after the old and the new cacheFoo() messages.
&gt; 4. When the resource is used, useOrPendingCount will be incremented.
&gt; 5. When the resource is used and it is in to_be_removed_state and useOrPendingCount == 0, the resource will be removed.

I think this is correct, with one slight note: After step 2, pendingCount can be positive.

Consider this example:
The web process sends:
1. Cache resource
2. Use 2 times
3. Release, with useCount = 2
4. Cache the same resource again
5. Use 4 times
6. Release, with useCount = 4

The GPU Process sees:
1. Cache resource
2. Use 2 times
3. Use 3 more times, from the second batch. This is totally possible.
4. Release, with useCount = 2. We could choose to delete the resource itself now (or not!), but we definitely can&apos;t forget the useCount. We have to remember that we&apos;ve seen 5 uses (either by storing the value 5 itself, or by storing  5 - 2 = 3)
5. [if we see the last use here, our existing infrastructure will automatically delay it until later]
6. Cache the resource again
7. Release, with useCount = 4. Now, we have to realize that this means we only need one more use before we can delete the resource
8. The last use. Delete the resource.

(We&apos;re relying on the fact that, if the first cache resource message and the second cache resource message share the same renderingResourceIdentifier, the resource data itself is identical. So, step 3 in the GPU process&apos;s block above is okay.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779206</commentid>
    <comment_count>6</comment_count>
      <attachid>434094</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-23 15:40:44 -0700</bug_when>
    <thetext>Comment on attachment 434094
Patch for reviewing

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

&gt;&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h:73
&gt;&gt;&gt; +        uint64_t openCount { 0 }; // The number of cacheFoo messages we&apos;ve received without a corresponding release message
&gt;&gt; 
&gt;&gt; I think this is incorrect. The job of RemoteResourceCacheProxy is manage the sequence to be always: cacheFoo(), releaseResource(), cacheFoo(), releaseResource(), ... etc
&gt;&gt; 
&gt;&gt; RemoteResourceCacheProxy keeps HashMaps for the resources which are cached in GPUP. So it sends a cacheFoo() message only once for the resource and it does not send other cacheFoo() as long as it is in one of these HashMaps. The resource is removed from the cache when it sends releaseResource(). And I think the IPC messages have to be dispatched in the same order they are sent with.
&gt;&gt; 
&gt;&gt; I think the problem we want to address is if the resource is added to m_resourcesForMaybeRemoving when the first releaseResource() is received and it stays there till the second cacheFoo() is received.
&gt; 
&gt; I think you&apos;re right about having to support resources migrating back and forth between the &quot;between a cacheResource / release pair&quot; state and the &quot;after the release message&quot; state.

When you say &quot;I think this is incorrect,&quot; what does &quot;this&quot; refer to?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779212</commentid>
    <comment_count>7</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-07-23 15:54:17 -0700</bug_when>
    <thetext>openCount has to be &quot;1&quot; always. It can&apos;t be something else. The assumption that cacheFoo() can be received multiple times for the same resource without receiving the releaseResource() in between is &quot;incorrect&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779221</commentid>
    <comment_count>8</comment_count>
      <attachid>434137</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-23 16:11:04 -0700</bug_when>
    <thetext>Created attachment 434137
Reworked struct ResourceUseCounter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779222</commentid>
    <comment_count>9</comment_count>
      <attachid>434094</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-07-23 16:12:05 -0700</bug_when>
    <thetext>Comment on attachment 434094
Patch for reviewing

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

&gt;&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:130
&gt;&gt;&gt; +}
&gt;&gt; 
&gt;&gt; Instead of running this pass at the end of replaying the DL items, can&apos;t it be done for each resource individually? For example Replayer::applyItem() can get the renderingResourceIdentifier from the DL item and it call a function in ReplayerDelegate which will call RemoteResourceCache::recordResourceUse(). 
&gt;&gt; 
&gt;&gt; RemoteResourceCache::recordResourceUse() will increment the useCount and it is it in to_be_removed_state and the useCount matches the useCount of the WebProcess, the resource will be deleted.
&gt; 
&gt; The ChangeLog explains this under the notes for WebKit::RemoteResourceCache::recordResourceUse(). We can&apos;t actually delete the resource inside Replayer::Delegate::apply(), because after the replayer delegate returns, the DL item needs to actually execute, and in order to execute, it needs access to the resource. So, we have to wait until the item has finished executing before we can actually delete the resource.

Then we need to call RemoteResourceCache::recordResourceUse() &quot;after&quot; using the resource.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779223</commentid>
    <comment_count>10</comment_count>
      <attachid>434138</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-23 16:12:56 -0700</bug_when>
    <thetext>Created attachment 434138
Reworked struct ResourceUseCounter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779226</commentid>
    <comment_count>11</comment_count>
      <attachid>434139</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-23 16:14:55 -0700</bug_when>
    <thetext>Created attachment 434139
Reworked struct ResourceUseCounter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779255</commentid>
    <comment_count>12</comment_count>
      <attachid>434145</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-23 17:03:55 -0700</bug_when>
    <thetext>Created attachment 434145
Reworked struct ResourceUseCounter and Replayer::Delegate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779291</commentid>
    <comment_count>13</comment_count>
      <attachid>434145</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-07-23 20:21:48 -0700</bug_when>
    <thetext>Comment on attachment 434145
Reworked struct ResourceUseCounter and Replayer::Delegate

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

&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:67
&gt; +    auto result = m_resourceUseCounters.ensure(renderingResourceIdentifier, [&amp;] {
&gt; +        return ResourceUseCounter { };
&gt; +    });

Shouldn&apos;t we use m_resourceUseCounters.add() instead? I think initializing the ResourceUseCounter is very cheap.

&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:70
&gt; +    auto&amp; state = result.iterator-&gt;value.state;
&gt; +    RELEASE_ASSERT(state == ResourceState::ToBeDeleted);
&gt; +    state = ResourceState::Alive;

It is strange that if the resource is added to the HashMap we initialize its state to ResourceState::ToBeDeleted and we change it immediately to ResourceState::Alive. Can&apos;t we change the struct ResourceUseCounter below to initialize the state to ResourceState::Alive and handle the case of isNewEntry separately?

&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:78
&gt; +bool RemoteResourceCache::maybeRemoveResource(RenderingResourceIdentifier renderingResourceIdentifier, ResourceUseCountersMap::iterator iterator)

Should it be ResourceUseCountersMap::iterator&amp;?

&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:84
&gt; +    // It&apos;s actually okay if useCount &gt; 0.
&gt; +    // It just means that there&apos;s a cache message pending, and we&apos;ve eagerly used a previously-cached resource.
&gt; +    // Which is fine.
&gt; +    // FIXME: Maybe we shouldn&apos;t actually remove the resource in this situation?
&gt; +    // We may actually be able to get a head start on some display list items if they&apos;re ready for us and we have the resources they depend on.

I think the case (state == ToBeDeleted &amp;&amp; useCount &gt; 0) will never happen if recordResourceUse() is called from Replayer::applyItem(). The resource will be removed if useOrPendingCount is zero. Next reference to this resource will return MissingCachedResource and will delay replaying the DL item till the resource is recached.

&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:90
&gt; +    if (!value.useOrPendingCount)

As in the above comment, this can&apos;t be false. If state.state == ToBeDeleted is true, value.useOrPendingCount has to be zero. Also it does not make sense to keep the resource in m_resourceUseCounters but removing it from the HashMaps below if this condition happens to be false.

&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:112
&gt; +    if (iterator == m_resourceUseCounters.end()) {
&gt; +        // The display list items won the race against the cacheFont message.
&gt; +        // When we receive the cacheFont message, we will retry the display list item.
&gt; +        return;
&gt; +    }

I think this should never happen. This function should be called while replaying the DL items and after the resource is used. So the resource should be in one of the HashMaps: m_imageBuffers, m_nativeImages or m_fonts. And it should be cashed in m_resourceUseCounters.

I think this should be replaced by ASSERT(iterator != m_resourceUseCounters.end());

&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h:73
&gt; +        ResourceState state { ResourceState::ToBeDeleted };

I think this should be initialized with ResourceState::Alive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779300</commentid>
    <comment_count>14</comment_count>
      <attachid>434145</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-23 23:54:11 -0700</bug_when>
    <thetext>Comment on attachment 434145
Reworked struct ResourceUseCounter and Replayer::Delegate

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

&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:84
&gt;&gt; +    // We may actually be able to get a head start on some display list items if they&apos;re ready for us and we have the resources they depend on.
&gt; 
&gt; I think the case (state == ToBeDeleted &amp;&amp; useCount &gt; 0) will never happen if recordResourceUse() is called from Replayer::applyItem(). The resource will be removed if useOrPendingCount is zero. Next reference to this resource will return MissingCachedResource and will delay replaying the DL item till the resource is recached.

How should the situation I described at the end of https://bugs.webkit.org/show_bug.cgi?id=228222#c5 work? I think the GPU process&apos;s step 4 will see state == ToBeDeleted &amp;&amp; useCount &gt; 0.

&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:90
&gt;&gt; +    if (!value.useOrPendingCount)
&gt; 
&gt; As in the above comment, this can&apos;t be false. If state.state == ToBeDeleted is true, value.useOrPendingCount has to be zero. Also it does not make sense to keep the resource in m_resourceUseCounters but removing it from the HashMaps below if this condition happens to be false.

In the situation linked to above, I think the GPU process&apos;s step 4 may or may not choose to remove the resource, which is what the comment above on lines 83-84 is about. However, I think the GPU process&apos;s step 4 definitely has to keep the resource in m_resourceUseCounters, because its step 8 has to realize that there&apos;s only 1 outstanding use, rather than 4 outstanding uses.

&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:112
&gt;&gt; +    }
&gt; 
&gt; I think this should never happen. This function should be called while replaying the DL items and after the resource is used. So the resource should be in one of the HashMaps: m_imageBuffers, m_nativeImages or m_fonts. And it should be cashed in m_resourceUseCounters.
&gt; 
&gt; I think this should be replaced by ASSERT(iterator != m_resourceUseCounters.end());

Right, this makes sense. If the resource is in m_imageBuffers, m_nativeImages or m_fonts, then it should be guaranteed to be in m_resourceUseCounters. I can make sure at the call site to only call this function if the resource is present in m_imageBuffers, m_nativeImages or m_fonts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779301</commentid>
    <comment_count>15</comment_count>
      <attachid>434159</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-23 23:54:59 -0700</bug_when>
    <thetext>Created attachment 434159
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779306</commentid>
    <comment_count>16</comment_count>
      <attachid>434145</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-24 00:52:45 -0700</bug_when>
    <thetext>Comment on attachment 434145
Reworked struct ResourceUseCounter and Replayer::Delegate

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

&gt;&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:84
&gt;&gt;&gt; +    // We may actually be able to get a head start on some display list items if they&apos;re ready for us and we have the resources they depend on.
&gt;&gt; 
&gt;&gt; I think the case (state == ToBeDeleted &amp;&amp; useCount &gt; 0) will never happen if recordResourceUse() is called from Replayer::applyItem(). The resource will be removed if useOrPendingCount is zero. Next reference to this resource will return MissingCachedResource and will delay replaying the DL item till the resource is recached.
&gt; 
&gt; How should the situation I described at the end of https://bugs.webkit.org/show_bug.cgi?id=228222#c5 work? I think the GPU process&apos;s step 4 will see state == ToBeDeleted &amp;&amp; useCount &gt; 0.

Oh, now that I think about it some more, this situation might actually be impossible if:
1. No resources are released and recached in the middle of a rendering update (which is true today)
2. Each rendering update starts a new display list
3. The trigger that starts the GPU process executing the new DL is a message

If all of those things are true, then the GPU Process can’t start executing the second frame’s DL until it has seen the previous frame’s release message.

I’ll do some more investigation and testing to see if it’s possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779616</commentid>
    <comment_count>17</comment_count>
      <attachid>434145</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-26 16:37:54 -0700</bug_when>
    <thetext>Comment on attachment 434145
Reworked struct ResourceUseCounter and Replayer::Delegate

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

&gt;&gt;&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:84
&gt;&gt;&gt;&gt; +    // We may actually be able to get a head start on some display list items if they&apos;re ready for us and we have the resources they depend on.
&gt;&gt;&gt; 
&gt;&gt;&gt; I think the case (state == ToBeDeleted &amp;&amp; useCount &gt; 0) will never happen if recordResourceUse() is called from Replayer::applyItem(). The resource will be removed if useOrPendingCount is zero. Next reference to this resource will return MissingCachedResource and will delay replaying the DL item till the resource is recached.
&gt;&gt; 
&gt;&gt; How should the situation I described at the end of https://bugs.webkit.org/show_bug.cgi?id=228222#c5 work? I think the GPU process&apos;s step 4 will see state == ToBeDeleted &amp;&amp; useCount &gt; 0.
&gt; 
&gt; Oh, now that I think about it some more, this situation might actually be impossible if:
&gt; 1. No resources are released and recached in the middle of a rendering update (which is true today)
&gt; 2. Each rendering update starts a new display list
&gt; 3. The trigger that starts the GPU process executing the new DL is a message
&gt; 
&gt; If all of those things are true, then the GPU Process can’t start executing the second frame’s DL until it has seen the previous frame’s release message.
&gt; 
&gt; I’ll do some more investigation and testing to see if it’s possible.

Yep - I verified that this is possible. If JS enqueues a bunch of commands which are fast to enqueue but slow to execute, the WP can enqueue 2 frames of commands, and the GPUP will execute the 2 frames synchronously because of the loop in RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists(). The cache/release messages don&apos;t get a chance to execute in between the execution of these 2 frames, so we execute the second frame&apos;s DrawGlyphs using the first frame&apos;s font (which is okay, since it&apos;s the same font with the same renderingResourceIdentifier).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779618</commentid>
    <comment_count>18</comment_count>
      <attachid>434145</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-26 16:42:45 -0700</bug_when>
    <thetext>Comment on attachment 434145
Reworked struct ResourceUseCounter and Replayer::Delegate

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

&gt;&gt;&gt;&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:84
&gt;&gt;&gt;&gt;&gt; +    // We may actually be able to get a head start on some display list items if they&apos;re ready for us and we have the resources they depend on.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I think the case (state == ToBeDeleted &amp;&amp; useCount &gt; 0) will never happen if recordResourceUse() is called from Replayer::applyItem(). The resource will be removed if useOrPendingCount is zero. Next reference to this resource will return MissingCachedResource and will delay replaying the DL item till the resource is recached.
&gt;&gt;&gt; 
&gt;&gt;&gt; How should the situation I described at the end of https://bugs.webkit.org/show_bug.cgi?id=228222#c5 work? I think the GPU process&apos;s step 4 will see state == ToBeDeleted &amp;&amp; useCount &gt; 0.
&gt;&gt; 
&gt;&gt; Oh, now that I think about it some more, this situation might actually be impossible if:
&gt;&gt; 1. No resources are released and recached in the middle of a rendering update (which is true today)
&gt;&gt; 2. Each rendering update starts a new display list
&gt;&gt; 3. The trigger that starts the GPU process executing the new DL is a message
&gt;&gt; 
&gt;&gt; If all of those things are true, then the GPU Process can’t start executing the second frame’s DL until it has seen the previous frame’s release message.
&gt;&gt; 
&gt;&gt; I’ll do some more investigation and testing to see if it’s possible.
&gt; 
&gt; Yep - I verified that this is possible. If JS enqueues a bunch of commands which are fast to enqueue but slow to execute, the WP can enqueue 2 frames of commands, and the GPUP will execute the 2 frames synchronously because of the loop in RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists(). The cache/release messages don&apos;t get a chance to execute in between the execution of these 2 frames, so we execute the second frame&apos;s DrawGlyphs using the first frame&apos;s font (which is okay, since it&apos;s the same font with the same renderingResourceIdentifier).

I verified it by simulating a command which is fast to enqueue but slow to execute, by adding a conditional sleep in DrawGlyphs::apply():

if (m_glyphs.size() == 5) {
    WTFLogAlways(&quot;First drawGlyphs command. Sleeping...&quot;);
    usleep(5000000);
    WTFLogAlways(&quot;Done sleeping...&quot;);
} else {
    WTFLogAlways(&quot;Second drawGlyphs command.&quot;);
}

and executing this JS:

function frame() {
    switch (count) {
        case 0:
            context.font = &quot;100px &apos;Helvetica&apos;&quot;;
            context.fillText(&quot;Hello&quot;, 100, 300);
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
        case 6:
            requestAnimationFrame(frame);
            break;
        case 7:
            context.fillText(&quot;bb&quot;, 200, 200);
            break;
    }
    count++;
}
requestAnimationFrame(frame);

After adding various logging, the GPUP&apos;s order of execution is:

1. Cache font
2. Enter the loop in RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists()
3. RemoteRenderingBackend::submit() starts executing
4. First drawGlyphs() command
5. Another call to RemoteRenderingBackend::submit() starts executing
6. Second drawGlyphs command
7. Exit the loop in RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists()
8. Release the font
9. Cache the font
10. Release the font</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779641</commentid>
    <comment_count>19</comment_count>
      <attachid>434159</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-07-26 17:09:47 -0700</bug_when>
    <thetext>Comment on attachment 434159
Patch

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

&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:37
&gt; +    m_imageBuffers.add(renderingResourceIdentifier, WTFMove(imageBuffer));

If the resource identifier is in the HashMap, the newly decoded resource will be dropped and the existing resource in the HashMap will be reused. Is this okay?

&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:91
&gt; +    if (!value.useOrPendingCount)
&gt; +        m_resourceUseCounters.remove(iterator);

You are right. The scenario you described in https://bugs.webkit.org/show_bug.cgi?id=228222#c5 is possible. And I see now why you are keeping the entry of the resource in m_resourceUseCounters and you are deleting the resource itself below. The assumption is if:

1. value.state == ResourceState::ToBeDeleted
2. value.useOrPendingCount &gt; 0

Then we should have received a ReleaseRemoteResource message and we are waiting for a CacheFoo message for the same resource. But for data integrity and to make the states of the resource caching simpler, I think we should keep both entries in m_resourceUseCounters and the HashMaps always together. The RemoteResourceCache::cacheFoo() methods are now assuming the same resource can be recached.

So I think we can say:

if (value.useOrPendingCount)
    return;
m_resourceUseCounters.remove(iterator);
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779658</commentid>
    <comment_count>20</comment_count>
      <attachid>434159</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-26 18:02:05 -0700</bug_when>
    <thetext>Comment on attachment 434159
Patch

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

&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:37
&gt;&gt; +    m_imageBuffers.add(renderingResourceIdentifier, WTFMove(imageBuffer));
&gt; 
&gt; If the resource identifier is in the HashMap, the newly decoded resource will be dropped and the existing resource in the HashMap will be reused. Is this okay?

Yes, I think this is okay because these resource should be immutable, and the association between renderingResourceIdentifier and resource should be unchanging. So, if two resources share a renderingResourceIdentifier, I think they&apos;re supposed to be the same resource with the same data inside them.

(We can hit this situation in the case where the WP does
1. Send cache message
2. Use the resource
3. Send release message with useCount = 1
4. Send cache message again for the same resource
5. [more stuff]

and the GPUP sees
1. Cache message
2. Release message (but we defer the actual removal)
3. Cache message &lt;=== this part here
4. Use the resource
5. [more stuff])

&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp:91
&gt;&gt; +        m_resourceUseCounters.remove(iterator);
&gt; 
&gt; You are right. The scenario you described in https://bugs.webkit.org/show_bug.cgi?id=228222#c5 is possible. And I see now why you are keeping the entry of the resource in m_resourceUseCounters and you are deleting the resource itself below. The assumption is if:
&gt; 
&gt; 1. value.state == ResourceState::ToBeDeleted
&gt; 2. value.useOrPendingCount &gt; 0
&gt; 
&gt; Then we should have received a ReleaseRemoteResource message and we are waiting for a CacheFoo message for the same resource. But for data integrity and to make the states of the resource caching simpler, I think we should keep both entries in m_resourceUseCounters and the HashMaps always together. The RemoteResourceCache::cacheFoo() methods are now assuming the same resource can be recached.
&gt; 
&gt; So I think we can say:
&gt; 
&gt; if (value.useOrPendingCount)
&gt;     return;
&gt; m_resourceUseCounters.remove(iterator);
&gt; ...

Okay, makes sense. I&apos;ll update the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779661</commentid>
    <comment_count>21</comment_count>
      <attachid>434264</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-26 18:21:58 -0700</bug_when>
    <thetext>Created attachment 434264
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779663</commentid>
    <comment_count>22</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-26 18:41:05 -0700</bug_when>
    <thetext>Committed r280334 (239981@main): &lt;https://commits.webkit.org/239981@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779664</commentid>
    <comment_count>23</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-07-26 18:42:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/81141027&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434067</attachid>
            <date>2021-07-23 00:13:28 -0700</date>
            <delta_ts>2021-07-23 09:56:15 -0700</delta_ts>
            <desc>Patch for reviewing</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>32801</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IGVlOGE0M2Q4MWU5ZTY3MmRjNzQ0NGU2NjQyZTI1NThhZjMxNjIzZTgKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBGcmkgSnVsIDIz
IDAwOjEyOjEzIDIwMjEgLTA3MDAKCiAgICBbR1BVIFByb2Nlc3NdIEFkZCByZXNvdXJjZSB1c2Ug
Y291bnRlciBpbmZyYXN0cnVjdHVyZSB0byBSZW1vdGVSZXNvdXJjZUNhY2hlCiAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4MjIyCiAgICAKICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgogICAgCiAgICBTb3VyY2UvV2ViQ29yZToKICAgIAogICAgVGhp
cyBpcyBwYXJ0IDIgb2YgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
ODIxNi4KICAgIAogICAgVXNpbmcgRGlzcGxheUxpc3Q6OlJlcGxheWVyOjpEZWxlZ2F0ZSB0byB0
cmFjayBob3cgbWFueSB0aW1lcyBhIHJlc291cmNlIGlzIHVzZWQgaW4gYSBkaXNwbGF5IGxpc3Qg
aXMgYSBuYXR1cmFsIGZpdC4KICAgIEhvd2V2ZXIsIGlmIHRoZSBHUFUgcHJvY2VzcyBkZXRlcm1p
bmVzIHRoYXQgYSByZXNvdXJjZSBoYXMgaGl0IGl0cyB1c2UgbGltaXQgYW5kIGlzIHJlYWR5IHRv
IGJlIGRlc3Ryb3llZCwgaXQgY2FuJ3QKICAgIGFjdHVhbGx5IGRlc3Ryb3kgaXQgaW1tZWRpYXRl
bHksIGJlY2F1c2UgdGhlIGRlbGVnYXRlJ3MgY2FsbGJhY2sgaXMgY2FsbGVkIGJlZm9yZSBhY3R1
YWxseSBleGVjdXRpbmcgdGhlIGRpc3BsYXkKICAgIGxpc3QgaXRlbSAod2hpY2ggbmVlZHMgdG8g
c2VlIHRoZSByZXNvdXJjZSkuIEFuZCBpdCBoYXMgdG8gZXhlY3V0ZSBiZWZvcmUgZXhlY3V0aW5n
IHRoZSBkaXNwbGF5IGxpc3QgaXRlbSBiZWNhdXNlCiAgICB0aGUgZGVsZWdhdGUgYWN0dWFsbHkg
aW1wbGVtZW50cyB0aGUgZGlzcGxheSBsaXN0IGl0ZW0gZm9yIHRoaW5ncyBsaWtlIGdldEltYWdl
RGF0YS4gU28sIHRoaXMgcGF0Y2ggYWRkcyBhbm90aGVyCiAgICBtZXRob2QgdG8gdGhlIGRlbGVn
YXRlOiBkaWRDb21wbGV0ZVJlcGxheWluZygpLCB3aGljaCBpcyBjYWxsZWQgYXQgdGhlIGVuZCBv
ZiB0aGUgcmVwbGF5LiBUaGUgR1BVIHByb2Nlc3Mgd2lsbAogICAgcmVtZW1iZXIgd2hpY2ggcmVz
b3VyY2VzIHdlcmUgdXNlZCBkdXJpbmcgdGhlIHJlcGxheSwgYW5kIGluY3JlbWVudCB0aGUgcmVs
ZXZhbnQgY291bnRlcnMsIGJ1dCBvbmx5IG9uY2UgdGhlIHJlcGxheQogICAgaGFzIGZpbmlzaGVk
IGNhbiB0aGUgR1BVIHByb2Nlc3MgYWN0dWFsbHkgZGVsZXRlIHRoZXNlIHJlc291cmNlcy4gVGhh
dCBvY2N1cnMgaW4gdGhpcyBuZXcgZGVsZWdhdGUgbWV0aG9kLgogICAgCiAgICBObyBuZXcgdGVz
dHMgYmVjYXVzZSB0aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UgeWV0LiBUaGlzIHBhdGNoIGlz
IGp1c3QgYWRkaW5nIGluZnJhc3RydWN0dXJlLiBGb3Igbm93LCBhbGwgdGhlc2UKICAgIHVzZSBj
b3VudHMgc2VudCBieSB0aGUgd2ViIHByb2Nlc3MgYXJlIDAgLSBJJ2xsIGltcGxlbWVudCB0aGF0
IHBhcnQgaW4gMyBmb2xsb3ctdXAgcGF0Y2hlcy4KICAgIAogICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHA6CiAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlcGxheWVyOjpyZXBsYXkpOgogICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oOgogICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZXBsYXllcjo6RGVsZWdhdGU6OmRpZENvbXBsZXRlUmVwbGF5aW5nKToKICAgIAogICAgU291
cmNlL1dlYktpdDoKICAgIAogICAgVGhpcyBwYXRjaCBhZGRzIHRoZSBpbmZyYXN0cnVjdHVyZSBm
b3IgYXNzb2NpYXRpbmcgYSBjb3VudGVyIHdpdGggZWFjaCByZXNvdXJjZSBpbiB0aGUgUmVtb3Rl
UmVzb3VyY2VDYWNoZS4KICAgIEFzIHRoZSB3ZWIgcHJvY2VzcyB1c2VzIGEgcmVzb3VyY2UgZHVy
aW5nIGRpc3BsYXkgbGlzdCByZWNvcmRpbmcsIGl0IGluY3JlbWVudHMgYSBjb3VudGVyLCBhbmQg
YXMgdGhlIEdQVQogICAgcHJvY2VzcyB1c2VzIGEgcmVzb3VyY2UsIGl0IGluY3JlbWVudHMgYSBj
b3VudGVyIGluIHRoZSBSZW1vdGVSZXNvdXJjZUNhY2hlLiBXaGVuIHRoZSB3ZWIgcHJvY2VzcyBp
cyBkb25lCiAgICB3aXRoIGEgcmVzb3VyY2UsIGl0IHNlbmRzIGEgcmVsZWFzZSBtZXNzYWdlIHRv
IHRoZSBHUFUgcHJvY2VzcyB3aGljaCBjcnVjaWFsbHkgaW5jbHVkZXMgdGhlIHdlYiBwcm9jZXNz
J3MKICAgIGNvdW50ZXIuIFRoZSBHUFUgcHJvY2VzcyBoYXMgdG8gdGhlbiB3YWl0IHRvIGFjdHVh
bGx5IGRlbGV0ZSB0aGUgcmVzb3VyY2UgdW50aWwgaXRzIG93biB1c2UgY291bnRlciBtYXRjaGVz
CiAgICB0aGUgb25lIGl0IHJlY2VpdmVkIGZyb20gdGhlIHdlYiBwcm9jZXNzLiBUaGlzIHBhdGNo
IGltcGxlbWVudHMgdGhpcyBkZWZlcnJlZCBkZWxldGlvbiBpbmZyYXN0cnVjdHVyZQogICAgaW4g
dGhlIEdQVSBwcm9jZXNzLgogICAgCiAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHA6CiAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpS
ZXBsYXllckRlbGVnYXRlOjpkaWRDb21wbGV0ZVJlcGxheWluZyk6IFNlZSB0aGUgV2ViQ29yZSBD
aGFuZ2VMb2cgZm9yIGFuCiAgICBleHBsYW5hdGlvbiBvZiB0aGlzLgogICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZVJlbW90ZVJlc291cmNlKTogUGFzcyB0aGUgdXNl
IGNvdW50IHRvIHRoZSBSZW1vdGVSZXNvdXJjZUNhY2hlLgogICAgKiBHUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDogQWRkIHRoZSB1c2UgY291bnQgZmllbGQuCiAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5p
bjogRGl0dG8uCiAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5j
cHA6CiAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZUltYWdlQnVmZmVyKTog
SXQncyBhY3R1YWxseSBva2F5IGlmIHRoZXJlJ3MgYWxyZWFkeSBhbiByZXNvdXJjZSBjYWNoZWQu
CiAgICBUaGF0IGp1c3QgbWVhbnMgdGhhdCB0aGUgd2ViIHByb2Nlc3Mgc3RhcnRlZCB1c2luZyBh
IHJlc291cmNlIGFnYWluIGJlZm9yZSB0aGUgR1BVIHByb2Nlc3MgY29uc3VtZWQgYWxsCiAgICBj
b21tYW5kcyB0aGF0IHVzZWQgaXQgdGhlIGZpcnN0IHRpbWUuIEFsbCB3ZSBuZWVkIHRvIGRvIGlz
IGluY3JlbWVudCB0aGUgb3BlbiBjb3VudC4KICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2Fj
aGU6OmNhY2hlTmF0aXZlSW1hZ2UpOiBEaXR0by4KICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNl
Q2FjaGU6OmNhY2hlRm9udCk6IERpdHRvLgogICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNo
ZTo6aW5jcmVtZW50T3BlbkNvdW50KToKICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGU6
Om1heWJlUmVtb3ZlUmVzb3VyY2UpOiBUaGlzIGlzIGNhbGxlZCB3aGVuZXZlciBpdCdzIHBvc3Np
YmxlIGZvciB1cyB0byBiZSBpbgogICAgc2l0dWF0aW9uIHdoZXJlIHdlIHNob3VsZCBiZSByZW1v
dmluZyBhIHJlc291cmNlIChha2Egd2hlbmV2ZXIgdGhlIHVzZSBjb3VudCBpbmNyZW1lbnRzKS4g
SXQgY2hlY2tzIHRvIHNlZQogICAgaWYgd2UgY2FuIHJlbW92ZSB0aGUgcmVzb3VyY2UsIGFuZCBp
ZiBpdCBjYW4sIGRvZXMgc28uCiAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlOjpyZWNv
cmRSZXNvdXJjZVVzZSk6IFRoZSBjYWxsYmFjayB0aGF0IHJ1bnMgZm9yIGVhY2ggcmVzb3VyY2Ug
dXNlIGR1cmluZwogICAgcmVwbGF5aW5nLiBJdCBjYW4ndCBhY3R1YWxseSBkZWxldGUgYW55IHJl
c291cmNlcywgc28gaW5zdGVhZCBpdCBqdXN0IHJlY29yZHMgd2hpY2ggcmVzb3VyY2VzIGhhZCB0
aGVpcgogICAgdXNlIGNvdW50cyBpbmNyZW1lbnRlZCwgYW5kIHdhaXRzIGZvciBwcnVuZSgpIHRv
IGFjdHVhbGx5IGNhbGwgbWF5YmVSZW1vdmVSZXNvdXJjZSgpLgogICAgKFdlYktpdDo6UmVtb3Rl
UmVzb3VyY2VDYWNoZTo6cHJ1bmUpOiBBZnRlciB0aGUgcmVwbGF5IGlzIGNvbXBsZXRlLCBjYWxs
IG1heWJlUmVtb3ZlUmVzb3VyY2UoKSBvbiBhbGwgdGhlCiAgICByZXNvdXJjZXMgd2hpY2ggaGFk
IHRoZWlyIHVzZSBjb3VudGVycyB0b3VjaGVkLgogICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VD
YWNoZTo6cmVsZWFzZVJlbW90ZVJlc291cmNlKTogUHV0IHRoZSByZWxldmFudCByZXNvdXJjZSBp
bnRvIHRoZSBzdGF0ZSB3aGVyZSB3ZQogICAgYXJlIHdhaXRpbmcgZm9yIHRoZSB1c2UgY291bnRl
cnMgdG8gbWF0Y2ggYmVmb3JlIHdlIGNhbiBkZWxldGUgdGhlIHJlc291cmNlLiBBbHNvLCBjYWxs
IG1heWJlUmVtb3ZlUmVzb3VyY2UoKQogICAgc28gaXQgY2FuIGJlIGRlbGV0ZWQgaW1tZWRpYXRl
bHkgaWYgdGhlIGNvdW50ZXJzIGFscmVhZHkgbWF0Y2guCiAgICAqIEdQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oOiBBZGQgYSBuZXcgZGF0YSBzdHJ1Y3R1cmUgdG8gaG9s
ZCB0aGUgdXNlIGNvdW50ZXJzLiBUaGVyZSdzCiAgICBhIGJpZyBjb21tZW50IGluIGhlcmUgdGhh
dCBkZXNjcmliZXMgd2hhdCB0aGVzZSBmaWVsZHMgbWVhbi4KICAgICogV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgogICAgKFdlYktpdDo6UmVtb3RlSW1h
Z2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkpOiBTZW5kIGEgZHVtbXkgdXNl
IGNvdW50IGZvciBub3cuIFRoaXMgd2lsbCBiZQogICAgaW1wbGVtZW50ZWQgaW4gYSBmb2xsb3ct
dXAgcGF0Y2guCiAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5jcHA6CiAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OnJlbGVhc2VSZW1vdGVSZXNvdXJjZSk6IEFkZCB0aGUgdXNlQ291bnQgcGFyYW1ldGVyLgogICAg
KiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDog
RGl0dG8uCiAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQ
cm94eS5jcHA6CiAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OnJlbGVhc2VO
YXRpdmVJbWFnZSk6IFNlbmQgYSBkdW1teSB1c2UgY291bnQgZm9yIG5vdy4gVGhpcyB3aWxsIGJl
CiAgICBpbXBsZW1lbnRlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4KICAgIChXZWJLaXQ6OlJlbW90
ZVJlc291cmNlQ2FjaGVQcm94eTo6Y2xlYXJGb250TWFwKTogRGl0dG8uCiAgICAoV2ViS2l0OjpS
ZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmZpbmFsaXplUmVuZGVyaW5nVXBkYXRlRm9yRm9udHMp
OiBEaXR0by4KCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGU1Y2JhMzBjZWVmLi40OWI3M2E3MzhjNTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAyMS0wNy0yMiAgTXlsZXMgQy4gTWF4ZmllbGQgIDxt
bWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gQWRkIHJlc291cmNl
IHVzZSBjb3VudGVyIGluZnJhc3RydWN0dXJlIHRvIFJlbW90ZVJlc291cmNlQ2FjaGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODIyMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgcGFydCAy
IG9mIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjgyMTYuCisKKyAg
ICAgICAgVXNpbmcgRGlzcGxheUxpc3Q6OlJlcGxheWVyOjpEZWxlZ2F0ZSB0byB0cmFjayBob3cg
bWFueSB0aW1lcyBhIHJlc291cmNlIGlzIHVzZWQgaW4gYSBkaXNwbGF5IGxpc3QgaXMgYSBuYXR1
cmFsIGZpdC4KKyAgICAgICAgSG93ZXZlciwgaWYgdGhlIEdQVSBwcm9jZXNzIGRldGVybWluZXMg
dGhhdCBhIHJlc291cmNlIGhhcyBoaXQgaXRzIHVzZSBsaW1pdCBhbmQgaXMgcmVhZHkgdG8gYmUg
ZGVzdHJveWVkLCBpdCBjYW4ndAorICAgICAgICBhY3R1YWxseSBkZXN0cm95IGl0IGltbWVkaWF0
ZWx5LCBiZWNhdXNlIHRoZSBkZWxlZ2F0ZSdzIGNhbGxiYWNrIGlzIGNhbGxlZCBiZWZvcmUgYWN0
dWFsbHkgZXhlY3V0aW5nIHRoZSBkaXNwbGF5CisgICAgICAgIGxpc3QgaXRlbSAod2hpY2ggbmVl
ZHMgdG8gc2VlIHRoZSByZXNvdXJjZSkuIEFuZCBpdCBoYXMgdG8gZXhlY3V0ZSBiZWZvcmUgZXhl
Y3V0aW5nIHRoZSBkaXNwbGF5IGxpc3QgaXRlbSBiZWNhdXNlCisgICAgICAgIHRoZSBkZWxlZ2F0
ZSBhY3R1YWxseSBpbXBsZW1lbnRzIHRoZSBkaXNwbGF5IGxpc3QgaXRlbSBmb3IgdGhpbmdzIGxp
a2UgZ2V0SW1hZ2VEYXRhLiBTbywgdGhpcyBwYXRjaCBhZGRzIGFub3RoZXIKKyAgICAgICAgbWV0
aG9kIHRvIHRoZSBkZWxlZ2F0ZTogZGlkQ29tcGxldGVSZXBsYXlpbmcoKSwgd2hpY2ggaXMgY2Fs
bGVkIGF0IHRoZSBlbmQgb2YgdGhlIHJlcGxheS4gVGhlIEdQVSBwcm9jZXNzIHdpbGwKKyAgICAg
ICAgcmVtZW1iZXIgd2hpY2ggcmVzb3VyY2VzIHdlcmUgdXNlZCBkdXJpbmcgdGhlIHJlcGxheSwg
YW5kIGluY3JlbWVudCB0aGUgcmVsZXZhbnQgY291bnRlcnMsIGJ1dCBvbmx5IG9uY2UgdGhlIHJl
cGxheQorICAgICAgICBoYXMgZmluaXNoZWQgY2FuIHRoZSBHUFUgcHJvY2VzcyBhY3R1YWxseSBk
ZWxldGUgdGhlc2UgcmVzb3VyY2VzLiBUaGF0IG9jY3VycyBpbiB0aGlzIG5ldyBkZWxlZ2F0ZSBt
ZXRob2QuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZp
b3IgY2hhbmdlIHlldC4gVGhpcyBwYXRjaCBpcyBqdXN0IGFkZGluZyBpbmZyYXN0cnVjdHVyZS4g
Rm9yIG5vdywgYWxsIHRoZXNlCisgICAgICAgIHVzZSBjb3VudHMgc2VudCBieSB0aGUgd2ViIHBy
b2Nlc3MgYXJlIDAgLSBJJ2xsIGltcGxlbWVudCB0aGF0IHBhcnQgaW4gMyBmb2xsb3ctdXAgcGF0
Y2hlcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlcGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXll
cjo6cmVwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZXBsYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxh
eWVyOjpEZWxlZ2F0ZTo6ZGlkQ29tcGxldGVSZXBsYXlpbmcpOgorCiAyMDIxLTA3LTIyICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJl
dmVydGluZyAyODAxMzAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAK
aW5kZXggZjM3MGI0MTE4ZDAyLi4zNTYxZGEwYmQxMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZXBsYXllci5jcHAKQEAgLTIzMiw2ICsyMzIsOSBAQCBSZXBsYXlSZXN1bHQgUmVw
bGF5ZXI6OnJlcGxheShjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBib29sIHRyYWNrUmVw
bGF5TGlzdAogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKG1fZGVsZWdhdGUpCisgICAgICAg
IG1fZGVsZWdhdGUtPmRpZENvbXBsZXRlUmVwbGF5aW5nKCk7CisKICAgICByZXN1bHQudHJhY2tl
ZERpc3BsYXlMaXN0ID0gV1RGTW92ZShyZXBsYXlMaXN0KTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKaW5kZXggMTY2MjdhMDIwNmUz
Li41NzkzOWVlOTc3ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaApA
QCAtNjgsNiArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseShJdGVt
SGFuZGxlLCBHcmFwaGljc0NvbnRleHQmKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkQ3JlYXRlTWFza0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJikg
eyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZXNldE1hc2tJbWFnZUJ1ZmZlcigpIHsgfQor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVSZXBsYXlpbmcoKSB7IH0KICAgICB9Owog
ICAgIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmJhMDQzMzA2NjQzLi4wZjM3ZjRhYTJlYTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDQyICsxLDU1IEBACiAyMDIxLTA3LTIyICBNeWxlcyBDLiBNYXhmaWVsZCAg
PG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKLSAgICAgICAgW0dQVSBQcm9jZXNzXSBNaWdyYXRlIHRo
ZSBEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6OkRlbGVnYXRlIGZyb20gUmVtb3RlSW1hZ2VCdWZmZXIg
dG8gUmVtb3RlUmVuZGVyaW5nQmFja2VuZAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI4MjE5CisgICAgICAgIFtHUFUgUHJvY2Vzc10gQWRkIHJlc291
cmNlIHVzZSBjb3VudGVyIGluZnJhc3RydWN0dXJlIHRvIFJlbW90ZVJlc291cmNlQ2FjaGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODIyMgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCi0gICAgICAgIFRoaXMgaXMgcGFy
dCAxIG9mIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjgyMTYuCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyB0aGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGFzc29jaWF0aW5n
IGEgY291bnRlciB3aXRoIGVhY2ggcmVzb3VyY2UgaW4gdGhlIFJlbW90ZVJlc291cmNlQ2FjaGUu
CisgICAgICAgIEFzIHRoZSB3ZWIgcHJvY2VzcyB1c2VzIGEgcmVzb3VyY2UgZHVyaW5nIGRpc3Bs
YXkgbGlzdCByZWNvcmRpbmcsIGl0IGluY3JlbWVudHMgYSBjb3VudGVyLCBhbmQgYXMgdGhlIEdQ
VQorICAgICAgICBwcm9jZXNzIHVzZXMgYSByZXNvdXJjZSwgaXQgaW5jcmVtZW50cyBhIGNvdW50
ZXIgaW4gdGhlIFJlbW90ZVJlc291cmNlQ2FjaGUuIFdoZW4gdGhlIHdlYiBwcm9jZXNzIGlzIGRv
bmUKKyAgICAgICAgd2l0aCBhIHJlc291cmNlLCBpdCBzZW5kcyBhIHJlbGVhc2UgbWVzc2FnZSB0
byB0aGUgR1BVIHByb2Nlc3Mgd2hpY2ggY3J1Y2lhbGx5IGluY2x1ZGVzIHRoZSB3ZWIgcHJvY2Vz
cydzCisgICAgICAgIGNvdW50ZXIuIFRoZSBHUFUgcHJvY2VzcyBoYXMgdG8gdGhlbiB3YWl0IHRv
IGFjdHVhbGx5IGRlbGV0ZSB0aGUgcmVzb3VyY2UgdW50aWwgaXRzIG93biB1c2UgY291bnRlciBt
YXRjaGVzCisgICAgICAgIHRoZSBvbmUgaXQgcmVjZWl2ZWQgZnJvbSB0aGUgd2ViIHByb2Nlc3Mu
IFRoaXMgcGF0Y2ggaW1wbGVtZW50cyB0aGlzIGRlZmVycmVkIGRlbGV0aW9uIGluZnJhc3RydWN0
dXJlCisgICAgICAgIGluIHRoZSBHUFUgcHJvY2Vzcy4KIAotICAgICAgICBGb3IgdGhpcyB0YXNr
LCB3ZSBuZWVkIHRvIGNvdW50IHJlc291cmNlIHVzZXM6Ci0gICAgICAgIDEuIEFzIHRoZSByZWNv
cmRlciBpbiB0aGUgd2ViIHByb2Nlc3MgcmVjb3JkcyBEaXNwbGF5TGlzdCBpdGVtcyB3aGljaCBy
ZWZlcmVuY2UgcmVzb3VyY2VzLCB0aG9zZSB1c2VzIG5lZWQgdG8gaW5jcmVtZW50IGEgY291bnRl
ci4KLSAgICAgICAgMi4gQXMgdGhlIHJlcGxheWVyIGluIHRoZSBHUFUgcHJvY2VzcyByZXBsYXlz
IERpc3BsYXlMaXN0IGl0ZW1zIHdoaWNoIHJlZmVyZW5jZSByZXNvdXJjZXMsIHRob3NlIHVzZXMg
bmVlZCB0byBpbmNyZW1lbnQgYSBwYXJhbGxlbCBjb3VudGVyLgotCi0gICAgICAgIFRoZSBtb3N0
IG5hdHVyYWwgcGxhY2UgZm9yIHRoZSBjb3VudGVycyB0byBsaXZlIGlzIGluIFJlbW90ZVJlc291
cmNlQ2FjaGVQcm94eSBhbmQgUmVtb3RlUmVzb3VyY2VDYWNoZSwgcmVzcGVjdGl2ZWx5LiBUaGVz
ZSB0d28gY2xhc3NlcwotICAgICAgICBhcmUgYWNjZXNzaWJsZSBmcm9tIHRoZSBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkgYW5kIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQsIHJlc3BlY3RpdmVs
eS4gVGhlIG1vc3QgbmF0dXJhbCBpbnRlcmZhY2UgYmV0d2VlbiB0aGUKLSAgICAgICAgRGlzcGxh
eUxpc3QgY2xhc3NlcyBsaWtlIERpc3BsYXlMaXN0OjpSZWNvcmRlciBhbmQgRGlzcGxheUxpc3Q6
OlJlcGxheWVyIGFuZCB0aGUgaGlnaGVyIGxldmVsIFdlYktpdCBjbGFzc2UgaXMgdG8gdXNlIHRo
ZWlyIGRlbGVnYXRlCi0gICAgICAgIGludGVyZmFjZXMuCi0KLSAgICAgICAgRm9yIDEgYWJvdmUs
IFJlbW90ZUltYWdlQnVmZmVyUHJveHkgaGFzIGFjY2VzcyB0byB0aGUgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5IGFuZCBpcyBhbHJlYWR5IGEgRGlzcGxheUxpc3Q6OlJlY29yZGVyOjpEZWxl
Z2F0ZSwgc28KLSAgICAgICAgdGhlcmUncyBubyBwcm9ibGVtIHRoZXJlLiBIb3dldmVyLCBmb3Ig
MiwgbWVzc2FnZXMgYXJlIGRlbGl2ZXJlZCBmaXJzdCB0byB0aGUgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZCwgd2hpY2ggaXMgdGhlIHBsYWNlIHRoYXQgaGFzIGFjY2VzcyB0bwotICAgICAgICB0aGUg
UmVtb3RlUmVzb3VyY2VDYWNoZS4gTWFraW5nIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIGhh
dmUgdGhlIERpc3BsYXlMaXN0OjpSZXBsYXllcjo6RGVsZWdhdGUgd291bGQgYmUgYSBuYXR1cmFs
IHBsYWNlIHRvIGVpdGhlcgotICAgICAgICBBKSBjYWxsIHRoZSBuZWNlc3NhcnkgZnVuY3Rpb24g
aW4gdGhlIFJlbW90ZUltYWdlQnVmZmVyLCBvciBCKSBpbnRlcmFjdCB3aXRoIHRoZSBSZW1vdGVS
ZXNvdXJjZUNhY2hlIHRvIGluY3JlbWVudCB0aGUgbmVjZXNzYXJ5IGNvdW50ZXIuCi0KLSAgICAg
ICAgSW5kZWVkLCB0aGlzIG1ha2VzIGEgbG90IG9mIHNlbnNlIGJlY2F1c2UsIGZvciAyIG9mIHRo
ZSAzIGRlbGVnYXRlIG1ldGhvZHMsIFJlbW90ZUltYWdlQnVmZmVyIGp1c3QgaW1tZWRpYXRlbHkg
dHVybnMgYXJvdW5kIGFuZCBmb3J3YXJkcwotICAgICAgICB0aGUgY2FsbCB0byB0aGUgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZCBhbnl3YXkuIFNvLCBtaWdyYXRpbmcgdGhpcyBpbnRlcmZhY2UgdG8g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZCBhY3R1YWxseSBlbmRzIHVwIG1ha2luZyBpdCBhIGJpdAot
ICAgICAgICBzaW1wbGVyLgotCi0gICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlz
IG5vIGJlaGF2aW9yIGNoYW5nZS4KLQotICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlSW1hZ2VCdWZmZXIuaDoKLSAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmFw
cGx5KToKLSAgICAgICAgKCk6IERlbGV0ZWQuCiAgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcDoKLSAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6UmVwbGF5ZXJEZWxlZ2F0ZSk6Ci0gICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OmFw
cGx5KToKLSAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJE
ZWxlZ2F0ZTo6ZGlkQ3JlYXRlTWFza0ltYWdlQnVmZmVyKToKLSAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6ZGlkUmVzZXRNYXNrSW1hZ2VC
dWZmZXIpOgotICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzdWJtaXQp
OgotICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5o
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVn
YXRlOjpkaWRDb21wbGV0ZVJlcGxheWluZyk6IFNlZSB0aGUgV2ViQ29yZSBDaGFuZ2VMb2cgZm9y
IGFuCisgICAgICAgIGV4cGxhbmF0aW9uIG9mIHRoaXMuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZSk6IFBhc3MgdGhlIHVzZSBj
b3VudCB0byB0aGUgUmVtb3RlUmVzb3VyY2VDYWNoZS4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDogQWRkIHRoZSB1c2UgY291bnQgZmllbGQu
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1l
c3NhZ2VzLmluOiBEaXR0by4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
c291cmNlQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlOjpj
YWNoZUltYWdlQnVmZmVyKTogSXQncyBhY3R1YWxseSBva2F5IGlmIHRoZXJlJ3MgYWxyZWFkeSBh
biByZXNvdXJjZSBjYWNoZWQuCisgICAgICAgIFRoYXQganVzdCBtZWFucyB0aGF0IHRoZSB3ZWIg
cHJvY2VzcyBzdGFydGVkIHVzaW5nIGEgcmVzb3VyY2UgYWdhaW4gYmVmb3JlIHRoZSBHUFUgcHJv
Y2VzcyBjb25zdW1lZCBhbGwKKyAgICAgICAgY29tbWFuZHMgdGhhdCB1c2VkIGl0IHRoZSBmaXJz
dCB0aW1lLiBBbGwgd2UgbmVlZCB0byBkbyBpcyBpbmNyZW1lbnQgdGhlIG9wZW4gY291bnQuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlTmF0aXZlSW1hZ2UpOiBE
aXR0by4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2FjaGVGb250KTog
RGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGU6OmluY3JlbWVudE9w
ZW5Db3VudCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGU6Om1heWJlUmVt
b3ZlUmVzb3VyY2UpOiBUaGlzIGlzIGNhbGxlZCB3aGVuZXZlciBpdCdzIHBvc3NpYmxlIGZvciB1
cyB0byBiZSBpbgorICAgICAgICBzaXR1YXRpb24gd2hlcmUgd2Ugc2hvdWxkIGJlIHJlbW92aW5n
IGEgcmVzb3VyY2UgKGFrYSB3aGVuZXZlciB0aGUgdXNlIGNvdW50IGluY3JlbWVudHMpLiBJdCBj
aGVja3MgdG8gc2VlCisgICAgICAgIGlmIHdlIGNhbiByZW1vdmUgdGhlIHJlc291cmNlLCBhbmQg
aWYgaXQgY2FuLCBkb2VzIHNvLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hl
OjpyZWNvcmRSZXNvdXJjZVVzZSk6IFRoZSBjYWxsYmFjayB0aGF0IHJ1bnMgZm9yIGVhY2ggcmVz
b3VyY2UgdXNlIGR1cmluZworICAgICAgICByZXBsYXlpbmcuIEl0IGNhbid0IGFjdHVhbGx5IGRl
bGV0ZSBhbnkgcmVzb3VyY2VzLCBzbyBpbnN0ZWFkIGl0IGp1c3QgcmVjb3JkcyB3aGljaCByZXNv
dXJjZXMgaGFkIHRoZWlyCisgICAgICAgIHVzZSBjb3VudHMgaW5jcmVtZW50ZWQsIGFuZCB3YWl0
cyBmb3IgcHJ1bmUoKSB0byBhY3R1YWxseSBjYWxsIG1heWJlUmVtb3ZlUmVzb3VyY2UoKS4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZTo6cHJ1bmUpOiBBZnRlciB0aGUgcmVw
bGF5IGlzIGNvbXBsZXRlLCBjYWxsIG1heWJlUmVtb3ZlUmVzb3VyY2UoKSBvbiBhbGwgdGhlCisg
ICAgICAgIHJlc291cmNlcyB3aGljaCBoYWQgdGhlaXIgdXNlIGNvdW50ZXJzIHRvdWNoZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGU6OnJlbGVhc2VSZW1vdGVSZXNvdXJj
ZSk6IFB1dCB0aGUgcmVsZXZhbnQgcmVzb3VyY2UgaW50byB0aGUgc3RhdGUgd2hlcmUgd2UKKyAg
ICAgICAgYXJlIHdhaXRpbmcgZm9yIHRoZSB1c2UgY291bnRlcnMgdG8gbWF0Y2ggYmVmb3JlIHdl
IGNhbiBkZWxldGUgdGhlIHJlc291cmNlLiBBbHNvLCBjYWxsIG1heWJlUmVtb3ZlUmVzb3VyY2Uo
KQorICAgICAgICBzbyBpdCBjYW4gYmUgZGVsZXRlZCBpbW1lZGlhdGVseSBpZiB0aGUgY291bnRl
cnMgYWxyZWFkeSBtYXRjaC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
c291cmNlQ2FjaGUuaDogQWRkIGEgbmV3IGRhdGEgc3RydWN0dXJlIHRvIGhvbGQgdGhlIHVzZSBj
b3VudGVycy4gVGhlcmUncworICAgICAgICBhIGJpZyBjb21tZW50IGluIGhlcmUgdGhhdCBkZXNj
cmliZXMgd2hhdCB0aGVzZSBmaWVsZHMgbWVhbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZUltYWdlQnVmZmVyUHJveHk6On5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KTogU2VuZCBhIGR1bW15
IHVzZSBjb3VudCBmb3Igbm93LiBUaGlzIHdpbGwgYmUKKyAgICAgICAgaW1wbGVtZW50ZWQgaW4g
YSBmb2xsb3ctdXAgcGF0Y2guCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlUmVtb3RlUmVzb3VyY2UpOiBBZGQgdGhlIHVzZUNv
dW50IHBhcmFtZXRlci4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaDogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpyZWxlYXNlTmF0aXZlSW1hZ2UpOiBTZW5kIGEgZHVt
bXkgdXNlIGNvdW50IGZvciBub3cuIFRoaXMgd2lsbCBiZQorICAgICAgICBpbXBsZW1lbnRlZCBp
biBhIGZvbGxvdy11cCBwYXRjaC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNo
ZVByb3h5OjpjbGVhckZvbnRNYXApOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVz
b3VyY2VDYWNoZVByb3h5OjpmaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZUZvckZvbnRzKTogRGl0dG8u
CiAKIDIwMjEtMDctMjIgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggZWE4Mjg2ZGEwYzlkLi5jMTA2ZjQyY2M0ZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTIxNCw2ICsyMTQsMTIgQEAgdm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjpkaWRSZXNldE1hc2tJbWFnZUJ1ZmZlcigp
CiAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmRpZFJlc2V0TWFza0ltYWdlQnVmZmVyKCk7
CiB9CiAKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6ZGlk
Q29tcGxldGVSZXBsYXlpbmcoKQoreworICAgIGF1dG8gbWVzc2FnZXNBcmVJbk9yZGVyID0gbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLnJlbW90ZVJlc291cmNlQ2FjaGUoKS5wcnVuZSgpOworICAg
IE1FU1NBR0VfQ0hFQ0sobWVzc2FnZXNBcmVJbk9yZGVyLCAiV2ViIHByb2Nlc3MgdHJpZWQgdG8g
cmVsZWFzZSBhIHJlc291cmNlIHRoYXQgd2Fzbid0IGNhY2hlZCIpOworfQorCiBEaXNwbGF5TGlz
dDo6UmVwbGF5UmVzdWx0IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnN1Ym1pdChjb25zdCBEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBJbWFnZUJ1ZmZlciYgZGVzdGluYXRp
b24pCiB7CiAgICAgaWYgKGRpc3BsYXlMaXN0LmlzRW1wdHkoKSkKQEAgLTUwOSwxMCArNTE1LDEx
IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGVsZXRlQWxsRm9udHMoKQogICAgIG1f
cmVtb3RlUmVzb3VyY2VDYWNoZS5kZWxldGVBbGxGb250cygpOwogfQogCi12b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZShSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQordm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpyZWxlYXNlUmVtb3RlUmVzb3VyY2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpCiB7CiAg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hl
LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAg
IGF1dG8gc3VjY2VzcyA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5yZWxlYXNlUmVtb3RlUmVzb3Vy
Y2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1c2VDb3VudCk7CisgICAgTUVTU0FHRV9D
SEVDSyhzdWNjZXNzLCAiUmVzb3VyY2UgaXMgYmVpbmcgcmVsZWFzZWQgYmVmb3JlIGJlaW5nIGNh
Y2hlZC4iKTsKICAgICB1cGRhdGVSZW5kZXJpbmdSZXNvdXJjZVJlcXVlc3QoKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmgKaW5kZXggZjdiZjZiYzNiMDczLi44NzI2MjlmMDI1M2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuaApAQCAtMTQ0LDcgKzE0NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYWNo
ZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGNhY2hlRm9udChSZWY8V2ViQ29y
ZTo6Rm9udD4mJik7CiAgICAgdm9pZCBkZWxldGVBbGxGb250cygpOwotICAgIHZvaWQgcmVsZWFz
ZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Cisg
ICAgdm9pZCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCk7CiAgICAgdm9pZCBkaWRDcmVhdGVTaGFyZWRE
aXNwbGF5TGlzdEhhbmRsZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZp
ZXIsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIGRlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcik7CiAKICAgICBjbGFz
cyBSZXBsYXllckRlbGVnYXRlIDogcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXll
cjo6RGVsZWdhdGUgewpAQCAtMTU1LDYgKzE1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wg
YXBwbHkoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUsIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYpIGZpbmFsOwogICAgICAgICB2b2lkIGRpZENyZWF0ZU1hc2tJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIGZpbmFsOwogICAgICAgICB2b2lkIGRpZFJlc2V0TWFza0lt
YWdlQnVmZmVyKCkgZmluYWw7CisgICAgICAgIHZvaWQgZGlkQ29tcGxldGVSZXBsYXlpbmcoKSBm
aW5hbDsKIAogICAgICAgICBXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgbV9kZXN0aW5hdGlvbjsKICAg
ICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgppbmRleCA0YjNmZTlhMDI2MmUu
LmZmNjJhZjUxMWYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4K
QEAgLTM2LDcgKzM2LDcgQEAgbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB7CiAg
ICAgQ2FjaGVGb250KElQQzo6Rm9udFJlZmVyZW5jZSBmb250KQogICAgIERlbGV0ZUFsbEZvbnRz
KCkKICAgICBEaWRDcmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpTaGFyZWRNZW1v
cnk6OklQQ0hhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpCi0gICAgUmVsZWFzZVJlbW90ZVJlc291cmNl
KFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpCisgICAgUmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVz
ZUNvdW50KQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuY3Bw
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUu
Y3BwCmluZGV4IDgxZGRlMGJmZmNmMC4uMzFhMTk0ZjRhMjgxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuY3Bw
CkBAIC0zMyw4ICszMywxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogdm9pZCBSZW1v
dGVSZXNvdXJjZUNhY2hlOjpjYWNoZUltYWdlQnVmZmVyKFJlZjxJbWFnZUJ1ZmZlcj4mJiBpbWFn
ZUJ1ZmZlcikKIHsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1faW1hZ2VCdWZmZXJzLmFkZChpbWFn
ZUJ1ZmZlci0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIFdURk1vdmUoaW1hZ2VCdWZm
ZXIpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkp
OworICAgIGF1dG8gcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyID0gaW1hZ2VCdWZmZXItPnJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOworICAgIG1faW1hZ2VCdWZmZXJzLmFkZChyZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdURk1vdmUoaW1hZ2VCdWZmZXIpKTsKKworICAgIGlu
Y3JlbWVudE9wZW5Db3VudChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCiBJbWFn
ZUJ1ZmZlciogUmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2FjaGVkSW1hZ2VCdWZmZXIoUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKQEAgLTQ0LDE0
ICs0NiwyNyBAQCBJbWFnZUJ1ZmZlciogUmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2FjaGVkSW1hZ2VC
dWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyCiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VD
YWNoZTo6Y2FjaGVOYXRpdmVJbWFnZShSZWY8TmF0aXZlSW1hZ2U+JiYgaW1hZ2UpCiB7Ci0gICAg
YXV0byBhZGRSZXN1bHQgPSBtX25hdGl2ZUltYWdlcy5hZGQoaW1hZ2UtPnJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcigpLCBXVEZNb3ZlKGltYWdlKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChhZGRS
ZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBhdXRvIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciA9IGltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKKyAgICBt
X25hdGl2ZUltYWdlcy5hZGQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXVEZNb3ZlKGlt
YWdlKSk7CisKKyAgICBpbmNyZW1lbnRPcGVuQ291bnQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKTsKIH0KIAogdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZUZvbnQoUmVmPEZvbnQ+
JiYgZm9udCkKIHsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZm9udHMuYWRkKGZvbnQtPnJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBXVEZNb3ZlKGZvbnQpKTsKLSAgICBBU1NFUlRfVU5V
U0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIGF1dG8gcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyID0gZm9udC0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7
CisgICAgbV9mb250cy5hZGQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXVEZNb3ZlKGZv
bnQpKTsKKworICAgIGluY3JlbWVudE9wZW5Db3VudChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpOworfQorCit2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OmluY3JlbWVudE9wZW5Db3VudChX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKQoreworICAgIGF1dG8gcmVzdWx0ID0gbV9yZXNvdXJjZVVzZUNvdW50ZXJzLmVuc3Vy
ZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFsmXSB7CisgICAgICAgIHJldHVybiBSZXNv
dXJjZVVzZUNvdW50ZXIgeyB9OworICAgIH0pOworICAgICsrcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5vcGVuQ291bnQ7CisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5v
cGVuQ291bnQpOwogfQogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OmRlbGV0ZUFsbEZvbnRz
KCkKQEAgLTU5LDE2ICs3NCw3MiBAQCB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OmRlbGV0ZUFs
bEZvbnRzKCkKICAgICBtX2ZvbnRzLmNsZWFyKCk7CiB9CiAKLXZvaWQgUmVtb3RlUmVzb3VyY2VD
YWNoZTo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCitib29sIFJlbW90ZVJlc291cmNlQ2FjaGU6Om1h
eWJlUmVtb3ZlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgUmVzb3VyY2VVc2VDb3VudGVyc01hcDo6aXRlcmF0
b3IgaXRlcmF0b3IpCiB7CisgICAgLy8gSXQncyBhY3R1YWxseSBva2F5IGlmIHVzZUNvdW50ID4g
dG90YWxVc2VDb3VudC4KKyAgICAvLyBJdCBqdXN0IG1lYW5zIHRoYXQgdGhlcmUncyBhIGNhY2hl
IG1lc3NhZ2UgcGVuZGluZywgYW5kIHdlJ3ZlIGVhZ2VybHkgdXNlZCBhIHByZXZpb3VzbHktY2Fj
aGVkIHJlc291cmNlLgorICAgIC8vIFdoaWNoIGlzIGZpbmUuCisgICAgLy8gRklYTUU6IE1heWJl
IHdlIHNob3VsZG4ndCBhY3R1YWxseSByZW1vdmUgdGhlIHJlc291cmNlIGluIHRoaXMgc2l0dWF0
aW9uPworICAgIC8vIFdlIG1heSBhY3R1YWxseSBiZSBhYmxlIHRvIGdldCBhIGhlYWQgc3RhcnQg
b24gc29tZSBkaXNwbGF5IGxpc3QgaXRlbXMgaWYgdGhleSdyZSByZWFkeSBmb3IgdXMgYW5kIHdl
IGhhdmUgdGhlIHJlc291cmNlcyB0aGV5IGRlcGVuZCBvbi4KKworICAgIGlmIChpdGVyYXRvci0+
dmFsdWUub3BlbkNvdW50IHx8IGl0ZXJhdG9yLT52YWx1ZS51c2VDb3VudCA8IGl0ZXJhdG9yLT52
YWx1ZS50b3RhbFVzZUNvdW50KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpdGVyYXRvci0+
dmFsdWUudXNlQ291bnQgLT0gaXRlcmF0b3ItPnZhbHVlLnRvdGFsVXNlQ291bnQ7CisgICAgaXRl
cmF0b3ItPnZhbHVlLnRvdGFsVXNlQ291bnQgPSAwOworICAgIGlmICghaXRlcmF0b3ItPnZhbHVl
LnVzZUNvdW50KQorICAgICAgICBtX3Jlc291cmNlVXNlQ291bnRlcnMucmVtb3ZlKGl0ZXJhdG9y
KTsKKwogICAgIGlmIChtX2ltYWdlQnVmZmVycy5yZW1vdmUocmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAo
bV9uYXRpdmVJbWFnZXMucmVtb3ZlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKG1fZm9udHMucmVtb3Zl
KHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKICAgICAvLyBDYWNoaW5nIHRoZSByZW1vdGUgcmVzb3VyY2Ugc2hvdWxk
IGhhdmUgaGFwcGVuZWQgYmVmb3JlIHJlbGVhc2luZyBpdC4KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZTo6
cmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZXNv
dXJjZVVzZUNvdW50ZXJzLmZpbmQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKworICAg
IGlmIChpdGVyYXRvciA9PSBtX3Jlc291cmNlVXNlQ291bnRlcnMuZW5kKCkpIHsKKyAgICAgICAg
Ly8gVGhlIGRpc3BsYXkgbGlzdCBpdGVtcyB3b24gdGhlIHJhY2UgYWdhaW5zdCB0aGUgY2FjaGVG
b250IG1lc3NhZ2UuCisgICAgICAgIC8vIFdoZW4gd2UgcmVjZWl2ZSB0aGUgY2FjaGVGb250IG1l
c3NhZ2UsIHdlIHdpbGwgcmV0cnkgdGhlIGRpc3BsYXkgbGlzdCBpdGVtLgorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgUmVzb3VyY2VVc2VDb3VudGVyJiB1c2VDb3VudGVyID0gaXRlcmF0
b3ItPnZhbHVlOworICAgICsrdXNlQ291bnRlci51c2VDb3VudDsKKworICAgIG1fcmVzb3VyY2Vz
Rm9yTWF5YmVSZW1vdmluZy5hZGQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKK30KKwor
Ym9vbCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpwcnVuZSgpCit7CisgICAgZm9yIChhdXRvIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciA6IG1fcmVzb3VyY2VzRm9yTWF5YmVSZW1vdmluZykgewor
ICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZXNvdXJjZVVzZUNvdW50ZXJzLmZpbmQocmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fcmVz
b3VyY2VVc2VDb3VudGVycy5lbmQoKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZXNBcmVJbk9yZGVy
ID0gbWF5YmVSZW1vdmVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGl0ZXJh
dG9yKTsKKyAgICAgICAgaWYgKCFtZXNzYWdlc0FyZUluT3JkZXIpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIG1fcmVzb3VyY2VzRm9yTWF5YmVSZW1vdmluZy5jbGVhcigp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlbW90ZVJlc291cmNlQ2FjaGU6OnJlbGVh
c2VSZW1vdGVSZXNvdXJjZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCkKK3sKKyAgICBhdXRvIGl0ZXJhdG9y
ID0gbV9yZXNvdXJjZVVzZUNvdW50ZXJzLmZpbmQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9yZXNvdXJjZVVzZUNvdW50ZXJzLmVuZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgUmVzb3VyY2VVc2VDb3VudGVyJiB1c2VDb3VudGVyID0g
aXRlcmF0b3ItPnZhbHVlOworICAgIGlmICghaXRlcmF0b3ItPnZhbHVlLm9wZW5Db3VudCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIC0tdXNlQ291bnRlci5vcGVuQ291bnQ7CisgICAgdXNl
Q291bnRlci50b3RhbFVzZUNvdW50ICs9IHVzZUNvdW50OworICAgIHJldHVybiBtYXliZVJlbW92
ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgaXRlcmF0b3IpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oCmluZGV4IDJjZWQ5MDlmNDgxMS4uYWQy
NzRkNzNkMTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlUmVzb3VyY2VDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmgKQEAgLTQ2LDE2ICs0Niw0NSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKFJlZjxXZWJDb3JlOjpOYXRpdmVJbWFnZT4mJik7CiAg
ICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRl
QWxsRm9udHMoKTsKLSAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIGJvb2wgcmVsZWFzZVJlbW90ZVJlc291cmNl
KFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQp
OworICAgIHZvaWQgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKTsKKyAgICBib29sIHBydW5lKCk7CiAKICAgICBjb25zdCBXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckhhc2hNYXAmIGltYWdlQnVmZmVycygpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VCdWZm
ZXJzOyB9CiAgICAgY29uc3QgV2ViQ29yZTo6TmF0aXZlSW1hZ2VIYXNoTWFwJiBuYXRpdmVJbWFn
ZXMoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUltYWdlczsgfQogICAgIGNvbnN0IFdlYkNvcmU6
OkZvbnRSZW5kZXJpbmdSZXNvdXJjZU1hcCYgZm9udHMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRz
OyB9CiAKIHByaXZhdGU6CisgICAgLy8gQmVjYXVzZSB0aGUgY2FjaGUvcmVsZWFzZSBtZXNzYWdl
cyBhcmUgc2VudCBhc3luY2hyb25vdXNseSBmcm9tIHRoZSBkaXNwbGF5IGxpc3QgaXRlbXMgd2hp
Y2gKKyAgICAvLyByZWZlcmVuY2UgdGhlIHJlc291cmNlcywgaXQncyB0b3RhbGx5IHBvc3NpYmxl
IHRoYXQgd2Ugc2VlIGEgcmVsZWFzZSBtZXNzYWdlIGJlZm9yZSB3ZSd2ZQorICAgIC8vIGV4ZWN1
dGVkIGFsbCB0aGUgZGlzcGxheSBsaXN0IGl0ZW1zIHdoaWNoIHJlZmVyZW5jZSB0aGUgcmVzb3Vy
Y2UuIFRoZSB3ZWIgcHJvY2VzcyB0ZWxscyB1cworICAgIC8vIGhvdyBtYW55IGRpc3BsYXkgbGlz
dCBpdGVtcyB3aWxsIHJlZmVyZW5jZSB0aGlzIHJlc291cmNlLCBhbmQgd2UgZGVmZXIgZGVsZXRp
b24gb2YgdGhlIHJlc291cmNlCisgICAgLy8gdW50aWwgd2UgZXhlY3V0ZSB0aGF0IG1hbnkgZGlz
cGxheSBsaXN0IGl0ZW1zLgorICAgIC8vCisgICAgLy8gSXQncyBhY3R1YWxseSBhIGJpdCB3b3Jz
ZSB0aGFuIHRoaXMsIHRob3VnaCwgYmVjYXVzZSB3ZSBtYXkgYWN0dWFsbHkgc2VlIGEgKm5ldyog
Y2FjaGUgbWVzc2FnZQorICAgIC8vIGR1cmluZyB0aGUgdGltZSB3aGVuIGRlbGV0aW9uIGlzIGRl
ZmVycmVkLCBzbyB3ZSBuZWVkIGEgc2Vjb25kIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgY2FjaGUK
KyAgICAvLyBtZXNzYWdlcyB3aGljaCBkb24ndCBoYXZlIGFuIGFjY29tcGFueWluZyByZWxlYXNl
IG1lc3NhZ2VzLgorICAgIC8vCisgICAgLy8gV2UgY2FuIG9ubHkgc2FmZWx5IGRlbGV0ZSBhIHJl
c291cmNlIHdoZW46CisgICAgLy8gMS4gQWxsIHRoZSBjYWNoZSBtZXNzYWdlcyBoYXZlIGFuIGFj
Y29tcGFueWluZyByZWxlYXNlIG1lc3NhZ2UsIGFuZAorICAgIC8vIDIuIFdlJ3ZlIHByb2Nlc3Nl
ZCBhcyBtYW55IGRpc3BsYXkgbGlzdCBpdGVtcyB0aGF0IHJlZmVyZW5jZSBhIHBhcnRpY3VsYXIg
cmVzb3VyY2UgYXMgdGhlIHdlYgorICAgIC8vIHByb2Nlc3MgaGFzIGVuY29kZWQuCisgICAgc3Ry
dWN0IFJlc291cmNlVXNlQ291bnRlciB7CisgICAgICAgIHVpbnQ2NF90IG9wZW5Db3VudCB7IDAg
fTsgLy8gVGhlIG51bWJlciBvZiBjYWNoZUZvbyBtZXNzYWdlcyB3ZSd2ZSByZWNlaXZlZCB3aXRo
b3V0IGEgY29ycmVzcG9uZGluZyByZWxlYXNlIG1lc3NhZ2UKKyAgICAgICAgdWludDY0X3QgdXNl
Q291bnQgeyAwIH07IC8vIFRoZSBudW1iZXIgb2YgcmVuZGVyaW5nIGNvbW1hbmRzIHdlJ3ZlIGV4
ZWN1dGVkIHdoaWNoIHJlZmVyZW5jZSB0aGlzIHJlc291cmNlCisgICAgICAgIHVpbnQ2NF90IHRv
dGFsVXNlQ291bnQgeyAwIH07IC8vIE9uY2UgdXNlQ291bnQgaGl0cyB0aGlzIGxpbWl0LCB3ZSBj
YW4gZnJlZSB0aGUgcmVzb3VyY2UKKyAgICB9OworICAgIHVzaW5nIFJlc291cmNlVXNlQ291bnRl
cnNNYXAgPSBIYXNoTWFwPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgUmVz
b3VyY2VVc2VDb3VudGVyPjsKKworICAgIGJvb2wgbWF5YmVSZW1vdmVSZXNvdXJjZShXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFJlc291cmNlVXNlQ291bnRlcnNNYXA6Oml0
ZXJhdG9yKTsKKyAgICB2b2lkIGluY3JlbWVudE9wZW5Db3VudChXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpOworCiAgICAgV2ViQ29yZTo6SW1hZ2VCdWZmZXJIYXNoTWFwIG1f
aW1hZ2VCdWZmZXJzOwogICAgIFdlYkNvcmU6Ok5hdGl2ZUltYWdlSGFzaE1hcCBtX25hdGl2ZUlt
YWdlczsKICAgICBXZWJDb3JlOjpGb250UmVuZGVyaW5nUmVzb3VyY2VNYXAgbV9mb250czsKKwor
ICAgIFJlc291cmNlVXNlQ291bnRlcnNNYXAgbV9yZXNvdXJjZVVzZUNvdW50ZXJzOworICAgIEhh
c2hTZXQ8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBtX3Jlc291cmNlc0Zv
ck1heWJlUmVtb3Zpbmc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmgKaW5kZXggYjQ0OGIzN2Y5N2ZlLi5kNGNiYzJjMGM5MDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKIAogICAgICAg
ICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CiAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LT5yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkoKS5yZWxlYXNlSW1hZ2VCdWZmZXIobV9y
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS0+cmVsZWFzZVJlbW90ZVJlc291cmNlKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKTsKKyAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbGVhc2VS
ZW1vdGVSZXNvdXJjZShtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgMCk7IC8vIEZJWE1F
OiBQYXNzIHRoZSByZWFsIHVzZSBjb3VudCBoZXJlLgogICAgIH0KIAogICAgIEltYWdlQnVmZmVy
QmFja2VuZEhhbmRsZSBjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4IDA5Y2U0YzZlZjZkNi4uZTk1ZjFh
ZDM5MzRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0y
NDksMTIgKzI0OSwxMiBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGVsZXRl
QWxsRm9udHMoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRl
bGV0ZUFsbEZvbnRzKCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9w
dGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKIH0KIAot
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZShS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQor
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZShS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1
aW50NjRfdCB1c2VDb3VudCkKIHsKICAgICBpZiAocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
ID09IG1fY3VycmVudERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyKQogICAgICAgICBt
X2N1cnJlbnREZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllciA9IHN0ZDo6bnVsbG9wdDsK
IAotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbGVhc2VSZW1v
dGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCByZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2Fp
dGluZ0ZvclN5bmNSZXBseSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6UmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
dXNlQ291bnQpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246
OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CiB9CiAKIHZvaWQg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQo
SW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5oCmluZGV4IDYzMTQ5NjcwYTM1OS4uYjJjZTNkOGMyOGFiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTEwNCw3ICsxMDQsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
JiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGNhY2hl
Rm9udChSZWY8V2ViQ29yZTo6Rm9udD4mJik7CiAgICAgdm9pZCBkZWxldGVBbGxGb250cygpOwot
ICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCk7CiAKICAgICBlbnVt
IGNsYXNzIERpZFJlY2VpdmVCYWNrZW5kQ3JlYXRpb25SZXN1bHQgOiBib29sIHsKICAgICAgICAg
UmVjZWl2ZWRBbnlSZXNwb25zZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcApp
bmRleCAwM2YzNGIzM2EyMmQuLjQxNGUxOTk2ZThiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VD
YWNoZVByb3h5LmNwcApAQCAtMTIxLDggKzEyMSw3IEBAIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNo
ZVByb3h5OjpyZWxlYXNlTmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
CiAgICAgaWYgKCFtX25hdGl2ZUltYWdlcy5yZW1vdmUocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gVGVsbCB0aGUgR1BVIHByb2Nlc3MgdG8g
cmVtb3ZlIHRoaXMgcmVzb3VyY2UuCi0gICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
cmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAg
bV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgMCk7IC8vIEZJWE1FOiBQYXNzIHRoZSByZWFsIHVzZSBj
b3VudCBoZXJlLgogfQogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6cHJlcGFyZUZv
ck5leHRSZW5kZXJpbmdVcGRhdGUoKQpAQCAtMTM0LDcgKzEzMyw3IEBAIHZvaWQgUmVtb3RlUmVz
b3VyY2VDYWNoZVByb3h5OjpwcmVwYXJlRm9yTmV4dFJlbmRlcmluZ1VwZGF0ZSgpCiB2b2lkIFJl
bW90ZVJlc291cmNlQ2FjaGVQcm94eTo6Y2xlYXJGb250TWFwKCkKIHsKICAgICBmb3IgKGF1dG8m
IGl0ZW0gOiBtX2ZvbnRJZGVudGlmaWVyVG9MYXN0UmVuZGVyaW5nVXBkYXRlVmVyc2lvbk1hcCkK
LSAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJlc291
cmNlKGl0ZW0ua2V5KTsKKyAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVs
ZWFzZVJlbW90ZVJlc291cmNlKGl0ZW0ua2V5LCAwKTsgLy8gRklYTUU6IFBhc3MgdGhlIHJlYWwg
dXNlIGNvdW50IGhlcmUuCiAgICAgbV9mb250SWRlbnRpZmllclRvTGFzdFJlbmRlcmluZ1VwZGF0
ZVZlcnNpb25NYXAuY2xlYXIoKTsKICAgICBtX251bWJlck9mRm9udHNVc2VkSW5DdXJyZW50UmVu
ZGVyaW5nVXBkYXRlID0gMDsKIH0KQEAgLTE1Miw3ICsxNTEsNyBAQCB2b2lkIFJlbW90ZVJlc291
cmNlQ2FjaGVQcm94eTo6ZmluYWxpemVSZW5kZXJpbmdVcGRhdGVGb3JGb250cygpCiAgICAgZm9y
IChhdXRvJiBpdGVtIDogbV9mb250SWRlbnRpZmllclRvTGFzdFJlbmRlcmluZ1VwZGF0ZVZlcnNp
b25NYXApIHsKICAgICAgICAgaWYgKG1fY3VycmVudFJlbmRlcmluZ1VwZGF0ZVZlcnNpb24gLSBp
dGVtLnZhbHVlID49IG1pbmltdW1SZW5kZXJpbmdVcGRhdGVDb3VudFRvS2VlcEZvbnRBbGl2ZSkg
ewogICAgICAgICAgICAgdG9SZW1vdmUuYWRkKGl0ZW0ua2V5KTsKLSAgICAgICAgICAgIG1fcmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShpdGVtLmtleSk7
CisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3Rl
UmVzb3VyY2UoaXRlbS5rZXksIDApOyAvLyBGSVhNRTogUGFzcyB0aGUgcmVhbCB1c2UgY291bnQg
aGVyZS4KICAgICAgICAgfQogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434072</attachid>
            <date>2021-07-23 00:47:34 -0700</date>
            <delta_ts>2021-07-23 10:48:31 -0700</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>bug-228222-20210723004733.patch</filename>
            <type>text/plain</type>
            <size>29824</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMjE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGU1Y2JhMzBjZWVmNGY4
ZGJhOWYwOTJhNTdlYjgxYmE4YTRhMGRhMS4uNDliNzNhNzM4YzUwMjkzNGY0Y2M0Y2E5ZTk5YWRi
ZTBiZjBlYzBmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIxLTA3LTIyICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9j
ZXNzXSBBZGQgcmVzb3VyY2UgdXNlIGNvdW50ZXIgaW5mcmFzdHJ1Y3R1cmUgdG8gUmVtb3RlUmVz
b3VyY2VDYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI4MjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBpcyBwYXJ0IDIgb2YgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyODIxNi4KKworICAgICAgICBVc2luZyBEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6OkRlbGVn
YXRlIHRvIHRyYWNrIGhvdyBtYW55IHRpbWVzIGEgcmVzb3VyY2UgaXMgdXNlZCBpbiBhIGRpc3Bs
YXkgbGlzdCBpcyBhIG5hdHVyYWwgZml0LgorICAgICAgICBIb3dldmVyLCBpZiB0aGUgR1BVIHBy
b2Nlc3MgZGV0ZXJtaW5lcyB0aGF0IGEgcmVzb3VyY2UgaGFzIGhpdCBpdHMgdXNlIGxpbWl0IGFu
ZCBpcyByZWFkeSB0byBiZSBkZXN0cm95ZWQsIGl0IGNhbid0CisgICAgICAgIGFjdHVhbGx5IGRl
c3Ryb3kgaXQgaW1tZWRpYXRlbHksIGJlY2F1c2UgdGhlIGRlbGVnYXRlJ3MgY2FsbGJhY2sgaXMg
Y2FsbGVkIGJlZm9yZSBhY3R1YWxseSBleGVjdXRpbmcgdGhlIGRpc3BsYXkKKyAgICAgICAgbGlz
dCBpdGVtICh3aGljaCBuZWVkcyB0byBzZWUgdGhlIHJlc291cmNlKS4gQW5kIGl0IGhhcyB0byBl
eGVjdXRlIGJlZm9yZSBleGVjdXRpbmcgdGhlIGRpc3BsYXkgbGlzdCBpdGVtIGJlY2F1c2UKKyAg
ICAgICAgdGhlIGRlbGVnYXRlIGFjdHVhbGx5IGltcGxlbWVudHMgdGhlIGRpc3BsYXkgbGlzdCBp
dGVtIGZvciB0aGluZ3MgbGlrZSBnZXRJbWFnZURhdGEuIFNvLCB0aGlzIHBhdGNoIGFkZHMgYW5v
dGhlcgorICAgICAgICBtZXRob2QgdG8gdGhlIGRlbGVnYXRlOiBkaWRDb21wbGV0ZVJlcGxheWlu
ZygpLCB3aGljaCBpcyBjYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgcmVwbGF5LiBUaGUgR1BVIHBy
b2Nlc3Mgd2lsbAorICAgICAgICByZW1lbWJlciB3aGljaCByZXNvdXJjZXMgd2VyZSB1c2VkIGR1
cmluZyB0aGUgcmVwbGF5LCBhbmQgaW5jcmVtZW50IHRoZSByZWxldmFudCBjb3VudGVycywgYnV0
IG9ubHkgb25jZSB0aGUgcmVwbGF5CisgICAgICAgIGhhcyBmaW5pc2hlZCBjYW4gdGhlIEdQVSBw
cm9jZXNzIGFjdHVhbGx5IGRlbGV0ZSB0aGVzZSByZXNvdXJjZXMuIFRoYXQgb2NjdXJzIGluIHRo
aXMgbmV3IGRlbGVnYXRlIG1ldGhvZC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0
aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UgeWV0LiBUaGlzIHBhdGNoIGlzIGp1c3QgYWRkaW5n
IGluZnJhc3RydWN0dXJlLiBGb3Igbm93LCBhbGwgdGhlc2UKKyAgICAgICAgdXNlIGNvdW50cyBz
ZW50IGJ5IHRoZSB3ZWIgcHJvY2VzcyBhcmUgMCAtIEknbGwgaW1wbGVtZW50IHRoYXQgcGFydCBp
biAzIGZvbGxvdy11cCBwYXRjaGVzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlcGxheWVyOjpyZXBsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVwbGF5ZXI6OkRlbGVnYXRlOjpkaWRDb21wbGV0ZVJlcGxheWluZyk6CisK
IDIwMjEtMDctMjIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIDI4MDEzMC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOWMzNDYyN2IzZjgy
OWNkNWFjMzUxOWU5MGJmNWVhYzk4MGU0ZTdhNS4uMGYzN2Y0YWEyZWE0YWMzZmFiYzJlYzdkZTFm
YzIxZGY3OWEwMzJkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAyMS0wNy0yMiAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJv
Y2Vzc10gQWRkIHJlc291cmNlIHVzZSBjb3VudGVyIGluZnJhc3RydWN0dXJlIHRvIFJlbW90ZVJl
c291cmNlQ2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyODIyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyB0aGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGFzc29jaWF0aW5nIGEg
Y291bnRlciB3aXRoIGVhY2ggcmVzb3VyY2UgaW4gdGhlIFJlbW90ZVJlc291cmNlQ2FjaGUuCisg
ICAgICAgIEFzIHRoZSB3ZWIgcHJvY2VzcyB1c2VzIGEgcmVzb3VyY2UgZHVyaW5nIGRpc3BsYXkg
bGlzdCByZWNvcmRpbmcsIGl0IGluY3JlbWVudHMgYSBjb3VudGVyLCBhbmQgYXMgdGhlIEdQVQor
ICAgICAgICBwcm9jZXNzIHVzZXMgYSByZXNvdXJjZSwgaXQgaW5jcmVtZW50cyBhIGNvdW50ZXIg
aW4gdGhlIFJlbW90ZVJlc291cmNlQ2FjaGUuIFdoZW4gdGhlIHdlYiBwcm9jZXNzIGlzIGRvbmUK
KyAgICAgICAgd2l0aCBhIHJlc291cmNlLCBpdCBzZW5kcyBhIHJlbGVhc2UgbWVzc2FnZSB0byB0
aGUgR1BVIHByb2Nlc3Mgd2hpY2ggY3J1Y2lhbGx5IGluY2x1ZGVzIHRoZSB3ZWIgcHJvY2Vzcydz
CisgICAgICAgIGNvdW50ZXIuIFRoZSBHUFUgcHJvY2VzcyBoYXMgdG8gdGhlbiB3YWl0IHRvIGFj
dHVhbGx5IGRlbGV0ZSB0aGUgcmVzb3VyY2UgdW50aWwgaXRzIG93biB1c2UgY291bnRlciBtYXRj
aGVzCisgICAgICAgIHRoZSBvbmUgaXQgcmVjZWl2ZWQgZnJvbSB0aGUgd2ViIHByb2Nlc3MuIFRo
aXMgcGF0Y2ggaW1wbGVtZW50cyB0aGlzIGRlZmVycmVkIGRlbGV0aW9uIGluZnJhc3RydWN0dXJl
CisgICAgICAgIGluIHRoZSBHUFUgcHJvY2Vzcy4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OmRpZENvbXBsZXRlUmVwbGF5aW5n
KTogU2VlIHRoZSBXZWJDb3JlIENoYW5nZUxvZyBmb3IgYW4KKyAgICAgICAgZXhwbGFuYXRpb24g
b2YgdGhpcy4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFz
ZVJlbW90ZVJlc291cmNlKTogUGFzcyB0aGUgdXNlIGNvdW50IHRvIHRoZSBSZW1vdGVSZXNvdXJj
ZUNhY2hlLgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5oOiBBZGQgdGhlIHVzZSBjb3VudCBmaWVsZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46IERpdHRvLgorICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlSW1hZ2VCdWZmZXIpOiBJdCdzIGFj
dHVhbGx5IG9rYXkgaWYgdGhlcmUncyBhbHJlYWR5IGFuIHJlc291cmNlIGNhY2hlZC4KKyAgICAg
ICAgVGhhdCBqdXN0IG1lYW5zIHRoYXQgdGhlIHdlYiBwcm9jZXNzIHN0YXJ0ZWQgdXNpbmcgYSBy
ZXNvdXJjZSBhZ2FpbiBiZWZvcmUgdGhlIEdQVSBwcm9jZXNzIGNvbnN1bWVkIGFsbAorICAgICAg
ICBjb21tYW5kcyB0aGF0IHVzZWQgaXQgdGhlIGZpcnN0IHRpbWUuIEFsbCB3ZSBuZWVkIHRvIGRv
IGlzIGluY3JlbWVudCB0aGUgb3BlbiBjb3VudC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVz
b3VyY2VDYWNoZTo6Y2FjaGVOYXRpdmVJbWFnZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZUZvbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVzb3VyY2VDYWNoZTo6aW5jcmVtZW50T3BlbkNvdW50KToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVzb3VyY2VDYWNoZTo6bWF5YmVSZW1vdmVSZXNvdXJjZSk6IFRoaXMgaXMgY2Fs
bGVkIHdoZW5ldmVyIGl0J3MgcG9zc2libGUgZm9yIHVzIHRvIGJlIGluCisgICAgICAgIHNpdHVh
dGlvbiB3aGVyZSB3ZSBzaG91bGQgYmUgcmVtb3ZpbmcgYSByZXNvdXJjZSAoYWthIHdoZW5ldmVy
IHRoZSB1c2UgY291bnQgaW5jcmVtZW50cykuIEl0IGNoZWNrcyB0byBzZWUKKyAgICAgICAgaWYg
d2UgY2FuIHJlbW92ZSB0aGUgcmVzb3VyY2UsIGFuZCBpZiBpdCBjYW4sIGRvZXMgc28uCisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGU6OnJlY29yZFJlc291cmNlVXNlKTogVGhl
IGNhbGxiYWNrIHRoYXQgcnVucyBmb3IgZWFjaCByZXNvdXJjZSB1c2UgZHVyaW5nCisgICAgICAg
IHJlcGxheWluZy4gSXQgY2FuJ3QgYWN0dWFsbHkgZGVsZXRlIGFueSByZXNvdXJjZXMsIHNvIGlu
c3RlYWQgaXQganVzdCByZWNvcmRzIHdoaWNoIHJlc291cmNlcyBoYWQgdGhlaXIKKyAgICAgICAg
dXNlIGNvdW50cyBpbmNyZW1lbnRlZCwgYW5kIHdhaXRzIGZvciBwcnVuZSgpIHRvIGFjdHVhbGx5
IGNhbGwgbWF5YmVSZW1vdmVSZXNvdXJjZSgpLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNv
dXJjZUNhY2hlOjpwcnVuZSk6IEFmdGVyIHRoZSByZXBsYXkgaXMgY29tcGxldGUsIGNhbGwgbWF5
YmVSZW1vdmVSZXNvdXJjZSgpIG9uIGFsbCB0aGUKKyAgICAgICAgcmVzb3VyY2VzIHdoaWNoIGhh
ZCB0aGVpciB1c2UgY291bnRlcnMgdG91Y2hlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVz
b3VyY2VDYWNoZTo6cmVsZWFzZVJlbW90ZVJlc291cmNlKTogUHV0IHRoZSByZWxldmFudCByZXNv
dXJjZSBpbnRvIHRoZSBzdGF0ZSB3aGVyZSB3ZQorICAgICAgICBhcmUgd2FpdGluZyBmb3IgdGhl
IHVzZSBjb3VudGVycyB0byBtYXRjaCBiZWZvcmUgd2UgY2FuIGRlbGV0ZSB0aGUgcmVzb3VyY2Uu
IEFsc28sIGNhbGwgbWF5YmVSZW1vdmVSZXNvdXJjZSgpCisgICAgICAgIHNvIGl0IGNhbiBiZSBk
ZWxldGVkIGltbWVkaWF0ZWx5IGlmIHRoZSBjb3VudGVycyBhbHJlYWR5IG1hdGNoLgorICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oOiBBZGQgYSBuZXcg
ZGF0YSBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgdXNlIGNvdW50ZXJzLiBUaGVyZSdzCisgICAgICAg
IGEgYmlnIGNvbW1lbnQgaW4gaGVyZSB0aGF0IGRlc2NyaWJlcyB3aGF0IHRoZXNlIGZpZWxkcyBt
ZWFuLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90
ZUltYWdlQnVmZmVyUHJveHkpOiBTZW5kIGEgZHVtbXkgdXNlIGNvdW50IGZvciBub3cuIFRoaXMg
d2lsbCBiZQorICAgICAgICBpbXBsZW1lbnRlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVh
c2VSZW1vdGVSZXNvdXJjZSk6IEFkZCB0aGUgdXNlQ291bnQgcGFyYW1ldGVyLgorICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBE
aXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNh
Y2hlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6
OnJlbGVhc2VOYXRpdmVJbWFnZSk6IFNlbmQgYSBkdW1teSB1c2UgY291bnQgZm9yIG5vdy4gVGhp
cyB3aWxsIGJlCisgICAgICAgIGltcGxlbWVudGVkIGluIGEgZm9sbG93LXVwIHBhdGNoLgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmNsZWFyRm9udE1hcCk6IERp
dHRvLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmZpbmFsaXpl
UmVuZGVyaW5nVXBkYXRlRm9yRm9udHMpOiBEaXR0by4KKwogMjAyMS0wNy0yMiAgRGV2aW4gUm91
c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgW0xpdmUgVGV4dF0gW2lPU10gQW5h
bHlzaXMgc2hvdWxkIGFsc28gc2VhcmNoIGZvciBhbnkgQXBwIENsaXAgY29kZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlcGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcAppbmRleCBmMzcwYjQxMThkMDI0M2ExYjI5
YmJhMDIxMGY4OTc0NzI5MzdhODUzLi4zNTYxZGEwYmQxMjI2Y2JjOTUyN2VhZmVkMTM0NTc3ZGRm
OGQzZTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCkBAIC0y
MzIsNiArMjMyLDkgQEAgUmVwbGF5UmVzdWx0IFJlcGxheWVyOjpyZXBsYXkoY29uc3QgRmxvYXRS
ZWN0JiBpbml0aWFsQ2xpcCwgYm9vbCB0cmFja1JlcGxheUxpc3QKICAgICAgICAgfQogICAgIH0K
IAorICAgIGlmIChtX2RlbGVnYXRlKQorICAgICAgICBtX2RlbGVnYXRlLT5kaWRDb21wbGV0ZVJl
cGxheWluZygpOworCiAgICAgcmVzdWx0LnRyYWNrZWREaXNwbGF5TGlzdCA9IFdURk1vdmUocmVw
bGF5TGlzdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZXBsYXllci5oCmluZGV4IDE2NjI3YTAyMDZlMzA5MjQzZjhiN2JkMThjZGIzZGE1ODYwNzhh
OGYuLjU3OTM5ZWU5NzdlZDRlYzQ1OGEwZDQ1OTJkOWRjZGI3MmFmY2YwMzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlcGxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaApAQCAtNjgsNiArNjgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseShJdGVtSGFuZGxlLCBHcmFwaGljc0NvbnRleHQmKSB7
IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlTWFza0ltYWdl
QnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRSZXNldE1hc2tJbWFnZUJ1ZmZlcigpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29t
cGxldGVSZXBsYXlpbmcoKSB7IH0KICAgICB9OwogICAgIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKaW5k
ZXggZDJmOTViZDk2Y2FjMDQwZjYxMjJjYjQ4MGNlODhiZTFkYWMwZDFkMS4uY2IzZjhlODM1ZDBj
ODBhN2E1Mjc2OWE0ZDYyMDdkNzhhNTg4NGI0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTM4LDcgKzM4LDcg
QEAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4K
LWNsYXNzIFJlbW90ZUltYWdlQnVmZmVyIDogcHVibGljIFdlYkNvcmU6OkNvbmNyZXRlSW1hZ2VC
dWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVy
OjpEZWxlZ2F0ZSB7CitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlciA6IHB1YmxpYyBXZWJDb3JlOjpD
b25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiB7CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRl
SW1hZ2VCdWZmZXIgPSBXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsK
ICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Y29udGV4dDsKICAgICB1c2luZyBC
YXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOwpAQCAtNzUsNyArNzUsOSBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBib29sIGFwcGx5KFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtSGFuZGxlIGl0ZW0sIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
b3ZlcnJpZGUKKyAgICBmcmllbmQgY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDsKKworICAg
IGJvb2wgYXBwbHkoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUgaXRlbSwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIHsKICAgICAgICAgaWYgKGl0ZW0uaXM8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldFBpeGVsQnVmZmVyPigpKSB7CiAgICAgICAgICAgICBh
dXRvJiBnZXRQaXhlbEJ1ZmZlckl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
R2V0UGl4ZWxCdWZmZXI+KCk7CkBAIC0xMDgsMTYgKzExMCw2IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuYXBwbHlNZWRpYUl0ZW0oaXRlbSwgY29u
dGV4dCk7CiAgICAgfQogCi0gICAgdm9pZCBkaWRDcmVhdGVNYXNrSW1hZ2VCdWZmZXIoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKSBmaW5hbAotICAgIHsKLSAgICAgICAgbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmRpZENyZWF0ZU1hc2tJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcik7
Ci0gICAgfQotCi0gICAgdm9pZCBkaWRSZXNldE1hc2tJbWFnZUJ1ZmZlcigpIGZpbmFsCi0gICAg
ewotICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZGlkUmVzZXRNYXNrSW1hZ2VCdWZm
ZXIoKTsKLSAgICB9Ci0KICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiBtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ7CiAgICAgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIG1f
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApp
bmRleCBhNWVkZjkxYTdiNTQyYzVmNmJlNzI3ODEwMjlkOGRhMWM2ZTY1MmMyLi5jMTA2ZjQyY2M0
ZjM1NTU0ZWQ5MjMyYjAzNWUzODM1YWIyMDJjODkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
CkBAIC0xODQsMTYgKzE4NCw0OCBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0
ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbgogICAgICAgICB3
YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0KHN0ZDo6ZXhjaGFuZ2UobV9wZW5kaW5nV2FrZXVwSW5m
bywgc3RkOjpudWxsb3B0KS0+YXJndW1lbnRzKTsKIH0KIAorUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6UmVwbGF5ZXJEZWxlZ2F0ZShXZWJDb3JlOjpJbWFnZUJ1ZmZl
ciYgZGVzdGluYXRpb24sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmIHJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQsIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MpCisgICAgOiBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQorICAgICwgbV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kKHJlbW90ZVJlbmRlcmluZ0JhY2tlbmQpCisgICAgLCBtX2dwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykKK3sKK30KKworYm9vbCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjphcHBseShXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCkKK3sKKyAgICAvLyBGSVhNRTogSW5zcGVjdCB0aGUgaXRlbSBhbmQgcmVj
b3JkIHJlc291cmNlIHVzZSBoZXJlLgorCisgICAgYXV0byBhcHBseSA9IFsmXShhdXRvJiYgZGVz
dGluYXRpb24pIHsKKyAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uLmFwcGx5KGl0ZW0sIGdyYXBo
aWNzQ29udGV4dCk7CisgICAgfTsKKworICAgIGlmIChtX2Rlc3RpbmF0aW9uLnJlbmRlcmluZ01v
ZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKKyAgICAgICAgcmV0dXJuIGFwcGx5
KHN0YXRpY19jYXN0PEFjY2VsZXJhdGVkUmVtb3RlSW1hZ2VCdWZmZXImPihtX2Rlc3RpbmF0aW9u
KSk7CisgICAgcmV0dXJuIGFwcGx5KHN0YXRpY19jYXN0PFVuYWNjZWxlcmF0ZWRSZW1vdGVJbWFn
ZUJ1ZmZlciY+KG1fZGVzdGluYXRpb24pKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpSZXBsYXllckRlbGVnYXRlOjpkaWRDcmVhdGVNYXNrSW1hZ2VCdWZmZXIoV2ViQ29yZTo6
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQoreworICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5kaWRDcmVhdGVNYXNrSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpOworfQorCit2b2lkIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OmRpZFJlc2V0TWFza0ltYWdlQnVm
ZmVyKCkKK3sKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZGlkUmVzZXRNYXNrSW1hZ2VC
dWZmZXIoKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVn
YXRlOjpkaWRDb21wbGV0ZVJlcGxheWluZygpCit7CisgICAgYXV0byBtZXNzYWdlc0FyZUluT3Jk
ZXIgPSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQucmVtb3RlUmVzb3VyY2VDYWNoZSgpLnBydW5l
KCk7CisgICAgTUVTU0FHRV9DSEVDSyhtZXNzYWdlc0FyZUluT3JkZXIsICJXZWIgcHJvY2VzcyB0
cmllZCB0byByZWxlYXNlIGEgcmVzb3VyY2UgdGhhdCB3YXNuJ3QgY2FjaGVkIik7Cit9CisKIERp
c3BsYXlMaXN0OjpSZXBsYXlSZXN1bHQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c3VibWl0KGNv
bnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIEltYWdlQnVmZmVyJiBk
ZXN0aW5hdGlvbikKIHsKICAgICBpZiAoZGlzcGxheUxpc3QuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgRGlzcGxheUxpc3Q6OlJlcGxheWVyOjpEZWxlZ2F0ZSogcmVwbGF5
ZXJEZWxlZ2F0ZSA9IG51bGxwdHI7Ci0gICAgaWYgKGRlc3RpbmF0aW9uLnJlbmRlcmluZ01vZGUo
KSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmVwbGF5ZXJEZWxlZ2F0
ZSA9IHN0YXRpY19jYXN0PEFjY2VsZXJhdGVkUmVtb3RlSW1hZ2VCdWZmZXIqPigmZGVzdGluYXRp
b24pOwotICAgIGVsc2UKLSAgICAgICAgcmVwbGF5ZXJEZWxlZ2F0ZSA9IHN0YXRpY19jYXN0PFVu
YWNjZWxlcmF0ZWRSZW1vdGVJbWFnZUJ1ZmZlcio+KCZkZXN0aW5hdGlvbik7CisgICAgUmVwbGF5
ZXJEZWxlZ2F0ZSByZXBsYXllckRlbGVnYXRlKGRlc3RpbmF0aW9uLCAqdGhpcywgbV9ncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzKTsKIAogICAgIHJldHVybiBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVwbGF5ZXIgewogICAgICAgICBkZXN0aW5hdGlvbi5jb250ZXh0KCksCkBAIC0yMDIsNyArMjM0
LDcgQEAgRGlzcGxheUxpc3Q6OlJlcGxheVJlc3VsdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpz
dWJtaXQoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3AKICAgICAgICAgJnJlbW90ZVJlc291cmNlQ2Fj
aGUoKS5uYXRpdmVJbWFnZXMoKSwKICAgICAgICAgJnJlbW90ZVJlc291cmNlQ2FjaGUoKS5mb250
cygpLAogICAgICAgICBtX2N1cnJlbnRNYXNrSW1hZ2VCdWZmZXIuZ2V0KCksCi0gICAgICAgIHJl
cGxheWVyRGVsZWdhdGUKKyAgICAgICAgJnJlcGxheWVyRGVsZWdhdGUKICAgICB9LnJlcGxheSgp
OwogfQogCkBAIC00ODMsMTAgKzUxNSwxMSBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmRlbGV0ZUFsbEZvbnRzKCkKICAgICBtX3JlbW90ZVJlc291cmNlQ2FjaGUuZGVsZXRlQWxsRm9u
dHMoKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpyZWxlYXNlUmVtb3RlUmVz
b3VyY2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcikKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZVJlbW90ZVJlc291cmNl
KFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIs
IHVpbnQ2NF90IHVzZUNvdW50KQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBtX3JlbW90ZVJlc291cmNl
Q2FjaGUucmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
dXNlQ291bnQpOworICAgIE1FU1NBR0VfQ0hFQ0soc3VjY2VzcywgIlJlc291cmNlIGlzIGJlaW5n
IHJlbGVhc2VkIGJlZm9yZSBiZWluZyBjYWNoZWQuIik7CiAgICAgdXBkYXRlUmVuZGVyaW5nUmVz
b3VyY2VSZXF1ZXN0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCmluZGV4IGEzNTE2NWIxOTEx
ZjlhOTNmM2Q0YThkZTkxYjEwMWY3NTY5YWJiMjIuLjg3MjYyOWYwMjUzYmY0YjY5MzY4MmI3MDIy
MzI4NWZmYjYxMzU2ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMTQ0LDkgKzE0NCwyNCBA
QCBwcml2YXRlOgogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRt
YXA6OkhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAg
dm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxs
Rm9udHMoKTsKLSAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpOwog
ICAgIHZvaWQgZGlkQ3JlYXRlU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRs
ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkJ1ZmZl
cklkZW50aWZpZXIpOwogCisgICAgY2xhc3MgUmVwbGF5ZXJEZWxlZ2F0ZSA6IHB1YmxpYyBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6OkRlbGVnYXRlIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFJlcGxheWVyRGVsZWdhdGUoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kJiwgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYpOworCisgICAgcHJpdmF0ZToK
KyAgICAgICAgYm9vbCBhcHBseShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSwgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0JikgZmluYWw7CisgICAgICAgIHZvaWQgZGlkQ3JlYXRlTWFz
a0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJikgZmluYWw7CisgICAgICAgIHZvaWQg
ZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIoKSBmaW5hbDsKKyAgICAgICAgdm9pZCBkaWRDb21wbGV0
ZVJlcGxheWluZygpIGZpbmFsOworCisgICAgICAgIFdlYkNvcmU6OkltYWdlQnVmZmVyJiBtX2Rl
c3RpbmF0aW9uOworICAgICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiBtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ7CisgICAgICAgIFJlZjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisgICAgfTsKKwogICAgIHN0cnVjdCBQZW5kaW5nV2Fr
ZXVwSW5mb3JtYXRpb24gewogICAgICAgICBHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50
cyBhcmd1bWVudHM7CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyPiBtaXNzaW5nQ2FjaGVkUmVzb3VyY2VJZGVudGlmaWVyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgppbmRleCA0YjNmZTlhMDI2MmU4YTU0OTE4
NTJjNmQ2YTA0MDQ1ZDZhNjk2Mzk3Li5mZjYyYWY1MTFmM2UyZTVjZWJmNDc0MWJiMzUwMzM4NDk0
ZTM4ZWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgpAQCAtMzYs
NyArMzYsNyBAQCBtZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHsKICAgICBDYWNo
ZUZvbnQoSVBDOjpGb250UmVmZXJlbmNlIGZvbnQpCiAgICAgRGVsZXRlQWxsRm9udHMoKQogICAg
IERpZENyZWF0ZVNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBD
SGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGRlc3Rp
bmF0aW9uQnVmZmVySWRlbnRpZmllcikKLSAgICBSZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikKKyAgICBSZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQp
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5jcHAKaW5k
ZXggODFkZGUwYmZmY2YwYmQ2Y2MxYzI4ZTVkZDI0NjM3NGIzNDY0NjI3OC4uMzFhMTk0ZjRhMjgx
MTM2OTRmZTYxYmFkNGI4YzExYWI4MjNlMGI0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmNwcApAQCAtMzMs
OCArMzMsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIHZvaWQgUmVtb3RlUmVzb3Vy
Y2VDYWNoZTo6Y2FjaGVJbWFnZUJ1ZmZlcihSZWY8SW1hZ2VCdWZmZXI+JiYgaW1hZ2VCdWZmZXIp
CiB7Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2ltYWdlQnVmZmVycy5hZGQoaW1hZ2VCdWZmZXIt
PnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBXVEZNb3ZlKGltYWdlQnVmZmVyKSk7Ci0g
ICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBh
dXRvIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciA9IGltYWdlQnVmZmVyLT5yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIoKTsKKyAgICBtX2ltYWdlQnVmZmVycy5hZGQocmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLCBXVEZNb3ZlKGltYWdlQnVmZmVyKSk7CisKKyAgICBpbmNyZW1lbnRP
cGVuQ291bnQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKIH0KIAogSW1hZ2VCdWZmZXIq
IFJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlZEltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCkBAIC00NCwxNCArNDYsMjcg
QEAgSW1hZ2VCdWZmZXIqIFJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlZEltYWdlQnVmZmVyKFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcgogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OmNh
Y2hlTmF0aXZlSW1hZ2UoUmVmPE5hdGl2ZUltYWdlPiYmIGltYWdlKQogewotICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV9uYXRpdmVJbWFnZXMuYWRkKGltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIoKSwgV1RGTW92ZShpbWFnZSkpOwotICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBh
ZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgPSBpbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAgbV9uYXRpdmVJ
bWFnZXMuYWRkKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV1RGTW92ZShpbWFnZSkpOwor
CisgICAgaW5jcmVtZW50T3BlbkNvdW50KHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiB9
CiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2FjaGVGb250KFJlZjxGb250PiYmIGZvbnQp
CiB7Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2ZvbnRzLmFkZChmb250LT5yZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIoKSwgV1RGTW92ZShmb250KSk7Ci0gICAgQVNTRVJUX1VOVVNFRChhZGRS
ZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBhdXRvIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciA9IGZvbnQtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOworICAgIG1f
Zm9udHMuYWRkKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV1RGTW92ZShmb250KSk7CisK
KyAgICBpbmNyZW1lbnRPcGVuQ291bnQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKK30K
Kwordm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlOjppbmNyZW1lbnRPcGVuQ291bnQoV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikK
K3sKKyAgICBhdXRvIHJlc3VsdCA9IG1fcmVzb3VyY2VVc2VDb3VudGVycy5lbnN1cmUocmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBbJl0geworICAgICAgICByZXR1cm4gUmVzb3VyY2VVc2VD
b3VudGVyIHsgfTsKKyAgICB9KTsKKyAgICArK3Jlc3VsdC5pdGVyYXRvci0+dmFsdWUub3BlbkNv
dW50OworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUub3BlbkNvdW50
KTsKIH0KIAogdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpkZWxldGVBbGxGb250cygpCkBAIC01
OSwxNiArNzQsNzIgQEAgdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpkZWxldGVBbGxGb250cygp
CiAgICAgbV9mb250cy5jbGVhcigpOwogfQogCi12b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OnJl
bGVhc2VSZW1vdGVSZXNvdXJjZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKQorYm9vbCBSZW1vdGVSZXNvdXJjZUNhY2hlOjptYXliZVJlbW92
ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIsIFJlc291cmNlVXNlQ291bnRlcnNNYXA6Oml0ZXJhdG9yIGl0ZXJh
dG9yKQogeworICAgIC8vIEl0J3MgYWN0dWFsbHkgb2theSBpZiB1c2VDb3VudCA+IHRvdGFsVXNl
Q291bnQuCisgICAgLy8gSXQganVzdCBtZWFucyB0aGF0IHRoZXJlJ3MgYSBjYWNoZSBtZXNzYWdl
IHBlbmRpbmcsIGFuZCB3ZSd2ZSBlYWdlcmx5IHVzZWQgYSBwcmV2aW91c2x5LWNhY2hlZCByZXNv
dXJjZS4KKyAgICAvLyBXaGljaCBpcyBmaW5lLgorICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91
bGRuJ3QgYWN0dWFsbHkgcmVtb3ZlIHRoZSByZXNvdXJjZSBpbiB0aGlzIHNpdHVhdGlvbj8KKyAg
ICAvLyBXZSBtYXkgYWN0dWFsbHkgYmUgYWJsZSB0byBnZXQgYSBoZWFkIHN0YXJ0IG9uIHNvbWUg
ZGlzcGxheSBsaXN0IGl0ZW1zIGlmIHRoZXkncmUgcmVhZHkgZm9yIHVzIGFuZCB3ZSBoYXZlIHRo
ZSByZXNvdXJjZXMgdGhleSBkZXBlbmQgb24uCisKKyAgICBpZiAoaXRlcmF0b3ItPnZhbHVlLm9w
ZW5Db3VudCB8fCBpdGVyYXRvci0+dmFsdWUudXNlQ291bnQgPCBpdGVyYXRvci0+dmFsdWUudG90
YWxVc2VDb3VudCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaXRlcmF0b3ItPnZhbHVlLnVz
ZUNvdW50IC09IGl0ZXJhdG9yLT52YWx1ZS50b3RhbFVzZUNvdW50OworICAgIGl0ZXJhdG9yLT52
YWx1ZS50b3RhbFVzZUNvdW50ID0gMDsKKyAgICBpZiAoIWl0ZXJhdG9yLT52YWx1ZS51c2VDb3Vu
dCkKKyAgICAgICAgbV9yZXNvdXJjZVVzZUNvdW50ZXJzLnJlbW92ZShpdGVyYXRvcik7CisKICAg
ICBpZiAobV9pbWFnZUJ1ZmZlcnMucmVtb3ZlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKG1fbmF0aXZl
SW1hZ2VzLnJlbW92ZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChtX2ZvbnRzLnJlbW92ZShyZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0
cnVlOworCiAgICAgLy8gQ2FjaGluZyB0aGUgcmVtb3RlIHJlc291cmNlIHNob3VsZCBoYXZlIGhh
cHBlbmVkIGJlZm9yZSByZWxlYXNpbmcgaXQuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OnJlY29yZFJl
c291cmNlVXNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcmVzb3VyY2VVc2VD
b3VudGVycy5maW5kKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisKKyAgICBpZiAoaXRl
cmF0b3IgPT0gbV9yZXNvdXJjZVVzZUNvdW50ZXJzLmVuZCgpKSB7CisgICAgICAgIC8vIFRoZSBk
aXNwbGF5IGxpc3QgaXRlbXMgd29uIHRoZSByYWNlIGFnYWluc3QgdGhlIGNhY2hlRm9udCBtZXNz
YWdlLgorICAgICAgICAvLyBXaGVuIHdlIHJlY2VpdmUgdGhlIGNhY2hlRm9udCBtZXNzYWdlLCB3
ZSB3aWxsIHJldHJ5IHRoZSBkaXNwbGF5IGxpc3QgaXRlbS4KKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFJlc291cmNlVXNlQ291bnRlciYgdXNlQ291bnRlciA9IGl0ZXJhdG9yLT52YWx1
ZTsKKyAgICArK3VzZUNvdW50ZXIudXNlQ291bnQ7CisKKyAgICBtX3Jlc291cmNlc0Zvck1heWJl
UmVtb3ZpbmcuYWRkKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Cit9CisKK2Jvb2wgUmVt
b3RlUmVzb3VyY2VDYWNoZTo6cHJ1bmUoKQoreworICAgIGZvciAoYXV0byByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgOiBtX3Jlc291cmNlc0Zvck1heWJlUmVtb3ZpbmcpIHsKKyAgICAgICAg
YXV0byBpdGVyYXRvciA9IG1fcmVzb3VyY2VVc2VDb3VudGVycy5maW5kKHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7CisgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3Jlc291cmNlVXNl
Q291bnRlcnMuZW5kKCkpOworICAgICAgICBhdXRvIG1lc3NhZ2VzQXJlSW5PcmRlciA9IG1heWJl
UmVtb3ZlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBpdGVyYXRvcik7Cisg
ICAgICAgIGlmICghbWVzc2FnZXNBcmVJbk9yZGVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBtX3Jlc291cmNlc0Zvck1heWJlUmVtb3ZpbmcuY2xlYXIoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpyZWxlYXNlUmVtb3Rl
UmVzb3VyY2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcmVz
b3VyY2VVc2VDb3VudGVycy5maW5kKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAg
aWYgKGl0ZXJhdG9yID09IG1fcmVzb3VyY2VVc2VDb3VudGVycy5lbmQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIFJlc291cmNlVXNlQ291bnRlciYgdXNlQ291bnRlciA9IGl0ZXJhdG9y
LT52YWx1ZTsKKyAgICBpZiAoIWl0ZXJhdG9yLT52YWx1ZS5vcGVuQ291bnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAtLXVzZUNvdW50ZXIub3BlbkNvdW50OworICAgIHVzZUNvdW50ZXIu
dG90YWxVc2VDb3VudCArPSB1c2VDb3VudDsKKyAgICByZXR1cm4gbWF5YmVSZW1vdmVSZXNvdXJj
ZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGl0ZXJhdG9yKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuaAppbmRleCAyY2VkOTA5ZjQ4MTEwYzY2NjU2ZGUxYmZl
MzgxMWRiYWJhYWE5ZjRmLi5hZDI3NGQ3M2QxNjEyMWRhY2RlYzA5NDVlYWI2ODZhN2IzMjM0YTZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVz
b3VyY2VDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZXNvdXJjZUNhY2hlLmgKQEAgLTQ2LDE2ICs0Niw0NSBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
YWNoZU5hdGl2ZUltYWdlKFJlZjxXZWJDb3JlOjpOYXRpdmVJbWFnZT4mJik7CiAgICAgdm9pZCBj
YWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMo
KTsKLSAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpOworICAgIGJvb2wgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpOworICAgIHZv
aWQgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KTsKKyAgICBib29sIHBydW5lKCk7CiAKICAgICBjb25zdCBXZWJDb3JlOjpJbWFnZUJ1ZmZlckhh
c2hNYXAmIGltYWdlQnVmZmVycygpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VCdWZmZXJzOyB9CiAg
ICAgY29uc3QgV2ViQ29yZTo6TmF0aXZlSW1hZ2VIYXNoTWFwJiBuYXRpdmVJbWFnZXMoKSBjb25z
dCB7IHJldHVybiBtX25hdGl2ZUltYWdlczsgfQogICAgIGNvbnN0IFdlYkNvcmU6OkZvbnRSZW5k
ZXJpbmdSZXNvdXJjZU1hcCYgZm9udHMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRzOyB9CiAKIHBy
aXZhdGU6CisgICAgLy8gQmVjYXVzZSB0aGUgY2FjaGUvcmVsZWFzZSBtZXNzYWdlcyBhcmUgc2Vu
dCBhc3luY2hyb25vdXNseSBmcm9tIHRoZSBkaXNwbGF5IGxpc3QgaXRlbXMgd2hpY2gKKyAgICAv
LyByZWZlcmVuY2UgdGhlIHJlc291cmNlcywgaXQncyB0b3RhbGx5IHBvc3NpYmxlIHRoYXQgd2Ug
c2VlIGEgcmVsZWFzZSBtZXNzYWdlIGJlZm9yZSB3ZSd2ZQorICAgIC8vIGV4ZWN1dGVkIGFsbCB0
aGUgZGlzcGxheSBsaXN0IGl0ZW1zIHdoaWNoIHJlZmVyZW5jZSB0aGUgcmVzb3VyY2UuIFRoZSB3
ZWIgcHJvY2VzcyB0ZWxscyB1cworICAgIC8vIGhvdyBtYW55IGRpc3BsYXkgbGlzdCBpdGVtcyB3
aWxsIHJlZmVyZW5jZSB0aGlzIHJlc291cmNlLCBhbmQgd2UgZGVmZXIgZGVsZXRpb24gb2YgdGhl
IHJlc291cmNlCisgICAgLy8gdW50aWwgd2UgZXhlY3V0ZSB0aGF0IG1hbnkgZGlzcGxheSBsaXN0
IGl0ZW1zLgorICAgIC8vCisgICAgLy8gSXQncyBhY3R1YWxseSBhIGJpdCB3b3JzZSB0aGFuIHRo
aXMsIHRob3VnaCwgYmVjYXVzZSB3ZSBtYXkgYWN0dWFsbHkgc2VlIGEgKm5ldyogY2FjaGUgbWVz
c2FnZQorICAgIC8vIGR1cmluZyB0aGUgdGltZSB3aGVuIGRlbGV0aW9uIGlzIGRlZmVycmVkLCBz
byB3ZSBuZWVkIGEgc2Vjb25kIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgY2FjaGUKKyAgICAvLyBt
ZXNzYWdlcyB3aGljaCBkb24ndCBoYXZlIGFuIGFjY29tcGFueWluZyByZWxlYXNlIG1lc3NhZ2Vz
LgorICAgIC8vCisgICAgLy8gV2UgY2FuIG9ubHkgc2FmZWx5IGRlbGV0ZSBhIHJlc291cmNlIHdo
ZW46CisgICAgLy8gMS4gQWxsIHRoZSBjYWNoZSBtZXNzYWdlcyBoYXZlIGFuIGFjY29tcGFueWlu
ZyByZWxlYXNlIG1lc3NhZ2UsIGFuZAorICAgIC8vIDIuIFdlJ3ZlIHByb2Nlc3NlZCBhcyBtYW55
IGRpc3BsYXkgbGlzdCBpdGVtcyB0aGF0IHJlZmVyZW5jZSBhIHBhcnRpY3VsYXIgcmVzb3VyY2Ug
YXMgdGhlIHdlYgorICAgIC8vIHByb2Nlc3MgaGFzIGVuY29kZWQuCisgICAgc3RydWN0IFJlc291
cmNlVXNlQ291bnRlciB7CisgICAgICAgIHVpbnQ2NF90IG9wZW5Db3VudCB7IDAgfTsgLy8gVGhl
IG51bWJlciBvZiBjYWNoZUZvbyBtZXNzYWdlcyB3ZSd2ZSByZWNlaXZlZCB3aXRob3V0IGEgY29y
cmVzcG9uZGluZyByZWxlYXNlIG1lc3NhZ2UKKyAgICAgICAgdWludDY0X3QgdXNlQ291bnQgeyAw
IH07IC8vIFRoZSBudW1iZXIgb2YgcmVuZGVyaW5nIGNvbW1hbmRzIHdlJ3ZlIGV4ZWN1dGVkIHdo
aWNoIHJlZmVyZW5jZSB0aGlzIHJlc291cmNlCisgICAgICAgIHVpbnQ2NF90IHRvdGFsVXNlQ291
bnQgeyAwIH07IC8vIE9uY2UgdXNlQ291bnQgaGl0cyB0aGlzIGxpbWl0LCB3ZSBjYW4gZnJlZSB0
aGUgcmVzb3VyY2UKKyAgICB9OworICAgIHVzaW5nIFJlc291cmNlVXNlQ291bnRlcnNNYXAgPSBI
YXNoTWFwPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgUmVzb3VyY2VVc2VD
b3VudGVyPjsKKworICAgIGJvb2wgbWF5YmVSZW1vdmVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIFJlc291cmNlVXNlQ291bnRlcnNNYXA6Oml0ZXJhdG9yKTsK
KyAgICB2b2lkIGluY3JlbWVudE9wZW5Db3VudChXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpOworCiAgICAgV2ViQ29yZTo6SW1hZ2VCdWZmZXJIYXNoTWFwIG1faW1hZ2VCdWZm
ZXJzOwogICAgIFdlYkNvcmU6Ok5hdGl2ZUltYWdlSGFzaE1hcCBtX25hdGl2ZUltYWdlczsKICAg
ICBXZWJDb3JlOjpGb250UmVuZGVyaW5nUmVzb3VyY2VNYXAgbV9mb250czsKKworICAgIFJlc291
cmNlVXNlQ291bnRlcnNNYXAgbV9yZXNvdXJjZVVzZUNvdW50ZXJzOworICAgIEhhc2hTZXQ8V2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBtX3Jlc291cmNlc0Zvck1heWJlUmVt
b3Zpbmc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmgKaW5kZXggYjQ0OGIzN2Y5N2ZlN2FlNjVkYmViYjJhODVhYjBjOTk0ZTFmMjZiZC4uZDRj
YmMyYzBjOTAzNDMwNTk2OGYyNzdiNTUzNjFiYjI3NDgyZmVhOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5LmgKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogCiAgICAgICAgIGZsdXNoRHJh
d2luZ0NvbnRleHQoKTsKICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJl
bW90ZVJlc291cmNlQ2FjaGVQcm94eSgpLnJlbGVhc2VJbWFnZUJ1ZmZlcihtX3JlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcik7Ci0gICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LT5yZWxlYXNlUmVtb3RlUmVzb3VyY2UobV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwor
ICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVsZWFzZVJlbW90ZVJlc291
cmNlKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCAwKTsgLy8gRklYTUU6IFBhc3MgdGhl
IHJlYWwgdXNlIGNvdW50IGhlcmUuCiAgICAgfQogCiAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kSGFu
ZGxlIGNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5jcHAKaW5kZXggMDljZTRjNmVmNmQ2YWJlNzFlMDNlYWI3ZmE4Y2Qy
MTRmZjY4YjBmZS4uZTk1ZjFhZDM5MzRmMjU0YmQ1Zjk5ZDIzYTViNDY1NTUzNWNlMDkzMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAtMjQ5LDEyICsyNDks
MTIgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRlbGV0ZUFsbEZvbnRzKCkK
ICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpEZWxldGVBbGxGb250
cygpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3Bh
dGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CiB9CiAKLXZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlUmVtb3RlUmVzb3VyY2UoUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKK3ZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlUmVtb3RlUmVzb3VyY2UoUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNl
Q291bnQpCiB7CiAgICAgaWYgKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciA9PSBtX2N1cnJl
bnREZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllcikKICAgICAgICAgbV9jdXJyZW50RGVz
dGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIgPSBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZWxlYXNlUmVtb3RlUmVzb3VyY2Uo
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIo
KSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5j
UmVwbHkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbGVh
c2VSZW1vdGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVzZUNvdW50KSwg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1l
c3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwogfQogCiB2b2lkIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6ZGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKEltYWdlQnVmZmVy
QmFja2VuZEhhbmRsZSBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
aAppbmRleCA2MzE0OTY3MGEzNTk0ZTI1YTJkYTVjZDE5NzYxMTQ2MWM2MTc5NzQwLi5iMmNlM2Q4
YzI4YWIxOTEyNTM1MTkwMjdmYzkwNzRkMjBlZDE3MjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmgKQEAgLTEwNCw3ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
YWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGNhY2hlRm9udChSZWY8V2Vi
Q29yZTo6Rm9udD4mJik7CiAgICAgdm9pZCBkZWxldGVBbGxGb250cygpOwotICAgIHZvaWQgcmVs
ZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7
CisgICAgdm9pZCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCk7CiAKICAgICBlbnVtIGNsYXNzIERpZFJl
Y2VpdmVCYWNrZW5kQ3JlYXRpb25SZXN1bHQgOiBib29sIHsKICAgICAgICAgUmVjZWl2ZWRBbnlS
ZXNwb25zZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcAppbmRleCAwM2YzNGIz
M2EyMmRkNDkyOGQ0MjYwZTQ3ODYyZDM5MTM3MTEwMWFmLi40MTRlMTk5NmU4YmMyOTk1YjdmNzA3
NmFlNmE1MjE0ZDYzNjc2NjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3Bw
CkBAIC0xMjEsOCArMTIxLDcgQEAgdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OnJlbGVh
c2VOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmUKICAgICBpZiAoIW1f
bmF0aXZlSW1hZ2VzLnJlbW92ZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICAvLyBUZWxsIHRoZSBHUFUgcHJvY2VzcyB0byByZW1vdmUgdGhpcyBy
ZXNvdXJjZS4KLSAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3Rl
UmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICBtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLCAwKTsgLy8gRklYTUU6IFBhc3MgdGhlIHJlYWwgdXNlIGNvdW50IGhlcmUuCiB9
CiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpwcmVwYXJlRm9yTmV4dFJlbmRlcmlu
Z1VwZGF0ZSgpCkBAIC0xMzQsNyArMTMzLDcgQEAgdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJv
eHk6OnByZXBhcmVGb3JOZXh0UmVuZGVyaW5nVXBkYXRlKCkKIHZvaWQgUmVtb3RlUmVzb3VyY2VD
YWNoZVByb3h5OjpjbGVhckZvbnRNYXAoKQogewogICAgIGZvciAoYXV0byYgaXRlbSA6IG1fZm9u
dElkZW50aWZpZXJUb0xhc3RSZW5kZXJpbmdVcGRhdGVWZXJzaW9uTWFwKQotICAgICAgICBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UoaXRlbS5rZXkp
OworICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3RlUmVz
b3VyY2UoaXRlbS5rZXksIDApOyAvLyBGSVhNRTogUGFzcyB0aGUgcmVhbCB1c2UgY291bnQgaGVy
ZS4KICAgICBtX2ZvbnRJZGVudGlmaWVyVG9MYXN0UmVuZGVyaW5nVXBkYXRlVmVyc2lvbk1hcC5j
bGVhcigpOwogICAgIG1fbnVtYmVyT2ZGb250c1VzZWRJbkN1cnJlbnRSZW5kZXJpbmdVcGRhdGUg
PSAwOwogfQpAQCAtMTUyLDcgKzE1MSw3IEBAIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5
OjpmaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZUZvckZvbnRzKCkKICAgICBmb3IgKGF1dG8mIGl0ZW0g
OiBtX2ZvbnRJZGVudGlmaWVyVG9MYXN0UmVuZGVyaW5nVXBkYXRlVmVyc2lvbk1hcCkgewogICAg
ICAgICBpZiAobV9jdXJyZW50UmVuZGVyaW5nVXBkYXRlVmVyc2lvbiAtIGl0ZW0udmFsdWUgPj0g
bWluaW11bVJlbmRlcmluZ1VwZGF0ZUNvdW50VG9LZWVwRm9udEFsaXZlKSB7CiAgICAgICAgICAg
ICB0b1JlbW92ZS5hZGQoaXRlbS5rZXkpOwotICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJlc291cmNlKGl0ZW0ua2V5KTsKKyAgICAgICAgICAg
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShpdGVt
LmtleSwgMCk7IC8vIEZJWE1FOiBQYXNzIHRoZSByZWFsIHVzZSBjb3VudCBoZXJlLgogICAgICAg
ICB9CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434094</attachid>
            <date>2021-07-23 09:56:18 -0700</date>
            <delta_ts>2021-07-23 16:11:02 -0700</delta_ts>
            <desc>Patch for reviewing</desc>
            <filename>bug-228222-20210723095618.patch</filename>
            <type>text/plain</type>
            <size>25690</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmY2MWFlMzlhNzRlMDYy
NzVlZmRjYWZmMzM4ZDhjNzUwYjYxNzczYy4uYmJiZGM5ZWI0MjZhNzU5ZGJiYmNmN2U0N2EyYjIy
MTg2Y2Y1ZWMwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIxLTA3LTIzICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9j
ZXNzXSBBZGQgcmVzb3VyY2UgdXNlIGNvdW50ZXIgaW5mcmFzdHJ1Y3R1cmUgdG8gUmVtb3RlUmVz
b3VyY2VDYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI4MjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBpcyBwYXJ0IDIgb2YgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyODIxNi4KKworICAgICAgICBVc2luZyBEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6OkRlbGVn
YXRlIHRvIHRyYWNrIGhvdyBtYW55IHRpbWVzIGEgcmVzb3VyY2UgaXMgdXNlZCBpbiBhIGRpc3Bs
YXkgbGlzdCBpcyBhIG5hdHVyYWwgZml0LgorICAgICAgICBIb3dldmVyLCBpZiB0aGUgR1BVIHBy
b2Nlc3MgZGV0ZXJtaW5lcyB0aGF0IGEgcmVzb3VyY2UgaGFzIGhpdCBpdHMgdXNlIGxpbWl0IGFu
ZCBpcyByZWFkeSB0byBiZSBkZXN0cm95ZWQsIGl0IGNhbid0CisgICAgICAgIGFjdHVhbGx5IGRl
c3Ryb3kgaXQgaW1tZWRpYXRlbHksIGJlY2F1c2UgdGhlIGRlbGVnYXRlJ3MgY2FsbGJhY2sgaXMg
Y2FsbGVkIGJlZm9yZSBhY3R1YWxseSBleGVjdXRpbmcgdGhlIGRpc3BsYXkKKyAgICAgICAgbGlz
dCBpdGVtICh3aGljaCBuZWVkcyB0byBzZWUgdGhlIHJlc291cmNlKS4gQW5kIGl0IGhhcyB0byBl
eGVjdXRlIGJlZm9yZSBleGVjdXRpbmcgdGhlIGRpc3BsYXkgbGlzdCBpdGVtIGJlY2F1c2UKKyAg
ICAgICAgdGhlIGRlbGVnYXRlIGFjdHVhbGx5IGltcGxlbWVudHMgdGhlIGRpc3BsYXkgbGlzdCBp
dGVtIGZvciB0aGluZ3MgbGlrZSBnZXRJbWFnZURhdGEuIFNvLCB0aGlzIHBhdGNoIGFkZHMgYW5v
dGhlcgorICAgICAgICBtZXRob2QgdG8gdGhlIGRlbGVnYXRlOiBkaWRDb21wbGV0ZVJlcGxheWlu
ZygpLCB3aGljaCBpcyBjYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgcmVwbGF5LiBUaGUgR1BVIHBy
b2Nlc3Mgd2lsbAorICAgICAgICByZW1lbWJlciB3aGljaCByZXNvdXJjZXMgd2VyZSB1c2VkIGR1
cmluZyB0aGUgcmVwbGF5LCBhbmQgaW5jcmVtZW50IHRoZSByZWxldmFudCBjb3VudGVycywgYnV0
IG9ubHkgb25jZSB0aGUgcmVwbGF5CisgICAgICAgIGhhcyBmaW5pc2hlZCBjYW4gdGhlIEdQVSBw
cm9jZXNzIGFjdHVhbGx5IGRlbGV0ZSB0aGVzZSByZXNvdXJjZXMuIFRoYXQgb2NjdXJzIGluIHRo
aXMgbmV3IGRlbGVnYXRlIG1ldGhvZC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0
aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UgeWV0LiBUaGlzIHBhdGNoIGlzIGp1c3QgYWRkaW5n
IGluZnJhc3RydWN0dXJlLiBGb3Igbm93LCBhbGwgdGhlc2UKKyAgICAgICAgdXNlIGNvdW50cyBz
ZW50IGJ5IHRoZSB3ZWIgcHJvY2VzcyBhcmUgMCAtIEknbGwgaW1wbGVtZW50IHRoYXQgcGFydCBp
biAzIGZvbGxvdy11cCBwYXRjaGVzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlcGxheWVyOjpyZXBsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVwbGF5ZXI6OkRlbGVnYXRlOjpkaWRDb21wbGV0ZVJlcGxheWluZyk6CisK
IDIwMjEtMDctMjMgIEFkaXR5YSBLZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUuY29tPgogCiAgICAg
ICAgIFttYWNPU10gUmVwYWludGluZyBhcnRpZmFjdHMgd2hlbiBtb3ZpbmcgaW5wdXQgdHlwZT1y
YW5nZSBzbGlkZXIgdGh1bWIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZjIzNDE0ZWIxYjkzYjg1ZDE0OWVlMTM2NDJh
MTRiZmRjOWY2MjU0My4uNWQwYjg2ZjhmYjI3YjQ1NjA5NWFmMDg4ZWZjODRiN2JiYWI5ZWE3YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAyMS0wNy0yMiAgTXlsZXMgQy4gTWF4ZmllbGQg
IDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gQWRkIHJlc291
cmNlIHVzZSBjb3VudGVyIGluZnJhc3RydWN0dXJlIHRvIFJlbW90ZVJlc291cmNlQ2FjaGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODIyMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
YWRkcyB0aGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGFzc29jaWF0aW5nIGEgY291bnRlciB3aXRoIGVh
Y2ggcmVzb3VyY2UgaW4gdGhlIFJlbW90ZVJlc291cmNlQ2FjaGUuCisgICAgICAgIEFzIHRoZSB3
ZWIgcHJvY2VzcyB1c2VzIGEgcmVzb3VyY2UgZHVyaW5nIGRpc3BsYXkgbGlzdCByZWNvcmRpbmcs
IGl0IGluY3JlbWVudHMgYSBjb3VudGVyLCBhbmQgYXMgdGhlIEdQVQorICAgICAgICBwcm9jZXNz
IHVzZXMgYSByZXNvdXJjZSwgaXQgaW5jcmVtZW50cyBhIGNvdW50ZXIgaW4gdGhlIFJlbW90ZVJl
c291cmNlQ2FjaGUuIFdoZW4gdGhlIHdlYiBwcm9jZXNzIGlzIGRvbmUKKyAgICAgICAgd2l0aCBh
IHJlc291cmNlLCBpdCBzZW5kcyBhIHJlbGVhc2UgbWVzc2FnZSB0byB0aGUgR1BVIHByb2Nlc3Mg
d2hpY2ggY3J1Y2lhbGx5IGluY2x1ZGVzIHRoZSB3ZWIgcHJvY2VzcydzCisgICAgICAgIGNvdW50
ZXIuIFRoZSBHUFUgcHJvY2VzcyBoYXMgdG8gdGhlbiB3YWl0IHRvIGFjdHVhbGx5IGRlbGV0ZSB0
aGUgcmVzb3VyY2UgdW50aWwgaXRzIG93biB1c2UgY291bnRlciBtYXRjaGVzCisgICAgICAgIHRo
ZSBvbmUgaXQgcmVjZWl2ZWQgZnJvbSB0aGUgd2ViIHByb2Nlc3MuIFRoaXMgcGF0Y2ggaW1wbGVt
ZW50cyB0aGlzIGRlZmVycmVkIGRlbGV0aW9uIGluZnJhc3RydWN0dXJlCisgICAgICAgIGluIHRo
ZSBHUFUgcHJvY2Vzcy4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OlJlcGxheWVyRGVsZWdhdGU6OmRpZENvbXBsZXRlUmVwbGF5aW5nKTogU2VlIHRoZSBXZWJD
b3JlIENoYW5nZUxvZyBmb3IgYW4KKyAgICAgICAgZXhwbGFuYXRpb24gb2YgdGhpcy4KKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZVJlbW90ZVJlc291cmNl
KTogUGFzcyB0aGUgdXNlIGNvdW50IHRvIHRoZSBSZW1vdGVSZXNvdXJjZUNhY2hlLgorICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOiBBZGQgdGhl
IHVzZSBjb3VudCBmaWVsZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46IERpdHRvLgorICAgICAgICAqIEdQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlc291cmNlQ2FjaGU6OmNhY2hlSW1hZ2VCdWZmZXIpOiBJdCdzIGFjdHVhbGx5IG9rYXkgaWYg
dGhlcmUncyBhbHJlYWR5IGFuIHJlc291cmNlIGNhY2hlZC4KKyAgICAgICAgVGhhdCBqdXN0IG1l
YW5zIHRoYXQgdGhlIHdlYiBwcm9jZXNzIHN0YXJ0ZWQgdXNpbmcgYSByZXNvdXJjZSBhZ2FpbiBi
ZWZvcmUgdGhlIEdQVSBwcm9jZXNzIGNvbnN1bWVkIGFsbAorICAgICAgICBjb21tYW5kcyB0aGF0
IHVzZWQgaXQgdGhlIGZpcnN0IHRpbWUuIEFsbCB3ZSBuZWVkIHRvIGRvIGlzIGluY3JlbWVudCB0
aGUgb3BlbiBjb3VudC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2Fj
aGVOYXRpdmVJbWFnZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNh
Y2hlOjpjYWNoZUZvbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VD
YWNoZTo6aW5jcmVtZW50T3BlbkNvdW50KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3Vy
Y2VDYWNoZTo6bWF5YmVSZW1vdmVSZXNvdXJjZSk6IFRoaXMgaXMgY2FsbGVkIHdoZW5ldmVyIGl0
J3MgcG9zc2libGUgZm9yIHVzIHRvIGJlIGluCisgICAgICAgIHNpdHVhdGlvbiB3aGVyZSB3ZSBz
aG91bGQgYmUgcmVtb3ZpbmcgYSByZXNvdXJjZSAoYWthIHdoZW5ldmVyIHRoZSB1c2UgY291bnQg
aW5jcmVtZW50cykuIEl0IGNoZWNrcyB0byBzZWUKKyAgICAgICAgaWYgd2UgY2FuIHJlbW92ZSB0
aGUgcmVzb3VyY2UsIGFuZCBpZiBpdCBjYW4sIGRvZXMgc28uCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlc291cmNlQ2FjaGU6OnJlY29yZFJlc291cmNlVXNlKTogVGhlIGNhbGxiYWNrIHRoYXQg
cnVucyBmb3IgZWFjaCByZXNvdXJjZSB1c2UgZHVyaW5nCisgICAgICAgIHJlcGxheWluZy4gSXQg
Y2FuJ3QgYWN0dWFsbHkgZGVsZXRlIGFueSByZXNvdXJjZXMsIHNvIGluc3RlYWQgaXQganVzdCBy
ZWNvcmRzIHdoaWNoIHJlc291cmNlcyBoYWQgdGhlaXIKKyAgICAgICAgdXNlIGNvdW50cyBpbmNy
ZW1lbnRlZCwgYW5kIHdhaXRzIGZvciBwcnVuZSgpIHRvIGFjdHVhbGx5IGNhbGwgbWF5YmVSZW1v
dmVSZXNvdXJjZSgpLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlOjpwcnVu
ZSk6IEFmdGVyIHRoZSByZXBsYXkgaXMgY29tcGxldGUsIGNhbGwgbWF5YmVSZW1vdmVSZXNvdXJj
ZSgpIG9uIGFsbCB0aGUKKyAgICAgICAgcmVzb3VyY2VzIHdoaWNoIGhhZCB0aGVpciB1c2UgY291
bnRlcnMgdG91Y2hlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZTo6cmVs
ZWFzZVJlbW90ZVJlc291cmNlKTogUHV0IHRoZSByZWxldmFudCByZXNvdXJjZSBpbnRvIHRoZSBz
dGF0ZSB3aGVyZSB3ZQorICAgICAgICBhcmUgd2FpdGluZyBmb3IgdGhlIHVzZSBjb3VudGVycyB0
byBtYXRjaCBiZWZvcmUgd2UgY2FuIGRlbGV0ZSB0aGUgcmVzb3VyY2UuIEFsc28sIGNhbGwgbWF5
YmVSZW1vdmVSZXNvdXJjZSgpCisgICAgICAgIHNvIGl0IGNhbiBiZSBkZWxldGVkIGltbWVkaWF0
ZWx5IGlmIHRoZSBjb3VudGVycyBhbHJlYWR5IG1hdGNoLgorICAgICAgICAqIEdQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oOiBBZGQgYSBuZXcgZGF0YSBzdHJ1Y3R1cmUg
dG8gaG9sZCB0aGUgdXNlIGNvdW50ZXJzLiBUaGVyZSdzCisgICAgICAgIGEgYmlnIGNvbW1lbnQg
aW4gaGVyZSB0aGF0IGRlc2NyaWJlcyB3aGF0IHRoZXNlIGZpZWxkcyBtZWFuLgorICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDoKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJv
eHkpOiBTZW5kIGEgZHVtbXkgdXNlIGNvdW50IGZvciBub3cuIFRoaXMgd2lsbCBiZQorICAgICAg
ICBpbXBsZW1lbnRlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VSZW1vdGVSZXNvdXJj
ZSk6IEFkZCB0aGUgdXNlQ291bnQgcGFyYW1ldGVyLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBEaXR0by4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OnJlbGVhc2VOYXRpdmVJ
bWFnZSk6IFNlbmQgYSBkdW1teSB1c2UgY291bnQgZm9yIG5vdy4gVGhpcyB3aWxsIGJlCisgICAg
ICAgIGltcGxlbWVudGVkIGluIGEgZm9sbG93LXVwIHBhdGNoLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmNsZWFyRm9udE1hcCk6IERpdHRvLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmZpbmFsaXplUmVuZGVyaW5nVXBkYXRl
Rm9yRm9udHMpOiBEaXR0by4KKwogMjAyMS0wNy0yMyAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4
ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gTWlncmF0ZSB0aGUgRGlz
cGxheUxpc3Q6OlJlcGxheWVyOjpEZWxlZ2F0ZSBmcm9tIFJlbW90ZUltYWdlQnVmZmVyIHRvIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVy
LmNwcAppbmRleCBmMzcwYjQxMThkMDI0M2ExYjI5YmJhMDIxMGY4OTc0NzI5MzdhODUzLi4zNTYx
ZGEwYmQxMjI2Y2JjOTUyN2VhZmVkMTM0NTc3ZGRmOGQzZTM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXll
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCkBAIC0yMzIsNiArMjMyLDkgQEAgUmVwbGF5UmVzdWx0
IFJlcGxheWVyOjpyZXBsYXkoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgYm9vbCB0cmFj
a1JlcGxheUxpc3QKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmIChtX2RlbGVnYXRlKQorICAg
ICAgICBtX2RlbGVnYXRlLT5kaWRDb21wbGV0ZVJlcGxheWluZygpOworCiAgICAgcmVzdWx0LnRy
YWNrZWREaXNwbGF5TGlzdCA9IFdURk1vdmUocmVwbGF5TGlzdCk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCmluZGV4IDE2NjI3YTAy
MDZlMzA5MjQzZjhiN2JkMThjZGIzZGE1ODYwNzhhOGYuLjU3OTM5ZWU5NzdlZDRlYzQ1OGEwZDQ1
OTJkOWRjZGI3MmFmY2YwMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIu
aApAQCAtNjgsNiArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseShJ
dGVtSGFuZGxlLCBHcmFwaGljc0NvbnRleHQmKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlTWFza0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVy
JikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZXNldE1hc2tJbWFnZUJ1ZmZlcigpIHsg
fQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVSZXBsYXlpbmcoKSB7IH0KICAgICB9
OwogICAgIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAppbmRleCBlYTgyODZkYTBj
OWRlNGRmY2E3ZGUzNWJlMzM3ZGYwMzJjMDM3ZTdlLi5jMTA2ZjQyY2M0ZjM1NTU0ZWQ5MjMyYjAz
NWUzODM1YWIyMDJjODkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0yMTQsNiArMjE0
LDEyIEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6ZGlk
UmVzZXRNYXNrSW1hZ2VCdWZmZXIoKQogICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5kaWRS
ZXNldE1hc2tJbWFnZUJ1ZmZlcigpOwogfQogCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OlJlcGxheWVyRGVsZWdhdGU6OmRpZENvbXBsZXRlUmVwbGF5aW5nKCkKK3sKKyAgICBhdXRvIG1l
c3NhZ2VzQXJlSW5PcmRlciA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5yZW1vdGVSZXNvdXJj
ZUNhY2hlKCkucHJ1bmUoKTsKKyAgICBNRVNTQUdFX0NIRUNLKG1lc3NhZ2VzQXJlSW5PcmRlciwg
IldlYiBwcm9jZXNzIHRyaWVkIHRvIHJlbGVhc2UgYSByZXNvdXJjZSB0aGF0IHdhc24ndCBjYWNo
ZWQiKTsKK30KKwogRGlzcGxheUxpc3Q6OlJlcGxheVJlc3VsdCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpzdWJtaXQoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwg
SW1hZ2VCdWZmZXImIGRlc3RpbmF0aW9uKQogewogICAgIGlmIChkaXNwbGF5TGlzdC5pc0VtcHR5
KCkpCkBAIC01MDksMTAgKzUxNSwxMSBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRl
bGV0ZUFsbEZvbnRzKCkKICAgICBtX3JlbW90ZVJlc291cmNlQ2FjaGUuZGVsZXRlQWxsRm9udHMo
KTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpyZWxlYXNlUmVtb3RlUmVzb3Vy
Y2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVp
bnQ2NF90IHVzZUNvdW50KQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAg
IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBtX3JlbW90ZVJlc291cmNlQ2Fj
aGUucmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdXNl
Q291bnQpOworICAgIE1FU1NBR0VfQ0hFQ0soc3VjY2VzcywgIlJlc291cmNlIGlzIGJlaW5nIHJl
bGVhc2VkIGJlZm9yZSBiZWluZyBjYWNoZWQuIik7CiAgICAgdXBkYXRlUmVuZGVyaW5nUmVzb3Vy
Y2VSZXF1ZXN0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCmluZGV4IGY3YmY2YmMzYjA3M2Fk
YmVhZTZmNmI4NjJmYTM2N2Y2YWIwMGU1YjAuLjg3MjYyOWYwMjUzYmY0YjY5MzY4MmI3MDIyMzI4
NWZmYjYxMzU2ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMTQ0LDcgKzE0NCw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lk
IGNhY2hlRm9udChSZWY8V2ViQ29yZTo6Rm9udD4mJik7CiAgICAgdm9pZCBkZWxldGVBbGxGb250
cygpOwotICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCk7CiAgICAg
dm9pZCBkaWRDcmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiwg
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGRlc3RpbmF0aW9uQnVmZmVySWRl
bnRpZmllcik7CiAKICAgICBjbGFzcyBSZXBsYXllckRlbGVnYXRlIDogcHVibGljIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6RGVsZWdhdGUgewpAQCAtMTU1LDYgKzE1NSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIGJvb2wgYXBwbHkoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5k
bGUsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpIGZpbmFsOwogICAgICAgICB2b2lkIGRpZENy
ZWF0ZU1hc2tJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIGZpbmFsOwogICAgICAg
ICB2b2lkIGRpZFJlc2V0TWFza0ltYWdlQnVmZmVyKCkgZmluYWw7CisgICAgICAgIHZvaWQgZGlk
Q29tcGxldGVSZXBsYXlpbmcoKSBmaW5hbDsKIAogICAgICAgICBXZWJDb3JlOjpJbWFnZUJ1ZmZl
ciYgbV9kZXN0aW5hdGlvbjsKICAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5p
bgppbmRleCA0YjNmZTlhMDI2MmU4YTU0OTE4NTJjNmQ2YTA0MDQ1ZDZhNjk2Mzk3Li5mZjYyYWY1
MTFmM2UyZTVjZWJmNDc0MWJiMzUwMzM4NDk0ZTM4ZWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5tZXNzYWdlcy5pbgpAQCAtMzYsNyArMzYsNyBAQCBtZXNzYWdlcyAtPiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kIHsKICAgICBDYWNoZUZvbnQoSVBDOjpGb250UmVmZXJlbmNlIGZvbnQp
CiAgICAgRGVsZXRlQWxsRm9udHMoKQogICAgIERpZENyZWF0ZVNoYXJlZERpc3BsYXlMaXN0SGFu
ZGxlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVy
LCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIGRlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcikKLSAgICBS
ZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAgICBSZWxlYXNlUmVtb3RlUmVzb3VyY2Uo
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVzb3VyY2VDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlUmVzb3VyY2VDYWNoZS5jcHAKaW5kZXggODFkZGUwYmZmY2YwYmQ2Y2MxYzI4ZTVkZDI0
NjM3NGIzNDY0NjI3OC4uMzFhMTk0ZjRhMjgxMTM2OTRmZTYxYmFkNGI4YzExYWI4MjNlMGI0OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291
cmNlQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZXNvdXJjZUNhY2hlLmNwcApAQCAtMzMsOCArMzMsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2FjaGVJbWFnZUJ1ZmZlcihSZWY8
SW1hZ2VCdWZmZXI+JiYgaW1hZ2VCdWZmZXIpCiB7Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2lt
YWdlQnVmZmVycy5hZGQoaW1hZ2VCdWZmZXItPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigp
LCBXVEZNb3ZlKGltYWdlQnVmZmVyKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFk
ZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBhdXRvIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciA9IGltYWdlQnVmZmVyLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKKyAgICBtX2lt
YWdlQnVmZmVycy5hZGQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXVEZNb3ZlKGltYWdl
QnVmZmVyKSk7CisKKyAgICBpbmNyZW1lbnRPcGVuQ291bnQocmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKTsKIH0KIAogSW1hZ2VCdWZmZXIqIFJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlZElt
YWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpCkBAIC00NCwxNCArNDYsMjcgQEAgSW1hZ2VCdWZmZXIqIFJlbW90ZVJlc291cmNl
Q2FjaGU6OmNhY2hlZEltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcgogCiB2
b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlTmF0aXZlSW1hZ2UoUmVmPE5hdGl2ZUltYWdl
PiYmIGltYWdlKQogewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uYXRpdmVJbWFnZXMuYWRkKGlt
YWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgV1RGTW92ZShpbWFnZSkpOwotICAg
IEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0
byByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPSBpbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKCk7CisgICAgbV9uYXRpdmVJbWFnZXMuYWRkKHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciwgV1RGTW92ZShpbWFnZSkpOworCisgICAgaW5jcmVtZW50T3BlbkNvdW50KHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZTo6
Y2FjaGVGb250KFJlZjxGb250PiYmIGZvbnQpCiB7Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2Zv
bnRzLmFkZChmb250LT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgV1RGTW92ZShmb250
KSk7Ci0gICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsK
KyAgICBhdXRvIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciA9IGZvbnQtPnJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcigpOworICAgIG1fZm9udHMuYWRkKHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciwgV1RGTW92ZShmb250KSk7CisKKyAgICBpbmNyZW1lbnRPcGVuQ291bnQocmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpp
bmNyZW1lbnRPcGVuQ291bnQoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1fcmVzb3Vy
Y2VVc2VDb3VudGVycy5lbnN1cmUocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBbJl0gewor
ICAgICAgICByZXR1cm4gUmVzb3VyY2VVc2VDb3VudGVyIHsgfTsKKyAgICB9KTsKKyAgICArK3Jl
c3VsdC5pdGVyYXRvci0+dmFsdWUub3BlbkNvdW50OworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUub3BlbkNvdW50KTsKIH0KIAogdm9pZCBSZW1vdGVSZXNvdXJjZUNh
Y2hlOjpkZWxldGVBbGxGb250cygpCkBAIC01OSwxNiArNzQsNzIgQEAgdm9pZCBSZW1vdGVSZXNv
dXJjZUNhY2hlOjpkZWxldGVBbGxGb250cygpCiAgICAgbV9mb250cy5jbGVhcigpOwogfQogCi12
b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZShSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorYm9vbCBSZW1v
dGVSZXNvdXJjZUNhY2hlOjptYXliZVJlbW92ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFJlc291cmNlVXNl
Q291bnRlcnNNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yKQogeworICAgIC8vIEl0J3MgYWN0dWFsbHkg
b2theSBpZiB1c2VDb3VudCA+IHRvdGFsVXNlQ291bnQuCisgICAgLy8gSXQganVzdCBtZWFucyB0
aGF0IHRoZXJlJ3MgYSBjYWNoZSBtZXNzYWdlIHBlbmRpbmcsIGFuZCB3ZSd2ZSBlYWdlcmx5IHVz
ZWQgYSBwcmV2aW91c2x5LWNhY2hlZCByZXNvdXJjZS4KKyAgICAvLyBXaGljaCBpcyBmaW5lLgor
ICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGRuJ3QgYWN0dWFsbHkgcmVtb3ZlIHRoZSByZXNv
dXJjZSBpbiB0aGlzIHNpdHVhdGlvbj8KKyAgICAvLyBXZSBtYXkgYWN0dWFsbHkgYmUgYWJsZSB0
byBnZXQgYSBoZWFkIHN0YXJ0IG9uIHNvbWUgZGlzcGxheSBsaXN0IGl0ZW1zIGlmIHRoZXkncmUg
cmVhZHkgZm9yIHVzIGFuZCB3ZSBoYXZlIHRoZSByZXNvdXJjZXMgdGhleSBkZXBlbmQgb24uCisK
KyAgICBpZiAoaXRlcmF0b3ItPnZhbHVlLm9wZW5Db3VudCB8fCBpdGVyYXRvci0+dmFsdWUudXNl
Q291bnQgPCBpdGVyYXRvci0+dmFsdWUudG90YWxVc2VDb3VudCkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgaXRlcmF0b3ItPnZhbHVlLnVzZUNvdW50IC09IGl0ZXJhdG9yLT52YWx1ZS50b3Rh
bFVzZUNvdW50OworICAgIGl0ZXJhdG9yLT52YWx1ZS50b3RhbFVzZUNvdW50ID0gMDsKKyAgICBp
ZiAoIWl0ZXJhdG9yLT52YWx1ZS51c2VDb3VudCkKKyAgICAgICAgbV9yZXNvdXJjZVVzZUNvdW50
ZXJzLnJlbW92ZShpdGVyYXRvcik7CisKICAgICBpZiAobV9pbWFnZUJ1ZmZlcnMucmVtb3ZlKHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgaWYgKG1fbmF0aXZlSW1hZ2VzLnJlbW92ZShyZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IGlmIChtX2ZvbnRzLnJlbW92ZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgLy8gQ2FjaGluZyB0aGUgcmVt
b3RlIHJlc291cmNlIHNob3VsZCBoYXZlIGhhcHBlbmVkIGJlZm9yZSByZWxlYXNpbmcgaXQuCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJl
bW90ZVJlc291cmNlQ2FjaGU6OnJlY29yZFJlc291cmNlVXNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit7CisgICAgYXV0
byBpdGVyYXRvciA9IG1fcmVzb3VyY2VVc2VDb3VudGVycy5maW5kKHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7CisKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9yZXNvdXJjZVVzZUNvdW50ZXJz
LmVuZCgpKSB7CisgICAgICAgIC8vIFRoZSBkaXNwbGF5IGxpc3QgaXRlbXMgd29uIHRoZSByYWNl
IGFnYWluc3QgdGhlIGNhY2hlRm9udCBtZXNzYWdlLgorICAgICAgICAvLyBXaGVuIHdlIHJlY2Vp
dmUgdGhlIGNhY2hlRm9udCBtZXNzYWdlLCB3ZSB3aWxsIHJldHJ5IHRoZSBkaXNwbGF5IGxpc3Qg
aXRlbS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlc291cmNlVXNlQ291bnRlciYg
dXNlQ291bnRlciA9IGl0ZXJhdG9yLT52YWx1ZTsKKyAgICArK3VzZUNvdW50ZXIudXNlQ291bnQ7
CisKKyAgICBtX3Jlc291cmNlc0Zvck1heWJlUmVtb3ZpbmcuYWRkKHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7Cit9CisKK2Jvb2wgUmVtb3RlUmVzb3VyY2VDYWNoZTo6cHJ1bmUoKQorewor
ICAgIGZvciAoYXV0byByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgOiBtX3Jlc291cmNlc0Zv
ck1heWJlUmVtb3ZpbmcpIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fcmVzb3VyY2VVc2VD
b3VudGVycy5maW5kKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgICAgIEFTU0VS
VChpdGVyYXRvciAhPSBtX3Jlc291cmNlVXNlQ291bnRlcnMuZW5kKCkpOworICAgICAgICBhdXRv
IG1lc3NhZ2VzQXJlSW5PcmRlciA9IG1heWJlUmVtb3ZlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyLCBpdGVyYXRvcik7CisgICAgICAgIGlmICghbWVzc2FnZXNBcmVJbk9yZGVy
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtX3Jlc291cmNlc0Zvck1h
eWJlUmVtb3ZpbmcuY2xlYXIoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW1vdGVS
ZXNvdXJjZUNhY2hlOjpyZWxlYXNlUmVtb3RlUmVzb3VyY2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpCit7
CisgICAgYXV0byBpdGVyYXRvciA9IG1fcmVzb3VyY2VVc2VDb3VudGVycy5maW5kKHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fcmVzb3VyY2VVc2VD
b3VudGVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJlc291cmNlVXNlQ291
bnRlciYgdXNlQ291bnRlciA9IGl0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoIWl0ZXJhdG9yLT52
YWx1ZS5vcGVuQ291bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAtLXVzZUNvdW50ZXIu
b3BlbkNvdW50OworICAgIHVzZUNvdW50ZXIudG90YWxVc2VDb3VudCArPSB1c2VDb3VudDsKKyAg
ICByZXR1cm4gbWF5YmVSZW1vdmVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIs
IGl0ZXJhdG9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuaAppbmRl
eCAyY2VkOTA5ZjQ4MTEwYzY2NjU2ZGUxYmZlMzgxMWRiYWJhYWE5ZjRmLi5hZDI3NGQ3M2QxNjEy
MWRhY2RlYzA5NDVlYWI2ODZhN2IzMjM0YTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmgKQEAgLTQ2LDE2ICs0
Niw0NSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKFJlZjxXZWJDb3JlOjpO
YXRpdmVJbWFnZT4mJik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYp
OwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsKLSAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNv
dXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIGJvb2wgcmVs
ZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
dWludDY0X3QgdXNlQ291bnQpOworICAgIHZvaWQgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICBib29sIHBydW5lKCk7CiAKICAgICBj
b25zdCBXZWJDb3JlOjpJbWFnZUJ1ZmZlckhhc2hNYXAmIGltYWdlQnVmZmVycygpIGNvbnN0IHsg
cmV0dXJuIG1faW1hZ2VCdWZmZXJzOyB9CiAgICAgY29uc3QgV2ViQ29yZTo6TmF0aXZlSW1hZ2VI
YXNoTWFwJiBuYXRpdmVJbWFnZXMoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUltYWdlczsgfQog
ICAgIGNvbnN0IFdlYkNvcmU6OkZvbnRSZW5kZXJpbmdSZXNvdXJjZU1hcCYgZm9udHMoKSBjb25z
dCB7IHJldHVybiBtX2ZvbnRzOyB9CiAKIHByaXZhdGU6CisgICAgLy8gQmVjYXVzZSB0aGUgY2Fj
aGUvcmVsZWFzZSBtZXNzYWdlcyBhcmUgc2VudCBhc3luY2hyb25vdXNseSBmcm9tIHRoZSBkaXNw
bGF5IGxpc3QgaXRlbXMgd2hpY2gKKyAgICAvLyByZWZlcmVuY2UgdGhlIHJlc291cmNlcywgaXQn
cyB0b3RhbGx5IHBvc3NpYmxlIHRoYXQgd2Ugc2VlIGEgcmVsZWFzZSBtZXNzYWdlIGJlZm9yZSB3
ZSd2ZQorICAgIC8vIGV4ZWN1dGVkIGFsbCB0aGUgZGlzcGxheSBsaXN0IGl0ZW1zIHdoaWNoIHJl
ZmVyZW5jZSB0aGUgcmVzb3VyY2UuIFRoZSB3ZWIgcHJvY2VzcyB0ZWxscyB1cworICAgIC8vIGhv
dyBtYW55IGRpc3BsYXkgbGlzdCBpdGVtcyB3aWxsIHJlZmVyZW5jZSB0aGlzIHJlc291cmNlLCBh
bmQgd2UgZGVmZXIgZGVsZXRpb24gb2YgdGhlIHJlc291cmNlCisgICAgLy8gdW50aWwgd2UgZXhl
Y3V0ZSB0aGF0IG1hbnkgZGlzcGxheSBsaXN0IGl0ZW1zLgorICAgIC8vCisgICAgLy8gSXQncyBh
Y3R1YWxseSBhIGJpdCB3b3JzZSB0aGFuIHRoaXMsIHRob3VnaCwgYmVjYXVzZSB3ZSBtYXkgYWN0
dWFsbHkgc2VlIGEgKm5ldyogY2FjaGUgbWVzc2FnZQorICAgIC8vIGR1cmluZyB0aGUgdGltZSB3
aGVuIGRlbGV0aW9uIGlzIGRlZmVycmVkLCBzbyB3ZSBuZWVkIGEgc2Vjb25kIGNvdW50IG9mIHRo
ZSBudW1iZXIgb2YgY2FjaGUKKyAgICAvLyBtZXNzYWdlcyB3aGljaCBkb24ndCBoYXZlIGFuIGFj
Y29tcGFueWluZyByZWxlYXNlIG1lc3NhZ2VzLgorICAgIC8vCisgICAgLy8gV2UgY2FuIG9ubHkg
c2FmZWx5IGRlbGV0ZSBhIHJlc291cmNlIHdoZW46CisgICAgLy8gMS4gQWxsIHRoZSBjYWNoZSBt
ZXNzYWdlcyBoYXZlIGFuIGFjY29tcGFueWluZyByZWxlYXNlIG1lc3NhZ2UsIGFuZAorICAgIC8v
IDIuIFdlJ3ZlIHByb2Nlc3NlZCBhcyBtYW55IGRpc3BsYXkgbGlzdCBpdGVtcyB0aGF0IHJlZmVy
ZW5jZSBhIHBhcnRpY3VsYXIgcmVzb3VyY2UgYXMgdGhlIHdlYgorICAgIC8vIHByb2Nlc3MgaGFz
IGVuY29kZWQuCisgICAgc3RydWN0IFJlc291cmNlVXNlQ291bnRlciB7CisgICAgICAgIHVpbnQ2
NF90IG9wZW5Db3VudCB7IDAgfTsgLy8gVGhlIG51bWJlciBvZiBjYWNoZUZvbyBtZXNzYWdlcyB3
ZSd2ZSByZWNlaXZlZCB3aXRob3V0IGEgY29ycmVzcG9uZGluZyByZWxlYXNlIG1lc3NhZ2UKKyAg
ICAgICAgdWludDY0X3QgdXNlQ291bnQgeyAwIH07IC8vIFRoZSBudW1iZXIgb2YgcmVuZGVyaW5n
IGNvbW1hbmRzIHdlJ3ZlIGV4ZWN1dGVkIHdoaWNoIHJlZmVyZW5jZSB0aGlzIHJlc291cmNlCisg
ICAgICAgIHVpbnQ2NF90IHRvdGFsVXNlQ291bnQgeyAwIH07IC8vIE9uY2UgdXNlQ291bnQgaGl0
cyB0aGlzIGxpbWl0LCB3ZSBjYW4gZnJlZSB0aGUgcmVzb3VyY2UKKyAgICB9OworICAgIHVzaW5n
IFJlc291cmNlVXNlQ291bnRlcnNNYXAgPSBIYXNoTWFwPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciwgUmVzb3VyY2VVc2VDb3VudGVyPjsKKworICAgIGJvb2wgbWF5YmVSZW1v
dmVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFJlc291cmNl
VXNlQ291bnRlcnNNYXA6Oml0ZXJhdG9yKTsKKyAgICB2b2lkIGluY3JlbWVudE9wZW5Db3VudChX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworCiAgICAgV2ViQ29yZTo6SW1h
Z2VCdWZmZXJIYXNoTWFwIG1faW1hZ2VCdWZmZXJzOwogICAgIFdlYkNvcmU6Ok5hdGl2ZUltYWdl
SGFzaE1hcCBtX25hdGl2ZUltYWdlczsKICAgICBXZWJDb3JlOjpGb250UmVuZGVyaW5nUmVzb3Vy
Y2VNYXAgbV9mb250czsKKworICAgIFJlc291cmNlVXNlQ291bnRlcnNNYXAgbV9yZXNvdXJjZVVz
ZUNvdW50ZXJzOworICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyPiBtX3Jlc291cmNlc0Zvck1heWJlUmVtb3Zpbmc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggYjQ0OGIzN2Y5N2ZlN2FlNjVk
YmViYjJhODVhYjBjOTk0ZTFmMjZiZC4uZDRjYmMyYzBjOTAzNDMwNTk2OGYyNzdiNTUzNjFiYjI3
NDgyZmVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTcyLDcgKzcyLDcgQEAg
cHVibGljOgogCiAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKICAgICAgICAgbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpLnJlbGVh
c2VJbWFnZUJ1ZmZlcihtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0gICAgICAgIG1f
cmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5yZWxlYXNlUmVtb3RlUmVzb3VyY2UobV9yZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS0+cmVsZWFzZVJlbW90ZVJlc291cmNlKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLCAwKTsgLy8gRklYTUU6IFBhc3MgdGhlIHJlYWwgdXNlIGNvdW50IGhlcmUuCiAgICAgfQog
CiAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhh
bmRsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKaW5kZXggMDlj
ZTRjNmVmNmQ2YWJlNzFlMDNlYWI3ZmE4Y2QyMTRmZjY4YjBmZS4uZTk1ZjFhZDM5MzRmMjU0YmQ1
Zjk5ZDIzYTViNDY1NTUzNWNlMDkzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcApAQCAtMjQ5LDEyICsyNDksMTIgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OmRlbGV0ZUFsbEZvbnRzKCkKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpEZWxldGVBbGxGb250cygpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5
bmNSZXBseSk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNl
UmVtb3RlUmVzb3VyY2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNl
UmVtb3RlUmVzb3VyY2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpCiB7CiAgICAgaWYgKHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciA9PSBtX2N1cnJlbnREZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRp
ZmllcikKICAgICAgICAgbV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIg
PSBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpSZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1l
c3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIHVzZUNvdW50KSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwg
SVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVw
bHkpOwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGlkQ3JlYXRlSW1h
Z2VCdWZmZXJCYWNrZW5kKEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUsIFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAppbmRleCA2MzE0OTY3MGEzNTk0ZTI1YTJkYTVj
ZDE5NzYxMTQ2MWM2MTc5NzQwLi5iMmNlM2Q4YzI4YWIxOTEyNTM1MTkwMjdmYzkwNzRkMjBlZDE3
MjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTEwNCw3ICsx
MDQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsK
ICAgICB2b2lkIGNhY2hlRm9udChSZWY8V2ViQ29yZTo6Rm9udD4mJik7CiAgICAgdm9pZCBkZWxl
dGVBbGxGb250cygpOwotICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlUmVtb3RlUmVzb3Vy
Y2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3Vu
dCk7CiAKICAgICBlbnVtIGNsYXNzIERpZFJlY2VpdmVCYWNrZW5kQ3JlYXRpb25SZXN1bHQgOiBi
b29sIHsKICAgICAgICAgUmVjZWl2ZWRBbnlSZXNwb25zZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VD
YWNoZVByb3h5LmNwcAppbmRleCAwM2YzNGIzM2EyMmRkNDkyOGQ0MjYwZTQ3ODYyZDM5MTM3MTEw
MWFmLi40MTRlMTk5NmU4YmMyOTk1YjdmNzA3NmFlNmE1MjE0ZDYzNjc2NjhiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2Fj
aGVQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCkBAIC0xMjEsOCArMTIxLDcgQEAgdm9pZCBSZW1v
dGVSZXNvdXJjZUNhY2hlUHJveHk6OnJlbGVhc2VOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmUKICAgICBpZiAoIW1fbmF0aXZlSW1hZ2VzLnJlbW92ZShyZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBUZWxsIHRoZSBH
UFUgcHJvY2VzcyB0byByZW1vdmUgdGhpcyByZXNvdXJjZS4KLSAgICBtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKTsKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3Rl
UmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCAwKTsgLy8gRklYTUU6IFBhc3Mg
dGhlIHJlYWwgdXNlIGNvdW50IGhlcmUuCiB9CiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVBy
b3h5OjpwcmVwYXJlRm9yTmV4dFJlbmRlcmluZ1VwZGF0ZSgpCkBAIC0xMzQsNyArMTMzLDcgQEAg
dm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OnByZXBhcmVGb3JOZXh0UmVuZGVyaW5nVXBk
YXRlKCkKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjbGVhckZvbnRNYXAoKQogewog
ICAgIGZvciAoYXV0byYgaXRlbSA6IG1fZm9udElkZW50aWZpZXJUb0xhc3RSZW5kZXJpbmdVcGRh
dGVWZXJzaW9uTWFwKQotICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZWxl
YXNlUmVtb3RlUmVzb3VyY2UoaXRlbS5rZXkpOworICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UoaXRlbS5rZXksIDApOyAvLyBGSVhNRTog
UGFzcyB0aGUgcmVhbCB1c2UgY291bnQgaGVyZS4KICAgICBtX2ZvbnRJZGVudGlmaWVyVG9MYXN0
UmVuZGVyaW5nVXBkYXRlVmVyc2lvbk1hcC5jbGVhcigpOwogICAgIG1fbnVtYmVyT2ZGb250c1Vz
ZWRJbkN1cnJlbnRSZW5kZXJpbmdVcGRhdGUgPSAwOwogfQpAQCAtMTUyLDcgKzE1MSw3IEBAIHZv
aWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpmaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZUZvckZv
bnRzKCkKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2ZvbnRJZGVudGlmaWVyVG9MYXN0UmVuZGVy
aW5nVXBkYXRlVmVyc2lvbk1hcCkgewogICAgICAgICBpZiAobV9jdXJyZW50UmVuZGVyaW5nVXBk
YXRlVmVyc2lvbiAtIGl0ZW0udmFsdWUgPj0gbWluaW11bVJlbmRlcmluZ1VwZGF0ZUNvdW50VG9L
ZWVwRm9udEFsaXZlKSB7CiAgICAgICAgICAgICB0b1JlbW92ZS5hZGQoaXRlbS5rZXkpOwotICAg
ICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJlc291
cmNlKGl0ZW0ua2V5KTsKKyAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShpdGVtLmtleSwgMCk7IC8vIEZJWE1FOiBQYXNzIHRoZSBy
ZWFsIHVzZSBjb3VudCBoZXJlLgogICAgICAgICB9CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434137</attachid>
            <date>2021-07-23 16:11:04 -0700</date>
            <delta_ts>2021-07-23 16:12:54 -0700</delta_ts>
            <desc>Reworked struct ResourceUseCounter</desc>
            <filename>bug-228222-20210723161103.patch</filename>
            <type>text/plain</type>
            <size>26142</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMjU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzIxMDliYmJjNGM0OWNm
YmYxZGYyZWM2OWMyYWI5ZmQxNjU5NWY0Ny4uZmIzNzcxYzgxOThkYWE0ZjIzYmYxY2RiMDliYjNj
YmQ3MmUyZTI4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIxLTA3LTIzICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9j
ZXNzXSBBZGQgcmVzb3VyY2UgdXNlIGNvdW50ZXIgaW5mcmFzdHJ1Y3R1cmUgdG8gUmVtb3RlUmVz
b3VyY2VDYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI4MjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBpcyBwYXJ0IDIgb2YgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyODIxNi4KKworICAgICAgICBVc2luZyBEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6OkRlbGVn
YXRlIHRvIHRyYWNrIGhvdyBtYW55IHRpbWVzIGEgcmVzb3VyY2UgaXMgdXNlZCBpbiBhIGRpc3Bs
YXkgbGlzdCBpcyBhIG5hdHVyYWwgZml0LgorICAgICAgICBIb3dldmVyLCBpZiB0aGUgR1BVIHBy
b2Nlc3MgZGV0ZXJtaW5lcyB0aGF0IGEgcmVzb3VyY2UgaGFzIGhpdCBpdHMgdXNlIGxpbWl0IGFu
ZCBpcyByZWFkeSB0byBiZSBkZXN0cm95ZWQsIGl0IGNhbid0CisgICAgICAgIGFjdHVhbGx5IGRl
c3Ryb3kgaXQgaW1tZWRpYXRlbHksIGJlY2F1c2UgdGhlIGRlbGVnYXRlJ3MgY2FsbGJhY2sgaXMg
Y2FsbGVkIGJlZm9yZSBhY3R1YWxseSBleGVjdXRpbmcgdGhlIGRpc3BsYXkKKyAgICAgICAgbGlz
dCBpdGVtICh3aGljaCBuZWVkcyB0byBzZWUgdGhlIHJlc291cmNlKS4gQW5kIGl0IGhhcyB0byBl
eGVjdXRlIGJlZm9yZSBleGVjdXRpbmcgdGhlIGRpc3BsYXkgbGlzdCBpdGVtIGJlY2F1c2UKKyAg
ICAgICAgdGhlIGRlbGVnYXRlIGFjdHVhbGx5IGltcGxlbWVudHMgdGhlIGRpc3BsYXkgbGlzdCBp
dGVtIGZvciB0aGluZ3MgbGlrZSBnZXRJbWFnZURhdGEuIFNvLCB0aGlzIHBhdGNoIGFkZHMgYW5v
dGhlcgorICAgICAgICBtZXRob2QgdG8gdGhlIGRlbGVnYXRlOiBkaWRDb21wbGV0ZVJlcGxheWlu
ZygpLCB3aGljaCBpcyBjYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgcmVwbGF5LiBUaGUgR1BVIHBy
b2Nlc3Mgd2lsbAorICAgICAgICByZW1lbWJlciB3aGljaCByZXNvdXJjZXMgd2VyZSB1c2VkIGR1
cmluZyB0aGUgcmVwbGF5LCBhbmQgaW5jcmVtZW50IHRoZSByZWxldmFudCBjb3VudGVycywgYnV0
IG9ubHkgb25jZSB0aGUgcmVwbGF5CisgICAgICAgIGhhcyBmaW5pc2hlZCBjYW4gdGhlIEdQVSBw
cm9jZXNzIGFjdHVhbGx5IGRlbGV0ZSB0aGVzZSByZXNvdXJjZXMuIFRoYXQgb2NjdXJzIGluIHRo
aXMgbmV3IGRlbGVnYXRlIG1ldGhvZC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0
aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UgeWV0LiBUaGlzIHBhdGNoIGlzIGp1c3QgYWRkaW5n
IGluZnJhc3RydWN0dXJlLiBGb3Igbm93LCBhbGwgdGhlc2UKKyAgICAgICAgdXNlIGNvdW50cyBz
ZW50IGJ5IHRoZSB3ZWIgcHJvY2VzcyBhcmUgMCAtIEknbGwgaW1wbGVtZW50IHRoYXQgcGFydCBp
biAzIGZvbGxvdy11cCBwYXRjaGVzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlcGxheWVyOjpyZXBsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVwbGF5ZXI6OkRlbGVnYXRlOjpkaWRDb21wbGV0ZVJlcGxheWluZyk6CisK
IDIwMjEtMDctMjMgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAg
ICAgICAgIFtKU0NdIENhbGwgY3VzdG9tIGFjY2Vzc29ycyAvIHZhbHVlcyB3aXRoIHRoZWlyIGhv
bGRlcidzIGdsb2JhbCBvYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOWM2ZTRlNTc5Y2ZlYmU0NWYyODI3NmJh
ZTE2ZDJkMzMwNzU3MjMzZS4uNWJlMGMxOWJiZTdkNTU3YWE0YjMwZDgyMjNkNzE4ZDhjNjNhYzUz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAyMS0wNy0yMyAgTXlsZXMgQy4gTWF4Zmll
bGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gQWRkIHJl
c291cmNlIHVzZSBjb3VudGVyIGluZnJhc3RydWN0dXJlIHRvIFJlbW90ZVJlc291cmNlQ2FjaGUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODIyMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWRkcyB0aGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGFzc29jaWF0aW5nIGEgY291bnRlciB3aXRo
IGVhY2ggcmVzb3VyY2UgaW4gdGhlIFJlbW90ZVJlc291cmNlQ2FjaGUuCisgICAgICAgIEFzIHRo
ZSB3ZWIgcHJvY2VzcyB1c2VzIGEgcmVzb3VyY2UgZHVyaW5nIGRpc3BsYXkgbGlzdCByZWNvcmRp
bmcsIGl0IGluY3JlbWVudHMgYSBjb3VudGVyLCBhbmQgYXMgdGhlIEdQVQorICAgICAgICBwcm9j
ZXNzIHVzZXMgYSByZXNvdXJjZSwgaXQgaW5jcmVtZW50cyBhIGNvdW50ZXIgaW4gdGhlIFJlbW90
ZVJlc291cmNlQ2FjaGUuIFdoZW4gdGhlIHdlYiBwcm9jZXNzIGlzIGRvbmUKKyAgICAgICAgd2l0
aCBhIHJlc291cmNlLCBpdCBzZW5kcyBhIHJlbGVhc2UgbWVzc2FnZSB0byB0aGUgR1BVIHByb2Nl
c3Mgd2hpY2ggY3J1Y2lhbGx5IGluY2x1ZGVzIHRoZSB3ZWIgcHJvY2VzcydzCisgICAgICAgIGNv
dW50ZXIuIFRoZSBHUFUgcHJvY2VzcyBoYXMgdG8gdGhlbiB3YWl0IHRvIGFjdHVhbGx5IGRlbGV0
ZSB0aGUgcmVzb3VyY2UgdW50aWwgaXRzIG93biB1c2UgY291bnRlciBtYXRjaGVzCisgICAgICAg
IHRoZSBvbmUgaXQgcmVjZWl2ZWQgZnJvbSB0aGUgd2ViIHByb2Nlc3MuIFRoaXMgcGF0Y2ggaW1w
bGVtZW50cyB0aGlzIGRlZmVycmVkIGRlbGV0aW9uIGluZnJhc3RydWN0dXJlCisgICAgICAgIGlu
IHRoZSBHUFUgcHJvY2Vzcy4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OmRpZENvbXBsZXRlUmVwbGF5aW5nKTogU2VlIHRoZSBX
ZWJDb3JlIENoYW5nZUxvZyBmb3IgYW4KKyAgICAgICAgZXhwbGFuYXRpb24gb2YgdGhpcy4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZVJlbW90ZVJlc291
cmNlKTogUGFzcyB0aGUgdXNlIGNvdW50IHRvIHRoZSBSZW1vdGVSZXNvdXJjZUNhY2hlLgorICAg
ICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOiBBZGQg
dGhlIHVzZSBjb3VudCBmaWVsZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46IERpdHRvLgorICAgICAgICAqIEdQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlSW1hZ2VCdWZmZXIpOiBJdCdzIGFjdHVhbGx5IG9rYXkg
aWYgdGhlcmUncyBhbHJlYWR5IGFuIHJlc291cmNlIGNhY2hlZC4KKyAgICAgICAgVGhhdCBqdXN0
IG1lYW5zIHRoYXQgdGhlIHdlYiBwcm9jZXNzIHN0YXJ0ZWQgdXNpbmcgYSByZXNvdXJjZSBhZ2Fp
biBiZWZvcmUgdGhlIEdQVSBwcm9jZXNzIGNvbnN1bWVkIGFsbAorICAgICAgICBjb21tYW5kcyB0
aGF0IHVzZWQgaXQgdGhlIGZpcnN0IHRpbWUuIEFsbCB3ZSBuZWVkIHRvIGRvIGlzIGluY3JlbWVu
dCB0aGUgb3BlbiBjb3VudC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZTo6
Y2FjaGVOYXRpdmVJbWFnZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJj
ZUNhY2hlOjpjYWNoZUZvbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3Vy
Y2VDYWNoZTo6ZW5zdXJlUmVzb3VyY2VVc2VDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVzb3VyY2VDYWNoZTo6bWF5YmVSZW1vdmVSZXNvdXJjZSk6IFRoaXMgaXMgY2FsbGVkIHdo
ZW5ldmVyIGl0J3MgcG9zc2libGUgZm9yIHVzIHRvIGJlIGluCisgICAgICAgIHNpdHVhdGlvbiB3
aGVyZSB3ZSBzaG91bGQgYmUgcmVtb3ZpbmcgYSByZXNvdXJjZSAoYWthIHdoZW5ldmVyIHRoZSB1
c2UgY291bnQgaW5jcmVtZW50cykuIEl0IGNoZWNrcyB0byBzZWUKKyAgICAgICAgaWYgd2UgY2Fu
IHJlbW92ZSB0aGUgcmVzb3VyY2UsIGFuZCBpZiBpdCBjYW4sIGRvZXMgc28uCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGU6OnJlY29yZFJlc291cmNlVXNlKTogVGhlIGNhbGxi
YWNrIHRoYXQgcnVucyBmb3IgZWFjaCByZXNvdXJjZSB1c2UgZHVyaW5nCisgICAgICAgIHJlcGxh
eWluZy4gSXQgY2FuJ3QgYWN0dWFsbHkgZGVsZXRlIGFueSByZXNvdXJjZXMsIHNvIGluc3RlYWQg
aXQganVzdCByZWNvcmRzIHdoaWNoIHJlc291cmNlcyBoYWQgdGhlaXIKKyAgICAgICAgdXNlIGNv
dW50cyBpbmNyZW1lbnRlZCwgYW5kIHdhaXRzIGZvciBwcnVuZSgpIHRvIGFjdHVhbGx5IGNhbGwg
bWF5YmVSZW1vdmVSZXNvdXJjZSgpLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNh
Y2hlOjpwcnVuZSk6IEFmdGVyIHRoZSByZXBsYXkgaXMgY29tcGxldGUsIGNhbGwgbWF5YmVSZW1v
dmVSZXNvdXJjZSgpIG9uIGFsbCB0aGUKKyAgICAgICAgcmVzb3VyY2VzIHdoaWNoIGhhZCB0aGVp
ciB1c2UgY291bnRlcnMgdG91Y2hlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VD
YWNoZTo6cmVsZWFzZVJlbW90ZVJlc291cmNlKTogUHV0IHRoZSByZWxldmFudCByZXNvdXJjZSBp
bnRvIHRoZSBzdGF0ZSB3aGVyZSB3ZQorICAgICAgICBhcmUgd2FpdGluZyBmb3IgdGhlIHVzZSBj
b3VudGVycyB0byBtYXRjaCBiZWZvcmUgd2UgY2FuIGRlbGV0ZSB0aGUgcmVzb3VyY2UuIEFsc28s
IGNhbGwgbWF5YmVSZW1vdmVSZXNvdXJjZSgpCisgICAgICAgIHNvIGl0IGNhbiBiZSBkZWxldGVk
IGltbWVkaWF0ZWx5IGlmIHRoZSBjb3VudGVycyBhbHJlYWR5IG1hdGNoLgorICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oOiBBZGQgYSBuZXcgZGF0YSBz
dHJ1Y3R1cmUgdG8gaG9sZCB0aGUgdXNlIGNvdW50ZXJzLiBUaGVyZSdzCisgICAgICAgIGEgYmln
IGNvbW1lbnQgaW4gaGVyZSB0aGF0IGRlc2NyaWJlcyB3aGF0IHRoZXNlIGZpZWxkcyBtZWFuLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
aDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdl
QnVmZmVyUHJveHkpOiBTZW5kIGEgZHVtbXkgdXNlIGNvdW50IGZvciBub3cuIFRoaXMgd2lsbCBi
ZQorICAgICAgICBpbXBsZW1lbnRlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VSZW1v
dGVSZXNvdXJjZSk6IEFkZCB0aGUgdXNlQ291bnQgcGFyYW1ldGVyLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBEaXR0by4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJv
eHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OnJlbGVh
c2VOYXRpdmVJbWFnZSk6IFNlbmQgYSBkdW1teSB1c2UgY291bnQgZm9yIG5vdy4gVGhpcyB3aWxs
IGJlCisgICAgICAgIGltcGxlbWVudGVkIGluIGEgZm9sbG93LXVwIHBhdGNoLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmNsZWFyRm9udE1hcCk6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmZpbmFsaXplUmVuZGVy
aW5nVXBkYXRlRm9yRm9udHMpOiBEaXR0by4KKwogMjAyMS0wNy0yMyAgUm9iZXJ0IEplbm5lciAg
PEplbm5lckBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyODAy
MDUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKaW5kZXggZjM3MGI0
MTE4ZDAyNDNhMWIyOWJiYTAyMTBmODk3NDcyOTM3YTg1My4uMzU2MWRhMGJkMTIyNmNiYzk1Mjdl
YWZlZDEzNDU3N2RkZjhkM2UzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxh
eWVyLmNwcApAQCAtMjMyLDYgKzIzMiw5IEBAIFJlcGxheVJlc3VsdCBSZXBsYXllcjo6cmVwbGF5
KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGJvb2wgdHJhY2tSZXBsYXlMaXN0CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAgICAgbV9kZWxlZ2F0ZS0+
ZGlkQ29tcGxldGVSZXBsYXlpbmcoKTsKKwogICAgIHJlc3VsdC50cmFja2VkRGlzcGxheUxpc3Qg
PSBXVEZNb3ZlKHJlcGxheUxpc3QpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZXBsYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaAppbmRleCAxNjYyN2EwMjA2ZTMwOTI0M2Y4YjdiZDE4
Y2RiM2RhNTg2MDc4YThmLi41NzkzOWVlOTc3ZWQ0ZWM0NThhMGQ0NTkyZDlkY2RiNzJhZmNmMDMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZXBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKQEAgLTY4LDYgKzY4LDcg
QEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoSXRlbUhhbmRsZSwgR3JhcGhp
Y3NDb250ZXh0JikgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZENy
ZWF0ZU1hc2tJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIHsgfQogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIoKSB7IH0KKyAgICAgICAgdmlydHVh
bCB2b2lkIGRpZENvbXBsZXRlUmVwbGF5aW5nKCkgeyB9CiAgICAgfTsKICAgICAKIHByaXZhdGU6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggZWE4Mjg2ZGEwYzlkZTRkZmNhN2RlMzViZTMz
N2RmMDMyYzAzN2U3ZS4uYzEwNmY0MmNjNGYzNTU1NGVkOTIzMmIwMzVlMzgzNWFiMjAyYzg5MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMjE0LDYgKzIxNCwxMiBAQCB2b2lkIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OmRpZFJlc2V0TWFza0ltYWdlQnVm
ZmVyKCkKICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZGlkUmVzZXRNYXNrSW1hZ2VCdWZm
ZXIoKTsKIH0KIAordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRl
OjpkaWRDb21wbGV0ZVJlcGxheWluZygpCit7CisgICAgYXV0byBtZXNzYWdlc0FyZUluT3JkZXIg
PSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQucmVtb3RlUmVzb3VyY2VDYWNoZSgpLnBydW5lKCk7
CisgICAgTUVTU0FHRV9DSEVDSyhtZXNzYWdlc0FyZUluT3JkZXIsICJXZWIgcHJvY2VzcyB0cmll
ZCB0byByZWxlYXNlIGEgcmVzb3VyY2UgdGhhdCB3YXNuJ3QgY2FjaGVkIik7Cit9CisKIERpc3Bs
YXlMaXN0OjpSZXBsYXlSZXN1bHQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c3VibWl0KGNvbnN0
IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIEltYWdlQnVmZmVyJiBkZXN0
aW5hdGlvbikKIHsKICAgICBpZiAoZGlzcGxheUxpc3QuaXNFbXB0eSgpKQpAQCAtNTA5LDEwICs1
MTUsMTEgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkZWxldGVBbGxGb250cygpCiAg
ICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmRlbGV0ZUFsbEZvbnRzKCk7CiB9CiAKLXZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZShSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCkK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBtX3JlbW90ZVJlc291cmNl
Q2FjaGUucmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7
CisgICAgYXV0byBzdWNjZXNzID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLnJlbGVhc2VSZW1vdGVS
ZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVzZUNvdW50KTsKKyAgICBNRVNT
QUdFX0NIRUNLKHN1Y2Nlc3MsICJSZXNvdXJjZSBpcyBiZWluZyByZWxlYXNlZCBiZWZvcmUgYmVp
bmcgY2FjaGVkLiIpOwogICAgIHVwZGF0ZVJlbmRlcmluZ1Jlc291cmNlUmVxdWVzdCgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCBmN2JmNmJjM2IwNzNhZGJlYWU2ZjZiODYyZmEzNjdm
NmFiMDBlNWIwLi44NzI2MjlmMDI1M2JmNGI2OTM2ODJiNzAyMjMyODVmZmI2MTM1NmQzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTE0NCw3ICsxNDQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdl
YkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsKLSAgICB2b2lkIHJl
bGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
OworICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpOwogICAgIHZvaWQgZGlkQ3JlYXRlU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVu
dGlmaWVyLCBjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOwogCiAgICAg
Y2xhc3MgUmVwbGF5ZXJEZWxlZ2F0ZSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVw
bGF5ZXI6OkRlbGVnYXRlIHsKQEAgLTE1NSw2ICsxNTUsNyBAQCBwcml2YXRlOgogICAgICAgICBi
b29sIGFwcGx5KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlLCBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmKSBmaW5hbDsKICAgICAgICAgdm9pZCBkaWRDcmVhdGVNYXNrSW1hZ2VCdWZm
ZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKSBmaW5hbDsKICAgICAgICAgdm9pZCBkaWRSZXNldE1h
c2tJbWFnZUJ1ZmZlcigpIGZpbmFsOworICAgICAgICB2b2lkIGRpZENvbXBsZXRlUmVwbGF5aW5n
KCkgZmluYWw7CiAKICAgICAgICAgV2ViQ29yZTo6SW1hZ2VCdWZmZXImIG1fZGVzdGluYXRpb247
CiAgICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmIG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggNGIzZmU5YTAy
NjJlOGE1NDkxODUyYzZkNmEwNDA0NWQ2YTY5NjM5Ny4uZmY2MmFmNTExZjNlMmU1Y2ViZjQ3NDFi
YjM1MDMzODQ5NGUzOGViNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMu
aW4KQEAgLTM2LDcgKzM2LDcgQEAgbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB7
CiAgICAgQ2FjaGVGb250KElQQzo6Rm9udFJlZmVyZW5jZSBmb250KQogICAgIERlbGV0ZUFsbEZv
bnRzKCkKICAgICBEaWRDcmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpTaGFyZWRN
ZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpCi0gICAgUmVsZWFzZVJlbW90ZVJlc291
cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpCisgICAgUmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90
IHVzZUNvdW50KQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUu
Y3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2Fj
aGUuY3BwCmluZGV4IDgxZGRlMGJmZmNmMGJkNmNjMWMyOGU1ZGQyNDYzNzRiMzQ2NDYyNzguLjY1
MjZmZDVjYzBjZTU2YWJkNTBmNWQxZmU2NTdiZDAxMTk0OGI0MmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5j
cHAKQEAgLTMzLDggKzMzLDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiB2b2lkIFJl
bW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlSW1hZ2VCdWZmZXIoUmVmPEltYWdlQnVmZmVyPiYmIGlt
YWdlQnVmZmVyKQogewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlcnMuYWRkKGlt
YWdlQnVmZmVyLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgV1RGTW92ZShpbWFnZUJ1
ZmZlcikpOwotICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CisgICAgYXV0byByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPSBpbWFnZUJ1ZmZlci0+
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAgbV9pbWFnZUJ1ZmZlcnMuYWRkKHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV1RGTW92ZShpbWFnZUJ1ZmZlcikpOworCisgICAg
ZW5zdXJlUmVzb3VyY2VVc2VDb3VudGVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiB9
CiAKIEltYWdlQnVmZmVyKiBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZWRJbWFnZUJ1ZmZlcihS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQpA
QCAtNDQsMTQgKzQ2LDI4IEBAIEltYWdlQnVmZmVyKiBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNo
ZWRJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIKIAogdm9pZCBSZW1vdGVS
ZXNvdXJjZUNhY2hlOjpjYWNoZU5hdGl2ZUltYWdlKFJlZjxOYXRpdmVJbWFnZT4mJiBpbWFnZSkK
IHsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmF0aXZlSW1hZ2VzLmFkZChpbWFnZS0+cmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIFdURk1vdmUoaW1hZ2UpKTsKLSAgICBBU1NFUlRfVU5V
U0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIGF1dG8gcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyID0gaW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigp
OworICAgIG1fbmF0aXZlSW1hZ2VzLmFkZChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdU
Rk1vdmUoaW1hZ2UpKTsKKworICAgIGVuc3VyZVJlc291cmNlVXNlQ291bnRlcihyZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hl
Rm9udChSZWY8Rm9udD4mJiBmb250KQogewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9mb250cy5h
ZGQoZm9udC0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIFdURk1vdmUoZm9udCkpOwot
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAg
YXV0byByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPSBmb250LT5yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIoKTsKKyAgICBtX2ZvbnRzLmFkZChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIFdURk1vdmUoZm9udCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VVc2VDb3VudGVyKHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZTo6
ZW5zdXJlUmVzb3VyY2VVc2VDb3VudGVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit7CisgICAgYXV0byByZXN1bHQgPSBt
X3Jlc291cmNlVXNlQ291bnRlcnMuZW5zdXJlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
WyZdIHsKKyAgICAgICAgcmV0dXJuIFJlc291cmNlVXNlQ291bnRlciB7IH07CisgICAgfSk7Cisg
ICAgYXV0byYgc3RhdGUgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnN0YXRlOworICAgIFJFTEVB
U0VfQVNTRVJUKHN0YXRlID09IFJlc291cmNlU3RhdGU6OlRvQmVEZWxldGVkKTsKKyAgICBzdGF0
ZSA9IFJlc291cmNlU3RhdGU6OkFsaXZlOwogfQogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6
OmRlbGV0ZUFsbEZvbnRzKCkKQEAgLTU5LDE2ICs3NSw3MCBAQCB2b2lkIFJlbW90ZVJlc291cmNl
Q2FjaGU6OmRlbGV0ZUFsbEZvbnRzKCkKICAgICBtX2ZvbnRzLmNsZWFyKCk7CiB9CiAKLXZvaWQg
UmVtb3RlUmVzb3VyY2VDYWNoZTo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCitib29sIFJlbW90ZVJl
c291cmNlQ2FjaGU6Om1heWJlUmVtb3ZlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgUmVzb3VyY2VVc2VDb3Vu
dGVyc01hcDo6aXRlcmF0b3IgaXRlcmF0b3IpCiB7CisgICAgLy8gSXQncyBhY3R1YWxseSBva2F5
IGlmIHVzZUNvdW50ID4gMC4KKyAgICAvLyBJdCBqdXN0IG1lYW5zIHRoYXQgdGhlcmUncyBhIGNh
Y2hlIG1lc3NhZ2UgcGVuZGluZywgYW5kIHdlJ3ZlIGVhZ2VybHkgdXNlZCBhIHByZXZpb3VzbHkt
Y2FjaGVkIHJlc291cmNlLgorICAgIC8vIFdoaWNoIGlzIGZpbmUuCisgICAgLy8gRklYTUU6IE1h
eWJlIHdlIHNob3VsZG4ndCBhY3R1YWxseSByZW1vdmUgdGhlIHJlc291cmNlIGluIHRoaXMgc2l0
dWF0aW9uPworICAgIC8vIFdlIG1heSBhY3R1YWxseSBiZSBhYmxlIHRvIGdldCBhIGhlYWQgc3Rh
cnQgb24gc29tZSBkaXNwbGF5IGxpc3QgaXRlbXMgaWYgdGhleSdyZSByZWFkeSBmb3IgdXMgYW5k
IHdlIGhhdmUgdGhlIHJlc291cmNlcyB0aGV5IGRlcGVuZCBvbi4KKworICAgIGF1dG8mIHZhbHVl
ID0gaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICh2YWx1ZS5zdGF0ZSA9PSBSZXNvdXJjZVN0YXRl
OjpBbGl2ZSB8fCB2YWx1ZS51c2VPclBlbmRpbmdDb3VudCA8IDApCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKCF2YWx1ZS51c2VPclBlbmRpbmdDb3VudCkKKyAgICAgICAgbV9yZXNv
dXJjZVVzZUNvdW50ZXJzLnJlbW92ZShpdGVyYXRvcik7CisKICAgICBpZiAobV9pbWFnZUJ1ZmZl
cnMucmVtb3ZlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKG1fbmF0aXZlSW1hZ2VzLnJlbW92ZShyZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB0cnVlOwogICAgIGlmIChtX2ZvbnRzLnJlbW92ZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgLy8gQ2Fj
aGluZyB0aGUgcmVtb3RlIHJlc291cmNlIHNob3VsZCBoYXZlIGhhcHBlbmVkIGJlZm9yZSByZWxl
YXNpbmcgaXQuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OnJlY29yZFJlc291cmNlVXNlKFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
Cit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcmVzb3VyY2VVc2VDb3VudGVycy5maW5kKHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9yZXNvdXJj
ZVVzZUNvdW50ZXJzLmVuZCgpKSB7CisgICAgICAgIC8vIFRoZSBkaXNwbGF5IGxpc3QgaXRlbXMg
d29uIHRoZSByYWNlIGFnYWluc3QgdGhlIGNhY2hlRm9udCBtZXNzYWdlLgorICAgICAgICAvLyBX
aGVuIHdlIHJlY2VpdmUgdGhlIGNhY2hlRm9udCBtZXNzYWdlLCB3ZSB3aWxsIHJldHJ5IHRoZSBk
aXNwbGF5IGxpc3QgaXRlbS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlc291cmNl
VXNlQ291bnRlciYgdXNlQ291bnRlciA9IGl0ZXJhdG9yLT52YWx1ZTsKKyAgICArK3VzZUNvdW50
ZXIudXNlT3JQZW5kaW5nQ291bnQ7CisKKyAgICBtX3Jlc291cmNlc0Zvck1heWJlUmVtb3Zpbmcu
YWRkKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Cit9CisKK2Jvb2wgUmVtb3RlUmVzb3Vy
Y2VDYWNoZTo6cHJ1bmUoKQoreworICAgIGZvciAoYXV0byByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgOiBtX3Jlc291cmNlc0Zvck1heWJlUmVtb3ZpbmcpIHsKKyAgICAgICAgYXV0byBpdGVy
YXRvciA9IG1fcmVzb3VyY2VVc2VDb3VudGVycy5maW5kKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcik7CisgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3Jlc291cmNlVXNlQ291bnRlcnMu
ZW5kKCkpOworICAgICAgICBhdXRvIG1lc3NhZ2VzQXJlSW5PcmRlciA9IG1heWJlUmVtb3ZlUmVz
b3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBpdGVyYXRvcik7CisgICAgICAgIGlm
ICghbWVzc2FnZXNBcmVJbk9yZGVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBtX3Jlc291cmNlc0Zvck1heWJlUmVtb3ZpbmcuY2xlYXIoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpyZWxlYXNlUmVtb3RlUmVzb3VyY2Uo
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
dWludDY0X3QgdXNlQ291bnQpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcmVzb3VyY2VVc2VD
b3VudGVycy5maW5kKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgaWYgKGl0ZXJh
dG9yID09IG1fcmVzb3VyY2VVc2VDb3VudGVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIFJlc291cmNlVXNlQ291bnRlciYgdXNlQ291bnRlciA9IGl0ZXJhdG9yLT52YWx1ZTsK
KyAgICB1c2VDb3VudGVyLnN0YXRlID0gUmVzb3VyY2VTdGF0ZTo6VG9CZURlbGV0ZWQ7CisgICAg
dXNlQ291bnRlci51c2VPclBlbmRpbmdDb3VudCAtPSB1c2VDb3VudDsKKyAgICByZXR1cm4gbWF5
YmVSZW1vdmVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGl0ZXJhdG9yKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuaAppbmRleCAyY2VkOTA5ZjQ4
MTEwYzY2NjU2ZGUxYmZlMzgxMWRiYWJhYWE5ZjRmLi43Y2VmNzg1MDgwYjEzOGEwMDBiNGZlMTll
YzBkODhkYzUwMjdhZTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmgKQEAgLTQ2LDE2ICs0Niw0OCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKFJlZjxXZWJDb3JlOjpOYXRpdmVJbWFnZT4m
Jik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQg
ZGVsZXRlQWxsRm9udHMoKTsKLSAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIGJvb2wgcmVsZWFzZVJlbW90ZVJl
c291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNl
Q291bnQpOworICAgIHZvaWQgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKTsKKyAgICBib29sIHBydW5lKCk7CiAKICAgICBjb25zdCBXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckhhc2hNYXAmIGltYWdlQnVmZmVycygpIGNvbnN0IHsgcmV0dXJuIG1faW1h
Z2VCdWZmZXJzOyB9CiAgICAgY29uc3QgV2ViQ29yZTo6TmF0aXZlSW1hZ2VIYXNoTWFwJiBuYXRp
dmVJbWFnZXMoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUltYWdlczsgfQogICAgIGNvbnN0IFdl
YkNvcmU6OkZvbnRSZW5kZXJpbmdSZXNvdXJjZU1hcCYgZm9udHMoKSBjb25zdCB7IHJldHVybiBt
X2ZvbnRzOyB9CiAKIHByaXZhdGU6CisgICAgLy8gQmVjYXVzZSB0aGUgY2FjaGUvcmVsZWFzZSBt
ZXNzYWdlcyBhcmUgc2VudCBhc3luY2hyb25vdXNseSBmcm9tIHRoZSBkaXNwbGF5IGxpc3QgaXRl
bXMgd2hpY2gKKyAgICAvLyByZWZlcmVuY2UgdGhlIHJlc291cmNlcywgaXQncyB0b3RhbGx5IHBv
c3NpYmxlIHRoYXQgd2Ugc2VlIGEgcmVsZWFzZSBtZXNzYWdlIGJlZm9yZSB3ZSd2ZQorICAgIC8v
IGV4ZWN1dGVkIGFsbCB0aGUgZGlzcGxheSBsaXN0IGl0ZW1zIHdoaWNoIHJlZmVyZW5jZSB0aGUg
cmVzb3VyY2UuIFRoZSB3ZWIgcHJvY2VzcyB0ZWxscyB1cworICAgIC8vIGhvdyBtYW55IGRpc3Bs
YXkgbGlzdCBpdGVtcyB3aWxsIHJlZmVyZW5jZSB0aGlzIHJlc291cmNlLCBhbmQgd2UgZGVmZXIg
ZGVsZXRpb24gb2YgdGhlIHJlc291cmNlCisgICAgLy8gdW50aWwgd2UgZXhlY3V0ZSB0aGF0IG1h
bnkgZGlzcGxheSBsaXN0IGl0ZW1zLgorICAgIC8vCisgICAgLy8gSXQncyBhY3R1YWxseSBhIGJp
dCB3b3JzZSB0aGFuIHRoaXMsIHRob3VnaCwgYmVjYXVzZSB3ZSBtYXkgYWN0dWFsbHkgc2VlIGEg
Km5ldyogY2FjaGUgbWVzc2FnZQorICAgIC8vIGR1cmluZyB0aGUgdGltZSB3aGVuIGRlbGV0aW9u
IGlzIGRlZmVycmVkLCBzbyB3ZSBuZWVkIGEgc2Vjb25kIGNvdW50IG9mIHRoZSBudW1iZXIgb2Yg
Y2FjaGUKKyAgICAvLyBtZXNzYWdlcyB3aGljaCBkb24ndCBoYXZlIGFuIGFjY29tcGFueWluZyBy
ZWxlYXNlIG1lc3NhZ2VzLgorICAgIC8vCisgICAgLy8gV2UgY2FuIG9ubHkgc2FmZWx5IGRlbGV0
ZSBhIHJlc291cmNlIHdoZW46CisgICAgLy8gMS4gQWxsIHRoZSBjYWNoZSBtZXNzYWdlcyBoYXZl
IGFuIGFjY29tcGFueWluZyByZWxlYXNlIG1lc3NhZ2UsIGFuZAorICAgIC8vIDIuIFdlJ3ZlIHBy
b2Nlc3NlZCBhcyBtYW55IGRpc3BsYXkgbGlzdCBpdGVtcyB0aGF0IHJlZmVyZW5jZSBhIHBhcnRp
Y3VsYXIgcmVzb3VyY2UgYXMgdGhlIHdlYgorICAgIC8vIHByb2Nlc3MgaGFzIGVuY29kZWQuCisg
ICAgZW51bSBjbGFzcyBSZXNvdXJjZVN0YXRlIHsKKyAgICAgICAgQWxpdmUsCisgICAgICAgIFRv
QmVEZWxldGVkCisgICAgfTsKKyAgICBzdHJ1Y3QgUmVzb3VyY2VVc2VDb3VudGVyIHsKKyAgICAg
ICAgUmVzb3VyY2VTdGF0ZSBzdGF0ZSB7IFJlc291cmNlU3RhdGU6OlRvQmVEZWxldGVkIH07Cisg
ICAgICAgIGludDY0X3QgdXNlT3JQZW5kaW5nQ291bnQgeyAwIH07CisgICAgfTsKKyAgICB1c2lu
ZyBSZXNvdXJjZVVzZUNvdW50ZXJzTWFwID0gSGFzaE1hcDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIFJlc291cmNlVXNlQ291bnRlcj47CisKKyAgICBib29sIG1heWJlUmVt
b3ZlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBSZXNvdXJj
ZVVzZUNvdW50ZXJzTWFwOjppdGVyYXRvcik7CisgICAgdm9pZCBlbnN1cmVSZXNvdXJjZVVzZUNv
dW50ZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKwogICAgIFdlYkNv
cmU6OkltYWdlQnVmZmVySGFzaE1hcCBtX2ltYWdlQnVmZmVyczsKICAgICBXZWJDb3JlOjpOYXRp
dmVJbWFnZUhhc2hNYXAgbV9uYXRpdmVJbWFnZXM7CiAgICAgV2ViQ29yZTo6Rm9udFJlbmRlcmlu
Z1Jlc291cmNlTWFwIG1fZm9udHM7CisKKyAgICBSZXNvdXJjZVVzZUNvdW50ZXJzTWFwIG1fcmVz
b3VyY2VVc2VDb3VudGVyczsKKyAgICBIYXNoU2V0PFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcj4gbV9yZXNvdXJjZXNGb3JNYXliZVJlbW92aW5nOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
eGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9XZWJLaXQueGNzY2hlbWUgYi9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9XZWJLaXQueGNzY2hlbWUKaW5k
ZXggNjEwMzliMWM3MTczOGYzMjMzZGI4YjM1OTg0M2M0NGM4M2VmOWM5Zi4uMjE4ZGIyYjM3Njk5
MGM0NThiNWU5ODNiMTVkODJmOWRjNGEzMTg2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvV2ViS2l0Lnhjc2NoZW1lCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai94Y3NoYXJlZGRhdGEveGNzY2hlbWVz
L1dlYktpdC54Y3NjaGVtZQpAQCAtMzEsNyArMzEsNyBAQAogICAgICAgPC9UZXN0YWJsZXM+CiAg
ICA8L1Rlc3RBY3Rpb24+CiAgICA8TGF1bmNoQWN0aW9uCi0gICAgICBidWlsZENvbmZpZ3VyYXRp
b24gPSAiUmVsZWFzZSIKKyAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbiA9ICJEZWJ1ZyIKICAgICAg
IHNlbGVjdGVkRGVidWdnZXJJZGVudGlmaWVyID0gIlhjb2RlLkRlYnVnZ2VyRm91bmRhdGlvbi5E
ZWJ1Z2dlci5MTERCIgogICAgICAgc2VsZWN0ZWRMYXVuY2hlcklkZW50aWZpZXIgPSAiWGNvZGUu
RGVidWdnZXJGb3VuZGF0aW9uLkxhdW5jaGVyLkxMREIiCiAgICAgICBsYXVuY2hTdHlsZSA9ICIw
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAppbmRleCBiNDQ4YjM3Zjk3ZmU3YWU2NWRiZWJi
MmE4NWFiMGM5OTRlMWYyNmJkLi5kNGNiYzJjMGM5MDM0MzA1OTY4ZjI3N2I1NTM2MWJiMjc0ODJm
ZWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApAQCAtNzIsNyArNzIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwogICAgICAgICBtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS0+cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5KCkucmVsZWFzZUlt
YWdlQnVmZmVyKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICAgICAgbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbGVhc2VSZW1vdGVSZXNvdXJjZShtX3JlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LT5yZWxlYXNlUmVtb3RlUmVzb3VyY2UobV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIs
IDApOyAvLyBGSVhNRTogUGFzcyB0aGUgcmVhbCB1c2UgY291bnQgaGVyZS4KICAgICB9CiAKICAg
ICBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxl
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCAwOWNlNGM2
ZWY2ZDZhYmU3MWUwM2VhYjdmYThjZDIxNGZmNjhiMGZlLi5lOTVmMWFkMzkzNGYyNTRiZDVmOTlk
MjNhNWI0NjU1NTM1Y2UwOTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuY3BwCkBAIC0yNDksMTIgKzI0OSwxMiBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6ZGVsZXRlQWxsRm9udHMoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OkRlbGV0ZUFsbEZvbnRzKCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCks
IElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1Jl
cGx5KTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VSZW1v
dGVSZXNvdXJjZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VSZW1v
dGVSZXNvdXJjZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCkKIHsKICAgICBpZiAocmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyID09IG1fY3VycmVudERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVy
KQogICAgICAgICBtX2N1cnJlbnREZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllciA9IHN0
ZDo6bnVsbG9wdDsKIAotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OlJlbGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2Fn
ZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6UmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwgdXNlQ291bnQpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6
OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7
CiB9CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRDcmVhdGVJbWFnZUJ1
ZmZlckJhY2tlbmQoSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSwgUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCmluZGV4IDYzMTQ5NjcwYTM1OTRlMjVhMmRhNWNkMTk3
NjExNDYxYzYxNzk3NDAuLmIyY2UzZDhjMjhhYjE5MTI1MzUxOTAyN2ZjOTA3NGQyMGVkMTcyODIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMTA0LDcgKzEwNCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAg
IHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250PiYmKTsKICAgICB2b2lkIGRlbGV0ZUFs
bEZvbnRzKCk7Ci0gICAgdm9pZCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KTsK
IAogICAgIGVudW0gY2xhc3MgRGlkUmVjZWl2ZUJhY2tlbmRDcmVhdGlvblJlc3VsdCA6IGJvb2wg
ewogICAgICAgICBSZWNlaXZlZEFueVJlc3BvbnNlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hl
UHJveHkuY3BwCmluZGV4IDAzZjM0YjMzYTIyZGQ0OTI4ZDQyNjBlNDc4NjJkMzkxMzcxMTAxYWYu
LjQxNGUxOTk2ZThiYzI5OTViN2Y3MDc2YWU2YTUyMTRkNjM2NzY2OGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKQEAgLTEyMSw4ICsxMjEsNyBAQCB2b2lkIFJlbW90ZVJl
c291cmNlQ2FjaGVQcm94eTo6cmVsZWFzZU5hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciByZQogICAgIGlmICghbV9uYXRpdmVJbWFnZXMucmVtb3ZlKHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFRlbGwgdGhlIEdQVSBw
cm9jZXNzIHRvIHJlbW92ZSB0aGlzIHJlc291cmNlLgotICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpOworICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNv
dXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIDApOyAvLyBGSVhNRTogUGFzcyB0aGUg
cmVhbCB1c2UgY291bnQgaGVyZS4KIH0KIAogdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6
OnByZXBhcmVGb3JOZXh0UmVuZGVyaW5nVXBkYXRlKCkKQEAgLTEzNCw3ICsxMzMsNyBAQCB2b2lk
IFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6cHJlcGFyZUZvck5leHRSZW5kZXJpbmdVcGRhdGUo
KQogdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmNsZWFyRm9udE1hcCgpCiB7CiAgICAg
Zm9yIChhdXRvJiBpdGVtIDogbV9mb250SWRlbnRpZmllclRvTGFzdFJlbmRlcmluZ1VwZGF0ZVZl
cnNpb25NYXApCi0gICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LnJlbGVhc2VS
ZW1vdGVSZXNvdXJjZShpdGVtLmtleSk7CisgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShpdGVtLmtleSwgMCk7IC8vIEZJWE1FOiBQYXNz
IHRoZSByZWFsIHVzZSBjb3VudCBoZXJlLgogICAgIG1fZm9udElkZW50aWZpZXJUb0xhc3RSZW5k
ZXJpbmdVcGRhdGVWZXJzaW9uTWFwLmNsZWFyKCk7CiAgICAgbV9udW1iZXJPZkZvbnRzVXNlZElu
Q3VycmVudFJlbmRlcmluZ1VwZGF0ZSA9IDA7CiB9CkBAIC0xNTIsNyArMTUxLDcgQEAgdm9pZCBS
ZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmZpbmFsaXplUmVuZGVyaW5nVXBkYXRlRm9yRm9udHMo
KQogICAgIGZvciAoYXV0byYgaXRlbSA6IG1fZm9udElkZW50aWZpZXJUb0xhc3RSZW5kZXJpbmdV
cGRhdGVWZXJzaW9uTWFwKSB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRSZW5kZXJpbmdVcGRhdGVW
ZXJzaW9uIC0gaXRlbS52YWx1ZSA+PSBtaW5pbXVtUmVuZGVyaW5nVXBkYXRlQ291bnRUb0tlZXBG
b250QWxpdmUpIHsKICAgICAgICAgICAgIHRvUmVtb3ZlLmFkZChpdGVtLmtleSk7Ci0gICAgICAg
ICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3RlUmVzb3VyY2Uo
aXRlbS5rZXkpOworICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVs
ZWFzZVJlbW90ZVJlc291cmNlKGl0ZW0ua2V5LCAwKTsgLy8gRklYTUU6IFBhc3MgdGhlIHJlYWwg
dXNlIGNvdW50IGhlcmUuCiAgICAgICAgIH0KICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434138</attachid>
            <date>2021-07-23 16:12:56 -0700</date>
            <delta_ts>2021-07-23 16:14:53 -0700</delta_ts>
            <desc>Reworked struct ResourceUseCounter</desc>
            <filename>bug-228222-20210723161255.patch</filename>
            <type>text/plain</type>
            <size>25412</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMjU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzIxMDliYmJjNGM0OWNm
YmYxZGYyZWM2OWMyYWI5ZmQxNjU5NWY0Ny4uZmIzNzcxYzgxOThkYWE0ZjIzYmYxY2RiMDliYjNj
YmQ3MmUyZTI4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIxLTA3LTIzICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9j
ZXNzXSBBZGQgcmVzb3VyY2UgdXNlIGNvdW50ZXIgaW5mcmFzdHJ1Y3R1cmUgdG8gUmVtb3RlUmVz
b3VyY2VDYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI4MjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBpcyBwYXJ0IDIgb2YgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyODIxNi4KKworICAgICAgICBVc2luZyBEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6OkRlbGVn
YXRlIHRvIHRyYWNrIGhvdyBtYW55IHRpbWVzIGEgcmVzb3VyY2UgaXMgdXNlZCBpbiBhIGRpc3Bs
YXkgbGlzdCBpcyBhIG5hdHVyYWwgZml0LgorICAgICAgICBIb3dldmVyLCBpZiB0aGUgR1BVIHBy
b2Nlc3MgZGV0ZXJtaW5lcyB0aGF0IGEgcmVzb3VyY2UgaGFzIGhpdCBpdHMgdXNlIGxpbWl0IGFu
ZCBpcyByZWFkeSB0byBiZSBkZXN0cm95ZWQsIGl0IGNhbid0CisgICAgICAgIGFjdHVhbGx5IGRl
c3Ryb3kgaXQgaW1tZWRpYXRlbHksIGJlY2F1c2UgdGhlIGRlbGVnYXRlJ3MgY2FsbGJhY2sgaXMg
Y2FsbGVkIGJlZm9yZSBhY3R1YWxseSBleGVjdXRpbmcgdGhlIGRpc3BsYXkKKyAgICAgICAgbGlz
dCBpdGVtICh3aGljaCBuZWVkcyB0byBzZWUgdGhlIHJlc291cmNlKS4gQW5kIGl0IGhhcyB0byBl
eGVjdXRlIGJlZm9yZSBleGVjdXRpbmcgdGhlIGRpc3BsYXkgbGlzdCBpdGVtIGJlY2F1c2UKKyAg
ICAgICAgdGhlIGRlbGVnYXRlIGFjdHVhbGx5IGltcGxlbWVudHMgdGhlIGRpc3BsYXkgbGlzdCBp
dGVtIGZvciB0aGluZ3MgbGlrZSBnZXRJbWFnZURhdGEuIFNvLCB0aGlzIHBhdGNoIGFkZHMgYW5v
dGhlcgorICAgICAgICBtZXRob2QgdG8gdGhlIGRlbGVnYXRlOiBkaWRDb21wbGV0ZVJlcGxheWlu
ZygpLCB3aGljaCBpcyBjYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgcmVwbGF5LiBUaGUgR1BVIHBy
b2Nlc3Mgd2lsbAorICAgICAgICByZW1lbWJlciB3aGljaCByZXNvdXJjZXMgd2VyZSB1c2VkIGR1
cmluZyB0aGUgcmVwbGF5LCBhbmQgaW5jcmVtZW50IHRoZSByZWxldmFudCBjb3VudGVycywgYnV0
IG9ubHkgb25jZSB0aGUgcmVwbGF5CisgICAgICAgIGhhcyBmaW5pc2hlZCBjYW4gdGhlIEdQVSBw
cm9jZXNzIGFjdHVhbGx5IGRlbGV0ZSB0aGVzZSByZXNvdXJjZXMuIFRoYXQgb2NjdXJzIGluIHRo
aXMgbmV3IGRlbGVnYXRlIG1ldGhvZC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0
aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UgeWV0LiBUaGlzIHBhdGNoIGlzIGp1c3QgYWRkaW5n
IGluZnJhc3RydWN0dXJlLiBGb3Igbm93LCBhbGwgdGhlc2UKKyAgICAgICAgdXNlIGNvdW50cyBz
ZW50IGJ5IHRoZSB3ZWIgcHJvY2VzcyBhcmUgMCAtIEknbGwgaW1wbGVtZW50IHRoYXQgcGFydCBp
biAzIGZvbGxvdy11cCBwYXRjaGVzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlcGxheWVyOjpyZXBsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVwbGF5ZXI6OkRlbGVnYXRlOjpkaWRDb21wbGV0ZVJlcGxheWluZyk6CisK
IDIwMjEtMDctMjMgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAg
ICAgICAgIFtKU0NdIENhbGwgY3VzdG9tIGFjY2Vzc29ycyAvIHZhbHVlcyB3aXRoIHRoZWlyIGhv
bGRlcidzIGdsb2JhbCBvYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOWM2ZTRlNTc5Y2ZlYmU0NWYyODI3NmJh
ZTE2ZDJkMzMwNzU3MjMzZS4uNWJlMGMxOWJiZTdkNTU3YWE0YjMwZDgyMjNkNzE4ZDhjNjNhYzUz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAyMS0wNy0yMyAgTXlsZXMgQy4gTWF4Zmll
bGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gQWRkIHJl
c291cmNlIHVzZSBjb3VudGVyIGluZnJhc3RydWN0dXJlIHRvIFJlbW90ZVJlc291cmNlQ2FjaGUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODIyMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWRkcyB0aGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGFzc29jaWF0aW5nIGEgY291bnRlciB3aXRo
IGVhY2ggcmVzb3VyY2UgaW4gdGhlIFJlbW90ZVJlc291cmNlQ2FjaGUuCisgICAgICAgIEFzIHRo
ZSB3ZWIgcHJvY2VzcyB1c2VzIGEgcmVzb3VyY2UgZHVyaW5nIGRpc3BsYXkgbGlzdCByZWNvcmRp
bmcsIGl0IGluY3JlbWVudHMgYSBjb3VudGVyLCBhbmQgYXMgdGhlIEdQVQorICAgICAgICBwcm9j
ZXNzIHVzZXMgYSByZXNvdXJjZSwgaXQgaW5jcmVtZW50cyBhIGNvdW50ZXIgaW4gdGhlIFJlbW90
ZVJlc291cmNlQ2FjaGUuIFdoZW4gdGhlIHdlYiBwcm9jZXNzIGlzIGRvbmUKKyAgICAgICAgd2l0
aCBhIHJlc291cmNlLCBpdCBzZW5kcyBhIHJlbGVhc2UgbWVzc2FnZSB0byB0aGUgR1BVIHByb2Nl
c3Mgd2hpY2ggY3J1Y2lhbGx5IGluY2x1ZGVzIHRoZSB3ZWIgcHJvY2VzcydzCisgICAgICAgIGNv
dW50ZXIuIFRoZSBHUFUgcHJvY2VzcyBoYXMgdG8gdGhlbiB3YWl0IHRvIGFjdHVhbGx5IGRlbGV0
ZSB0aGUgcmVzb3VyY2UgdW50aWwgaXRzIG93biB1c2UgY291bnRlciBtYXRjaGVzCisgICAgICAg
IHRoZSBvbmUgaXQgcmVjZWl2ZWQgZnJvbSB0aGUgd2ViIHByb2Nlc3MuIFRoaXMgcGF0Y2ggaW1w
bGVtZW50cyB0aGlzIGRlZmVycmVkIGRlbGV0aW9uIGluZnJhc3RydWN0dXJlCisgICAgICAgIGlu
IHRoZSBHUFUgcHJvY2Vzcy4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OmRpZENvbXBsZXRlUmVwbGF5aW5nKTogU2VlIHRoZSBX
ZWJDb3JlIENoYW5nZUxvZyBmb3IgYW4KKyAgICAgICAgZXhwbGFuYXRpb24gb2YgdGhpcy4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZVJlbW90ZVJlc291
cmNlKTogUGFzcyB0aGUgdXNlIGNvdW50IHRvIHRoZSBSZW1vdGVSZXNvdXJjZUNhY2hlLgorICAg
ICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOiBBZGQg
dGhlIHVzZSBjb3VudCBmaWVsZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46IERpdHRvLgorICAgICAgICAqIEdQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlSW1hZ2VCdWZmZXIpOiBJdCdzIGFjdHVhbGx5IG9rYXkg
aWYgdGhlcmUncyBhbHJlYWR5IGFuIHJlc291cmNlIGNhY2hlZC4KKyAgICAgICAgVGhhdCBqdXN0
IG1lYW5zIHRoYXQgdGhlIHdlYiBwcm9jZXNzIHN0YXJ0ZWQgdXNpbmcgYSByZXNvdXJjZSBhZ2Fp
biBiZWZvcmUgdGhlIEdQVSBwcm9jZXNzIGNvbnN1bWVkIGFsbAorICAgICAgICBjb21tYW5kcyB0
aGF0IHVzZWQgaXQgdGhlIGZpcnN0IHRpbWUuIEFsbCB3ZSBuZWVkIHRvIGRvIGlzIGluY3JlbWVu
dCB0aGUgb3BlbiBjb3VudC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZTo6
Y2FjaGVOYXRpdmVJbWFnZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJj
ZUNhY2hlOjpjYWNoZUZvbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3Vy
Y2VDYWNoZTo6ZW5zdXJlUmVzb3VyY2VVc2VDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVzb3VyY2VDYWNoZTo6bWF5YmVSZW1vdmVSZXNvdXJjZSk6IFRoaXMgaXMgY2FsbGVkIHdo
ZW5ldmVyIGl0J3MgcG9zc2libGUgZm9yIHVzIHRvIGJlIGluCisgICAgICAgIHNpdHVhdGlvbiB3
aGVyZSB3ZSBzaG91bGQgYmUgcmVtb3ZpbmcgYSByZXNvdXJjZSAoYWthIHdoZW5ldmVyIHRoZSB1
c2UgY291bnQgaW5jcmVtZW50cykuIEl0IGNoZWNrcyB0byBzZWUKKyAgICAgICAgaWYgd2UgY2Fu
IHJlbW92ZSB0aGUgcmVzb3VyY2UsIGFuZCBpZiBpdCBjYW4sIGRvZXMgc28uCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGU6OnJlY29yZFJlc291cmNlVXNlKTogVGhlIGNhbGxi
YWNrIHRoYXQgcnVucyBmb3IgZWFjaCByZXNvdXJjZSB1c2UgZHVyaW5nCisgICAgICAgIHJlcGxh
eWluZy4gSXQgY2FuJ3QgYWN0dWFsbHkgZGVsZXRlIGFueSByZXNvdXJjZXMsIHNvIGluc3RlYWQg
aXQganVzdCByZWNvcmRzIHdoaWNoIHJlc291cmNlcyBoYWQgdGhlaXIKKyAgICAgICAgdXNlIGNv
dW50cyBpbmNyZW1lbnRlZCwgYW5kIHdhaXRzIGZvciBwcnVuZSgpIHRvIGFjdHVhbGx5IGNhbGwg
bWF5YmVSZW1vdmVSZXNvdXJjZSgpLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNh
Y2hlOjpwcnVuZSk6IEFmdGVyIHRoZSByZXBsYXkgaXMgY29tcGxldGUsIGNhbGwgbWF5YmVSZW1v
dmVSZXNvdXJjZSgpIG9uIGFsbCB0aGUKKyAgICAgICAgcmVzb3VyY2VzIHdoaWNoIGhhZCB0aGVp
ciB1c2UgY291bnRlcnMgdG91Y2hlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VD
YWNoZTo6cmVsZWFzZVJlbW90ZVJlc291cmNlKTogUHV0IHRoZSByZWxldmFudCByZXNvdXJjZSBp
bnRvIHRoZSBzdGF0ZSB3aGVyZSB3ZQorICAgICAgICBhcmUgd2FpdGluZyBmb3IgdGhlIHVzZSBj
b3VudGVycyB0byBtYXRjaCBiZWZvcmUgd2UgY2FuIGRlbGV0ZSB0aGUgcmVzb3VyY2UuIEFsc28s
IGNhbGwgbWF5YmVSZW1vdmVSZXNvdXJjZSgpCisgICAgICAgIHNvIGl0IGNhbiBiZSBkZWxldGVk
IGltbWVkaWF0ZWx5IGlmIHRoZSBjb3VudGVycyBhbHJlYWR5IG1hdGNoLgorICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oOiBBZGQgYSBuZXcgZGF0YSBz
dHJ1Y3R1cmUgdG8gaG9sZCB0aGUgdXNlIGNvdW50ZXJzLiBUaGVyZSdzCisgICAgICAgIGEgYmln
IGNvbW1lbnQgaW4gaGVyZSB0aGF0IGRlc2NyaWJlcyB3aGF0IHRoZXNlIGZpZWxkcyBtZWFuLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
aDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdl
QnVmZmVyUHJveHkpOiBTZW5kIGEgZHVtbXkgdXNlIGNvdW50IGZvciBub3cuIFRoaXMgd2lsbCBi
ZQorICAgICAgICBpbXBsZW1lbnRlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VSZW1v
dGVSZXNvdXJjZSk6IEFkZCB0aGUgdXNlQ291bnQgcGFyYW1ldGVyLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBEaXR0by4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJv
eHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OnJlbGVh
c2VOYXRpdmVJbWFnZSk6IFNlbmQgYSBkdW1teSB1c2UgY291bnQgZm9yIG5vdy4gVGhpcyB3aWxs
IGJlCisgICAgICAgIGltcGxlbWVudGVkIGluIGEgZm9sbG93LXVwIHBhdGNoLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmNsZWFyRm9udE1hcCk6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmZpbmFsaXplUmVuZGVy
aW5nVXBkYXRlRm9yRm9udHMpOiBEaXR0by4KKwogMjAyMS0wNy0yMyAgUm9iZXJ0IEplbm5lciAg
PEplbm5lckBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyODAy
MDUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKaW5kZXggZjM3MGI0
MTE4ZDAyNDNhMWIyOWJiYTAyMTBmODk3NDcyOTM3YTg1My4uMzU2MWRhMGJkMTIyNmNiYzk1Mjdl
YWZlZDEzNDU3N2RkZjhkM2UzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxh
eWVyLmNwcApAQCAtMjMyLDYgKzIzMiw5IEBAIFJlcGxheVJlc3VsdCBSZXBsYXllcjo6cmVwbGF5
KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGJvb2wgdHJhY2tSZXBsYXlMaXN0CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAgICAgbV9kZWxlZ2F0ZS0+
ZGlkQ29tcGxldGVSZXBsYXlpbmcoKTsKKwogICAgIHJlc3VsdC50cmFja2VkRGlzcGxheUxpc3Qg
PSBXVEZNb3ZlKHJlcGxheUxpc3QpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZXBsYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaAppbmRleCAxNjYyN2EwMjA2ZTMwOTI0M2Y4YjdiZDE4
Y2RiM2RhNTg2MDc4YThmLi41NzkzOWVlOTc3ZWQ0ZWM0NThhMGQ0NTkyZDlkY2RiNzJhZmNmMDMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZXBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKQEAgLTY4LDYgKzY4LDcg
QEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoSXRlbUhhbmRsZSwgR3JhcGhp
Y3NDb250ZXh0JikgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZENy
ZWF0ZU1hc2tJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIHsgfQogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIoKSB7IH0KKyAgICAgICAgdmlydHVh
bCB2b2lkIGRpZENvbXBsZXRlUmVwbGF5aW5nKCkgeyB9CiAgICAgfTsKICAgICAKIHByaXZhdGU6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggZWE4Mjg2ZGEwYzlkZTRkZmNhN2RlMzViZTMz
N2RmMDMyYzAzN2U3ZS4uYzEwNmY0MmNjNGYzNTU1NGVkOTIzMmIwMzVlMzgzNWFiMjAyYzg5MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMjE0LDYgKzIxNCwxMiBAQCB2b2lkIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OmRpZFJlc2V0TWFza0ltYWdlQnVm
ZmVyKCkKICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZGlkUmVzZXRNYXNrSW1hZ2VCdWZm
ZXIoKTsKIH0KIAordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRl
OjpkaWRDb21wbGV0ZVJlcGxheWluZygpCit7CisgICAgYXV0byBtZXNzYWdlc0FyZUluT3JkZXIg
PSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQucmVtb3RlUmVzb3VyY2VDYWNoZSgpLnBydW5lKCk7
CisgICAgTUVTU0FHRV9DSEVDSyhtZXNzYWdlc0FyZUluT3JkZXIsICJXZWIgcHJvY2VzcyB0cmll
ZCB0byByZWxlYXNlIGEgcmVzb3VyY2UgdGhhdCB3YXNuJ3QgY2FjaGVkIik7Cit9CisKIERpc3Bs
YXlMaXN0OjpSZXBsYXlSZXN1bHQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c3VibWl0KGNvbnN0
IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIEltYWdlQnVmZmVyJiBkZXN0
aW5hdGlvbikKIHsKICAgICBpZiAoZGlzcGxheUxpc3QuaXNFbXB0eSgpKQpAQCAtNTA5LDEwICs1
MTUsMTEgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkZWxldGVBbGxGb250cygpCiAg
ICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmRlbGV0ZUFsbEZvbnRzKCk7CiB9CiAKLXZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZShSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCkK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBtX3JlbW90ZVJlc291cmNl
Q2FjaGUucmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7
CisgICAgYXV0byBzdWNjZXNzID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLnJlbGVhc2VSZW1vdGVS
ZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVzZUNvdW50KTsKKyAgICBNRVNT
QUdFX0NIRUNLKHN1Y2Nlc3MsICJSZXNvdXJjZSBpcyBiZWluZyByZWxlYXNlZCBiZWZvcmUgYmVp
bmcgY2FjaGVkLiIpOwogICAgIHVwZGF0ZVJlbmRlcmluZ1Jlc291cmNlUmVxdWVzdCgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCBmN2JmNmJjM2IwNzNhZGJlYWU2ZjZiODYyZmEzNjdm
NmFiMDBlNWIwLi44NzI2MjlmMDI1M2JmNGI2OTM2ODJiNzAyMjMyODVmZmI2MTM1NmQzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTE0NCw3ICsxNDQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdl
YkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsKLSAgICB2b2lkIHJl
bGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
OworICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpOwogICAgIHZvaWQgZGlkQ3JlYXRlU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVu
dGlmaWVyLCBjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOwogCiAgICAg
Y2xhc3MgUmVwbGF5ZXJEZWxlZ2F0ZSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVw
bGF5ZXI6OkRlbGVnYXRlIHsKQEAgLTE1NSw2ICsxNTUsNyBAQCBwcml2YXRlOgogICAgICAgICBi
b29sIGFwcGx5KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlLCBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmKSBmaW5hbDsKICAgICAgICAgdm9pZCBkaWRDcmVhdGVNYXNrSW1hZ2VCdWZm
ZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKSBmaW5hbDsKICAgICAgICAgdm9pZCBkaWRSZXNldE1h
c2tJbWFnZUJ1ZmZlcigpIGZpbmFsOworICAgICAgICB2b2lkIGRpZENvbXBsZXRlUmVwbGF5aW5n
KCkgZmluYWw7CiAKICAgICAgICAgV2ViQ29yZTo6SW1hZ2VCdWZmZXImIG1fZGVzdGluYXRpb247
CiAgICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmIG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggNGIzZmU5YTAy
NjJlOGE1NDkxODUyYzZkNmEwNDA0NWQ2YTY5NjM5Ny4uZmY2MmFmNTExZjNlMmU1Y2ViZjQ3NDFi
YjM1MDMzODQ5NGUzOGViNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMu
aW4KQEAgLTM2LDcgKzM2LDcgQEAgbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB7
CiAgICAgQ2FjaGVGb250KElQQzo6Rm9udFJlZmVyZW5jZSBmb250KQogICAgIERlbGV0ZUFsbEZv
bnRzKCkKICAgICBEaWRDcmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpTaGFyZWRN
ZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpCi0gICAgUmVsZWFzZVJlbW90ZVJlc291
cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpCisgICAgUmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90
IHVzZUNvdW50KQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUu
Y3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2Fj
aGUuY3BwCmluZGV4IDgxZGRlMGJmZmNmMGJkNmNjMWMyOGU1ZGQyNDYzNzRiMzQ2NDYyNzguLjY1
MjZmZDVjYzBjZTU2YWJkNTBmNWQxZmU2NTdiZDAxMTk0OGI0MmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5j
cHAKQEAgLTMzLDggKzMzLDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiB2b2lkIFJl
bW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlSW1hZ2VCdWZmZXIoUmVmPEltYWdlQnVmZmVyPiYmIGlt
YWdlQnVmZmVyKQogewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlcnMuYWRkKGlt
YWdlQnVmZmVyLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgV1RGTW92ZShpbWFnZUJ1
ZmZlcikpOwotICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CisgICAgYXV0byByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPSBpbWFnZUJ1ZmZlci0+
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAgbV9pbWFnZUJ1ZmZlcnMuYWRkKHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV1RGTW92ZShpbWFnZUJ1ZmZlcikpOworCisgICAg
ZW5zdXJlUmVzb3VyY2VVc2VDb3VudGVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiB9
CiAKIEltYWdlQnVmZmVyKiBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZWRJbWFnZUJ1ZmZlcihS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQpA
QCAtNDQsMTQgKzQ2LDI4IEBAIEltYWdlQnVmZmVyKiBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNo
ZWRJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIKIAogdm9pZCBSZW1vdGVS
ZXNvdXJjZUNhY2hlOjpjYWNoZU5hdGl2ZUltYWdlKFJlZjxOYXRpdmVJbWFnZT4mJiBpbWFnZSkK
IHsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmF0aXZlSW1hZ2VzLmFkZChpbWFnZS0+cmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIFdURk1vdmUoaW1hZ2UpKTsKLSAgICBBU1NFUlRfVU5V
U0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIGF1dG8gcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyID0gaW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigp
OworICAgIG1fbmF0aXZlSW1hZ2VzLmFkZChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdU
Rk1vdmUoaW1hZ2UpKTsKKworICAgIGVuc3VyZVJlc291cmNlVXNlQ291bnRlcihyZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hl
Rm9udChSZWY8Rm9udD4mJiBmb250KQogewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9mb250cy5h
ZGQoZm9udC0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIFdURk1vdmUoZm9udCkpOwot
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAg
YXV0byByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPSBmb250LT5yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIoKTsKKyAgICBtX2ZvbnRzLmFkZChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIFdURk1vdmUoZm9udCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VVc2VDb3VudGVyKHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZTo6
ZW5zdXJlUmVzb3VyY2VVc2VDb3VudGVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit7CisgICAgYXV0byByZXN1bHQgPSBt
X3Jlc291cmNlVXNlQ291bnRlcnMuZW5zdXJlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
WyZdIHsKKyAgICAgICAgcmV0dXJuIFJlc291cmNlVXNlQ291bnRlciB7IH07CisgICAgfSk7Cisg
ICAgYXV0byYgc3RhdGUgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnN0YXRlOworICAgIFJFTEVB
U0VfQVNTRVJUKHN0YXRlID09IFJlc291cmNlU3RhdGU6OlRvQmVEZWxldGVkKTsKKyAgICBzdGF0
ZSA9IFJlc291cmNlU3RhdGU6OkFsaXZlOwogfQogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6
OmRlbGV0ZUFsbEZvbnRzKCkKQEAgLTU5LDE2ICs3NSw3MCBAQCB2b2lkIFJlbW90ZVJlc291cmNl
Q2FjaGU6OmRlbGV0ZUFsbEZvbnRzKCkKICAgICBtX2ZvbnRzLmNsZWFyKCk7CiB9CiAKLXZvaWQg
UmVtb3RlUmVzb3VyY2VDYWNoZTo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCitib29sIFJlbW90ZVJl
c291cmNlQ2FjaGU6Om1heWJlUmVtb3ZlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgUmVzb3VyY2VVc2VDb3Vu
dGVyc01hcDo6aXRlcmF0b3IgaXRlcmF0b3IpCiB7CisgICAgLy8gSXQncyBhY3R1YWxseSBva2F5
IGlmIHVzZUNvdW50ID4gMC4KKyAgICAvLyBJdCBqdXN0IG1lYW5zIHRoYXQgdGhlcmUncyBhIGNh
Y2hlIG1lc3NhZ2UgcGVuZGluZywgYW5kIHdlJ3ZlIGVhZ2VybHkgdXNlZCBhIHByZXZpb3VzbHkt
Y2FjaGVkIHJlc291cmNlLgorICAgIC8vIFdoaWNoIGlzIGZpbmUuCisgICAgLy8gRklYTUU6IE1h
eWJlIHdlIHNob3VsZG4ndCBhY3R1YWxseSByZW1vdmUgdGhlIHJlc291cmNlIGluIHRoaXMgc2l0
dWF0aW9uPworICAgIC8vIFdlIG1heSBhY3R1YWxseSBiZSBhYmxlIHRvIGdldCBhIGhlYWQgc3Rh
cnQgb24gc29tZSBkaXNwbGF5IGxpc3QgaXRlbXMgaWYgdGhleSdyZSByZWFkeSBmb3IgdXMgYW5k
IHdlIGhhdmUgdGhlIHJlc291cmNlcyB0aGV5IGRlcGVuZCBvbi4KKworICAgIGF1dG8mIHZhbHVl
ID0gaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICh2YWx1ZS5zdGF0ZSA9PSBSZXNvdXJjZVN0YXRl
OjpBbGl2ZSB8fCB2YWx1ZS51c2VPclBlbmRpbmdDb3VudCA8IDApCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKCF2YWx1ZS51c2VPclBlbmRpbmdDb3VudCkKKyAgICAgICAgbV9yZXNv
dXJjZVVzZUNvdW50ZXJzLnJlbW92ZShpdGVyYXRvcik7CisKICAgICBpZiAobV9pbWFnZUJ1ZmZl
cnMucmVtb3ZlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKG1fbmF0aXZlSW1hZ2VzLnJlbW92ZShyZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB0cnVlOwogICAgIGlmIChtX2ZvbnRzLnJlbW92ZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgLy8gQ2Fj
aGluZyB0aGUgcmVtb3RlIHJlc291cmNlIHNob3VsZCBoYXZlIGhhcHBlbmVkIGJlZm9yZSByZWxl
YXNpbmcgaXQuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OnJlY29yZFJlc291cmNlVXNlKFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
Cit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcmVzb3VyY2VVc2VDb3VudGVycy5maW5kKHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9yZXNvdXJj
ZVVzZUNvdW50ZXJzLmVuZCgpKSB7CisgICAgICAgIC8vIFRoZSBkaXNwbGF5IGxpc3QgaXRlbXMg
d29uIHRoZSByYWNlIGFnYWluc3QgdGhlIGNhY2hlRm9udCBtZXNzYWdlLgorICAgICAgICAvLyBX
aGVuIHdlIHJlY2VpdmUgdGhlIGNhY2hlRm9udCBtZXNzYWdlLCB3ZSB3aWxsIHJldHJ5IHRoZSBk
aXNwbGF5IGxpc3QgaXRlbS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlc291cmNl
VXNlQ291bnRlciYgdXNlQ291bnRlciA9IGl0ZXJhdG9yLT52YWx1ZTsKKyAgICArK3VzZUNvdW50
ZXIudXNlT3JQZW5kaW5nQ291bnQ7CisKKyAgICBtX3Jlc291cmNlc0Zvck1heWJlUmVtb3Zpbmcu
YWRkKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Cit9CisKK2Jvb2wgUmVtb3RlUmVzb3Vy
Y2VDYWNoZTo6cHJ1bmUoKQoreworICAgIGZvciAoYXV0byByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgOiBtX3Jlc291cmNlc0Zvck1heWJlUmVtb3ZpbmcpIHsKKyAgICAgICAgYXV0byBpdGVy
YXRvciA9IG1fcmVzb3VyY2VVc2VDb3VudGVycy5maW5kKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcik7CisgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3Jlc291cmNlVXNlQ291bnRlcnMu
ZW5kKCkpOworICAgICAgICBhdXRvIG1lc3NhZ2VzQXJlSW5PcmRlciA9IG1heWJlUmVtb3ZlUmVz
b3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBpdGVyYXRvcik7CisgICAgICAgIGlm
ICghbWVzc2FnZXNBcmVJbk9yZGVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBtX3Jlc291cmNlc0Zvck1heWJlUmVtb3ZpbmcuY2xlYXIoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpyZWxlYXNlUmVtb3RlUmVzb3VyY2Uo
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
dWludDY0X3QgdXNlQ291bnQpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcmVzb3VyY2VVc2VD
b3VudGVycy5maW5kKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgaWYgKGl0ZXJh
dG9yID09IG1fcmVzb3VyY2VVc2VDb3VudGVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIFJlc291cmNlVXNlQ291bnRlciYgdXNlQ291bnRlciA9IGl0ZXJhdG9yLT52YWx1ZTsK
KyAgICB1c2VDb3VudGVyLnN0YXRlID0gUmVzb3VyY2VTdGF0ZTo6VG9CZURlbGV0ZWQ7CisgICAg
dXNlQ291bnRlci51c2VPclBlbmRpbmdDb3VudCAtPSB1c2VDb3VudDsKKyAgICByZXR1cm4gbWF5
YmVSZW1vdmVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGl0ZXJhdG9yKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuaAppbmRleCAyY2VkOTA5ZjQ4
MTEwYzY2NjU2ZGUxYmZlMzgxMWRiYWJhYWE5ZjRmLi43Y2VmNzg1MDgwYjEzOGEwMDBiNGZlMTll
YzBkODhkYzUwMjdhZTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmgKQEAgLTQ2LDE2ICs0Niw0OCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKFJlZjxXZWJDb3JlOjpOYXRpdmVJbWFnZT4m
Jik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQg
ZGVsZXRlQWxsRm9udHMoKTsKLSAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIGJvb2wgcmVsZWFzZVJlbW90ZVJl
c291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNl
Q291bnQpOworICAgIHZvaWQgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKTsKKyAgICBib29sIHBydW5lKCk7CiAKICAgICBjb25zdCBXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckhhc2hNYXAmIGltYWdlQnVmZmVycygpIGNvbnN0IHsgcmV0dXJuIG1faW1h
Z2VCdWZmZXJzOyB9CiAgICAgY29uc3QgV2ViQ29yZTo6TmF0aXZlSW1hZ2VIYXNoTWFwJiBuYXRp
dmVJbWFnZXMoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUltYWdlczsgfQogICAgIGNvbnN0IFdl
YkNvcmU6OkZvbnRSZW5kZXJpbmdSZXNvdXJjZU1hcCYgZm9udHMoKSBjb25zdCB7IHJldHVybiBt
X2ZvbnRzOyB9CiAKIHByaXZhdGU6CisgICAgLy8gQmVjYXVzZSB0aGUgY2FjaGUvcmVsZWFzZSBt
ZXNzYWdlcyBhcmUgc2VudCBhc3luY2hyb25vdXNseSBmcm9tIHRoZSBkaXNwbGF5IGxpc3QgaXRl
bXMgd2hpY2gKKyAgICAvLyByZWZlcmVuY2UgdGhlIHJlc291cmNlcywgaXQncyB0b3RhbGx5IHBv
c3NpYmxlIHRoYXQgd2Ugc2VlIGEgcmVsZWFzZSBtZXNzYWdlIGJlZm9yZSB3ZSd2ZQorICAgIC8v
IGV4ZWN1dGVkIGFsbCB0aGUgZGlzcGxheSBsaXN0IGl0ZW1zIHdoaWNoIHJlZmVyZW5jZSB0aGUg
cmVzb3VyY2UuIFRoZSB3ZWIgcHJvY2VzcyB0ZWxscyB1cworICAgIC8vIGhvdyBtYW55IGRpc3Bs
YXkgbGlzdCBpdGVtcyB3aWxsIHJlZmVyZW5jZSB0aGlzIHJlc291cmNlLCBhbmQgd2UgZGVmZXIg
ZGVsZXRpb24gb2YgdGhlIHJlc291cmNlCisgICAgLy8gdW50aWwgd2UgZXhlY3V0ZSB0aGF0IG1h
bnkgZGlzcGxheSBsaXN0IGl0ZW1zLgorICAgIC8vCisgICAgLy8gSXQncyBhY3R1YWxseSBhIGJp
dCB3b3JzZSB0aGFuIHRoaXMsIHRob3VnaCwgYmVjYXVzZSB3ZSBtYXkgYWN0dWFsbHkgc2VlIGEg
Km5ldyogY2FjaGUgbWVzc2FnZQorICAgIC8vIGR1cmluZyB0aGUgdGltZSB3aGVuIGRlbGV0aW9u
IGlzIGRlZmVycmVkLCBzbyB3ZSBuZWVkIGEgc2Vjb25kIGNvdW50IG9mIHRoZSBudW1iZXIgb2Yg
Y2FjaGUKKyAgICAvLyBtZXNzYWdlcyB3aGljaCBkb24ndCBoYXZlIGFuIGFjY29tcGFueWluZyBy
ZWxlYXNlIG1lc3NhZ2VzLgorICAgIC8vCisgICAgLy8gV2UgY2FuIG9ubHkgc2FmZWx5IGRlbGV0
ZSBhIHJlc291cmNlIHdoZW46CisgICAgLy8gMS4gQWxsIHRoZSBjYWNoZSBtZXNzYWdlcyBoYXZl
IGFuIGFjY29tcGFueWluZyByZWxlYXNlIG1lc3NhZ2UsIGFuZAorICAgIC8vIDIuIFdlJ3ZlIHBy
b2Nlc3NlZCBhcyBtYW55IGRpc3BsYXkgbGlzdCBpdGVtcyB0aGF0IHJlZmVyZW5jZSBhIHBhcnRp
Y3VsYXIgcmVzb3VyY2UgYXMgdGhlIHdlYgorICAgIC8vIHByb2Nlc3MgaGFzIGVuY29kZWQuCisg
ICAgZW51bSBjbGFzcyBSZXNvdXJjZVN0YXRlIHsKKyAgICAgICAgQWxpdmUsCisgICAgICAgIFRv
QmVEZWxldGVkCisgICAgfTsKKyAgICBzdHJ1Y3QgUmVzb3VyY2VVc2VDb3VudGVyIHsKKyAgICAg
ICAgUmVzb3VyY2VTdGF0ZSBzdGF0ZSB7IFJlc291cmNlU3RhdGU6OlRvQmVEZWxldGVkIH07Cisg
ICAgICAgIGludDY0X3QgdXNlT3JQZW5kaW5nQ291bnQgeyAwIH07CisgICAgfTsKKyAgICB1c2lu
ZyBSZXNvdXJjZVVzZUNvdW50ZXJzTWFwID0gSGFzaE1hcDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIFJlc291cmNlVXNlQ291bnRlcj47CisKKyAgICBib29sIG1heWJlUmVt
b3ZlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBSZXNvdXJj
ZVVzZUNvdW50ZXJzTWFwOjppdGVyYXRvcik7CisgICAgdm9pZCBlbnN1cmVSZXNvdXJjZVVzZUNv
dW50ZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKwogICAgIFdlYkNv
cmU6OkltYWdlQnVmZmVySGFzaE1hcCBtX2ltYWdlQnVmZmVyczsKICAgICBXZWJDb3JlOjpOYXRp
dmVJbWFnZUhhc2hNYXAgbV9uYXRpdmVJbWFnZXM7CiAgICAgV2ViQ29yZTo6Rm9udFJlbmRlcmlu
Z1Jlc291cmNlTWFwIG1fZm9udHM7CisKKyAgICBSZXNvdXJjZVVzZUNvdW50ZXJzTWFwIG1fcmVz
b3VyY2VVc2VDb3VudGVyczsKKyAgICBIYXNoU2V0PFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcj4gbV9yZXNvdXJjZXNGb3JNYXliZVJlbW92aW5nOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCmluZGV4IGI0NDhiMzdmOTdm
ZTdhZTY1ZGJlYmIyYTg1YWIwYzk5NGUxZjI2YmQuLmQ0Y2JjMmMwYzkwMzQzMDU5NjhmMjc3YjU1
MzYxYmIyNzQ4MmZlYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC03Miw3ICs3
Miw3IEBAIHB1YmxpYzoKIAogICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CiAgICAgICAg
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHko
KS5yZWxlYXNlSW1hZ2VCdWZmZXIobV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAg
ICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVsZWFzZVJlbW90ZVJlc291cmNl
KG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICAgICAgbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHktPnJlbGVhc2VSZW1vdGVSZXNvdXJjZShtX3JlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwgMCk7IC8vIEZJWE1FOiBQYXNzIHRoZSByZWFsIHVzZSBjb3VudCBoZXJlLgog
ICAgIH0KIAogICAgIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBjcmVhdGVJbWFnZUJ1ZmZlckJh
Y2tlbmRIYW5kbGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmlu
ZGV4IDA5Y2U0YzZlZjZkNmFiZTcxZTAzZWFiN2ZhOGNkMjE0ZmY2OGIwZmUuLmU5NWYxYWQzOTM0
ZjI1NGJkNWY5OWQyM2E1YjQ2NTU1MzVjZTA5MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5jcHAKQEAgLTI0OSwxMiArMjQ5LDEyIEBAIHZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpkZWxldGVBbGxGb250cygpCiAgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6RGVsZXRlQWxsRm9udHMoKSwgcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRp
bmdGb3JTeW5jUmVwbHkpOwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KQogewogICAgIGlmIChyZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPT0gbV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZl
cklkZW50aWZpZXIpCiAgICAgICAgIG1fY3VycmVudERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVu
dGlmaWVyID0gc3RkOjpudWxsb3B0OwogCi0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6UmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlz
cGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1c2VDb3VudCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9y
U3luY1JlcGx5KTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRpZENy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZChJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlLCBS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKaW5kZXggNjMxNDk2NzBhMzU5NGUy
NWEyZGE1Y2QxOTc2MTE0NjFjNjE3OTc0MC4uYjJjZTNkOGMyOGFiMTkxMjUzNTE5MDI3ZmM5MDc0
ZDIwZWQxNzI4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCkBAIC0x
MDQsNyArMTA0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFnZShjb25zdCBT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZv
aWQgZGVsZXRlQWxsRm9udHMoKTsKLSAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZVJlbW90
ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3Qg
dXNlQ291bnQpOwogCiAgICAgZW51bSBjbGFzcyBEaWRSZWNlaXZlQmFja2VuZENyZWF0aW9uUmVz
dWx0IDogYm9vbCB7CiAgICAgICAgIFJlY2VpdmVkQW55UmVzcG9uc2UsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
c291cmNlQ2FjaGVQcm94eS5jcHAKaW5kZXggMDNmMzRiMzNhMjJkZDQ5MjhkNDI2MGU0Nzg2MmQz
OTEzNzExMDFhZi4uNDE0ZTE5OTZlOGJjMjk5NWI3ZjcwNzZhZTZhNTIxNGQ2MzY3NjY4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNv
dXJjZUNhY2hlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcApAQCAtMTIxLDggKzEyMSw3IEBAIHZv
aWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpyZWxlYXNlTmF0aXZlSW1hZ2UoUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlCiAgICAgaWYgKCFtX25hdGl2ZUltYWdlcy5yZW1vdmUocmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gVGVs
bCB0aGUgR1BVIHByb2Nlc3MgdG8gcmVtb3ZlIHRoaXMgcmVzb3VyY2UuCi0gICAgbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7CisgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVsZWFz
ZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgMCk7IC8vIEZJWE1F
OiBQYXNzIHRoZSByZWFsIHVzZSBjb3VudCBoZXJlLgogfQogCiB2b2lkIFJlbW90ZVJlc291cmNl
Q2FjaGVQcm94eTo6cHJlcGFyZUZvck5leHRSZW5kZXJpbmdVcGRhdGUoKQpAQCAtMTM0LDcgKzEz
Myw3IEBAIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpwcmVwYXJlRm9yTmV4dFJlbmRl
cmluZ1VwZGF0ZSgpCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6Y2xlYXJGb250TWFw
KCkKIHsKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2ZvbnRJZGVudGlmaWVyVG9MYXN0UmVuZGVy
aW5nVXBkYXRlVmVyc2lvbk1hcCkKLSAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkucmVsZWFzZVJlbW90ZVJlc291cmNlKGl0ZW0ua2V5KTsKKyAgICAgICAgbV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJlc291cmNlKGl0ZW0ua2V5LCAwKTsgLy8g
RklYTUU6IFBhc3MgdGhlIHJlYWwgdXNlIGNvdW50IGhlcmUuCiAgICAgbV9mb250SWRlbnRpZmll
clRvTGFzdFJlbmRlcmluZ1VwZGF0ZVZlcnNpb25NYXAuY2xlYXIoKTsKICAgICBtX251bWJlck9m
Rm9udHNVc2VkSW5DdXJyZW50UmVuZGVyaW5nVXBkYXRlID0gMDsKIH0KQEAgLTE1Miw3ICsxNTEs
NyBAQCB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6ZmluYWxpemVSZW5kZXJpbmdVcGRh
dGVGb3JGb250cygpCiAgICAgZm9yIChhdXRvJiBpdGVtIDogbV9mb250SWRlbnRpZmllclRvTGFz
dFJlbmRlcmluZ1VwZGF0ZVZlcnNpb25NYXApIHsKICAgICAgICAgaWYgKG1fY3VycmVudFJlbmRl
cmluZ1VwZGF0ZVZlcnNpb24gLSBpdGVtLnZhbHVlID49IG1pbmltdW1SZW5kZXJpbmdVcGRhdGVD
b3VudFRvS2VlcEZvbnRBbGl2ZSkgewogICAgICAgICAgICAgdG9SZW1vdmUuYWRkKGl0ZW0ua2V5
KTsKLSAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LnJlbGVhc2VSZW1v
dGVSZXNvdXJjZShpdGVtLmtleSk7CisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UoaXRlbS5rZXksIDApOyAvLyBGSVhNRTogUGFz
cyB0aGUgcmVhbCB1c2UgY291bnQgaGVyZS4KICAgICAgICAgfQogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434139</attachid>
            <date>2021-07-23 16:14:55 -0700</date>
            <delta_ts>2021-07-23 17:03:53 -0700</delta_ts>
            <desc>Reworked struct ResourceUseCounter</desc>
            <filename>bug-228222-20210723161454.patch</filename>
            <type>text/plain</type>
            <size>25279</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMjU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzIxMDliYmJjNGM0OWNm
YmYxZGYyZWM2OWMyYWI5ZmQxNjU5NWY0Ny4uZmIzNzcxYzgxOThkYWE0ZjIzYmYxY2RiMDliYjNj
YmQ3MmUyZTI4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIxLTA3LTIzICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9j
ZXNzXSBBZGQgcmVzb3VyY2UgdXNlIGNvdW50ZXIgaW5mcmFzdHJ1Y3R1cmUgdG8gUmVtb3RlUmVz
b3VyY2VDYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI4MjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBpcyBwYXJ0IDIgb2YgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyODIxNi4KKworICAgICAgICBVc2luZyBEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6OkRlbGVn
YXRlIHRvIHRyYWNrIGhvdyBtYW55IHRpbWVzIGEgcmVzb3VyY2UgaXMgdXNlZCBpbiBhIGRpc3Bs
YXkgbGlzdCBpcyBhIG5hdHVyYWwgZml0LgorICAgICAgICBIb3dldmVyLCBpZiB0aGUgR1BVIHBy
b2Nlc3MgZGV0ZXJtaW5lcyB0aGF0IGEgcmVzb3VyY2UgaGFzIGhpdCBpdHMgdXNlIGxpbWl0IGFu
ZCBpcyByZWFkeSB0byBiZSBkZXN0cm95ZWQsIGl0IGNhbid0CisgICAgICAgIGFjdHVhbGx5IGRl
c3Ryb3kgaXQgaW1tZWRpYXRlbHksIGJlY2F1c2UgdGhlIGRlbGVnYXRlJ3MgY2FsbGJhY2sgaXMg
Y2FsbGVkIGJlZm9yZSBhY3R1YWxseSBleGVjdXRpbmcgdGhlIGRpc3BsYXkKKyAgICAgICAgbGlz
dCBpdGVtICh3aGljaCBuZWVkcyB0byBzZWUgdGhlIHJlc291cmNlKS4gQW5kIGl0IGhhcyB0byBl
eGVjdXRlIGJlZm9yZSBleGVjdXRpbmcgdGhlIGRpc3BsYXkgbGlzdCBpdGVtIGJlY2F1c2UKKyAg
ICAgICAgdGhlIGRlbGVnYXRlIGFjdHVhbGx5IGltcGxlbWVudHMgdGhlIGRpc3BsYXkgbGlzdCBp
dGVtIGZvciB0aGluZ3MgbGlrZSBnZXRJbWFnZURhdGEuIFNvLCB0aGlzIHBhdGNoIGFkZHMgYW5v
dGhlcgorICAgICAgICBtZXRob2QgdG8gdGhlIGRlbGVnYXRlOiBkaWRDb21wbGV0ZVJlcGxheWlu
ZygpLCB3aGljaCBpcyBjYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgcmVwbGF5LiBUaGUgR1BVIHBy
b2Nlc3Mgd2lsbAorICAgICAgICByZW1lbWJlciB3aGljaCByZXNvdXJjZXMgd2VyZSB1c2VkIGR1
cmluZyB0aGUgcmVwbGF5LCBhbmQgaW5jcmVtZW50IHRoZSByZWxldmFudCBjb3VudGVycywgYnV0
IG9ubHkgb25jZSB0aGUgcmVwbGF5CisgICAgICAgIGhhcyBmaW5pc2hlZCBjYW4gdGhlIEdQVSBw
cm9jZXNzIGFjdHVhbGx5IGRlbGV0ZSB0aGVzZSByZXNvdXJjZXMuIFRoYXQgb2NjdXJzIGluIHRo
aXMgbmV3IGRlbGVnYXRlIG1ldGhvZC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0
aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UgeWV0LiBUaGlzIHBhdGNoIGlzIGp1c3QgYWRkaW5n
IGluZnJhc3RydWN0dXJlLiBGb3Igbm93LCBhbGwgdGhlc2UKKyAgICAgICAgdXNlIGNvdW50cyBz
ZW50IGJ5IHRoZSB3ZWIgcHJvY2VzcyBhcmUgMCAtIEknbGwgaW1wbGVtZW50IHRoYXQgcGFydCBp
biAzIGZvbGxvdy11cCBwYXRjaGVzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlcGxheWVyOjpyZXBsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVwbGF5ZXI6OkRlbGVnYXRlOjpkaWRDb21wbGV0ZVJlcGxheWluZyk6CisK
IDIwMjEtMDctMjMgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAg
ICAgICAgIFtKU0NdIENhbGwgY3VzdG9tIGFjY2Vzc29ycyAvIHZhbHVlcyB3aXRoIHRoZWlyIGhv
bGRlcidzIGdsb2JhbCBvYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOWM2ZTRlNTc5Y2ZlYmU0NWYyODI3NmJh
ZTE2ZDJkMzMwNzU3MjMzZS4uNWJlMGMxOWJiZTdkNTU3YWE0YjMwZDgyMjNkNzE4ZDhjNjNhYzUz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAyMS0wNy0yMyAgTXlsZXMgQy4gTWF4Zmll
bGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gQWRkIHJl
c291cmNlIHVzZSBjb3VudGVyIGluZnJhc3RydWN0dXJlIHRvIFJlbW90ZVJlc291cmNlQ2FjaGUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODIyMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWRkcyB0aGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGFzc29jaWF0aW5nIGEgY291bnRlciB3aXRo
IGVhY2ggcmVzb3VyY2UgaW4gdGhlIFJlbW90ZVJlc291cmNlQ2FjaGUuCisgICAgICAgIEFzIHRo
ZSB3ZWIgcHJvY2VzcyB1c2VzIGEgcmVzb3VyY2UgZHVyaW5nIGRpc3BsYXkgbGlzdCByZWNvcmRp
bmcsIGl0IGluY3JlbWVudHMgYSBjb3VudGVyLCBhbmQgYXMgdGhlIEdQVQorICAgICAgICBwcm9j
ZXNzIHVzZXMgYSByZXNvdXJjZSwgaXQgaW5jcmVtZW50cyBhIGNvdW50ZXIgaW4gdGhlIFJlbW90
ZVJlc291cmNlQ2FjaGUuIFdoZW4gdGhlIHdlYiBwcm9jZXNzIGlzIGRvbmUKKyAgICAgICAgd2l0
aCBhIHJlc291cmNlLCBpdCBzZW5kcyBhIHJlbGVhc2UgbWVzc2FnZSB0byB0aGUgR1BVIHByb2Nl
c3Mgd2hpY2ggY3J1Y2lhbGx5IGluY2x1ZGVzIHRoZSB3ZWIgcHJvY2VzcydzCisgICAgICAgIGNv
dW50ZXIuIFRoZSBHUFUgcHJvY2VzcyBoYXMgdG8gdGhlbiB3YWl0IHRvIGFjdHVhbGx5IGRlbGV0
ZSB0aGUgcmVzb3VyY2UgdW50aWwgaXRzIG93biB1c2UgY291bnRlciBtYXRjaGVzCisgICAgICAg
IHRoZSBvbmUgaXQgcmVjZWl2ZWQgZnJvbSB0aGUgd2ViIHByb2Nlc3MuIFRoaXMgcGF0Y2ggaW1w
bGVtZW50cyB0aGlzIGRlZmVycmVkIGRlbGV0aW9uIGluZnJhc3RydWN0dXJlCisgICAgICAgIGlu
IHRoZSBHUFUgcHJvY2Vzcy4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OmRpZENvbXBsZXRlUmVwbGF5aW5nKTogU2VlIHRoZSBX
ZWJDb3JlIENoYW5nZUxvZyBmb3IgYW4KKyAgICAgICAgZXhwbGFuYXRpb24gb2YgdGhpcy4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZVJlbW90ZVJlc291
cmNlKTogUGFzcyB0aGUgdXNlIGNvdW50IHRvIHRoZSBSZW1vdGVSZXNvdXJjZUNhY2hlLgorICAg
ICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOiBBZGQg
dGhlIHVzZSBjb3VudCBmaWVsZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46IERpdHRvLgorICAgICAgICAqIEdQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlSW1hZ2VCdWZmZXIpOiBJdCdzIGFjdHVhbGx5IG9rYXkg
aWYgdGhlcmUncyBhbHJlYWR5IGFuIHJlc291cmNlIGNhY2hlZC4KKyAgICAgICAgVGhhdCBqdXN0
IG1lYW5zIHRoYXQgdGhlIHdlYiBwcm9jZXNzIHN0YXJ0ZWQgdXNpbmcgYSByZXNvdXJjZSBhZ2Fp
biBiZWZvcmUgdGhlIEdQVSBwcm9jZXNzIGNvbnN1bWVkIGFsbAorICAgICAgICBjb21tYW5kcyB0
aGF0IHVzZWQgaXQgdGhlIGZpcnN0IHRpbWUuIEFsbCB3ZSBuZWVkIHRvIGRvIGlzIGluY3JlbWVu
dCB0aGUgb3BlbiBjb3VudC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZTo6
Y2FjaGVOYXRpdmVJbWFnZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJj
ZUNhY2hlOjpjYWNoZUZvbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3Vy
Y2VDYWNoZTo6ZW5zdXJlUmVzb3VyY2VVc2VDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVzb3VyY2VDYWNoZTo6bWF5YmVSZW1vdmVSZXNvdXJjZSk6IFRoaXMgaXMgY2FsbGVkIHdo
ZW5ldmVyIGl0J3MgcG9zc2libGUgZm9yIHVzIHRvIGJlIGluCisgICAgICAgIHNpdHVhdGlvbiB3
aGVyZSB3ZSBzaG91bGQgYmUgcmVtb3ZpbmcgYSByZXNvdXJjZSAoYWthIHdoZW5ldmVyIHRoZSB1
c2UgY291bnQgaW5jcmVtZW50cykuIEl0IGNoZWNrcyB0byBzZWUKKyAgICAgICAgaWYgd2UgY2Fu
IHJlbW92ZSB0aGUgcmVzb3VyY2UsIGFuZCBpZiBpdCBjYW4sIGRvZXMgc28uCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGU6OnJlY29yZFJlc291cmNlVXNlKTogVGhlIGNhbGxi
YWNrIHRoYXQgcnVucyBmb3IgZWFjaCByZXNvdXJjZSB1c2UgZHVyaW5nCisgICAgICAgIHJlcGxh
eWluZy4gSXQgY2FuJ3QgYWN0dWFsbHkgZGVsZXRlIGFueSByZXNvdXJjZXMsIHNvIGluc3RlYWQg
aXQganVzdCByZWNvcmRzIHdoaWNoIHJlc291cmNlcyBoYWQgdGhlaXIKKyAgICAgICAgdXNlIGNv
dW50cyBpbmNyZW1lbnRlZCwgYW5kIHdhaXRzIGZvciBwcnVuZSgpIHRvIGFjdHVhbGx5IGNhbGwg
bWF5YmVSZW1vdmVSZXNvdXJjZSgpLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNh
Y2hlOjpwcnVuZSk6IEFmdGVyIHRoZSByZXBsYXkgaXMgY29tcGxldGUsIGNhbGwgbWF5YmVSZW1v
dmVSZXNvdXJjZSgpIG9uIGFsbCB0aGUKKyAgICAgICAgcmVzb3VyY2VzIHdoaWNoIGhhZCB0aGVp
ciB1c2UgY291bnRlcnMgdG91Y2hlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VD
YWNoZTo6cmVsZWFzZVJlbW90ZVJlc291cmNlKTogUHV0IHRoZSByZWxldmFudCByZXNvdXJjZSBp
bnRvIHRoZSBzdGF0ZSB3aGVyZSB3ZQorICAgICAgICBhcmUgd2FpdGluZyBmb3IgdGhlIHVzZSBj
b3VudGVycyB0byBtYXRjaCBiZWZvcmUgd2UgY2FuIGRlbGV0ZSB0aGUgcmVzb3VyY2UuIEFsc28s
IGNhbGwgbWF5YmVSZW1vdmVSZXNvdXJjZSgpCisgICAgICAgIHNvIGl0IGNhbiBiZSBkZWxldGVk
IGltbWVkaWF0ZWx5IGlmIHRoZSBjb3VudGVycyBhbHJlYWR5IG1hdGNoLgorICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oOiBBZGQgYSBuZXcgZGF0YSBz
dHJ1Y3R1cmUgdG8gaG9sZCB0aGUgdXNlIGNvdW50ZXJzLiBUaGVyZSdzCisgICAgICAgIGEgYmln
IGNvbW1lbnQgaW4gaGVyZSB0aGF0IGRlc2NyaWJlcyB3aGF0IHRoZXNlIGZpZWxkcyBtZWFuLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
aDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdl
QnVmZmVyUHJveHkpOiBTZW5kIGEgZHVtbXkgdXNlIGNvdW50IGZvciBub3cuIFRoaXMgd2lsbCBi
ZQorICAgICAgICBpbXBsZW1lbnRlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VSZW1v
dGVSZXNvdXJjZSk6IEFkZCB0aGUgdXNlQ291bnQgcGFyYW1ldGVyLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBEaXR0by4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJv
eHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OnJlbGVh
c2VOYXRpdmVJbWFnZSk6IFNlbmQgYSBkdW1teSB1c2UgY291bnQgZm9yIG5vdy4gVGhpcyB3aWxs
IGJlCisgICAgICAgIGltcGxlbWVudGVkIGluIGEgZm9sbG93LXVwIHBhdGNoLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmNsZWFyRm9udE1hcCk6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmZpbmFsaXplUmVuZGVy
aW5nVXBkYXRlRm9yRm9udHMpOiBEaXR0by4KKwogMjAyMS0wNy0yMyAgUm9iZXJ0IEplbm5lciAg
PEplbm5lckBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyODAy
MDUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKaW5kZXggZjM3MGI0
MTE4ZDAyNDNhMWIyOWJiYTAyMTBmODk3NDcyOTM3YTg1My4uMzU2MWRhMGJkMTIyNmNiYzk1Mjdl
YWZlZDEzNDU3N2RkZjhkM2UzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxh
eWVyLmNwcApAQCAtMjMyLDYgKzIzMiw5IEBAIFJlcGxheVJlc3VsdCBSZXBsYXllcjo6cmVwbGF5
KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGJvb2wgdHJhY2tSZXBsYXlMaXN0CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAgICAgbV9kZWxlZ2F0ZS0+
ZGlkQ29tcGxldGVSZXBsYXlpbmcoKTsKKwogICAgIHJlc3VsdC50cmFja2VkRGlzcGxheUxpc3Qg
PSBXVEZNb3ZlKHJlcGxheUxpc3QpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZXBsYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaAppbmRleCAxNjYyN2EwMjA2ZTMwOTI0M2Y4YjdiZDE4
Y2RiM2RhNTg2MDc4YThmLi41NzkzOWVlOTc3ZWQ0ZWM0NThhMGQ0NTkyZDlkY2RiNzJhZmNmMDMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZXBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKQEAgLTY4LDYgKzY4LDcg
QEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoSXRlbUhhbmRsZSwgR3JhcGhp
Y3NDb250ZXh0JikgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZENy
ZWF0ZU1hc2tJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIHsgfQogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIoKSB7IH0KKyAgICAgICAgdmlydHVh
bCB2b2lkIGRpZENvbXBsZXRlUmVwbGF5aW5nKCkgeyB9CiAgICAgfTsKICAgICAKIHByaXZhdGU6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggZWE4Mjg2ZGEwYzlkZTRkZmNhN2RlMzViZTMz
N2RmMDMyYzAzN2U3ZS4uYzEwNmY0MmNjNGYzNTU1NGVkOTIzMmIwMzVlMzgzNWFiMjAyYzg5MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMjE0LDYgKzIxNCwxMiBAQCB2b2lkIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OmRpZFJlc2V0TWFza0ltYWdlQnVm
ZmVyKCkKICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZGlkUmVzZXRNYXNrSW1hZ2VCdWZm
ZXIoKTsKIH0KIAordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRl
OjpkaWRDb21wbGV0ZVJlcGxheWluZygpCit7CisgICAgYXV0byBtZXNzYWdlc0FyZUluT3JkZXIg
PSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQucmVtb3RlUmVzb3VyY2VDYWNoZSgpLnBydW5lKCk7
CisgICAgTUVTU0FHRV9DSEVDSyhtZXNzYWdlc0FyZUluT3JkZXIsICJXZWIgcHJvY2VzcyB0cmll
ZCB0byByZWxlYXNlIGEgcmVzb3VyY2UgdGhhdCB3YXNuJ3QgY2FjaGVkIik7Cit9CisKIERpc3Bs
YXlMaXN0OjpSZXBsYXlSZXN1bHQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c3VibWl0KGNvbnN0
IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIEltYWdlQnVmZmVyJiBkZXN0
aW5hdGlvbikKIHsKICAgICBpZiAoZGlzcGxheUxpc3QuaXNFbXB0eSgpKQpAQCAtNTA5LDEwICs1
MTUsMTEgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkZWxldGVBbGxGb250cygpCiAg
ICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmRlbGV0ZUFsbEZvbnRzKCk7CiB9CiAKLXZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZShSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCkK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBtX3JlbW90ZVJlc291cmNl
Q2FjaGUucmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7
CisgICAgYXV0byBzdWNjZXNzID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLnJlbGVhc2VSZW1vdGVS
ZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVzZUNvdW50KTsKKyAgICBNRVNT
QUdFX0NIRUNLKHN1Y2Nlc3MsICJSZXNvdXJjZSBpcyBiZWluZyByZWxlYXNlZCBiZWZvcmUgYmVp
bmcgY2FjaGVkLiIpOwogICAgIHVwZGF0ZVJlbmRlcmluZ1Jlc291cmNlUmVxdWVzdCgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCBmN2JmNmJjM2IwNzNhZGJlYWU2ZjZiODYyZmEzNjdm
NmFiMDBlNWIwLi44NzI2MjlmMDI1M2JmNGI2OTM2ODJiNzAyMjMyODVmZmI2MTM1NmQzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTE0NCw3ICsxNDQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdl
YkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsKLSAgICB2b2lkIHJl
bGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
OworICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpOwogICAgIHZvaWQgZGlkQ3JlYXRlU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVu
dGlmaWVyLCBjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOwogCiAgICAg
Y2xhc3MgUmVwbGF5ZXJEZWxlZ2F0ZSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVw
bGF5ZXI6OkRlbGVnYXRlIHsKQEAgLTE1NSw2ICsxNTUsNyBAQCBwcml2YXRlOgogICAgICAgICBi
b29sIGFwcGx5KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlLCBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmKSBmaW5hbDsKICAgICAgICAgdm9pZCBkaWRDcmVhdGVNYXNrSW1hZ2VCdWZm
ZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKSBmaW5hbDsKICAgICAgICAgdm9pZCBkaWRSZXNldE1h
c2tJbWFnZUJ1ZmZlcigpIGZpbmFsOworICAgICAgICB2b2lkIGRpZENvbXBsZXRlUmVwbGF5aW5n
KCkgZmluYWw7CiAKICAgICAgICAgV2ViQ29yZTo6SW1hZ2VCdWZmZXImIG1fZGVzdGluYXRpb247
CiAgICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmIG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggNGIzZmU5YTAy
NjJlOGE1NDkxODUyYzZkNmEwNDA0NWQ2YTY5NjM5Ny4uZmY2MmFmNTExZjNlMmU1Y2ViZjQ3NDFi
YjM1MDMzODQ5NGUzOGViNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMu
aW4KQEAgLTM2LDcgKzM2LDcgQEAgbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB7
CiAgICAgQ2FjaGVGb250KElQQzo6Rm9udFJlZmVyZW5jZSBmb250KQogICAgIERlbGV0ZUFsbEZv
bnRzKCkKICAgICBEaWRDcmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpTaGFyZWRN
ZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpCi0gICAgUmVsZWFzZVJlbW90ZVJlc291
cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpCisgICAgUmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90
IHVzZUNvdW50KQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUu
Y3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2Fj
aGUuY3BwCmluZGV4IDgxZGRlMGJmZmNmMGJkNmNjMWMyOGU1ZGQyNDYzNzRiMzQ2NDYyNzguLjY1
MjZmZDVjYzBjZTU2YWJkNTBmNWQxZmU2NTdiZDAxMTk0OGI0MmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5j
cHAKQEAgLTMzLDggKzMzLDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiB2b2lkIFJl
bW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlSW1hZ2VCdWZmZXIoUmVmPEltYWdlQnVmZmVyPiYmIGlt
YWdlQnVmZmVyKQogewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlcnMuYWRkKGlt
YWdlQnVmZmVyLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgV1RGTW92ZShpbWFnZUJ1
ZmZlcikpOwotICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CisgICAgYXV0byByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPSBpbWFnZUJ1ZmZlci0+
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAgbV9pbWFnZUJ1ZmZlcnMuYWRkKHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV1RGTW92ZShpbWFnZUJ1ZmZlcikpOworCisgICAg
ZW5zdXJlUmVzb3VyY2VVc2VDb3VudGVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiB9
CiAKIEltYWdlQnVmZmVyKiBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZWRJbWFnZUJ1ZmZlcihS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQpA
QCAtNDQsMTQgKzQ2LDI4IEBAIEltYWdlQnVmZmVyKiBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNo
ZWRJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIKIAogdm9pZCBSZW1vdGVS
ZXNvdXJjZUNhY2hlOjpjYWNoZU5hdGl2ZUltYWdlKFJlZjxOYXRpdmVJbWFnZT4mJiBpbWFnZSkK
IHsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmF0aXZlSW1hZ2VzLmFkZChpbWFnZS0+cmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIFdURk1vdmUoaW1hZ2UpKTsKLSAgICBBU1NFUlRfVU5V
U0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIGF1dG8gcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyID0gaW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigp
OworICAgIG1fbmF0aXZlSW1hZ2VzLmFkZChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdU
Rk1vdmUoaW1hZ2UpKTsKKworICAgIGVuc3VyZVJlc291cmNlVXNlQ291bnRlcihyZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hl
Rm9udChSZWY8Rm9udD4mJiBmb250KQogewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9mb250cy5h
ZGQoZm9udC0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIFdURk1vdmUoZm9udCkpOwot
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAg
YXV0byByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPSBmb250LT5yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIoKTsKKyAgICBtX2ZvbnRzLmFkZChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIFdURk1vdmUoZm9udCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VVc2VDb3VudGVyKHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZTo6
ZW5zdXJlUmVzb3VyY2VVc2VDb3VudGVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit7CisgICAgYXV0byByZXN1bHQgPSBt
X3Jlc291cmNlVXNlQ291bnRlcnMuZW5zdXJlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
WyZdIHsKKyAgICAgICAgcmV0dXJuIFJlc291cmNlVXNlQ291bnRlciB7IH07CisgICAgfSk7Cisg
ICAgYXV0byYgc3RhdGUgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnN0YXRlOworICAgIFJFTEVB
U0VfQVNTRVJUKHN0YXRlID09IFJlc291cmNlU3RhdGU6OlRvQmVEZWxldGVkKTsKKyAgICBzdGF0
ZSA9IFJlc291cmNlU3RhdGU6OkFsaXZlOwogfQogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6
OmRlbGV0ZUFsbEZvbnRzKCkKQEAgLTU5LDE2ICs3NSw3MCBAQCB2b2lkIFJlbW90ZVJlc291cmNl
Q2FjaGU6OmRlbGV0ZUFsbEZvbnRzKCkKICAgICBtX2ZvbnRzLmNsZWFyKCk7CiB9CiAKLXZvaWQg
UmVtb3RlUmVzb3VyY2VDYWNoZTo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCitib29sIFJlbW90ZVJl
c291cmNlQ2FjaGU6Om1heWJlUmVtb3ZlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgUmVzb3VyY2VVc2VDb3Vu
dGVyc01hcDo6aXRlcmF0b3IgaXRlcmF0b3IpCiB7CisgICAgLy8gSXQncyBhY3R1YWxseSBva2F5
IGlmIHVzZUNvdW50ID4gMC4KKyAgICAvLyBJdCBqdXN0IG1lYW5zIHRoYXQgdGhlcmUncyBhIGNh
Y2hlIG1lc3NhZ2UgcGVuZGluZywgYW5kIHdlJ3ZlIGVhZ2VybHkgdXNlZCBhIHByZXZpb3VzbHkt
Y2FjaGVkIHJlc291cmNlLgorICAgIC8vIFdoaWNoIGlzIGZpbmUuCisgICAgLy8gRklYTUU6IE1h
eWJlIHdlIHNob3VsZG4ndCBhY3R1YWxseSByZW1vdmUgdGhlIHJlc291cmNlIGluIHRoaXMgc2l0
dWF0aW9uPworICAgIC8vIFdlIG1heSBhY3R1YWxseSBiZSBhYmxlIHRvIGdldCBhIGhlYWQgc3Rh
cnQgb24gc29tZSBkaXNwbGF5IGxpc3QgaXRlbXMgaWYgdGhleSdyZSByZWFkeSBmb3IgdXMgYW5k
IHdlIGhhdmUgdGhlIHJlc291cmNlcyB0aGV5IGRlcGVuZCBvbi4KKworICAgIGF1dG8mIHZhbHVl
ID0gaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICh2YWx1ZS5zdGF0ZSA9PSBSZXNvdXJjZVN0YXRl
OjpBbGl2ZSB8fCB2YWx1ZS51c2VPclBlbmRpbmdDb3VudCA8IDApCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKCF2YWx1ZS51c2VPclBlbmRpbmdDb3VudCkKKyAgICAgICAgbV9yZXNv
dXJjZVVzZUNvdW50ZXJzLnJlbW92ZShpdGVyYXRvcik7CisKICAgICBpZiAobV9pbWFnZUJ1ZmZl
cnMucmVtb3ZlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKG1fbmF0aXZlSW1hZ2VzLnJlbW92ZShyZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB0cnVlOwogICAgIGlmIChtX2ZvbnRzLnJlbW92ZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgLy8gQ2Fj
aGluZyB0aGUgcmVtb3RlIHJlc291cmNlIHNob3VsZCBoYXZlIGhhcHBlbmVkIGJlZm9yZSByZWxl
YXNpbmcgaXQuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OnJlY29yZFJlc291cmNlVXNlKFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
Cit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcmVzb3VyY2VVc2VDb3VudGVycy5maW5kKHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9yZXNvdXJj
ZVVzZUNvdW50ZXJzLmVuZCgpKSB7CisgICAgICAgIC8vIFRoZSBkaXNwbGF5IGxpc3QgaXRlbXMg
d29uIHRoZSByYWNlIGFnYWluc3QgdGhlIGNhY2hlRm9udCBtZXNzYWdlLgorICAgICAgICAvLyBX
aGVuIHdlIHJlY2VpdmUgdGhlIGNhY2hlRm9udCBtZXNzYWdlLCB3ZSB3aWxsIHJldHJ5IHRoZSBk
aXNwbGF5IGxpc3QgaXRlbS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlc291cmNl
VXNlQ291bnRlciYgdXNlQ291bnRlciA9IGl0ZXJhdG9yLT52YWx1ZTsKKyAgICArK3VzZUNvdW50
ZXIudXNlT3JQZW5kaW5nQ291bnQ7CisKKyAgICBtX3Jlc291cmNlc0Zvck1heWJlUmVtb3Zpbmcu
YWRkKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Cit9CisKK2Jvb2wgUmVtb3RlUmVzb3Vy
Y2VDYWNoZTo6cHJ1bmUoKQoreworICAgIGZvciAoYXV0byByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgOiBtX3Jlc291cmNlc0Zvck1heWJlUmVtb3ZpbmcpIHsKKyAgICAgICAgYXV0byBpdGVy
YXRvciA9IG1fcmVzb3VyY2VVc2VDb3VudGVycy5maW5kKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcik7CisgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3Jlc291cmNlVXNlQ291bnRlcnMu
ZW5kKCkpOworICAgICAgICBhdXRvIG1lc3NhZ2VzQXJlSW5PcmRlciA9IG1heWJlUmVtb3ZlUmVz
b3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBpdGVyYXRvcik7CisgICAgICAgIGlm
ICghbWVzc2FnZXNBcmVJbk9yZGVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBtX3Jlc291cmNlc0Zvck1heWJlUmVtb3ZpbmcuY2xlYXIoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpyZWxlYXNlUmVtb3RlUmVzb3VyY2Uo
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
dWludDY0X3QgdXNlQ291bnQpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcmVzb3VyY2VVc2VD
b3VudGVycy5maW5kKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgaWYgKGl0ZXJh
dG9yID09IG1fcmVzb3VyY2VVc2VDb3VudGVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIFJlc291cmNlVXNlQ291bnRlciYgdXNlQ291bnRlciA9IGl0ZXJhdG9yLT52YWx1ZTsK
KyAgICB1c2VDb3VudGVyLnN0YXRlID0gUmVzb3VyY2VTdGF0ZTo6VG9CZURlbGV0ZWQ7CisgICAg
dXNlQ291bnRlci51c2VPclBlbmRpbmdDb3VudCAtPSB1c2VDb3VudDsKKyAgICByZXR1cm4gbWF5
YmVSZW1vdmVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGl0ZXJhdG9yKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuaAppbmRleCAyY2VkOTA5ZjQ4
MTEwYzY2NjU2ZGUxYmZlMzgxMWRiYWJhYWE5ZjRmLi5hZmEzZTViYWIyODBlYmFjOTVhZmZhOTFk
Nzg3NDJhNWRlYmRlYjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmgKQEAgLTQ2LDE2ICs0Niw0NSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKFJlZjxXZWJDb3JlOjpOYXRpdmVJbWFnZT4m
Jik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQg
ZGVsZXRlQWxsRm9udHMoKTsKLSAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIGJvb2wgcmVsZWFzZVJlbW90ZVJl
c291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNl
Q291bnQpOworICAgIHZvaWQgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKTsKKyAgICBib29sIHBydW5lKCk7CiAKICAgICBjb25zdCBXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckhhc2hNYXAmIGltYWdlQnVmZmVycygpIGNvbnN0IHsgcmV0dXJuIG1faW1h
Z2VCdWZmZXJzOyB9CiAgICAgY29uc3QgV2ViQ29yZTo6TmF0aXZlSW1hZ2VIYXNoTWFwJiBuYXRp
dmVJbWFnZXMoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUltYWdlczsgfQogICAgIGNvbnN0IFdl
YkNvcmU6OkZvbnRSZW5kZXJpbmdSZXNvdXJjZU1hcCYgZm9udHMoKSBjb25zdCB7IHJldHVybiBt
X2ZvbnRzOyB9CiAKIHByaXZhdGU6CisgICAgLy8gQmVjYXVzZSB0aGUgY2FjaGUvcmVsZWFzZSBt
ZXNzYWdlcyBhcmUgc2VudCBhc3luY2hyb25vdXNseSBmcm9tIHRoZSBkaXNwbGF5IGxpc3QgaXRl
bXMgd2hpY2gKKyAgICAvLyByZWZlcmVuY2UgdGhlIHJlc291cmNlcywgaXQncyB0b3RhbGx5IHBv
c3NpYmxlIHRoYXQgd2Ugc2VlIGEgcmVsZWFzZSBtZXNzYWdlIGJlZm9yZSB3ZSd2ZQorICAgIC8v
IGV4ZWN1dGVkIGFsbCB0aGUgZGlzcGxheSBsaXN0IGl0ZW1zIHdoaWNoIHJlZmVyZW5jZSB0aGUg
cmVzb3VyY2UuIFRoZSB3ZWIgcHJvY2VzcyB0ZWxscyB1cworICAgIC8vIGhvdyBtYW55IGRpc3Bs
YXkgbGlzdCBpdGVtcyB3aWxsIHJlZmVyZW5jZSB0aGlzIHJlc291cmNlLCBhbmQgd2UgZGVmZXIg
ZGVsZXRpb24gb2YgdGhlIHJlc291cmNlCisgICAgLy8gdW50aWwgd2UgZXhlY3V0ZSB0aGF0IG1h
bnkgZGlzcGxheSBsaXN0IGl0ZW1zLiBJdCdzIGFjdHVhbGx5IGEgYml0IHdvcnNlIHRoYW4gdGhp
cywgdGhvdWdoLAorICAgIC8vIGJlY2F1c2Ugd2UgbWF5IGFjdHVhbGx5IHNlZSBhICpuZXcqIGNh
Y2hlIG1lc3NhZ2UgZHVyaW5nIHRoZSB0aW1lIHdoZW4gZGVsZXRpb24gaXMgZGVmZXJyZWQuCisg
ICAgLy8KKyAgICAvLyBXZSBjYW4gb25seSBzYWZlbHkgZGVsZXRlIGEgcmVzb3VyY2Ugd2hlbjoK
KyAgICAvLyAxLiBBbGwgdGhlIGNhY2hlIG1lc3NhZ2VzIGhhdmUgYW4gYWNjb21wYW55aW5nIHJl
bGVhc2UgbWVzc2FnZSwgYW5kCisgICAgLy8gMi4gV2UndmUgcHJvY2Vzc2VkIGFzIG1hbnkgZGlz
cGxheSBsaXN0IGl0ZW1zIHRoYXQgcmVmZXJlbmNlIGEgcGFydGljdWxhciByZXNvdXJjZSBhcyB0
aGUgd2ViCisgICAgLy8gcHJvY2VzcyBoYXMgZW5jb2RlZC4KKyAgICBlbnVtIGNsYXNzIFJlc291
cmNlU3RhdGUgeworICAgICAgICBBbGl2ZSwKKyAgICAgICAgVG9CZURlbGV0ZWQKKyAgICB9Owor
ICAgIHN0cnVjdCBSZXNvdXJjZVVzZUNvdW50ZXIgeworICAgICAgICBSZXNvdXJjZVN0YXRlIHN0
YXRlIHsgUmVzb3VyY2VTdGF0ZTo6VG9CZURlbGV0ZWQgfTsKKyAgICAgICAgaW50NjRfdCB1c2VP
clBlbmRpbmdDb3VudCB7IDAgfTsKKyAgICB9OworICAgIHVzaW5nIFJlc291cmNlVXNlQ291bnRl
cnNNYXAgPSBIYXNoTWFwPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgUmVz
b3VyY2VVc2VDb3VudGVyPjsKKworICAgIGJvb2wgbWF5YmVSZW1vdmVSZXNvdXJjZShXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFJlc291cmNlVXNlQ291bnRlcnNNYXA6Oml0
ZXJhdG9yKTsKKyAgICB2b2lkIGVuc3VyZVJlc291cmNlVXNlQ291bnRlcihXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworCiAgICAgV2ViQ29yZTo6SW1hZ2VCdWZmZXJIYXNo
TWFwIG1faW1hZ2VCdWZmZXJzOwogICAgIFdlYkNvcmU6Ok5hdGl2ZUltYWdlSGFzaE1hcCBtX25h
dGl2ZUltYWdlczsKICAgICBXZWJDb3JlOjpGb250UmVuZGVyaW5nUmVzb3VyY2VNYXAgbV9mb250
czsKKworICAgIFJlc291cmNlVXNlQ291bnRlcnNNYXAgbV9yZXNvdXJjZVVzZUNvdW50ZXJzOwor
ICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBtX3Jlc291
cmNlc0Zvck1heWJlUmVtb3Zpbmc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggYjQ0OGIzN2Y5N2ZlN2FlNjVkYmViYjJhODVhYjBj
OTk0ZTFmMjZiZC4uZDRjYmMyYzBjOTAzNDMwNTk2OGYyNzdiNTUzNjFiYjI3NDgyZmVhOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogCiAg
ICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHktPnJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpLnJlbGVhc2VJbWFnZUJ1ZmZl
cihtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0gICAgICAgIG1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LT5yZWxlYXNlUmVtb3RlUmVzb3VyY2UobV9yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpOworICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVs
ZWFzZVJlbW90ZVJlc291cmNlKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCAwKTsgLy8g
RklYTUU6IFBhc3MgdGhlIHJlYWwgdXNlIGNvdW50IGhlcmUuCiAgICAgfQogCiAgICAgSW1hZ2VC
dWZmZXJCYWNrZW5kSGFuZGxlIGNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKaW5kZXggMDljZTRjNmVmNmQ2YWJl
NzFlMDNlYWI3ZmE4Y2QyMTRmZjY4YjBmZS4uZTk1ZjFhZDM5MzRmMjU0YmQ1Zjk5ZDIzYTViNDY1
NTUzNWNlMDkzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApA
QCAtMjQ5LDEyICsyNDksMTIgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRl
bGV0ZUFsbEZvbnRzKCkKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpEZWxldGVBbGxGb250cygpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNl
bmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CiB9
CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlUmVtb3RlUmVzb3Vy
Y2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlUmVtb3RlUmVzb3Vy
Y2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgdWludDY0X3QgdXNlQ291bnQpCiB7CiAgICAgaWYgKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciA9PSBtX2N1cnJlbnREZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllcikKICAgICAg
ICAgbV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIgPSBzdGQ6Om51bGxv
cHQ7CiAKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZWxlYXNl
UmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hl
bldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OlJlbGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIHVzZUNvdW50KSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0
aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwogfQogCiB2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGlkQ3JlYXRlSW1hZ2VCdWZmZXJCYWNr
ZW5kKEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuaAppbmRleCA2MzE0OTY3MGEzNTk0ZTI1YTJkYTVjZDE5NzYxMTQ2MWM2
MTc5NzQwLi5iMmNlM2Q4YzI4YWIxOTEyNTM1MTkwMjdmYzkwNzRkMjBlZDE3MjgyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTEwNCw3ICsxMDQsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGNh
Y2hlRm9udChSZWY8V2ViQ29yZTo6Rm9udD4mJik7CiAgICAgdm9pZCBkZWxldGVBbGxGb250cygp
OwotICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCk7CiAKICAgICBl
bnVtIGNsYXNzIERpZFJlY2VpdmVCYWNrZW5kQ3JlYXRpb25SZXN1bHQgOiBib29sIHsKICAgICAg
ICAgUmVjZWl2ZWRBbnlSZXNwb25zZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNw
cAppbmRleCAwM2YzNGIzM2EyMmRkNDkyOGQ0MjYwZTQ3ODYyZDM5MTM3MTEwMWFmLi40MTRlMTk5
NmU4YmMyOTk1YjdmNzA3NmFlNmE1MjE0ZDYzNjc2NjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJj
ZUNhY2hlUHJveHkuY3BwCkBAIC0xMjEsOCArMTIxLDcgQEAgdm9pZCBSZW1vdGVSZXNvdXJjZUNh
Y2hlUHJveHk6OnJlbGVhc2VOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
cmUKICAgICBpZiAoIW1fbmF0aXZlSW1hZ2VzLnJlbW92ZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBUZWxsIHRoZSBHUFUgcHJvY2VzcyB0
byByZW1vdmUgdGhpcyByZXNvdXJjZS4KLSAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAg
ICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCAwKTsgLy8gRklYTUU6IFBhc3MgdGhlIHJlYWwgdXNl
IGNvdW50IGhlcmUuCiB9CiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpwcmVwYXJl
Rm9yTmV4dFJlbmRlcmluZ1VwZGF0ZSgpCkBAIC0xMzQsNyArMTMzLDcgQEAgdm9pZCBSZW1vdGVS
ZXNvdXJjZUNhY2hlUHJveHk6OnByZXBhcmVGb3JOZXh0UmVuZGVyaW5nVXBkYXRlKCkKIHZvaWQg
UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjbGVhckZvbnRNYXAoKQogewogICAgIGZvciAoYXV0
byYgaXRlbSA6IG1fZm9udElkZW50aWZpZXJUb0xhc3RSZW5kZXJpbmdVcGRhdGVWZXJzaW9uTWFw
KQotICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3RlUmVz
b3VyY2UoaXRlbS5rZXkpOworICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5y
ZWxlYXNlUmVtb3RlUmVzb3VyY2UoaXRlbS5rZXksIDApOyAvLyBGSVhNRTogUGFzcyB0aGUgcmVh
bCB1c2UgY291bnQgaGVyZS4KICAgICBtX2ZvbnRJZGVudGlmaWVyVG9MYXN0UmVuZGVyaW5nVXBk
YXRlVmVyc2lvbk1hcC5jbGVhcigpOwogICAgIG1fbnVtYmVyT2ZGb250c1VzZWRJbkN1cnJlbnRS
ZW5kZXJpbmdVcGRhdGUgPSAwOwogfQpAQCAtMTUyLDcgKzE1MSw3IEBAIHZvaWQgUmVtb3RlUmVz
b3VyY2VDYWNoZVByb3h5OjpmaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZUZvckZvbnRzKCkKICAgICBm
b3IgKGF1dG8mIGl0ZW0gOiBtX2ZvbnRJZGVudGlmaWVyVG9MYXN0UmVuZGVyaW5nVXBkYXRlVmVy
c2lvbk1hcCkgewogICAgICAgICBpZiAobV9jdXJyZW50UmVuZGVyaW5nVXBkYXRlVmVyc2lvbiAt
IGl0ZW0udmFsdWUgPj0gbWluaW11bVJlbmRlcmluZ1VwZGF0ZUNvdW50VG9LZWVwRm9udEFsaXZl
KSB7CiAgICAgICAgICAgICB0b1JlbW92ZS5hZGQoaXRlbS5rZXkpOwotICAgICAgICAgICAgbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJlc291cmNlKGl0ZW0ua2V5
KTsKKyAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LnJlbGVhc2VSZW1v
dGVSZXNvdXJjZShpdGVtLmtleSwgMCk7IC8vIEZJWE1FOiBQYXNzIHRoZSByZWFsIHVzZSBjb3Vu
dCBoZXJlLgogICAgICAgICB9CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434145</attachid>
            <date>2021-07-23 17:03:55 -0700</date>
            <delta_ts>2021-07-23 23:54:57 -0700</delta_ts>
            <desc>Reworked struct ResourceUseCounter and Replayer::Delegate</desc>
            <filename>bug-228222-20210723170355.patch</filename>
            <type>text/plain</type>
            <size>24420</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMjU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzIxMDliYmJjNGM0OWNm
YmYxZGYyZWM2OWMyYWI5ZmQxNjU5NWY0Ny4uMzEzNzFmNmUzNzMzYmUxZjExOTQ3YTNlMWYyZTRi
Mzk2Y2RjOTFlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA3LTIzICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9j
ZXNzXSBBZGQgcmVzb3VyY2UgdXNlIGNvdW50ZXIgaW5mcmFzdHJ1Y3R1cmUgdG8gUmVtb3RlUmVz
b3VyY2VDYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI4MjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBpcyBwYXJ0IDIgb2YgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyODIxNi4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBi
ZWhhdmlvciBjaGFuZ2UgeWV0LiBUaGlzIHBhdGNoIGlzIGp1c3QgYWRkaW5nIGluZnJhc3RydWN0
dXJlLiBGb3Igbm93LCBhbGwgdGhlc2UKKyAgICAgICAgdXNlIGNvdW50cyBzZW50IGJ5IHRoZSB3
ZWIgcHJvY2VzcyBhcmUgMCAtIEknbGwgaW1wbGVtZW50IHRoYXQgcGFydCBpbiAzIGZvbGxvdy11
cCBwYXRjaGVzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVwbGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBs
YXllcjo6RGVsZWdhdGU6OnJlY29yZFJlc291cmNlVXNlKToKKwogMjAyMS0wNy0yMyAgQWxleGV5
IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ10gQ2FsbCBj
dXN0b20gYWNjZXNzb3JzIC8gdmFsdWVzIHdpdGggdGhlaXIgaG9sZGVyJ3MgZ2xvYmFsIG9iamVj
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCA5YzZlNGU1NzljZmViZTQ1ZjI4Mjc2YmFlMTZkMmQzMzA3NTcyMzNlLi5k
YWMxZDg3YzRkMmQ1OTZjMGJmMmE0MmFhNzAzZmYwMTQ4ZWNjYTI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDU1IEBACisyMDIxLTA3LTIzICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBBZGQgcmVzb3VyY2UgdXNlIGNvdW50ZXIg
aW5mcmFzdHJ1Y3R1cmUgdG8gUmVtb3RlUmVzb3VyY2VDYWNoZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4MjIyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHRoZSBpbmZyYXN0
cnVjdHVyZSBmb3IgYXNzb2NpYXRpbmcgYSBjb3VudGVyIHdpdGggZWFjaCByZXNvdXJjZSBpbiB0
aGUgUmVtb3RlUmVzb3VyY2VDYWNoZS4KKyAgICAgICAgQXMgdGhlIHdlYiBwcm9jZXNzIHVzZXMg
YSByZXNvdXJjZSBkdXJpbmcgZGlzcGxheSBsaXN0IHJlY29yZGluZywgaXQgaW5jcmVtZW50cyBh
IGNvdW50ZXIsIGFuZCBhcyB0aGUgR1BVCisgICAgICAgIHByb2Nlc3MgdXNlcyBhIHJlc291cmNl
LCBpdCBpbmNyZW1lbnRzIGEgY291bnRlciBpbiB0aGUgUmVtb3RlUmVzb3VyY2VDYWNoZS4gV2hl
biB0aGUgd2ViIHByb2Nlc3MgaXMgZG9uZQorICAgICAgICB3aXRoIGEgcmVzb3VyY2UsIGl0IHNl
bmRzIGEgcmVsZWFzZSBtZXNzYWdlIHRvIHRoZSBHUFUgcHJvY2VzcyB3aGljaCBjcnVjaWFsbHkg
aW5jbHVkZXMgdGhlIHdlYiBwcm9jZXNzJ3MKKyAgICAgICAgY291bnRlci4gVGhlIEdQVSBwcm9j
ZXNzIGhhcyB0byB0aGVuIHdhaXQgdG8gYWN0dWFsbHkgZGVsZXRlIHRoZSByZXNvdXJjZSB1bnRp
bCBpdHMgb3duIHVzZSBjb3VudGVyIG1hdGNoZXMKKyAgICAgICAgdGhlIG9uZSBpdCByZWNlaXZl
ZCBmcm9tIHRoZSB3ZWIgcHJvY2Vzcy4gVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoaXMgZGVmZXJy
ZWQgZGVsZXRpb24gaW5mcmFzdHJ1Y3R1cmUKKyAgICAgICAgaW4gdGhlIEdQVSBwcm9jZXNzLgor
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxl
Z2F0ZTo6cmVjb3JkUmVzb3VyY2VVc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpyZWxlYXNlUmVtb3RlUmVzb3VyY2UpOiBQYXNzIHRoZSB1c2UgY291bnQgdG8g
dGhlIFJlbW90ZVJlc291cmNlQ2FjaGUuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6IEFkZCB0aGUgdXNlIGNvdW50IGZpZWxkLgorICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5p
bjogRGl0dG8uCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNh
Y2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2FjaGVJbWFn
ZUJ1ZmZlcik6IEl0J3MgYWN0dWFsbHkgb2theSBpZiB0aGVyZSdzIGFscmVhZHkgYW4gcmVzb3Vy
Y2UgY2FjaGVkLgorICAgICAgICBUaGF0IGp1c3QgbWVhbnMgdGhhdCB0aGUgd2ViIHByb2Nlc3Mg
c3RhcnRlZCB1c2luZyBhIHJlc291cmNlIGFnYWluIGJlZm9yZSB0aGUgR1BVIHByb2Nlc3MgY29u
c3VtZWQgYWxsCisgICAgICAgIGNvbW1hbmRzIHRoYXQgdXNlZCBpdCB0aGUgZmlyc3QgdGltZS4g
QWxsIHdlIG5lZWQgdG8gZG8gaXMgaW5jcmVtZW50IHRoZSBvcGVuIGNvdW50LgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZU5hdGl2ZUltYWdlKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlRm9udCk6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlOjplbnN1cmVSZXNvdXJjZVVzZUNv
dW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlOjptYXliZVJlbW92
ZVJlc291cmNlKTogVGhpcyBpcyBjYWxsZWQgd2hlbmV2ZXIgaXQncyBwb3NzaWJsZSBmb3IgdXMg
dG8gYmUgaW4KKyAgICAgICAgc2l0dWF0aW9uIHdoZXJlIHdlIHNob3VsZCBiZSByZW1vdmluZyBh
IHJlc291cmNlIChha2Egd2hlbmV2ZXIgdGhlIHVzZSBjb3VudCBpbmNyZW1lbnRzKS4gSXQgY2hl
Y2tzIHRvIHNlZQorICAgICAgICBpZiB3ZSBjYW4gcmVtb3ZlIHRoZSByZXNvdXJjZSwgYW5kIGlm
IGl0IGNhbiwgZG9lcyBzby4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZTo6
cmVjb3JkUmVzb3VyY2VVc2UpOiBUaGUgY2FsbGJhY2sgdGhhdCBydW5zIGZvciBlYWNoIHJlc291
cmNlIHVzZSBkdXJpbmcKKyAgICAgICAgcmVwbGF5aW5nLiBJdCBjYW4ndCBhY3R1YWxseSBkZWxl
dGUgYW55IHJlc291cmNlcywgc28gaW5zdGVhZCBpdCBqdXN0IHJlY29yZHMgd2hpY2ggcmVzb3Vy
Y2VzIGhhZCB0aGVpcgorICAgICAgICB1c2UgY291bnRzIGluY3JlbWVudGVkLCBhbmQgd2FpdHMg
Zm9yIHBydW5lKCkgdG8gYWN0dWFsbHkgY2FsbCBtYXliZVJlbW92ZVJlc291cmNlKCkuCisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGU6OnBydW5lKTogQWZ0ZXIgdGhlIHJlcGxh
eSBpcyBjb21wbGV0ZSwgY2FsbCBtYXliZVJlbW92ZVJlc291cmNlKCkgb24gYWxsIHRoZQorICAg
ICAgICByZXNvdXJjZXMgd2hpY2ggaGFkIHRoZWlyIHVzZSBjb3VudGVycyB0b3VjaGVkLgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlOjpyZWxlYXNlUmVtb3RlUmVzb3VyY2Up
OiBQdXQgdGhlIHJlbGV2YW50IHJlc291cmNlIGludG8gdGhlIHN0YXRlIHdoZXJlIHdlCisgICAg
ICAgIGFyZSB3YWl0aW5nIGZvciB0aGUgdXNlIGNvdW50ZXJzIHRvIG1hdGNoIGJlZm9yZSB3ZSBj
YW4gZGVsZXRlIHRoZSByZXNvdXJjZS4gQWxzbywgY2FsbCBtYXliZVJlbW92ZVJlc291cmNlKCkK
KyAgICAgICAgc28gaXQgY2FuIGJlIGRlbGV0ZWQgaW1tZWRpYXRlbHkgaWYgdGhlIGNvdW50ZXJz
IGFscmVhZHkgbWF0Y2guCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNv
dXJjZUNhY2hlLmg6IEFkZCBhIG5ldyBkYXRhIHN0cnVjdHVyZSB0byBob2xkIHRoZSB1c2UgY291
bnRlcnMuIFRoZXJlJ3MKKyAgICAgICAgYSBiaWcgY29tbWVudCBpbiBoZXJlIHRoYXQgZGVzY3Jp
YmVzIHdoYXQgdGhlc2UgZmllbGRzIG1lYW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5Ojp+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6IFNlbmQgYSBkdW1teSB1
c2UgY291bnQgZm9yIG5vdy4gVGhpcyB3aWxsIGJlCisgICAgICAgIGltcGxlbWVudGVkIGluIGEg
Zm9sbG93LXVwIHBhdGNoLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZVJlbW90ZVJlc291cmNlKTogQWRkIHRoZSB1c2VDb3Vu
dCBwYXJhbWV0ZXIuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5Lmg6IERpdHRvLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlc291cmNlQ2FjaGVQcm94eTo6cmVsZWFzZU5hdGl2ZUltYWdlKTogU2VuZCBhIGR1bW15
IHVzZSBjb3VudCBmb3Igbm93LiBUaGlzIHdpbGwgYmUKKyAgICAgICAgaW1wbGVtZW50ZWQgaW4g
YSBmb2xsb3ctdXAgcGF0Y2guCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGVQ
cm94eTo6Y2xlYXJGb250TWFwKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291
cmNlQ2FjaGVQcm94eTo6ZmluYWxpemVSZW5kZXJpbmdVcGRhdGVGb3JGb250cyk6IERpdHRvLgor
CiAyMDIxLTA3LTIzICBSb2JlcnQgSmVubmVyICA8SmVubmVyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4MDIwNS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZXBsYXllci5oCmluZGV4IDE2NjI3YTAyMDZlMzA5MjQzZjhiN2JkMThjZGIzZGE1ODYwNzhh
OGYuLjZhNDY0MzI3Y2NmMTUwNmFkN2ZkOTI1ZGI1NWQ1MzZhNWZlMjg1NTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlcGxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaApAQCAtNjgsNiArNjgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseShJdGVtSGFuZGxlLCBHcmFwaGljc0NvbnRleHQmKSB7
IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlTWFza0ltYWdl
QnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRSZXNldE1hc2tJbWFnZUJ1ZmZlcigpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
UmVzb3VyY2VVc2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSB7IH0KICAgICB9OwogICAg
IAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAppbmRleCBlYTgyODZkYTBjOWRlNGRm
Y2E3ZGUzNWJlMzM3ZGYwMzJjMDM3ZTdlLi44ZjRmZGZkYTU0ZTRkZjRmMWZiNWU2OWEyYWI0OWU5
YmI1OThlMGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0xODQsMTcgKzE4NCwxNCBA
QCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbgogICAgICAgICB3YWtlVXBBbmRBcHBseURpc3BsYXlM
aXN0KHN0ZDo6ZXhjaGFuZ2UobV9wZW5kaW5nV2FrZXVwSW5mbywgc3RkOjpudWxsb3B0KS0+YXJn
dW1lbnRzKTsKIH0KIAotUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6
UmVwbGF5ZXJEZWxlZ2F0ZShXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgZGVzdGluYXRpb24sIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQmIHJlbW90ZVJlbmRlcmluZ0JhY2tlbmQsIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCitSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjpSZXBsYXllckRlbGVnYXRlKFdlYkNvcmU6OkltYWdl
QnVmZmVyJiBkZXN0aW5hdGlvbiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgcmVtb3RlUmVuZGVy
aW5nQmFja2VuZCkKICAgICA6IG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCiAgICAgLCBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQocmVtb3RlUmVuZGVyaW5nQmFja2VuZCkKLSAgICAsIG1fZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyhncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKQogewogfQog
CiBib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OmFwcGx5KFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCYgZ3JhcGhpY3NDb250ZXh0KQogewotICAgIC8vIEZJWE1FOiBJbnNwZWN0IHRoZSBpdGVt
IGFuZCByZWNvcmQgcmVzb3VyY2UgdXNlIGhlcmUuCi0KICAgICBhdXRvIGFwcGx5ID0gWyZdKGF1
dG8mJiBkZXN0aW5hdGlvbikgewogICAgICAgICByZXR1cm4gZGVzdGluYXRpb24uYXBwbHkoaXRl
bSwgZ3JhcGhpY3NDb250ZXh0KTsKICAgICB9OwpAQCAtMjE0LDEyICsyMTEsMTcgQEAgdm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjpkaWRSZXNldE1hc2tJbWFn
ZUJ1ZmZlcigpCiAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmRpZFJlc2V0TWFza0ltYWdl
QnVmZmVyKCk7CiB9CiAKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxl
Z2F0ZTo6cmVjb3JkUmVzb3VyY2VVc2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcikKK3sKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
cmVtb3RlUmVzb3VyY2VDYWNoZSgpLnJlY29yZFJlc291cmNlVXNlKHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7Cit9CisKIERpc3BsYXlMaXN0OjpSZXBsYXlSZXN1bHQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6c3VibWl0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxh
eUxpc3QsIEltYWdlQnVmZmVyJiBkZXN0aW5hdGlvbikKIHsKICAgICBpZiAoZGlzcGxheUxpc3Qu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgUmVwbGF5ZXJEZWxlZ2F0ZSBy
ZXBsYXllckRlbGVnYXRlKGRlc3RpbmF0aW9uLCAqdGhpcywgbV9ncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzKTsKKyAgICBSZXBsYXllckRlbGVnYXRlIHJlcGxheWVyRGVsZWdhdGUoZGVzdGluYXRp
b24sICp0aGlzKTsKIAogICAgIHJldHVybiBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXIg
ewogICAgICAgICBkZXN0aW5hdGlvbi5jb250ZXh0KCksCkBAIC01MDksMTAgKzUxMSwxMSBAQCB2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRlbGV0ZUFsbEZvbnRzKCkKICAgICBtX3JlbW90
ZVJlc291cmNlQ2FjaGUuZGVsZXRlQWxsRm9udHMoKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpyZWxlYXNlUmVtb3RlUmVzb3VyY2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KQogewogICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5yZWxl
YXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICBhdXRv
IHN1Y2Nlc3MgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUucmVsZWFzZVJlbW90ZVJlc291cmNlKHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdXNlQ291bnQpOworICAgIE1FU1NBR0VfQ0hFQ0so
c3VjY2VzcywgIlJlc291cmNlIGlzIGJlaW5nIHJlbGVhc2VkIGJlZm9yZSBiZWluZyBjYWNoZWQu
Iik7CiAgICAgdXBkYXRlUmVuZGVyaW5nUmVzb3VyY2VSZXF1ZXN0KCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5oCmluZGV4IGY3YmY2YmMzYjA3M2FkYmVhZTZmNmI4NjJmYTM2N2Y2YWIwMGU1YjAu
LmYzZDgyMzAxM2NlMjc5ZTU3Y2MzZTRiMDQxMzYxNmU1YzQ4Yjc1M2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaApAQCAtMTQ0LDIxICsxNDQsMjEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhY2hlTmF0
aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpG
b250PiYmKTsKICAgICB2b2lkIGRlbGV0ZUFsbEZvbnRzKCk7Ci0gICAgdm9pZCByZWxlYXNlUmVt
b3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2
b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KTsKICAgICB2b2lkIGRpZENyZWF0ZVNoYXJlZERpc3Bs
YXlMaXN0SGFuZGxlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwg
Y29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKTsKIAogICAgIGNsYXNzIFJl
cGxheWVyRGVsZWdhdGUgOiBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyOjpE
ZWxlZ2F0ZSB7CiAgICAgcHVibGljOgotICAgICAgICBSZXBsYXllckRlbGVnYXRlKFdlYkNvcmU6
OkltYWdlQnVmZmVyJiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYsIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MmKTsKKyAgICAgICAgUmVwbGF5ZXJEZWxlZ2F0ZShXZWJDb3JlOjpJbWFnZUJ1ZmZl
ciYsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGJv
b2wgYXBwbHkoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUsIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYpIGZpbmFsOwogICAgICAgICB2b2lkIGRpZENyZWF0ZU1hc2tJbWFnZUJ1ZmZl
cihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIGZpbmFsOwogICAgICAgICB2b2lkIGRpZFJlc2V0TWFz
a0ltYWdlQnVmZmVyKCkgZmluYWw7CisgICAgICAgIHZvaWQgcmVjb3JkUmVzb3VyY2VVc2UoV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSBmaW5hbDsKIAogICAgICAgICBXZWJD
b3JlOjpJbWFnZUJ1ZmZlciYgbV9kZXN0aW5hdGlvbjsKICAgICAgICAgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZCYgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwotICAgICAgICBSZWY8R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOwogICAgIH07CiAK
ICAgICBzdHJ1Y3QgUGVuZGluZ1dha2V1cEluZm9ybWF0aW9uIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggNGIzZmU5YTAyNjJlOGE1NDkxODUyYzZkNmEwNDA0
NWQ2YTY5NjM5Ny4uZmY2MmFmNTExZjNlMmU1Y2ViZjQ3NDFiYjM1MDMzODQ5NGUzOGViNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KQEAgLTM2LDcgKzM2LDcgQEAg
bWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB7CiAgICAgQ2FjaGVGb250KElQQzo6
Rm9udFJlZmVyZW5jZSBmb250KQogICAgIERlbGV0ZUFsbEZvbnRzKCkKICAgICBEaWRDcmVhdGVT
aGFyZWREaXNwbGF5TGlzdEhhbmRsZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklk
ZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5k
bGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkJ1ZmZl
cklkZW50aWZpZXIpCi0gICAgUmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgUmVs
ZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KQogfQogCiAjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuY3BwIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuY3BwCmluZGV4IDgxZGRlMGJm
ZmNmMGJkNmNjMWMyOGU1ZGQyNDYzNzRiMzQ2NDYyNzguLmU5ZjljMzI2NmEwMjkzZDQwYjg4MzBh
MzljYzI5MTNjOGUzZTIyNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5jcHAKQEAgLTMzLDggKzMzLDEwIEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OmNh
Y2hlSW1hZ2VCdWZmZXIoUmVmPEltYWdlQnVmZmVyPiYmIGltYWdlQnVmZmVyKQogewotICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlcnMuYWRkKGltYWdlQnVmZmVyLT5yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIoKSwgV1RGTW92ZShpbWFnZUJ1ZmZlcikpOwotICAgIEFTU0VSVF9V
TlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgPSBpbWFnZUJ1ZmZlci0+cmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKCk7CisgICAgbV9pbWFnZUJ1ZmZlcnMuYWRkKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgV1RGTW92ZShpbWFnZUJ1ZmZlcikpOworCisgICAgZW5zdXJlUmVzb3VyY2VVc2VDb3Vu
dGVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiB9CiAKIEltYWdlQnVmZmVyKiBSZW1v
dGVSZXNvdXJjZUNhY2hlOjpjYWNoZWRJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQpAQCAtNDQsMTQgKzQ2LDI4IEBAIElt
YWdlQnVmZmVyKiBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZWRJbWFnZUJ1ZmZlcihSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIKIAogdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZU5h
dGl2ZUltYWdlKFJlZjxOYXRpdmVJbWFnZT4mJiBpbWFnZSkKIHsKLSAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fbmF0aXZlSW1hZ2VzLmFkZChpbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KCksIFdURk1vdmUoaW1hZ2UpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVz
dWx0LmlzTmV3RW50cnkpOworICAgIGF1dG8gcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyID0g
aW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOworICAgIG1fbmF0aXZlSW1hZ2Vz
LmFkZChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdURk1vdmUoaW1hZ2UpKTsKKworICAg
IGVuc3VyZVJlc291cmNlVXNlQ291bnRlcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwog
fQogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlRm9udChSZWY8Rm9udD4mJiBmb250
KQogewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9mb250cy5hZGQoZm9udC0+cmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKCksIFdURk1vdmUoZm9udCkpOwotICAgIEFTU0VSVF9VTlVTRUQoYWRk
UmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgPSBmb250LT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKKyAgICBt
X2ZvbnRzLmFkZChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdURk1vdmUoZm9udCkpOwor
CisgICAgZW5zdXJlUmVzb3VyY2VVc2VDb3VudGVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cik7Cit9CisKK3ZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZTo6ZW5zdXJlUmVzb3VyY2VVc2VDb3Vu
dGVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpCit7CisgICAgYXV0byByZXN1bHQgPSBtX3Jlc291cmNlVXNlQ291bnRlcnMuZW5zdXJlKHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgWyZdIHsKKyAgICAgICAgcmV0dXJuIFJlc291cmNl
VXNlQ291bnRlciB7IH07CisgICAgfSk7CisgICAgYXV0byYgc3RhdGUgPSByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLnN0YXRlOworICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlID09IFJlc291cmNlU3Rh
dGU6OlRvQmVEZWxldGVkKTsKKyAgICBzdGF0ZSA9IFJlc291cmNlU3RhdGU6OkFsaXZlOwogfQog
CiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OmRlbGV0ZUFsbEZvbnRzKCkKQEAgLTU5LDE2ICs3
NSw1NyBAQCB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OmRlbGV0ZUFsbEZvbnRzKCkKICAgICBt
X2ZvbnRzLmNsZWFyKCk7CiB9CiAKLXZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZTo6cmVsZWFzZVJl
bW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpCitib29sIFJlbW90ZVJlc291cmNlQ2FjaGU6Om1heWJlUmVtb3ZlUmVzb3Vy
Y2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgUmVzb3VyY2VVc2VDb3VudGVyc01hcDo6aXRlcmF0b3IgaXRlcmF0b3IpCiB7CisgICAgLy8g
SXQncyBhY3R1YWxseSBva2F5IGlmIHVzZUNvdW50ID4gMC4KKyAgICAvLyBJdCBqdXN0IG1lYW5z
IHRoYXQgdGhlcmUncyBhIGNhY2hlIG1lc3NhZ2UgcGVuZGluZywgYW5kIHdlJ3ZlIGVhZ2VybHkg
dXNlZCBhIHByZXZpb3VzbHktY2FjaGVkIHJlc291cmNlLgorICAgIC8vIFdoaWNoIGlzIGZpbmUu
CisgICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZG4ndCBhY3R1YWxseSByZW1vdmUgdGhlIHJl
c291cmNlIGluIHRoaXMgc2l0dWF0aW9uPworICAgIC8vIFdlIG1heSBhY3R1YWxseSBiZSBhYmxl
IHRvIGdldCBhIGhlYWQgc3RhcnQgb24gc29tZSBkaXNwbGF5IGxpc3QgaXRlbXMgaWYgdGhleSdy
ZSByZWFkeSBmb3IgdXMgYW5kIHdlIGhhdmUgdGhlIHJlc291cmNlcyB0aGV5IGRlcGVuZCBvbi4K
KworICAgIGF1dG8mIHZhbHVlID0gaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICh2YWx1ZS5zdGF0
ZSA9PSBSZXNvdXJjZVN0YXRlOjpBbGl2ZSB8fCB2YWx1ZS51c2VPclBlbmRpbmdDb3VudCA8IDAp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKCF2YWx1ZS51c2VPclBlbmRpbmdDb3Vu
dCkKKyAgICAgICAgbV9yZXNvdXJjZVVzZUNvdW50ZXJzLnJlbW92ZShpdGVyYXRvcik7CisKICAg
ICBpZiAobV9pbWFnZUJ1ZmZlcnMucmVtb3ZlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKG1fbmF0aXZl
SW1hZ2VzLnJlbW92ZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChtX2ZvbnRzLnJlbW92ZShyZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0
cnVlOworCiAgICAgLy8gQ2FjaGluZyB0aGUgcmVtb3RlIHJlc291cmNlIHNob3VsZCBoYXZlIGhh
cHBlbmVkIGJlZm9yZSByZWxlYXNpbmcgaXQuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OnJlY29yZFJl
c291cmNlVXNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcmVzb3VyY2VVc2VDb3VudGVycy5m
aW5kKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisKKyAgICBpZiAoaXRlcmF0b3IgPT0g
bV9yZXNvdXJjZVVzZUNvdW50ZXJzLmVuZCgpKSB7CisgICAgICAgIC8vIFRoZSBkaXNwbGF5IGxp
c3QgaXRlbXMgd29uIHRoZSByYWNlIGFnYWluc3QgdGhlIGNhY2hlRm9udCBtZXNzYWdlLgorICAg
ICAgICAvLyBXaGVuIHdlIHJlY2VpdmUgdGhlIGNhY2hlRm9udCBtZXNzYWdlLCB3ZSB3aWxsIHJl
dHJ5IHRoZSBkaXNwbGF5IGxpc3QgaXRlbS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFJlc291cmNlVXNlQ291bnRlciYgdXNlQ291bnRlciA9IGl0ZXJhdG9yLT52YWx1ZTsKKyAgICAr
K3VzZUNvdW50ZXIudXNlT3JQZW5kaW5nQ291bnQ7CisKKyAgICBtYXliZVJlbW92ZVJlc291cmNl
KHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgaXRlcmF0b3IpOworfQorCitib29sIFJlbW90
ZVJlc291cmNlQ2FjaGU6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZShSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCkK
K3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZXNvdXJjZVVzZUNvdW50ZXJzLmZpbmQocmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9yZXNvdXJjZVVz
ZUNvdW50ZXJzLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUmVzb3VyY2VVc2VD
b3VudGVyJiB1c2VDb3VudGVyID0gaXRlcmF0b3ItPnZhbHVlOworICAgIHVzZUNvdW50ZXIuc3Rh
dGUgPSBSZXNvdXJjZVN0YXRlOjpUb0JlRGVsZXRlZDsKKyAgICB1c2VDb3VudGVyLnVzZU9yUGVu
ZGluZ0NvdW50IC09IHVzZUNvdW50OworICAgIHJldHVybiBtYXliZVJlbW92ZVJlc291cmNlKHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgaXRlcmF0b3IpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZXNvdXJjZUNhY2hlLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlUmVzb3VyY2VDYWNoZS5oCmluZGV4IDJjZWQ5MDlmNDgxMTBjNjY2NTZkZTFiZmUzODEx
ZGJhYmFhYTlmNGYuLjZkYzI5ZTk3NjU3Yjk3ZjViYmZkOTVlMzlhZDczZDJjNGQwMGM3MDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJj
ZUNhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
c291cmNlQ2FjaGUuaApAQCAtNDYsMTYgKzQ2LDQzIEBAIHB1YmxpYzoKICAgICB2b2lkIGNhY2hl
TmF0aXZlSW1hZ2UoUmVmPFdlYkNvcmU6Ok5hdGl2ZUltYWdlPiYmKTsKICAgICB2b2lkIGNhY2hl
Rm9udChSZWY8V2ViQ29yZTo6Rm9udD4mJik7CiAgICAgdm9pZCBkZWxldGVBbGxGb250cygpOwot
ICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7CisgICAgYm9vbCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCk7CisgICAgdm9pZCBy
ZWNvcmRSZXNvdXJjZVVzZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwog
CiAgICAgY29uc3QgV2ViQ29yZTo6SW1hZ2VCdWZmZXJIYXNoTWFwJiBpbWFnZUJ1ZmZlcnMoKSBj
b25zdCB7IHJldHVybiBtX2ltYWdlQnVmZmVyczsgfQogICAgIGNvbnN0IFdlYkNvcmU6Ok5hdGl2
ZUltYWdlSGFzaE1hcCYgbmF0aXZlSW1hZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9uYXRpdmVJbWFn
ZXM7IH0KICAgICBjb25zdCBXZWJDb3JlOjpGb250UmVuZGVyaW5nUmVzb3VyY2VNYXAmIGZvbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9mb250czsgfQogCiBwcml2YXRlOgorICAgIC8vIEJlY2F1c2Ug
dGhlIGNhY2hlL3JlbGVhc2UgbWVzc2FnZXMgYXJlIHNlbnQgYXN5bmNocm9ub3VzbHkgZnJvbSB0
aGUgZGlzcGxheSBsaXN0IGl0ZW1zIHdoaWNoCisgICAgLy8gcmVmZXJlbmNlIHRoZSByZXNvdXJj
ZXMsIGl0J3MgdG90YWxseSBwb3NzaWJsZSB0aGF0IHdlIHNlZSBhIHJlbGVhc2UgbWVzc2FnZSBi
ZWZvcmUgd2UndmUKKyAgICAvLyBleGVjdXRlZCBhbGwgdGhlIGRpc3BsYXkgbGlzdCBpdGVtcyB3
aGljaCByZWZlcmVuY2UgdGhlIHJlc291cmNlLiBUaGUgd2ViIHByb2Nlc3MgdGVsbHMgdXMKKyAg
ICAvLyBob3cgbWFueSBkaXNwbGF5IGxpc3QgaXRlbXMgd2lsbCByZWZlcmVuY2UgdGhpcyByZXNv
dXJjZSwgYW5kIHdlIGRlZmVyIGRlbGV0aW9uIG9mIHRoZSByZXNvdXJjZQorICAgIC8vIHVudGls
IHdlIGV4ZWN1dGUgdGhhdCBtYW55IGRpc3BsYXkgbGlzdCBpdGVtcy4gSXQncyBhY3R1YWxseSBh
IGJpdCB3b3JzZSB0aGFuIHRoaXMsIHRob3VnaCwKKyAgICAvLyBiZWNhdXNlIHdlIG1heSBhY3R1
YWxseSBzZWUgYSAqbmV3KiBjYWNoZSBtZXNzYWdlIGR1cmluZyB0aGUgdGltZSB3aGVuIGRlbGV0
aW9uIGlzIGRlZmVycmVkLgorICAgIC8vCisgICAgLy8gV2UgY2FuIG9ubHkgc2FmZWx5IGRlbGV0
ZSBhIHJlc291cmNlIHdoZW46CisgICAgLy8gMS4gQWxsIHRoZSBjYWNoZSBtZXNzYWdlcyBoYXZl
IGFuIGFjY29tcGFueWluZyByZWxlYXNlIG1lc3NhZ2UsIGFuZAorICAgIC8vIDIuIFdlJ3ZlIHBy
b2Nlc3NlZCBhcyBtYW55IGRpc3BsYXkgbGlzdCBpdGVtcyB0aGF0IHJlZmVyZW5jZSBhIHBhcnRp
Y3VsYXIgcmVzb3VyY2UgYXMgdGhlIHdlYgorICAgIC8vIHByb2Nlc3MgaGFzIGVuY29kZWQuCisg
ICAgZW51bSBjbGFzcyBSZXNvdXJjZVN0YXRlIHsKKyAgICAgICAgQWxpdmUsCisgICAgICAgIFRv
QmVEZWxldGVkCisgICAgfTsKKyAgICBzdHJ1Y3QgUmVzb3VyY2VVc2VDb3VudGVyIHsKKyAgICAg
ICAgUmVzb3VyY2VTdGF0ZSBzdGF0ZSB7IFJlc291cmNlU3RhdGU6OlRvQmVEZWxldGVkIH07Cisg
ICAgICAgIGludDY0X3QgdXNlT3JQZW5kaW5nQ291bnQgeyAwIH07CisgICAgfTsKKyAgICB1c2lu
ZyBSZXNvdXJjZVVzZUNvdW50ZXJzTWFwID0gSGFzaE1hcDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIFJlc291cmNlVXNlQ291bnRlcj47CisKKyAgICBib29sIG1heWJlUmVt
b3ZlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBSZXNvdXJj
ZVVzZUNvdW50ZXJzTWFwOjppdGVyYXRvcik7CisgICAgdm9pZCBlbnN1cmVSZXNvdXJjZVVzZUNv
dW50ZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKwogICAgIFdlYkNv
cmU6OkltYWdlQnVmZmVySGFzaE1hcCBtX2ltYWdlQnVmZmVyczsKICAgICBXZWJDb3JlOjpOYXRp
dmVJbWFnZUhhc2hNYXAgbV9uYXRpdmVJbWFnZXM7CiAgICAgV2ViQ29yZTo6Rm9udFJlbmRlcmlu
Z1Jlc291cmNlTWFwIG1fZm9udHM7CisKKyAgICBSZXNvdXJjZVVzZUNvdW50ZXJzTWFwIG1fcmVz
b3VyY2VVc2VDb3VudGVyczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZl
clByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUlt
YWdlQnVmZmVyUHJveHkuaAppbmRleCBiNDQ4YjM3Zjk3ZmU3YWU2NWRiZWJiMmE4NWFiMGM5OTRl
MWYyNmJkLi5kNGNiYzJjMGM5MDM0MzA1OTY4ZjI3N2I1NTM2MWJiMjc0ODJmZWE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVm
ZmVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkuaApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAKICAgICAg
ICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwogICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS0+cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5KCkucmVsZWFzZUltYWdlQnVmZmVyKG1f
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHktPnJlbGVhc2VSZW1vdGVSZXNvdXJjZShtX3JlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcik7CisgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5yZWxlYXNl
UmVtb3RlUmVzb3VyY2UobV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIDApOyAvLyBGSVhN
RTogUGFzcyB0aGUgcmVhbCB1c2UgY291bnQgaGVyZS4KICAgICB9CiAKICAgICBJbWFnZUJ1ZmZl
ckJhY2tlbmRIYW5kbGUgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCAwOWNlNGM2ZWY2ZDZhYmU3MWUw
M2VhYjdmYThjZDIxNGZmNjhiMGZlLi5lOTVmMWFkMzkzNGYyNTRiZDVmOTlkMjNhNWI0NjU1NTM1
Y2UwOTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0y
NDksMTIgKzI0OSwxMiBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGVsZXRl
QWxsRm9udHMoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRl
bGV0ZUFsbEZvbnRzKCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9w
dGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKIH0KIAot
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZShS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQor
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZShS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1
aW50NjRfdCB1c2VDb3VudCkKIHsKICAgICBpZiAocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
ID09IG1fY3VycmVudERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyKQogICAgICAgICBt
X2N1cnJlbnREZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllciA9IHN0ZDo6bnVsbG9wdDsK
IAotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbGVhc2VSZW1v
dGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCByZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2Fp
dGluZ0ZvclN5bmNSZXBseSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6UmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
dXNlQ291bnQpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246
OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CiB9CiAKIHZvaWQg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkaWRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQo
SW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5oCmluZGV4IDYzMTQ5NjcwYTM1OTRlMjVhMmRhNWNkMTk3NjExNDYxYzYxNzk3
NDAuLmIyY2UzZDhjMjhhYjE5MTI1MzUxOTAyN2ZjOTA3NGQyMGVkMTcyODIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMTA0LDcgKzEwNCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUm
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgY2FjaGVG
b250KFJlZjxXZWJDb3JlOjpGb250PiYmKTsKICAgICB2b2lkIGRlbGV0ZUFsbEZvbnRzKCk7Ci0g
ICAgdm9pZCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KTsKIAogICAgIGVudW0g
Y2xhc3MgRGlkUmVjZWl2ZUJhY2tlbmRDcmVhdGlvblJlc3VsdCA6IGJvb2wgewogICAgICAgICBS
ZWNlaXZlZEFueVJlc3BvbnNlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCmlu
ZGV4IDAzZjM0YjMzYTIyZGQ0OTI4ZDQyNjBlNDc4NjJkMzkxMzcxMTAxYWYuLjQxNGUxOTk2ZThi
YzI5OTViN2Y3MDc2YWU2YTUyMTRkNjM2NzY2OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2Fj
aGVQcm94eS5jcHAKQEAgLTEyMSw4ICsxMjEsNyBAQCB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQ
cm94eTo6cmVsZWFzZU5hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZQog
ICAgIGlmICghbV9uYXRpdmVJbWFnZXMucmVtb3ZlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFRlbGwgdGhlIEdQVSBwcm9jZXNzIHRvIHJl
bW92ZSB0aGlzIHJlc291cmNlLgotICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LnJl
bGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIG1f
cmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIDApOyAvLyBGSVhNRTogUGFzcyB0aGUgcmVhbCB1c2UgY291
bnQgaGVyZS4KIH0KIAogdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OnByZXBhcmVGb3JO
ZXh0UmVuZGVyaW5nVXBkYXRlKCkKQEAgLTEzNCw3ICsxMzMsNyBAQCB2b2lkIFJlbW90ZVJlc291
cmNlQ2FjaGVQcm94eTo6cHJlcGFyZUZvck5leHRSZW5kZXJpbmdVcGRhdGUoKQogdm9pZCBSZW1v
dGVSZXNvdXJjZUNhY2hlUHJveHk6OmNsZWFyRm9udE1hcCgpCiB7CiAgICAgZm9yIChhdXRvJiBp
dGVtIDogbV9mb250SWRlbnRpZmllclRvTGFzdFJlbmRlcmluZ1VwZGF0ZVZlcnNpb25NYXApCi0g
ICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNvdXJj
ZShpdGVtLmtleSk7CisgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LnJlbGVh
c2VSZW1vdGVSZXNvdXJjZShpdGVtLmtleSwgMCk7IC8vIEZJWE1FOiBQYXNzIHRoZSByZWFsIHVz
ZSBjb3VudCBoZXJlLgogICAgIG1fZm9udElkZW50aWZpZXJUb0xhc3RSZW5kZXJpbmdVcGRhdGVW
ZXJzaW9uTWFwLmNsZWFyKCk7CiAgICAgbV9udW1iZXJPZkZvbnRzVXNlZEluQ3VycmVudFJlbmRl
cmluZ1VwZGF0ZSA9IDA7CiB9CkBAIC0xNTIsNyArMTUxLDcgQEAgdm9pZCBSZW1vdGVSZXNvdXJj
ZUNhY2hlUHJveHk6OmZpbmFsaXplUmVuZGVyaW5nVXBkYXRlRm9yRm9udHMoKQogICAgIGZvciAo
YXV0byYgaXRlbSA6IG1fZm9udElkZW50aWZpZXJUb0xhc3RSZW5kZXJpbmdVcGRhdGVWZXJzaW9u
TWFwKSB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRSZW5kZXJpbmdVcGRhdGVWZXJzaW9uIC0gaXRl
bS52YWx1ZSA+PSBtaW5pbXVtUmVuZGVyaW5nVXBkYXRlQ291bnRUb0tlZXBGb250QWxpdmUpIHsK
ICAgICAgICAgICAgIHRvUmVtb3ZlLmFkZChpdGVtLmtleSk7Ci0gICAgICAgICAgICBtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UoaXRlbS5rZXkpOwor
ICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJl
c291cmNlKGl0ZW0ua2V5LCAwKTsgLy8gRklYTUU6IFBhc3MgdGhlIHJlYWwgdXNlIGNvdW50IGhl
cmUuCiAgICAgICAgIH0KICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434159</attachid>
            <date>2021-07-23 23:54:59 -0700</date>
            <delta_ts>2021-07-26 18:21:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228222-20210723235458.patch</filename>
            <type>text/plain</type>
            <size>24380</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQ4OTNhNTgzODc4NmVm
MmJhOTM2NTg2YzRiYWI4OGY0NmY5MTQzZS4uMGRhZDIxNTVkZTYxOWU1NjkyMDU3MzRjM2Y4MTkx
NDI3NjliMWJlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA3LTIzICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9j
ZXNzXSBBZGQgcmVzb3VyY2UgdXNlIGNvdW50ZXIgaW5mcmFzdHJ1Y3R1cmUgdG8gUmVtb3RlUmVz
b3VyY2VDYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI4MjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBpcyBwYXJ0IDIgb2YgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyODIxNi4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBi
ZWhhdmlvciBjaGFuZ2UgeWV0LiBUaGlzIHBhdGNoIGlzIGp1c3QgYWRkaW5nIGluZnJhc3RydWN0
dXJlLiBGb3Igbm93LCBhbGwgdGhlc2UKKyAgICAgICAgdXNlIGNvdW50cyBzZW50IGJ5IHRoZSB3
ZWIgcHJvY2VzcyBhcmUgMCAtIEknbGwgaW1wbGVtZW50IHRoYXQgcGFydCBpbiAzIGZvbGxvdy11
cCBwYXRjaGVzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVwbGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBs
YXllcjo6RGVsZWdhdGU6OnJlY29yZFJlc291cmNlVXNlKToKKwogMjAyMS0wNy0yMyAgQW5kcmVz
IEdvbnphbGV6ICA8YW5kcmVzZ18yMkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgbWV0aG9k
IHRvIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHNvIHRoYXQgY2xpZW50cyBjYW4gcmV0
cmlldmUgdGhlIHRleHQgb2YgZWFjaCBsaW5lIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGJvdW5k
aW5nIHJlY3RhbmdsZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGViMjk0OTRkNGZiN2JlMjA2NTlkYjQwMTNlZjA1
NTBmMTI2MTNmMjMuLjJmOGM4ZjVkNGI5MDI1ZjBhYzNjMjM5NDM4YzBiNTE0ODQ0MzU0NjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMjEtMDctMjMgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3NdIEFkZCByZXNvdXJj
ZSB1c2UgY291bnRlciBpbmZyYXN0cnVjdHVyZSB0byBSZW1vdGVSZXNvdXJjZUNhY2hlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjgyMjIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFk
ZHMgdGhlIGluZnJhc3RydWN0dXJlIGZvciBhc3NvY2lhdGluZyBhIGNvdW50ZXIgd2l0aCBlYWNo
IHJlc291cmNlIGluIHRoZSBSZW1vdGVSZXNvdXJjZUNhY2hlLgorICAgICAgICBBcyB0aGUgd2Vi
IHByb2Nlc3MgdXNlcyBhIHJlc291cmNlIGR1cmluZyBkaXNwbGF5IGxpc3QgcmVjb3JkaW5nLCBp
dCBpbmNyZW1lbnRzIGEgY291bnRlciwgYW5kIGFzIHRoZSBHUFUKKyAgICAgICAgcHJvY2VzcyB1
c2VzIGEgcmVzb3VyY2UsIGl0IGluY3JlbWVudHMgYSBjb3VudGVyIGluIHRoZSBSZW1vdGVSZXNv
dXJjZUNhY2hlLiBXaGVuIHRoZSB3ZWIgcHJvY2VzcyBpcyBkb25lCisgICAgICAgIHdpdGggYSBy
ZXNvdXJjZSwgaXQgc2VuZHMgYSByZWxlYXNlIG1lc3NhZ2UgdG8gdGhlIEdQVSBwcm9jZXNzIHdo
aWNoIGNydWNpYWxseSBpbmNsdWRlcyB0aGUgd2ViIHByb2Nlc3MncworICAgICAgICBjb3VudGVy
LiBUaGUgR1BVIHByb2Nlc3MgaGFzIHRvIHRoZW4gd2FpdCB0byBhY3R1YWxseSBkZWxldGUgdGhl
IHJlc291cmNlIHVudGlsIGl0cyBvd24gdXNlIGNvdW50ZXIgbWF0Y2hlcworICAgICAgICB0aGUg
b25lIGl0IHJlY2VpdmVkIGZyb20gdGhlIHdlYiBwcm9jZXNzLiBUaGlzIHBhdGNoIGltcGxlbWVu
dHMgdGhpcyBkZWZlcnJlZCBkZWxldGlvbiBpbmZyYXN0cnVjdHVyZQorICAgICAgICBpbiB0aGUg
R1BVIHByb2Nlc3MuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpSZXBsYXllckRlbGVnYXRlOjpyZWNvcmRSZXNvdXJjZVVzZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZSk6IFBhc3MgdGhl
IHVzZSBjb3VudCB0byB0aGUgUmVtb3RlUmVzb3VyY2VDYWNoZS4KKyAgICAgICAgKiBHUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDogQWRkIHRoZSB1c2UgY291bnQg
ZmllbGQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLm1lc3NhZ2VzLmluOiBEaXR0by4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlc291cmNlQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNh
Y2hlOjpjYWNoZUltYWdlQnVmZmVyKTogSXQncyBhY3R1YWxseSBva2F5IGlmIHRoZXJlJ3MgYWxy
ZWFkeSBhbiByZXNvdXJjZSBjYWNoZWQuCisgICAgICAgIFRoYXQganVzdCBtZWFucyB0aGF0IHRo
ZSB3ZWIgcHJvY2VzcyBzdGFydGVkIHVzaW5nIGEgcmVzb3VyY2UgYWdhaW4gYmVmb3JlIHRoZSBH
UFUgcHJvY2VzcyBjb25zdW1lZCBhbGwKKyAgICAgICAgY29tbWFuZHMgdGhhdCB1c2VkIGl0IHRo
ZSBmaXJzdCB0aW1lLiBBbGwgd2UgbmVlZCB0byBkbyBpcyBpbmNyZW1lbnQgdGhlIG9wZW4gY291
bnQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlTmF0aXZlSW1h
Z2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2FjaGVG
b250KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGU6OmVuc3Vy
ZVJlc291cmNlVXNlQ291bnRlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2Fj
aGU6Om1heWJlUmVtb3ZlUmVzb3VyY2UpOiBUaGlzIGlzIGNhbGxlZCB3aGVuZXZlciBpdCdzIHBv
c3NpYmxlIGZvciB1cyB0byBiZSBpbgorICAgICAgICBzaXR1YXRpb24gd2hlcmUgd2Ugc2hvdWxk
IGJlIHJlbW92aW5nIGEgcmVzb3VyY2UgKGFrYSB3aGVuZXZlciB0aGUgdXNlIGNvdW50IGluY3Jl
bWVudHMpLiBJdCBjaGVja3MgdG8gc2VlCisgICAgICAgIGlmIHdlIGNhbiByZW1vdmUgdGhlIHJl
c291cmNlLCBhbmQgaWYgaXQgY2FuLCBkb2VzIHNvLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZXNvdXJjZUNhY2hlOjpyZWNvcmRSZXNvdXJjZVVzZSk6IFRoZSBjYWxsYmFjayB0aGF0IHJ1bnMg
Zm9yIGVhY2ggcmVzb3VyY2UgdXNlIGR1cmluZworICAgICAgICByZXBsYXlpbmcuIEl0IGNhbid0
IGFjdHVhbGx5IGRlbGV0ZSBhbnkgcmVzb3VyY2VzLCBzbyBpbnN0ZWFkIGl0IGp1c3QgcmVjb3Jk
cyB3aGljaCByZXNvdXJjZXMgaGFkIHRoZWlyCisgICAgICAgIHVzZSBjb3VudHMgaW5jcmVtZW50
ZWQsIGFuZCB3YWl0cyBmb3IgcHJ1bmUoKSB0byBhY3R1YWxseSBjYWxsIG1heWJlUmVtb3ZlUmVz
b3VyY2UoKS4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZTo6cHJ1bmUpOiBB
ZnRlciB0aGUgcmVwbGF5IGlzIGNvbXBsZXRlLCBjYWxsIG1heWJlUmVtb3ZlUmVzb3VyY2UoKSBv
biBhbGwgdGhlCisgICAgICAgIHJlc291cmNlcyB3aGljaCBoYWQgdGhlaXIgdXNlIGNvdW50ZXJz
IHRvdWNoZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGU6OnJlbGVhc2VS
ZW1vdGVSZXNvdXJjZSk6IFB1dCB0aGUgcmVsZXZhbnQgcmVzb3VyY2UgaW50byB0aGUgc3RhdGUg
d2hlcmUgd2UKKyAgICAgICAgYXJlIHdhaXRpbmcgZm9yIHRoZSB1c2UgY291bnRlcnMgdG8gbWF0
Y2ggYmVmb3JlIHdlIGNhbiBkZWxldGUgdGhlIHJlc291cmNlLiBBbHNvLCBjYWxsIG1heWJlUmVt
b3ZlUmVzb3VyY2UoKQorICAgICAgICBzbyBpdCBjYW4gYmUgZGVsZXRlZCBpbW1lZGlhdGVseSBp
ZiB0aGUgY291bnRlcnMgYWxyZWFkeSBtYXRjaC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuaDogQWRkIGEgbmV3IGRhdGEgc3RydWN0dXJlIHRvIGhv
bGQgdGhlIHVzZSBjb3VudGVycy4gVGhlcmUncworICAgICAgICBhIGJpZyBjb21tZW50IGluIGhl
cmUgdGhhdCBkZXNjcmliZXMgd2hhdCB0aGVzZSBmaWVsZHMgbWVhbi4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6On5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KTog
U2VuZCBhIGR1bW15IHVzZSBjb3VudCBmb3Igbm93LiBUaGlzIHdpbGwgYmUKKyAgICAgICAgaW1w
bGVtZW50ZWQgaW4gYSBmb2xsb3ctdXAgcGF0Y2guCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlUmVtb3RlUmVzb3VyY2UpOiBB
ZGQgdGhlIHVzZUNvdW50IHBhcmFtZXRlci4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDogRGl0dG8uCisgICAgICAgICogV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpyZWxlYXNlTmF0aXZlSW1hZ2Up
OiBTZW5kIGEgZHVtbXkgdXNlIGNvdW50IGZvciBub3cuIFRoaXMgd2lsbCBiZQorICAgICAgICBp
bXBsZW1lbnRlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVzb3VyY2VDYWNoZVByb3h5OjpjbGVhckZvbnRNYXApOiBEaXR0by4KKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpmaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZUZvckZv
bnRzKTogRGl0dG8uCisKIDIwMjEtMDctMjMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5z
ZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIFdLQ29udGVudFJ1bGVMaXN0U3RvcmUgcmVz
cG9uZCB0byBzYW1lIHNlbGVjdG9ycyBhcyBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZXBsYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaAppbmRleCAxNjYyN2EwMjA2ZTMwOTI0
M2Y4YjdiZDE4Y2RiM2RhNTg2MDc4YThmLi42YTQ2NDMyN2NjZjE1MDZhZDdmZDkyNWRiNTVkNTM2
YTVmZTI4NTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKQEAgLTY4
LDYgKzY4LDcgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoSXRlbUhhbmRs
ZSwgR3JhcGhpY3NDb250ZXh0JikgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCB2
b2lkIGRpZENyZWF0ZU1hc2tJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIHsgfQog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIoKSB7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJlY29yZFJlc291cmNlVXNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcikgeyB9CiAgICAgfTsKICAgICAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAK
aW5kZXggZWE4Mjg2ZGEwYzlkZTRkZmNhN2RlMzViZTMzN2RmMDMyYzAzN2U3ZS4uOGY0ZmRmZGE1
NGU0ZGY0ZjFmYjVlNjlhMmFiNDllOWJiNTk4ZTBlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cApAQCAtMTg0LDE3ICsxODQsMTQgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVh
dGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW4KICAgICAgICAg
d2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChzdGQ6OmV4Y2hhbmdlKG1fcGVuZGluZ1dha2V1cElu
Zm8sIHN0ZDo6bnVsbG9wdCktPmFyZ3VtZW50cyk7CiB9CiAKLVJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OlJlcGxheWVyRGVsZWdhdGU6OlJlcGxheWVyRGVsZWdhdGUoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXImIGRlc3RpbmF0aW9uLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiByZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzKQorUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6UmVwbGF5ZXJE
ZWxlZ2F0ZShXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgZGVzdGluYXRpb24sIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQmIHJlbW90ZVJlbmRlcmluZ0JhY2tlbmQpCiAgICAgOiBtX2Rlc3RpbmF0aW9uKGRl
c3RpbmF0aW9uKQogICAgICwgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kKHJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQpCi0gICAgLCBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcykKIHsKIH0KIAogYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBs
YXllckRlbGVnYXRlOjphcHBseShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVt
LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCkKIHsKLSAgICAvLyBG
SVhNRTogSW5zcGVjdCB0aGUgaXRlbSBhbmQgcmVjb3JkIHJlc291cmNlIHVzZSBoZXJlLgotCiAg
ICAgYXV0byBhcHBseSA9IFsmXShhdXRvJiYgZGVzdGluYXRpb24pIHsKICAgICAgICAgcmV0dXJu
IGRlc3RpbmF0aW9uLmFwcGx5KGl0ZW0sIGdyYXBoaWNzQ29udGV4dCk7CiAgICAgfTsKQEAgLTIx
NCwxMiArMjExLDE3IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxl
Z2F0ZTo6ZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIoKQogICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5kaWRSZXNldE1hc2tJbWFnZUJ1ZmZlcigpOwogfQogCit2b2lkIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OnJlY29yZFJlc291cmNlVXNlKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit7CisgICAgbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLnJlbW90ZVJlc291cmNlQ2FjaGUoKS5yZWNvcmRSZXNvdXJj
ZVVzZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworfQorCiBEaXNwbGF5TGlzdDo6UmVw
bGF5UmVzdWx0IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnN1Ym1pdChjb25zdCBEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBJbWFnZUJ1ZmZlciYgZGVzdGluYXRpb24pCiB7
CiAgICAgaWYgKGRpc3BsYXlMaXN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIFJlcGxheWVyRGVsZWdhdGUgcmVwbGF5ZXJEZWxlZ2F0ZShkZXN0aW5hdGlvbiwgKnRoaXMs
IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcyk7CisgICAgUmVwbGF5ZXJEZWxlZ2F0ZSByZXBs
YXllckRlbGVnYXRlKGRlc3RpbmF0aW9uLCAqdGhpcyk7CiAKICAgICByZXR1cm4gV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlcGxheWVyIHsKICAgICAgICAgZGVzdGluYXRpb24uY29udGV4dCgpLApA
QCAtNTA5LDEwICs1MTEsMTEgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkZWxldGVB
bGxGb250cygpCiAgICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmRlbGV0ZUFsbEZvbnRzKCk7CiB9
CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZShSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRf
dCB1c2VDb3VudCkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBtX3Jl
bW90ZVJlc291cmNlQ2FjaGUucmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7CisgICAgYXV0byBzdWNjZXNzID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLnJl
bGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVzZUNvdW50
KTsKKyAgICBNRVNTQUdFX0NIRUNLKHN1Y2Nlc3MsICJSZXNvdXJjZSBpcyBiZWluZyByZWxlYXNl
ZCBiZWZvcmUgYmVpbmcgY2FjaGVkLiIpOwogICAgIHVwZGF0ZVJlbmRlcmluZ1Jlc291cmNlUmVx
dWVzdCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCBmN2JmNmJjM2IwNzNhZGJlYWU2
ZjZiODYyZmEzNjdmNmFiMDBlNWIwLi5mM2Q4MjMwMTNjZTI3OWU1N2NjM2U0YjA0MTM2MTZlNWM0
OGI3NTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTE0NCwyMSArMTQ0LDIxIEBAIHByaXZh
dGU6CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGNh
Y2hlRm9udChSZWY8V2ViQ29yZTo6Rm9udD4mJik7CiAgICAgdm9pZCBkZWxldGVBbGxGb250cygp
OwotICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCk7CiAgICAgdm9p
ZCBkaWRDcmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiwgV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGRlc3RpbmF0aW9uQnVmZmVySWRlbnRp
Zmllcik7CiAKICAgICBjbGFzcyBSZXBsYXllckRlbGVnYXRlIDogcHVibGljIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZXBsYXllcjo6RGVsZWdhdGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgUmVw
bGF5ZXJEZWxlZ2F0ZShXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQmLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJik7CisgICAgICAgIFJlcGxheWVyRGVsZWdh
dGUoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJik7CiAKICAg
ICBwcml2YXRlOgogICAgICAgICBib29sIGFwcGx5KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
SGFuZGxlLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKSBmaW5hbDsKICAgICAgICAgdm9pZCBk
aWRDcmVhdGVNYXNrSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKSBmaW5hbDsKICAg
ICAgICAgdm9pZCBkaWRSZXNldE1hc2tJbWFnZUJ1ZmZlcigpIGZpbmFsOworICAgICAgICB2b2lk
IHJlY29yZFJlc291cmNlVXNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikg
ZmluYWw7CiAKICAgICAgICAgV2ViQ29yZTo6SW1hZ2VCdWZmZXImIG1fZGVzdGluYXRpb247CiAg
ICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZDsK
LSAgICAgICAgUmVmPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzczsKICAgICB9OwogCiAgICAgc3RydWN0IFBlbmRpbmdXYWtldXBJbmZvcm1hdGlv
biB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IDRiM2ZlOWEw
MjYyZThhNTQ5MTg1MmM2ZDZhMDQwNDVkNmE2OTYzOTcuLmZmNjJhZjUxMWYzZTJlNWNlYmY0NzQx
YmIzNTAzMzg0OTRlMzhlYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2Vz
LmluCkBAIC0zNiw3ICszNiw3IEBAIG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQg
ewogICAgIENhY2hlRm9udChJUEM6OkZvbnRSZWZlcmVuY2UgZm9udCkKICAgICBEZWxldGVBbGxG
b250cygpCiAgICAgRGlkQ3JlYXRlU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYktpdDo6U2hhcmVk
TWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKQotICAgIFJlbGVhc2VSZW1vdGVSZXNv
dXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKQorICAgIFJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRf
dCB1c2VDb3VudCkKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNh
Y2hlLmNwcAppbmRleCA4MWRkZTBiZmZjZjBiZDZjYzFjMjhlNWRkMjQ2Mzc0YjM0NjQ2Mjc4Li4x
NDYwNzE4ZjFiMjkwNjRiMzFlYzNjN2UxMWFhMGY4ZjZlZDk0MmFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUu
Y3BwCkBAIC0zMyw4ICszMywxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogdm9pZCBS
ZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZUltYWdlQnVmZmVyKFJlZjxJbWFnZUJ1ZmZlcj4mJiBp
bWFnZUJ1ZmZlcikKIHsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1faW1hZ2VCdWZmZXJzLmFkZChp
bWFnZUJ1ZmZlci0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIFdURk1vdmUoaW1hZ2VC
dWZmZXIpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50
cnkpOworICAgIGF1dG8gcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyID0gaW1hZ2VCdWZmZXIt
PnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOworICAgIG1faW1hZ2VCdWZmZXJzLmFkZChy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdURk1vdmUoaW1hZ2VCdWZmZXIpKTsKKworICAg
IGVuc3VyZVJlc291cmNlVXNlQ291bnRlcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwog
fQogCiBJbWFnZUJ1ZmZlciogUmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2FjaGVkSW1hZ2VCdWZmZXIo
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikK
QEAgLTQ0LDE0ICs0NiwyOCBAQCBJbWFnZUJ1ZmZlciogUmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2Fj
aGVkSW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyCiAKIHZvaWQgUmVtb3Rl
UmVzb3VyY2VDYWNoZTo6Y2FjaGVOYXRpdmVJbWFnZShSZWY8TmF0aXZlSW1hZ2U+JiYgaW1hZ2Up
CiB7Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX25hdGl2ZUltYWdlcy5hZGQoaW1hZ2UtPnJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBXVEZNb3ZlKGltYWdlKSk7Ci0gICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBhdXRvIHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciA9IGltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIo
KTsKKyAgICBtX25hdGl2ZUltYWdlcy5hZGQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBX
VEZNb3ZlKGltYWdlKSk7CisKKyAgICBlbnN1cmVSZXNvdXJjZVVzZUNvdW50ZXIocmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNo
ZUZvbnQoUmVmPEZvbnQ+JiYgZm9udCkKIHsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZm9udHMu
YWRkKGZvbnQtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBXVEZNb3ZlKGZvbnQpKTsK
LSAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAg
IGF1dG8gcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyID0gZm9udC0+cmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKCk7CisgICAgbV9mb250cy5hZGQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLCBXVEZNb3ZlKGZvbnQpKTsKKworICAgIGVuc3VyZVJlc291cmNlVXNlQ291bnRlcihyZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworfQorCit2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6
OmVuc3VyZVJlc291cmNlVXNlQ291bnRlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQoreworICAgIGF1dG8gcmVzdWx0ID0gbV9yZXNvdXJj
ZVVzZUNvdW50ZXJzLmFkZChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFJlc291cmNlVXNl
Q291bnRlciB7IH0pOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgYXV0
byYgc3RhdGUgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnN0YXRlOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChzdGF0ZSA9PSBSZXNvdXJjZVN0YXRlOjpUb0JlRGVsZXRlZCk7CisgICAgICAgIHN0
YXRlID0gUmVzb3VyY2VTdGF0ZTo6QWxpdmU7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZVJlc291
cmNlQ2FjaGU6OmRlbGV0ZUFsbEZvbnRzKCkKQEAgLTU5LDE2ICs3NSw1MyBAQCB2b2lkIFJlbW90
ZVJlc291cmNlQ2FjaGU6OmRlbGV0ZUFsbEZvbnRzKCkKICAgICBtX2ZvbnRzLmNsZWFyKCk7CiB9
CiAKLXZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZTo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCitib29s
IFJlbW90ZVJlc291cmNlQ2FjaGU6Om1heWJlUmVtb3ZlUmVzb3VyY2UoUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgUmVzb3VyY2VVc2VDb3Vu
dGVyc01hcDo6aXRlcmF0b3ImIGl0ZXJhdG9yKQogeworICAgIC8vIEl0J3MgYWN0dWFsbHkgb2th
eSBpZiB1c2VDb3VudCA+IDAuCisgICAgLy8gSXQganVzdCBtZWFucyB0aGF0IHRoZXJlJ3MgYSBj
YWNoZSBtZXNzYWdlIHBlbmRpbmcsIGFuZCB3ZSd2ZSBlYWdlcmx5IHVzZWQgYSBwcmV2aW91c2x5
LWNhY2hlZCByZXNvdXJjZS4KKyAgICAvLyBXaGljaCBpcyBmaW5lLgorICAgIC8vIEZJWE1FOiBN
YXliZSB3ZSBzaG91bGRuJ3QgYWN0dWFsbHkgcmVtb3ZlIHRoZSByZXNvdXJjZSBpbiB0aGlzIHNp
dHVhdGlvbj8KKyAgICAvLyBXZSBtYXkgYWN0dWFsbHkgYmUgYWJsZSB0byBnZXQgYSBoZWFkIHN0
YXJ0IG9uIHNvbWUgZGlzcGxheSBsaXN0IGl0ZW1zIGlmIHRoZXkncmUgcmVhZHkgZm9yIHVzIGFu
ZCB3ZSBoYXZlIHRoZSByZXNvdXJjZXMgdGhleSBkZXBlbmQgb24uCisKKyAgICBhdXRvJiB2YWx1
ZSA9IGl0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAodmFsdWUuc3RhdGUgPT0gUmVzb3VyY2VTdGF0
ZTo6QWxpdmUgfHwgdmFsdWUudXNlT3JQZW5kaW5nQ291bnQgPCAwKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGlmICghdmFsdWUudXNlT3JQZW5kaW5nQ291bnQpCisgICAgICAgIG1fcmVz
b3VyY2VVc2VDb3VudGVycy5yZW1vdmUoaXRlcmF0b3IpOworCiAgICAgaWYgKG1faW1hZ2VCdWZm
ZXJzLnJlbW92ZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChtX25hdGl2ZUltYWdlcy5yZW1vdmUocmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICBpZiAobV9mb250cy5yZW1vdmUocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIC8vIENh
Y2hpbmcgdGhlIHJlbW90ZSByZXNvdXJjZSBzaG91bGQgaGF2ZSBoYXBwZW5lZCBiZWZvcmUgcmVs
ZWFzaW5nIGl0LgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpyZWNvcmRSZXNvdXJjZVVzZShSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQoreworICAg
IGF1dG8gaXRlcmF0b3IgPSBtX3Jlc291cmNlVXNlQ291bnRlcnMuZmluZChyZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpOworCisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fcmVzb3VyY2VVc2VD
b3VudGVycy5lbmQoKSk7CisKKyAgICBSZXNvdXJjZVVzZUNvdW50ZXImIHVzZUNvdW50ZXIgPSBp
dGVyYXRvci0+dmFsdWU7CisgICAgKyt1c2VDb3VudGVyLnVzZU9yUGVuZGluZ0NvdW50OworCisg
ICAgbWF5YmVSZW1vdmVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGl0ZXJh
dG9yKTsKK30KKworYm9vbCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpyZWxlYXNlUmVtb3RlUmVzb3Vy
Y2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgdWludDY0X3QgdXNlQ291bnQpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcmVzb3VyY2VV
c2VDb3VudGVycy5maW5kKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgaWYgKGl0
ZXJhdG9yID09IG1fcmVzb3VyY2VVc2VDb3VudGVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIFJlc291cmNlVXNlQ291bnRlciYgdXNlQ291bnRlciA9IGl0ZXJhdG9yLT52YWx1
ZTsKKyAgICB1c2VDb3VudGVyLnN0YXRlID0gUmVzb3VyY2VTdGF0ZTo6VG9CZURlbGV0ZWQ7Cisg
ICAgdXNlQ291bnRlci51c2VPclBlbmRpbmdDb3VudCAtPSB1c2VDb3VudDsKKyAgICByZXR1cm4g
bWF5YmVSZW1vdmVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGl0ZXJhdG9y
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuaAppbmRleCAyY2VkOTA5
ZjQ4MTEwYzY2NjU2ZGUxYmZlMzgxMWRiYWJhYWE5ZjRmLi5hMDhlNTkzZGI1ZDNmNTJiZWQ4MTVi
YWFjMjcwYWE1ZGI3NTI5MTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmgKQEAgLTQ2LDE2ICs0Niw0MyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKFJlZjxXZWJDb3JlOjpOYXRpdmVJbWFn
ZT4mJik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZv
aWQgZGVsZXRlQWxsRm9udHMoKTsKLSAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIGJvb2wgcmVsZWFzZVJlbW90
ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3Qg
dXNlQ291bnQpOworICAgIHZvaWQgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKTsKIAogICAgIGNvbnN0IFdlYkNvcmU6OkltYWdlQnVmZmVySGFz
aE1hcCYgaW1hZ2VCdWZmZXJzKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUJ1ZmZlcnM7IH0KICAg
ICBjb25zdCBXZWJDb3JlOjpOYXRpdmVJbWFnZUhhc2hNYXAmIG5hdGl2ZUltYWdlcygpIGNvbnN0
IHsgcmV0dXJuIG1fbmF0aXZlSW1hZ2VzOyB9CiAgICAgY29uc3QgV2ViQ29yZTo6Rm9udFJlbmRl
cmluZ1Jlc291cmNlTWFwJiBmb250cygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udHM7IH0KIAogcHJp
dmF0ZToKKyAgICAvLyBCZWNhdXNlIHRoZSBjYWNoZS9yZWxlYXNlIG1lc3NhZ2VzIGFyZSBzZW50
IGFzeW5jaHJvbm91c2x5IGZyb20gdGhlIGRpc3BsYXkgbGlzdCBpdGVtcyB3aGljaAorICAgIC8v
IHJlZmVyZW5jZSB0aGUgcmVzb3VyY2VzLCBpdCdzIHRvdGFsbHkgcG9zc2libGUgdGhhdCB3ZSBz
ZWUgYSByZWxlYXNlIG1lc3NhZ2UgYmVmb3JlIHdlJ3ZlCisgICAgLy8gZXhlY3V0ZWQgYWxsIHRo
ZSBkaXNwbGF5IGxpc3QgaXRlbXMgd2hpY2ggcmVmZXJlbmNlIHRoZSByZXNvdXJjZS4gVGhlIHdl
YiBwcm9jZXNzIHRlbGxzIHVzCisgICAgLy8gaG93IG1hbnkgZGlzcGxheSBsaXN0IGl0ZW1zIHdp
bGwgcmVmZXJlbmNlIHRoaXMgcmVzb3VyY2UsIGFuZCB3ZSBkZWZlciBkZWxldGlvbiBvZiB0aGUg
cmVzb3VyY2UKKyAgICAvLyB1bnRpbCB3ZSBleGVjdXRlIHRoYXQgbWFueSBkaXNwbGF5IGxpc3Qg
aXRlbXMuIEl0J3MgYWN0dWFsbHkgYSBiaXQgd29yc2UgdGhhbiB0aGlzLCB0aG91Z2gsCisgICAg
Ly8gYmVjYXVzZSB3ZSBtYXkgYWN0dWFsbHkgc2VlIGEgKm5ldyogY2FjaGUgbWVzc2FnZSBkdXJp
bmcgdGhlIHRpbWUgd2hlbiBkZWxldGlvbiBpcyBkZWZlcnJlZC4KKyAgICAvLworICAgIC8vIFdl
IGNhbiBvbmx5IHNhZmVseSBkZWxldGUgYSByZXNvdXJjZSB3aGVuOgorICAgIC8vIDEuIEFsbCB0
aGUgY2FjaGUgbWVzc2FnZXMgaGF2ZSBhbiBhY2NvbXBhbnlpbmcgcmVsZWFzZSBtZXNzYWdlLCBh
bmQKKyAgICAvLyAyLiBXZSd2ZSBwcm9jZXNzZWQgYXMgbWFueSBkaXNwbGF5IGxpc3QgaXRlbXMg
dGhhdCByZWZlcmVuY2UgYSBwYXJ0aWN1bGFyIHJlc291cmNlIGFzIHRoZSB3ZWIKKyAgICAvLyBw
cm9jZXNzIGhhcyBlbmNvZGVkLgorICAgIGVudW0gY2xhc3MgUmVzb3VyY2VTdGF0ZSB7CisgICAg
ICAgIEFsaXZlLAorICAgICAgICBUb0JlRGVsZXRlZAorICAgIH07CisgICAgc3RydWN0IFJlc291
cmNlVXNlQ291bnRlciB7CisgICAgICAgIFJlc291cmNlU3RhdGUgc3RhdGUgeyBSZXNvdXJjZVN0
YXRlOjpBbGl2ZSB9OworICAgICAgICBpbnQ2NF90IHVzZU9yUGVuZGluZ0NvdW50IHsgMCB9Owor
ICAgIH07CisgICAgdXNpbmcgUmVzb3VyY2VVc2VDb3VudGVyc01hcCA9IEhhc2hNYXA8V2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBSZXNvdXJjZVVzZUNvdW50ZXI+OworCisg
ICAgYm9vbCBtYXliZVJlbW92ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciwgUmVzb3VyY2VVc2VDb3VudGVyc01hcDo6aXRlcmF0b3ImKTsKKyAgICB2b2lkIGVu
c3VyZVJlc291cmNlVXNlQ291bnRlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpOworCiAgICAgV2ViQ29yZTo6SW1hZ2VCdWZmZXJIYXNoTWFwIG1faW1hZ2VCdWZmZXJzOwog
ICAgIFdlYkNvcmU6Ok5hdGl2ZUltYWdlSGFzaE1hcCBtX25hdGl2ZUltYWdlczsKICAgICBXZWJD
b3JlOjpGb250UmVuZGVyaW5nUmVzb3VyY2VNYXAgbV9mb250czsKKworICAgIFJlc291cmNlVXNl
Q291bnRlcnNNYXAgbV9yZXNvdXJjZVVzZUNvdW50ZXJzOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCmluZGV4IGI0NDhiMzdmOTdmZTdhZTY1
ZGJlYmIyYTg1YWIwYzk5NGUxZjI2YmQuLmQ0Y2JjMmMwYzkwMzQzMDU5NjhmMjc3YjU1MzYxYmIy
NzQ4MmZlYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC03Miw3ICs3Miw3IEBA
IHB1YmxpYzoKIAogICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CiAgICAgICAgIG1fcmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkoKS5yZWxl
YXNlSW1hZ2VCdWZmZXIobV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgICAgICBt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVsZWFzZVJlbW90ZVJlc291cmNlKG1fcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHktPnJlbGVhc2VSZW1vdGVSZXNvdXJjZShtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgMCk7IC8vIEZJWE1FOiBQYXNzIHRoZSByZWFsIHVzZSBjb3VudCBoZXJlLgogICAgIH0K
IAogICAgIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRI
YW5kbGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4IDA5
Y2U0YzZlZjZkNmFiZTcxZTAzZWFiN2ZhOGNkMjE0ZmY2OGIwZmUuLmU5NWYxYWQzOTM0ZjI1NGJk
NWY5OWQyM2E1YjQ2NTU1MzVjZTA5MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5jcHAKQEAgLTI0OSwxMiArMjQ5LDEyIEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpkZWxldGVBbGxGb250cygpCiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6RGVsZXRlQWxsRm9udHMoKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JT
eW5jUmVwbHkpOwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFz
ZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFz
ZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KQogewogICAgIGlmIChyZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgPT0gbV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50
aWZpZXIpCiAgICAgICAgIG1fY3VycmVudERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVy
ID0gc3RkOjpudWxsb3B0OwogCi0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6UmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciks
IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hN
ZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLCB1c2VDb3VudCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCks
IElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1Jl
cGx5KTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRpZENyZWF0ZUlt
YWdlQnVmZmVyQmFja2VuZChJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlLCBSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKaW5kZXggNjMxNDk2NzBhMzU5NGUyNWEyZGE1
Y2QxOTc2MTE0NjFjNjE3OTc0MC4uYjJjZTNkOGMyOGFiMTkxMjUzNTE5MDI3ZmM5MDc0ZDIwZWQx
NzI4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCkBAIC0xMDQsNyAr
MTA0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7
CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVs
ZXRlQWxsRm9udHMoKTsKLSAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291
cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291
bnQpOwogCiAgICAgZW51bSBjbGFzcyBEaWRSZWNlaXZlQmFja2VuZENyZWF0aW9uUmVzdWx0IDog
Ym9vbCB7CiAgICAgICAgIFJlY2VpdmVkQW55UmVzcG9uc2UsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNl
Q2FjaGVQcm94eS5jcHAKaW5kZXggMDNmMzRiMzNhMjJkZDQ5MjhkNDI2MGU0Nzg2MmQzOTEzNzEx
MDFhZi4uNDE0ZTE5OTZlOGJjMjk5NWI3ZjcwNzZhZTZhNTIxNGQ2MzY3NjY4YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNh
Y2hlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcApAQCAtMTIxLDggKzEyMSw3IEBAIHZvaWQgUmVt
b3RlUmVzb3VyY2VDYWNoZVByb3h5OjpyZWxlYXNlTmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlCiAgICAgaWYgKCFtX25hdGl2ZUltYWdlcy5yZW1vdmUocmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gVGVsbCB0aGUg
R1BVIHByb2Nlc3MgdG8gcmVtb3ZlIHRoaXMgcmVzb3VyY2UuCi0gICAgbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcik7CisgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVsZWFzZVJlbW90
ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgMCk7IC8vIEZJWE1FOiBQYXNz
IHRoZSByZWFsIHVzZSBjb3VudCBoZXJlLgogfQogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQ
cm94eTo6cHJlcGFyZUZvck5leHRSZW5kZXJpbmdVcGRhdGUoKQpAQCAtMTM0LDcgKzEzMyw3IEBA
IHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpwcmVwYXJlRm9yTmV4dFJlbmRlcmluZ1Vw
ZGF0ZSgpCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6Y2xlYXJGb250TWFwKCkKIHsK
ICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2ZvbnRJZGVudGlmaWVyVG9MYXN0UmVuZGVyaW5nVXBk
YXRlVmVyc2lvbk1hcCkKLSAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVs
ZWFzZVJlbW90ZVJlc291cmNlKGl0ZW0ua2V5KTsKKyAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJlc291cmNlKGl0ZW0ua2V5LCAwKTsgLy8gRklYTUU6
IFBhc3MgdGhlIHJlYWwgdXNlIGNvdW50IGhlcmUuCiAgICAgbV9mb250SWRlbnRpZmllclRvTGFz
dFJlbmRlcmluZ1VwZGF0ZVZlcnNpb25NYXAuY2xlYXIoKTsKICAgICBtX251bWJlck9mRm9udHNV
c2VkSW5DdXJyZW50UmVuZGVyaW5nVXBkYXRlID0gMDsKIH0KQEAgLTE1Miw3ICsxNTEsNyBAQCB2
b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6ZmluYWxpemVSZW5kZXJpbmdVcGRhdGVGb3JG
b250cygpCiAgICAgZm9yIChhdXRvJiBpdGVtIDogbV9mb250SWRlbnRpZmllclRvTGFzdFJlbmRl
cmluZ1VwZGF0ZVZlcnNpb25NYXApIHsKICAgICAgICAgaWYgKG1fY3VycmVudFJlbmRlcmluZ1Vw
ZGF0ZVZlcnNpb24gLSBpdGVtLnZhbHVlID49IG1pbmltdW1SZW5kZXJpbmdVcGRhdGVDb3VudFRv
S2VlcEZvbnRBbGl2ZSkgewogICAgICAgICAgICAgdG9SZW1vdmUuYWRkKGl0ZW0ua2V5KTsKLSAg
ICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNv
dXJjZShpdGVtLmtleSk7CisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UoaXRlbS5rZXksIDApOyAvLyBGSVhNRTogUGFzcyB0aGUg
cmVhbCB1c2UgY291bnQgaGVyZS4KICAgICAgICAgfQogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434264</attachid>
            <date>2021-07-26 18:21:58 -0700</date>
            <delta_ts>2021-07-26 18:28:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228222-20210726182157.patch</filename>
            <type>text/plain</type>
            <size>25481</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTk5ODBhN2I4ZmNhNmI4
M2M3NGM4NzZhM2U2ODllZjM2Y2NkMWJlMS4uMTY5ZDMzZTJmOTlmZjFmNmEyNGJjMTc3MDU3NGFj
NGM0MjE5OWIyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA3LTI2ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9j
ZXNzXSBBZGQgcmVzb3VyY2UgdXNlIGNvdW50ZXIgaW5mcmFzdHJ1Y3R1cmUgdG8gUmVtb3RlUmVz
b3VyY2VDYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI4MjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBpcyBwYXJ0IDIgb2YgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyODIxNi4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBi
ZWhhdmlvciBjaGFuZ2UgeWV0LiBUaGlzIHBhdGNoIGlzIGp1c3QgYWRkaW5nIGluZnJhc3RydWN0
dXJlLiBGb3Igbm93LCBhbGwgdGhlc2UKKyAgICAgICAgdXNlIGNvdW50cyBzZW50IGJ5IHRoZSB3
ZWIgcHJvY2VzcyBhcmUgMCAtIEknbGwgaW1wbGVtZW50IHRoYXQgcGFydCBpbiAzIGZvbGxvdy11
cCBwYXRjaGVzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVwbGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBs
YXllcjo6RGVsZWdhdGU6OnJlY29yZFJlc291cmNlVXNlKToKKwogMjAyMS0wNy0yNiAgSm9obnNv
biBaaG91ICA8cWlhb3NvbmdfemhvdUBhcHBsZS5jb20+CiAKICAgICAgICAgVGhpcyBpcyByZXNw
b25kaW5nIHRvIGZlZWRiYWNrIG9uIHIyODAzMTAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDE0MTc1YzJhMzBiOTYy
OTFmODYxOGI3ODY5ODEzYmQ0ZDc4ZWViNjcuLmU0NWJiYzNkMTkyYTQ0M2VlMDFjNDNkNDMwZDI3
ZmI0MjgwMTcyYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMjEtMDctMjYgIE15bGVz
IEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nl
c3NdIEFkZCByZXNvdXJjZSB1c2UgY291bnRlciBpbmZyYXN0cnVjdHVyZSB0byBSZW1vdGVSZXNv
dXJjZUNhY2hlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjgyMjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGFkZHMgdGhlIGluZnJhc3RydWN0dXJlIGZvciBhc3NvY2lhdGluZyBhIGNv
dW50ZXIgd2l0aCBlYWNoIHJlc291cmNlIGluIHRoZSBSZW1vdGVSZXNvdXJjZUNhY2hlLgorICAg
ICAgICBBcyB0aGUgd2ViIHByb2Nlc3MgdXNlcyBhIHJlc291cmNlIGR1cmluZyBkaXNwbGF5IGxp
c3QgcmVjb3JkaW5nLCBpdCBpbmNyZW1lbnRzIGEgY291bnRlciwgYW5kIGFzIHRoZSBHUFUKKyAg
ICAgICAgcHJvY2VzcyB1c2VzIGEgcmVzb3VyY2UsIGl0IGluY3JlbWVudHMgYSBjb3VudGVyIGlu
IHRoZSBSZW1vdGVSZXNvdXJjZUNhY2hlLiBXaGVuIHRoZSB3ZWIgcHJvY2VzcyBpcyBkb25lCisg
ICAgICAgIHdpdGggYSByZXNvdXJjZSwgaXQgc2VuZHMgYSByZWxlYXNlIG1lc3NhZ2UgdG8gdGhl
IEdQVSBwcm9jZXNzIHdoaWNoIGNydWNpYWxseSBpbmNsdWRlcyB0aGUgd2ViIHByb2Nlc3Mncwor
ICAgICAgICBjb3VudGVyLiBUaGUgR1BVIHByb2Nlc3MgaGFzIHRvIHRoZW4gd2FpdCB0byBhY3R1
YWxseSBkZWxldGUgdGhlIHJlc291cmNlIHVudGlsIGl0cyBvd24gdXNlIGNvdW50ZXIgbWF0Y2hl
cworICAgICAgICB0aGUgb25lIGl0IHJlY2VpdmVkIGZyb20gdGhlIHdlYiBwcm9jZXNzLiBUaGlz
IHBhdGNoIGltcGxlbWVudHMgdGhpcyBkZWZlcnJlZCBkZWxldGlvbiBpbmZyYXN0cnVjdHVyZQor
ICAgICAgICBpbiB0aGUgR1BVIHByb2Nlc3MuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjpyZWNvcmRSZXNvdXJjZVVzZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VSZW1vdGVSZXNv
dXJjZSk6IFBhc3MgdGhlIHVzZSBjb3VudCB0byB0aGUgUmVtb3RlUmVzb3VyY2VDYWNoZS4KKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDogQWRk
IHRoZSB1c2UgY291bnQgZmllbGQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluOiBEaXR0by4KKyAgICAgICAgKiBHUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZUltYWdlQnVmZmVyKTogSXQncyBhY3R1YWxseSBva2F5
IGlmIHRoZXJlJ3MgYWxyZWFkeSBhbiByZXNvdXJjZSBjYWNoZWQuCisgICAgICAgIFRoYXQganVz
dCBtZWFucyB0aGF0IHRoZSB3ZWIgcHJvY2VzcyBzdGFydGVkIHVzaW5nIGEgcmVzb3VyY2UgYWdh
aW4gYmVmb3JlIHRoZSBHUFUgcHJvY2VzcyBjb25zdW1lZCBhbGwKKyAgICAgICAgY29tbWFuZHMg
dGhhdCB1c2VkIGl0IHRoZSBmaXJzdCB0aW1lLiBBbGwgd2UgbmVlZCB0byBkbyBpcyBpbmNyZW1l
bnQgdGhlIG9wZW4gY291bnQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGU6
OmNhY2hlTmF0aXZlSW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3Vy
Y2VDYWNoZTo6Y2FjaGVGb250KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291
cmNlQ2FjaGU6OmVuc3VyZVJlc291cmNlVXNlQ291bnRlcik6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlc291cmNlQ2FjaGU6Om1heWJlUmVtb3ZlUmVzb3VyY2UpOiBUaGlzIGlzIGNhbGxlZCB3
aGVuZXZlciBpdCdzIHBvc3NpYmxlIGZvciB1cyB0byBiZSBpbgorICAgICAgICBzaXR1YXRpb24g
d2hlcmUgd2Ugc2hvdWxkIGJlIHJlbW92aW5nIGEgcmVzb3VyY2UgKGFrYSB3aGVuZXZlciB0aGUg
dXNlIGNvdW50IGluY3JlbWVudHMpLiBJdCBjaGVja3MgdG8gc2VlCisgICAgICAgIGlmIHdlIGNh
biByZW1vdmUgdGhlIHJlc291cmNlLCBhbmQgaWYgaXQgY2FuLCBkb2VzIHNvLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlOjpyZWNvcmRSZXNvdXJjZVVzZSk6IFRoZSBjYWxs
YmFjayB0aGF0IHJ1bnMgZm9yIGVhY2ggcmVzb3VyY2UgdXNlIGR1cmluZworICAgICAgICByZXBs
YXlpbmcuIEl0IGNhbid0IGFjdHVhbGx5IGRlbGV0ZSBhbnkgcmVzb3VyY2VzLCBzbyBpbnN0ZWFk
IGl0IGp1c3QgcmVjb3JkcyB3aGljaCByZXNvdXJjZXMgaGFkIHRoZWlyCisgICAgICAgIHVzZSBj
b3VudHMgaW5jcmVtZW50ZWQsIGFuZCB3YWl0cyBmb3IgcHJ1bmUoKSB0byBhY3R1YWxseSBjYWxs
IG1heWJlUmVtb3ZlUmVzb3VyY2UoKS4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VD
YWNoZTo6cHJ1bmUpOiBBZnRlciB0aGUgcmVwbGF5IGlzIGNvbXBsZXRlLCBjYWxsIG1heWJlUmVt
b3ZlUmVzb3VyY2UoKSBvbiBhbGwgdGhlCisgICAgICAgIHJlc291cmNlcyB3aGljaCBoYWQgdGhl
aXIgdXNlIGNvdW50ZXJzIHRvdWNoZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNl
Q2FjaGU6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZSk6IFB1dCB0aGUgcmVsZXZhbnQgcmVzb3VyY2Ug
aW50byB0aGUgc3RhdGUgd2hlcmUgd2UKKyAgICAgICAgYXJlIHdhaXRpbmcgZm9yIHRoZSB1c2Ug
Y291bnRlcnMgdG8gbWF0Y2ggYmVmb3JlIHdlIGNhbiBkZWxldGUgdGhlIHJlc291cmNlLiBBbHNv
LCBjYWxsIG1heWJlUmVtb3ZlUmVzb3VyY2UoKQorICAgICAgICBzbyBpdCBjYW4gYmUgZGVsZXRl
ZCBpbW1lZGlhdGVseSBpZiB0aGUgY291bnRlcnMgYWxyZWFkeSBtYXRjaC4KKyAgICAgICAgKiBH
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuaDogQWRkIGEgbmV3IGRhdGEg
c3RydWN0dXJlIHRvIGhvbGQgdGhlIHVzZSBjb3VudGVycy4gVGhlcmUncworICAgICAgICBhIGJp
ZyBjb21tZW50IGluIGhlcmUgdGhhdCBkZXNjcmliZXMgd2hhdCB0aGVzZSBmaWVsZHMgbWVhbi4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5
Lmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6On5SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5KTogU2VuZCBhIGR1bW15IHVzZSBjb3VudCBmb3Igbm93LiBUaGlzIHdpbGwg
YmUKKyAgICAgICAgaW1wbGVtZW50ZWQgaW4gYSBmb2xsb3ctdXAgcGF0Y2guCisgICAgICAgICog
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlUmVt
b3RlUmVzb3VyY2UpOiBBZGQgdGhlIHVzZUNvdW50IHBhcmFtZXRlci4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDogRGl0dG8u
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpyZWxl
YXNlTmF0aXZlSW1hZ2UpOiBTZW5kIGEgZHVtbXkgdXNlIGNvdW50IGZvciBub3cuIFRoaXMgd2ls
bCBiZQorICAgICAgICBpbXBsZW1lbnRlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjbGVhckZvbnRNYXApOiBEaXR0by4K
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpmaW5hbGl6ZVJlbmRl
cmluZ1VwZGF0ZUZvckZvbnRzKTogRGl0dG8uCisKIDIwMjEtMDctMjYgIEplciBOb2JsZSAgPGpl
ci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTjogW2lPU10gQVNTRVJUSU9O
IEZBSUxFRDogIW1fbWVzc2FnZVJlY2VpdmVyTWFwQ291bnQgdW5kZXIgV2ViS2l0OjpSZW1vdGVB
dWRpb0hhcmR3YXJlTGlzdGVuZXI6On5SZW1vdGVBdWRpb0hhcmR3YXJlTGlzdGVuZXIoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVwbGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKaW5kZXggMTY2MjdhMDIwNmUzMDkyNDNm
OGI3YmQxOGNkYjNkYTU4NjA3OGE4Zi4uNmE0NjQzMjdjY2YxNTA2YWQ3ZmQ5MjVkYjU1ZDUzNmE1
ZmUyODU1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCkBAIC02OCw2
ICs2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCBib29sIGFwcGx5KEl0ZW1IYW5kbGUs
IEdyYXBoaWNzQ29udGV4dCYpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRDcmVhdGVNYXNrSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKSB7IH0KICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFJlc2V0TWFza0ltYWdlQnVmZmVyKCkgeyB9CisgICAgICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRSZXNvdXJjZVVzZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpIHsgfQogICAgIH07CiAgICAgCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCmlu
ZGV4IGVhODI4NmRhMGM5ZGU0ZGZjYTdkZTM1YmUzMzdkZjAzMmMwMzdlN2UuLjhmNGZkZmRhNTRl
NGRmNGYxZmI1ZTY5YTJhYjQ5ZTliYjU5OGUwZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAK
QEAgLTE4NCwxNyArMTg0LDE0IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRl
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuCiAgICAgICAgIHdh
a2VVcEFuZEFwcGx5RGlzcGxheUxpc3Qoc3RkOjpleGNoYW5nZShtX3BlbmRpbmdXYWtldXBJbmZv
LCBzdGQ6Om51bGxvcHQpLT5hcmd1bWVudHMpOwogfQogCi1SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpSZXBsYXllckRlbGVnYXRlOjpSZXBsYXllckRlbGVnYXRlKFdlYkNvcmU6OkltYWdlQnVmZmVy
JiBkZXN0aW5hdGlvbiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgcmVtb3RlUmVuZGVyaW5nQmFj
a2VuZCwgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cykKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OlJlcGxheWVyRGVs
ZWdhdGUoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGRlc3RpbmF0aW9uLCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kJiByZW1vdGVSZW5kZXJpbmdCYWNrZW5kKQogICAgIDogbV9kZXN0aW5hdGlvbihkZXN0
aW5hdGlvbikKICAgICAsIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZChyZW1vdGVSZW5kZXJpbmdC
YWNrZW5kKQotICAgICwgbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MpCiB7CiB9CiAKIGJvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5
ZXJEZWxlZ2F0ZTo6YXBwbHkoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUgaXRlbSwg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQpCiB7Ci0gICAgLy8gRklY
TUU6IEluc3BlY3QgdGhlIGl0ZW0gYW5kIHJlY29yZCByZXNvdXJjZSB1c2UgaGVyZS4KLQogICAg
IGF1dG8gYXBwbHkgPSBbJl0oYXV0byYmIGRlc3RpbmF0aW9uKSB7CiAgICAgICAgIHJldHVybiBk
ZXN0aW5hdGlvbi5hcHBseShpdGVtLCBncmFwaGljc0NvbnRleHQpOwogICAgIH07CkBAIC0yMTQs
MTIgKzIxMSwxNyBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdh
dGU6OmRpZFJlc2V0TWFza0ltYWdlQnVmZmVyKCkKICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIoKTsKIH0KIAordm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjpyZWNvcmRSZXNvdXJjZVVzZShSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQoreworICAgIG1fcmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5yZW1vdGVSZXNvdXJjZUNhY2hlKCkucmVjb3JkUmVzb3VyY2VV
c2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKK30KKwogRGlzcGxheUxpc3Q6OlJlcGxh
eVJlc3VsdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzdWJtaXQoY29uc3QgRGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgSW1hZ2VCdWZmZXImIGRlc3RpbmF0aW9uKQogewog
ICAgIGlmIChkaXNwbGF5TGlzdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBSZXBsYXllckRlbGVnYXRlIHJlcGxheWVyRGVsZWdhdGUoZGVzdGluYXRpb24sICp0aGlzLCBt
X2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpOworICAgIFJlcGxheWVyRGVsZWdhdGUgcmVwbGF5
ZXJEZWxlZ2F0ZShkZXN0aW5hdGlvbiwgKnRoaXMpOwogCiAgICAgcmV0dXJuIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZXBsYXllciB7CiAgICAgICAgIGRlc3RpbmF0aW9uLmNvbnRleHQoKSwKQEAg
LTUwOSwxMCArNTExLDExIEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGVsZXRlQWxs
Rm9udHMoKQogICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5kZWxldGVBbGxGb250cygpOwogfQog
Ci12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZShSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQordm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpyZWxlYXNlUmVtb3RlUmVzb3VyY2UoUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3Qg
dXNlQ291bnQpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbV9yZW1v
dGVSZXNvdXJjZUNhY2hlLnJlbGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpOworICAgIGF1dG8gc3VjY2VzcyA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5yZWxl
YXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1c2VDb3VudCk7
CisgICAgTUVTU0FHRV9DSEVDSyhzdWNjZXNzLCAiUmVzb3VyY2UgaXMgYmVpbmcgcmVsZWFzZWQg
YmVmb3JlIGJlaW5nIGNhY2hlZC4iKTsKICAgICB1cGRhdGVSZW5kZXJpbmdSZXNvdXJjZVJlcXVl
c3QoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKaW5kZXggZjdiZjZiYzNiMDczYWRiZWFlNmY2
Yjg2MmZhMzY3ZjZhYjAwZTViMC4uZjNkODIzMDEzY2UyNzllNTdjYzNlNGIwNDEzNjE2ZTVjNDhi
NzUzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0xNDQsMjEgKzE0NCwyMSBAQCBwcml2YXRl
OgogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNo
ZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsK
LSAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpOwogICAgIHZvaWQg
ZGlkQ3JlYXRlU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1CdWZmZXJJZGVudGlmaWVyLCBjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZp
ZXIpOwogCiAgICAgY2xhc3MgUmVwbGF5ZXJEZWxlZ2F0ZSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVwbGF5ZXI6OkRlbGVnYXRlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFJlcGxh
eWVyRGVsZWdhdGUoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
JiwgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYpOworICAgICAgICBSZXBsYXllckRlbGVnYXRl
KFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYpOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgYm9vbCBhcHBseShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhh
bmRsZSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JikgZmluYWw7CiAgICAgICAgIHZvaWQgZGlk
Q3JlYXRlTWFza0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJikgZmluYWw7CiAgICAg
ICAgIHZvaWQgZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIoKSBmaW5hbDsKKyAgICAgICAgdm9pZCBy
ZWNvcmRSZXNvdXJjZVVzZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIGZp
bmFsOwogCiAgICAgICAgIFdlYkNvcmU6OkltYWdlQnVmZmVyJiBtX2Rlc3RpbmF0aW9uOwogICAg
ICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7Ci0g
ICAgICAgIFJlZjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M7CiAgICAgfTsKIAogICAgIHN0cnVjdCBQZW5kaW5nV2FrZXVwSW5mb3JtYXRpb24g
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgppbmRleCA0YjNmZTlhMDI2
MmU4YTU0OTE4NTJjNmQ2YTA0MDQ1ZDZhNjk2Mzk3Li5mZjYyYWY1MTFmM2UyZTVjZWJmNDc0MWJi
MzUwMzM4NDk0ZTM4ZWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5p
bgpAQCAtMzYsNyArMzYsNyBAQCBtZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHsK
ICAgICBDYWNoZUZvbnQoSVBDOjpGb250UmVmZXJlbmNlIGZvbnQpCiAgICAgRGVsZXRlQWxsRm9u
dHMoKQogICAgIERpZENyZWF0ZVNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJLaXQ6OlNoYXJlZE1l
bW9yeTo6SVBDSGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIGRlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcikKLSAgICBSZWxlYXNlUmVtb3RlUmVzb3Vy
Y2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikKKyAgICBSZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3Qg
dXNlQ291bnQpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNo
ZS5jcHAKaW5kZXggODFkZGUwYmZmY2YwYmQ2Y2MxYzI4ZTVkZDI0NjM3NGIzNDY0NjI3OC4uYjc0
MzBiNmE2YWNlNGUzODFiZTU4NmZjMDkwZTU0ZDcyODEwYmExYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmNw
cApAQCAtMzMsOCArMzMsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIHZvaWQgUmVt
b3RlUmVzb3VyY2VDYWNoZTo6Y2FjaGVJbWFnZUJ1ZmZlcihSZWY8SW1hZ2VCdWZmZXI+JiYgaW1h
Z2VCdWZmZXIpCiB7Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2ltYWdlQnVmZmVycy5hZGQoaW1h
Z2VCdWZmZXItPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBXVEZNb3ZlKGltYWdlQnVm
ZmVyKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKKyAgICBhdXRvIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciA9IGltYWdlQnVmZmVyLT5y
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKKyAgICBtX2ltYWdlQnVmZmVycy5hZGQocmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXVEZNb3ZlKGltYWdlQnVmZmVyKSk7CisKKyAgICBl
bnN1cmVSZXNvdXJjZVVzZUNvdW50ZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKIH0K
IAogSW1hZ2VCdWZmZXIqIFJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlZEltYWdlQnVmZmVyKFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCkBA
IC00NCwxNCArNDYsMjggQEAgSW1hZ2VCdWZmZXIqIFJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hl
ZEltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcgogCiB2b2lkIFJlbW90ZVJl
c291cmNlQ2FjaGU6OmNhY2hlTmF0aXZlSW1hZ2UoUmVmPE5hdGl2ZUltYWdlPiYmIGltYWdlKQog
ewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uYXRpdmVJbWFnZXMuYWRkKGltYWdlLT5yZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgV1RGTW92ZShpbWFnZSkpOwotICAgIEFTU0VSVF9VTlVT
RUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgPSBpbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7
CisgICAgbV9uYXRpdmVJbWFnZXMuYWRkKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV1RG
TW92ZShpbWFnZSkpOworCisgICAgZW5zdXJlUmVzb3VyY2VVc2VDb3VudGVyKHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2FjaGVG
b250KFJlZjxGb250PiYmIGZvbnQpCiB7Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2ZvbnRzLmFk
ZChmb250LT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgV1RGTW92ZShmb250KSk7Ci0g
ICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBh
dXRvIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciA9IGZvbnQtPnJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcigpOworICAgIG1fZm9udHMuYWRkKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgV1RGTW92ZShmb250KSk7CisKKyAgICBlbnN1cmVSZXNvdXJjZVVzZUNvdW50ZXIocmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpl
bnN1cmVSZXNvdXJjZVVzZUNvdW50ZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcikKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1fcmVzb3VyY2VV
c2VDb3VudGVycy5hZGQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBSZXNvdXJjZVVzZUNv
dW50ZXIgeyB9KTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIGF1dG8m
IHN0YXRlID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5zdGF0ZTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoc3RhdGUgPT0gUmVzb3VyY2VTdGF0ZTo6VG9CZURlbGV0ZWQpOworICAgICAgICBzdGF0
ZSA9IFJlc291cmNlU3RhdGU6OkFsaXZlOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVSZXNvdXJj
ZUNhY2hlOjpkZWxldGVBbGxGb250cygpCkBAIC01OSwxNiArNzUsNzkgQEAgdm9pZCBSZW1vdGVS
ZXNvdXJjZUNhY2hlOjpkZWxldGVBbGxGb250cygpCiAgICAgbV9mb250cy5jbGVhcigpOwogfQog
Ci12b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZShSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorYm9vbCBS
ZW1vdGVSZXNvdXJjZUNhY2hlOjptYXliZVJlbW92ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFJlc291cmNlVXNlQ291bnRl
cnNNYXA6Oml0ZXJhdG9yJiBpdGVyYXRvcikKIHsKKyAgICBhdXRvJiB2YWx1ZSA9IGl0ZXJhdG9y
LT52YWx1ZTsKKyAgICBpZiAodmFsdWUuc3RhdGUgPT0gUmVzb3VyY2VTdGF0ZTo6QWxpdmUgfHwg
dmFsdWUudXNlT3JQZW5kaW5nQ291bnQgPCAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmICh2YWx1ZS51c2VPclBlbmRpbmdDb3VudCkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHdl
J3ZlIGhpdCBhIHNpdHVhdGlvbiB0aGF0J3Mgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIFdQIHNlbmRzOgorICAgICAgICAvLyAxLiBTZW5k
IGNhY2hlIHJlc291cmNlIG1lc3NhZ2UKKyAgICAgICAgLy8gMi4gVXNlIHJlc291cmNlIDJ4Cisg
ICAgICAgIC8vIDMuIFNlbmQgcmVsZWFzZSByZXNvdXJjZSBtZXNzYWdlIHdpdGggdXNlQ291bnQg
PSAyCisgICAgICAgIC8vIDQuIFNlbmQgY2FjaGUgcmVzb3VyY2UgbWVzc2FnZSBhZ2FpbiBmb3Ig
dGhlIHNhbWUgcmVzb3VyY2UKKyAgICAgICAgLy8gNS4gVXNlIHJlc291cmNlIDQgdGltZXMKKyAg
ICAgICAgLy8gNi4gU2VuZCByZWxlYXNlIHJlc291cmNlIG1lc3NhZ2Ugd2l0aCB1c2VDb3VudCA9
IDQKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIEdQVVAgc2VlczoKKyAgICAgICAgLy8gMS4g
VGhlIGNhY2hlIHJlc291cmNlIG1lc3NhZ2UKKyAgICAgICAgLy8gMi4gVXNlIHJlc291cmNlIDJ4
CisgICAgICAgIC8vIDMuIFVzZSByZXNvdXJjZSAzeCBtb3JlIHRpbWVzIChmcm9tIHN0ZXAgNSBh
Ym92ZSkKKyAgICAgICAgLy8gNC4gUmVsZWFzZSByZXNvdXJjZSBtZXNzYWdlIHdpdGggdXNlQ291
bnQgPSAyICA8PT0gVGhpcyBwYXJ0IHJpZ2h0IGhlcmUKKyAgICAgICAgLy8gNS4gLi4uIG1vcmUg
c3R1ZmYgLi4uCisgICAgICAgIC8vCisgICAgICAgIC8vIEluIHRoaXMgc2l0dWF0aW9uLCB3ZSd2
ZSBnb3QgYSBoZWFkLXN0YXJ0IG9uIGEgZnV0dXJlIGZyYW1lJ3MgcmVuZGVyaW5nIGNvbW1hbmRz
LAorICAgICAgICAvLyB1c2luZyBhIHJlc291cmNlIHdoaWNoIHdhcyBjYWNoZWQgZnJvbSBhIHBy
ZXZpb3VzIGZyYW1lLiAoVGhpcyBpcyBub3QgYSBwcm9ibGVtLikKKyAgICAgICAgLy8gVGhlcmVm
b3JlLCB3ZSBrbm93IHRoYXQsIGluIHRoZSBmdXR1cmUsIHRoZXJlJ3MgZ29pbmcgdG8gYmUgYW5v
dGhlciBjYWNoZSByZXNvdXJjZQorICAgICAgICAvLyBtZXNzYWdlIHdoaWNoIHdpbGwgd2FudCB1
cyB0byBjYWNoZSB0aGlzIGV4YWN0IHNhbWUgcmVzb3VyY2UgdGhhdCB3ZSBhbHJlYWR5IGhhdmUK
KyAgICAgICAgLy8gY2FjaGVkLgorICAgICAgICAvLworICAgICAgICAvLyBTbywgbGV0J3MganVz
dCBub3QgcmVtb3ZlIHRoZSByZXNvdXJjZSwganVzdCBpbiBjYXNlIHRoZXJlIGFyZSBfbW9yZV8g
cmVuZGVyaW5nCisgICAgICAgIC8vIGNvbW1hbmRzIHdlIGNhbiBnZXQgYSBoZWFkIHN0YXJ0IG9u
IGJlZm9yZSB0aGUgY2FjaGUgcmVzb3VyY2UgbWVzc2FnZSBldmVudHVhbGx5CisgICAgICAgIC8v
IGdldHMgZGVsaXZlcmVkLiBUaGUgZXZlbnR1YWwgY2FjaGUgcmVzb3VyY2UgY29tbWFuZCBpcyBz
bWFydCBlbm91Z2ggdG8gcmVhbGl6ZSB0aGF0CisgICAgICAgIC8vIHRoZSB0aGluZyBpdCdzIHN1
cHBvc2VkIHRvIGJlIGNhY2hpbmcgaXMgYWxyZWFkeSBpbiB0aGUgY2FjaGUsIGFuZCB3aWxsIGNv
cnJlY3RseQorICAgICAgICAvLyBkbyBub3RoaW5nLgorCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIG1fcmVzb3VyY2VVc2VDb3VudGVycy5yZW1vdmUoaXRlcmF0b3IpOworCiAg
ICAgaWYgKG1faW1hZ2VCdWZmZXJzLnJlbW92ZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChtX25hdGl2
ZUltYWdlcy5yZW1vdmUocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSkKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAobV9mb250cy5yZW1vdmUocmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKwogICAgIC8vIENhY2hpbmcgdGhlIHJlbW90ZSByZXNvdXJjZSBzaG91bGQgaGF2ZSBo
YXBwZW5lZCBiZWZvcmUgcmVsZWFzaW5nIGl0LgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpyZWNvcmRS
ZXNvdXJjZVVzZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Jlc291cmNlVXNlQ291bnRlcnMu
ZmluZChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworCisgICAgQVNTRVJUKGl0ZXJhdG9y
ICE9IG1fcmVzb3VyY2VVc2VDb3VudGVycy5lbmQoKSk7CisKKyAgICBSZXNvdXJjZVVzZUNvdW50
ZXImIHVzZUNvdW50ZXIgPSBpdGVyYXRvci0+dmFsdWU7CisgICAgKyt1c2VDb3VudGVyLnVzZU9y
UGVuZGluZ0NvdW50OworCisgICAgbWF5YmVSZW1vdmVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIsIGl0ZXJhdG9yKTsKK30KKworYm9vbCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpy
ZWxlYXNlUmVtb3RlUmVzb3VyY2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpCit7CisgICAgYXV0byBpdGVy
YXRvciA9IG1fcmVzb3VyY2VVc2VDb3VudGVycy5maW5kKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcik7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fcmVzb3VyY2VVc2VDb3VudGVycy5lbmQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJlc291cmNlVXNlQ291bnRlciYgdXNlQ291bnRl
ciA9IGl0ZXJhdG9yLT52YWx1ZTsKKyAgICB1c2VDb3VudGVyLnN0YXRlID0gUmVzb3VyY2VTdGF0
ZTo6VG9CZURlbGV0ZWQ7CisgICAgdXNlQ291bnRlci51c2VPclBlbmRpbmdDb3VudCAtPSB1c2VD
b3VudDsKKyAgICByZXR1cm4gbWF5YmVSZW1vdmVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIsIGl0ZXJhdG9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNo
ZS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2Fj
aGUuaAppbmRleCAyY2VkOTA5ZjQ4MTEwYzY2NjU2ZGUxYmZlMzgxMWRiYWJhYWE5ZjRmLi5hMDhl
NTkzZGI1ZDNmNTJiZWQ4MTViYWFjMjcwYWE1ZGI3NTI5MTUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmgKQEAg
LTQ2LDE2ICs0Niw0MyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKFJlZjxX
ZWJDb3JlOjpOYXRpdmVJbWFnZT4mJik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6
OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsKLSAgICB2b2lkIHJlbGVhc2VS
ZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAg
IGJvb2wgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpOworICAgIHZvaWQgcmVjb3JkUmVzb3VyY2VVc2Uo
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKIAogICAgIGNvbnN0IFdlYkNv
cmU6OkltYWdlQnVmZmVySGFzaE1hcCYgaW1hZ2VCdWZmZXJzKCkgY29uc3QgeyByZXR1cm4gbV9p
bWFnZUJ1ZmZlcnM7IH0KICAgICBjb25zdCBXZWJDb3JlOjpOYXRpdmVJbWFnZUhhc2hNYXAmIG5h
dGl2ZUltYWdlcygpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlSW1hZ2VzOyB9CiAgICAgY29uc3Qg
V2ViQ29yZTo6Rm9udFJlbmRlcmluZ1Jlc291cmNlTWFwJiBmb250cygpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udHM7IH0KIAogcHJpdmF0ZToKKyAgICAvLyBCZWNhdXNlIHRoZSBjYWNoZS9yZWxlYXNl
IG1lc3NhZ2VzIGFyZSBzZW50IGFzeW5jaHJvbm91c2x5IGZyb20gdGhlIGRpc3BsYXkgbGlzdCBp
dGVtcyB3aGljaAorICAgIC8vIHJlZmVyZW5jZSB0aGUgcmVzb3VyY2VzLCBpdCdzIHRvdGFsbHkg
cG9zc2libGUgdGhhdCB3ZSBzZWUgYSByZWxlYXNlIG1lc3NhZ2UgYmVmb3JlIHdlJ3ZlCisgICAg
Ly8gZXhlY3V0ZWQgYWxsIHRoZSBkaXNwbGF5IGxpc3QgaXRlbXMgd2hpY2ggcmVmZXJlbmNlIHRo
ZSByZXNvdXJjZS4gVGhlIHdlYiBwcm9jZXNzIHRlbGxzIHVzCisgICAgLy8gaG93IG1hbnkgZGlz
cGxheSBsaXN0IGl0ZW1zIHdpbGwgcmVmZXJlbmNlIHRoaXMgcmVzb3VyY2UsIGFuZCB3ZSBkZWZl
ciBkZWxldGlvbiBvZiB0aGUgcmVzb3VyY2UKKyAgICAvLyB1bnRpbCB3ZSBleGVjdXRlIHRoYXQg
bWFueSBkaXNwbGF5IGxpc3QgaXRlbXMuIEl0J3MgYWN0dWFsbHkgYSBiaXQgd29yc2UgdGhhbiB0
aGlzLCB0aG91Z2gsCisgICAgLy8gYmVjYXVzZSB3ZSBtYXkgYWN0dWFsbHkgc2VlIGEgKm5ldyog
Y2FjaGUgbWVzc2FnZSBkdXJpbmcgdGhlIHRpbWUgd2hlbiBkZWxldGlvbiBpcyBkZWZlcnJlZC4K
KyAgICAvLworICAgIC8vIFdlIGNhbiBvbmx5IHNhZmVseSBkZWxldGUgYSByZXNvdXJjZSB3aGVu
OgorICAgIC8vIDEuIEFsbCB0aGUgY2FjaGUgbWVzc2FnZXMgaGF2ZSBhbiBhY2NvbXBhbnlpbmcg
cmVsZWFzZSBtZXNzYWdlLCBhbmQKKyAgICAvLyAyLiBXZSd2ZSBwcm9jZXNzZWQgYXMgbWFueSBk
aXNwbGF5IGxpc3QgaXRlbXMgdGhhdCByZWZlcmVuY2UgYSBwYXJ0aWN1bGFyIHJlc291cmNlIGFz
IHRoZSB3ZWIKKyAgICAvLyBwcm9jZXNzIGhhcyBlbmNvZGVkLgorICAgIGVudW0gY2xhc3MgUmVz
b3VyY2VTdGF0ZSB7CisgICAgICAgIEFsaXZlLAorICAgICAgICBUb0JlRGVsZXRlZAorICAgIH07
CisgICAgc3RydWN0IFJlc291cmNlVXNlQ291bnRlciB7CisgICAgICAgIFJlc291cmNlU3RhdGUg
c3RhdGUgeyBSZXNvdXJjZVN0YXRlOjpBbGl2ZSB9OworICAgICAgICBpbnQ2NF90IHVzZU9yUGVu
ZGluZ0NvdW50IHsgMCB9OworICAgIH07CisgICAgdXNpbmcgUmVzb3VyY2VVc2VDb3VudGVyc01h
cCA9IEhhc2hNYXA8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBSZXNvdXJj
ZVVzZUNvdW50ZXI+OworCisgICAgYm9vbCBtYXliZVJlbW92ZVJlc291cmNlKFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgUmVzb3VyY2VVc2VDb3VudGVyc01hcDo6aXRlcmF0
b3ImKTsKKyAgICB2b2lkIGVuc3VyZVJlc291cmNlVXNlQ291bnRlcihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOworCiAgICAgV2ViQ29yZTo6SW1hZ2VCdWZmZXJIYXNoTWFw
IG1faW1hZ2VCdWZmZXJzOwogICAgIFdlYkNvcmU6Ok5hdGl2ZUltYWdlSGFzaE1hcCBtX25hdGl2
ZUltYWdlczsKICAgICBXZWJDb3JlOjpGb250UmVuZGVyaW5nUmVzb3VyY2VNYXAgbV9mb250czsK
KworICAgIFJlc291cmNlVXNlQ291bnRlcnNNYXAgbV9yZXNvdXJjZVVzZUNvdW50ZXJzOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCmluZGV4
IGI0NDhiMzdmOTdmZTdhZTY1ZGJlYmIyYTg1YWIwYzk5NGUxZjI2YmQuLmQ0Y2JjMmMwYzkwMzQz
MDU5NjhmMjc3YjU1MzYxYmIyNzQ4MmZlYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
CkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKIAogICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0
KCk7CiAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5yZW1vdGVSZXNvdXJj
ZUNhY2hlUHJveHkoKS5yZWxlYXNlSW1hZ2VCdWZmZXIobV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpOwotICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVsZWFzZVJl
bW90ZVJlc291cmNlKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICAgICAgbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbGVhc2VSZW1vdGVSZXNvdXJjZShtX3JlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgMCk7IC8vIEZJWE1FOiBQYXNzIHRoZSByZWFsIHVzZSBj
b3VudCBoZXJlLgogICAgIH0KIAogICAgIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBjcmVhdGVJ
bWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuY3BwCmluZGV4IDA5Y2U0YzZlZjZkNmFiZTcxZTAzZWFiN2ZhOGNkMjE0ZmY2OGIwZmUu
LmU5NWYxYWQzOTM0ZjI1NGJkNWY5OWQyM2E1YjQ2NTU1MzVjZTA5MzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTI0OSwxMiArMjQ5LDEyIEBAIHZvaWQg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkZWxldGVBbGxGb250cygpCiAgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6RGVsZXRlQWxsRm9udHMoKSwgcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VF
dmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KQogewog
ICAgIGlmIChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPT0gbV9jdXJyZW50RGVzdGluYXRp
b25JbWFnZUJ1ZmZlcklkZW50aWZpZXIpCiAgICAgICAgIG1fY3VycmVudERlc3RpbmF0aW9uSW1h
Z2VCdWZmZXJJZGVudGlmaWVyID0gc3RkOjpudWxsb3B0OwogCi0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2Vu
ZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZWxlYXNlUmVtb3RlUmVz
b3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1c2VDb3VudCksIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldo
ZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmRpZENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUgaGFuZGxlLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKaW5kZXggNjMx
NDk2NzBhMzU5NGUyNWEyZGE1Y2QxOTc2MTE0NjFjNjE3OTc0MC4uYjJjZTNkOGMyOGFiMTkxMjUz
NTE5MDI3ZmM5MDc0ZDIwZWQxNzI4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5oCkBAIC0xMDQsNyArMTA0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2FjaGVOYXRpdmVJ
bWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+
JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsKLSAgICB2b2lkIHJlbGVhc2VSZW1vdGVS
ZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIHZvaWQg
cmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgdWludDY0X3QgdXNlQ291bnQpOwogCiAgICAgZW51bSBjbGFzcyBEaWRSZWNlaXZlQmFja2Vu
ZENyZWF0aW9uUmVzdWx0IDogYm9vbCB7CiAgICAgICAgIFJlY2VpdmVkQW55UmVzcG9uc2UsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
c291cmNlQ2FjaGVQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKaW5kZXggMDNmMzRiMzNhMjJkZDQ5Mjhk
NDI2MGU0Nzg2MmQzOTEzNzExMDFhZi4uNDE0ZTE5OTZlOGJjMjk5NWI3ZjcwNzZhZTZhNTIxNGQ2
MzY3NjY4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcApAQCAtMTIxLDgg
KzEyMSw3IEBAIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpyZWxlYXNlTmF0aXZlSW1h
Z2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlCiAgICAgaWYgKCFtX25hdGl2ZUltYWdl
cy5yZW1vdmUocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgLy8gVGVsbCB0aGUgR1BVIHByb2Nlc3MgdG8gcmVtb3ZlIHRoaXMgcmVzb3VyY2UuCi0g
ICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJlc291cmNlKHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkucmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
MCk7IC8vIEZJWE1FOiBQYXNzIHRoZSByZWFsIHVzZSBjb3VudCBoZXJlLgogfQogCiB2b2lkIFJl
bW90ZVJlc291cmNlQ2FjaGVQcm94eTo6cHJlcGFyZUZvck5leHRSZW5kZXJpbmdVcGRhdGUoKQpA
QCAtMTM0LDcgKzEzMyw3IEBAIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpwcmVwYXJl
Rm9yTmV4dFJlbmRlcmluZ1VwZGF0ZSgpCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6
Y2xlYXJGb250TWFwKCkKIHsKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2ZvbnRJZGVudGlmaWVy
VG9MYXN0UmVuZGVyaW5nVXBkYXRlVmVyc2lvbk1hcCkKLSAgICAgICAgbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJlc291cmNlKGl0ZW0ua2V5KTsKKyAgICAgICAg
bV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJlc291cmNlKGl0ZW0u
a2V5LCAwKTsgLy8gRklYTUU6IFBhc3MgdGhlIHJlYWwgdXNlIGNvdW50IGhlcmUuCiAgICAgbV9m
b250SWRlbnRpZmllclRvTGFzdFJlbmRlcmluZ1VwZGF0ZVZlcnNpb25NYXAuY2xlYXIoKTsKICAg
ICBtX251bWJlck9mRm9udHNVc2VkSW5DdXJyZW50UmVuZGVyaW5nVXBkYXRlID0gMDsKIH0KQEAg
LTE1Miw3ICsxNTEsNyBAQCB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6ZmluYWxpemVS
ZW5kZXJpbmdVcGRhdGVGb3JGb250cygpCiAgICAgZm9yIChhdXRvJiBpdGVtIDogbV9mb250SWRl
bnRpZmllclRvTGFzdFJlbmRlcmluZ1VwZGF0ZVZlcnNpb25NYXApIHsKICAgICAgICAgaWYgKG1f
Y3VycmVudFJlbmRlcmluZ1VwZGF0ZVZlcnNpb24gLSBpdGVtLnZhbHVlID49IG1pbmltdW1SZW5k
ZXJpbmdVcGRhdGVDb3VudFRvS2VlcEZvbnRBbGl2ZSkgewogICAgICAgICAgICAgdG9SZW1vdmUu
YWRkKGl0ZW0ua2V5KTsKLSAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShpdGVtLmtleSk7CisgICAgICAgICAgICBtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UoaXRlbS5rZXksIDApOyAv
LyBGSVhNRTogUGFzcyB0aGUgcmVhbCB1c2UgY291bnQgaGVyZS4KICAgICAgICAgfQogICAgIH0K
IAo=
</data>
<flag name="review"
          id="456702"
          type_id="1"
          status="+"
          setter="sabouhallawa"
    />
          </attachment>
      

    </bug>

</bugzilla>