<?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>101300</bug_id>
          
          <creation_ts>2012-11-05 22:00:20 -0800</creation_ts>
          <short_desc>Store the initiating CachedResourceRequest</short_desc>
          <delta_ts>2012-12-03 14:23:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>99736</dependson>
          <blocked>84883</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="James Simonsen">simonjam</reporter>
          <assigned_to name="James Simonsen">simonjam</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>d-r</cc>
    
    <cc>fmalita</cc>
    
    <cc>japhet</cc>
    
    <cc>jochen</cc>
    
    <cc>macpherson</cc>
    
    <cc>marja</cc>
    
    <cc>menard</cc>
    
    <cc>pdr</cc>
    
    <cc>schenney</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>759240</commentid>
    <comment_count>0</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2012-11-05 22:00:20 -0800</bug_when>
    <thetext>Store the initiating CachedResourceRequest</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759251</commentid>
    <comment_count>1</comment_count>
      <attachid>172487</attachid>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2012-11-05 22:20:29 -0800</bug_when>
    <thetext>Created attachment 172487
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759259</commentid>
    <comment_count>2</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2012-11-05 22:24:00 -0800</bug_when>
    <thetext>One open question: How long should this live? I really only need it until the load completes. Is it okay to clear it out then? Otherwise, I feel we risk hanging on to things way too long.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759288</commentid>
    <comment_count>3</comment_count>
      <attachid>172487</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-05 23:15:15 -0800</bug_when>
    <thetext>Comment on attachment 172487
Patch

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

&gt; Source/WebCore/loader/SubresourceLoader.cpp:206
&gt; -        // Since a subresource loader does not load multipart sections progressively, data was delivered to the loader all at once.        
&gt; -        // After the first multipart section is complete, signal to delegates that this load is &quot;finished&quot; 
&gt; +        // Since a subresource loader does not load multipart sections progressively, data was delivered to the loader all at once.
&gt; +        // After the first multipart section is complete, signal to delegates that this load is &quot;finished&quot;

The only changes to this file appear to be whitespace changes.

&gt; Source/WebCore/loader/cache/CachedResource.cpp:360
&gt; -    
&gt; +

Can you post a version of this patch that doesn&apos;t contain all these whitespace changes.  They&apos;re really distracting.

&gt; Source/WebCore/loader/cache/CachedResource.h:235
&gt; -    
&gt; +

More noise.  :(

&gt; Source/WebCore/loader/cache/CachedResource.h:365
&gt; +    OwnPtr&lt;CachedResourceRequest&gt; m_initialRequest;

How can the CachedResource hold the request?  I thought the whole point of this approach is that there were many CachedResourceRequests that would lead to a single CachedResource so we decided to store the initiator state on the request instead of the resource.

&gt; Source/WebCore/loader/cache/CachedResourceRequest.h:74
&gt; +    RefPtr&lt;Element&gt; m_initiatorElement;
&gt; +    RefPtr&lt;Document&gt; m_initiatorDocument;

This seems very likely to create a reference cycle.  Certainly the way this patch has CachedResource holding the CachedResourceRequest, that means the MemoryCache (with its static lifetime) is transitively holding the entire document.....  I don&apos;t understand how we&apos;re managing the lifetimes correctly in this patch.  Perhaps it&apos;s worth explaining the design in the ChangeLog?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759297</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-05 23:19:11 -0800</bug_when>
    <thetext>&gt; One open question: How long should this live? I really only need it until the load completes. Is it okay to clear it out then? Otherwise, I feel we risk hanging on to things way too long.

That is an important question.  It&apos;s not clear to me what the right answer is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759423</commentid>
    <comment_count>5</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-11-06 02:00:12 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; One open question: How long should this live? I really only need it until the load completes. Is it okay to clear it out then? Otherwise, I feel we risk hanging on to things way too long.
&gt; 
&gt; That is an important question.  It&apos;s not clear to me what the right answer is.

For the purpose of notifying the embedder, we don&apos;t need to store this at all: I think it&apos;s enough to have this information available at willSendRequest() time. If the embedder wants to store some information, e.g. the a pointer to the Element, the embedder can do so itself</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760075</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-06 14:50:27 -0800</bug_when>
    <thetext>It doesn&apos;t really matter if its the embedder or WebKit that retains the element.  We still need to understand what the lifetimes are.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760368</commentid>
    <comment_count>7</comment_count>
      <attachid>172712</attachid>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2012-11-06 21:19:32 -0800</bug_when>
    <thetext>Created attachment 172712
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760373</commentid>
    <comment_count>8</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2012-11-06 21:25:26 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 172487 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172487&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedResource.h:365
&gt; &gt; +    OwnPtr&lt;CachedResourceRequest&gt; m_initialRequest;
&gt; 
&gt; How can the CachedResource hold the request?  I thought the whole point of this approach is that there were many CachedResourceRequests that would lead to a single CachedResource so we decided to store the initiator state on the request instead of the resource.

For Resource Timing, we still need to hang on to the initiator throughout the duration of the load. So the first CachedResourceRequest needs to live until the load completes so that we can report to Resource Timing that it finished.

I&apos;ve changed this so that the SubresourceLoader hangs on to the CachedResourceRequest instead. I hope that makes both of these points clearer.

&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedResourceRequest.h:74
&gt; &gt; +    RefPtr&lt;Element&gt; m_initiatorElement;
&gt; &gt; +    RefPtr&lt;Document&gt; m_initiatorDocument;
&gt; 
&gt; This seems very likely to create a reference cycle.  Certainly the way this patch has CachedResource holding the CachedResourceRequest, that means the MemoryCache (with its static lifetime) is transitively holding the entire document.....  I don&apos;t understand how we&apos;re managing the lifetimes correctly in this patch.  Perhaps it&apos;s worth explaining the design in the ChangeLog?

See above. Now it&apos;s owned by the loader, which is only alive throughout the load. Does that help clarify it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760380</commentid>
    <comment_count>9</comment_count>
      <attachid>172712</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-06 21:40:42 -0800</bug_when>
    <thetext>Comment on attachment 172712
Patch

Attachment 172712 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14747644</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760812</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-07 10:03:14 -0800</bug_when>
    <thetext>I don&apos;t think we should push the CachedResourceRequest further into the loader pipeline.  I&apos;m sorry if I wasn&apos;t clear earlier.  The problem is that there can be many CachedResourceRequests that result in a single CachedResource and a single ResourceRequest.

The idea behind storing the initiator on the CachedResourceRequest is to let the requester hold on to the initiator by remember its own CachedResourceRequest.  Pushing CachedResourceRequest below CachedResourceLoader doesn&apos;t make sense given the relationship between these objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760907</commentid>
    <comment_count>11</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2012-11-07 11:21:49 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; The idea behind storing the initiator on the CachedResourceRequest is to let the requester hold on to the initiator by remember its own CachedResourceRequest.  Pushing CachedResourceRequest below CachedResourceLoader doesn&apos;t make sense given the relationship between these objects.

The initiator data must be kept separate from the requester, because they have different lifetimes. For Resource Timing, the initiator is the first object to request a resource, no matter what happens to that object. If that object is destroyed before it finishes loading the resources, but another request finishes loading the resource, then *the first (destroyed) object is recorded as the initiator.*

Also, for conceptual purposes, an &quot;initiator&quot; is a &quot;requester.&quot; Specifically, it&apos;s the requester that triggered a network load. For a cached resource, that&apos;s the first one. For an uncacheable resource, it&apos;s each individual request.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761006</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-07 13:20:35 -0800</bug_when>
    <thetext>&gt; For Resource Timing, the initiator is the first object to request a resource, no matter what happens to that object.

That seems like a bad design.  That means we need to keep the first object alive for an arbitrary amount of time just in case some other object ends up loading this resource in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761044</commentid>
    <comment_count>13</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2012-11-07 14:16:16 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; For Resource Timing, the initiator is the first object to request a resource, no matter what happens to that object.
&gt; 
&gt; That seems like a bad design.  That means we need to keep the first object alive for an arbitrary amount of time just in case some other object ends up loading this resource in the future.

Perhaps I worded it poorly. The example I gave is correct though.

I&apos;ll try again:

The initiator is bound to the resource load, not the resource itself. If the load is stopped for any reason, we can forget about the initiator.

If the load transfers ownership while in progress, we must remember the initiator until the load completes. This is the example I gave earlier, about requester 1 being destroyed, but requester 2 still waiting. In that case, we must remember the initiator data from requester 1.

Does that help? If not, maybe read the processing model here:

http://w3c-test.org/webperf/specs/ResourceTiming/#processing-model</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761048</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-07 14:23:47 -0800</bug_when>
    <thetext>&quot;If the resource is not to be fetched from the networking layer, such as being fetched from an in-memory cache, abort the remaining steps.&quot;

It sounds like this algorithm was designed by an implementer with a memory cache that works differently from WebKit&apos;s MemoryCache.  In particular, this step will always cause us to abort the remaining steps because we fetch all these resources from an in-memory cache.

It doesn&apos;t make sense to me that two documents loading at the same time in different tabs will have their initiator information cross-talk though the MemoryCache if we happen to load them in the same process but will not if we load them in different processes.

If we decide to implement an out-of-process network stack akin to what WebKit2 is doing with a shared memory MemoryCache, it&apos;s not at all clear to me that we can implement this behavior in a sensible way.

In summary, this seems like a bad design.  The API we expose to the web should not depend on implementation details about how we decide to merge, fork, or prefetch resources.  By avoiding API commitments about how these processes work internally, we free ourselves to continue to innovate in this area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761067</commentid>
    <comment_count>15</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2012-11-07 14:41:54 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; &quot;If the resource is not to be fetched from the networking layer, such as being fetched from an in-memory cache, abort the remaining steps.&quot;
&gt; 
&gt; It sounds like this algorithm was designed by an implementer with a memory cache that works differently from WebKit&apos;s MemoryCache.  In particular, this step will always cause us to abort the remaining steps because we fetch all these resources from an in-memory cache.
&gt; 
&gt; It doesn&apos;t make sense to me that two documents loading at the same time in different tabs will have their initiator information cross-talk though the MemoryCache if we happen to load them in the same process but will not if we load them in different processes.
&gt; 
&gt; If we decide to implement an out-of-process network stack akin to what WebKit2 is doing with a shared memory MemoryCache, it&apos;s not at all clear to me that we can implement this behavior in a sensible way.
&gt; 
&gt; In summary, this seems like a bad design.  The API we expose to the web should not depend on implementation details about how we decide to merge, fork, or prefetch resources.  By avoiding API commitments about how these processes work internally, we free ourselves to continue to innovate in this area.

I don&apos;t think it&apos;s as bad as it sounds.

The intent is simple: any time the document does something that causes a resource to load from the network, record it.

Also note this at the top of processing model: &quot;This section is non-normative.&quot;

Clearly the spec doesn&apos;t cover multiple tab situations. That seems like an oversight. The WG is meeting here tomorrow. I&apos;ll be happy to raise that issue in person.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761071</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-07 14:48:31 -0800</bug_when>
    <thetext>The processing model is non-normative?  That doesn&apos;t make much sense.  :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761081</commentid>
    <comment_count>17</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-11-07 14:57:05 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; Clearly the spec doesn&apos;t cover multiple tab situations. That seems like an oversight. The WG is meeting here tomorrow. I&apos;ll be happy to raise that issue in person.

Will there be IRC and/or a call-in?  Any room for observers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761084</commentid>
    <comment_count>18</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2012-11-07 14:58:46 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; The processing model is non-normative?  That doesn&apos;t make much sense.  :(

Tony and I are on the WG. We can push for changes if you have requests.

We felt the spec serves the purpose of what developers want (effectively inspector&apos;s network timeline available remotely). We just need to figure out how to work it into WebKit.

In the meantime, what do we need to do to move forward? Marja is still waiting on this too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761086</commentid>
    <comment_count>19</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2012-11-07 15:00:41 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #15)
&gt; &gt; (In reply to comment #14)
&gt; &gt; Clearly the spec doesn&apos;t cover multiple tab situations. That seems like an oversight. The WG is meeting here tomorrow. I&apos;ll be happy to raise that issue in person.
&gt; 
&gt; Will there be IRC and/or a call-in?  Any room for observers?

This is a workshop rather than a normal meeting, so I&apos;m not sure. The details are here:

http://www.w3.org/2012/11/performance-workshop/

Our weekly conference calls are Wednesdays at 10am PST. See public-web-perf@w3.org for details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761089</commentid>
    <comment_count>20</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-07 15:08:43 -0800</bug_when>
    <thetext>&gt; In the meantime, what do we need to do to move forward? Marja is still waiting on this too.

Does Marja&apos;s use case involve storing the CachedResourceRequest in the CachedResource (or lower down in the loader)?  If not, it might be easier to work on her use case first.

In general, though, what we need to move forward is a design that doesn&apos;t require picking a &quot;most special&quot; requester among all the requesters of a resource.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761092</commentid>
    <comment_count>21</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-11-07 15:12:24 -0800</bug_when>
    <thetext>I&apos;ve been pretty quiet so far, but want to go on the record as echo&apos;ing Adam&apos;s objections pretty much point for point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761120</commentid>
    <comment_count>22</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2012-11-07 15:41:38 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; &gt; In the meantime, what do we need to do to move forward? Marja is still waiting on this too.
&gt; 
&gt; Does Marja&apos;s use case involve storing the CachedResourceRequest in the CachedResource (or lower down in the loader)?  If not, it might be easier to work on her use case first.

From Jochen&apos;s reply, it sounds like they need it available whenever willSendRequest() is called. I think that implies that it sticks around for a bit.

Maybe they can chime in on exactly where they would like the information available (resource or loader).

&gt; 
&gt; In general, though, what we need to move forward is a design that doesn&apos;t require picking a &quot;most special&quot; requester among all the requesters of a resource.

Since the processing model is non-normative (even I hadn&apos;t noticed that before), I&apos;d be fine with coming up with our own definition. Say, first active requester when the load completes. I&apos;ll then take up the issue with the WG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761434</commentid>
    <comment_count>23</comment_count>
    <who name="Marja Hölttä">marja</who>
    <bug_when>2012-11-08 00:49:07 -0800</bug_when>
    <thetext>For our use case, we want to track events like &quot;image element requested to load this image&quot;, not the actual load.

If two image elements request the same image, we want to get both events &quot;img1  requested the image&quot; and &quot;img2 requested the image&quot;, and we don&apos;t care how these requests are served (e.g., the first one will cause a load from the network and the second one will be served from the cache).

So when the CachedResourceLoader gets the request to load the image, we&apos;d notify the embedder about it, and that&apos;s it. The embedder can then store a reference to the Element if it wants, but our code doesn&apos;t need to store any references. Everything that happens after that point (actually loading the resource etc.) would be unaffected by our changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766239</commentid>
    <comment_count>24</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2012-11-13 17:43:29 -0800</bug_when>
    <thetext>This patch is probably dead now, but I want to follow up on the Resource Timing part...

First, the processing model *is* normative. The diagram is not. The editors will clarify that.

Second, everyone agreed the caching scenarios are not adequately defined. It&apos;s not just us. We didn&apos;t reach a conclusion during the F2F, so I started a thread here:

http://lists.w3.org/Archives/Public/public-web-perf/2012Nov/thread.html

Finally, here&apos;s another stab at moving forward (assuming the main problem is hanging on to Documents and Elements too long)...

Have a ResourceTimingNotifier singleton.

Whenever a CachedResourceRequest is sent, record the initiator&apos;s name, Document, and a pointer to its ResourceLoader (solely to identify it) in the singleton.

When a ResourceLoader finishes, notify the ResourceTimingNotifier. The ResourceTimingNotifier will populate the appropriate Documents&apos; ResourceTiming buffers with the finished information.

If a Document is deleted, it will remove itself from the ResourceTimingNotifier.

So, the ResourceTimingNotifier only stores raw pointers, which means no cycles, and we just need to update it at the correct times. If the raw pointers are unappealing, we can assign unique IDs.

Is this better? Or worse?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766457</commentid>
    <comment_count>25</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-13 22:54:20 -0800</bug_when>
    <thetext>Why can&apos;t we just use the normal client callbacks to do this work?  The ResourceTimingNotifier static just seems like a back door from ResourceLoader to Document, bypassing the layering in the loader.

I don&apos;t fully understand Brady&apos;s plan for moving the loader out of process in WebKit2, so I can&apos;t comment on any implications that has for the design of this feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767495</commentid>
    <comment_count>26</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2012-11-14 17:11:49 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; Why can&apos;t we just use the normal client callbacks to do this work?  The ResourceTimingNotifier static just seems like a back door from ResourceLoader to Document, bypassing the layering in the loader.

That seems like a reasonable start. There are a few details to work out:

How does Resource Timing register for those callbacks? There&apos;s one Resource Timing buffer per DOMWindow. Really it should only get callbacks for requests in its document.

Perhaps DocumentLoader could be that central registration point? It already keeps track of all the SubresourceLoaders. It could also track the ThreadableLoaders and (child) FrameLoaders.

Otherwise, maybe some sort of singleton where documents can register additional clients to append to all loads?

Then, we want Resource Timing to register as a client for FrameLoader, ThreadableLoader, and SubresourceLoader loads. I think the first two will need to be modified to accept multiple clients. That should be easy. Then we just need to inject the additional clients any time a load happens.

Here&apos;s another alternative building off of the DocumentLoader idea and addressing the layering issue...

Implement Resource Timing in DocumentLoader. DocumentLoader tracks the loads and populates the Resource Timing buffer. Then just have the Resource Timing API pull data from DocumentLoader as needed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172487</attachid>
            <date>2012-11-05 22:20:29 -0800</date>
            <delta_ts>2012-11-06 21:19:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101300-20121105221843.patch</filename>
            <type>text/plain</type>
            <size>58791</size>
            <attacher name="James Simonsen">simonjam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmU2MjQ5ODhmODdjNGZj
OGY2ZDRhMWFhN2ZhMTc4ZDY2YWE4NTAxYS4uOWY2NjJhODJlZmE1NmI0MjY4MjVkNWJjMmE2ZGYx
ZDQ3MDIyMDZiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAxMi0xMS0wNSAgSmFt
ZXMgU2ltb25zZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3RvcmUgdGhl
IGluaXRpYXRvciBvZiBDYWNoZWRSZXNvdXJjZVJlcXVlc3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEzMDAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIHZpc2libGUgY2hh
bmdlIGluIGJlaGF2aW9yICh5ZXQpLgorCisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU3JjVmFs
dWUuY3BwOiBTZXQgdGhlIGluaXRpYXRvciBmb3IgYWxsIG9mIHRoZXNlLi4uCisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZVNyY1ZhbHVlOjpjYWNoZWRGb250KToKKyAgICAgICAgKiBjc3Mv
Q1NTSW1hZ2VTZXRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVl
OjpjYWNoZWRJbWFnZVNldCk6CisgICAgICAgICogY3NzL0NTU0ltYWdlVmFsdWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VWYWx1ZTo6Y2FjaGVkSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTSW1hZ2VWYWx1ZTo6c2V0SW5pdGlhdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIGNzcy9DU1NJbWFnZVZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKENTU0ltYWdlVmFsdWUpOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGVJbXBvcnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSW1wb3J0OjpyZXF1ZXN0U3R5bGVTaGVldCk6Cisg
ICAgICAgICogY3NzL1dlYktpdENTU1NWR0RvY3VtZW50VmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZTo6bG9hZCk6CisgICAgICAgICogY3NzL1dl
YktpdENTU1NoYWRlclZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU1NoYWRl
clZhbHVlOjpjYWNoZWRTaGFkZXIpOgorICAgICAgICAqIGRvbS9TY3JpcHRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnJlcXVlc3RTY3JpcHQpOgorICAgICAg
ICAqIGh0bWwvSFRNTEJvZHlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCb2R5
RWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxM
aW5rRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnByb2Nl
c3MpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1ByZWxvYWRTY2FubmVyOjplbWl0UnVsZSk6CisgICAgICAgICogaHRt
bC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaDoKKyAgICAgICAgKENTU1ByZWxvYWRTY2FubmVy
KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UHJlbG9hZFRhc2s6OlByZWxvYWRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlByZWxvYWRUYXNrOjpwcmVsb2FkKToKKyAgICAgICAgKFByZWxvYWRUYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1Rva2VuKToKKyAgICAgICAgKiBs
b2FkZXIvSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMb2FkZXI6OnVw
ZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKiBsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25z
ZSk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FjaGVkRm9udDo6YmVnaW5Mb2FkSWZOZWVkZWQpOgorICAgICAgICAqIGxvYWRlci9j
YWNoZS9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6bG9h
ZCk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6CisgICAgICAgIChDYWNo
ZWRJbWFnZSk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVkUmVzb3VyY2VUeXBlVG9U
YXJnZXRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpsb2FkKTogVGhp
cyBpcyB3aGVyZSB3ZSBhY3R1YWxseSBzdG9yZSB0aGUgaW5pdGlhdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q2FjaGVkUmVzb3VyY2U6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVz
b3VyY2U6OnN0b3BMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpz
ZXREZWNvZGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6c2V0RW5j
b2RlZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmRpZEFjY2Vzc0Rl
Y29kZWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpzZXRSZXNvdXJj
ZVRvUmV2YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6Y2xlYXJS
ZXNvdXJjZVRvUmV2YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6
bXVzdFJldmFsaWRhdGVEdWVUb0NhY2hlSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRSZXNvdXJjZTo6aXNTYWZlVG9NYWtlUHVyZ2VhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlZFJlc291cmNlOjptYWtlUHVyZ2VhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJl
c291cmNlOjpzZXRMb2FkUHJpb3JpdHkpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZS5oOgorICAgICAgICAoQ2FjaGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkUmVzb3VyY2U6OnJlc291cmNlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRSZXNvdXJjZTo6dXJsKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjppbml0
aWFsUmVxdWVzdCk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0SW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RVc2Vy
Q1NTU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
cmVxdWVzdFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVy
OjpyZXZhbGlkYXRlUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VM
b2FkZXI6OmxvYWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6ZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlZFJlc291cmNlTG9hZGVyOjpyZWxvYWRJbWFnZXNJZk5vdERlZmVycmVkKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnByZWxv
YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNoZWNrRm9yUGVu
ZGluZ1ByZWxvYWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpy
ZXF1ZXN0UHJlbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
aXNQcmVsb2FkZWQpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRl
ci5oOgorICAgICAgICAoQ2FjaGVkUmVzb3VyY2VMb2FkZXIpOgorICAgICAgICAoUGVuZGluZ1By
ZWxvYWQpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpDYWNoZWRSZXNvdXJj
ZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRS
ZXNvdXJjZVJlcXVlc3Q6On5DYWNoZWRSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpzZXRJbml0aWF0b3IpOiBDYW4gYmUgYW4gRWxlbWVu
dCBvciBqdXN0IGEgbmFtZSBhcyBkZWZpbmVkIGluIFJlc291cmNlIFRpbWluZy4KKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZFJlc291cmNlUmVxdWVzdDo6aW5pdGlhdG9yTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmluaXRpYXRvckRvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlUmVxdWVzdDo6aW5pdGlhdG9yRWxlbWVudCk6
CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oOiBNb3ZlZCBl
bnVtcyB0byBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgdG8gYXZvaWQgY2lyY3VsYXIgaW5jbHVkZXMu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlUmVx
dWVzdDo6c2V0T3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZVJlcXVl
c3Q6OmRlZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlUmVxdWVzdDo6c2V0
RGVmZXIpOgorICAgICAgICAoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKiBsb2Fk
ZXIvaWNvbi9JY29uTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25Mb2FkZXI6OnN0
YXJ0TG9hZGluZyk6CisgICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVtZW50OjpyZXF1ZXN0SW1hZ2VSZXNvdXJjZSk6Cisg
ICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGb250RmFjZVVyaUVsZW1lbnQ6OmxvYWRGb250KToKKyAgICAgICAgKiBzdmcvU1ZHVXNl
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKToKKwogMjAxMi0xMS0wNSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+
CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTI3
NQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwCmluZGV4IDM2OTA3
ODkzMzZkMGI4NDQ4MTUyNzNiMDEzMjI1ZjY5ZGFhZDY4N2YuLmZhZWQ3NGRjYTkxNTgyMWQzY2Q4
OTJmNGE2NzBlZWMzOWVmZmY3MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250RmFjZVNyY1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
cmNWYWx1ZS5jcHAKQEAgLTk3LDYgKzk3LDcgQEAgQ2FjaGVkRm9udCogQ1NTRm9udEZhY2VTcmNW
YWx1ZTo6Y2FjaGVkRm9udChEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgaWYgKCFtX2NhY2hl
ZEZvbnQpIHsKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VS
ZXF1ZXN0KGRvY3VtZW50LT5jb21wbGV0ZVVSTChtX3Jlc291cmNlKSkpOworICAgICAgICByZXF1
ZXN0LnNldEluaXRpYXRvcigiY3NzIiwgZG9jdW1lbnQpOwogICAgICAgICBtX2NhY2hlZEZvbnQg
PSBkb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdEZvbnQocmVxdWVzdCk7
CiAgICAgfQogICAgIHJldHVybiBtX2NhY2hlZEZvbnQuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTSW1hZ2VTZXRWYWx1ZS5jcHAKaW5kZXggZjdkNDAxZjVjZjY3NDkwMjE4ODYwM2QyMDhkZTJk
NjNiOWM2Y2FlMC4uOTU4NTZhZjY2Mzg2ZmQ0ZmMzYzQ0NGFiMWNiNmI1YjYyNWNkYzg2NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVlLmNwcApAQCAtMTEwLDYgKzExMCw3IEBA
IFN0eWxlQ2FjaGVkSW1hZ2VTZXQqIENTU0ltYWdlU2V0VmFsdWU6OmNhY2hlZEltYWdlU2V0KENh
Y2hlZFJlc291cmNlTG9hZGVyKiBsb2FkCiAgICAgICAgIC8vIGFuZCBhbnkgQ1NTIHRyYW5zZm9y
bXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTY5OAogICAgICAg
ICBJbWFnZVdpdGhTY2FsZSBpbWFnZSA9IGJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCk7CiAgICAg
ICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsb2FkZXIt
PmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGltYWdlLmltYWdlVVJMKSkpOworICAgICAgICByZXF1
ZXN0LnNldEluaXRpYXRvcigiY3NzIiwgZG9jdW1lbnQpOwogICAgICAgICBpZiAoQ2FjaGVkUmVz
b3VyY2VIYW5kbGU8Q2FjaGVkSW1hZ2U+IGNhY2hlZEltYWdlID0gbG9hZGVyLT5yZXF1ZXN0SW1h
Z2UocmVxdWVzdCkpIHsKICAgICAgICAgICAgIG1faW1hZ2VTZXQgPSBTdHlsZUNhY2hlZEltYWdl
U2V0OjpjcmVhdGUoY2FjaGVkSW1hZ2UuZ2V0KCksIGltYWdlLnNjYWxlRmFjdG9yLCB0aGlzKTsK
ICAgICAgICAgICAgIG1fYWNjZXNzZWRCZXN0Rml0SW1hZ2UgPSB0cnVlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ltYWdlVmFsdWUuY3BwCmluZGV4IDZiNzNkNDYzMWEwZjAwMjRmMmVjNmYzYzY0ODU4MTY0
OTg0MTA0ZjcuLmE5YWRiOWNlYzY2OWVhNTMyMTNlNWU2ZjljNjg0MDhiZDRlZDQ1OWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVz
dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1
ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgogI2luY2x1
ZGUgIlN0eWxlUGVuZGluZ0ltYWdlLmgiCkBAIC04NCw2ICs4NSwxMCBAQCBTdHlsZUNhY2hlZElt
YWdlKiBDU1NJbWFnZVZhbHVlOjpjYWNoZWRJbWFnZShDYWNoZWRSZXNvdXJjZUxvYWRlciogbG9h
ZGVyLCBjb25zdAogICAgICAgICBtX2FjY2Vzc2VkSW1hZ2UgPSB0cnVlOwogCiAgICAgICAgIENh
Y2hlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsb2FkZXItPmRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKHVybCkpKTsKKyAgICAgICAgaWYgKG1faW5pdGlhdG9yRWxlbWVu
dCkKKyAgICAgICAgICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKG1faW5pdGlhdG9yRWxlbWVudC5y
ZWxlYXNlKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXF1ZXN0LnNldEluaXRpYXRv
cigiY3NzIiwgbG9hZGVyLT5kb2N1bWVudCgpKTsKICAgICAgICAgaWYgKENhY2hlZFJlc291cmNl
SGFuZGxlPENhY2hlZEltYWdlPiBjYWNoZWRJbWFnZSA9IGxvYWRlci0+cmVxdWVzdEltYWdlKHJl
cXVlc3QpKQogICAgICAgICAgICAgbV9pbWFnZSA9IFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShj
YWNoZWRJbWFnZS5nZXQoKSk7CiAgICAgfQpAQCAtMTM0LDQgKzEzOSw5IEBAIHZvaWQgQ1NTSW1h
Z2VWYWx1ZTo6cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1l
bW9yeU9iamVjdEluCiAgICAgLy8gTm8gbmVlZCB0byByZXBvcnQgbV9pbWFnZSBhcyBpdCBpcyBj
b3VudGVkIGFzIHBhcnQgb2YgUmVuZGVyQXJlbmEuCiB9CiAKK3ZvaWQgQ1NTSW1hZ2VWYWx1ZTo6
c2V0SW5pdGlhdG9yKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICBtX2luaXRp
YXRvckVsZW1lbnQgPSBlbGVtZW50OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ltYWdlVmFsdWUuaAppbmRleCA4YzgyZjJjNjdkYjQzM2E3NTE3MzNjOTY3MWRl
OWI5MTUxZTdhOThjLi5lMWMxYTg4Yzg2ODk3NGE2ZjY4MmYzODNmZmRjYTE2ZWQ4Y2IxMzcwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVZhbHVlLmgKQEAgLTI3LDYgKzI3LDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CitjbGFzcyBFbGVtZW50
OwogY2xhc3MgU3R5bGVDYWNoZWRJbWFnZTsKIGNsYXNzIFN0eWxlSW1hZ2U7CiAKQEAgLTUwLDYg
KzUxLDggQEAgcHVibGljOgogCiAgICAgdm9pZCByZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2Uo
TWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCisgICAgdm9pZCBzZXRJbml0aWF0b3IoUGFzc1Jl
ZlB0cjxFbGVtZW50Pik7CisKIHByb3RlY3RlZDoKICAgICBDU1NJbWFnZVZhbHVlKENsYXNzVHlw
ZSwgY29uc3QgU3RyaW5nJiB1cmwpOwogCkBAIC02NCw2ICs2Nyw3IEBAIHByaXZhdGU6CiAgICAg
U3RyaW5nIG1fdXJsOwogICAgIFJlZlB0cjxTdHlsZUltYWdlPiBtX2ltYWdlOwogICAgIGJvb2wg
bV9hY2Nlc3NlZEltYWdlOworICAgIFJlZlB0cjxFbGVtZW50PiBtX2luaXRpYXRvckVsZW1lbnQ7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSdWxlSW1wb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVJ
bXBvcnQuY3BwCmluZGV4IGVlYzM1MDc3MWM0Nzk0MmU4NjU3NzMwN2VjMjQwMzJkMjZjMDRmODUu
LmY1MTEzN2UzMzIxZTYxODg2OTk3Njc2YjRiYmFkOGI1ODkxY2Q1NjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVJbXBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJ1bGVJbXBvcnQuY3BwCkBAIC0xMTcsNiArMTE3LDcgQEAgdm9pZCBTdHlsZVJ1
bGVJbXBvcnQ6OnJlcXVlc3RTdHlsZVNoZWV0KCkKICAgICB9CiAKICAgICBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJlcXVlc3QoYWJzVVJMKSwgbV9wYXJlbnRTdHlsZVNo
ZWV0LT5jaGFyc2V0KCkpOworICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKCJjc3MiLCBkb2N1bWVu
dCk7CiAgICAgaWYgKG1fcGFyZW50U3R5bGVTaGVldC0+aXNVc2VyU3R5bGVTaGVldCgpKQogICAg
ICAgICBtX2NhY2hlZFNoZWV0ID0gY2FjaGVkUmVzb3VyY2VMb2FkZXItPnJlcXVlc3RVc2VyQ1NT
U3R5bGVTaGVldChyZXF1ZXN0KTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZS5jcHAKaW5kZXggNjdlODRlM2M5Yjk4M2FiYjA4MjQx
MjA3NTllMzg4ODA1M2NmYzhiYS4uNWEzMzhmZTkyODNhYWZhZDE5OGExNGRkNDQ5MzM4YWU0YWJl
MmJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1NWR0RvY3VtZW50
VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NTVkdEb2N1bWVudFZh
bHVlLmNwcApAQCAtNTQsNiArNTQsNyBAQCBDYWNoZWRTVkdEb2N1bWVudCogV2ViS2l0Q1NTU1ZH
RG9jdW1lbnRWYWx1ZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciogbG9hZGVyKQogICAgICAg
ICBtX2xvYWRSZXF1ZXN0ZWQgPSB0cnVlOwogCiAgICAgICAgIENhY2hlZFJlc291cmNlUmVxdWVz
dCByZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsb2FkZXItPmRvY3VtZW50KCktPmNvbXBsZXRlVVJM
KG1fdXJsKSkpOworICAgICAgICByZXF1ZXN0LnNldEluaXRpYXRvcigiY3NzIiwgbG9hZGVyLT5k
b2N1bWVudCgpKTsKICAgICAgICAgbV9kb2N1bWVudCA9IGxvYWRlci0+cmVxdWVzdFNWR0RvY3Vt
ZW50KHJlcXVlc3QpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1dl
YktpdENTU1NoYWRlclZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NTaGFk
ZXJWYWx1ZS5jcHAKaW5kZXggZmEwNDE5MGMzZGM4ZTNhZGI0MzFhYjAzYThmZDFhMWUxODAwNGJh
OS4uZjUwZTZlMTZkYWE4YTkyZTIyYjFiMjE0NjI5MzQyMmZlZDMwZmM4ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1NoYWRlclZhbHVlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvV2ViS2l0Q1NTU2hhZGVyVmFsdWUuY3BwCkBAIC02MSw2ICs2MSw3IEBAIFN0
eWxlQ2FjaGVkU2hhZGVyKiBXZWJLaXRDU1NTaGFkZXJWYWx1ZTo6Y2FjaGVkU2hhZGVyKENhY2hl
ZFJlc291cmNlTG9hZGVyKiBsb2FkCiAgICAgICAgIG1fYWNjZXNzZWRTaGFkZXIgPSB0cnVlOwog
CiAgICAgICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFJlc291cmNlUmVxdWVzdChs
b2FkZXItPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKG1fdXJsKSkpOworICAgICAgICByZXF1ZXN0
LnNldEluaXRpYXRvcigiY3NzIiwgbG9hZGVyLT5kb2N1bWVudCgpKTsKICAgICAgICAgaWYgKENh
Y2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNoYWRlcj4gY2FjaGVkU2hhZGVyID0gbG9hZGVyLT5y
ZXF1ZXN0U2hhZGVyKHJlcXVlc3QpKQogICAgICAgICAgICAgbV9zaGFkZXIgPSBTdHlsZUNhY2hl
ZFNoYWRlcjo6Y3JlYXRlKGNhY2hlZFNoYWRlci5nZXQoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdEVsZW1lbnQuY3BwCmluZGV4IGNmZGQxYTQzNjk4MGQxYjAwMjYyYzExOGNjMjY5Zjcz
YzJjYzMyMjAuLjRmYTU1OWU4ZmI4MmI1Y2QyODQ3YjNkYTAyMDc5MzZhNTE3MTU3MWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKQEAgLTI2Niw2ICsyNjYsNyBAQCBib29sIFNj
cmlwdEVsZW1lbnQ6OnJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpCiAgICAg
ICAgICAgICB1cGRhdGVSZXF1ZXN0Rm9yQWNjZXNzQ29udHJvbChyZXF1ZXN0Lm11dGFibGVSZXNv
dXJjZVJlcXVlc3QoKSwgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBh
bGxvd0NyZWRlbnRpYWxzKTsKICAgICAgICAgfQogICAgICAgICByZXF1ZXN0LnNldENoYXJzZXQo
c2NyaXB0Q2hhcnNldCgpKTsKKyAgICAgICAgcmVxdWVzdC5zZXRJbml0aWF0b3IoZWxlbWVudCgp
KTsKIAogICAgICAgICBtX2NhY2hlZFNjcmlwdCA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2Fj
aGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChyZXF1ZXN0KTsKICAgICAgICAgbV9p
c0V4dGVybmFsU2NyaXB0ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEJvZHlFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50
LmNwcAppbmRleCA4NWNkZjM4YjEyNWQ3NjNmODY0MDM1MDQ5MjZmMTZkNzUxMjI2OGQ3Li5hYTcz
ZGFhNGQ5OWFjMDBkZTUzYTBlMjE2MTM3Y2Y1NjgzNGVlNDE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQm9keUVsZW1lbnQuY3BwCkBAIC03Miw4ICs3MiwxMSBAQCB2b2lkIEhUTUxCb2R5RWxl
bWVudDo6Y29sbGVjdFN0eWxlRm9yQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRl
LCBTdHlsZQogewogICAgIGlmIChhdHRyaWJ1dGUubmFtZSgpID09IGJhY2tncm91bmRBdHRyKSB7
CiAgICAgICAgIFN0cmluZyB1cmwgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMo
YXR0cmlidXRlLnZhbHVlKCkpOwotICAgICAgICBpZiAoIXVybC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
SW1hZ2UsIENTU0ltYWdlVmFsdWU6OmNyZWF0ZShkb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwp
LnN0cmluZygpKSkpOworICAgICAgICBpZiAoIXVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IFJlZlB0cjxDU1NJbWFnZVZhbHVlPiBpbWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRl
KGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCkuc3RyaW5nKCkpOworICAgICAgICAgICAgaW1h
Z2VWYWx1ZS0+c2V0SW5pdGlhdG9yKHRoaXMpOworICAgICAgICAgICAgc3R5bGUtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlLCBpbWFnZVZhbHVlLnJl
bGVhc2UoKSkpOworICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGUubmFtZSgpID09
IG1hcmdpbndpZHRoQXR0ciB8fCBhdHRyaWJ1dGUubmFtZSgpID09IGxlZnRtYXJnaW5BdHRyKSB7
CiAgICAgICAgIGFkZEhUTUxMZW5ndGhUb1N0eWxlKHN0eWxlLCBDU1NQcm9wZXJ0eU1hcmdpblJp
Z2h0LCBhdHRyaWJ1dGUudmFsdWUoKSk7CiAgICAgICAgIGFkZEhUTUxMZW5ndGhUb1N0eWxlKHN0
eWxlLCBDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIGF0dHJpYnV0ZS52YWx1ZSgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAppbmRleCA3Yzk2YjE5YjEzODc4MTllMjAyZjU0
ODllMmM2MjA5YjNmNDRiNDMzLi5hYzA3OTFjMDBiM2Q2YTBhZjBlMjJlNjE5ZGI0YjQxMjA1NmM2
Y2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCkBAIC0yMjIsOCAr
MjIyLDkgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MoKQogICAgICAgICAvLyBMb2Fk
IHN0eWxlc2hlZXRzIHRoYXQgYXJlIG5vdCBuZWVkZWQgZm9yIHRoZSByZW5kZXJpbmcgaW1tZWRp
YXRlbHkgd2l0aCBsb3cgcHJpb3JpdHkuCiAgICAgICAgIFJlc291cmNlTG9hZFByaW9yaXR5IHBy
aW9yaXR5ID0gYmxvY2tpbmcgPyBSZXNvdXJjZUxvYWRQcmlvcml0eVVucmVzb2x2ZWQgOiBSZXNv
dXJjZUxvYWRQcmlvcml0eVZlcnlMb3c7CiAgICAgICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCBy
ZXF1ZXN0KFJlc291cmNlUmVxdWVzdChkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChtX3VybCkpLCBj
aGFyc2V0LCBwcmlvcml0eSk7CisgICAgICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKHRoaXMpOwog
ICAgICAgICBtX2NhY2hlZFNoZWV0ID0gZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIo
KS0+cmVxdWVzdENTU1N0eWxlU2hlZXQocmVxdWVzdCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlm
IChtX2NhY2hlZFNoZWV0KQogICAgICAgICAgICAgbV9jYWNoZWRTaGVldC0+YWRkQ2xpZW50KHRo
aXMpOwogICAgICAgICBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NT
U1ByZWxvYWRTY2FubmVyLmNwcAppbmRleCAyOWYxY2NkNDY4YmFkZDhkZTVjM2IxOWU3MmYyZDg1
MmNkMzAwODkzLi44MmZkZmM2NWM5ODExZWE4YTEwMjY0NjAyNmFlMGFlOTFjNGQ3YmE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuY3BwCkBA
IC0xOTYsNyArMTk2LDcgQEAgdm9pZCBDU1NQcmVsb2FkU2Nhbm5lcjo6ZW1pdFJ1bGUoKQogICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZSgiaW1wb3J0IiwgbV9ydWxlLmNoYXJhY3RlcnMoKSwgbV9y
dWxlLmxlbmd0aCgpKSkgewogICAgICAgICBTdHJpbmcgdmFsdWUgPSBwYXJzZUNTU1N0cmluZ09y
VVJMKG1fcnVsZVZhbHVlLmNoYXJhY3RlcnMoKSwgbV9ydWxlVmFsdWUubGVuZ3RoKCkpOwogICAg
ICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0
IHJlcXVlc3QobV9kb2N1bWVudC0+Y29tcGxldGVVUkwodmFsdWUpKTsKKyAgICAgICAgICAgIENh
Y2hlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFJlc291cmNlUmVxdWVzdChtX2RvY3VtZW50LT5j
b21wbGV0ZVVSTCh2YWx1ZSkpKTsKICAgICAgICAgICAgIG1fZG9jdW1lbnQtPmNhY2hlZFJlc291
cmNlTG9hZGVyKCktPnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQsIHJlcXVl
c3QsIFN0cmluZygpLCBtX3NjYW5uaW5nQm9keSk7CiAgICAgICAgIH0KICAgICAgICAgbV9zdGF0
ZSA9IEluaXRpYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQ
cmVsb2FkU2Nhbm5lci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNj
YW5uZXIuaAppbmRleCBjM2RiYjgwMGVkZDhlYTEwYWIyNGViM2MxMjNiN2NhOThmMmNiNDI3Li5i
MTZhNjI5MjVlMTA2MTVhOTI0M2M5MjRiY2VlN2EwY2MwZDFkMzIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmgKQEAgLTM3LDcgKzM3LDcgQEAg
Y2xhc3MgSFRNTFRva2VuOwogY2xhc3MgQ1NTUHJlbG9hZFNjYW5uZXIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENTU1ByZWxvYWRTY2FubmVyKTsKIHB1YmxpYzoKLSAgICBDU1NQcmVsb2Fk
U2Nhbm5lcihEb2N1bWVudCopOworICAgIGV4cGxpY2l0IENTU1ByZWxvYWRTY2FubmVyKERvY3Vt
ZW50Kik7CiAKICAgICB2b2lkIHJlc2V0KCk7CiAgICAgdm9pZCBzY2FuKGNvbnN0IEhUTUxUb2tl
biYsIGJvb2wgc2Nhbm5pbmdCb2R5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCmluZGV4IGE3NWI1MmUzNTUwNmFhMzBlNWU5YmYzMDlm
MDIwZDg3MTkxY2NmZjQuLjgxZDU2OWU4Y2VkN2ZkMzM0ZDhiYTlkZjRmYTBkMGE5YzdiNjc1MDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVy
LmNwcApAQCAtNDUsOCArNDUsOSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBjbGFz
cyBQcmVsb2FkVGFzayB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgUHJlbG9hZFRhc2soY29uc3Qg
SFRNTFRva2VuJiB0b2tlbikKKyAgICBQcmVsb2FkVGFzayhjb25zdCBIVE1MVG9rZW4mIHRva2Vu
LCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgICAgIDogbV90YWdOYW1lKHRva2VuLm5hbWUoKS5k
YXRhKCksIHRva2VuLm5hbWUoKS5zaXplKCkpCisgICAgICAgICwgbV9kb2N1bWVudChkb2N1bWVu
dCkKICAgICAgICAgLCBtX2xpbmtJc1N0eWxlU2hlZXQoZmFsc2UpCiAgICAgICAgICwgbV9saW5r
TWVkaWFBdHRyaWJ1dGVJc1NjcmVlbih0cnVlKQogICAgICAgICAsIG1faW5wdXRJc0ltYWdlKGZh
bHNlKQpAQCAtMTIxLDEzICsxMjIsMTQgQEAgcHVibGljOgogICAgICAgICBtX3VybFRvTG9hZCA9
IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhhdHRyaWJ1dGVWYWx1ZSk7CiAgICAg
fQogCi0gICAgdm9pZCBwcmVsb2FkKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBzY2FubmluZ0Jv
ZHksIGNvbnN0IEtVUkwmIGJhc2VVUkwpCisgICAgdm9pZCBwcmVsb2FkKGJvb2wgc2Nhbm5pbmdC
b2R5LCBjb25zdCBLVVJMJiBiYXNlVVJMKQogICAgIHsKICAgICAgICAgaWYgKG1fdXJsVG9Mb2Fk
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDYWNoZWRSZXNvdXJj
ZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBkb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKTsKLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBkb2N1bWVudC0+Y29t
cGxldGVVUkwobV91cmxUb0xvYWQsIGJhc2VVUkwpOworICAgICAgICBDYWNoZWRSZXNvdXJjZUxv
YWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpOworICAgICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJl
cXVlc3QobV9kb2N1bWVudC0+Y29tcGxldGVVUkwobV91cmxUb0xvYWQsIGJhc2VVUkwpKSk7Cisg
ICAgICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKHRhZ05hbWUoKSwgbV9kb2N1bWVudC5nZXQoKSk7
CiAgICAgICAgIGlmIChtX3RhZ05hbWUgPT0gc2NyaXB0VGFnKQogICAgICAgICAgICAgY2FjaGVk
UmVzb3VyY2VMb2FkZXItPnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCwgcmVxdWVzdCwg
bV9jaGFyc2V0LCBzY2FubmluZ0JvZHkpOwogICAgICAgICBlbHNlIGlmIChtX3RhZ05hbWUgPT0g
aW1nVGFnIHx8IChtX3RhZ05hbWUgPT0gaW5wdXRUYWcgJiYgbV9pbnB1dElzSW1hZ2UpKQpAQCAt
MTQxLDYgKzE0Myw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV90
YWdOYW1lOworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBTdHJpbmcgbV91
cmxUb0xvYWQ7CiAgICAgU3RyaW5nIG1fY2hhcnNldDsKICAgICBTdHJpbmcgbV9iYXNlRWxlbWVu
dEhyZWY7CkBAIC0xOTAsNyArMTkzLDcgQEAgdm9pZCBIVE1MUHJlbG9hZFNjYW5uZXI6OnByb2Nl
c3NUb2tlbigpCiAgICAgaWYgKG1fdG9rZW4udHlwZSgpICE9IEhUTUxUb2tlblR5cGVzOjpTdGFy
dFRhZykKICAgICAgICAgcmV0dXJuOwogCi0gICAgUHJlbG9hZFRhc2sgdGFzayhtX3Rva2VuKTsK
KyAgICBQcmVsb2FkVGFzayB0YXNrKG1fdG9rZW4sIG1fZG9jdW1lbnQpOwogICAgIG1fdG9rZW5p
emVyLT51cGRhdGVTdGF0ZUZvcih0YXNrLnRhZ05hbWUoKSwgbV9kb2N1bWVudC0+ZnJhbWUoKSk7
CiAKICAgICBpZiAodGFzay50YWdOYW1lKCkgPT0gYm9keVRhZykKQEAgLTIwMiw3ICsyMDUsNyBA
QCB2b2lkIEhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1Rva2VuKCkKICAgICBpZiAodGFzay50
YWdOYW1lKCkgPT0gYmFzZVRhZykKICAgICAgICAgdXBkYXRlUHJlZGljdGVkQmFzZUVsZW1lbnRV
UkwoS1VSTChtX2RvY3VtZW50LT51cmwoKSwgdGFzay5iYXNlRWxlbWVudEhyZWYoKSkpOwogCi0g
ICAgdGFzay5wcmVsb2FkKG1fZG9jdW1lbnQsIHNjYW5uaW5nQm9keSgpLCBtX3ByZWRpY3RlZEJh
c2VFbGVtZW50VVJMLmlzRW1wdHkoKSA/IG1fZG9jdW1lbnQtPmJhc2VVUkwoKSA6IG1fcHJlZGlj
dGVkQmFzZUVsZW1lbnRVUkwpOworICAgIHRhc2sucHJlbG9hZChzY2FubmluZ0JvZHkoKSwgbV9w
cmVkaWN0ZWRCYXNlRWxlbWVudFVSTC5pc0VtcHR5KCkgPyBtX2RvY3VtZW50LT5iYXNlVVJMKCkg
OiBtX3ByZWRpY3RlZEJhc2VFbGVtZW50VVJMKTsKIH0KIAogYm9vbCBIVE1MUHJlbG9hZFNjYW5u
ZXI6OnNjYW5uaW5nQm9keSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvSW1hZ2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNw
cAppbmRleCBjMTJiZTJmZjlkNDU1NzRlNDFkNGY0NzA4Y2I5NmJiNGQ1YTdlYzRiLi5lMjI0N2Qy
NTRjN2Y4NjA5ZWY2ZWEyYTk3NzNiNWY5ZjdkMWI2OTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9J
bWFnZUxvYWRlci5jcHAKQEAgLTE3OSw2ICsxNzksNyBAQCB2b2lkIEltYWdlTG9hZGVyOjp1cGRh
dGVGcm9tRWxlbWVudCgpCiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkSW1hZ2U+IG5l
d0ltYWdlID0gMDsKICAgICBpZiAoIWF0dHIuaXNOdWxsKCkgJiYgIXN0cmlwTGVhZGluZ0FuZFRy
YWlsaW5nSFRNTFNwYWNlcyhhdHRyKS5pc0VtcHR5KCkpIHsKICAgICAgICAgQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGRvY3VtZW50KCktPmNvbXBsZXRlVVJM
KHNvdXJjZVVSSShhdHRyKSkpKTsKKyAgICAgICAgcmVxdWVzdC5zZXRJbml0aWF0b3IoY2xpZW50
KCktPnNvdXJjZUVsZW1lbnQoKSk7CiAKICAgICAgICAgU3RyaW5nIGNyb3NzT3JpZ2luTW9kZSA9
IGNsaWVudCgpLT5zb3VyY2VFbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpj
cm9zc29yaWdpbkF0dHIpOwogICAgICAgICBpZiAoIWNyb3NzT3JpZ2luTW9kZS5pc051bGwoKSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggZTY3
ZjEwMjdhOTYxYTRjYTYyMmJlMGM0OWFmOTJhOTgzMTM1NjY4ZC4uMDMwNDUxMTVmMzljYjA4MjVl
MDRjNTA0ZGIwNTM2MWJiZTA0OTUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L1N1YnJlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVz
b3VyY2VMb2FkZXIuY3BwCkBAIC02LDEzICs2LDEzIEBACiAgKiBhcmUgbWV0OgogICoKICAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgogICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRApAQCAtMjAy
LDggKzIwMiw4IEBAIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKICAgICBpZiAobV9sb2FkaW5nTXVsdGlw
YXJ0Q29udGVudCAmJiBidWZmZXIgJiYgYnVmZmVyLT5zaXplKCkpIHsKICAgICAgICAgc2VuZERh
dGFUb1Jlc291cmNlKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CiAgICAgICAgIGNs
ZWFyUmVzb3VyY2VEYXRhKCk7Ci0gICAgICAgIC8vIFNpbmNlIGEgc3VicmVzb3VyY2UgbG9hZGVy
IGRvZXMgbm90IGxvYWQgbXVsdGlwYXJ0IHNlY3Rpb25zIHByb2dyZXNzaXZlbHksIGRhdGEgd2Fz
IGRlbGl2ZXJlZCB0byB0aGUgbG9hZGVyIGFsbCBhdCBvbmNlLiAgICAgICAgCi0gICAgICAgIC8v
IEFmdGVyIHRoZSBmaXJzdCBtdWx0aXBhcnQgc2VjdGlvbiBpcyBjb21wbGV0ZSwgc2lnbmFsIHRv
IGRlbGVnYXRlcyB0aGF0IHRoaXMgbG9hZCBpcyAiZmluaXNoZWQiIAorICAgICAgICAvLyBTaW5j
ZSBhIHN1YnJlc291cmNlIGxvYWRlciBkb2VzIG5vdCBsb2FkIG11bHRpcGFydCBzZWN0aW9ucyBw
cm9ncmVzc2l2ZWx5LCBkYXRhIHdhcyBkZWxpdmVyZWQgdG8gdGhlIGxvYWRlciBhbGwgYXQgb25j
ZS4KKyAgICAgICAgLy8gQWZ0ZXIgdGhlIGZpcnN0IG11bHRpcGFydCBzZWN0aW9uIGlzIGNvbXBs
ZXRlLCBzaWduYWwgdG8gZGVsZWdhdGVzIHRoYXQgdGhpcyBsb2FkIGlzICJmaW5pc2hlZCIKICAg
ICAgICAgbV9kb2N1bWVudExvYWRlci0+c3VicmVzb3VyY2VMb2FkZXJGaW5pc2hlZExvYWRpbmdP
bmVQYXJ0KHRoaXMpOwogICAgICAgICBkaWRGaW5pc2hMb2FkaW5nT25lUGFydCgwKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAKaW5kZXggZjExOWI5
MzY5YTY5YTU1NDc4NWVjMTZmMDNjYTc2N2FmMWRiNWJiMC4uMmZjOTQ1MGE5OTdmYmVlNGQ5YmQ4
OTZiZTA4NDAyMWI5NTlhZjIyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZEZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRGb250LmNwcApAQCAtOTksNyArOTksNyBAQCB2b2lkIENhY2hlZEZvbnQ6OmJlZ2luTG9hZElm
TmVlZGVkKENhY2hlZFJlc291cmNlTG9hZGVyKiBkbCkKIHsKICAgICBpZiAoIW1fbG9hZEluaXRp
YXRlZCkgewogICAgICAgICBtX2xvYWRJbml0aWF0ZWQgPSB0cnVlOwotICAgICAgICBDYWNoZWRS
ZXNvdXJjZTo6bG9hZChkbCwgbV9vcHRpb25zKTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2U6Omxv
YWQoZGwsIENhY2hlZFJlc291cmNlUmVxdWVzdChtX3Jlc291cmNlUmVxdWVzdCwgbV9vcHRpb25z
KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
LmNwcAppbmRleCAzNWE2YzUyMGFiNmU1Njc2ZTEwYTYyZWI4ZWVjYmY0NWUwNzEwMGQ1Li40MGQ2
M2I4NDJjYjg3NDUyMzFjOGM0NzZkMGY2MDZlMGIwMjdjMjYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKQEAgLTc2LDEwICs3NiwxMCBAQCBDYWNoZWRJ
bWFnZTo6fkNhY2hlZEltYWdlKCkKICAgICBjbGVhckltYWdlKCk7CiB9CiAKLXZvaWQgQ2FjaGVk
SW1hZ2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyLCBj
b25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCit2b2lkIENhY2hlZEltYWdlOjps
b2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgY29uc3QgQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIGlmICghY2FjaGVkUmVzb3VyY2VM
b2FkZXIgfHwgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmF1dG9Mb2FkSW1hZ2VzKCkpCi0gICAgICAg
IENhY2hlZFJlc291cmNlOjpsb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyLCBvcHRpb25zKTsKKyAg
ICAgICAgQ2FjaGVkUmVzb3VyY2U6OmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIsIHJlcXVlc3Qp
OwogICAgIGVsc2UKICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCmluZGV4IGFkMWM4MDIwODRlMzBiMjY2ZmNhNTdm
NzcyYzkyY2U2N2I2NmYyM2EuLjFjMDI1MjIzZWI0NzQ4YTM5MGZiMWU3NWFlMDBjNTk0NDQ3ZDZi
NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCkBAIC00Nyw3
ICs0Nyw3IEBAIHB1YmxpYzoKICAgICBDYWNoZWRJbWFnZShJbWFnZSopOwogICAgIHZpcnR1YWwg
fkNhY2hlZEltYWdlKCk7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGxvYWQoQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgbG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciosIGNvbnN0IENhY2hlZFJlc291cmNlUmVxdWVz
dCYpOwogCiAgICAgSW1hZ2UqIGltYWdlKCk7IC8vIFJldHVybnMgdGhlIG51bGxJbWFnZSgpIGlm
IHRoZSBpbWFnZSBpcyBub3QgYXZhaWxhYmxlIHlldC4KICAgICBJbWFnZSogaW1hZ2VGb3JSZW5k
ZXJlcihjb25zdCBSZW5kZXJPYmplY3QqKTsgLy8gUmV0dXJucyB0aGUgbnVsbEltYWdlKCkgaWYg
dGhlIGltYWdlIGlzIG5vdCBhdmFpbGFibGUgeWV0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKaW5kZXggY2EzZmUxMzYzMDQwNzE1N2I3ZmIzNTFk
NjhhYjRlYjAxNDMzNjY4Yi4uNDc1YTYwMWYyZDEyM2RkNTM4ZTk5ZjU1NThjZGQ0ZTk1MjRkZWVh
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3Bw
CkBAIC02Nyw3ICs2Nyw3IEBAIHRlbXBsYXRlPD4gc3RydWN0IFNlcXVlbmNlTWVtb3J5SW5zdHJ1
bWVudGF0aW9uVHJhaXRzPFdlYkNvcmU6OkNhY2hlZFJlc291cmNlQ2xpCiB1c2luZyBuYW1lc3Bh
Y2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKIHN0YXRpYyBSZXNvdXJjZUxv
YWRQcmlvcml0eSBkZWZhdWx0UHJpb3JpdHlGb3JSZXNvdXJjZVR5cGUoQ2FjaGVkUmVzb3VyY2U6
OlR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTExOSw3ICsxMTksNyBAQCBz
dGF0aWMgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRUeXBlIGNhY2hlZFJlc291cmNlVHlwZVRvVGFy
Z2V0VHlwZShDYWNoZWRSZXNvdXJjZQogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxl
U2hlZXQ6CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNT
dHlsZVNoZWV0OwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDogCisgICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6U2NyaXB0OgogICAgICAgICByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0OjpU
YXJnZXRJc1NjcmlwdDsKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6CiAg
ICAgICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzRm9udFJlc291cmNlOwpAQCAt
MTI5LDcgKzEyOSw3IEBAIHN0YXRpYyBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldFR5cGUgY2FjaGVk
UmVzb3VyY2VUeXBlVG9UYXJnZXRUeXBlKENhY2hlZFJlc291cmNlCiAgICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6U2hhZGVyUmVzb3VyY2U6CiAjZW5kaWYKICAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpSYXdSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNT
dWJyZXNvdXJjZTsgICAgCisgICAgICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElz
U3VicmVzb3VyY2U7CiAjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCiAgICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6TGlua1ByZWZldGNoOgogICAgICAgICByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0OjpU
YXJnZXRJc1ByZWZldGNoOwpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6
OmFkZEFkZGl0aW9uYWxSZXF1ZXN0SGVhZGVycyhDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVk
UmVzCiAgICAgZnJhbWVMb2FkZXItPmFkZEV4dHJhRmllbGRzVG9TdWJyZXNvdXJjZVJlcXVlc3Qo
bV9yZXNvdXJjZVJlcXVlc3QpOwogfQogCi12b2lkIENhY2hlZFJlc291cmNlOjpsb2FkKENhY2hl
ZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2Fk
ZXJPcHRpb25zJiBvcHRpb25zKQordm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9hZChDYWNoZWRSZXNv
dXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIGNvbnN0IENhY2hlZFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKIHsKICAgICBpZiAoIWNhY2hlZFJlc291cmNlTG9hZGVyLT5mcmFtZSgp
KSB7CiAgICAgICAgIGZhaWxCZWZvcmVTdGFydGluZygpOwpAQCAtMjUxLDEzICsyNTEsMTUgQEAg
dm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVz
b3VyY2VMb2FkZXIsIGNvbnN0IFJlc28KICAgICB9CiAKICAgICBGcmFtZUxvYWRlciogZnJhbWVM
b2FkZXIgPSBjYWNoZWRSZXNvdXJjZUxvYWRlci0+ZnJhbWUoKS0+bG9hZGVyKCk7Ci0gICAgaWYg
KG9wdGlvbnMuc2VjdXJpdHlDaGVjayA9PSBEb1NlY3VyaXR5Q2hlY2sgJiYgKGZyYW1lTG9hZGVy
LT5zdGF0ZSgpID09IEZyYW1lU3RhdGVQcm92aXNpb25hbCB8fCAhZnJhbWVMb2FkZXItPmFjdGl2
ZURvY3VtZW50TG9hZGVyKCkgfHwgZnJhbWVMb2FkZXItPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkt
PmlzU3RvcHBpbmcoKSkpIHsKKyAgICBpZiAocmVxdWVzdC5vcHRpb25zKCkuc2VjdXJpdHlDaGVj
ayA9PSBEb1NlY3VyaXR5Q2hlY2sgJiYgKGZyYW1lTG9hZGVyLT5zdGF0ZSgpID09IEZyYW1lU3Rh
dGVQcm92aXNpb25hbCB8fCAhZnJhbWVMb2FkZXItPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkgfHwg
ZnJhbWVMb2FkZXItPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPmlzU3RvcHBpbmcoKSkpIHsKICAg
ICAgICAgZmFpbEJlZm9yZVN0YXJ0aW5nKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBtX29wdGlvbnMgPSBvcHRpb25zOworICAgIG1fb3B0aW9ucyA9IHJlcXVlc3Qub3B0aW9ucygp
OwogICAgIG1fbG9hZGluZyA9IHRydWU7CisgICAgaWYgKCFtX2luaXRpYWxSZXF1ZXN0KQorICAg
ICAgICBtX2luaXRpYWxSZXF1ZXN0ID0gYWRvcHRQdHIobmV3IENhY2hlZFJlc291cmNlUmVxdWVz
dChyZXF1ZXN0KSk7CiAKICNpZiBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oQkxBQ0tC
RVJSWSkKICAgICBpZiAobV9yZXNvdXJjZVJlcXVlc3QudGFyZ2V0VHlwZSgpID09IFJlc291cmNl
UmVxdWVzdDo6VGFyZ2V0SXNVbnNwZWNpZmllZCkKQEAgLTI5NCw5ICsyOTYsOSBAQCB2b2lkIENh
Y2hlZFJlc291cmNlOjpsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxv
YWRlciwgY29uc3QgUmVzbwogICAgICAgICBhZGRBZGRpdGlvbmFsUmVxdWVzdEhlYWRlcnMoY2Fj
aGVkUmVzb3VyY2VMb2FkZXIpOwogCiAjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCi0gICAg
bV9sb2FkZXIgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyKCktPnNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKGNhY2hlZFJlc291cmNl
TG9hZGVyLT5mcmFtZSgpLCB0aGlzLCBtX3Jlc291cmNlUmVxdWVzdCwgbV9yZXNvdXJjZVJlcXVl
c3QucHJpb3JpdHkoKSwgb3B0aW9ucyk7CisgICAgbV9sb2FkZXIgPSBwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNjaGVkdWxl
U3VicmVzb3VyY2VMb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyLT5mcmFtZSgpLCB0aGlzLCBtX3Jl
c291cmNlUmVxdWVzdCwgbV9yZXNvdXJjZVJlcXVlc3QucHJpb3JpdHkoKSwgbV9vcHRpb25zKTsK
ICNlbHNlCi0gICAgbV9sb2FkZXIgPSByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2NoZWR1bGVT
dWJyZXNvdXJjZUxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXItPmZyYW1lKCksIHRoaXMsIG1fcmVz
b3VyY2VSZXF1ZXN0LCBtX3Jlc291cmNlUmVxdWVzdC5wcmlvcml0eSgpLCBvcHRpb25zKTsKKyAg
ICBtX2xvYWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVN1YnJlc291cmNl
TG9hZChjYWNoZWRSZXNvdXJjZUxvYWRlci0+ZnJhbWUoKSwgdGhpcywgbV9yZXNvdXJjZVJlcXVl
c3QsIG1fcmVzb3VyY2VSZXF1ZXN0LnByaW9yaXR5KCksIG1fb3B0aW9ucyk7CiAjZW5kaWYKIAog
ICAgIGlmICghbV9sb2FkZXIpIHsKQEAgLTMyMSw3ICszMjMsNyBAQCB2b2lkIENhY2hlZFJlc291
cmNlOjpkYXRhKFBhc3NSZWZQdHI8UmVzb3VyY2VCdWZmZXI+LCBib29sIGFsbERhdGFSZWNlaXZl
ZCkKIHsKICAgICBpZiAoIWFsbERhdGFSZWNlaXZlZCkKICAgICAgICAgcmV0dXJuOwotICAgIAor
CiAgICAgc2V0TG9hZGluZyhmYWxzZSk7CiAgICAgY2hlY2tOb3RpZnkoKTsKIH0KQEAgLTM1NSw3
ICszNTcsNyBAQCBib29sIENhY2hlZFJlc291cmNlOjppc0V4cGlyZWQoKSBjb25zdAogCiAgICAg
cmV0dXJuIGN1cnJlbnRBZ2UoKSA+IGZyZXNobmVzc0xpZmV0aW1lKCk7CiB9Ci0gICAgCisKIGRv
dWJsZSBDYWNoZWRSZXNvdXJjZTo6Y3VycmVudEFnZSgpIGNvbnN0CiB7CiAgICAgLy8gUkZDMjYx
NiAxMy4yLjMKQEAgLTM2Nyw3ICszNjksNyBAQCBkb3VibGUgQ2FjaGVkUmVzb3VyY2U6OmN1cnJl
bnRBZ2UoKSBjb25zdAogICAgIGRvdWJsZSByZXNpZGVudFRpbWUgPSBjdXJyZW50VGltZSgpIC0g
bV9yZXNwb25zZVRpbWVzdGFtcDsKICAgICByZXR1cm4gY29ycmVjdGVkUmVjZWl2ZWRBZ2UgKyBy
ZXNpZGVudFRpbWU7CiB9Ci0gICAgCisKIGRvdWJsZSBDYWNoZWRSZXNvdXJjZTo6ZnJlc2huZXNz
TGlmZXRpbWUoKSBjb25zdAogewogICAgIC8vIENhY2hlIG5vbi1odHRwIHJlc291cmNlcyBsaWJl
cmFsbHkKQEAgLTQyOSw3ICs0MzEsNyBAQCBDYWNoZWRNZXRhZGF0YSogQ2FjaGVkUmVzb3VyY2U6
OmNhY2hlZE1ldGFkYXRhKHVuc2lnbmVkIGRhdGFUeXBlSUQpIGNvbnN0CiAKIHZvaWQgQ2FjaGVk
UmVzb3VyY2U6OnN0b3BMb2FkaW5nKCkKIHsKLSAgICBBU1NFUlQobV9sb2FkZXIpOyAgICAgICAg
ICAgIAorICAgIEFTU0VSVChtX2xvYWRlcik7CiAgICAgbV9sb2FkZXIgPSAwOwogCiAgICAgQ2Fj
aGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHByb3RlY3QodGhpcyk7CkBAIC01NjEs
MTMgKzU2MywxMyBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpzZXREZWNvZGVkU2l6ZSh1bnNpZ25l
ZCBzaXplKQogICAgIC8vIHF1ZXVlLgogICAgIGlmIChpbkNhY2hlKCkpCiAgICAgICAgIG1lbW9y
eUNhY2hlKCktPnJlbW92ZUZyb21MUlVMaXN0KHRoaXMpOwotICAgIAorCiAgICAgbV9kZWNvZGVk
U2l6ZSA9IHNpemU7Ci0gICAKLSAgICBpZiAoaW5DYWNoZSgpKSB7IAorCisgICAgaWYgKGluQ2Fj
aGUoKSkgewogICAgICAgICAvLyBOb3cgaW5zZXJ0IGludG8gdGhlIG5ldyBMUlUgbGlzdC4KICAg
ICAgICAgbWVtb3J5Q2FjaGUoKS0+aW5zZXJ0SW5MUlVMaXN0KHRoaXMpOwotICAgICAgICAKKwog
ICAgICAgICAvLyBJbnNlcnQgaW50byBvciByZW1vdmUgZnJvbSB0aGUgbGl2ZSBkZWNvZGVkIGxp
c3QgaWYgbmVjZXNzYXJ5LgogICAgICAgICAvLyBXaGVuIGluc2VydGluZyBpbnRvIHRoZSBMaXZl
RGVjb2RlZFJlc291cmNlc0xpc3QgaXQgaXMgcG9zc2libGUKICAgICAgICAgLy8gdGhhdCB0aGUg
bV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUgaXMgc3RpbGwgemVybyBvciBzbWFsbGVyIHRoYW4KQEAg
LTU5Miw3ICs1OTQsNyBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpzZXRFbmNvZGVkU2l6ZSh1bnNp
Z25lZCBzaXplKQogCiAgICAgLy8gVGhlIHNpemUgY2Fubm90IGV2ZXIgc2hyaW5rICh1bmxlc3Mg
aXQgaXMgYmVpbmcgbnVsbGVkIG91dCBiZWNhdXNlIG9mIGFuIGVycm9yKS4gIElmIGl0IGV2ZXIg
ZG9lcywgYXNzZXJ0LgogICAgIEFTU0VSVChzaXplID09IDAgfHwgc2l6ZSA+PSBtX2VuY29kZWRT
aXplKTsKLSAgICAKKwogICAgIGludCBkZWx0YSA9IHNpemUgLSBtX2VuY29kZWRTaXplOwogCiAg
ICAgLy8gVGhlIG9iamVjdCBtdXN0IG5vdyBiZSBtb3ZlZCB0byBhIGRpZmZlcmVudCBxdWV1ZSwg
c2luY2UgaXRzIHNpemUgaGFzIGJlZW4gY2hhbmdlZC4KQEAgLTYwMCwxMyArNjAyLDEzIEBAIHZv
aWQgQ2FjaGVkUmVzb3VyY2U6OnNldEVuY29kZWRTaXplKHVuc2lnbmVkIHNpemUpCiAgICAgLy8g
cXVldWUuCiAgICAgaWYgKGluQ2FjaGUoKSkKICAgICAgICAgbWVtb3J5Q2FjaGUoKS0+cmVtb3Zl
RnJvbUxSVUxpc3QodGhpcyk7Ci0gICAgCisKICAgICBtX2VuY29kZWRTaXplID0gc2l6ZTsKLSAg
IAotICAgIGlmIChpbkNhY2hlKCkpIHsgCisKKyAgICBpZiAoaW5DYWNoZSgpKSB7CiAgICAgICAg
IC8vIE5vdyBpbnNlcnQgaW50byB0aGUgbmV3IExSVSBsaXN0LgogICAgICAgICBtZW1vcnlDYWNo
ZSgpLT5pbnNlcnRJbkxSVUxpc3QodGhpcyk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIFVwZGF0
ZSB0aGUgY2FjaGUncyBzaXplIHRvdGFscy4KICAgICAgICAgbWVtb3J5Q2FjaGUoKS0+YWRqdXN0
U2l6ZShoYXNDbGllbnRzKCksIGRlbHRhKTsKICAgICB9CkBAIC02MTUsNyArNjE3LDcgQEAgdm9p
ZCBDYWNoZWRSZXNvdXJjZTo6c2V0RW5jb2RlZFNpemUodW5zaWduZWQgc2l6ZSkKIHZvaWQgQ2Fj
aGVkUmVzb3VyY2U6OmRpZEFjY2Vzc0RlY29kZWREYXRhKGRvdWJsZSB0aW1lU3RhbXApCiB7CiAg
ICAgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUgPSB0aW1lU3RhbXA7Ci0gICAgCisKICAgICBpZiAo
aW5DYWNoZSgpKSB7CiAgICAgICAgIGlmIChtX2luTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KSB7
CiAgICAgICAgICAgICBtZW1vcnlDYWNoZSgpLT5yZW1vdmVGcm9tTGl2ZURlY29kZWRSZXNvdXJj
ZXNMaXN0KHRoaXMpOwpAQCAtNjI0LDkgKzYyNiw5IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OmRp
ZEFjY2Vzc0RlY29kZWREYXRhKGRvdWJsZSB0aW1lU3RhbXApCiAgICAgICAgIG1lbW9yeUNhY2hl
KCktPnBydW5lKCk7CiAgICAgfQogfQotICAgIAotdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVz
b3VyY2VUb1JldmFsaWRhdGUoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKSAKLXsgCisKK3ZvaWQg
Q2FjaGVkUmVzb3VyY2U6OnNldFJlc291cmNlVG9SZXZhbGlkYXRlKENhY2hlZFJlc291cmNlKiBy
ZXNvdXJjZSkKK3sKICAgICBBU1NFUlQocmVzb3VyY2UpOwogICAgIEFTU0VSVCghbV9yZXNvdXJj
ZVRvUmV2YWxpZGF0ZSk7CiAgICAgQVNTRVJUKHJlc291cmNlICE9IHRoaXMpOwpAQCAtNjQ0LDgg
KzY0Niw4IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldFJlc291cmNlVG9SZXZhbGlkYXRlKENh
Y2hlZFJlc291cmNlKiByZXNvdXJjZSkKICAgICBtX3Jlc291cmNlVG9SZXZhbGlkYXRlID0gcmVz
b3VyY2U7CiB9CiAKLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmNsZWFyUmVzb3VyY2VUb1JldmFsaWRh
dGUoKSAKLXsgCit2b2lkIENhY2hlZFJlc291cmNlOjpjbGVhclJlc291cmNlVG9SZXZhbGlkYXRl
KCkKK3sKICAgICBBU1NFUlQobV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSk7CiAgICAgaWYgKG1fc3dp
dGNoaW5nQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NjU5LDcgKzY2MSw3IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OmNsZWFyUmVzb3VyY2VUb1JldmFs
aWRhdGUoKQogICAgIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUgPSAwOwogICAgIGRlbGV0ZUlmUG9z
c2libGUoKTsKIH0KLSAgICAKKwogdm9pZCBDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1Rv
UmV2YWxpZGF0ZWRSZXNvdXJjZSgpCiB7CiAgICAgQVNTRVJUKG1fcmVzb3VyY2VUb1JldmFsaWRh
dGUpOwpAQCAtNzA1LDcgKzcwNyw3IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnN3aXRjaENsaWVu
dHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKQogICAgIH0KICAgICBtX3N3aXRjaGluZ0NsaWVudHNU
b1JldmFsaWRhdGVkUmVzb3VyY2UgPSBmYWxzZTsKIH0KLSAgICAKKwogdm9pZCBDYWNoZWRSZXNv
dXJjZTo6dXBkYXRlUmVzcG9uc2VBZnRlclJldmFsaWRhdGlvbihjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiB2YWxpZGF0aW5nUmVzcG9uc2UpCiB7CiAgICAgbV9yZXNwb25zZVRpbWVzdGFtcCA9IGN1
cnJlbnRUaW1lKCk7CkBAIC03NTMsNyArNzU1LDcgQEAgYm9vbCBDYWNoZWRSZXNvdXJjZTo6Y2Fu
VXNlQ2FjaGVWYWxpZGF0b3IoKSBjb25zdAogfQogCiBib29sIENhY2hlZFJlc291cmNlOjptdXN0
UmV2YWxpZGF0ZUR1ZVRvQ2FjaGVIZWFkZXJzKENhY2hlUG9saWN5IGNhY2hlUG9saWN5KSBjb25z
dAoteyAgICAKK3sKICAgICBBU1NFUlQoY2FjaGVQb2xpY3kgPT0gQ2FjaGVQb2xpY3lSZXZhbGlk
YXRlIHx8IGNhY2hlUG9saWN5ID09IENhY2hlUG9saWN5Q2FjaGUgfHwgY2FjaGVQb2xpY3kgPT0g
Q2FjaGVQb2xpY3lWZXJpZnkpOwogCiAgICAgaWYgKGNhY2hlUG9saWN5ID09IENhY2hlUG9saWN5
UmV2YWxpZGF0ZSkKQEAgLTc4MiwxMiArNzg0LDEyIEBAIGJvb2wgQ2FjaGVkUmVzb3VyY2U6Om11
c3RSZXZhbGlkYXRlRHVlVG9DYWNoZUhlYWRlcnMoQ2FjaGVQb2xpY3kgY2FjaGVQb2xpY3kpIGNv
CiB9CiAKIGJvb2wgQ2FjaGVkUmVzb3VyY2U6OmlzU2FmZVRvTWFrZVB1cmdlYWJsZSgpIGNvbnN0
Ci17IAorewogICAgIHJldHVybiAhaGFzQ2xpZW50cygpICYmICFtX3Byb3h5UmVzb3VyY2UgJiYg
IW1fcmVzb3VyY2VUb1JldmFsaWRhdGU7CiB9CiAKLWJvb2wgQ2FjaGVkUmVzb3VyY2U6Om1ha2VQ
dXJnZWFibGUoYm9vbCBwdXJnZWFibGUpIAoteyAKK2Jvb2wgQ2FjaGVkUmVzb3VyY2U6Om1ha2VQ
dXJnZWFibGUoYm9vbCBwdXJnZWFibGUpCit7CiAgICAgaWYgKHB1cmdlYWJsZSkgewogICAgICAg
ICBBU1NFUlQoaXNTYWZlVG9NYWtlUHVyZ2VhYmxlKCkpOwogCkBAIC03OTcsMTEgKzc5OSwxMSBA
QCBib29sIENhY2hlZFJlc291cmNlOjptYWtlUHVyZ2VhYmxlKGJvb2wgcHVyZ2VhYmxlKQogICAg
ICAgICB9CiAgICAgICAgIGlmICghbV9kYXRhKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAKKwogICAgICAgICAvLyBTaG91bGQgbm90IG1ha2UgYnVmZmVyIHB1cmdlYWJsZSBp
ZiBpdCBoYXMgcmVmcyBvdGhlciB0aGFuIHRoaXMgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0d28gY29w
aWVzLgogICAgICAgICBpZiAoIW1fZGF0YS0+aGFzT25lUmVmKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChtX2RhdGEtPmhhc1B1cmdlYWJsZUJ1
ZmZlcigpKSB7CiAgICAgICAgICAgICBtX3B1cmdlYWJsZURhdGEgPSBtX2RhdGEtPnJlbGVhc2VQ
dXJnZWFibGVCdWZmZXIoKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTgxMCw3ICs4MTIsNyBAQCBi
b29sIENhY2hlZFJlc291cmNlOjptYWtlUHVyZ2VhYmxlKGJvb2wgcHVyZ2VhYmxlKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIG1fcHVyZ2VhYmxlRGF0YS0+c2V0
UHVyZ2VQcmlvcml0eShwdXJnZVByaW9yaXR5KCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAg
ICAgICAgIG1fcHVyZ2VhYmxlRGF0YS0+bWFrZVB1cmdlYWJsZSh0cnVlKTsKICAgICAgICAgbV9k
YXRhLmNsZWFyKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtODIyLDcgKzgyNCw3IEBAIGJv
b2wgQ2FjaGVkUmVzb3VyY2U6Om1ha2VQdXJnZWFibGUoYm9vbCBwdXJnZWFibGUpCiAgICAgQVNT
RVJUKCFoYXNDbGllbnRzKCkpOwogCiAgICAgaWYgKCFtX3B1cmdlYWJsZURhdGEtPm1ha2VQdXJn
ZWFibGUoZmFsc2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7IAorICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBtX2RhdGEgPSBSZXNvdXJjZUJ1ZmZlcjo6YWRvcHRTaGFyZWRCdWZmZXIoU2hh
cmVkQnVmZmVyOjphZG9wdFB1cmdlYWJsZUJ1ZmZlcihtX3B1cmdlYWJsZURhdGEucmVsZWFzZSgp
KSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC04NDMsOSArODQ1LDkgQEAgdW5zaWduZWQgQ2FjaGVk
UmVzb3VyY2U6Om92ZXJoZWFkU2l6ZSgpIGNvbnN0CiAgICAgc3RhdGljIGNvbnN0IGludCBrQXZl
cmFnZUNsaWVudHNIYXNoTWFwU2l6ZSA9IDM4NDsKICAgICByZXR1cm4gc2l6ZW9mKENhY2hlZFJl
c291cmNlKSArIG1fcmVzcG9uc2UubWVtb3J5VXNhZ2UoKSArIGtBdmVyYWdlQ2xpZW50c0hhc2hN
YXBTaXplICsgbV9yZXNvdXJjZVJlcXVlc3QudXJsKCkuc3RyaW5nKCkubGVuZ3RoKCkgKiAyOwog
fQotICAgIAotdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0TG9hZFByaW9yaXR5KFJlc291cmNlTG9h
ZFByaW9yaXR5IGxvYWRQcmlvcml0eSkgCi17IAorCit2b2lkIENhY2hlZFJlc291cmNlOjpzZXRM
b2FkUHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbG9hZFByaW9yaXR5KQorewogICAgIGlm
IChsb2FkUHJpb3JpdHkgPT0gUmVzb3VyY2VMb2FkUHJpb3JpdHlVbnJlc29sdmVkKQogICAgICAg
ICByZXR1cm47CiAgICAgbV9sb2FkUHJpb3JpdHkgPSBsb2FkUHJpb3JpdHk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCmluZGV4IDAzZDI4YzIwN2NiYWNh
N2IyZTJjZDM4NGFhYjY4ZjAwODk1YWI1N2UuLjdmMDI2ZDc2Zjk1MGJmYWMzZmNjNmFjNDI3NzQy
YWE3ZTUyNmQ2OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZS5oCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIENhY2hlZFJlc291cmNlX2gKIAogI2lu
Y2x1ZGUgIkNhY2hlUG9saWN5LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1ZGUgIlB1cmdlUHJpb3JpdHku
aCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRQcmlvcml0eS5oIgpAQCAtNTgsNyArNTksNyBAQCBj
bGFzcyBDYWNoZWRSZXNvdXJjZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FjaGVkUmVz
b3VyY2UpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBmcmllbmQgY2xhc3MgTWVtb3J5
Q2FjaGU7CiAgICAgZnJpZW5kIGNsYXNzIEluc3BlY3RvclJlc291cmNlOwotICAgIAorCiBwdWJs
aWM6CiAgICAgZW51bSBUeXBlIHsKICAgICAgICAgTWFpblJlc291cmNlLApAQCAtOTYsNyArOTcs
NyBAQCBwdWJsaWM6CiAgICAgQ2FjaGVkUmVzb3VyY2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
VHlwZSk7CiAgICAgdmlydHVhbCB+Q2FjaGVkUmVzb3VyY2UoKTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25z
Jik7CisgICAgdmlydHVhbCB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBD
YWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRFbmNvZGluZyhj
b25zdCBTdHJpbmcmKSB7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBlbmNvZGluZygpIGNvbnN0IHsg
cmV0dXJuIFN0cmluZygpOyB9CkBAIC0xMDksOSArMTEwLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogCiAgICAgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QoKSB7IHJl
dHVybiBtX3Jlc291cmNlUmVxdWVzdDsgfQotICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpO30KKyAgICBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlc291cmNlUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0OyB9
CisgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3Qu
dXJsKCk7IH0KICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBl
PihtX3R5cGUpOyB9Ci0gICAgCisKICAgICBSZXNvdXJjZUxvYWRQcmlvcml0eSBsb2FkUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiBtX2xvYWRQcmlvcml0eTsgfQogICAgIHZvaWQgc2V0TG9hZFBy
aW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5KTsKIApAQCAtMTQyLDcgKzE0NCw3IEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBlbmNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RlZFNp
emU7IH0KICAgICB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2Rl
ZFNpemU7IH0KICAgICB1bnNpZ25lZCBvdmVyaGVhZFNpemUoKSBjb25zdDsKLSAgICAKKwogICAg
IGJvb2wgaXNMb2FkZWQoKSBjb25zdCB7IHJldHVybiAhbV9sb2FkaW5nOyB9IC8vIEZJWE1FLiBN
ZXRob2QgbmFtZSBpcyBpbmFjY3VyYXRlLiBMb2FkaW5nIG1pZ2h0IG5vdCBoYXZlIHN0YXJ0ZWQg
eWV0LgogCiAgICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiBtX2xvYWRpbmc7IH0K
QEAgLTE2NSw3ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgYWNjZXNzQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2FjY2Vzc0NvdW50OyB9CiAgICAgdm9pZCBpbmNyZWFzZUFjY2Vzc0Nv
dW50KCkgeyBtX2FjY2Vzc0NvdW50Kys7IH0KIAotICAgIC8vIENvbXB1dGVzIHRoZSBzdGF0dXMg
b2YgYW4gb2JqZWN0IGFmdGVyIGxvYWRpbmcuICAKKyAgICAvLyBDb21wdXRlcyB0aGUgc3RhdHVz
IG9mIGFuIG9iamVjdCBhZnRlciBsb2FkaW5nLgogICAgIC8vIFVwZGF0ZXMgdGhlIGV4cGlyZSBk
YXRlIG9uIHRoZSBjYWNoZSBlbnRyeSBmaWxlCiAgICAgdm9pZCBmaW5pc2goKTsKIApAQCAtMTc3
LDkgKzE3OSw5IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgcmVzb3VyY2UgY2FuIGJlIGJyb3VnaHQg
YmFjayB0byBjYWNoZSBhZnRlciBzdWNjZXNzZnVsIHJldmFsaWRhdGlvbi4KICAgICB2b2lkIHNl
dEluQ2FjaGUoYm9vbCBpbkNhY2hlKSB7IG1faW5DYWNoZSA9IGluQ2FjaGU7IH0KICAgICBib29s
IGluQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2luQ2FjaGU7IH0KLSAgICAKKwogICAgIGJvb2wg
aW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoKSB7IHJldHVybiBtX2luTGl2ZURlY29kZWRSZXNv
dXJjZXNMaXN0OyB9Ci0gICAgCisKICAgICB2b2lkIHN0b3BMb2FkaW5nKCk7CiAKICAgICBSZXNv
dXJjZUJ1ZmZlciogcmVzb3VyY2VCdWZmZXIoKSBjb25zdCB7IEFTU0VSVCghbV9wdXJnZWFibGVE
YXRhKTsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQpAQCAtMjE0LDM3ICsyMTYsMzcgQEAgcHVibGlj
OgogICAgIGJvb2wgbG9hZEZhaWxlZE9yQ2FuY2VsZWQoKSB7IHJldHVybiAhbV9lcnJvci5pc051
bGwoKTsgfQogCiAgICAgYm9vbCBzaG91bGRTZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkgY29u
c3QgeyByZXR1cm4gbV9vcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzID09IFNlbmRDYWxsYmFja3M7
IH0KLSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoKSB7IH0KIAog
ICAgIHZvaWQgc2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyKSB7IG1fb3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIg
PSBjYWNoZWRSZXNvdXJjZUxvYWRlcjsgfQotICAgIAorCiAgICAgYm9vbCBpc1ByZWxvYWRlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJlbG9hZENvdW50OyB9CiAgICAgdm9pZCBpbmNyZWFzZVByZWxv
YWRDb3VudCgpIHsgKyttX3ByZWxvYWRDb3VudDsgfQogICAgIHZvaWQgZGVjcmVhc2VQcmVsb2Fk
Q291bnQoKSB7IEFTU0VSVChtX3ByZWxvYWRDb3VudCk7IC0tbV9wcmVsb2FkQ291bnQ7IH0KLSAg
ICAKKwogICAgIHZvaWQgcmVnaXN0ZXJIYW5kbGUoQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKiBo
KTsKICAgICB2b2lkIHVucmVnaXN0ZXJIYW5kbGUoQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKiBo
KTsKLSAgICAKKwogICAgIGJvb2wgY2FuVXNlQ2FjaGVWYWxpZGF0b3IoKSBjb25zdDsKICAgICBi
b29sIG11c3RSZXZhbGlkYXRlRHVlVG9DYWNoZUhlYWRlcnMoQ2FjaGVQb2xpY3kpIGNvbnN0Owog
ICAgIGJvb2wgaXNDYWNoZVZhbGlkYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VUb1Jl
dmFsaWRhdGU7IH0KICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2VUb1JldmFsaWRhdGUoKSBj
b25zdCB7IHJldHVybiBtX3Jlc291cmNlVG9SZXZhbGlkYXRlOyB9Ci0gICAgCisKICAgICBib29s
IGlzUHVyZ2VhYmxlKCkgY29uc3Q7CiAgICAgYm9vbCB3YXNQdXJnZWQoKSBjb25zdDsKLSAgICAK
KwogICAgIC8vIFRoaXMgaXMgdXNlZCBieSB0aGUgYXJjaGl2ZSBtYWNoaW5lcnkgdG8gZ2V0IGF0
IGEgcHVyZ2VkIHJlc291cmNlIHdpdGhvdXQKICAgICAvLyB0cmlnZ2VyaW5nIGEgbG9hZC4gV2Ug
c2hvdWxkIG1ha2UgaXQgcHJvdGVjdGVkIGFnYWluIGlmIHdlIGNhbiBmaW5kIGEKICAgICAvLyBi
ZXR0ZXIgd2F5IHRvIGhhbmRsZSB0aGUgYXJjaGl2ZSBjYXNlLgogICAgIGJvb2wgbWFrZVB1cmdl
YWJsZShib29sIHB1cmdlYWJsZSk7Ci0gICAgCisKICAgICAvLyBIVFRQIHJldmFsaWRhdGlvbiBz
dXBwb3J0IG1ldGhvZHMgZm9yIENhY2hlZFJlc291cmNlTG9hZGVyLgogICAgIHZvaWQgc2V0UmVz
b3VyY2VUb1JldmFsaWRhdGUoQ2FjaGVkUmVzb3VyY2UqKTsKICAgICB2b2lkIHN3aXRjaENsaWVu
dHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKTsKICAgICB2b2lkIGNsZWFyUmVzb3VyY2VUb1JldmFs
aWRhdGUoKTsKICAgICB2b2lkIHVwZGF0ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24oY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jlc3BvbnNlKTsKLSAgICAKKwogICAgIHZpcnR1
YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgLyogYnl0ZXNTZW50ICovLCB1
bnNpZ25lZCBsb25nIGxvbmcgLyogdG90YWxCeXRlc1RvQmVTZW50ICovKSB7IH0KICNpZiBQTEFU
Rk9STShDSFJPTUlVTSkKICAgICB2aXJ0dWFsIHZvaWQgZGlkRG93bmxvYWREYXRhKGludCkgeyB9
CkBAIC0yNTUsNiArMjU3LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1l
bW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAorICAgIENhY2hlZFJlc291cmNl
UmVxdWVzdCogaW5pdGlhbFJlcXVlc3QoKSB7IHJldHVybiBtX2luaXRpYWxSZXF1ZXN0LmdldCgp
OyB9CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tOb3RpZnkoKTsKIApAQCAt
MjYzLDcgKzI2Nyw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGRpZEFjY2Vzc0RlY29kZWREYXRh
KGRvdWJsZSB0aW1lU3RhbXApOwogCiAgICAgYm9vbCBpc1NhZmVUb01ha2VQdXJnZWFibGUoKSBj
b25zdDsKLSAgICAKKwogICAgIEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj4g
bV9jbGllbnRzOwogCiAgICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2VDYWxsYmFjayB7CkBAIC0zNDAs
MTIgKzM0NCwxMiBAQCBwcml2YXRlOgogCiAgICAgQ2FjaGVkUmVzb3VyY2UqIG1fbmV4dEluQWxs
UmVzb3VyY2VzTGlzdDsKICAgICBDYWNoZWRSZXNvdXJjZSogbV9wcmV2SW5BbGxSZXNvdXJjZXNM
aXN0OwotICAgIAorCiAgICAgQ2FjaGVkUmVzb3VyY2UqIG1fbmV4dEluTGl2ZVJlc291cmNlc0xp
c3Q7CiAgICAgQ2FjaGVkUmVzb3VyY2UqIG1fcHJldkluTGl2ZVJlc291cmNlc0xpc3Q7CiAKICAg
ICBDYWNoZWRSZXNvdXJjZUxvYWRlciogbV9vd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcjsgLy8g
b25seSBub24tMCBmb3IgcmVzb3VyY2VzIHRoYXQgYXJlIG5vdCBpbiB0aGUgY2FjaGUKLSAgICAK
KwogICAgIC8vIElmIHRoaXMgZmllbGQgaXMgbm9uLW51bGwgd2UgYXJlIHVzaW5nIHRoZSByZXNv
dXJjZSBhcyBhIHByb3h5IGZvciBjaGVja2luZyB3aGV0aGVyIGFuIGV4aXN0aW5nIHJlc291cmNl
IGlzIHN0aWxsIHVwIHRvIGRhdGUKICAgICAvLyB1c2luZyBIVFRQIElmLU1vZGlmaWVkLVNpbmNl
L0lmLU5vbmUtTWF0Y2ggaGVhZGVycy4gSWYgdGhlIHJlc3BvbnNlIGlzIDMwNCBhbGwgY2xpZW50
cyBvZiB0aGlzIHJlc291cmNlIGFyZSBtb3ZlZAogICAgIC8vIHRvIHRvIGJlIGNsaWVudHMgb2Yg
bV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSBhbmQgdGhlIHJlc291cmNlIGlzIGRlbGV0ZWQuIElmIG5v
dCwgdGhlIGZpZWxkIGlzIHplcm9lZCBhbmQgdGhpcwpAQCAtMzU3LDYgKzM2MSw4IEBAIHByaXZh
dGU6CiAKICAgICAvLyBUaGVzZSBoYW5kbGVzIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkIHRvIHBv
aW50IHRvIHRoZSBtX3Jlc291cmNlVG9SZXZhbGlkYXRlIGluIGNhc2Ugd2UgZ2V0IDMwNCByZXNw
b25zZS4KICAgICBIYXNoU2V0PENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSo+IG1faGFuZGxlc1Rv
UmV2YWxpZGF0ZTsKKworICAgIE93blB0cjxDYWNoZWRSZXNvdXJjZVJlcXVlc3Q+IG1faW5pdGlh
bFJlcXVlc3Q7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAppbmRleCBkNGNiYTA1OTEzMTkwMGUxOTBjY2Y1OGU2
ZmUwZDE2ZDhkMDc1NTU2Li4wNTgzYmU4ZWFlYTkzZmQ1Y2I4N2JlODIyYzViMjU1NGM4ZTM5OGNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZUxvYWRlci5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNo
ZWRJbWFnZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RJbWFnZShDYWNoZWRSZXNvdQog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmVxdWVzdC5zZXRE
ZWZlcihjbGllbnREZWZlcnNJbWFnZShyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpKSA/
IERlZmVycmVkQnlDbGllbnQgOiBOb0RlZmVyKTsKKyAgICByZXF1ZXN0LnNldERlZmVyKGNsaWVu
dERlZmVyc0ltYWdlKHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkpID8gQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0OjpEZWZlcnJlZEJ5Q2xpZW50IDogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpO
b0RlZmVyKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkSW1hZ2UqPihyZXF1ZXN0UmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIHJlcXVlc3QpLmdldCgpKTsKIH0K
IApAQCAtMjA5LDggKzIwOSw5IEBAIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZENTU1N0eWxl
U2hlZXQ+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0VXNlckNTU1N0CiAgICAgbWVtb3J5
Q2FjaGUoKS0+YWRkKHVzZXJTaGVldC5nZXQoKSk7CiAgICAgLy8gRklYTUU6IGxvYWRSZXNvdXJj
ZSBjYWxscyBzZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigpIGlmIHRoZSByZXNvdXJjZSBj
b3VsZG4ndCBiZSBhZGRlZCB0byBjYWNoZS4gRG9lcyB0aGlzIGZ1bmN0aW9uIG5lZWQgdG8gY2Fs
bCBpdCwgdG9vPwogCi0gICAgdXNlclNoZWV0LT5sb2FkKHRoaXMsIFJlc291cmNlTG9hZGVyT3B0
aW9ucyhEb05vdFNlbmRDYWxsYmFja3MsIFNuaWZmQ29udGVudCwgQnVmZmVyRGF0YSwgQWxsb3dT
dG9yZWRDcmVkZW50aWFscywgQXNrQ2xpZW50Rm9yQ3Jvc3NPcmlnaW5DcmVkZW50aWFscywgU2tp
cFNlY3VyaXR5Q2hlY2spKTsKLSAgICAKKyAgICByZXF1ZXN0LnNldE9wdGlvbnMoUmVzb3VyY2VM
b2FkZXJPcHRpb25zKERvTm90U2VuZENhbGxiYWNrcywgU25pZmZDb250ZW50LCBCdWZmZXJEYXRh
LCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBBc2tDbGllbnRGb3JDcm9zc09yaWdpbkNyZWRlbnRp
YWxzLCBTa2lwU2VjdXJpdHlDaGVjaykpOworICAgIHVzZXJTaGVldC0+bG9hZCh0aGlzLCByZXF1
ZXN0KTsKKwogICAgIHJldHVybiB1c2VyU2hlZXQ7CiB9CiAKQEAgLTQ1OCw4ICs0NTksOCBAQCBD
YWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OnJlcXVlc3RSZXNvdXJjZShDYWNoZQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJlc291cmNl
LT5zZXRMb2FkUHJpb3JpdHkocmVxdWVzdC5wcmlvcml0eSgpKTsKLSAgICBpZiAoKHBvbGljeSAh
PSBVc2UgfHwgcmVzb3VyY2UtPnN0aWxsTmVlZHNMb2FkKCkpICYmIE5vRGVmZXIgPT0gcmVxdWVz
dC5kZWZlcigpKSB7Ci0gICAgICAgIHJlc291cmNlLT5sb2FkKHRoaXMsIHJlcXVlc3Qub3B0aW9u
cygpKTsKKyAgICBpZiAoKHBvbGljeSAhPSBVc2UgfHwgcmVzb3VyY2UtPnN0aWxsTmVlZHNMb2Fk
KCkpICYmIENhY2hlZFJlc291cmNlUmVxdWVzdDo6Tm9EZWZlciA9PSByZXF1ZXN0LmRlZmVyKCkp
IHsKKyAgICAgICAgcmVzb3VyY2UtPmxvYWQodGhpcywgcmVxdWVzdCk7CiAKICAgICAgICAgLy8g
V2UgZG9uJ3Qgc3VwcG9ydCBpbW1lZGlhdGUgbG9hZHMsIGJ1dCB3ZSBkbyBzdXBwb3J0IGltbWVk
aWF0ZSBmYWlsdXJlLgogICAgICAgICBpZiAocmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSkgewpA
QCAtNDg0LDcgKzQ4NSw3IEBAIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6cmV2YWxpZGF0ZVJlc291cmNlKENhCiAgICAgQVNTRVJUKCFt
ZW1vcnlDYWNoZSgpLT5kaXNhYmxlZCgpKTsKICAgICBBU1NFUlQocmVzb3VyY2UtPmNhblVzZUNh
Y2hlVmFsaWRhdG9yKCkpOwogICAgIEFTU0VSVCghcmVzb3VyY2UtPnJlc291cmNlVG9SZXZhbGlk
YXRlKCkpOwotICAgIAorCiAgICAgLy8gQ29weSB0aGUgVVJMIG91dCBvZiB0aGUgcmVzb3VyY2Ug
dG8gYmUgcmV2YWxpZGF0ZWQgaW4gY2FzZSBpdCBnZXRzIGRlbGV0ZWQgYnkgdGhlIHJlbW92ZSgp
IGNhbGwgYmVsb3cuCiAgICAgU3RyaW5nIHVybCA9IHJlc291cmNlLT51cmwoKTsKICAgICBDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gbmV3UmVzb3VyY2UgPSBjcmVhdGVSZXNv
dXJjZShyZXNvdXJjZS0+dHlwZSgpLCByZXNvdXJjZS0+cmVzb3VyY2VSZXF1ZXN0KCksIHJlc291
cmNlLT5lbmNvZGluZygpKTsKQEAgLTUwMCwyNSArNTAxLDI1IEBAIENhY2hlZFJlc291cmNlSGFu
ZGxlPENhY2hlZFJlc291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmV2YWxpZGF0ZVJlc291
cmNlKENhCiBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OmxvYWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKIHsKICAgICBBU1NFUlQo
IW1lbW9yeUNhY2hlKCktPnJlc291cmNlRm9yVVJMKHJlcXVlc3QudXJsKCkpKTsKLSAgICAKKwog
ICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJMb2FkaW5nIENhY2hlZFJlc291cmNlIGZvciAnJXMn
LiIsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKLSAgICAKKwogICAg
IENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiByZXNvdXJjZSA9IGNyZWF0ZVJl
c291cmNlKHR5cGUsIHJlcXVlc3QsIGNoYXJzZXQpOwotICAgIAorCiAgICAgaWYgKCFtZW1vcnlD
YWNoZSgpLT5hZGQocmVzb3VyY2UuZ2V0KCkpKQogICAgICAgICByZXNvdXJjZS0+c2V0T3duaW5n
Q2FjaGVkUmVzb3VyY2VMb2FkZXIodGhpcyk7CiAgICAgcmV0dXJuIHJlc291cmNlOwogfQogCi1D
YWNoZWRSZXNvdXJjZUxvYWRlcjo6UmV2YWxpZGF0aW9uUG9saWN5IENhY2hlZFJlc291cmNlTG9h
ZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3koQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlw
ZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIGZvclByZWxvYWQsIENhY2hlZFJlc291
cmNlKiBleGlzdGluZ1Jlc291cmNlLCBEZWZlck9wdGlvbiBkZWZlcikgY29uc3QKK0NhY2hlZFJl
c291cmNlTG9hZGVyOjpSZXZhbGlkYXRpb25Qb2xpY3kgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRl
dGVybWluZVJldmFsaWRhdGlvblBvbGljeShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgZm9yUHJlbG9hZCwgQ2FjaGVkUmVzb3VyY2UqIGV4
aXN0aW5nUmVzb3VyY2UsIENhY2hlZFJlc291cmNlUmVxdWVzdDo6RGVmZXJPcHRpb24gZGVmZXIp
IGNvbnN0CiB7CiAgICAgaWYgKCFleGlzdGluZ1Jlc291cmNlKQogICAgICAgICByZXR1cm4gTG9h
ZDsKLQorICAgIAogICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIHByZWxvYWQgZ29pbmcgZm9yIHRo
aXMgVVJMLgogICAgIGlmIChmb3JQcmVsb2FkICYmIGV4aXN0aW5nUmVzb3VyY2UtPmlzUHJlbG9h
ZGVkKCkpCiAgICAgICAgIHJldHVybiBVc2U7Ci0KKyAgICAKICAgICAvLyBJZiB0aGUgc2FtZSBV
UkwgaGFzIGJlZW4gbG9hZGVkIGFzIGEgZGlmZmVyZW50IHR5cGUsIHdlIG5lZWQgdG8gcmVsb2Fk
LgogICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT50eXBlKCkgIT0gdHlwZSkgewogICAgICAgICBM
T0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJldmFs
aWRhdGlvblBvbGljeSByZWxvYWRpbmcgZHVlIHRvIHR5cGUgbWlzbWF0Y2guIik7CkBAIC01Mzks
NyArNTQwLDcgQEAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OlJldmFsaWRhdGlvblBvbGljeSBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxpZGEKIAogICAgIC8vIERvIG5vdCBsb2Fk
IGZyb20gY2FjaGUgaWYgaW1hZ2VzIGFyZSBub3QgZW5hYmxlZC4gVGhlIGxvYWQgZm9yIHRoaXMg
aW1hZ2Ugd2lsbCBiZSBibG9ja2VkCiAgICAgLy8gaW4gQ2FjaGVkSW1hZ2U6OmxvYWQuCi0gICAg
aWYgKERlZmVycmVkQnlDbGllbnQgPT0gZGVmZXIpCisgICAgaWYgKENhY2hlZFJlc291cmNlUmVx
dWVzdDo6RGVmZXJyZWRCeUNsaWVudCA9PSBkZWZlcikKICAgICAgICAgcmV0dXJuIFJlbG9hZDsK
ICAgICAKICAgICAvLyBEb24ndCByZWxvYWQgcmVzb3VyY2VzIHdoaWxlIHBhc3RpbmcuCkBAIC02
NjksNyArNjcwLDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVsb2FkSW1hZ2VzSWZO
b3REZWZlcnJlZCgpCiAgICAgZm9yIChEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9
IG1fZG9jdW1lbnRSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAg
IENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYg
KHJlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UgJiYgcmVz
b3VyY2UtPnN0aWxsTmVlZHNMb2FkKCkgJiYgIWNsaWVudERlZmVyc0ltYWdlKHJlc291cmNlLT51
cmwoKSkpCi0gICAgICAgICAgICBjb25zdF9jYXN0PENhY2hlZFJlc291cmNlKj4ocmVzb3VyY2Up
LT5sb2FkKHRoaXMsIGRlZmF1bHRDYWNoZWRSZXNvdXJjZU9wdGlvbnMoKSk7CisgICAgICAgICAg
ICBjb25zdF9jYXN0PENhY2hlZFJlc291cmNlKj4ocmVzb3VyY2UpLT5sb2FkKHRoaXMsIENhY2hl
ZFJlc291cmNlUmVxdWVzdChyZXNvdXJjZS0+cmVzb3VyY2VSZXF1ZXN0KCksIGRlZmF1bHRDYWNo
ZWRSZXNvdXJjZU9wdGlvbnMoKSkpOwogICAgIH0KIH0KIApAQCAtNzY0LDggKzc2NSw4IEBAIHZv
aWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRlY3JlbWVudFJlcXVlc3RDb3VudChjb25zdCBDYWNo
ZWRSZXNvdXJjZSogcmVzKQogICAgIC0tbV9yZXF1ZXN0Q291bnQ7CiAgICAgQVNTRVJUKG1fcmVx
dWVzdENvdW50ID4gLTEpOwogfQotICAgIAotdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cHJl
bG9hZChDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFN0cmluZyYgY2hhcnNldCwgYm9vbCByZWZlcmVuY2VkRnJvbUJvZHkpCisKK3ZvaWQg
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwg
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIGJv
b2wgcmVmZXJlbmNlZEZyb21Cb2R5KQogewogICAgIC8vIEZJWE1FOiBSaXAgdGhpcyBvdXQgd2hl
biB3ZSBhcmUgc3VyZSBpdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IChldmVuIGZvciBtb2JpbGUp
LgogICAgIFVOVVNFRF9QQVJBTShyZWZlcmVuY2VkRnJvbUJvZHkpOwpAQCAtNzg4LDI5ICs3ODks
MjggQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6
VHlwZSB0eXBlLCBSZXNvdXJjZVJlcXVlc3QmIHIKICAgICByZXF1ZXN0UHJlbG9hZCh0eXBlLCBy
ZXF1ZXN0LCBjaGFyc2V0KTsKIH0KIAotdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2hlY2tG
b3JQZW5kaW5nUHJlbG9hZHMoKSAKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNoZWNrRm9y
UGVuZGluZ1ByZWxvYWRzKCkKIHsKICAgICBpZiAobV9wZW5kaW5nUHJlbG9hZHMuaXNFbXB0eSgp
IHx8ICFtX2RvY3VtZW50LT5ib2R5KCkgfHwgIW1fZG9jdW1lbnQtPmJvZHkoKS0+cmVuZGVyZXIo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIHdoaWxlICghbV9wZW5kaW5nUHJlbG9hZHMuaXNFbXB0
eSgpKSB7CiAgICAgICAgIFBlbmRpbmdQcmVsb2FkIHByZWxvYWQgPSBtX3BlbmRpbmdQcmVsb2Fk
cy50YWtlRmlyc3QoKTsKICAgICAgICAgLy8gRG9uJ3QgcmVxdWVzdCBwcmVsb2FkIGlmIHRoZSBy
ZXNvdXJjZSBhbHJlYWR5IGxvYWRlZCBub3JtYWxseSAodGhpcyB3aWxsIHJlc3VsdCBpbiBkb3Vi
bGUgbG9hZCBpZiB0aGUgcGFnZSBpcyBiZWluZyByZWxvYWRlZCB3aXRoIGNhY2hlZCByZXN1bHRz
IGlnbm9yZWQpLgotICAgICAgICBpZiAoIWNhY2hlZFJlc291cmNlKHByZWxvYWQubV9yZXF1ZXN0
LnVybCgpKSkKKyAgICAgICAgaWYgKCFjYWNoZWRSZXNvdXJjZShwcmVsb2FkLm1fcmVxdWVzdC5y
ZXNvdXJjZVJlcXVlc3QoKS51cmwoKSkpCiAgICAgICAgICAgICByZXF1ZXN0UHJlbG9hZChwcmVs
b2FkLm1fdHlwZSwgcHJlbG9hZC5tX3JlcXVlc3QsIHByZWxvYWQubV9jaGFyc2V0KTsKICAgICB9
CiAgICAgbV9wZW5kaW5nUHJlbG9hZHMuY2xlYXIoKTsKIH0KIAotdm9pZCBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6cmVxdWVzdFByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCit2b2lkIENhY2hlZFJl
c291cmNlTG9hZGVyOjpyZXF1ZXN0UHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBD
YWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKIHsK
ICAgICBTdHJpbmcgZW5jb2Rpbmc7CiAgICAgaWYgKHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OlNj
cmlwdCB8fCB0eXBlID09IENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0KQogICAgICAgICBl
bmNvZGluZyA9IGNoYXJzZXQuaXNFbXB0eSgpID8gbV9kb2N1bWVudC0+Y2hhcnNldCgpIDogY2hh
cnNldDsKIAotICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCBjYWNoZWRSZXNvdXJjZVJlcXVlc3Qo
cmVxdWVzdCwgZW5jb2RpbmcpOwotICAgIGNhY2hlZFJlc291cmNlUmVxdWVzdC5zZXRGb3JQcmVs
b2FkKHRydWUpOworICAgIHJlcXVlc3Quc2V0Rm9yUHJlbG9hZCh0cnVlKTsKIAotICAgIENhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiByZXNvdXJjZSA9IHJlcXVlc3RSZXNvdXJj
ZSh0eXBlLCBjYWNoZWRSZXNvdXJjZVJlcXVlc3QpOworICAgIENhY2hlZFJlc291cmNlSGFuZGxl
PENhY2hlZFJlc291cmNlPiByZXNvdXJjZSA9IHJlcXVlc3RSZXNvdXJjZSh0eXBlLCByZXF1ZXN0
KTsKICAgICBpZiAoIXJlc291cmNlIHx8IChtX3ByZWxvYWRzICYmIG1fcHJlbG9hZHMtPmNvbnRh
aW5zKHJlc291cmNlLmdldCgpKSkpCiAgICAgICAgIHJldHVybjsKICAgICByZXNvdXJjZS0+aW5j
cmVhc2VQcmVsb2FkQ291bnQoKTsKQEAgLTg0MCw3ICs4NDAsNyBAQCBib29sIENhY2hlZFJlc291
cmNlTG9hZGVyOjppc1ByZWxvYWRlZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3QKICAg
ICBEZXF1ZTxQZW5kaW5nUHJlbG9hZD46OmNvbnN0X2l0ZXJhdG9yIGRlcXVlRW5kID0gbV9wZW5k
aW5nUHJlbG9hZHMuZW5kKCk7CiAgICAgZm9yIChEZXF1ZTxQZW5kaW5nUHJlbG9hZD46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUHJlbG9hZHMuYmVnaW4oKTsgaXQgIT0gZGVxdWVFbmQ7
ICsraXQpIHsKICAgICAgICAgUGVuZGluZ1ByZWxvYWQgcGVuZGluZ1ByZWxvYWQgPSAqaXQ7Ci0g
ICAgICAgIGlmIChwZW5kaW5nUHJlbG9hZC5tX3JlcXVlc3QudXJsKCkgPT0gdXJsKQorICAgICAg
ICBpZiAocGVuZGluZ1ByZWxvYWQubV9yZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpID09
IHVybCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRl
ci5oCmluZGV4IGUyZTJhZTQ5NzI1YzU5MTJlYzFjNTA3ZmI1ODc5ODQzNDg1YjZhOTUuLmFiYWI5
MmQxYzA4ZjM4ODI3YmJmNzI3NTI3MDgwNTAwZjA5ZGM0ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oCkBAIC0yNiw5ICsyNiwx
MCBAQAogI2lmbmRlZiBDYWNoZWRSZXNvdXJjZUxvYWRlcl9oCiAjZGVmaW5lIENhY2hlZFJlc291
cmNlTG9hZGVyX2gKIAorI2luY2x1ZGUgIkNhY2hlUG9saWN5LmgiCiAjaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUg
IkNhY2hlUG9saWN5LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1
ZGUgPHd0Zi9EZXF1ZS5oPgpAQCAtNjksNyArNzAsNiBAQCBmcmllbmQgY2xhc3MgSW1hZ2VMb2Fk
ZXI7CiBmcmllbmQgY2xhc3MgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29yOwogCiBw
dWJsaWM6Ci0gICAgZW51bSBEZWZlck9wdGlvbiB7IE5vRGVmZXIsIERlZmVycmVkQnlDbGllbnQg
fTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYWNoZWRSZXNvdXJjZUxvYWRlcj4gY3JlYXRlKERv
Y3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcikgeyByZXR1cm4gYWRvcHRSZWYobmV3IENhY2hl
ZFJlc291cmNlTG9hZGVyKGRvY3VtZW50TG9hZGVyKSk7IH0KICAgICB+Q2FjaGVkUmVzb3VyY2VM
b2FkZXIoKTsKIApAQCAtMTMxLDcgKzEzMSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzUHJlbG9h
ZGVkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdDsKICAgICB2b2lkIGNsZWFyUHJlbG9h
ZHMoKTsKICAgICB2b2lkIGNsZWFyUGVuZGluZ1ByZWxvYWRzKCk7Ci0gICAgdm9pZCBwcmVsb2Fk
KENhY2hlZFJlc291cmNlOjpUeXBlLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIGNo
YXJzZXQsIGJvb2wgcmVmZXJlbmNlZEZyb21Cb2R5KTsKKyAgICB2b2lkIHByZWxvYWQoQ2FjaGVk
UmVzb3VyY2U6OlR5cGUsIENhY2hlZFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgY2hh
cnNldCwgYm9vbCByZWZlcmVuY2VkRnJvbUJvZHkpOwogICAgIHZvaWQgY2hlY2tGb3JQZW5kaW5n
UHJlbG9hZHMoKTsKICAgICB2b2lkIHByaW50UHJlbG9hZFN0YXRzKCk7CiAgICAgYm9vbCBjYW5S
ZXF1ZXN0KENhY2hlZFJlc291cmNlOjpUeXBlLCBjb25zdCBLVVJMJiwgYm9vbCBmb3JQcmVsb2Fk
ID0gZmFsc2UpOwpAQCAtMTQ2LDEwICsxNDYsMTAgQEAgcHJpdmF0ZToKICAgICBDYWNoZWRSZXNv
dXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gcmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNl
OjpUeXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsKICAgICBDYWNoZWRSZXNvdXJjZUhhbmRs
ZTxDYWNoZWRSZXNvdXJjZT4gcmV2YWxpZGF0ZVJlc291cmNlKENhY2hlZFJlc291cmNlKik7CiAg
ICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IGxvYWRSZXNvdXJjZShDYWNo
ZWRSZXNvdXJjZTo6VHlwZSwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0
KTsKLSAgICB2b2lkIHJlcXVlc3RQcmVsb2FkKENhY2hlZFJlc291cmNlOjpUeXBlLCBSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOworICAgIHZvaWQgcmVxdWVzdFByZWxv
YWQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIENhY2hlZFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0
cmluZyYgY2hhcnNldCk7CiAKICAgICBlbnVtIFJldmFsaWRhdGlvblBvbGljeSB7IFVzZSwgUmV2
YWxpZGF0ZSwgUmVsb2FkLCBMb2FkIH07Ci0gICAgUmV2YWxpZGF0aW9uUG9saWN5IGRldGVybWlu
ZVJldmFsaWRhdGlvblBvbGljeShDYWNoZWRSZXNvdXJjZTo6VHlwZSwgUmVzb3VyY2VSZXF1ZXN0
JiwgYm9vbCBmb3JQcmVsb2FkLCBDYWNoZWRSZXNvdXJjZSogZXhpc3RpbmdSZXNvdXJjZSwgRGVm
ZXJPcHRpb24pIGNvbnN0OworICAgIFJldmFsaWRhdGlvblBvbGljeSBkZXRlcm1pbmVSZXZhbGlk
YXRpb25Qb2xpY3koQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIFJlc291cmNlUmVxdWVzdCYsIGJvb2wg
Zm9yUHJlbG9hZCwgQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5nUmVzb3VyY2UsIENhY2hlZFJlc291
cmNlUmVxdWVzdDo6RGVmZXJPcHRpb24pIGNvbnN0OwogICAgIAogICAgIHZvaWQgbm90aWZ5TG9h
ZGVkRnJvbU1lbW9yeUNhY2hlKENhY2hlZFJlc291cmNlKik7CiAgICAgYm9vbCBjaGVja0luc2Vj
dXJlQ29udGVudChDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29uc3QgS1VSTCYpIGNvbnN0OwpAQCAt
MTcwLDcgKzE3MCw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPExpc3RIYXNoU2V0PENhY2hlZFJl
c291cmNlKj4gPiBtX3ByZWxvYWRzOwogICAgIHN0cnVjdCBQZW5kaW5nUHJlbG9hZCB7CiAgICAg
ICAgIENhY2hlZFJlc291cmNlOjpUeXBlIG1fdHlwZTsKLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0
IG1fcmVxdWVzdDsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IG1fcmVxdWVzdDsKICAg
ICAgICAgU3RyaW5nIG1fY2hhcnNldDsKICAgICB9OwogICAgIERlcXVlPFBlbmRpbmdQcmVsb2Fk
PiBtX3BlbmRpbmdQcmVsb2FkczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAKaW5kZXggNmFkZDM5Yjk2Y2FjZjRkZWIzYjRm
MzgyMWNlZmI2MjU4YzVlYzlmMi4uMGNlMmQ2M2Y1YTRkNjA1ZmVlMzNiNzdiMDlhZGFhYTcyMWEz
NGVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlUmVxdWVzdC5jcHAKQEAgLTI2LDYgKzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCiAKKyNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVu
dC5oIgorCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpDYWNoZWRSZXNvdXJjZVJlcXVlc3QoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwg
UmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCkBAIC0zNCw3ICs0MCw3IEBAIENhY2hlZFJl
c291cmNlUmVxdWVzdDo6Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVzb3VyY2VSZXF1CiAgICAgLCBtX29wdGlvbnMoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRl
ZmF1bHRDYWNoZWRSZXNvdXJjZU9wdGlvbnMoKSkKICAgICAsIG1fcHJpb3JpdHkocHJpb3JpdHkp
CiAgICAgLCBtX2ZvclByZWxvYWQoZmFsc2UpCi0gICAgLCBtX2RlZmVyKENhY2hlZFJlc291cmNl
TG9hZGVyOjpOb0RlZmVyKQorICAgICwgbV9kZWZlcihOb0RlZmVyKQogewogfQogCkBAIC00Myw3
ICs0OSw3IEBAIENhY2hlZFJlc291cmNlUmVxdWVzdDo6Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0KGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1CiAgICAgLCBtX29wdGlvbnMob3B0aW9u
cykKICAgICAsIG1fcHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHlVbnJlc29sdmVkKQogICAg
ICwgbV9mb3JQcmVsb2FkKGZhbHNlKQotICAgICwgbV9kZWZlcihDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6Tm9EZWZlcikKKyAgICAsIG1fZGVmZXIoTm9EZWZlcikKIHsKIH0KIApAQCAtNTIsOCArNTgs
NDcgQEAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpDYWNoZWRSZXNvdXJjZVJlcXVlc3QoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXUKICAgICAsIG1fb3B0aW9ucyhDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6ZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpKQogICAgICwgbV9wcmlv
cml0eShwcmlvcml0eSkKICAgICAsIG1fZm9yUHJlbG9hZChmYWxzZSkKLSAgICAsIG1fZGVmZXIo
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6Ok5vRGVmZXIpCisgICAgLCBtX2RlZmVyKE5vRGVmZXIpCit7
Cit9CisKK0NhY2hlZFJlc291cmNlUmVxdWVzdDo6fkNhY2hlZFJlc291cmNlUmVxdWVzdCgpCit7
Cit9Cit2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6c2V0SW5pdGlhdG9yKFBhc3NSZWZQdHI8
RWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICBBU1NFUlQoIW1faW5pdGlhdG9yRWxlbWVudCAmJiAh
bV9pbml0aWF0b3JEb2N1bWVudCk7CisgICAgbV9pbml0aWF0b3JFbGVtZW50ID0gZWxlbWVudDsK
K30KKwordm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OnNldEluaXRpYXRvcihBdG9taWNTdHJp
bmcgbmFtZSwgUGFzc1JlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQpCit7CisgICAgQVNTRVJUKCFt
X2luaXRpYXRvckVsZW1lbnQgJiYgIW1faW5pdGlhdG9yRG9jdW1lbnQpOworICAgIG1faW5pdGlh
dG9yTmFtZSA9IG5hbWU7CisgICAgbV9pbml0aWF0b3JEb2N1bWVudCA9IGRvY3VtZW50OworfQor
Citjb25zdCBBdG9taWNTdHJpbmcgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Ojppbml0aWF0b3JOYW1l
KCkgY29uc3QKK3sKKyAgICBpZiAobV9pbml0aWF0b3JFbGVtZW50KQorICAgICAgICByZXR1cm4g
bV9pbml0aWF0b3JFbGVtZW50LT5sb2NhbE5hbWUoKTsKKyAgICBpZiAoIW1faW5pdGlhdG9yTmFt
ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX2luaXRpYXRvck5hbWU7CisKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZGVmYXVsdE5hbWUsICgicmVzb3VyY2UiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgcmV0dXJuIGRlZmF1bHRO
YW1lOworfQorCitQYXNzUmVmUHRyPERvY3VtZW50PiBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6Omlu
aXRpYXRvckRvY3VtZW50KCkKK3sKKyAgICBpZiAobV9pbml0aWF0b3JFbGVtZW50KQorICAgICAg
ICByZXR1cm4gbV9pbml0aWF0b3JFbGVtZW50LT5kb2N1bWVudCgpOworICAgIHJldHVybiBtX2lu
aXRpYXRvckRvY3VtZW50OworfQorCitQYXNzUmVmUHRyPEVsZW1lbnQ+IENhY2hlZFJlc291cmNl
UmVxdWVzdDo6aW5pdGlhdG9yRWxlbWVudCgpCiB7CisgICAgcmV0dXJuIG1faW5pdGlhdG9yRWxl
bWVudDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlUmVxdWVzdC5oCmluZGV4IGNiMDQzZGZlMzlmZTRjZWQ1NTA4MjE5NGJlM2YxMGRm
MDBmOTFiZjQuLjdmNjg3YmJmZWI1MzUwNTA1MDFjODM2YTc0NWUwNzNkZThkYzZiNjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0
LmgKQEAgLTI2LDI3ICsyNiw0MiBAQAogI2lmbmRlZiBDYWNoZWRSZXNvdXJjZVJlcXVlc3RfaAog
I2RlZmluZSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RfaAogCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRQcmlvcml0eS5oIgorI2luY2x1ZGUg
IlJlc291cmNlTG9hZGVyT3B0aW9ucy5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBFbGVtZW50OwogCiBjbGFzcyBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3QgewogcHVibGljOgorICAgIGVudW0gRGVmZXJPcHRpb24geyBOb0RlZmVyLCBEZWZl
cnJlZEJ5Q2xpZW50IH07CisKICAgICBleHBsaWNpdCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0ID0gU3RyaW5nKCksIFJl
c291cmNlTG9hZFByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlVbnJlc29sdmVkKTsKICAg
ICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVz
b3VyY2VMb2FkZXJPcHRpb25zJik7CiAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFJlc291cmNlTG9hZFByaW9yaXR5KTsKKyAgICB+Q2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0KCk7CiAKICAgICBSZXNvdXJjZVJlcXVlc3QmIG11dGFibGVSZXNvdXJjZVJlcXVl
c3QoKSB7IHJldHVybiBtX3Jlc291cmNlUmVxdWVzdDsgfQogICAgIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVzb3VyY2VSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3Q7
IH0KICAgICBjb25zdCBTdHJpbmcmIGNoYXJzZXQoKSBjb25zdCB7IHJldHVybiBtX2NoYXJzZXQ7
IH0KICAgICB2b2lkIHNldENoYXJzZXQoY29uc3QgU3RyaW5nJiBjaGFyc2V0KSB7IG1fY2hhcnNl
dCA9IGNoYXJzZXQ7IH0KICAgICBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMo
KSBjb25zdCB7IHJldHVybiBtX29wdGlvbnM7IH0KKyAgICB2b2lkIHNldE9wdGlvbnMoY29uc3Qg
UmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKSB7IG1fb3B0aW9ucyA9IG9wdGlvbnM7IH0K
ICAgICBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJp
b3JpdHk7IH0KICAgICBib29sIGZvclByZWxvYWQoKSBjb25zdCB7IHJldHVybiBtX2ZvclByZWxv
YWQ7IH0KICAgICB2b2lkIHNldEZvclByZWxvYWQoYm9vbCBmb3JQcmVsb2FkKSB7IG1fZm9yUHJl
bG9hZCA9IGZvclByZWxvYWQ7IH0KLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RGVmZXJPcHRp
b24gZGVmZXIoKSBjb25zdCB7IHJldHVybiBtX2RlZmVyOyB9Ci0gICAgdm9pZCBzZXREZWZlcihD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6RGVmZXJPcHRpb24gZGVmZXIpIHsgbV9kZWZlciA9IGRlZmVy
OyB9CisgICAgRGVmZXJPcHRpb24gZGVmZXIoKSBjb25zdCB7IHJldHVybiBtX2RlZmVyOyB9Cisg
ICAgdm9pZCBzZXREZWZlcihEZWZlck9wdGlvbiBkZWZlcikgeyBtX2RlZmVyID0gZGVmZXI7IH0K
KyAgICB2b2lkIHNldEluaXRpYXRvcihQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKKyAgICB2b2lkIHNl
dEluaXRpYXRvcihBdG9taWNTdHJpbmcgbmFtZSwgUGFzc1JlZlB0cjxEb2N1bWVudD4pOworICAg
IGNvbnN0IEF0b21pY1N0cmluZyBpbml0aWF0b3JOYW1lKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0
cjxEb2N1bWVudD4gaW5pdGlhdG9yRG9jdW1lbnQoKTsKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+
IGluaXRpYXRvckVsZW1lbnQoKTsKIAogcHJpdmF0ZToKICAgICBSZXNvdXJjZVJlcXVlc3QgbV9y
ZXNvdXJjZVJlcXVlc3Q7CkBAIC01NCw3ICs2OSwxMCBAQCBwcml2YXRlOgogICAgIFJlc291cmNl
TG9hZGVyT3B0aW9ucyBtX29wdGlvbnM7CiAgICAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgbV9wcmlv
cml0eTsKICAgICBib29sIG1fZm9yUHJlbG9hZDsKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
RGVmZXJPcHRpb24gbV9kZWZlcjsKKyAgICBEZWZlck9wdGlvbiBtX2RlZmVyOworICAgIFJlZlB0
cjxFbGVtZW50PiBtX2luaXRpYXRvckVsZW1lbnQ7CisgICAgUmVmUHRyPERvY3VtZW50PiBtX2lu
aXRpYXRvckRvY3VtZW50OworICAgIEF0b21pY1N0cmluZyBtX2luaXRpYXRvck5hbWU7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25M
b2FkZXIuY3BwCmluZGV4IDhjOWQwY2VjYmZjZDEyYjdlYWExYzRhOGM4NzBmMTY0MjU1N2Y3NDUu
LmZkYzQ5ODVjNzY5NDU3ZWRmODBlMDBmYjUyNzdmNzFkYWU2ZTU3ZDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCkBAIC02Niw2ICs2Niw3IEBAIHZvaWQgSWNv
bkxvYWRlcjo6c3RhcnRMb2FkaW5nKCkKICAgICByZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVl
c3QoKS5zZXRUYXJnZXRUeXBlKFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNGYXZpY29uKTsKICNl
bmRpZgogICAgIHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLnNldFByaW9yaXR5KFJl
c291cmNlTG9hZFByaW9yaXR5TG93KTsKKyAgICByZXF1ZXN0LnNldEluaXRpYXRvcigiaWNvbiIs
IG1fZnJhbWUtPmRvY3VtZW50KCkpOwogCiAgICAgbV9yZXNvdXJjZSA9IG1fZnJhbWUtPmRvY3Vt
ZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnJlcXVlc3RSYXdSZXNvdXJjZShyZXF1ZXN0
KTsKICAgICBpZiAobV9yZXNvdXJjZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1l
bnQuY3BwCmluZGV4IDg3ZmYwZDY4MTI3NDQ2MGVhNzk3OGFmZTg3ZmEyNzM5Njg4NTdlYmEuLmVh
ZmVhMWE4NmExMjIyZWQ4M2QxNGE1M2RhYmJjZGJmMjIzNGZiNzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcApAQCAtODIsNiArODIsNyBAQCB2b2lkIFNWR0ZFSW1h
Z2VFbGVtZW50OjpjbGVhclJlc291cmNlUmVmZXJlbmNlcygpCiB2b2lkIFNWR0ZFSW1hZ2VFbGVt
ZW50OjpyZXF1ZXN0SW1hZ2VSZXNvdXJjZSgpCiB7CiAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0
IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KG93bmVyRG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoaHJl
ZigpKSkpOworICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKHRoaXMpOwogICAgIG1fY2FjaGVkSW1h
Z2UgPSBkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0SW1hZ2UocmVx
dWVzdCk7CiAKICAgICBpZiAobV9jYWNoZWRJbWFnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAKaW5kZXggYzM0ZmVkODdkNDdlZjhmZjFmMWE2NWUyN2Fm
NWY2Y2RkMzc0OGE4Yi4uM2IyZDQ5NWI5NjUwOTgwMjE3MjI3M2Y3NTIyZGU0MWM1NGM3MGZiOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAKQEAgLTk4
LDYgKzk4LDcgQEAgdm9pZCBTVkdGb250RmFjZVVyaUVsZW1lbnQ6OmxvYWRGb250KCkKICAgICBp
ZiAoIWhyZWYuaXNOdWxsKCkpIHsKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hl
ZFJlc291cmNlTG9hZGVyID0gZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKICAg
ICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKGhyZWYpKSk7CisgICAgICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9y
KHRoaXMpOwogICAgICAgICBtX2NhY2hlZEZvbnQgPSBjYWNoZWRSZXNvdXJjZUxvYWRlci0+cmVx
dWVzdEZvbnQocmVxdWVzdCk7CiAgICAgICAgIGlmIChtX2NhY2hlZEZvbnQpIHsKICAgICAgICAg
ICAgIG1fY2FjaGVkRm9udC0+YWRkQ2xpZW50KHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVs
ZW1lbnQuY3BwCmluZGV4IDYwNDZlYzYxYjc0ZmMxMmViMTNhYzIwNzI0NGE2YzY4MTY1NDc0NzYu
LmYxZTFjMDMyNDA1MzQ4YzM1OTBjMzdiZTRiYjRjYTIwMmVlMDY1ZDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVXNlRWxlbWVudC5jcHAKQEAgLTI1Niw2ICsyNTYsNyBAQCB2b2lkIFNWR1VzZUVsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAg
ICAgICAgICAgICBLVVJMIHVybCA9IGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGhyZWYoKSk7CiAg
ICAgICAgICAgICBpZiAodXJsLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKSB7CiAgICAgICAgICAg
ICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KHVybC5z
dHJpbmcoKSkpOworICAgICAgICAgICAgICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKHRoaXMpOwog
ICAgICAgICAgICAgICAgIG1fY2FjaGVkRG9jdW1lbnQgPSBkb2N1bWVudCgpLT5jYWNoZWRSZXNv
dXJjZUxvYWRlcigpLT5yZXF1ZXN0U1ZHRG9jdW1lbnQocmVxdWVzdCk7CiAgICAgICAgICAgICAg
ICAgaWYgKG1fY2FjaGVkRG9jdW1lbnQpCiAgICAgICAgICAgICAgICAgICAgIG1fY2FjaGVkRG9j
dW1lbnQtPmFkZENsaWVudCh0aGlzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172712</attachid>
            <date>2012-11-06 21:19:32 -0800</date>
            <delta_ts>2012-12-03 14:22:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101300-20121106211743.patch</filename>
            <type>text/plain</type>
            <size>55190</size>
            <attacher name="James Simonsen">simonjam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNzAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTE2YWU5MzQ5NmQzNjA0
YmVkMGNmYjEwNTBhNzk2ZDk5OTNhYzExMi4uODkxYjczOGQzYTI3NjczNzAxOWI1NzQ4ODQ3ZGMy
MzI1MjE1OWZkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNiBAQAorMjAxMi0xMS0wNiAgSmFt
ZXMgU2ltb25zZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3RvcmUgdGhl
IGluaXRpYXRvciBvZiBDYWNoZWRSZXNvdXJjZVJlcXVlc3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEzMDAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGVyZSBhcmUgdHdvIG1vdGl2YXRpb25zIGZv
ciB0aGlzIGNoYW5nZToKKworICAgICAgICBBdCBsZWFzdCBvbmUgZW1iZWRkZXIgbmVlZHMgdG8g
a25vdyB3aGljaCBlbGVtZW50IGluaXRpYXRlZCBhIGxvYWQgcmVxdWVzdC4gVGhpcyB3aWxsIGJl
IHBhc3NlZAorICAgICAgICB0aHJvdWdoIHdpbGxTZW5kUmVxdWVzdC4KKworICAgICAgICBBbHNv
LCBSZXNvdXJjZSBUaW1pbmcgbmVlZHMgdG8gcmVwb3J0IHdoaWNoIGVsZW1lbnQgaW5pdGlhdGVk
IGEgbG9hZC4gSW4gb3JkZXIgdG8gZG8gc28sIHdlIG5lZWQKKyAgICAgICAgdG8gcmVtZW1iZXIg
dGhlIGluaXRpYXRvciB0aHJvdWdob3V0IHRoZSBkdXJhdGlvbiBvZiB0aGUgbG9hZC4gVGhpcyBp
cyBoYW5kbGVkIGJ5CisgICAgICAgIFN1YnJlc291cmNlTG9hZGVyLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4gTm8gdmlzaWJsZSBjaGFuZ2UgaW4gYmVoYXZpb3IgKHlldCkuCisKKyAgICAgICAg
KiBjc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHA6IFNldCB0aGUgaW5pdGlhdG9yIGZvciBhbGwg
b2YgdGhlc2UuLi4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU3JjVmFsdWU6OmNhY2hl
ZEZvbnQpOgorICAgICAgICAqIGNzcy9DU1NJbWFnZVNldFZhbHVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ltYWdlU2V0VmFsdWU6OmNhY2hlZEltYWdlU2V0KToKKyAgICAgICAgKiBjc3Mv
Q1NTSW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVZhbHVlOjpjYWNo
ZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVZhbHVlOjpzZXRJbml0aWF0b3Ip
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL0NTU0ltYWdlVmFsdWUuaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ1NTSW1hZ2VWYWx1ZSk6CisgICAgICAgICogY3Nz
L1N0eWxlUnVsZUltcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVJbXBvcnQ6
OnJlcXVlc3RTdHlsZVNoZWV0KToKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTU1ZHRG9jdW1lbnRW
YWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlOjps
b2FkKToKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTU2hhZGVyVmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViS2l0Q1NTU2hhZGVyVmFsdWU6OmNhY2hlZFNoYWRlcik6CisgICAgICAgICog
ZG9tL1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6
cmVxdWVzdFNjcmlwdCk6CisgICAgICAgICogaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JBdHRyaWJ1dGUp
OgorICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxMaW5rRWxlbWVudDo6cHJvY2Vzcyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvQ1NTUHJl
bG9hZFNjYW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJlbG9hZFNjYW5uZXI6OmVt
aXRSdWxlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oOgorICAg
ICAgICAoQ1NTUHJlbG9hZFNjYW5uZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQcmVs
b2FkU2Nhbm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcmVsb2FkVGFzazo6UHJlbG9hZFRh
c2spOgorICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFRhc2s6OnByZWxvYWQpOgorICAgICAgICAo
UHJlbG9hZFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByZWxvYWRTY2FubmVyOjpwcm9j
ZXNzVG9rZW4pOgorICAgICAgICAqIGxvYWRlci9JbWFnZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAqIGxvYWRl
ci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOiBOb3cgcGFzc2VzIHRocm91Z2ggYSBDYWNoZWRS
ZXNvdXJjZVJlcXVlc3QgdG8gdGhlIFN1YnJlc291cmNlTG9hZGVyLgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9hZCk6CisgICAg
ICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChSZXNvdXJjZUxvYWRTY2hlZHVsZXIpOgorICAgICAgICAqIGxvYWRlci9TdWJy
ZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6
U3VicmVzb3VyY2VMb2FkZXIpOiBUaGlzIG5vdyB0YWtlcyBhbmQgaG9sZHMgYSBDYWNoZWRSZXNv
dXJjZVJlcXVlc3QsIHNvIHdlIGNhbiBnZXQgYXQgdGhlIGluaXRpYXRvci4KKyAgICAgICAgKFdl
YkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3Vi
cmVzb3VyY2VMb2FkZXI6OmluaXQpOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRl
ci5oOgorICAgICAgICAoU3VicmVzb3VyY2VMb2FkZXIpOgorICAgICAgICAqIGxvYWRlci9jYWNo
ZS9DYWNoZWRGb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEZvbnQ6OmJlZ2luTG9h
ZElmTmVlZGVkKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmxvYWQpOgorICAgICAgICAqIGxvYWRlci9jYWNo
ZS9DYWNoZWRJbWFnZS5oOgorICAgICAgICAoQ2FjaGVkSW1hZ2UpOgorICAgICAgICAqIGxvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNv
dXJjZTo6bG9hZCk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6cmVzb3VyY2VSZXF1ZXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjp1cmwpOgorICAgICAgICAoQ2FjaGVkUmVzb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmluaXRpYWxSZXF1ZXN0KToK
KyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJl
dmFsaWRhdGlvblBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6cmVsb2FkSW1hZ2VzSWZOb3REZWZlcnJlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpwcmVsb2FkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpjaGVja0ZvclBlbmRpbmdQcmVsb2Fkcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFByZWxvYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmlzUHJlbG9hZGVkKToKKyAg
ICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKENh
Y2hlZFJlc291cmNlTG9hZGVyKToKKyAgICAgICAgKFBlbmRpbmdQcmVsb2FkKToKKyAgICAgICAg
KiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlZFJlc291cmNlUmVxdWVzdDo6Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0KToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0Ojp+
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNl
UmVxdWVzdDo6c2V0SW5pdGlhdG9yKTogQ2FuIGJlIGFuIEVsZW1lbnQgb3IganVzdCBhIG5hbWUg
YXMgZGVmaW5lZCBpbiBSZXNvdXJjZSBUaW1pbmcuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRS
ZXNvdXJjZVJlcXVlc3Q6OmluaXRpYXRvck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UmVzb3VyY2VSZXF1ZXN0Ojppbml0aWF0b3JEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmluaXRpYXRvckVsZW1lbnQpOgorICAgICAgICAqIGxvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaDogTW92ZWQgZW51bXMgdG8gQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0IHRvIGF2b2lkIGNpcmN1bGFyIGluY2x1ZGVzLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OnNldE9wdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpkZWZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OnNldERlZmVyKToKKyAgICAgICAg
KENhY2hlZFJlc291cmNlUmVxdWVzdCk6CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uTG9hZGVyOjpzdGFydExvYWRpbmcpOgorICAg
ICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RUltYWdlRWxlbWVudDo6cmVxdWVzdEltYWdlUmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9TVkdG
b250RmFjZVVyaUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VVcmlF
bGVtZW50Ojpsb2FkRm9udCk6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisKIDIw
MTItMTEtMDYgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAg
Q2xlYW4gdXAgd2hpY2ggc3RvcmFnZSBjb29raWUgamFyIGZ1bmN0aW9ucyB1c2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpp
bmRleCA1YzEwYTRlNzM3ODExY2E3MjE5ZDRjMDllZDg5MDNhYjI0ZmY4NzUwLi45NGVkNjY4ZWIz
NGU1YjUxYjkzODUxOTJjNTAwOGNmNDlhOTEyNmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTItMTEtMDYgIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFN0b3JlIHRoZSBpbml0aWF0b3Igb2YgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0cwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxMzAwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDogU2xpZ2h0IEFQSSBjaGFu
Z2U6IHBhc3MgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IGluc3RlYWQgb2YgUmVzb3VyY2VSZXF1ZXN0
LgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU3Vi
cmVzb3VyY2VMb2FkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmg6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIpOgorCiAy
MDEyLTExLTA2ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAg
ICAgVXBkYXRlIEphdmEgcmVsYXRlZCBXS1NJIGZ1bmN0aW9uIG5hbWVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHAKaW5kZXggMzY5MDc4OTMzNmQwYjg0NDgxNTI3
M2IwMTMyMjVmNjlkYWFkNjg3Zi4uZmFlZDc0ZGNhOTE1ODIxZDNjZDg5MmY0YTY3MGVlYzM5ZWZm
ZjcyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmNwcApAQCAt
OTcsNiArOTcsNyBAQCBDYWNoZWRGb250KiBDU1NGb250RmFjZVNyY1ZhbHVlOjpjYWNoZWRGb250
KERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBpZiAoIW1fY2FjaGVkRm9udCkgewogICAgICAg
ICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJlcXVlc3QoZG9jdW1lbnQt
PmNvbXBsZXRlVVJMKG1fcmVzb3VyY2UpKSk7CisgICAgICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9y
KCJjc3MiLCBkb2N1bWVudCk7CiAgICAgICAgIG1fY2FjaGVkRm9udCA9IGRvY3VtZW50LT5jYWNo
ZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0Rm9udChyZXF1ZXN0KTsKICAgICB9CiAgICAgcmV0
dXJuIG1fY2FjaGVkRm9udC5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NJbWFnZVNldFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVl
LmNwcAppbmRleCBmN2Q0MDFmNWNmNjc0OTAyMTg4NjAzZDIwOGRlMmQ2M2I5YzZjYWUwLi45NTg1
NmFmNjYzODZmZDRmYzNjNDQ0YWIxY2I2YjViNjI1Y2RjODY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ltYWdlU2V0VmFsdWUuY3BwCkBAIC0xMTAsNiArMTEwLDcgQEAgU3R5bGVDYWNoZWRJbWFn
ZVNldCogQ1NTSW1hZ2VTZXRWYWx1ZTo6Y2FjaGVkSW1hZ2VTZXQoQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIqIGxvYWQKICAgICAgICAgLy8gYW5kIGFueSBDU1MgdHJhbnNmb3Jtcy4gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjk4CiAgICAgICAgIEltYWdlV2l0aFNjYWxl
IGltYWdlID0gYmVzdEltYWdlRm9yU2NhbGVGYWN0b3IoKTsKICAgICAgICAgQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGxvYWRlci0+ZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwoaW1hZ2UuaW1hZ2VVUkwpKSk7CisgICAgICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9y
KCJjc3MiLCBkb2N1bWVudCk7CiAgICAgICAgIGlmIChDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNo
ZWRJbWFnZT4gY2FjaGVkSW1hZ2UgPSBsb2FkZXItPnJlcXVlc3RJbWFnZShyZXF1ZXN0KSkgewog
ICAgICAgICAgICAgbV9pbWFnZVNldCA9IFN0eWxlQ2FjaGVkSW1hZ2VTZXQ6OmNyZWF0ZShjYWNo
ZWRJbWFnZS5nZXQoKSwgaW1hZ2Uuc2NhbGVGYWN0b3IsIHRoaXMpOwogICAgICAgICAgICAgbV9h
Y2Nlc3NlZEJlc3RGaXRJbWFnZSA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTSW1hZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5j
cHAKaW5kZXggNmI3M2Q0NjMxYTBmMDAyNGYyZWM2ZjNjNjQ4NTgxNjQ5ODQxMDRmNy4uYTlhZGI5
Y2VjNjY5ZWE1MzIxM2U1ZTZmOWM2ODQwOGJkNGVkNDU5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJ
bWFnZVZhbHVlLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
TG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiTWVtb3J5Q2FjaGUu
aCIKICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiU3R5bGVQZW5kaW5n
SW1hZ2UuaCIKQEAgLTg0LDYgKzg1LDEwIEBAIFN0eWxlQ2FjaGVkSW1hZ2UqIENTU0ltYWdlVmFs
dWU6OmNhY2hlZEltYWdlKENhY2hlZFJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0CiAgICAg
ICAgIG1fYWNjZXNzZWRJbWFnZSA9IHRydWU7CiAKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGxvYWRlci0+ZG9jdW1lbnQoKS0+Y29tcGxldGVV
UkwodXJsKSkpOworICAgICAgICBpZiAobV9pbml0aWF0b3JFbGVtZW50KQorICAgICAgICAgICAg
cmVxdWVzdC5zZXRJbml0aWF0b3IobV9pbml0aWF0b3JFbGVtZW50LnJlbGVhc2UoKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKCJjc3MiLCBsb2FkZXIt
PmRvY3VtZW50KCkpOwogICAgICAgICBpZiAoQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkSW1h
Z2U+IGNhY2hlZEltYWdlID0gbG9hZGVyLT5yZXF1ZXN0SW1hZ2UocmVxdWVzdCkpCiAgICAgICAg
ICAgICBtX2ltYWdlID0gU3R5bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGNhY2hlZEltYWdlLmdldCgp
KTsKICAgICB9CkBAIC0xMzQsNCArMTM5LDkgQEAgdm9pZCBDU1NJbWFnZVZhbHVlOjpyZXBvcnRE
ZXNjZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW4KICAg
ICAvLyBObyBuZWVkIHRvIHJlcG9ydCBtX2ltYWdlIGFzIGl0IGlzIGNvdW50ZWQgYXMgcGFydCBv
ZiBSZW5kZXJBcmVuYS4KIH0KIAordm9pZCBDU1NJbWFnZVZhbHVlOjpzZXRJbml0aWF0b3IoUGFz
c1JlZlB0cjxFbGVtZW50PiBlbGVtZW50KQoreworICAgIG1faW5pdGlhdG9yRWxlbWVudCA9IGVs
ZW1lbnQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NJbWFnZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VW
YWx1ZS5oCmluZGV4IDhjODJmMmM2N2RiNDMzYTc1MTczM2M5NjcxZGU5YjkxNTFlN2E5OGMuLmUx
YzFhODhjODY4OTc0YTZmNjgyZjM4M2ZmZGNhMTZlZDhjYjEzNzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ltYWdlVmFsdWUuaApAQCAtMjcsNiArMjcsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKK2NsYXNzIEVsZW1lbnQ7CiBjbGFzcyBTdHlsZUNh
Y2hlZEltYWdlOwogY2xhc3MgU3R5bGVJbWFnZTsKIApAQCAtNTAsNiArNTEsOCBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZv
KikgY29uc3Q7CiAKKyAgICB2b2lkIHNldEluaXRpYXRvcihQYXNzUmVmUHRyPEVsZW1lbnQ+KTsK
KwogcHJvdGVjdGVkOgogICAgIENTU0ltYWdlVmFsdWUoQ2xhc3NUeXBlLCBjb25zdCBTdHJpbmcm
IHVybCk7CiAKQEAgLTY0LDYgKzY3LDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV91cmw7CiAg
ICAgUmVmUHRyPFN0eWxlSW1hZ2U+IG1faW1hZ2U7CiAgICAgYm9vbCBtX2FjY2Vzc2VkSW1hZ2U7
CisgICAgUmVmUHRyPEVsZW1lbnQ+IG1faW5pdGlhdG9yRWxlbWVudDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVJ
bXBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZUltcG9ydC5jcHAKaW5kZXgg
ZWVjMzUwNzcxYzQ3OTQyZTg2NTc3MzA3ZWMyNDAzMmQyNmMwNGY4NS4uZjUxMTM3ZTMzMjFlNjE4
ODY5OTc2NzZiNGJiYWQ4YjU4OTFjZDU2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUnVsZUltcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZUlt
cG9ydC5jcHAKQEAgLTExNyw2ICsxMTcsNyBAQCB2b2lkIFN0eWxlUnVsZUltcG9ydDo6cmVxdWVz
dFN0eWxlU2hlZXQoKQogICAgIH0KIAogICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0
KFJlc291cmNlUmVxdWVzdChhYnNVUkwpLCBtX3BhcmVudFN0eWxlU2hlZXQtPmNoYXJzZXQoKSk7
CisgICAgcmVxdWVzdC5zZXRJbml0aWF0b3IoImNzcyIsIGRvY3VtZW50KTsKICAgICBpZiAobV9w
YXJlbnRTdHlsZVNoZWV0LT5pc1VzZXJTdHlsZVNoZWV0KCkpCiAgICAgICAgIG1fY2FjaGVkU2hl
ZXQgPSBjYWNoZWRSZXNvdXJjZUxvYWRlci0+cmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0KHJlcXVl
c3QpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NT
VkdEb2N1bWVudFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NTVkdEb2N1
bWVudFZhbHVlLmNwcAppbmRleCA2N2U4NGUzYzliOTgzYWJiMDgyNDEyMDc1OWUzODg4MDUzY2Zj
OGJhLi41YTMzOGZlOTI4M2FhZmFkMTk4YTE0ZGQ0NDkzMzhhZTRhYmUyYmIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1NWR0RvY3VtZW50VmFsdWUuY3BwCkBAIC01NCw2
ICs1NCw3IEBAIENhY2hlZFNWR0RvY3VtZW50KiBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlOjps
b2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiBsb2FkZXIpCiAgICAgICAgIG1fbG9hZFJlcXVlc3Rl
ZCA9IHRydWU7CiAKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3Vy
Y2VSZXF1ZXN0KGxvYWRlci0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwobV91cmwpKSk7CisgICAg
ICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKCJjc3MiLCBsb2FkZXItPmRvY3VtZW50KCkpOwogICAg
ICAgICBtX2RvY3VtZW50ID0gbG9hZGVyLT5yZXF1ZXN0U1ZHRG9jdW1lbnQocmVxdWVzdCk7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTU2hhZGVyVmFs
dWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1NoYWRlclZhbHVlLmNwcAppbmRl
eCBmYTA0MTkwYzNkYzhlM2FkYjQzMWFiMDNhOGZkMWExZTE4MDA0YmE5Li5mNTBlNmUxNmRhYThh
OTJlMjJiMWIyMTQ2MjkzNDIyZmVkMzBmYzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvV2ViS2l0Q1NTU2hhZGVyVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJL
aXRDU1NTaGFkZXJWYWx1ZS5jcHAKQEAgLTYxLDYgKzYxLDcgQEAgU3R5bGVDYWNoZWRTaGFkZXIq
IFdlYktpdENTU1NoYWRlclZhbHVlOjpjYWNoZWRTaGFkZXIoQ2FjaGVkUmVzb3VyY2VMb2FkZXIq
IGxvYWQKICAgICAgICAgbV9hY2Nlc3NlZFNoYWRlciA9IHRydWU7CiAKICAgICAgICAgQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGxvYWRlci0+ZG9jdW1lbnQo
KS0+Y29tcGxldGVVUkwobV91cmwpKSk7CisgICAgICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKCJj
c3MiLCBsb2FkZXItPmRvY3VtZW50KCkpOwogICAgICAgICBpZiAoQ2FjaGVkUmVzb3VyY2VIYW5k
bGU8Q2FjaGVkU2hhZGVyPiBjYWNoZWRTaGFkZXIgPSBsb2FkZXItPnJlcXVlc3RTaGFkZXIocmVx
dWVzdCkpCiAgICAgICAgICAgICBtX3NoYWRlciA9IFN0eWxlQ2FjaGVkU2hhZGVyOjpjcmVhdGUo
Y2FjaGVkU2hhZGVyLmdldCgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5j
cHAKaW5kZXggY2ZkZDFhNDM2OTgwZDFiMDAyNjJjMTE4Y2MyNjlmNzNjMmNjMzIyMC4uNGZhNTU5
ZThmYjgyYjVjZDI4NDdiM2RhMDIwNzkzNmE1MTcxNTcxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFbGVtZW50LmNwcApAQCAtMjY2LDYgKzI2Niw3IEBAIGJvb2wgU2NyaXB0RWxlbWVudDo6cmVx
dWVzdFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVybCkKICAgICAgICAgICAgIHVwZGF0ZVJl
cXVlc3RGb3JBY2Nlc3NDb250cm9sKHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLCBt
X2VsZW1lbnQtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIGFsbG93Q3JlZGVudGlhbHMp
OwogICAgICAgICB9CiAgICAgICAgIHJlcXVlc3Quc2V0Q2hhcnNldChzY3JpcHRDaGFyc2V0KCkp
OworICAgICAgICByZXF1ZXN0LnNldEluaXRpYXRvcihlbGVtZW50KCkpOwogCiAgICAgICAgIG1f
Y2FjaGVkU2NyaXB0ID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRl
cigpLT5yZXF1ZXN0U2NyaXB0KHJlcXVlc3QpOwogICAgICAgICBtX2lzRXh0ZXJuYWxTY3JpcHQg
PSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCmluZGV4IDg1Y2Rm
MzhiMTI1ZDc2M2Y4NjQwMzUwNDkyNmYxNmQ3NTEyMjY4ZDcuLmFhNzNkYWE0ZDk5YWMwMGRlNTNh
MGUyMTYxMzdjZjU2ODM0ZWU0MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEJvZHlFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVu
dC5jcHAKQEAgLTcyLDggKzcyLDExIEBAIHZvaWQgSFRNTEJvZHlFbGVtZW50Ojpjb2xsZWN0U3R5
bGVGb3JBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUsIFN0eWxlCiB7CiAgICAg
aWYgKGF0dHJpYnV0ZS5uYW1lKCkgPT0gYmFja2dyb3VuZEF0dHIpIHsKICAgICAgICAgU3RyaW5n
IHVybCA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhhdHRyaWJ1dGUudmFsdWUo
KSk7Ci0gICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZSwgQ1NTSW1hZ2VW
YWx1ZTo6Y3JlYXRlKGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCkuc3RyaW5nKCkpKSk7Cisg
ICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgUmVmUHRyPENTU0ltYWdl
VmFsdWU+IGltYWdlVmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwodXJsKS5zdHJpbmcoKSk7CisgICAgICAgICAgICBpbWFnZVZhbHVlLT5zZXRJbml0
aWF0b3IodGhpcyk7CisgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHko
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2UsIGltYWdlVmFsdWUucmVsZWFzZSgpKSk7CisgICAg
ICAgIH0KICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZS5uYW1lKCkgPT0gbWFyZ2lud2lkdGhBdHRy
IHx8IGF0dHJpYnV0ZS5uYW1lKCkgPT0gbGVmdG1hcmdpbkF0dHIpIHsKICAgICAgICAgYWRkSFRN
TExlbmd0aFRvU3R5bGUoc3R5bGUsIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsIGF0dHJpYnV0ZS52
YWx1ZSgpKTsKICAgICAgICAgYWRkSFRNTExlbmd0aFRvU3R5bGUoc3R5bGUsIENTU1Byb3BlcnR5
TWFyZ2luTGVmdCwgYXR0cmlidXRlLnZhbHVlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlu
a0VsZW1lbnQuY3BwCmluZGV4IDdjOTZiMTliMTM4NzgxOWUyMDJmNTQ4OWUyYzYyMDliM2Y0NGI0
MzMuLmFjMDc5MWMwMGIzZDZhMGFmMGUyMmU2MTlkYjRiNDEyMDU2YzZjZDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKQEAgLTIyMiw4ICsyMjIsOSBAQCB2b2lkIEhU
TUxMaW5rRWxlbWVudDo6cHJvY2VzcygpCiAgICAgICAgIC8vIExvYWQgc3R5bGVzaGVldHMgdGhh
dCBhcmUgbm90IG5lZWRlZCBmb3IgdGhlIHJlbmRlcmluZyBpbW1lZGlhdGVseSB3aXRoIGxvdyBw
cmlvcml0eS4KICAgICAgICAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkgPSBibG9ja2lu
ZyA/IFJlc291cmNlTG9hZFByaW9yaXR5VW5yZXNvbHZlZCA6IFJlc291cmNlTG9hZFByaW9yaXR5
VmVyeUxvdzsKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VS
ZXF1ZXN0KGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKG1fdXJsKSksIGNoYXJzZXQsIHByaW9yaXR5
KTsKKyAgICAgICAgcmVxdWVzdC5zZXRJbml0aWF0b3IodGhpcyk7CiAgICAgICAgIG1fY2FjaGVk
U2hlZXQgPSBkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0Q1NTU3R5
bGVTaGVldChyZXF1ZXN0KTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKG1fY2FjaGVkU2hlZXQp
CiAgICAgICAgICAgICBtX2NhY2hlZFNoZWV0LT5hZGRDbGllbnQodGhpcyk7CiAgICAgICAgIGVs
c2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNj
YW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIu
Y3BwCmluZGV4IDI5ZjFjY2Q0NjhiYWRkOGRlNWMzYjE5ZTcyZjJkODUyY2QzMDA4OTMuLjgyZmRm
YzY1Yzk4MTFlYThhMTAyNjQ2MDI2YWUwYWU5MWM0ZDdiYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAKQEAgLTE5Niw3ICsxOTYsNyBA
QCB2b2lkIENTU1ByZWxvYWRTY2FubmVyOjplbWl0UnVsZSgpCiAgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKCJpbXBvcnQiLCBtX3J1bGUuY2hhcmFjdGVycygpLCBtX3J1bGUubGVuZ3RoKCkpKSB7
CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcnNlQ1NTU3RyaW5nT3JVUkwobV9ydWxlVmFsdWUu
Y2hhcmFjdGVycygpLCBtX3J1bGVWYWx1ZS5sZW5ndGgoKSk7CiAgICAgICAgIGlmICghdmFsdWUu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChtX2RvY3Vt
ZW50LT5jb21wbGV0ZVVSTCh2YWx1ZSkpOworICAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KG1fZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHZhbHVl
KSkpOwogICAgICAgICAgICAgbV9kb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cHJl
bG9hZChDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCwgcmVxdWVzdCwgU3RyaW5nKCksIG1f
c2Nhbm5pbmdCb2R5KTsKICAgICAgICAgfQogICAgICAgICBtX3N0YXRlID0gSW5pdGlhbDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oCmluZGV4IGMz
ZGJiODAwZWRkOGVhMTBhYjI0ZWIzYzEyM2I3Y2E5OGYyY2I0MjcuLmIxNmE2MjkyNWUxMDYxNWE5
MjQzYzkyNGJjZWU3YTBjYzBkMWQzMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaApAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBIVE1MVG9rZW47
CiBjbGFzcyBDU1NQcmVsb2FkU2Nhbm5lciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ1NT
UHJlbG9hZFNjYW5uZXIpOwogcHVibGljOgotICAgIENTU1ByZWxvYWRTY2FubmVyKERvY3VtZW50
Kik7CisgICAgZXhwbGljaXQgQ1NTUHJlbG9hZFNjYW5uZXIoRG9jdW1lbnQqKTsKIAogICAgIHZv
aWQgcmVzZXQoKTsKICAgICB2b2lkIHNjYW4oY29uc3QgSFRNTFRva2VuJiwgYm9vbCBzY2Fubmlu
Z0JvZHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxv
YWRTY2FubmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nh
bm5lci5jcHAKaW5kZXggYTc1YjUyZTM1NTA2YWEzMGU1ZTliZjMwOWYwMjBkODcxOTFjY2ZmNC4u
ODFkNTY5ZThjZWQ3ZmQzMzRkOGJhOWRmNGZhMGQwYTljN2I2NzUwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCkBAIC00NSw4ICs0
NSw5IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIGNsYXNzIFByZWxvYWRUYXNrIHsK
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBQcmVsb2FkVGFzayhjb25zdCBIVE1MVG9rZW4mIHRva2Vu
KQorICAgIFByZWxvYWRUYXNrKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4sIERvY3VtZW50KiBkb2N1
bWVudCkKICAgICAgICAgOiBtX3RhZ05hbWUodG9rZW4ubmFtZSgpLmRhdGEoKSwgdG9rZW4ubmFt
ZSgpLnNpemUoKSkKKyAgICAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICAgICAsIG1f
bGlua0lzU3R5bGVTaGVldChmYWxzZSkKICAgICAgICAgLCBtX2xpbmtNZWRpYUF0dHJpYnV0ZUlz
U2NyZWVuKHRydWUpCiAgICAgICAgICwgbV9pbnB1dElzSW1hZ2UoZmFsc2UpCkBAIC0xMjEsMTMg
KzEyMiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIG1fdXJsVG9Mb2FkID0gc3RyaXBMZWFkaW5nQW5k
VHJhaWxpbmdIVE1MU3BhY2VzKGF0dHJpYnV0ZVZhbHVlKTsKICAgICB9CiAKLSAgICB2b2lkIHBy
ZWxvYWQoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHNjYW5uaW5nQm9keSwgY29uc3QgS1VSTCYg
YmFzZVVSTCkKKyAgICB2b2lkIHByZWxvYWQoYm9vbCBzY2FubmluZ0JvZHksIGNvbnN0IEtVUkwm
IGJhc2VVUkwpCiAgICAgewogICAgICAgICBpZiAobV91cmxUb0xvYWQuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRS
ZXNvdXJjZUxvYWRlciA9IGRvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwotICAgICAg
ICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IGRvY3VtZW50LT5jb21wbGV0ZVVSTChtX3VybFRv
TG9hZCwgYmFzZVVSTCk7CisgICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNv
dXJjZUxvYWRlciA9IG1fZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisgICAgICAg
IENhY2hlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFJlc291cmNlUmVxdWVzdChtX2RvY3VtZW50
LT5jb21wbGV0ZVVSTChtX3VybFRvTG9hZCwgYmFzZVVSTCkpKTsKKyAgICAgICAgcmVxdWVzdC5z
ZXRJbml0aWF0b3IodGFnTmFtZSgpLCBtX2RvY3VtZW50LmdldCgpKTsKICAgICAgICAgaWYgKG1f
dGFnTmFtZSA9PSBzY3JpcHRUYWcpCiAgICAgICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci0+
cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6U2NyaXB0LCByZXF1ZXN0LCBtX2NoYXJzZXQsIHNjYW5u
aW5nQm9keSk7CiAgICAgICAgIGVsc2UgaWYgKG1fdGFnTmFtZSA9PSBpbWdUYWcgfHwgKG1fdGFn
TmFtZSA9PSBpbnB1dFRhZyAmJiBtX2lucHV0SXNJbWFnZSkpCkBAIC0xNDEsNiArMTQzLDcgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIEF0b21pY1N0cmluZyBtX3RhZ05hbWU7CisgICAgUmVm
UHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIFN0cmluZyBtX3VybFRvTG9hZDsKICAgICBT
dHJpbmcgbV9jaGFyc2V0OwogICAgIFN0cmluZyBtX2Jhc2VFbGVtZW50SHJlZjsKQEAgLTE5MCw3
ICsxOTMsNyBAQCB2b2lkIEhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1Rva2VuKCkKICAgICBp
ZiAobV90b2tlbi50eXBlKCkgIT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBQcmVsb2FkVGFzayB0YXNrKG1fdG9rZW4pOworICAgIFByZWxvYWRUYXNr
IHRhc2sobV90b2tlbiwgbV9kb2N1bWVudCk7CiAgICAgbV90b2tlbml6ZXItPnVwZGF0ZVN0YXRl
Rm9yKHRhc2sudGFnTmFtZSgpLCBtX2RvY3VtZW50LT5mcmFtZSgpKTsKIAogICAgIGlmICh0YXNr
LnRhZ05hbWUoKSA9PSBib2R5VGFnKQpAQCAtMjAyLDcgKzIwNSw3IEBAIHZvaWQgSFRNTFByZWxv
YWRTY2FubmVyOjpwcm9jZXNzVG9rZW4oKQogICAgIGlmICh0YXNrLnRhZ05hbWUoKSA9PSBiYXNl
VGFnKQogICAgICAgICB1cGRhdGVQcmVkaWN0ZWRCYXNlRWxlbWVudFVSTChLVVJMKG1fZG9jdW1l
bnQtPnVybCgpLCB0YXNrLmJhc2VFbGVtZW50SHJlZigpKSk7CiAKLSAgICB0YXNrLnByZWxvYWQo
bV9kb2N1bWVudCwgc2Nhbm5pbmdCb2R5KCksIG1fcHJlZGljdGVkQmFzZUVsZW1lbnRVUkwuaXNF
bXB0eSgpID8gbV9kb2N1bWVudC0+YmFzZVVSTCgpIDogbV9wcmVkaWN0ZWRCYXNlRWxlbWVudFVS
TCk7CisgICAgdGFzay5wcmVsb2FkKHNjYW5uaW5nQm9keSgpLCBtX3ByZWRpY3RlZEJhc2VFbGVt
ZW50VVJMLmlzRW1wdHkoKSA/IG1fZG9jdW1lbnQtPmJhc2VVUkwoKSA6IG1fcHJlZGljdGVkQmFz
ZUVsZW1lbnRVUkwpOwogfQogCiBib29sIEhUTUxQcmVsb2FkU2Nhbm5lcjo6c2Nhbm5pbmdCb2R5
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCmluZGV4IGMxMmJlMmZm
OWQ0NTU3NGU0MWQ0ZjQ3MDhjYjk2YmI0ZDVhN2VjNGIuLmUyMjQ3ZDI1NGM3Zjg2MDllZjZlYTJh
OTc3M2I1ZjlmN2QxYjY5NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFn
ZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcApA
QCAtMTc5LDYgKzE3OSw3IEBAIHZvaWQgSW1hZ2VMb2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KCkK
ICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRJbWFnZT4gbmV3SW1hZ2UgPSAwOwogICAg
IGlmICghYXR0ci5pc051bGwoKSAmJiAhc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2Vz
KGF0dHIpLmlzRW1wdHkoKSkgewogICAgICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVz
dChSZXNvdXJjZVJlcXVlc3QoZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc291cmNlVVJJKGF0dHIp
KSkpOworICAgICAgICByZXF1ZXN0LnNldEluaXRpYXRvcihjbGllbnQoKS0+c291cmNlRWxlbWVu
dCgpKTsKIAogICAgICAgICBTdHJpbmcgY3Jvc3NPcmlnaW5Nb2RlID0gY2xpZW50KCktPnNvdXJj
ZUVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmNyb3Nzb3JpZ2luQXR0cik7
CiAgICAgICAgIGlmICghY3Jvc3NPcmlnaW5Nb2RlLmlzTnVsbCgpKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCmluZGV4IGYxOGQ5MTM1MmRj
Y2JhOGYzM2ZlYzg2ZjMwNDk3ODI0NWM2OTRhZTkuLjYwZTk2OGEyYmM3ZTJhZDE1NGM5YjAzM2Nk
MmIxN2IxN2NhZDVjMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRTY2hlZHVsZXIuY3BwCkBAIC0xMTYsMTEgKzExNiwxMSBAQCBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6On5SZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQogewogfQogCi1QYXNzUmVmUHRyPFN1YnJlc291
cmNlTG9hZGVyPiBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU3VicmVzb3VyY2VMb2Fk
KEZyYW1lKiBmcmFtZSwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5LCBjb25zdCBSZXNv
dXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCitQYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVy
PiBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKEZyYW1lKiBm
cmFtZSwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBDYWNoZWRSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QpCiB7Ci0gICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBT
dWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGZyYW1lLCByZXNvdXJjZSwgcmVxdWVzdCwgb3B0aW9u
cyk7CisgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxv
YWRlcjo6Y3JlYXRlKGZyYW1lLCByZXNvdXJjZSwgcmVxdWVzdCk7CiAgICAgaWYgKGxvYWRlcikK
LSAgICAgICAgc2NoZWR1bGVMb2FkKGxvYWRlci5nZXQoKSwgcHJpb3JpdHkpOworICAgICAgICBz
Y2hlZHVsZUxvYWQobG9hZGVyLmdldCgpLCByZXF1ZXN0LnByaW9yaXR5KCkpOwogICAgIHJldHVy
biBsb2FkZXIucmVsZWFzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmgKaW5kZXggMjBlNWFhN2Q2N2JhODg2Y2ZhMGU1OWQxMzlmNmQzNmQw
YTU4NzViOS4uNDE5ODk2OTk4ZjdkM2Q1YTAzMzM1ZjZkZGQyYjJmNWNiMTc4ODc4MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaApAQCAtMzcsNiAr
MzcsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKK2Ns
YXNzIENhY2hlZFJlc291cmNlUmVxdWVzdDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgS1VSTDsKIGNs
YXNzIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOwpAQCAtNTAsNyArNTEsNyBAQCBjbGFzcyBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIgewogcHVibGljOgogICAgIGZyaWVuZCBSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogCi0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPFN1YnJlc291cmNlTG9hZGVyPiBzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSosIENh
Y2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VMb2FkUHJpb3Jp
dHksIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxTdWJyZXNvdXJjZUxvYWRlcj4gc2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoRnJhbWUqLCBDYWNo
ZWRSZXNvdXJjZSosIGNvbnN0IENhY2hlZFJlc291cmNlUmVxdWVzdCYpOwogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gc2NoZWR1bGVQbHVnaW5TdHJl
YW1Mb2FkKEZyYW1lKiwgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQqLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkTWFpblJlc291cmNlTG9hZChS
ZXNvdXJjZUxvYWRlciopOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2FkZXIq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IGU2
N2YxMDI3YTk2MWE0Y2E2MjJiZTBjNDlhZjkyYTk4MzEzNTY2OGQuLmIxZDJlMGE2YzE2ZjY4NjJj
ZmVlNWI5NzZhNGQ5ZGRlOTMwOWQ1M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJl
c291cmNlTG9hZGVyLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgpAQCAtNTcsMTIgKzU4LDEz
IEBAIFN1YnJlc291cmNlTG9hZGVyOjpSZXF1ZXN0Q291bnRUcmFja2VyOjp+UmVxdWVzdENvdW50
VHJhY2tlcigpCiAgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+ZGVjcmVtZW50UmVxdWVzdENv
dW50KG1fcmVzb3VyY2UpOwogfQogCi1TdWJyZXNvdXJjZUxvYWRlcjo6U3VicmVzb3VyY2VMb2Fk
ZXIoRnJhbWUqIGZyYW1lLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNl
TG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IFJlc291cmNlTG9hZGVyKGZyYW1lLCBvcHRp
b25zKQorU3VicmVzb3VyY2VMb2FkZXI6OlN1YnJlc291cmNlTG9hZGVyKEZyYW1lKiBmcmFtZSwg
Q2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCisgICAgOiBSZXNvdXJjZUxvYWRlcihmcmFtZSwgcmVxdWVzdC5vcHRpb25zKCkpCiAg
ICAgLCBtX3Jlc291cmNlKHJlc291cmNlKQogICAgICwgbV9sb2FkaW5nTXVsdGlwYXJ0Q29udGVu
dChmYWxzZSkKICAgICAsIG1fc3RhdGUoVW5pbml0aWFsaXplZCkKICAgICAsIG1fcmVxdWVzdENv
dW50VHJhY2tlcihhZG9wdFB0cihuZXcgUmVxdWVzdENvdW50VHJhY2tlcihmcmFtZS0+ZG9jdW1l
bnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSwgcmVzb3VyY2UpKSkKKyAgICAsIG1fY2FjaGVk
UmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpCiB7CiAjaWZuZGVmIE5ERUJVRwogICAgIHN1YnJlc291
cmNlTG9hZGVyQ291bnRlci5pbmNyZW1lbnQoKTsKQEAgLTc4LDkgKzgwLDkgQEAgU3VicmVzb3Vy
Y2VMb2FkZXI6On5TdWJyZXNvdXJjZUxvYWRlcigpCiAjZW5kaWYKIH0KIAotUGFzc1JlZlB0cjxT
dWJyZXNvdXJjZUxvYWRlcj4gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShGcmFtZSogZnJhbWUs
IENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCitQYXNzUmVmUHRyPFN1YnJl
c291cmNlTG9hZGVyPiBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgQ2Fj
aGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QpCiB7Ci0gICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBzdWJsb2FkZXIoYWRvcHRSZWYo
bmV3IFN1YnJlc291cmNlTG9hZGVyKGZyYW1lLCByZXNvdXJjZSwgb3B0aW9ucykpKTsKKyAgICBS
ZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IHN1YmxvYWRlcihhZG9wdFJlZihuZXcgU3VicmVzb3Vy
Y2VMb2FkZXIoZnJhbWUsIHJlc291cmNlLCByZXF1ZXN0KSkpOwogICAgIGlmICghc3VibG9hZGVy
LT5pbml0KHJlcXVlc3QpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc3VibG9hZGVy
LnJlbGVhc2UoKTsKQEAgLTEwOCwxNCArMTEwLDE1IEBAIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6
OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNv
CiAgICAgaW5mby5hZGRNZW1iZXIobV9yZXF1ZXN0Q291bnRUcmFja2VyKTsKIH0KIAotYm9vbCBT
dWJyZXNvdXJjZUxvYWRlcjo6aW5pdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiti
b29sIFN1YnJlc291cmNlTG9hZGVyOjppbml0KGNvbnN0IENhY2hlZFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKIHsKLSAgICBpZiAoIVJlc291cmNlTG9hZGVyOjppbml0KHJlcXVlc3QpKQorICAg
IGlmICghUmVzb3VyY2VMb2FkZXI6OmluaXQocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFTU0VSVCghcmVhY2hlZFRlcm1pbmFsU3RhdGUo
KSk7CiAgICAgbV9zdGF0ZSA9IEluaXRpYWxpemVkOwogICAgIG1fZG9jdW1lbnRMb2FkZXItPmFk
ZFN1YnJlc291cmNlTG9hZGVyKHRoaXMpOworICAgIG1fY2FjaGVkUmVzb3VyY2VSZXF1ZXN0ID0g
cmVxdWVzdDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3Vi
cmVzb3VyY2VMb2FkZXIuaAppbmRleCBhMDYwMGVkYTI0ZmRmNGQ1NDAzZWM2ZmM4YzcxYzkxNTFl
OGM5NTRhLi44MjhhYzg5MjEzMzIwNzllZWNkYTUwODcxNDYxZTA3NGJkYzAwMTcyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaApAQCAtMjksNiArMjksNyBAQAog
I2lmbmRlZiBTdWJyZXNvdXJjZUxvYWRlcl9oCiAjZGVmaW5lIFN1YnJlc291cmNlTG9hZGVyX2gK
IAorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyVHlwZXMuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgogCkBAIC00Myw3ICs0NCw3
IEBAIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIAogY2xhc3MgU3VicmVzb3VyY2VMb2FkZXIgOiBw
dWJsaWMgUmVzb3VyY2VMb2FkZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN1
YnJlc291cmNlTG9hZGVyPiBjcmVhdGUoRnJhbWUqLCBDYWNoZWRSZXNvdXJjZSosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBjcmVhdGUoRnJhbWUqLCBDYWNoZWRSZXNv
dXJjZSosIGNvbnN0IENhY2hlZFJlc291cmNlUmVxdWVzdCYpOwogCiAgICAgdm9pZCBjYW5jZWxJ
Zk5vdEZpbmlzaGluZygpOwogICAgIHZpcnR1YWwgYm9vbCBpc1N1YnJlc291cmNlTG9hZGVyKCk7
CkBAIC01MiwxMCArNTMsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1v
cnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3QgT1ZFUlJJREU7CiAKIHByaXZhdGU6Ci0g
ICAgU3VicmVzb3VyY2VMb2FkZXIoRnJhbWUqLCBDYWNoZWRSZXNvdXJjZSosIGNvbnN0IFJlc291
cmNlTG9hZGVyT3B0aW9ucyYpOworICAgIFN1YnJlc291cmNlTG9hZGVyKEZyYW1lKiwgQ2FjaGVk
UmVzb3VyY2UqLCBjb25zdCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsKICAgICB2aXJ0dWFsIH5T
dWJyZXNvdXJjZUxvYWRlcigpOwogCi0gICAgdmlydHVhbCBib29sIGluaXQoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0Jik7CisgICAgdmlydHVhbCBib29sIGluaXQoY29uc3QgQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIHZp
cnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNp
Z25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKQEAgLTk4LDYgKzk5LDcgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fbG9hZGluZ011bHRpcGFydENvbnRlbnQ7CiAgICAgU3VicmVzb3Vy
Y2VMb2FkZXJTdGF0ZSBtX3N0YXRlOwogICAgIE93blB0cjxSZXF1ZXN0Q291bnRUcmFja2VyPiBt
X3JlcXVlc3RDb3VudFRyYWNrZXI7CisgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IG1fY2FjaGVk
UmVzb3VyY2VSZXF1ZXN0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZEZvbnQuY3BwCmluZGV4IGYxMTliOTM2OWE2OWE1NTQ3ODVlYzE2ZjAzY2E3NjdhZjFkYjVi
YjAuLjJmYzk0NTBhOTk3ZmJlZTRkOWJkODk2YmUwODQwMjFiOTU5YWYyMjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAKQEAgLTk5LDcgKzk5LDcgQEAgdm9p
ZCBDYWNoZWRGb250OjpiZWdpbkxvYWRJZk5lZWRlZChDYWNoZWRSZXNvdXJjZUxvYWRlciogZGwp
CiB7CiAgICAgaWYgKCFtX2xvYWRJbml0aWF0ZWQpIHsKICAgICAgICAgbV9sb2FkSW5pdGlhdGVk
ID0gdHJ1ZTsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2U6OmxvYWQoZGwsIG1fb3B0aW9ucyk7Cisg
ICAgICAgIENhY2hlZFJlc291cmNlOjpsb2FkKGRsLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QobV9y
ZXNvdXJjZVJlcXVlc3QsIG1fb3B0aW9ucykpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKaW5kZXggMzVhNmM1MjBhYjZlNTY3NmUxMGE2
MmViOGVlY2JmNDVlMDcxMDBkNS4uNDBkNjNiODQyY2I4NzQ1MjMxYzhjNDc2ZDBmNjA2ZTBiMDI3
YzI2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCkBA
IC03NiwxMCArNzYsMTAgQEAgQ2FjaGVkSW1hZ2U6On5DYWNoZWRJbWFnZSgpCiAgICAgY2xlYXJJ
bWFnZSgpOwogfQogCi12b2lkIENhY2hlZEltYWdlOjpsb2FkKENhY2hlZFJlc291cmNlTG9hZGVy
KiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRp
b25zKQordm9pZCBDYWNoZWRJbWFnZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVk
UmVzb3VyY2VMb2FkZXIsIGNvbnN0IENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsK
ICAgICBpZiAoIWNhY2hlZFJlc291cmNlTG9hZGVyIHx8IGNhY2hlZFJlc291cmNlTG9hZGVyLT5h
dXRvTG9hZEltYWdlcygpKQotICAgICAgICBDYWNoZWRSZXNvdXJjZTo6bG9hZChjYWNoZWRSZXNv
dXJjZUxvYWRlciwgb3B0aW9ucyk7CisgICAgICAgIENhY2hlZFJlc291cmNlOjpsb2FkKGNhY2hl
ZFJlc291cmNlTG9hZGVyLCByZXF1ZXN0KTsKICAgICBlbHNlCiAgICAgICAgIHNldExvYWRpbmco
ZmFsc2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAppbmRl
eCBhZDFjODAyMDg0ZTMwYjI2NmZjYTU3Zjc3MmM5MmNlNjdiNjZmMjNhLi4xYzAyNTIyM2ViNDc0
OGEzOTBmYjFlNzVhZTAwYzU5NDQ0N2Q2YjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkSW1hZ2UuaApAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgQ2FjaGVkSW1h
Z2UoSW1hZ2UqKTsKICAgICB2aXJ0dWFsIH5DYWNoZWRJbWFnZSgpOwogICAgIAotICAgIHZpcnR1
YWwgdm9pZCBsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VMb2FkZXJP
cHRpb25zJik7CisgICAgdmlydHVhbCB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqLCBj
b25zdCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsKIAogICAgIEltYWdlKiBpbWFnZSgpOyAvLyBS
ZXR1cm5zIHRoZSBudWxsSW1hZ2UoKSBpZiB0aGUgaW1hZ2UgaXMgbm90IGF2YWlsYWJsZSB5ZXQu
CiAgICAgSW1hZ2UqIGltYWdlRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0Kik7IC8vIFJl
dHVybnMgdGhlIG51bGxJbWFnZSgpIGlmIHRoZSBpbWFnZSBpcyBub3QgYXZhaWxhYmxlIHlldC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCmluZGV4
IGNhM2ZlMTM2MzA0MDcxNTdiN2ZiMzUxZDY4YWI0ZWIwMTQzMzY2OGIuLjI2MWJkZTc0ZDRkNGY3
NjJjYWYzOGJlMzE4MDJmMjkyMWQxODQwZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcApAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgQ2FjaGVk
UmVzb3VyY2U6OmFkZEFkZGl0aW9uYWxSZXF1ZXN0SGVhZGVycyhDYWNoZWRSZXNvdXJjZUxvYWRl
ciogY2FjaGVkUmVzCiAgICAgZnJhbWVMb2FkZXItPmFkZEV4dHJhRmllbGRzVG9TdWJyZXNvdXJj
ZVJlcXVlc3QobV9yZXNvdXJjZVJlcXVlc3QpOwogfQogCi12b2lkIENhY2hlZFJlc291cmNlOjps
b2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgY29uc3QgUmVz
b3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQordm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9hZChD
YWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIGNvbnN0IENhY2hlZFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBpZiAoIWNhY2hlZFJlc291cmNlTG9hZGVy
LT5mcmFtZSgpKSB7CiAgICAgICAgIGZhaWxCZWZvcmVTdGFydGluZygpOwpAQCAtMjUxLDIxICsy
NTEsMjEgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciog
Y2FjaGVkUmVzb3VyY2VMb2FkZXIsIGNvbnN0IFJlc28KICAgICB9CiAKICAgICBGcmFtZUxvYWRl
ciogZnJhbWVMb2FkZXIgPSBjYWNoZWRSZXNvdXJjZUxvYWRlci0+ZnJhbWUoKS0+bG9hZGVyKCk7
Ci0gICAgaWYgKG9wdGlvbnMuc2VjdXJpdHlDaGVjayA9PSBEb1NlY3VyaXR5Q2hlY2sgJiYgKGZy
YW1lTG9hZGVyLT5zdGF0ZSgpID09IEZyYW1lU3RhdGVQcm92aXNpb25hbCB8fCAhZnJhbWVMb2Fk
ZXItPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkgfHwgZnJhbWVMb2FkZXItPmFjdGl2ZURvY3VtZW50
TG9hZGVyKCktPmlzU3RvcHBpbmcoKSkpIHsKKyAgICBpZiAocmVxdWVzdC5vcHRpb25zKCkuc2Vj
dXJpdHlDaGVjayA9PSBEb1NlY3VyaXR5Q2hlY2sgJiYgKGZyYW1lTG9hZGVyLT5zdGF0ZSgpID09
IEZyYW1lU3RhdGVQcm92aXNpb25hbCB8fCAhZnJhbWVMb2FkZXItPmFjdGl2ZURvY3VtZW50TG9h
ZGVyKCkgfHwgZnJhbWVMb2FkZXItPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPmlzU3RvcHBpbmco
KSkpIHsKICAgICAgICAgZmFpbEJlZm9yZVN0YXJ0aW5nKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBtX29wdGlvbnMgPSBvcHRpb25zOwogICAgIG1fbG9hZGluZyA9IHRydWU7Cisg
ICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IG11dGFibGVSZXF1ZXN0ID0gcmVxdWVzdDsKIAogI2lm
IFBMQVRGT1JNKENIUk9NSVVNKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKQotICAgIGlmIChtX3Jl
c291cmNlUmVxdWVzdC50YXJnZXRUeXBlKCkgPT0gUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc1Vu
c3BlY2lmaWVkKQotICAgICAgICBtX3Jlc291cmNlUmVxdWVzdC5zZXRUYXJnZXRUeXBlKGNhY2hl
ZFJlc291cmNlVHlwZVRvVGFyZ2V0VHlwZSh0eXBlKCkpKTsKKyAgICBpZiAobXV0YWJsZVJlcXVl
c3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLnRhcmdldFR5cGUoKSA9PSBSZXNvdXJjZVJlcXVl
c3Q6OlRhcmdldElzVW5zcGVjaWZpZWQpCisgICAgICAgIG11dGFibGVSZXF1ZXN0Lm11dGFibGVS
ZXNvdXJjZVJlcXVlc3QoKS5zZXRUYXJnZXRUeXBlKGNhY2hlZFJlc291cmNlVHlwZVRvVGFyZ2V0
VHlwZSh0eXBlKCkpKTsKICNlbmRpZgogCiAgICAgaWYgKCFhY2NlcHQoKS5pc0VtcHR5KCkpCi0g
ICAgICAgIG1fcmVzb3VyY2VSZXF1ZXN0LnNldEhUVFBBY2NlcHQoYWNjZXB0KCkpOworICAgICAg
ICBtdXRhYmxlUmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUEFjY2VwdChh
Y2NlcHQoKSk7CiAKICAgICBpZiAoaXNDYWNoZVZhbGlkYXRvcigpKSB7CiAgICAgICAgIENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZVRvUmV2YWxpZGF0ZSA9IG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7
CkBAIC0yNzYsMjcgKzI3NiwzMCBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpsb2FkKENhY2hlZFJl
c291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgY29uc3QgUmVzbwogICAgICAgICBp
ZiAoIWxhc3RNb2RpZmllZC5pc0VtcHR5KCkgfHwgIWVUYWcuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICBBU1NFUlQoY2FjaGVkUmVzb3VyY2VMb2FkZXItPmNhY2hlUG9saWN5KCkgIT0gQ2FjaGVQ
b2xpY3lSZWxvYWQpOwogICAgICAgICAgICAgaWYgKGNhY2hlZFJlc291cmNlTG9hZGVyLT5jYWNo
ZVBvbGljeSgpID09IENhY2hlUG9saWN5UmV2YWxpZGF0ZSkKLSAgICAgICAgICAgICAgICBtX3Jl
c291cmNlUmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkNhY2hlLUNvbnRyb2wiLCAibWF4LWFn
ZT0wIik7CisgICAgICAgICAgICAgICAgbXV0YWJsZVJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVx
dWVzdCgpLnNldEhUVFBIZWFkZXJGaWVsZCgiQ2FjaGUtQ29udHJvbCIsICJtYXgtYWdlPTAiKTsK
ICAgICAgICAgICAgIGlmICghbGFzdE1vZGlmaWVkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICBtX3Jlc291cmNlUmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIklmLU1vZGlmaWVkLVNpbmNl
IiwgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgICAgICAgICBtdXRhYmxlUmVxdWVzdC5tdXRhYmxl
UmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUEhlYWRlckZpZWxkKCJJZi1Nb2RpZmllZC1TaW5jZSIs
IGxhc3RNb2RpZmllZCk7CiAgICAgICAgICAgICBpZiAoIWVUYWcuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgICAgIG1fcmVzb3VyY2VSZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgiSWYtTm9uZS1N
YXRjaCIsIGVUYWcpOworICAgICAgICAgICAgICAgIG11dGFibGVSZXF1ZXN0Lm11dGFibGVSZXNv
dXJjZVJlcXVlc3QoKS5zZXRIVFRQSGVhZGVyRmllbGQoIklmLU5vbmUtTWF0Y2giLCBlVGFnKTsK
ICAgICAgICAgfQogICAgIH0KIAogI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQogICAgIGlmICh0
eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaCB8fCB0eXBlKCkgPT0gQ2FjaGVk
UmVzb3VyY2U6OkxpbmtTdWJyZXNvdXJjZSkKLSAgICAgICAgbV9yZXNvdXJjZVJlcXVlc3Quc2V0
SFRUUEhlYWRlckZpZWxkKCJQdXJwb3NlIiwgInByZWZldGNoIik7CisgICAgICAgIG11dGFibGVS
ZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQSGVhZGVyRmllbGQoIlB1cnBv
c2UiLCAicHJlZmV0Y2giKTsKICNlbmRpZgotICAgIG1fcmVzb3VyY2VSZXF1ZXN0LnNldFByaW9y
aXR5KGxvYWRQcmlvcml0eSgpKTsKKyAgICBtdXRhYmxlUmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VS
ZXF1ZXN0KCkuc2V0UHJpb3JpdHkobG9hZFByaW9yaXR5KCkpOwogCiAgICAgaWYgKHR5cGUoKSAh
PSBNYWluUmVzb3VyY2UpCiAgICAgICAgIGFkZEFkZGl0aW9uYWxSZXF1ZXN0SGVhZGVycyhjYWNo
ZWRSZXNvdXJjZUxvYWRlcik7CiAKKyAgICBtX29wdGlvbnMgPSByZXF1ZXN0Lm9wdGlvbnMoKTsK
KyAgICBtX3Jlc291cmNlUmVxdWVzdCA9IG11dGFibGVSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgp
OworCiAjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCi0gICAgbV9sb2FkZXIgPSBwbGF0Zm9y
bVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkt
PnNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyLT5mcmFtZSgpLCB0
aGlzLCBtX3Jlc291cmNlUmVxdWVzdCwgbV9yZXNvdXJjZVJlcXVlc3QucHJpb3JpdHkoKSwgb3B0
aW9ucyk7CisgICAgbV9sb2FkZXIgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRl
Z3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKGNh
Y2hlZFJlc291cmNlTG9hZGVyLT5mcmFtZSgpLCB0aGlzLCBtdXRhYmxlUmVxdWVzdCk7CiAjZWxz
ZQotICAgIG1fbG9hZGVyID0gcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNjaGVkdWxlU3VicmVz
b3VyY2VMb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyLT5mcmFtZSgpLCB0aGlzLCBtX3Jlc291cmNl
UmVxdWVzdCwgbV9yZXNvdXJjZVJlcXVlc3QucHJpb3JpdHkoKSwgb3B0aW9ucyk7CisgICAgbV9s
b2FkZXIgPSByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQo
Y2FjaGVkUmVzb3VyY2VMb2FkZXItPmZyYW1lKCksIHRoaXMsIG11dGFibGVSZXF1ZXN0KTsKICNl
bmRpZgogCiAgICAgaWYgKCFtX2xvYWRlcikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2UuaAppbmRleCAwM2QyOGMyMDdjYmFjYTdiMmUyY2QzODRhYWI2OGYw
MDg5NWFiNTdlLi4zMWI4OWI3NmY4OWFkZmIwYjZjMTcyZjg4ZmE4MWYxNWIwY2E2NjBlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaApAQCAtMjQsNiAr
MjQsNyBAQAogI2RlZmluZSBDYWNoZWRSZXNvdXJjZV9oCiAKICNpbmNsdWRlICJDYWNoZVBvbGlj
eS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIkZyYW1l
TG9hZGVyVHlwZXMuaCIKICNpbmNsdWRlICJQdXJnZVByaW9yaXR5LmgiCiAjaW5jbHVkZSAiUmVz
b3VyY2VMb2FkUHJpb3JpdHkuaCIKQEAgLTk2LDcgKzk3LDcgQEAgcHVibGljOgogICAgIENhY2hl
ZFJlc291cmNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFR5cGUpOwogICAgIHZpcnR1YWwgfkNh
Y2hlZFJlc291cmNlKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJjZUxv
YWRlciosIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpOworICAgIHZpcnR1YWwgdm9pZCBs
b2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiwgY29uc3QgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7
CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJikgeyB9CiAgICAg
dmlydHVhbCBTdHJpbmcgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQpAQCAt
MTA5LDkgKzExMCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNob3VsZElnbm9yZUhU
VFBTdGF0dXNDb2RlRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIFJlc291
cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KCkgeyByZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3Q7
IH0KLSAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlUmVxdWVz
dC51cmwoKTt9CisgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QoKSBj
b25zdCB7IHJldHVybiBtX3Jlc291cmNlUmVxdWVzdDsgfQorICAgIGNvbnN0IEtVUkwmIHVybCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpOyB9CiAgICAgVHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4obV90eXBlKTsgfQotICAgIAorCiAg
ICAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgbG9hZFByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gbV9s
b2FkUHJpb3JpdHk7IH0KICAgICB2b2lkIHNldExvYWRQcmlvcml0eShSZXNvdXJjZUxvYWRQcmlv
cml0eSk7CiAKQEAgLTI1NSw2ICsyNTcsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCisgICAgQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0KiBpbml0aWFsUmVxdWVzdCgpIHsgcmV0dXJuIG1faW5pdGlhbFJlcXVl
c3QuZ2V0KCk7IH0KKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBjaGVja05vdGlmeSgp
OwogCkBAIC0zNTcsNiArMzYxLDggQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZXNlIGhhbmRsZXMg
d2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIG1fcmVzb3VyY2VUb1JldmFs
aWRhdGUgaW4gY2FzZSB3ZSBnZXQgMzA0IHJlc3BvbnNlLgogICAgIEhhc2hTZXQ8Q2FjaGVkUmVz
b3VyY2VIYW5kbGVCYXNlKj4gbV9oYW5kbGVzVG9SZXZhbGlkYXRlOworCisgICAgT3duUHRyPENh
Y2hlZFJlc291cmNlUmVxdWVzdD4gbV9pbml0aWFsUmVxdWVzdDsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCmlu
ZGV4IGQ0Y2JhMDU5MTMxOTAwZTE5MGNjZjU4ZTZmZTBkMTZkOGQwNzU1NTYuLjYyNzZhZGM4MjVj
OTNkYzQ5MTliOTJkZmZiNzZmNGU1YjkxNTk0OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcApAQCAtMTY0LDcgKzE2NCw3
IEBAIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZEltYWdlPiBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6cmVxdWVzdEltYWdlKENhY2hlZFJlc291CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgfQogICAgIH0KLSAgICByZXF1ZXN0LnNldERlZmVyKGNsaWVudERlZmVyc0ltYWdlKHJlcXVl
c3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkpID8gRGVmZXJyZWRCeUNsaWVudCA6IE5vRGVmZXIp
OworICAgIHJlcXVlc3Quc2V0RGVmZXIoY2xpZW50RGVmZXJzSW1hZ2UocmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS51cmwoKSkgPyBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OkRlZmVycmVkQnlDbGll
bnQgOiBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6Ok5vRGVmZXIpOwogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxDYWNoZWRJbWFnZSo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6SW1hZ2VS
ZXNvdXJjZSwgcmVxdWVzdCkuZ2V0KCkpOwogfQogCkBAIC0yMDksOCArMjA5LDkgQEAgQ2FjaGVk
UmVzb3VyY2VIYW5kbGU8Q2FjaGVkQ1NTU3R5bGVTaGVldD4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OnJlcXVlc3RVc2VyQ1NTU3QKICAgICBtZW1vcnlDYWNoZSgpLT5hZGQodXNlclNoZWV0LmdldCgp
KTsKICAgICAvLyBGSVhNRTogbG9hZFJlc291cmNlIGNhbGxzIHNldE93bmluZ0NhY2hlZFJlc291
cmNlTG9hZGVyKCkgaWYgdGhlIHJlc291cmNlIGNvdWxkbid0IGJlIGFkZGVkIHRvIGNhY2hlLiBE
b2VzIHRoaXMgZnVuY3Rpb24gbmVlZCB0byBjYWxsIGl0LCB0b28/CiAKLSAgICB1c2VyU2hlZXQt
PmxvYWQodGhpcywgUmVzb3VyY2VMb2FkZXJPcHRpb25zKERvTm90U2VuZENhbGxiYWNrcywgU25p
ZmZDb250ZW50LCBCdWZmZXJEYXRhLCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBBc2tDbGllbnRG
b3JDcm9zc09yaWdpbkNyZWRlbnRpYWxzLCBTa2lwU2VjdXJpdHlDaGVjaykpOwotICAgIAorICAg
IHJlcXVlc3Quc2V0T3B0aW9ucyhSZXNvdXJjZUxvYWRlck9wdGlvbnMoRG9Ob3RTZW5kQ2FsbGJh
Y2tzLCBTbmlmZkNvbnRlbnQsIEJ1ZmZlckRhdGEsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIEFz
a0NsaWVudEZvckNyb3NzT3JpZ2luQ3JlZGVudGlhbHMsIFNraXBTZWN1cml0eUNoZWNrKSk7Cisg
ICAgdXNlclNoZWV0LT5sb2FkKHRoaXMsIHJlcXVlc3QpOworCiAgICAgcmV0dXJuIHVzZXJTaGVl
dDsKIH0KIApAQCAtNDU4LDggKzQ1OSw4IEBAIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJl
c291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJlc291cmNlKENhY2hlCiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgcmVzb3VyY2UtPnNldExvYWRQcmlvcml0eShyZXF1ZXN0LnBy
aW9yaXR5KCkpOwotICAgIGlmICgocG9saWN5ICE9IFVzZSB8fCByZXNvdXJjZS0+c3RpbGxOZWVk
c0xvYWQoKSkgJiYgTm9EZWZlciA9PSByZXF1ZXN0LmRlZmVyKCkpIHsKLSAgICAgICAgcmVzb3Vy
Y2UtPmxvYWQodGhpcywgcmVxdWVzdC5vcHRpb25zKCkpOworICAgIGlmICgocG9saWN5ICE9IFVz
ZSB8fCByZXNvdXJjZS0+c3RpbGxOZWVkc0xvYWQoKSkgJiYgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0
OjpOb0RlZmVyID09IHJlcXVlc3QuZGVmZXIoKSkgeworICAgICAgICByZXNvdXJjZS0+bG9hZCh0
aGlzLCByZXF1ZXN0KTsKIAogICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGltbWVkaWF0ZSBs
b2FkcywgYnV0IHdlIGRvIHN1cHBvcnQgaW1tZWRpYXRlIGZhaWx1cmUuCiAgICAgICAgIGlmIChy
ZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpKSB7CkBAIC01MTAsNyArNTExLDcgQEAgQ2FjaGVkUmVz
b3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpsb2FkUmVz
b3VyY2UoQ2FjaGVkUmUKICAgICByZXR1cm4gcmVzb3VyY2U7CiB9CiAKLUNhY2hlZFJlc291cmNl
TG9hZGVyOjpSZXZhbGlkYXRpb25Qb2xpY3kgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWlu
ZVJldmFsaWRhdGlvblBvbGljeShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIGJvb2wgZm9yUHJlbG9hZCwgQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5n
UmVzb3VyY2UsIERlZmVyT3B0aW9uIGRlZmVyKSBjb25zdAorQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OlJldmFsaWRhdGlvblBvbGljeSBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxp
ZGF0aW9uUG9saWN5KENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgYm9vbCBmb3JQcmVsb2FkLCBDYWNoZWRSZXNvdXJjZSogZXhpc3RpbmdSZXNvdXJj
ZSwgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpEZWZlck9wdGlvbiBkZWZlcikgY29uc3QKIHsKICAg
ICBpZiAoIWV4aXN0aW5nUmVzb3VyY2UpCiAgICAgICAgIHJldHVybiBMb2FkOwpAQCAtNTM5LDcg
KzU0MCw3IEBAIENhY2hlZFJlc291cmNlTG9hZGVyOjpSZXZhbGlkYXRpb25Qb2xpY3kgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJldmFsaWRhCiAKICAgICAvLyBEbyBub3QgbG9hZCBm
cm9tIGNhY2hlIGlmIGltYWdlcyBhcmUgbm90IGVuYWJsZWQuIFRoZSBsb2FkIGZvciB0aGlzIGlt
YWdlIHdpbGwgYmUgYmxvY2tlZAogICAgIC8vIGluIENhY2hlZEltYWdlOjpsb2FkLgotICAgIGlm
IChEZWZlcnJlZEJ5Q2xpZW50ID09IGRlZmVyKQorICAgIGlmIChDYWNoZWRSZXNvdXJjZVJlcXVl
c3Q6OkRlZmVycmVkQnlDbGllbnQgPT0gZGVmZXIpCiAgICAgICAgIHJldHVybiBSZWxvYWQ7CiAg
ICAgCiAgICAgLy8gRG9uJ3QgcmVsb2FkIHJlc291cmNlcyB3aGlsZSBwYXN0aW5nLgpAQCAtNjY5
LDcgKzY3MCw3IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlbG9hZEltYWdlc0lmTm90
RGVmZXJyZWQoKQogICAgIGZvciAoRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X2RvY3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBD
YWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChy
ZXNvdXJjZS0+dHlwZSgpID09IENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlICYmIHJlc291
cmNlLT5zdGlsbE5lZWRzTG9hZCgpICYmICFjbGllbnREZWZlcnNJbWFnZShyZXNvdXJjZS0+dXJs
KCkpKQotICAgICAgICAgICAgY29uc3RfY2FzdDxDYWNoZWRSZXNvdXJjZSo+KHJlc291cmNlKS0+
bG9hZCh0aGlzLCBkZWZhdWx0Q2FjaGVkUmVzb3VyY2VPcHRpb25zKCkpOworICAgICAgICAgICAg
Y29uc3RfY2FzdDxDYWNoZWRSZXNvdXJjZSo+KHJlc291cmNlKS0+bG9hZCh0aGlzLCBDYWNoZWRS
ZXNvdXJjZVJlcXVlc3QocmVzb3VyY2UtPnJlc291cmNlUmVxdWVzdCgpLCBkZWZhdWx0Q2FjaGVk
UmVzb3VyY2VPcHRpb25zKCkpKTsKICAgICB9CiB9CiAKQEAgLTc2NCw4ICs3NjUsOCBAQCB2b2lk
IENhY2hlZFJlc291cmNlTG9hZGVyOjpkZWNyZW1lbnRSZXF1ZXN0Q291bnQoY29uc3QgQ2FjaGVk
UmVzb3VyY2UqIHJlcykKICAgICAtLW1fcmVxdWVzdENvdW50OwogICAgIEFTU0VSVChtX3JlcXVl
c3RDb3VudCA+IC0xKTsKIH0KLSAgICAKLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnByZWxv
YWQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBTdHJpbmcmIGNoYXJzZXQsIGJvb2wgcmVmZXJlbmNlZEZyb21Cb2R5KQorCit2b2lkIENh
Y2hlZFJlc291cmNlTG9hZGVyOjpwcmVsb2FkKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIENh
Y2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBib29s
IHJlZmVyZW5jZWRGcm9tQm9keSkKIHsKICAgICAvLyBGSVhNRTogUmlwIHRoaXMgb3V0IHdoZW4g
d2UgYXJlIHN1cmUgaXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSAoZXZlbiBmb3IgbW9iaWxlKS4K
ICAgICBVTlVTRURfUEFSQU0ocmVmZXJlbmNlZEZyb21Cb2R5KTsKQEAgLTc4OCwyOSArNzg5LDI4
IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlR5
cGUgdHlwZSwgUmVzb3VyY2VSZXF1ZXN0JiByCiAgICAgcmVxdWVzdFByZWxvYWQodHlwZSwgcmVx
dWVzdCwgY2hhcnNldCk7CiB9CiAKLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNoZWNrRm9y
UGVuZGluZ1ByZWxvYWRzKCkgCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpjaGVja0ZvclBl
bmRpbmdQcmVsb2FkcygpCiB7CiAgICAgaWYgKG1fcGVuZGluZ1ByZWxvYWRzLmlzRW1wdHkoKSB8
fCAhbV9kb2N1bWVudC0+Ym9keSgpIHx8ICFtX2RvY3VtZW50LT5ib2R5KCktPnJlbmRlcmVyKCkp
CiAgICAgICAgIHJldHVybjsKICAgICB3aGlsZSAoIW1fcGVuZGluZ1ByZWxvYWRzLmlzRW1wdHko
KSkgewogICAgICAgICBQZW5kaW5nUHJlbG9hZCBwcmVsb2FkID0gbV9wZW5kaW5nUHJlbG9hZHMu
dGFrZUZpcnN0KCk7CiAgICAgICAgIC8vIERvbid0IHJlcXVlc3QgcHJlbG9hZCBpZiB0aGUgcmVz
b3VyY2UgYWxyZWFkeSBsb2FkZWQgbm9ybWFsbHkgKHRoaXMgd2lsbCByZXN1bHQgaW4gZG91Ymxl
IGxvYWQgaWYgdGhlIHBhZ2UgaXMgYmVpbmcgcmVsb2FkZWQgd2l0aCBjYWNoZWQgcmVzdWx0cyBp
Z25vcmVkKS4KLSAgICAgICAgaWYgKCFjYWNoZWRSZXNvdXJjZShwcmVsb2FkLm1fcmVxdWVzdC51
cmwoKSkpCisgICAgICAgIGlmICghY2FjaGVkUmVzb3VyY2UocHJlbG9hZC5tX3JlcXVlc3QucmVz
b3VyY2VSZXF1ZXN0KCkudXJsKCkpKQogICAgICAgICAgICAgcmVxdWVzdFByZWxvYWQocHJlbG9h
ZC5tX3R5cGUsIHByZWxvYWQubV9yZXF1ZXN0LCBwcmVsb2FkLm1fY2hhcnNldCk7CiAgICAgfQog
ICAgIG1fcGVuZGluZ1ByZWxvYWRzLmNsZWFyKCk7CiB9CiAKLXZvaWQgQ2FjaGVkUmVzb3VyY2VM
b2FkZXI6OnJlcXVlc3RQcmVsb2FkKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQordm9pZCBDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6cmVxdWVzdFByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCiB7CiAg
ICAgU3RyaW5nIGVuY29kaW5nOwogICAgIGlmICh0eXBlID09IENhY2hlZFJlc291cmNlOjpTY3Jp
cHQgfHwgdHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCkKICAgICAgICAgZW5j
b2RpbmcgPSBjaGFyc2V0LmlzRW1wdHkoKSA/IG1fZG9jdW1lbnQtPmNoYXJzZXQoKSA6IGNoYXJz
ZXQ7CiAKLSAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgY2FjaGVkUmVzb3VyY2VSZXF1ZXN0KHJl
cXVlc3QsIGVuY29kaW5nKTsKLSAgICBjYWNoZWRSZXNvdXJjZVJlcXVlc3Quc2V0Rm9yUHJlbG9h
ZCh0cnVlKTsKKyAgICByZXF1ZXN0LnNldEZvclByZWxvYWQodHJ1ZSk7CiAKLSAgICBDYWNoZWRS
ZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gcmVzb3VyY2UgPSByZXF1ZXN0UmVzb3VyY2Uo
dHlwZSwgY2FjaGVkUmVzb3VyY2VSZXF1ZXN0KTsKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxD
YWNoZWRSZXNvdXJjZT4gcmVzb3VyY2UgPSByZXF1ZXN0UmVzb3VyY2UodHlwZSwgcmVxdWVzdCk7
CiAgICAgaWYgKCFyZXNvdXJjZSB8fCAobV9wcmVsb2FkcyAmJiBtX3ByZWxvYWRzLT5jb250YWlu
cyhyZXNvdXJjZS5nZXQoKSkpKQogICAgICAgICByZXR1cm47CiAgICAgcmVzb3VyY2UtPmluY3Jl
YXNlUHJlbG9hZENvdW50KCk7CkBAIC04NDAsNyArODQwLDcgQEAgYm9vbCBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6aXNQcmVsb2FkZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0CiAgICAg
RGVxdWU8UGVuZGluZ1ByZWxvYWQ+Ojpjb25zdF9pdGVyYXRvciBkZXF1ZUVuZCA9IG1fcGVuZGlu
Z1ByZWxvYWRzLmVuZCgpOwogICAgIGZvciAoRGVxdWU8UGVuZGluZ1ByZWxvYWQ+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcGVuZGluZ1ByZWxvYWRzLmJlZ2luKCk7IGl0ICE9IGRlcXVlRW5kOyAr
K2l0KSB7CiAgICAgICAgIFBlbmRpbmdQcmVsb2FkIHBlbmRpbmdQcmVsb2FkID0gKml0OwotICAg
ICAgICBpZiAocGVuZGluZ1ByZWxvYWQubV9yZXF1ZXN0LnVybCgpID09IHVybCkKKyAgICAgICAg
aWYgKHBlbmRpbmdQcmVsb2FkLm1fcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKSA9PSB1
cmwpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
aAppbmRleCBlMmUyYWU0OTcyNWM1OTEyZWMxYzUwN2ZiNTg3OTg0MzQ4NWI2YTk1Li5hYmFiOTJk
MWMwOGYzODgyN2JiZjcyNzUyNzA4MDUwMGYwOWRjNGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaApAQCAtMjYsOSArMjYsMTAg
QEAKICNpZm5kZWYgQ2FjaGVkUmVzb3VyY2VMb2FkZXJfaAogI2RlZmluZSBDYWNoZWRSZXNvdXJj
ZUxvYWRlcl9oCiAKKyNpbmNsdWRlICJDYWNoZVBvbGljeS5oIgogI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJD
YWNoZVBvbGljeS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1
ZGUgIlJlc291cmNlTG9hZFByaW9yaXR5LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRl
IDx3dGYvRGVxdWUuaD4KQEAgLTY5LDcgKzcwLDYgQEAgZnJpZW5kIGNsYXNzIEltYWdlTG9hZGVy
OwogZnJpZW5kIGNsYXNzIFJlc291cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvcjsKIAogcHVi
bGljOgotICAgIGVudW0gRGVmZXJPcHRpb24geyBOb0RlZmVyLCBEZWZlcnJlZEJ5Q2xpZW50IH07
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FjaGVkUmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShEb2N1
bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYWNoZWRS
ZXNvdXJjZUxvYWRlcihkb2N1bWVudExvYWRlcikpOyB9CiAgICAgfkNhY2hlZFJlc291cmNlTG9h
ZGVyKCk7CiAKQEAgLTEzMSw3ICsxMzEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1ByZWxvYWRl
ZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3Q7CiAgICAgdm9pZCBjbGVhclByZWxvYWRz
KCk7CiAgICAgdm9pZCBjbGVhclBlbmRpbmdQcmVsb2FkcygpOwotICAgIHZvaWQgcHJlbG9hZChD
YWNoZWRSZXNvdXJjZTo6VHlwZSwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBjaGFy
c2V0LCBib29sIHJlZmVyZW5jZWRGcm9tQm9keSk7CisgICAgdm9pZCBwcmVsb2FkKENhY2hlZFJl
c291cmNlOjpUeXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIGNoYXJz
ZXQsIGJvb2wgcmVmZXJlbmNlZEZyb21Cb2R5KTsKICAgICB2b2lkIGNoZWNrRm9yUGVuZGluZ1By
ZWxvYWRzKCk7CiAgICAgdm9pZCBwcmludFByZWxvYWRTdGF0cygpOwogICAgIGJvb2wgY2FuUmVx
dWVzdChDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29uc3QgS1VSTCYsIGJvb2wgZm9yUHJlbG9hZCA9
IGZhbHNlKTsKQEAgLTE0NiwxMCArMTQ2LDEwIEBAIHByaXZhdGU6CiAgICAgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6
VHlwZSwgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkUmVzb3VyY2U+IHJldmFsaWRhdGVSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSopOwogICAg
IENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBsb2FkUmVzb3VyY2UoQ2FjaGVk
UmVzb3VyY2U6OlR5cGUsIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCk7
Ci0gICAgdm9pZCByZXF1ZXN0UHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6VHlwZSwgUmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKKyAgICB2b2lkIHJlcXVlc3RQcmVsb2Fk
KENhY2hlZFJlc291cmNlOjpUeXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJp
bmcmIGNoYXJzZXQpOwogCiAgICAgZW51bSBSZXZhbGlkYXRpb25Qb2xpY3kgeyBVc2UsIFJldmFs
aWRhdGUsIFJlbG9hZCwgTG9hZCB9OwotICAgIFJldmFsaWRhdGlvblBvbGljeSBkZXRlcm1pbmVS
ZXZhbGlkYXRpb25Qb2xpY3koQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIFJlc291cmNlUmVxdWVzdCYs
IGJvb2wgZm9yUHJlbG9hZCwgQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5nUmVzb3VyY2UsIERlZmVy
T3B0aW9uKSBjb25zdDsKKyAgICBSZXZhbGlkYXRpb25Qb2xpY3kgZGV0ZXJtaW5lUmV2YWxpZGF0
aW9uUG9saWN5KENhY2hlZFJlc291cmNlOjpUeXBlLCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIGZv
clByZWxvYWQsIENhY2hlZFJlc291cmNlKiBleGlzdGluZ1Jlc291cmNlLCBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3Q6OkRlZmVyT3B0aW9uKSBjb25zdDsKICAgICAKICAgICB2b2lkIG5vdGlmeUxvYWRl
ZEZyb21NZW1vcnlDYWNoZShDYWNoZWRSZXNvdXJjZSopOwogICAgIGJvb2wgY2hlY2tJbnNlY3Vy
ZUNvbnRlbnQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIGNvbnN0IEtVUkwmKSBjb25zdDsKQEAgLTE3
MCw3ICsxNzAsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxMaXN0SGFzaFNldDxDYWNoZWRSZXNv
dXJjZSo+ID4gbV9wcmVsb2FkczsKICAgICBzdHJ1Y3QgUGVuZGluZ1ByZWxvYWQgewogICAgICAg
ICBDYWNoZWRSZXNvdXJjZTo6VHlwZSBtX3R5cGU7Ci0gICAgICAgIFJlc291cmNlUmVxdWVzdCBt
X3JlcXVlc3Q7CisgICAgICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCBtX3JlcXVlc3Q7CiAgICAg
ICAgIFN0cmluZyBtX2NoYXJzZXQ7CiAgICAgfTsKICAgICBEZXF1ZTxQZW5kaW5nUHJlbG9hZD4g
bV9wZW5kaW5nUHJlbG9hZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCmluZGV4IDZhZGQzOWI5NmNhY2Y0ZGViM2I0ZjM4
MjFjZWZiNjI1OGM1ZWM5ZjIuLjBjZTJkNjNmNWE0ZDYwNWZlZTMzYjc3YjA5YWRhYWE3MjFhMzRl
YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZVJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZVJlcXVlc3QuY3BwCkBAIC0yNiw2ICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdC5oIgogCisjaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQu
aCIKKworI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIENhY2hlZFJlc291cmNlUmVxdWVzdDo6Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIFJl
c291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQpAQCAtMzQsNyArNDAsNyBAQCBDYWNoZWRSZXNv
dXJjZVJlcXVlc3Q6OkNhY2hlZFJlc291cmNlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlc291cmNlUmVxdQogICAgICwgbV9vcHRpb25zKENhY2hlZFJlc291cmNlTG9hZGVyOjpkZWZh
dWx0Q2FjaGVkUmVzb3VyY2VPcHRpb25zKCkpCiAgICAgLCBtX3ByaW9yaXR5KHByaW9yaXR5KQog
ICAgICwgbV9mb3JQcmVsb2FkKGZhbHNlKQotICAgICwgbV9kZWZlcihDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6Tm9EZWZlcikKKyAgICAsIG1fZGVmZXIoTm9EZWZlcikKIHsKIH0KIApAQCAtNDMsNyAr
NDksNyBAQCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OkNhY2hlZFJlc291cmNlUmVxdWVzdChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdQogICAgICwgbV9vcHRpb25zKG9wdGlvbnMp
CiAgICAgLCBtX3ByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5VW5yZXNvbHZlZCkKICAgICAs
IG1fZm9yUHJlbG9hZChmYWxzZSkKLSAgICAsIG1fZGVmZXIoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
Ok5vRGVmZXIpCisgICAgLCBtX2RlZmVyKE5vRGVmZXIpCiB7CiB9CiAKQEAgLTUyLDggKzU4LDQ3
IEBAIENhY2hlZFJlc291cmNlUmVxdWVzdDo6Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1CiAgICAgLCBtX29wdGlvbnMoQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OmRlZmF1bHRDYWNoZWRSZXNvdXJjZU9wdGlvbnMoKSkKICAgICAsIG1fcHJpb3Jp
dHkocHJpb3JpdHkpCiAgICAgLCBtX2ZvclByZWxvYWQoZmFsc2UpCi0gICAgLCBtX2RlZmVyKENh
Y2hlZFJlc291cmNlTG9hZGVyOjpOb0RlZmVyKQorICAgICwgbV9kZWZlcihOb0RlZmVyKQorewor
fQorCitDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6On5DYWNoZWRSZXNvdXJjZVJlcXVlc3QoKQorewor
fQordm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OnNldEluaXRpYXRvcihQYXNzUmVmUHRyPEVs
ZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgQVNTRVJUKCFtX2luaXRpYXRvckVsZW1lbnQgJiYgIW1f
aW5pdGlhdG9yRG9jdW1lbnQpOworICAgIG1faW5pdGlhdG9yRWxlbWVudCA9IGVsZW1lbnQ7Cit9
CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpzZXRJbml0aWF0b3IoQXRvbWljU3RyaW5n
IG5hbWUsIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50KQoreworICAgIEFTU0VSVCghbV9p
bml0aWF0b3JFbGVtZW50ICYmICFtX2luaXRpYXRvckRvY3VtZW50KTsKKyAgICBtX2luaXRpYXRv
ck5hbWUgPSBuYW1lOworICAgIG1faW5pdGlhdG9yRG9jdW1lbnQgPSBkb2N1bWVudDsKK30KKwor
Y29uc3QgQXRvbWljU3RyaW5nIENhY2hlZFJlc291cmNlUmVxdWVzdDo6aW5pdGlhdG9yTmFtZSgp
IGNvbnN0Cit7CisgICAgaWYgKG1faW5pdGlhdG9yRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG1f
aW5pdGlhdG9yRWxlbWVudC0+bG9jYWxOYW1lKCk7CisgICAgaWYgKCFtX2luaXRpYXRvck5hbWUu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9pbml0aWF0b3JOYW1lOworCisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGRlZmF1bHROYW1lLCAoInJlc291cmNlIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworICAgIHJldHVybiBkZWZhdWx0TmFt
ZTsKK30KKworUGFzc1JlZlB0cjxEb2N1bWVudD4gQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Ojppbml0
aWF0b3JEb2N1bWVudCgpCit7CisgICAgaWYgKG1faW5pdGlhdG9yRWxlbWVudCkKKyAgICAgICAg
cmV0dXJuIG1faW5pdGlhdG9yRWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICByZXR1cm4gbV9pbml0
aWF0b3JEb2N1bWVudDsKK30KKworUGFzc1JlZlB0cjxFbGVtZW50PiBDYWNoZWRSZXNvdXJjZVJl
cXVlc3Q6OmluaXRpYXRvckVsZW1lbnQoKQogeworICAgIHJldHVybiBtX2luaXRpYXRvckVsZW1l
bnQ7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZVJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZVJlcXVlc3QuaAppbmRleCBjYjA0M2RmZTM5ZmU0Y2VkNTUwODIxOTRiZTNmMTBkZjAw
ZjkxYmY0Li43ZjY4N2JiZmViNTM1MDUwNTAxYzgzNmE3NDVlMDczZGU4ZGM2YjYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5o
CkBAIC0yNiwyNyArMjYsNDIgQEAKICNpZm5kZWYgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0X2gKICNk
ZWZpbmUgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0X2gKIAotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
TG9hZGVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUxvYWRlck9wdGlvbnMuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIERvY3VtZW50OworY2xhc3MgRWxlbWVudDsKIAogY2xhc3MgQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0IHsKIHB1YmxpYzoKKyAgICBlbnVtIERlZmVyT3B0aW9uIHsgTm9EZWZlciwgRGVmZXJy
ZWRCeUNsaWVudCB9OworCiAgICAgZXhwbGljaXQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCA9IFN0cmluZygpLCBSZXNv
dXJjZUxvYWRQcmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5VW5yZXNvbHZlZCk7CiAgICAg
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291
cmNlTG9hZGVyT3B0aW9ucyYpOwogICAgIENhY2hlZFJlc291cmNlUmVxdWVzdChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBSZXNvdXJjZUxvYWRQcmlvcml0eSk7CisgICAgfkNhY2hlZFJlc291cmNl
UmVxdWVzdCgpOwogCiAgICAgUmVzb3VyY2VSZXF1ZXN0JiBtdXRhYmxlUmVzb3VyY2VSZXF1ZXN0
KCkgeyByZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3Q7IH0KICAgICBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlc291cmNlUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0OyB9
CiAgICAgY29uc3QgU3RyaW5nJiBjaGFyc2V0KCkgY29uc3QgeyByZXR1cm4gbV9jaGFyc2V0OyB9
CiAgICAgdm9pZCBzZXRDaGFyc2V0KGNvbnN0IFN0cmluZyYgY2hhcnNldCkgeyBtX2NoYXJzZXQg
PSBjaGFyc2V0OyB9CiAgICAgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKCkg
Y29uc3QgeyByZXR1cm4gbV9vcHRpb25zOyB9CisgICAgdm9pZCBzZXRPcHRpb25zKGNvbnN0IFJl
c291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykgeyBtX29wdGlvbnMgPSBvcHRpb25zOyB9CiAg
ICAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiBtX3ByaW9y
aXR5OyB9CiAgICAgYm9vbCBmb3JQcmVsb2FkKCkgY29uc3QgeyByZXR1cm4gbV9mb3JQcmVsb2Fk
OyB9CiAgICAgdm9pZCBzZXRGb3JQcmVsb2FkKGJvb2wgZm9yUHJlbG9hZCkgeyBtX2ZvclByZWxv
YWQgPSBmb3JQcmVsb2FkOyB9Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRlZmVyT3B0aW9u
IGRlZmVyKCkgY29uc3QgeyByZXR1cm4gbV9kZWZlcjsgfQotICAgIHZvaWQgc2V0RGVmZXIoQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OkRlZmVyT3B0aW9uIGRlZmVyKSB7IG1fZGVmZXIgPSBkZWZlcjsg
fQorICAgIERlZmVyT3B0aW9uIGRlZmVyKCkgY29uc3QgeyByZXR1cm4gbV9kZWZlcjsgfQorICAg
IHZvaWQgc2V0RGVmZXIoRGVmZXJPcHRpb24gZGVmZXIpIHsgbV9kZWZlciA9IGRlZmVyOyB9Cisg
ICAgdm9pZCBzZXRJbml0aWF0b3IoUGFzc1JlZlB0cjxFbGVtZW50Pik7CisgICAgdm9pZCBzZXRJ
bml0aWF0b3IoQXRvbWljU3RyaW5nIG5hbWUsIFBhc3NSZWZQdHI8RG9jdW1lbnQ+KTsKKyAgICBj
b25zdCBBdG9taWNTdHJpbmcgaW5pdGlhdG9yTmFtZSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8
RG9jdW1lbnQ+IGluaXRpYXRvckRvY3VtZW50KCk7CisgICAgUGFzc1JlZlB0cjxFbGVtZW50PiBp
bml0aWF0b3JFbGVtZW50KCk7CiAKIHByaXZhdGU6CiAgICAgUmVzb3VyY2VSZXF1ZXN0IG1fcmVz
b3VyY2VSZXF1ZXN0OwpAQCAtNTQsNyArNjksMTAgQEAgcHJpdmF0ZToKICAgICBSZXNvdXJjZUxv
YWRlck9wdGlvbnMgbV9vcHRpb25zOwogICAgIFJlc291cmNlTG9hZFByaW9yaXR5IG1fcHJpb3Jp
dHk7CiAgICAgYm9vbCBtX2ZvclByZWxvYWQ7Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRl
ZmVyT3B0aW9uIG1fZGVmZXI7CisgICAgRGVmZXJPcHRpb24gbV9kZWZlcjsKKyAgICBSZWZQdHI8
RWxlbWVudD4gbV9pbml0aWF0b3JFbGVtZW50OworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9pbml0
aWF0b3JEb2N1bWVudDsKKyAgICBBdG9taWNTdHJpbmcgbV9pbml0aWF0b3JOYW1lOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2ljb24vSWNvbkxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9h
ZGVyLmNwcAppbmRleCA4YzlkMGNlY2JmY2QxMmI3ZWFhMWM0YThjODcwZjE2NDI1NTdmNzQ1Li5m
ZGM0OTg1Yzc2OTQ1N2VkZjgwZTAwZmI1Mjc3ZjcxZGFlNmU1N2Q2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcApAQCAtNjYsNiArNjYsNyBAQCB2b2lkIEljb25M
b2FkZXI6OnN0YXJ0TG9hZGluZygpCiAgICAgcmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0
KCkuc2V0VGFyZ2V0VHlwZShSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzRmF2aWNvbik7CiAjZW5k
aWYKICAgICByZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKS5zZXRQcmlvcml0eShSZXNv
dXJjZUxvYWRQcmlvcml0eUxvdyk7CisgICAgcmVxdWVzdC5zZXRJbml0aWF0b3IoImljb24iLCBt
X2ZyYW1lLT5kb2N1bWVudCgpKTsKIAogICAgIG1fcmVzb3VyY2UgPSBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0UmF3UmVzb3VyY2UocmVxdWVzdCk7
CiAgICAgaWYgKG1fcmVzb3VyY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVJbWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50
LmNwcAppbmRleCA4N2ZmMGQ2ODEyNzQ0NjBlYTc5NzhhZmU4N2ZhMjczOTY4ODU3ZWJhLi5lYWZl
YTFhODZhMTIyMmVkODNkMTRhNTNkYWJiY2RiZjIyMzRmYjc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKQEAgLTgyLDYgKzgyLDcgQEAgdm9pZCBTVkdGRUltYWdl
RWxlbWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKQogdm9pZCBTVkdGRUltYWdlRWxlbWVu
dDo6cmVxdWVzdEltYWdlUmVzb3VyY2UoKQogewogICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCBy
ZXF1ZXN0KFJlc291cmNlUmVxdWVzdChvd25lckRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGhyZWYo
KSkpKTsKKyAgICByZXF1ZXN0LnNldEluaXRpYXRvcih0aGlzKTsKICAgICBtX2NhY2hlZEltYWdl
ID0gZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdEltYWdlKHJlcXVl
c3QpOwogCiAgICAgaWYgKG1fY2FjaGVkSW1hZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRm9udEZhY2VVcmlFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
b250RmFjZVVyaUVsZW1lbnQuY3BwCmluZGV4IGMzNGZlZDg3ZDQ3ZWY4ZmYxZjFhNjVlMjdhZjVm
NmNkZDM3NDhhOGIuLjNiMmQ0OTViOTY1MDk4MDIxNzIyNzNmNzUyMmRlNDFjNTRjNzBmYjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuY3BwCkBAIC05OCw2
ICs5OCw3IEBAIHZvaWQgU1ZHRm9udEZhY2VVcmlFbGVtZW50Ojpsb2FkRm9udCgpCiAgICAgaWYg
KCFocmVmLmlzTnVsbCgpKSB7CiAgICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRS
ZXNvdXJjZUxvYWRlciA9IGRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAgICAg
ICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFJlc291cmNlUmVxdWVzdChkb2N1bWVu
dCgpLT5jb21wbGV0ZVVSTChocmVmKSkpOworICAgICAgICByZXF1ZXN0LnNldEluaXRpYXRvcih0
aGlzKTsKICAgICAgICAgbV9jYWNoZWRGb250ID0gY2FjaGVkUmVzb3VyY2VMb2FkZXItPnJlcXVl
c3RGb250KHJlcXVlc3QpOwogICAgICAgICBpZiAobV9jYWNoZWRGb250KSB7CiAgICAgICAgICAg
ICBtX2NhY2hlZEZvbnQtPmFkZENsaWVudCh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVt
ZW50LmNwcAppbmRleCA2MDQ2ZWM2MWI3NGZjMTJlYjEzYWMyMDcyNDRhNmM2ODE2NTQ3NDc2Li5m
MWUxYzAzMjQwNTM0OGMzNTkwYzM3YmU0YmI0Y2EyMDJlZTA2NWQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1VzZUVsZW1lbnQuY3BwCkBAIC0yNTYsNiArMjU2LDcgQEAgdm9pZCBTVkdVc2VFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAg
ICAgICAgICAgS1VSTCB1cmwgPSBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChocmVmKCkpOwogICAg
ICAgICAgICAgaWYgKHVybC5oYXNGcmFnbWVudElkZW50aWZpZXIoKSkgewogICAgICAgICAgICAg
ICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFJlc291cmNlUmVxdWVzdCh1cmwuc3Ry
aW5nKCkpKTsKKyAgICAgICAgICAgICAgICByZXF1ZXN0LnNldEluaXRpYXRvcih0aGlzKTsKICAg
ICAgICAgICAgICAgICBtX2NhY2hlZERvY3VtZW50ID0gZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3Vy
Y2VMb2FkZXIoKS0+cmVxdWVzdFNWR0RvY3VtZW50KHJlcXVlc3QpOwogICAgICAgICAgICAgICAg
IGlmIChtX2NhY2hlZERvY3VtZW50KQogICAgICAgICAgICAgICAgICAgICBtX2NhY2hlZERvY3Vt
ZW50LT5hZGRDbGllbnQodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCmluZGV4IGRl
ZjYwZTQ1YWNhYmY4NmY2YzRlNWQ1MDE5NzdkMDM2OTU5MGRjZWYuLmI4MWZmZTFhN2YyZjY5MTEx
N2Y2YTMwNTkzYjg3NTNiNmI2NzY2MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCkBA
IC01NCw5ICs1NCw5IEBAIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6fldlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcigpCiB7CiB9CiAKLVBhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoRnJhbWUqIGZyYW1l
LCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHksIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0
aW9ucyYgb3B0aW9ucykKK1Bhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoRnJhbWUqIGZyYW1lLCBDYWNo
ZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCkKIHsKLSAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IFN1YnJlc291cmNl
TG9hZGVyOjpjcmVhdGUoZnJhbWUsIHJlc291cmNlLCByZXF1ZXN0LCBvcHRpb25zKTsKKyAgICBS
ZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVh
dGUoZnJhbWUsIHJlc291cmNlLCByZXF1ZXN0KTsKICAgICBpZiAobG9hZGVyKQogICAgICAgICBz
Y2hlZHVsZUxvYWQobG9hZGVyLmdldCgpLCBwcmlvcml0eSk7CiAgICAgcmV0dXJuIGxvYWRlci5y
ZWxlYXNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsv
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05l
dHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKaW5kZXggNDIyNDI3YmM2Y2NmMWMwOTcw
OWM3YTJiNTYzYmFmNDFjYzYwMzQ0My4uY2E0MGUxZmQ5ZDJiNmNmY2Y0MDUwNzM3NmUxNDVmMzkz
YTkyYmFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dl
YlJlc291cmNlTG9hZFNjaGVkdWxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
TmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaApAQCAtNDMsNyArNDMsNyBAQCBwdWJs
aWM6CiAgICAgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiAgICAgdmlydHVhbCB+V2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyKCk7CiAgICAgCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNv
cmU6OlN1YnJlc291cmNlTG9hZGVyPiBzY2hlZHVsZVN1YnJlc291cmNlTG9hZChXZWJDb3JlOjpG
cmFtZSosIFdlYkNvcmU6OkNhY2hlZFJlc291cmNlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHksIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlTG9hZGVyT3B0aW9ucyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcj4gc2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoV2ViQ29y
ZTo6RnJhbWUqLCBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZSosIGNvbnN0IFdlYkNvcmU6OkNhY2hl
ZFJlc291cmNlUmVxdWVzdCYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gc2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2Fk
KFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGll
bnQqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBPVkVSUklERTsKICAgICAKICAg
ICB2aXJ0dWFsIHZvaWQgYWRkTWFpblJlc291cmNlTG9hZChXZWJDb3JlOjpSZXNvdXJjZUxvYWRl
ciopIE9WRVJSSURFOwo=
</data>
<flag name="review"
          id="187135"
          type_id="1"
          status="-"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="187140"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>