<?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>52719</bug_id>
          
          <creation_ts>2011-01-19 06:43:16 -0800</creation_ts>
          <short_desc>ScriptExecutionContext::stopActiveDOMObjects iterates a hash map that can change during iteration (for multiple reasons, including GC)</short_desc>
          <delta_ts>2014-04-20 21:39:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ggaren</cc>
    
    <cc>kangil.han</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>336488</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-01-19 06:43:16 -0800</bug_when>
    <thetext>XHR::stop should not call reportExtraMemoryCost() (or should do it more carefully) because it can cause a GC (in at least JSC) &quot;..because XHR::stop ends up calling reportExtraMemoryCost() for JSC, and that can collect the unprotected wrapper of another XHR (the current one is still protected at the moment)&quot;

(Sorry if the bug report is less than ideal, but I don&apos;t fully understand what&apos;s going on here...)

Context:
[6:54pm] ap: jorlow: ayt?
[6:54pm] jorlow: ap: what&apos;s up?
[6:55pm] ap: jorlow: I&apos;m finally looking at your patch again, and I&apos;m wondering why we even need to stop or abort transactions
[6:55pm] jorlow: so that when you leave a page stuff doesn&apos;t keep running
[6:55pm] ap: jorlow: it seems like requests need to be stopped, not transactions
[6:55pm] jorlow: no
[6:55pm] • ap listens
[6:55pm] jorlow: if you leave a page, a transaction can&apos;t ever be committed
[6:56pm] jorlow: requests can&apos;t be aborted
[6:56pm] jorlow: only transactions
[6:57pm] ap: jorlow: ok. then looking at it from a different angle, why are requests ActiveDOMObjects?
[6:57pm] jorlow: they need to be...it might be a fair question why IDBTransactions are though
[6:57pm] jorlow: requests need to be because if someone is listening to onsuccess or onerror, then it&apos;s possible they&apos;ll abort the transaciton or schedule another operation in that handler
[6:58pm] jorlow: and that the transaction committed at that point would be a logic error
[6:59pm] jorlow: transactions, on the other hand, only fire their event listeners after abort or complete happens
[6:59pm] jorlow: hm.....ok.....so by my earlier logic, maybe we should be aborting transactions with ::stop either way....  
[6:59pm] jorlow: i.e. if they navigate away, that&apos;s a signal they want the app to stop doing work
[6:59pm] jorlow: do event targets need to be active dom objects?
[7:00pm] ap: jorlow: only if nothing else can guarantee that they live long enough
[7:00pm] ap: jorlow: e.g. XMLHttpRequest is an ActiveDOMObject, but XMLHttpRequest.upload is not
[7:01pm] ap: jorlow: because XMLHttpRequest keeps XMLHttpRequestUpload alive
[7:01pm] jorlow: hmm
[7:01pm] ap: jorlow: we just need to pick a central object that will outlive others, and manage their lifetime
[7:01pm] jorlow: they may not need to be active dom objects then
[7:01pm] jorlow: let me think on this some
[7:02pm] jorlow: (and grab dinner...brb)
[7:02pm] ap: jorlow: bon appetit 
[7:05pm] ap: jorlow: (well, manage lifetime and suspend/stop/resume), of course. Since requests belong to transactions, the latter should be able to centralize everything
[7:20pm] jorlow: ap: so the one reason left why we need these to be active dom objects is that we need the page not to go into cache
[7:20pm] jorlow: any suggestions on how else to do that?
[7:20pm] jorlow: ap: er....page go into page cache
[7:21pm] ap: jorlow: either transaction or request probably needs to be an active dom object, right?
[7:21pm] ap: jorlow: otherwise, what would protect them from being destroyed if there are no JS references to them
[7:22pm] jorlow: ap: yeah...make sense
[7:23pm] jorlow: but i think then we&apos;re back to a situation where ::stop() can cause the active dom object to be killed
[7:23pm] jorlow: ap: the IDBTransaction needs to be active...not IDBRequest, btw
[7:23pm] jorlow: since active transactions are the reason it can&apos;t go to cache
[7:24pm] ap: jorlow: sounds reasonable
[7:24pm] jorlow: but the IDBTransactionBackendImpl needs to have a ref to the IDBTransaction.  And when abort happens, that link is broken
[7:24pm] jorlow: and that can cause IDBTransaction to go to 0 refs
[7:25pm] jorlow: ap^^
[7:28pm] ap: jorlow: hmm... ok, so what happens in XMLHttpRequest case? ScriptExecutionContext::stopActiveDOMObjects() calls XMLHTTPRequest::stop() - so far, the same as with IDB, right?
[7:28pm] ap: jorlow: XMLHTTPRequest::stop() supposedly releases the last ref, and we should be getting into ScriptExecutionContext::destroyedActiveDOMObject()
[7:28pm] jorlow: hmmm
[7:28pm] ap: jorlow: so either we have the same problem with XHR, or there&apos;s some witty trick
[7:33pm] ap: jorlow: ah, I know what the trick is
[7:34pm] jorlow: ap: yeah?
[7:34pm] ap: jorlow: XMLHttpRequest always has a JS wrapper, which keeps a reference to it
[7:34pm] jorlow: why?
[7:35pm] ap: jorlow: there is no way to create an XMLHttpRequest without creating a wrapper
[7:35pm] jorlow: But couldn&apos;t the wrapper get GCed?
[7:36pm] ap: jorlow: not while there&apos;s an ongoing request (that&apos;s what ActiveDOMObject is primarily about)
[7:36pm] ap: jorlow: and if there is no request, and the wrapper gets GC&apos;ed, then XMLHttpREquest itself is destroyed, too
[7:37pm] ap: jorlow: now, that doesn&apos;t quite work even for XHR
[7:38pm] ap: jorlow: because XHR::stop ends up calling reportExtraMemoryCost() for JSC, and that can collect the unprotected wrapper of another XHR (the current one is still protected at the moment)
[7:39pm] jorlow: ap: ouch..that&apos;s subtle
[7:39pm] jorlow: or any other active dom object, for that matter
[7:39pm] ap: jorlow: if there we really no JS code running from stop(), then the extra reference we&apos;re looking for would have been guaranteed by the wrapper
[7:40pm] ap: jorlow: but even XHR violates this requirement by forcing GC sometimes
[7:40pm] jorlow: ap: to be honest, i still don&apos;t fully understand why...I think maybe I just need to look at the code with these comments in mind (can&apos;t at the moment)
[7:40pm] jorlow: but it also seems as though maybe it doesn&apos;t matter
[7:40pm] MX80 left the chat room. (Remote host closed the connection)
[7:41pm] jorlow: and that we need a more general solution to the problem
[7:48pm] jorlow: is Helder Correia on irc?
[7:49pm] jorlow: ap would you agree with my last comment?
[7:49pm] jorlow: my thinking is that the subtlety of these 2 issues points to the need for a more general solution....maybe the one I originally proposed
[7:50pm] ap: jorlow: I don&apos;t know. Seems easy enough to fix XMLHttpRequest to not force GC from stop(), but it&apos;s indeed subtle
[7:50pm] jorlow: I think removing active dom objects during iteration is probably much more likely and less determinisitc than adding
[7:50pm] jorlow: and it kind of seems like it&apos;s only a matter of time before we see another one of these
[7:51pm] jorlow: personally, I&apos;d rather go with the general solution...I&apos;m not super happy with the one I presented, but I can&apos;t think of a better one
[7:51pm] ap: jorlow: if we go with your original solution, I&apos;d prefer that we don&apos;t do the contains() check though
[7:51pm] jorlow: ap: how can we avoid it?
[7:52pm] jorlow: I guess if the vector we iterate over was a member variable we could
[7:52pm] ap: jorlow: having a no-longer-active inactive object be destroyed while stopping further objects is kind of normal indeed
[7:52pm] jorlow: by moving the last element in to replace the removed element
[7:53pm] ap: jorlow: but the fact that stopping one object can indirectly destroy others seems evil
[7:53pm] jorlow: ap: aren&apos;t all objects stopped or none?
[7:53pm] jorlow: and why is it evil?
[7:53pm] jorlow: i feel like the IDB case of doing this is pretty legit
[7:53pm] jorlow: even if the XHR one is kinda shady
[7:54pm] ap: jorlow: my thinking is that an active object is fairly independent, and ScriptExecutionContext manages these
[7:54pm] ap: jorlow: that&apos;s why there are so few guarantees in this iteration code
[7:55pm] ap: jorlow: having a &quot;sub-manager&quot; inside IDB sounds complicated
[7:55pm] ap: jorlow: and this complicated situation is what we have now - ScriptExecutionContext can stop an active object, but also one IDB active object can stop another one
[7:55pm] jorlow: ap: actually, i was just going to suggest that maybe we should have one active dom object within IDB that they all share
[7:56pm] ap: jorlow: right, and if we do that, we wont need a contains() check, correct?
[7:56pm] jorlow: we wouldn&apos;t need anything in my patch actually
[7:56pm] jorlow: if we fix the XHR thing as well
[7:56pm] jorlow: (though we should put in the ASSERTs you suggested)
[7:56pm] ap: jorlow: ok, so how about this plan:
[7:57pm] ap: 1. Fix XHR
[7:57pm] ap: 2. Fix IDB to have one active dom object
[7:57pm] ap: 3. add an assertion
[7:57pm] jorlow: ap: can I file a bug on you for #1?
[7:57pm] ap: 4. consider making a copy in a vector to make this less subtle
[7:57pm] ap: jorlow: sure, that would be great
[7:57pm] jorlow: k...will do
[7:57pm] jorlow: not sure about 4 tho
[7:58pm] jorlow: I feel like the rest of this is a replacement for it
[7:58pm] jorlow: I&apos;ll put a nice change log comment in I guess
[7:58pm] ap: jorlow: it says &quot;consider&quot;, not &quot;do&quot; 
[7:58pm] jorlow: k
[7:58pm] jorlow: I&apos;ll try to summarize these in the bugs
[7:58pm] jorlow: might not get aroudn to filing until tomorrow though</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338766</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-01-23 15:04:53 -0800</bug_when>
    <thetext>So, here is the bug. ScriptExecutionContext::stopActiveDOMObjects() iterates over a HashMap of ActiveDOMObjects, naturally expecting that the HashMap doesn&apos;t change.

However, stop() can reduce the reference count of the object, and there is no strong guarantee that it won&apos;t be deleted. For XMLHttpRequest in particular, it&apos;s possible that the only remaining reference is kept by its JS wrapper - and since the wrapper is now unprotected, garbage collection can destroy it! And then, the only protection is that JavaScriptCore GC doesn&apos;t actually delete objects until something is allocated in their place.

So, calling reportExtraMemoryCost() from XMLHttpRequest::stop() is particularly dangerous, because it can start garbage collection, which will delete previously unprotected active DOM objects. I&apos;m less sure now that we should actually fix XMLHttpRequest, and not unsafe iteration.

&gt; [7:56pm] jorlow: (though we should put in the ASSERTs you suggested)

In fact, HashMap already has assertions for invalidated iterators, which should fail if an iterator is used after its map has changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338806</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-01-23 17:57:53 -0800</bug_when>
    <thetext>We should try to add stronger assertions though (that JS code doesn&apos;t run, or that GC isn&apos;t triggered).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339061</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-01-24 09:34:40 -0800</bug_when>
    <thetext>&gt; I&apos;m less sure now that we should actually fix XMLHttpRequest, and not unsafe iteration.

I think the right solution is to fix unsafe iteration. The simplest solution is probably to copy the hash map to a vector of RefPtr before iterating.

It&apos;s very difficult to establish a &quot;nothing must happen&quot; point in WebCore -- no JS execution, no GC, etc. And even if you did establish such a thing, it would be very difficult to test all the edge cases and make sure it worked.

Plus, I don&apos;t think we want to lose the memory footprint optimization of reporting extra cost once an XHR becomes orphaned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339076</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-01-24 10:07:08 -0800</bug_when>
    <thetext>The problem is that we still need to require no JS execution - because JS could add more active objects. So, guarding only against object destruction but not creation would be inconsistent.

Also, there&apos;s a technical issue with ActiveDOMObjects not being refcounted themselves, so you can&apos;t just make a Vector&lt;RefPtr&lt;ActiveDOMObject&gt; &gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339097</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-01-24 10:59:38 -0800</bug_when>
    <thetext>(In reply to comment #4)
How about this, for solving the iteration problem:
while (x = take(begin()))
    x-&gt;stop();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339103</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-01-24 11:07:35 -0800</bug_when>
    <thetext>Then we&apos;d have a freezing problem with code that actually runs JS and adds new ActiveDOMObjects.

I don&apos;t think there is any safe way to iterate without imposing any restrictions on code that runs during iteration - the question is what requirements we can practically enforce in this particular case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339114</commentid>
    <comment_count>7</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-01-24 11:15:36 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; In fact, HashMap already has assertions for invalidated iterators, which should fail if an iterator is used after its map has changed.

Sure, but we should also assert that we&apos;re not in the middle of iterating when we add/remove an object.  Asserting later keeps us from doing something silly, but doesn&apos;t make it easy to see what the problem is.

(In reply to comment #4)
&gt; The problem is that we still need to require no JS execution - because JS could add more active objects. So, guarding only against object destruction but not creation would be inconsistent.

FWIW, I&apos;m not sure this is such a big deal.


(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; How about this, for solving the iteration problem:
&gt; while (x = take(begin()))
&gt;     x-&gt;stop();

That won&apos;t work because often need to iterate without destroying the list.

In https://bugs.webkit.org/show_bug.cgi?id=52366 I had a solution that copied to a vector and double checked each element was still in the map before calling stop.  I wasn&apos;t super happy with it, but it might be the best option if we want to support ActiveDOMObjects being destroyed during iteration.

I tried hacking around the ActiveDOMObject not being ref counted problem in several different ways, but none of them were even close to clean enough that I think they&apos;d be acceptable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002347</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-19 22:56:22 -0700</bug_when>
    <thetext>We don’t need to allow arbitrary modification of the hash map, but we do need to allow removal from the map during the stopActiveDOMObject process. That’s the only practical problem.

Maybe later we can make an even better model, but this will shore things up for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002348</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-19 22:59:58 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; In https://bugs.webkit.org/show_bug.cgi?id=52366 I had a solution that copied to a vector and double checked each element was still in the map before calling stop.  I wasn&apos;t super happy with it, but it might be the best option if we want to support ActiveDOMObjects being destroyed during iteration.

Yes, I think that is indeed what we want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002353</commentid>
    <comment_count>10</comment_count>
      <attachid>229757</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-19 23:22:54 -0700</bug_when>
    <thetext>Created attachment 229757
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002355</commentid>
    <comment_count>11</comment_count>
      <attachid>229757</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-19 23:50:37 -0700</bug_when>
    <thetext>Comment on attachment 229757
Patch

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

&gt; Source/WebCore/ChangeLog:61
&gt; +        (WebCore::ScriptExecutionContext::didCreateActiveDOMObject): Ditto. Got rid of the
&gt; +        CRASH because there&apos;s no compelling value to this being a release assert instead of a
&gt; +        normal assert.

Actually, I think that this release assert is critically important. It is very very bad to have unstopped active dom objects after stopActiveDOMObjects().

The idea of this patch looks right to me, but Id like to have another look when it&apos;s not so late at night.

It&apos;s also worth documenting the restrictions on ActiveDOMObjects somewhere more persistent - the fact that stop() is allowed to delete the object, but is not allowed to execute arbitrary JS is not obvious. Also, what is allowed in suspend() or resume()?

&gt; Source/WebCore/dom/ScriptExecutionContext.cpp:279
&gt; +    for (auto* object : objects) {

So the usual argument for why auto is good is that variable name has all the information a type name has.

It&apos;s hardly possible to say less than &quot;object&quot; says!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002393</commentid>
    <comment_count>12</comment_count>
      <attachid>229767</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-20 10:28:35 -0700</bug_when>
    <thetext>Created attachment 229767
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002410</commentid>
    <comment_count>13</comment_count>
      <attachid>229767</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-20 11:59:53 -0700</bug_when>
    <thetext>Comment on attachment 229767
Patch

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

r=me. Nice patch!

&gt; Source/WebCore/ChangeLog:61
&gt; +        (WebCore::ScriptExecutionContext::didCreateActiveDOMObject): Ditto. Got rid of the
&gt; +        CRASH because there&apos;s no compelling value to this being a release assert instead of a
&gt; +        normal assert.

This comment is now obsolete.

&gt; Source/WebCore/ChangeLog:84
&gt; +        * workers/WorkerGlobalScope.h: Make hasPendingActivity function from the base class
&gt; +        public instead of declaring it in this class.

Longer term, I&apos;d like to come up with a better name for it, it&apos;s quite unclear which &quot;pending activity&quot; we are talking about. The workers spec has changed a lot, it might have a better name and/or design for this concept now.

&gt; Source/WebCore/dom/ScriptExecutionContext.cpp:188
&gt; +    // No protection against m_activeDOMObjects changing during iteration: canSuspend()
&gt; +    // functions should not add new active DOM objects, nor execute arbitrary JavaScript.

The reworded comment doesn&apos;t seem quite accurate, as removing active DOM objects isn&apos;t OK either (and there is a debug only assertion for that).

I thought that we had a way to assert that JS was not executed, but I can&apos;t find it now. I only found ScriptExecutionContext::isJSExecutionForbidden(), which is a different thing, and seems like a misnomer.

It would be very useful to catch mistakes with unexpected JS execution sooner, not just when the script does something bad.

&gt; Source/WebCore/dom/ScriptExecutionContext.cpp:221
&gt; +    // No protection against m_activeDOMObjects changing during iteration: suspend()
&gt; +    // functions should not add new active DOM objects, nor execute arbitrary JavaScript.

Ditto.

&gt; Source/WebCore/dom/ScriptExecutionContext.cpp:249
&gt; +    // No protection against m_activeDOMObjects changing during iteration: resume()
&gt; +    // functions should not add new active DOM objects, nor execute arbitrary JavaScript.

Ditto.

&gt; Source/WebCore/dom/ScriptExecutionContext.cpp:277
&gt; +    for (auto* object : objects) {

...

&gt; Source/WebCore/dom/ScriptExecutionContext.cpp:313
&gt; +    // The m_activeDOMObjectAdditionForbidden check is a RELEASE_ASSERT because of the
&gt; +    // consequences of having an ActiveDOMObject that is not correctly reflected in the set.
&gt; +    // If we do have one of those, it can possibly be a security vulnerability. So we&apos;d
&gt; +    // rather have a crash than continue running with the set possibly compromised.

suspendActiveDOMObjectIfNeeded() mechanism makes this almost unnecessary, because even objects that are created during iteration will be created suspended or stopped.

But suspendActiveDOMObjectIfNeeded() itself is very fragile - every constructor has to call suspendIfNeeded() for it to work - so it&apos;s best to keep this protection I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002412</commentid>
    <comment_count>14</comment_count>
      <attachid>229767</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-04-20 12:09:22 -0700</bug_when>
    <thetext>Comment on attachment 229767
Patch

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

&gt; Source/WebCore/dom/ScriptExecutionContext.cpp:109
&gt; +// FIXME: Should we make this a member function of HashSet?
&gt; +// Which name is best: takeOne, takeFirst, or takeRandom?

&quot;takeAny&quot;?

I like &quot;takeOne&quot; too.

&quot;Random&quot; is not so good because the results are not guaranteed to be random, so you&apos;d be mistaken to use this function in a context like shuffling or ASLR.

&quot;First&quot; implies some kind of order, which is not quite true of a hash table.

Member function or not, I think it would be nice to put this function in HashSet.h, so readers of that header will see that you can do this sort of thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002442</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-20 20:09:29 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; I thought that we had a way to assert that JS was not executed, but I can&apos;t find it now.

I remember that too, but I also can’t find it.

&gt; It would be very useful to catch mistakes with unexpected JS execution sooner, not just when the script does something bad.

I agree. I wonder what happened to it? Lets add it.

I considered your comments and made a few additions to the patch, including comments in ActiveDOMObject.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002461</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-20 21:39:36 -0700</bug_when>
    <thetext>Committed r167579: &lt;http://trac.webkit.org/changeset/167579&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229757</attachid>
            <date>2014-04-19 23:22:54 -0700</date>
            <delta_ts>2014-04-20 10:28:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52719-20140419232236.patch</filename>
            <type>text/plain</type>
            <size>38086</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3NTYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzI5NDg4NDEzOWYyOGY4
NDMwZWNmZTlkMGY4ZGEzZTQ1NTA5YjAwNi4uNDI3ODgzMTIwZGRlNTQyZWNjYmM4OTMwNzVhNmM0
MGIyOGQ4MmUzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDE0LTA0LTE5ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpzdG9wQWN0aXZlRE9NT2JqZWN0cyBpdGVyYXRlcyBhIGhhc2ggbWFwIHRoYXQgY2FuIGNo
YW5nZSBkdXJpbmcgaXRlcmF0aW9uIChmb3IgbXVsdGlwbGUgcmVhc29ucywgaW5jbHVkaW5nIEdD
KQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI3MTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBdCBsZWFz
dCB0d28gc3BlY2lmaWMgd2F5cyB0aGlzIGNhbiBoYXBwZW46CisKKyAgICAgICAgMSkgWE1MSHR0
cFJlcXVlc3Q6OnN0b3AgY2FuIHRyaWdnZXIgYSBKYXZhU2NyaXB0IGdhcmJhZ2UgY29sbGVjdGlv
bi4KKyAgICAgICAgMikgTm90aWZpY2F0aW9uQ2VudGVyOjpzdG9wIGNhbiBkZWxldGUgdGhlIGxh
c3QgcmVmZXJlbmNlcyB0byBub3RpZmljYXRpb25zOworICAgICAgICAgICB0aG9zZSBub3RpZmlj
YXRpb25zIGFyZSBhbHNvIGFjdGl2ZSBET00gb2JqZWN0cy4KKworICAgICAgICBCZXNpZGVzIGZp
eGluZyB0aGUgaXRlcmF0aW9uIGluIHRoYXQgZnVuY3Rpb24sIGRpZCBzb21lIG90aGVyIGZpeGVz
IGZvciB0aGUKKyAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBjbGFzcywgaW5jbHVkaW5n
IHNvbWUgY29kaW5nIHN0eWxlIGNoYW5nZXMuIE1hbnkgdXNlcworICAgICAgICBvZiBudWxscHRy
IGluc3RlYWQgb2YgMCwgd2l0aG91dCBsaXN0aW5nIGVhY2ggZnVuY3Rpb24gc2VwYXJhdGVseSBi
ZWxvdy4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQ29udGV4dDo6Y29udGV4dERlc3Ryb3llZCk6
IENhbGwgdGhyb3VnaCB0byB0aGUgYmFzZSBjbGFzcworICAgICAgICB2ZXJzaW9uIG9mIGNvbnRl
eHREZXN0cm95ZWQgcmF0aGVyIHRoYW4gcmVwZWF0aW5nIHdoYXQgaXQgZG9lcyAod2l0aCBhIGxh
cmdlCisgICAgICAgIGNvbW1lbnQgdGhhdCBkb2Vzbid0IGFja25vd2xlZGdlIHRoZSBiYXNlIGNs
YXNzIGFscmVhZCBkb2VzIGl0KS4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlQ29udGV4dC5oOiBSZW1vdmVkIHNvbWUgdW5uZWVkZWQgaW5jbHVkZXMuCisgICAgICAgIFdy
b3RlIG91dCAicHJpdmF0ZSIgZXhwbGljaXRseSBmb3IgZGVyaXZpbmcgZnJvbSBBY3RpdmVET01P
YmplY3QuIE1hZGUgdGhlCisgICAgICAgIEFjdGl2ZURPTU9iamVjdCBmdW5jdGlvbiBvdmVycmlk
ZXMgcHJpdmF0ZSwgYW5kIG1hcmtlZCB0aGVtIG92ZXJyaWRlIGFuZCBmaW5hbC4KKworICAgICAg
ICAqIGRvbS9BY3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9N
T2JqZWN0OjpBY3RpdmVET01PYmplY3QpOiBQYXNzIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBw
b2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NT2JqZWN0Ojp+QWN0aXZlRE9NT2Jq
ZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVET01PYmplY3Q6OnN1c3BlbmRJ
Zk5lZWRlZCk6IERpdHRvLgorCisgICAgICAgICogZG9tL0NvbnRleHREZXN0cnVjdGlvbk9ic2Vy
dmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyOjpv
YnNlcnZlQ29udGV4dCk6IFBhc3MgYSByZWZlcmVuY2UgaW5zdGVhZCBvZiBhIHBvaW50ZXIuCisK
KyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2Fn
ZVBvcnQ6Ok1lc3NhZ2VQb3J0KTogUGFzcyBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGEgcG9pbnRl
ci4KKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Ojp+TWVzc2FnZVBvcnQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZSk6IERpdHRvLgorCisg
ICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6IFVwZGF0
ZWQgZmxhZ3MgdXNlZAorICAgICAgICBmb3IgYXNzZXJ0aW9ucyBzbyB0aGV5IGFyZSBjb25kaXRp
b25hbCBhbmQgdXBkYXRlZCB0aGVpciBuYW1lcy4KKyAgICAgICAgKFdlYkNvcmU6OnRha2VPbmUp
OiBBZGRlZC4gSGVscGVyIGZ1bmN0aW9uIHRoYXQgd2UgY2FuIGNvbnNpZGVyIGZvciBIYXNoU2V0
IGluCisgICAgICAgIHRoZSBmdXR1cmU7IG1ha2VzIGxvb3BzIGJlbG93IGVhc2llciB0byByZWFk
LgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6flNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQpOiBDaGFuZ2VkIHRvIHVzZSBDKysxMQorICAgICAgICBmb3IgbG9vcHMgYW5k
IHRoZSB0YWtlT25lIGZ1bmN0aW9uIGFib3ZlLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6ZGlzcGF0Y2hNZXNzYWdlUG9ydEV2ZW50cyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y3JlYXRlZE1lc3NhZ2VQb3J0KTog
Q2hhbmdlZCB0byB0YWtlIGEgcmVmZXJlbmNlCisgICAgICAgIGZvciBjbGFyaXR5IGFuZCBzbyBp
dCBkb2Vzbid0IGhhdmUgdG8gZG8gYW4gYXNzZXJ0IHRoZSBwb2ludGVyIGlzIG5vbi1udWxsLgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZGVzdHJveWVkTWVzc2Fn
ZVBvcnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OmNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzKTogQ2hhbmdlZCB0byB1c2UKKyAgICAgICAgQysr
MTEgZm9yIGxvb3AgYW5kIHJld29yZGVkIGNvbW1lbnQgYW5kIHJlZGlkIGFzc2VydGlvbnMuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdXNwZW5kQWN0aXZlRE9N
T2JqZWN0cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6c3RvcEFjdGl2ZURPTU9iamVjdHMpOiBDaGFuZ2VkIHRvIHN1
cHBvcnQKKyAgICAgICAgcmVtb3ZhbCBvZiBhbiBhY3RpdmUgRE9NIG9iamVjdCBkdXJpbmcgdGhl
IHN0b3AgZnVuY3Rpb24uIEluY2x1ZGVkIG5ldyBjb21tZW50cworICAgICAgICB0byBjbGFyaWZ5
IHdoYXQgdGhlIHJ1bGVzIGFyZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RJZk5lZWRlZCk6IENoYW5nZWQgdG8gdGFrZQor
ICAgICAgICBhIHJlZmVyZW5jZSBmb3IgY2xhcml0eSBhbmQgc28gaXQgZG9lc24ndCBoYXZlIHRv
IGFzc2VydCBhIHBvaW50ZXIgaXMgbm9uLW51bGwuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpkaWRDcmVhdGVBY3RpdmVET01PYmplY3QpOiBEaXR0by4gR290IHJp
ZCBvZiB0aGUKKyAgICAgICAgQ1JBU0ggYmVjYXVzZSB0aGVyZSdzIG5vIGNvbXBlbGxpbmcgdmFs
dWUgdG8gdGhpcyBiZWluZyBhIHJlbGVhc2UgYXNzZXJ0IGluc3RlYWQgb2YgYQorICAgICAgICBu
b3JtYWwgYXNzZXJ0LgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
d2lsbERlc3Ryb3lBY3RpdmVET01PYmplY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmRpZENyZWF0ZURlc3RydWN0aW9uT2JzZXJ2ZXIpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OndpbGxEZXN0cm95
RGVzdHJ1Y3Rpb25PYnNlcnZlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6Y2xvc2VNZXNzYWdlUG9ydHMpOiBNb3ZlZCB0aGUgYm9keSBvZiB0aGlz
CisgICAgICAgIGZ1bmN0aW9uIGludG8gaXRzIG9uZSBjYWxsIHNpdGUsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OnN0b3BBY3RpdmVET01PYmplY3RzLAorICAgICAgICBzaW5jZSBpdCdzIHNpbXBs
ZSBlbm91Z2ggd2hlbiB3cml0dGVuIGFzIGEgQysrMTEgZm9yIGxvb3AuCisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpoYXNQZW5kaW5nQWN0aXZpdHkpOiBBZGRlZC4g
VGhpcyBmdW5jdGlvbiB3YXMKKyAgICAgICAgYWxyZWFkeSBleHBvcnRlZCBmb3Igd29ya2Vycywg
YW5kIGltcGxlbWVudGluZyBpdCBvdXRzaWRlIHRoaXMgY2xhc3MgcmVxdWlyZWQKKyAgICAgICAg
ZXhwb3NpbmcgdGhlIHByaXZhdGUgSGFzaFNldCBtZW1iZXJzOyBtb3JlIHNlbnNpYmxlIHRvIGlt
cGxlbWVudCBpdCBoZXJlIGFuZAorICAgICAgICBzaW1wbHkgbWFrZSBpdCBwdWJsaWMgaW4gV29y
a2VyR2xvYmFsU2NvcGUuCisKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
OiBSZW1vdmVkIHVubmVjZXNzYXJ5IGluY2x1ZGVzIGFuZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K
KyAgICAgICAgUmVtb3ZlZCBhIGxvbmctYWdvLWZpeGVkIEZJWE1FLiBDaGFuZ2VkIHZhcmlvdXMg
ZnVuY3Rpb25zIHRvIHRha2UgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mCisgICAgICAgIHBvaW50ZXJz
LiBBZGRlZCBhIHByb3RlY3RlZCBoYXNQZW5kaW5nQWN0aXZpdHkgZnVuY3Rpb24sIGRlbGV0ZWQg
dGhlIGNsb3NlTWVzc2FnZVBvcnRzCisgICAgICAgIGZ1bmN0aW9uLCBkZWxldGVkIHRoZSBBY3Rp
dmVET01PYmplY3RzU2V0IHR5cGVkZWYsIG1hZGUgdGhlIGFzc2VydGlvbiBmbGFncyBiZQorICAg
ICAgICAhQVNTRVJUX0RJU0FCTEVEIG9ubHksIGFuZCBkZWxldGVkIHRoZSBtZXNzYWdlUG9ydHMg
YW5kIGFjdGl2ZURPTU9iamVjdHMgZnVuY3Rpb25zLgorCisgICAgICAgICogd29ya2Vycy9Xb3Jr
ZXJHbG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJHbG9iYWxTY29wZTo6
aGFzUGVuZGluZ0FjdGl2aXR5KTogRGVsZXRlZC4gVGhpcyBpcyBub3cgaW1wbGVtZW50ZWQKKyAg
ICAgICAgaW4gdGhlIGJhc2UgY2xhc3MuCisKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2Jh
bFNjb3BlLmg6IE1ha2UgaGFzUGVuZGluZ0FjdGl2aXR5IGZ1bmN0aW9uIGZyb20gdGhlIGJhc2Ug
Y2xhc3MKKyAgICAgICAgcHVibGljIGluc3RlYWQgb2YgZGVjbGFyaW5nIGl0IGluIHRoaXMgY2xh
c3MuCisKIDIwMTQtMDQtMTkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAK
ICAgICAgICAgTGF0Y2hlZCBzY3JvbGxpbmcgbWF5IGludGVyYWN0IGJhZGx5IHdpdGggY3VzdG9t
IHByb2dyYW1tYXRpYyBzY3JvbGxpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNwcAppbmRleCBiZjczMGM4MDkxMzgzM2Yx
NjAwYWFhYWFmMjY0YjRjYzRiNjRlYTNlLi4yOGYwNzZhMzU5MWU3NDBlMTEyYzY1NmRkYWU0NTE0
M2JhOWNlMTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZUNvbnRleHQuY3BwCkBAIC0xMDQsNyArMTA0LDcgQEAgRGF0YWJhc2VDb250
ZXh0OjpEYXRhYmFzZUNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAg
ICAsIG1faGFzUmVxdWVzdGVkVGVybWluYXRpb24oZmFsc2UpCiAjaWYgUExBVEZPUk0oSU9TKQog
ICAgICwgbV9wYXVzZWQoZmFsc2UpCi0jZW5kaWYgLy9QTEFURk9STShJT1MpCisjZW5kaWYKIHsK
ICAgICAvLyBBY3RpdmVET01PYmplY3QgZXhwZWN0cyB0aGlzIHRvIGJlIGNhbGxlZCB0byBzZXQg
aW50ZXJuYWwgZmxhZ3MuCiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CkBAIC0xMjgsMjMgKzEyOCwx
NSBAQCBEYXRhYmFzZUNvbnRleHQ6On5EYXRhYmFzZUNvbnRleHQoKQogICAgIERhdGFiYXNlTWFu
YWdlcjo6bWFuYWdlcigpLmRpZERlc3RydWN0RGF0YWJhc2VDb250ZXh0KCk7CiB9CiAKLS8vIFRo
aXMgaXMgY2FsbGVkIGlmIHRoZSBhc3NvY2lhdGVkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaXMg
ZGVzdHJ1Y3Rpbmcgd2hpbGUKKy8vIFRoaXMgaXMgY2FsbGVkIGlmIHRoZSBhc3NvY2lhdGVkIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQgaXMgZGVzdHJveWVkIHdoaWxlCiAvLyB3ZSdyZSBzdGlsbCBh
c3NvY2lhdGVkIHdpdGggaXQuIFRoYXQncyBvdXIgY3VlIHRvIGRpc2Fzc29jaWF0ZSBhbmQgc2h1
dGRvd24uCi0vLyBUbyBkbyB0aGlzLCB3ZSBzdG9wIHRoZSBkYXRhYmFzZSBhbmQgbGV0IGV2ZXJ5
dGhpbmcgc2h1dGRvd24gbmF0dXJhbGx5Ci0vLyBiZWNhdXNlIHRoZSBkYXRhYmFzZSBjbG9zaW5n
IHByb2Nlc3MgbWF5IHN0aWxsIG1ha2UgdXNlIG9mIHRoaXMgY29udGV4dC4KKy8vIFRvIGRvIHRo
aXMsIHdlIHN0b3AgdGhlIGRhdGFiYXNlIGFuZCBsZXQgZXZlcnl0aGluZyBzaHV0IGRvd24gbmF0
dXJhbGx5CisvLyBiZWNhdXNlIHRoZSBkYXRhYmFzZSBjbG9zaW5nIHByb2Nlc3MgbWlnaHQgc3Rp
bGwgbWFrZSB1c2Ugb2YgdGhpcyBjb250ZXh0LgogLy8gSXQgaXMgbm90IHNhZmUgdG8ganVzdCBk
ZWxldGUgdGhlIGNvbnRleHQgaGVyZS4KIHZvaWQgRGF0YWJhc2VDb250ZXh0Ojpjb250ZXh0RGVz
dHJveWVkKCkKIHsKICAgICBzdG9wRGF0YWJhc2VzKCk7Ci0KLSAgICAvLyBOb3JtYWxseSwgd2ls
bERlc3Ryb3lBY3RpdmVET01PYmplY3QoKSBpcyBjYWxsZWQgaW4gfkFjdGl2ZURPTU9iamVjdCgp
LgotICAgIC8vIEhvd2V2ZXIsIHdlJ3JlIGhlcmUgYmVjYXVzZSB0aGUgZGVzdHJ1Y3RvciBoYXNu
J3QgYmVlbiBjYWxsZWQsIGFuZCB0aGUKLSAgICAvLyBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHdl
J3JlIGFzc29jaWF0ZWQgd2l0aCBpcyBhYm91dCB0byBiZSBkZXN0cnVjdGVkLgotICAgIC8vIFNv
LCBnbyBhaGVhZCBhbiB1bnJlZ2lzdGVyIHNlbGYgZnJvbSB0aGUgQWN0aXZlRE9NT2JqZWN0IGxp
c3QsIGFuZAotICAgIC8vIHNldCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgdG8gMCBzbyB0aGF0
IH5BY3RpdmVET01PYmplY3QoKSBkb2Vzbid0Ci0gICAgLy8gdHJ5IHRvIGRvIHNvIGFnYWluLgot
ICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+d2lsbERlc3Ryb3lBY3RpdmVET01PYmplY3Qo
dGhpcyk7Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gMDsKKyAgICBBY3RpdmVET01P
YmplY3Q6OmNvbnRleHREZXN0cm95ZWQoKTsKIH0KIAogLy8gc3RvcCgpIGlzIGZyb20gc3RvcEFj
dGl2ZURPTU9iamVjdHMoKSB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgb3duZXIgRnJhbWUKQEAg
LTE2Niw3ICsxNTgsNyBAQCBEYXRhYmFzZVRocmVhZCogRGF0YWJhc2VDb250ZXh0OjpkYXRhYmFz
ZVRocmVhZCgpCiAgICAgaWYgKCFtX2RhdGFiYXNlVGhyZWFkICYmICFtX2hhc09wZW5EYXRhYmFz
ZXMpIHsKICNpZiBQTEFURk9STShJT1MpCiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9kYXRh
YmFzZVRocmVhZE11dGV4KTsKLSNlbmRpZiAvL1BMQVRGT1JNKElPUykKKyNlbmRpZgogICAgICAg
ICAvLyBJdCdzIE9LIHRvIGFzayBmb3IgdGhlIG1fZGF0YWJhc2VUaHJlYWQgYWZ0ZXIgd2UndmUg
cmVxdWVzdGVkCiAgICAgICAgIC8vIHRlcm1pbmF0aW9uIGJlY2F1c2Ugd2UncmUgc3RpbGwgdXNp
bmcgaXQgdG8gZXhlY3V0ZSB0aGUgY2xvc2luZwogICAgICAgICAvLyBvZiB0aGUgZGF0YWJhc2Uu
IEhvd2V2ZXIsIGl0IGlzIE5PVCBPSyB0byBjcmVhdGUgYSBuZXcgdGhyZWFkCkBAIC0xNzcsMTEg
KzE2OSwxMiBAQCBEYXRhYmFzZVRocmVhZCogRGF0YWJhc2VDb250ZXh0OjpkYXRhYmFzZVRocmVh
ZCgpCiAgICAgICAgIC8vIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHdlIGFscmVhZHkgaGFkIGEgZGF0
YWJhc2UgdGhyZWFkIGFuZCB0ZXJtaW5hdGVkIGl0IGFuZCBzaG91bGQgbm90IGNyZWF0ZSBhbm90
aGVyLgogICAgICAgICBtX2RhdGFiYXNlVGhyZWFkID0gRGF0YWJhc2VUaHJlYWQ6OmNyZWF0ZSgp
OwogICAgICAgICBpZiAoIW1fZGF0YWJhc2VUaHJlYWQtPnN0YXJ0KCkpCi0gICAgICAgICAgICBt
X2RhdGFiYXNlVGhyZWFkID0gMDsKKyAgICAgICAgICAgIG1fZGF0YWJhc2VUaHJlYWQgPSBudWxs
cHRyOworCiAjaWYgUExBVEZPUk0oSU9TKQogICAgICAgICBpZiAobV9kYXRhYmFzZVRocmVhZCkK
ICAgICAgICAgICAgIG1fZGF0YWJhc2VUaHJlYWQtPnNldFBhdXNlZChtX3BhdXNlZCk7Ci0jZW5k
aWYgLy9QTEFURk9STShJT1MpCisjZW5kaWYKICAgICB9CiAKICAgICByZXR1cm4gbV9kYXRhYmFz
ZVRocmVhZC5nZXQoKTsKQEAgLTE5OCw3ICsxOTEsNyBAQCB2b2lkIERhdGFiYXNlQ29udGV4dDo6
c2V0UGF1c2VkKGJvb2wgcGF1c2VkKQogfQogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIAotYm9v
bCBEYXRhYmFzZUNvbnRleHQ6OnN0b3BEYXRhYmFzZXMoRGF0YWJhc2VUYXNrU3luY2hyb25pemVy
KiBjbGVhbnVwU3luYykKK2Jvb2wgRGF0YWJhc2VDb250ZXh0OjpzdG9wRGF0YWJhc2VzKERhdGFi
YXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyKQogewogICAgIGlmIChtX2lzUmVnaXN0
ZXJlZCkgewogICAgICAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS51bnJlZ2lzdGVyRGF0
YWJhc2VDb250ZXh0KHRoaXMpOwpAQCAtMjE2LDcgKzIwOSw3IEBAIGJvb2wgRGF0YWJhc2VDb250
ZXh0OjpzdG9wRGF0YWJhc2VzKERhdGFiYXNlVGFza1N5bmNocm9uaXplciogY2xlYW51cFN5bmMp
CiAgICAgLy8gRGF0YWJhc2VUaHJlYWQuCiAKICAgICBpZiAobV9kYXRhYmFzZVRocmVhZCAmJiAh
bV9oYXNSZXF1ZXN0ZWRUZXJtaW5hdGlvbikgewotICAgICAgICBtX2RhdGFiYXNlVGhyZWFkLT5y
ZXF1ZXN0VGVybWluYXRpb24oY2xlYW51cFN5bmMpOworICAgICAgICBtX2RhdGFiYXNlVGhyZWFk
LT5yZXF1ZXN0VGVybWluYXRpb24oc3luY2hyb25pemVyKTsKICAgICAgICAgbV9oYXNSZXF1ZXN0
ZWRUZXJtaW5hdGlvbiA9IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5o
CmluZGV4IDAyMDNlOTg0ZmU2NjIxZjY3ZWEzMGE1M2M5MjZkOTU4NmIzZmU5NjEuLjFlYWMyOTRi
MGFhMzNhYTU3NTY4YTUwOWRkZjJmMDQxNmYwMDA4NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuaApAQCAtMzEsNDAgKzMx
LDM2IEBACiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkRhdGFiYXNlRGV0YWlscy5oIgotI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRT
YWZlUmVmQ291bnRlZC5oPgogCiAjaWYgUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCisjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBEYXRhYmFzZTsKK2NsYXNzIERhdGFiYXNlRGV0YWlsczsKIGNsYXNz
IERhdGFiYXNlQmFja2VuZENvbnRleHQ7CiBjbGFzcyBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXI7
CiBjbGFzcyBEYXRhYmFzZVRocmVhZDsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAK
LWNsYXNzIERhdGFiYXNlQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRh
YmFzZUNvbnRleHQ+LCBBY3RpdmVET01PYmplY3QgeworY2xhc3MgRGF0YWJhc2VDb250ZXh0IDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERhdGFiYXNlQ29udGV4dD4sIHByaXZhdGUgQWN0
aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5EYXRhYmFzZUNvbnRleHQoKTsK
IAotICAgIC8vIEZvciBsaWZlLWN5Y2xlIG1hbmFnZW1lbnQgKGluaGVyaXRlZCBmcm9tIEFjdGl2
ZURPTU9iamVjdCk6Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc3RvcCgpOwotCiAgICAgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250
ZXh0PiBiYWNrZW5kKCk7CiAgICAgRGF0YWJhc2VUaHJlYWQqIGRhdGFiYXNlVGhyZWFkKCk7CisK
ICNpZiBQTEFURk9STShJT1MpCiAgICAgdm9pZCBzZXRQYXVzZWQoYm9vbCk7Ci0jZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQorI2VuZGlmCiAKICAgICB2b2lkIHNldEhhc09wZW5EYXRhYmFzZXMoKSB7
IG1faGFzT3BlbkRhdGFiYXNlcyA9IHRydWU7IH0KICAgICBib29sIGhhc09wZW5EYXRhYmFzZXMo
KSB7IHJldHVybiBtX2hhc09wZW5EYXRhYmFzZXM7IH0KIAotICAgIC8vIFdoZW4gdGhlIGRhdGFi
YXNlIGNsZWFudXAgaXMgZG9uZSwgY2xlYW51cFN5bmMgd2lsbCBiZSBzaWduYWxsZWQuCisgICAg
Ly8gV2hlbiB0aGUgZGF0YWJhc2UgY2xlYW51cCBpcyBkb25lLCB0aGUgc3ljaHJvbml6ZXIgd2ls
bCBiZSBzaWduYWxsZWQuCiAgICAgYm9vbCBzdG9wRGF0YWJhc2VzKERhdGFiYXNlVGFza1N5bmNo
cm9uaXplciopOwogCiAgICAgYm9vbCBhbGxvd0RhdGFiYXNlQWNjZXNzKCkgY29uc3Q7CkBAIC03
Myw3ICs2OSwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IERhdGFiYXNlQ29u
dGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKLSAgICB2b2lkIHN0b3BEYXRhYmFzZXMo
KSB7IHN0b3BEYXRhYmFzZXMoMCk7IH0KKyAgICB2b2lkIHN0b3BEYXRhYmFzZXMoKSB7IHN0b3BE
YXRhYmFzZXMobnVsbHB0cik7IH0KKworICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVk
KCkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSBvdmVycmlkZSBmaW5h
bDsKIAogICAgIFJlZlB0cjxEYXRhYmFzZVRocmVhZD4gbV9kYXRhYmFzZVRocmVhZDsKICAgICBi
b29sIG1faGFzT3BlbkRhdGFiYXNlczsgLy8gVGhpcyBuZXZlciBjaGFuZ2VzIGJhY2sgdG8gZmFs
c2UsIGV2ZW4gYWZ0ZXIgdGhlIGRhdGFiYXNlIHRocmVhZCBpcyBjbG9zZWQuCkBAIC04Niw3ICs4
NSw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIE11dGV4IG1fZGF0YWJhc2VU
aHJlYWRNdXRleDsKICAgICBib29sIG1fcGF1c2VkOwotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
KyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0
aXZlRE9NT2JqZWN0LmNwcAppbmRleCA2ZjA0MTI3MTdlY2VmNWQyMDE0NDM0MWMzYTAzMjUxNDZk
NDAxMzQzLi5lM2U4NmQ2N2IyY2QwOGNkZDk3MGE0NWJhZDFjMWQ0OWE3NjcwOWUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtNDQsNyArNDQsNyBAQCBBY3RpdmVE
T01PYmplY3Q6OkFjdGl2ZURPTU9iamVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5kaWRDcmVhdGVBY3RpdmVET01PYmplY3QodGhpcyk7CisgICAgbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5kaWRDcmVhdGVBY3RpdmVET01PYmplY3QoKnRoaXMpOwogfQogCiBB
Y3RpdmVET01PYmplY3Q6On5BY3RpdmVET01PYmplY3QoKQpAQCAtNjIsNyArNjIsNyBAQCBBY3Rp
dmVET01PYmplY3Q6On5BY3RpdmVET01PYmplY3QoKQogICAgIC8vIGhlcmUuCiAgICAgaWYgKG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCkgewogICAgICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgICAgIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+d2lsbERlc3Ryb3lBY3RpdmVET01PYmplY3QodGhpcyk7CisgICAgICAgIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+d2lsbERlc3Ryb3lBY3RpdmVET01PYmplY3QoKnRoaXMpOwog
ICAgIH0KIH0KIApAQCAtNzUsNyArNzUsNyBAQCB2b2lkIEFjdGl2ZURPTU9iamVjdDo6c3VzcGVu
ZElmTmVlZGVkKCkKICAgICBpZiAoIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zdXNwZW5kQWN0aXZlRE9N
T2JqZWN0SWZOZWVkZWQodGhpcyk7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zdXNw
ZW5kQWN0aXZlRE9NT2JqZWN0SWZOZWVkZWQoKnRoaXMpOwogfQogCiBib29sIEFjdGl2ZURPTU9i
amVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Db250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuY3BwCmluZGV4IDU2MGM1ZmI4ZmM4MzFhNWZi
NmI3ODI2MDc5YjFmZjY3NjBhODJiMjkuLmEzMzM5MTgwZThlMDNhM2U5ZjM4NmUwYjExMmQ4MTdh
ZGYzOTc1ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250ZXh0RGVzdHJ1Y3Rp
b25PYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRleHREZXN0cnVjdGlv
bk9ic2VydmVyLmNwcApAQCAtMzIsMzQgKzMyLDM0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyOjpDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQotICAgIDogbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KDApCisgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
bnVsbHB0cikKIHsKICAgICBvYnNlcnZlQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsK
IH0KIAogQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXI6On5Db250ZXh0RGVzdHJ1Y3Rpb25PYnNl
cnZlcigpCiB7Ci0gICAgb2JzZXJ2ZUNvbnRleHQoMCk7CisgICAgb2JzZXJ2ZUNvbnRleHQobnVs
bHB0cik7CiB9CiAKIHZvaWQgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXI6Om9ic2VydmVDb250
ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiB7CiAg
ICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkgewogICAgICAgICBBU1NFUlQobV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgICAgIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+d2lsbERlc3Ryb3lEZXN0cnVjdGlvbk9ic2VydmVyKHRoaXMpOwor
ICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPndpbGxEZXN0cm95RGVzdHJ1Y3Rpb25P
YnNlcnZlcigqdGhpcyk7CiAgICAgfQogCiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0g
c2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpIHsKICAgICAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0
VGhyZWFkKCkpOwotICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRpZENyZWF0ZURl
c3RydWN0aW9uT2JzZXJ2ZXIodGhpcyk7CisgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+ZGlkQ3JlYXRlRGVzdHJ1Y3Rpb25PYnNlcnZlcigqdGhpcyk7CiAgICAgfQogfQogCiB2b2lk
IENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyOjpjb250ZXh0RGVzdHJveWVkKCkKIHsKLSAgICBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSAwOworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVz
c2FnZVBvcnQuY3BwCmluZGV4IGRjZGYwZjhhOWJkZjg3NWYwMDcyY2Q2NmJiN2NkZTYxNTcwYTli
OWMuLjJjYTJiODMzNDI2OWY2M2UyMmVlOTY0NjQwYzI1ZDE3ZjdhMWIxN2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL01lc3NhZ2VQb3J0LmNwcApAQCAtNDAsNyArNDAsNyBAQCBNZXNzYWdlUG9ydDo6TWVzc2Fn
ZVBvcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAg
ICAsIG1fY2xvc2VkKGZhbHNlKQogICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KCZzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KQogewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+Y3Jl
YXRlZE1lc3NhZ2VQb3J0KHRoaXMpOworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+Y3Jl
YXRlZE1lc3NhZ2VQb3J0KCp0aGlzKTsKIAogICAgIC8vIERvbid0IG5lZWQgdG8gY2FsbCBwcm9j
ZXNzTWVzc2FnZVBvcnRNZXNzYWdlc1Nvb24oKSBoZXJlLCBiZWNhdXNlIHRoZSBwb3J0IHdpbGwg
bm90IGJlIG9wZW5lZCB1bnRpbCBzdGFydCgpIGlzIGludm9rZWQuCiB9CkBAIC00OSw3ICs0OSw3
IEBAIE1lc3NhZ2VQb3J0Ojp+TWVzc2FnZVBvcnQoKQogewogICAgIGNsb3NlKCk7CiAgICAgaWYg
KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKLSAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5kZXN0cm95ZWRNZXNzYWdlUG9ydCh0aGlzKTsKKyAgICAgICAgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5kZXN0cm95ZWRNZXNzYWdlUG9ydCgqdGhpcyk7CiB9CiAKIHZvaWQgTWVzc2Fn
ZVBvcnQ6OnBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNz
YWdlLCBNZXNzYWdlUG9ydCogcG9ydCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC04OSwxMCArODks
MTAgQEAgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gTWVzc2FnZVBvcnQ6OmRp
c2VudGFuZ2xlKCkKIAogICAgIG1fZW50YW5nbGVkQ2hhbm5lbC0+ZGlzZW50YW5nbGUoKTsKIAot
ICAgIC8vIFdlIGNhbid0IHJlY2VpdmUgYW55IG1lc3NhZ2VzIG9yIGdlbmVyYXRlIGFueSBldmVu
dHMsIHNvIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgbGlzdCBvZiBhY3RpdmUgcG9ydHMuCisg
ICAgLy8gV2UgY2FuJ3QgcmVjZWl2ZSBhbnkgbWVzc2FnZXMgb3IgZ2VuZXJhdGUgYW55IGV2ZW50
cyBhZnRlciB0aGlzLCBzbyByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGxpc3Qgb2YgYWN0aXZl
IHBvcnRzLgogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotICAgIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+ZGVzdHJveWVkTWVzc2FnZVBvcnQodGhpcyk7Ci0gICAgbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0ID0gMDsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PmRlc3Ryb3llZE1lc3NhZ2VQb3J0KCp0aGlzKTsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQgPSBudWxscHRyOwogCiAgICAgcmV0dXJuIHN0ZDo6bW92ZShtX2VudGFuZ2xlZENoYW5uZWwp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCmlu
ZGV4IDYxOWY5NTNiOTRkMTUwYmVkMmJmYzRkMWRmYTFmY2E5MWExZDI1YWEuLjQxNDk1YTFiOWFi
NDg5NDZhNGM1ZjM2ZjQxNDYwNmI3ZmIyMWFkNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKQEAgLTkyLDMxICs5Miw1MCBAQCB2b2lkIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OkFkZENvbnNvbGVNZXNzYWdlVGFzazo6cGVyZm9ybVRhc2soU2Ny
aXB0RXhlY3V0aW9uQwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpTY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkKLSAgICA6IG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyhmYWxzZSkKLSAg
ICAsIG1faW5EZXN0cnVjdG9yKGZhbHNlKQotICAgICwgbV9jaXJjdWxhclNlcXVlbnRpYWxJRCgw
KQorICAgIDogbV9jaXJjdWxhclNlcXVlbnRpYWxJRCgwKQogICAgICwgbV9pbkRpc3BhdGNoRXJy
b3JFdmVudChmYWxzZSkKICAgICAsIG1fYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZChmYWxz
ZSkKICAgICAsIG1fcmVhc29uRm9yU3VzcGVuZGluZ0FjdGl2ZURPTU9iamVjdHMoc3RhdGljX2Nh
c3Q8QWN0aXZlRE9NT2JqZWN0OjpSZWFzb25Gb3JTdXNwZW5zaW9uPigtMSkpCiAgICAgLCBtX2Fj
dGl2ZURPTU9iamVjdHNBcmVTdG9wcGVkKGZhbHNlKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAg
ICAsIG1faW5TY3JpcHRFeGVjdXRpb25Db250ZXh0RGVzdHJ1Y3RvcihmYWxzZSkKKyAgICAsIG1f
YWN0aXZlRE9NT2JqZWN0QWRkaXRpb25Gb3JiaWRkZW4oZmFsc2UpCisgICAgLCBtX2FjdGl2ZURP
TU9iamVjdFJlbW92YWxGb3JiaWRkZW4oZmFsc2UpCisjZW5kaWYKK3sKK30KKworLy8gRklYTUU6
IFNob3VsZCB3ZSBtYWtlIHRoaXMgYSBtZW1iZXIgZnVuY3Rpb24gb2YgSGFzaFNldD8KKy8vIFdo
aWNoIG5hbWUgaXMgYmVzdDogdGFrZU9uZSwgdGFrZUZpcnN0LCBvciB0YWtlUmFuZG9tPwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gVCB0YWtlT25lKEhhc2hTZXQ8VD4mIHNldCkKIHsKKyAgICBBU1NF
UlQoIXNldC5pc0VtcHR5KCkpOworICAgIGF1dG8gaXRlcmF0b3IgPSBzZXQuYmVnaW4oKTsKKyAg
ICBUIHJlc3VsdCA9IHN0ZDo6bW92ZSgqaXRlcmF0b3IpOworICAgIHNldC5yZW1vdmUoaXRlcmF0
b3IpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6On5T
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkKIHsKLSAgICBtX2luRGVzdHJ1Y3RvciA9IHRydWU7Ci0g
ICAgZm9yIChIYXNoU2V0PENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyKj46Oml0ZXJhdG9yIGl0
ZXIgPSBtX2Rlc3RydWN0aW9uT2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9kZXN0cnVjdGlv
bk9ic2VydmVycy5lbmQoKTsgaXRlciA9IG1fZGVzdHJ1Y3Rpb25PYnNlcnZlcnMuYmVnaW4oKSkg
ewotICAgICAgICBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlciogb2JzZXJ2ZXIgPSAqaXRlcjsK
LSAgICAgICAgbV9kZXN0cnVjdGlvbk9ic2VydmVycy5yZW1vdmUob2JzZXJ2ZXIpOworI2lmICFB
U1NFUlRfRElTQUJMRUQKKyAgICBtX2luU2NyaXB0RXhlY3V0aW9uQ29udGV4dERlc3RydWN0b3Ig
PSB0cnVlOworI2VuZGlmCisKKyAgICB3aGlsZSAoIW1fZGVzdHJ1Y3Rpb25PYnNlcnZlcnMuaXNF
bXB0eSgpKSB7CisgICAgICAgIGF1dG8qIG9ic2VydmVyID0gdGFrZU9uZShtX2Rlc3RydWN0aW9u
T2JzZXJ2ZXJzKTsKICAgICAgICAgQVNTRVJUKG9ic2VydmVyLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgPT0gdGhpcyk7CiAgICAgICAgIG9ic2VydmVyLT5jb250ZXh0RGVzdHJveWVkKCk7CiAg
ICAgfQogCi0gICAgSGFzaFNldDxNZXNzYWdlUG9ydCo+OjppdGVyYXRvciBtZXNzYWdlUG9ydHNF
bmQgPSBtX21lc3NhZ2VQb3J0cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8TWVzc2FnZVBvcnQq
Pjo6aXRlcmF0b3IgaXRlciA9IG1fbWVzc2FnZVBvcnRzLmJlZ2luKCk7IGl0ZXIgIT0gbWVzc2Fn
ZVBvcnRzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKCgqaXRlciktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAgICAgICAgKCppdGVyKS0+Y29udGV4dERlc3Ryb3ll
ZCgpOworICAgIGZvciAoYXV0byogcG9ydCA6IG1fbWVzc2FnZVBvcnRzKSB7CisgICAgICAgIEFT
U0VSVChwb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7CisgICAgICAgIHBv
cnQtPmNvbnRleHREZXN0cm95ZWQoKTsKICAgICB9CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisg
ICAgbV9pblNjcmlwdEV4ZWN1dGlvbkNvbnRleHREZXN0cnVjdG9yID0gZmFsc2U7CisjZW5kaWYK
IH0KIAogdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpwcm9jZXNzTWVzc2FnZVBvcnRNZXNz
YWdlc1Nvb24oKQpAQCAtMTI4LDUzICsxNDcsNjAgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpkaXNwYXRjaE1lc3NhZ2VQb3J0RXZlbnRzKCkKIHsKICAgICBSZWY8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dD4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICAvLyBNYWtlIGEgZnJvemVuIGNvcHku
CisgICAgLy8gTWFrZSBhIGZyb3plbiBjb3B5IG9mIHRoZSBwb3J0cyBzbyB3ZSBjYW4gaXRlcmF0
ZSB3aGlsZSBuZXcgb25lcyBtaWdodCBiZSBhZGRlZCBvciBkZXN0cm95ZWQuCiAgICAgVmVjdG9y
PE1lc3NhZ2VQb3J0Kj4gcG9ydHM7CiAgICAgY29weVRvVmVjdG9yKG1fbWVzc2FnZVBvcnRzLCBw
b3J0cyk7Ci0KLSAgICB1bnNpZ25lZCBwb3J0Q291bnQgPSBwb3J0cy5zaXplKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvcnRDb3VudDsgKytpKSB7Ci0gICAgICAgIE1lc3NhZ2VQ
b3J0KiBwb3J0ID0gcG9ydHNbaV07Ci0gICAgICAgIC8vIFRoZSBwb3J0IG1heSBiZSBkZXN0cm95
ZWQsIGFuZCBhbm90aGVyIG9uZSBjcmVhdGVkIGF0IHRoZSBzYW1lIGFkZHJlc3MsIGJ1dCB0aGlz
IGlzIHNhZmUsIGFzIHRoZSB3b3JzdCB0aGF0IGNhbiBoYXBwZW4KLSAgICAgICAgLy8gYXMgYSBy
ZXN1bHQgaXMgdGhhdCBkaXNwYXRjaE1lc3NhZ2VzKCkgd2lsbCBiZSBjYWxsZWQgbmVlZGxlc3Ns
eS4KKyAgICBmb3IgKGF1dG8qIHBvcnQgOiBwb3J0cykgeworICAgICAgICAvLyBUaGUgcG9ydCBt
YXkgYmUgZGVzdHJveWVkLCBhbmQgYW5vdGhlciBvbmUgY3JlYXRlZCBhdCB0aGUgc2FtZSBhZGRy
ZXNzLAorICAgICAgICAvLyBidXQgdGhpcyBpcyBoYXJtbGVzcy4gVGhlIHdvcnN0IHRoYXQgY2Fu
IGhhcHBlbiBhcyBhIHJlc3VsdCBpcyB0aGF0CisgICAgICAgIC8vIGRpc3BhdGNoTWVzc2FnZXMo
KSB3aWxsIGJlIGNhbGxlZCBuZWVkbGVzc2x5LgogICAgICAgICBpZiAobV9tZXNzYWdlUG9ydHMu
Y29udGFpbnMocG9ydCkgJiYgcG9ydC0+c3RhcnRlZCgpKQogICAgICAgICAgICAgcG9ydC0+ZGlz
cGF0Y2hNZXNzYWdlcygpOwogICAgIH0KIH0KIAotdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpjcmVhdGVkTWVzc2FnZVBvcnQoTWVzc2FnZVBvcnQqIHBvcnQpCit2b2lkIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OmNyZWF0ZWRNZXNzYWdlUG9ydChNZXNzYWdlUG9ydCYgcG9ydCkKIHsKLSAg
ICBBU1NFUlQocG9ydCk7CiAgICAgQVNTRVJUKChpc0RvY3VtZW50KCkgJiYgaXNNYWluVGhyZWFk
KCkpCiAgICAgICAgIHx8IChpc1dvcmtlckdsb2JhbFNjb3BlKCkgJiYgY3VycmVudFRocmVhZCgp
ID09IHRvV29ya2VyR2xvYmFsU2NvcGUodGhpcyktPnRocmVhZCgpLnRocmVhZElEKCkpKTsKIAot
ICAgIG1fbWVzc2FnZVBvcnRzLmFkZChwb3J0KTsKKyAgICBtX21lc3NhZ2VQb3J0cy5hZGQoJnBv
cnQpOwogfQogCi12b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmRlc3Ryb3llZE1lc3NhZ2VQ
b3J0KE1lc3NhZ2VQb3J0KiBwb3J0KQordm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpkZXN0
cm95ZWRNZXNzYWdlUG9ydChNZXNzYWdlUG9ydCYgcG9ydCkKIHsKLSAgICBBU1NFUlQocG9ydCk7
CiAgICAgQVNTRVJUKChpc0RvY3VtZW50KCkgJiYgaXNNYWluVGhyZWFkKCkpCiAgICAgICAgIHx8
IChpc1dvcmtlckdsb2JhbFNjb3BlKCkgJiYgY3VycmVudFRocmVhZCgpID09IHRvV29ya2VyR2xv
YmFsU2NvcGUodGhpcyktPnRocmVhZCgpLnRocmVhZElEKCkpKTsKIAotICAgIG1fbWVzc2FnZVBv
cnRzLnJlbW92ZShwb3J0KTsKKyAgICBtX21lc3NhZ2VQb3J0cy5yZW1vdmUoJnBvcnQpOwogfQog
CiBib29sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNhblN1c3BlbmRBY3RpdmVET01PYmplY3Rz
KCkKIHsKLSAgICAvLyBObyBwcm90ZWN0aW9uIGFnYWluc3QgbV9hY3RpdmVET01PYmplY3RzIGNo
YW5naW5nIGR1cmluZyBpdGVyYXRpb246IGNhblN1c3BlbmQoKSBzaG91bGRuJ3QgZXhlY3V0ZSBh
cmJpdHJhcnkgSlMuCi0gICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKLSAg
ICBBY3RpdmVET01PYmplY3RzU2V0OjppdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gbV9hY3Rp
dmVET01PYmplY3RzLmVuZCgpOwotICAgIGZvciAoQWN0aXZlRE9NT2JqZWN0c1NldDo6aXRlcmF0
b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVj
dHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQoKCppdGVyKS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQoKCppdGVyKS0+c3VzcGVuZElmTmVl
ZGVkQ2FsbGVkKCkpOwotICAgICAgICBpZiAoISgqaXRlciktPmNhblN1c3BlbmQoKSkgewotICAg
ICAgICAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCBjYW5TdXNwZW5kID0gdHJ1ZTsKKworI2lmICFBU1NF
UlRfRElTQUJMRUQKKyAgICBtX2FjdGl2ZURPTU9iamVjdEFkZGl0aW9uRm9yYmlkZGVuID0gdHJ1
ZTsKKyAgICBtX2FjdGl2ZURPTU9iamVjdFJlbW92YWxGb3JiaWRkZW4gPSB0cnVlOworI2VuZGlm
CisKKyAgICAvLyBObyBwcm90ZWN0aW9uIGFnYWluc3QgbV9hY3RpdmVET01PYmplY3RzIGNoYW5n
aW5nIGR1cmluZyBpdGVyYXRpb246IGNhblN1c3BlbmQoKQorICAgIC8vIGZ1bmN0aW9ucyBzaG91
bGQgbm90IGFkZCBuZXcgYWN0aXZlIERPTSBvYmplY3RzLCBub3IgZXhlY3V0ZSBhcmJpdHJhcnkg
SmF2YVNjcmlwdC4KKyAgICBmb3IgKGF1dG8qIG9iamVjdCA6IG1fYWN0aXZlRE9NT2JqZWN0cykg
eworICAgICAgICBBU1NFUlQob2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhp
cyk7CisgICAgICAgIEFTU0VSVChvYmplY3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKKyAg
ICAgICAgaWYgKCFvYmplY3QtPmNhblN1c3BlbmQoKSkgeworICAgICAgICAgICAgY2FuU3VzcGVu
ZCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0gICAgbV9p
dGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7CisKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgbV9hY3RpdmVET01PYmplY3RBZGRpdGlvbkZvcmJpZGRl
biA9IGZhbHNlOworICAgIG1fYWN0aXZlRE9NT2JqZWN0UmVtb3ZhbEZvcmJpZGRlbiA9IGZhbHNl
OworI2VuZGlmCisKKyAgICByZXR1cm4gY2FuU3VzcGVuZDsKIH0KIAogdm9pZCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhBY3RpdmVET01PYmplY3Q6OlJl
YXNvbkZvclN1c3BlbnNpb24gd2h5KQpAQCAtMTg2LDE1ICsyMTIsMjQgQEAgdm9pZCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhBY3RpdmVET01PYmplY3Q6
OlJlYXNvbkZvclMKICAgICB9CiAjZW5kaWYKIAotICAgIC8vIE5vIHByb3RlY3Rpb24gYWdhaW5z
dCBtX2FjdGl2ZURPTU9iamVjdHMgY2hhbmdpbmcgZHVyaW5nIGl0ZXJhdGlvbjogc3VzcGVuZCgp
IHNob3VsZG4ndCBleGVjdXRlIGFyYml0cmFyeSBKUy4KLSAgICBtX2l0ZXJhdGluZ0FjdGl2ZURP
TU9iamVjdHMgPSB0cnVlOwotICAgIEFjdGl2ZURPTU9iamVjdHNTZXQ6Oml0ZXJhdG9yIGFjdGl2
ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7Ci0gICAgZm9yIChBY3RpdmVE
T01PYmplY3RzU2V0OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7
IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVCgoKml0
ZXIpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VSVCgo
Kml0ZXIpLT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAgICAgICgqaXRlciktPnN1c3Bl
bmQod2h5KTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgbV9hY3RpdmVET01PYmplY3RBZGRp
dGlvbkZvcmJpZGRlbiA9IHRydWU7CisgICAgbV9hY3RpdmVET01PYmplY3RSZW1vdmFsRm9yYmlk
ZGVuID0gdHJ1ZTsKKyNlbmRpZgorCisgICAgLy8gTm8gcHJvdGVjdGlvbiBhZ2FpbnN0IG1fYWN0
aXZlRE9NT2JqZWN0cyBjaGFuZ2luZyBkdXJpbmcgaXRlcmF0aW9uOiBzdXNwZW5kKCkKKyAgICAv
LyBmdW5jdGlvbnMgc2hvdWxkIG5vdCBhZGQgbmV3IGFjdGl2ZSBET00gb2JqZWN0cywgbm9yIGV4
ZWN1dGUgYXJiaXRyYXJ5IEphdmFTY3JpcHQuCisgICAgZm9yIChhdXRvKiBvYmplY3QgOiBtX2Fj
dGl2ZURPTU9iamVjdHMpIHsKKyAgICAgICAgQVNTRVJUKG9iamVjdC0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQob2JqZWN0LT5zdXNwZW5kSWZOZWVk
ZWRDYWxsZWQoKSk7CisgICAgICAgIG9iamVjdC0+c3VzcGVuZCh3aHkpOwogICAgIH0KLSAgICBt
X2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKKworI2lmICFBU1NFUlRfRElTQUJM
RUQKKyAgICBtX2FjdGl2ZURPTU9iamVjdEFkZGl0aW9uRm9yYmlkZGVuID0gZmFsc2U7CisgICAg
bV9hY3RpdmVET01PYmplY3RSZW1vdmFsRm9yYmlkZGVuID0gZmFsc2U7CisjZW5kaWYKKwogICAg
IG1fYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCA9IHRydWU7CiAgICAgbV9yZWFzb25Gb3JT
dXNwZW5kaW5nQWN0aXZlRE9NT2JqZWN0cyA9IHdoeTsKIH0KQEAgLTIwMywxNyArMjM4LDI1IEBA
IHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0cyhBY3Rp
dmVET01PYmplY3Q6OlJlYXNvbkZvclN1CiB7CiAgICAgaWYgKG1fcmVhc29uRm9yU3VzcGVuZGlu
Z0FjdGl2ZURPTU9iamVjdHMgIT0gd2h5KQogICAgICAgICByZXR1cm47Ci0KICAgICBtX2FjdGl2
ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQgPSBmYWxzZTsKLSAgICAvLyBObyBwcm90ZWN0aW9uIGFn
YWluc3QgbV9hY3RpdmVET01PYmplY3RzIGNoYW5naW5nIGR1cmluZyBpdGVyYXRpb246IHJlc3Vt
ZSgpIHNob3VsZG4ndCBleGVjdXRlIGFyYml0cmFyeSBKUy4KLSAgICBtX2l0ZXJhdGluZ0FjdGl2
ZURPTU9iamVjdHMgPSB0cnVlOwotICAgIEFjdGl2ZURPTU9iamVjdHNTZXQ6Oml0ZXJhdG9yIGFj
dGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7Ci0gICAgZm9yIChBY3Rp
dmVET01PYmplY3RzU2V0OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2lu
KCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVCgo
Kml0ZXIpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VS
VCgoKml0ZXIpLT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAgICAgICgqaXRlciktPnJl
c3VtZSgpOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIG1fYWN0aXZlRE9NT2JqZWN0QWRk
aXRpb25Gb3JiaWRkZW4gPSB0cnVlOworICAgIG1fYWN0aXZlRE9NT2JqZWN0UmVtb3ZhbEZvcmJp
ZGRlbiA9IHRydWU7CisjZW5kaWYKKworICAgIC8vIE5vIHByb3RlY3Rpb24gYWdhaW5zdCBtX2Fj
dGl2ZURPTU9iamVjdHMgY2hhbmdpbmcgZHVyaW5nIGl0ZXJhdGlvbjogcmVzdW1lKCkKKyAgICAv
LyBmdW5jdGlvbnMgc2hvdWxkIG5vdCBhZGQgbmV3IGFjdGl2ZSBET00gb2JqZWN0cywgbm9yIGV4
ZWN1dGUgYXJiaXRyYXJ5IEphdmFTY3JpcHQuCisgICAgZm9yIChhdXRvKiBvYmplY3QgOiBtX2Fj
dGl2ZURPTU9iamVjdHMpIHsKKyAgICAgICAgQVNTRVJUKG9iamVjdC0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQob2JqZWN0LT5zdXNwZW5kSWZOZWVk
ZWRDYWxsZWQoKSk7CisgICAgICAgIG9iamVjdC0+cmVzdW1lKCk7CiAgICAgfQotICAgIG1faXRl
cmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
ICAgIG1fYWN0aXZlRE9NT2JqZWN0QWRkaXRpb25Gb3JiaWRkZW4gPSBmYWxzZTsKKyAgICBtX2Fj
dGl2ZURPTU9iamVjdFJlbW92YWxGb3JiaWRkZW4gPSBmYWxzZTsKKyNlbmRpZgogfQogCiB2b2lk
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN0b3BBY3RpdmVET01PYmplY3RzKCkKQEAgLTIyMSw2
NiArMjY0LDczIEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3RvcEFjdGl2ZURPTU9i
amVjdHMoKQogICAgIGlmIChtX2FjdGl2ZURPTU9iamVjdHNBcmVTdG9wcGVkKQogICAgICAgICBy
ZXR1cm47CiAgICAgbV9hY3RpdmVET01PYmplY3RzQXJlU3RvcHBlZCA9IHRydWU7Ci0gICAgLy8g
Tm8gcHJvdGVjdGlvbiBhZ2FpbnN0IG1fYWN0aXZlRE9NT2JqZWN0cyBjaGFuZ2luZyBkdXJpbmcg
aXRlcmF0aW9uOiBzdG9wKCkgc2hvdWxkbid0IGV4ZWN1dGUgYXJiaXRyYXJ5IEpTLgotICAgIG1f
aXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7Ci0gICAgQWN0aXZlRE9NT2JqZWN0c1Nl
dDo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsK
LSAgICBmb3IgKEFjdGl2ZURPTU9iamVjdHNTZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjdGl2ZURP
TU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKLSAg
ICAgICAgQVNTRVJUKCgqaXRlciktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsK
LSAgICAgICAgQVNTRVJUKCgqaXRlciktPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAg
ICAgKCppdGVyKS0+c3RvcCgpOworCisgICAgLy8gTWFrZSBhIGZyb3plbiBjb3B5IG9mIHRoZSBv
YmplY3RzIHNvIHdlIGNhbiBpdGVyYXRlIHdoaWxlIG5ldyBvbmVzIG1pZ2h0IGJlIGRlc3Ryb3ll
ZC4KKyAgICBWZWN0b3I8QWN0aXZlRE9NT2JqZWN0Kj4gb2JqZWN0czsKKyAgICBjb3B5VG9WZWN0
b3IobV9hY3RpdmVET01PYmplY3RzLCBvYmplY3RzKTsKKworI2lmICFBU1NFUlRfRElTQUJMRUQK
KyAgICBtX2FjdGl2ZURPTU9iamVjdEFkZGl0aW9uRm9yYmlkZGVuID0gdHJ1ZTsKKyNlbmRpZgor
CisgICAgLy8gTm8gcHJvdGVjdGlvbiBhZ2FpbnN0IG5ldyBvYmplY3RzIGJlaW5nIGFkZGVkIGR1
cmluZyB0aGlzIGl0ZXJhdGlvbjogc3RvcCgpCisgICAgLy8gZnVuY3Rpb25zIHNob3VsZCBub3Qg
YWRkIG5ldyBhY3RpdmUgRE9NIG9iamVjdHMsIG5vciBleGVjdXRlIGFyYml0cmFyeSBKYXZhU2Ny
aXB0LgorICAgIC8vIEhvd2V2ZXIsIHN0b3AoKSBmdW5jdGlvbiBtYXkgcmVtb3ZlIGFjdGl2ZSBE
T00gb2JqZWN0cy4KKyAgICBmb3IgKGF1dG8qIG9iamVjdCA6IG9iamVjdHMpIHsKKyAgICAgICAg
Ly8gQ2hlY2sgaWYgdGhpcyBvYmplY3Qgd2FzIGRlbGV0ZWQgYWxyZWFkeS4gSWYgc28sIGp1c3Qg
c2tpcCBpdC4KKyAgICAgICAgLy8gQ2FsbGluZyBjb250YWludHMgb24gYSBwb3NzaWJseS1hbHJl
YWR5LWRlbGV0ZWQgb2JqZWN0IGlzIE9LIGJlY2F1c2Ugd2UgZ3VhcmFudGVlCisgICAgICAgIC8v
IG5vIG5ldyBvYmplY3QgY2FuIGJlIGFkZGVkLCBzbyBldmVuIGlmIGEgbmV3IG9iamVjdCBlbmRz
IHVwIGFsbG9jYXRlZCB3aXRoIHRoZQorICAgICAgICAvLyBzYW1lIGFkZHJlc3MsIHRoYXQgd2ls
bCBiZSAqYWZ0ZXIqIHRoaXMgZnVuY3Rpb24gZXhpdHMuCisgICAgICAgIGlmICghbV9hY3RpdmVE
T01PYmplY3RzLmNvbnRhaW5zKG9iamVjdCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgQVNTRVJUKG9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOworICAg
ICAgICBBU1NFUlQob2JqZWN0LT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7CisgICAgICAgIG9i
amVjdC0+c3RvcCgpOwogICAgIH0KLSAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBm
YWxzZTsKIAotICAgIC8vIEFsc28gY2xvc2UgTWVzc2FnZVBvcnRzLiBJZiB0aGV5IHdlcmUgQWN0
aXZlRE9NT2JqZWN0cyAodGhleSBjb3VsZCBiZSkgdGhlbiB0aGV5IGNvdWxkIGJlIHN0b3BwZWQg
aW5zdGVhZC4KLSAgICBjbG9zZU1lc3NhZ2VQb3J0cygpOworI2lmICFBU1NFUlRfRElTQUJMRUQK
KyAgICBtX2FjdGl2ZURPTU9iamVjdEFkZGl0aW9uRm9yYmlkZGVuID0gZmFsc2U7CisjZW5kaWYK
KworICAgIC8vIEZJWE1FOiBNYWtlIG1lc3NhZ2UgcG9ydHMgYmUgYWN0aXZlIERPTSBvYmplY3Rz
IGFuZCBsZXQgdGhlbSBpbXBsZW1lbnQgc3RvcCBpbnN0ZWFkCisgICAgLy8gb2YgaGF2aW5nIHRo
aXMgc2VwYXJhdGUgbWVjaGFuaXNtIGp1c3QgZm9yIHRoZW0uCisgICAgZm9yIChhdXRvKiBwb3J0
IDogbV9tZXNzYWdlUG9ydHMpIHsKKyAgICAgICAgQVNTRVJUKHBvcnQtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgcG9ydC0+Y2xvc2UoKTsKKyAgICB9CiB9CiAK
LXZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdElmTmVl
ZGVkKEFjdGl2ZURPTU9iamVjdCogb2JqZWN0KQordm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0SWZOZWVkZWQoQWN0aXZlRE9NT2JqZWN0JiBvYmplY3Qp
CiB7Ci0gICAgQVNTRVJUKG1fYWN0aXZlRE9NT2JqZWN0cy5jb250YWlucyhvYmplY3QpKTsKLSAg
ICAvLyBFbnN1cmUgYWxsIEFjdGl2ZURPTU9iamVjdHMgYXJlIHN1c3BlbmRlZCBhbHNvIG5ld2x5
IGNyZWF0ZWQgb25lcy4KKyAgICBBU1NFUlQobV9hY3RpdmVET01PYmplY3RzLmNvbnRhaW5zKCZv
YmplY3QpKTsKICAgICBpZiAobV9hY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKQotICAgICAg
ICBvYmplY3QtPnN1c3BlbmQobV9yZWFzb25Gb3JTdXNwZW5kaW5nQWN0aXZlRE9NT2JqZWN0cyk7
CisgICAgICAgIG9iamVjdC5zdXNwZW5kKG1fcmVhc29uRm9yU3VzcGVuZGluZ0FjdGl2ZURPTU9i
amVjdHMpOwogICAgIGlmIChtX2FjdGl2ZURPTU9iamVjdHNBcmVTdG9wcGVkKQotICAgICAgICBv
YmplY3QtPnN0b3AoKTsKKyAgICAgICAgb2JqZWN0LnN0b3AoKTsKIH0KIAotdm9pZCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpkaWRDcmVhdGVBY3RpdmVET01PYmplY3QoQWN0aXZlRE9NT2JqZWN0
KiBvYmplY3QpCit2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmRpZENyZWF0ZUFjdGl2ZURP
TU9iamVjdChBY3RpdmVET01PYmplY3QmIG9iamVjdCkKIHsKLSAgICBBU1NFUlQob2JqZWN0KTsK
LSAgICBBU1NFUlQoIW1faW5EZXN0cnVjdG9yKTsKLSAgICBpZiAobV9pdGVyYXRpbmdBY3RpdmVE
T01PYmplY3RzKQotICAgICAgICBDUkFTSCgpOwotICAgIG1fYWN0aXZlRE9NT2JqZWN0cy5hZGQo
b2JqZWN0KTsKKyAgICBBU1NFUlQoIW1faW5TY3JpcHRFeGVjdXRpb25Db250ZXh0RGVzdHJ1Y3Rv
cik7CisgICAgQVNTRVJUKCFtX2FjdGl2ZURPTU9iamVjdEFkZGl0aW9uRm9yYmlkZGVuKTsKKyAg
ICBtX2FjdGl2ZURPTU9iamVjdHMuYWRkKCZvYmplY3QpOwogfQogCi12b2lkIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OndpbGxEZXN0cm95QWN0aXZlRE9NT2JqZWN0KEFjdGl2ZURPTU9iamVjdCog
b2JqZWN0KQordm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojp3aWxsRGVzdHJveUFjdGl2ZURP
TU9iamVjdChBY3RpdmVET01PYmplY3QmIG9iamVjdCkKIHsKLSAgICBBU1NFUlQob2JqZWN0KTsK
LSAgICBpZiAobV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzKQotICAgICAgICBDUkFTSCgpOwot
ICAgIG1fYWN0aXZlRE9NT2JqZWN0cy5yZW1vdmUob2JqZWN0KTsKKyAgICBBU1NFUlQoIW1fYWN0
aXZlRE9NT2JqZWN0UmVtb3ZhbEZvcmJpZGRlbik7CisgICAgbV9hY3RpdmVET01PYmplY3RzLnJl
bW92ZSgmb2JqZWN0KTsKIH0KIAotdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpkaWRDcmVh
dGVEZXN0cnVjdGlvbk9ic2VydmVyKENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyKiBvYnNlcnZl
cikKK3ZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZGlkQ3JlYXRlRGVzdHJ1Y3Rpb25PYnNl
cnZlcihDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlciYgb2JzZXJ2ZXIpCiB7Ci0gICAgQVNTRVJU
KG9ic2VydmVyKTsKLSAgICBBU1NFUlQoIW1faW5EZXN0cnVjdG9yKTsKLSAgICBtX2Rlc3RydWN0
aW9uT2JzZXJ2ZXJzLmFkZChvYnNlcnZlcik7CisgICAgQVNTRVJUKCFtX2luU2NyaXB0RXhlY3V0
aW9uQ29udGV4dERlc3RydWN0b3IpOworICAgIG1fZGVzdHJ1Y3Rpb25PYnNlcnZlcnMuYWRkKCZv
YnNlcnZlcik7CiB9CiAKLXZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6d2lsbERlc3Ryb3lE
ZXN0cnVjdGlvbk9ic2VydmVyKENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyKiBvYnNlcnZlcikK
K3ZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6d2lsbERlc3Ryb3lEZXN0cnVjdGlvbk9ic2Vy
dmVyKENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyJiBvYnNlcnZlcikKIHsKLSAgICBBU1NFUlQo
b2JzZXJ2ZXIpOwotICAgIG1fZGVzdHJ1Y3Rpb25PYnNlcnZlcnMucmVtb3ZlKG9ic2VydmVyKTsK
LX0KLQotdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpjbG9zZU1lc3NhZ2VQb3J0cygpIHsK
LSAgICBIYXNoU2V0PE1lc3NhZ2VQb3J0Kj46Oml0ZXJhdG9yIG1lc3NhZ2VQb3J0c0VuZCA9IG1f
bWVzc2FnZVBvcnRzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxNZXNzYWdlUG9ydCo+OjppdGVy
YXRvciBpdGVyID0gbV9tZXNzYWdlUG9ydHMuYmVnaW4oKTsgaXRlciAhPSBtZXNzYWdlUG9ydHNF
bmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQoKCppdGVyKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpID09IHRoaXMpOwotICAgICAgICAoKml0ZXIpLT5jbG9zZSgpOwotICAgIH0KKyAgICBt
X2Rlc3RydWN0aW9uT2JzZXJ2ZXJzLnJlbW92ZSgmb2JzZXJ2ZXIpOwogfQogCiBib29sIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OnNhbml0aXplU2NyaXB0RXJyb3IoU3RyaW5nJiBlcnJvck1lc3Nh
Z2UsIGludCYgbGluZU51bWJlciwgaW50JiBjb2x1bW5OdW1iZXIsIFN0cmluZyYgc291cmNlVVJM
LCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKQEAgLTQxOSw0ICs0NjksMTkgQEAgdm9pZCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpzZXREYXRhYmFzZUNvbnRleHQoRGF0YWJhc2VDb250ZXh0
KiBkYXRhYmFzZUNvbnRleHQKIH0KICNlbmRpZgogCitib29sIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvKiBvYmplY3Qg
OiBtX2FjdGl2ZURPTU9iamVjdHMpIHsKKyAgICAgICAgaWYgKG9iamVjdC0+aGFzUGVuZGluZ0Fj
dGl2aXR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBmb3IgKGF1
dG8qIHBvcnQgOiBtX21lc3NhZ2VQb3J0cykgeworICAgICAgICBpZiAocG9ydC0+aGFzUGVuZGlu
Z0FjdGl2aXR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCmluZGV4IDQwZTRiNzk3M2IxMjkzMjZlZWExNGVl
ZTIzNmVmYTUyYWUzZWI1ZTEuLjU5MzFlOWQzZTNmZWIxMjNmZjcyYTAxMGEwNDMxY2IzMThkMGY3
YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaApAQCAt
MzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIlNl
Y3VyaXR5Q29udGV4dC5oIgogI2luY2x1ZGUgIlN1cHBsZW1lbnRhYmxlLmgiCi0jaW5jbHVkZSAi
VVJMLmgiCiAjaW5jbHVkZSA8cnVudGltZS9Db25zb2xlVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgogCkBAIC00OSwxNCArNDgsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgQ2FjaGVkU2NyaXB0OwogY2xhc3MgRGF0YWJhc2VDb250ZXh0OwogY2xhc3MgRE9NVGltZXI7
Ci1jbGFzcyBFdmVudExpc3RlbmVyOwogY2xhc3MgRXZlbnRRdWV1ZTsKIGNsYXNzIEV2ZW50VGFy
Z2V0OwogY2xhc3MgTWVzc2FnZVBvcnQ7Ci0KLSNpZiBFTkFCTEUoQkxPQikKIGNsYXNzIFB1Ymxp
Y1VSTE1hbmFnZXI7Ci0jZW5kaWYKK2NsYXNzIFVSTDsKIAogY2xhc3MgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCA6IHB1YmxpYyBTZWN1cml0eUNvbnRleHQsIHB1YmxpYyBTdXBwbGVtZW50YWJsZTxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0PiB7CiBwdWJsaWM6CkBAIC03NiwxMSArNzIsMTAgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGVFdmFsKGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlKSA9IDA7CiAKLSAgICBib29sIHNhbml0aXplU2NyaXB0RXJyb3IoU3RyaW5nJiBlcnJv
ck1lc3NhZ2UsIGludCYgbGluZU51bWJlciwgaW50JiBjb2x1bW5OdW1iZXIsIFN0cmluZyYgc291
cmNlVVJMLCBDYWNoZWRTY3JpcHQqID0gMCk7Ci0gICAgLy8gRklYTUU6IDxodHRwOi8vd2Via2l0
Lm9yZy9iLzExNDMxNT4gU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBsb2cgZXhjZXB0aW9uIHNob3Vs
ZCBpbmNsdWRlIGEgY29sdW1uIG51bWJlcgotICAgIHZvaWQgcmVwb3J0RXhjZXB0aW9uKGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxs
U3RhY2s+LCBDYWNoZWRTY3JpcHQqID0gMCk7CisgICAgYm9vbCBzYW5pdGl6ZVNjcmlwdEVycm9y
KFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQmIGxpbmVOdW1iZXIsIGludCYgY29sdW1uTnVtYmVy
LCBTdHJpbmcmIHNvdXJjZVVSTCwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIpOworICAgIHZvaWQg
cmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJl
ciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+LCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7CiAK
LSAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQg
bGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSogPSAwLCB1
bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7CisgICAgdm9pZCBhZGRDb25zb2xl
TWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVk
IGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUqID0gbnVsbHB0ciwgdW5zaWduZWQgbG9uZyBy
ZXF1ZXN0SWRlbnRpZmllciA9IDApOwogICAgIHZpcnR1YWwgdm9pZCBhZGRDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5z
aWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApID0gMDsKIAogICAgIHZpcnR1YWwgU2Vj
dXJpdHlPcmlnaW4qIHRvcE9yaWdpbigpIGNvbnN0ID0gMDsKQEAgLTEwMSwyNCArOTYsMjAgQEAg
cHVibGljOgogICAgIGJvb2wgYWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSBjb25zdCB7IHJl
dHVybiBtX2FjdGl2ZURPTU9iamVjdHNBcmVTdG9wcGVkOyB9CiAKICAgICAvLyBDYWxsZWQgZnJv
bSB0aGUgY29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3JzIG9mIEFjdGl2ZURPTU9iamVjdC4KLSAg
ICB2b2lkIGRpZENyZWF0ZUFjdGl2ZURPTU9iamVjdChBY3RpdmVET01PYmplY3QqKTsKLSAgICB2
b2lkIHdpbGxEZXN0cm95QWN0aXZlRE9NT2JqZWN0KEFjdGl2ZURPTU9iamVjdCopOworICAgIHZv
aWQgZGlkQ3JlYXRlQWN0aXZlRE9NT2JqZWN0KEFjdGl2ZURPTU9iamVjdCYpOworICAgIHZvaWQg
d2lsbERlc3Ryb3lBY3RpdmVET01PYmplY3QoQWN0aXZlRE9NT2JqZWN0Jik7CiAKICAgICAvLyBD
YWxsZWQgYWZ0ZXIgdGhlIGNvbnN0cnVjdGlvbiBvZiBhbiBBY3RpdmVET01PYmplY3QgdG8gc3lu
Y2hyb25pemUgc3VzcGVuZCBzdGF0ZS4KLSAgICB2b2lkIHN1c3BlbmRBY3RpdmVET01PYmplY3RJ
Zk5lZWRlZChBY3RpdmVET01PYmplY3QqKTsKLQotICAgIHR5cGVkZWYgSGFzaFNldDxBY3RpdmVE
T01PYmplY3QqPiBBY3RpdmVET01PYmplY3RzU2V0OwotICAgIGNvbnN0IEFjdGl2ZURPTU9iamVj
dHNTZXQmIGFjdGl2ZURPTU9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZURPTU9iamVj
dHM7IH0KKyAgICB2b2lkIHN1c3BlbmRBY3RpdmVET01PYmplY3RJZk5lZWRlZChBY3RpdmVET01P
YmplY3QmKTsKIAotICAgIHZvaWQgZGlkQ3JlYXRlRGVzdHJ1Y3Rpb25PYnNlcnZlcihDb250ZXh0
RGVzdHJ1Y3Rpb25PYnNlcnZlciopOwotICAgIHZvaWQgd2lsbERlc3Ryb3lEZXN0cnVjdGlvbk9i
c2VydmVyKENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyKik7CisgICAgdm9pZCBkaWRDcmVhdGVE
ZXN0cnVjdGlvbk9ic2VydmVyKENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyJik7CisgICAgdm9p
ZCB3aWxsRGVzdHJveURlc3RydWN0aW9uT2JzZXJ2ZXIoQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2
ZXImKTsKIAogICAgIC8vIE1lc3NhZ2VQb3J0IGlzIGNvbmNlcHR1YWxseSBhIGtpbmQgb2YgQWN0
aXZlRE9NT2JqZWN0LCBidXQgaXQgbmVlZHMgdG8gYmUgdHJhY2tlZCBzZXBhcmF0ZWx5IGZvciBt
ZXNzYWdlIGRpc3BhdGNoLgogICAgIHZvaWQgcHJvY2Vzc01lc3NhZ2VQb3J0TWVzc2FnZXNTb29u
KCk7CiAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VQb3J0RXZlbnRzKCk7Ci0gICAgdm9pZCBjcmVh
dGVkTWVzc2FnZVBvcnQoTWVzc2FnZVBvcnQqKTsKLSAgICB2b2lkIGRlc3Ryb3llZE1lc3NhZ2VQ
b3J0KE1lc3NhZ2VQb3J0Kik7Ci0gICAgY29uc3QgSGFzaFNldDxNZXNzYWdlUG9ydCo+JiBtZXNz
YWdlUG9ydHMoKSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2VQb3J0czsgfQorICAgIHZvaWQgY3Jl
YXRlZE1lc3NhZ2VQb3J0KE1lc3NhZ2VQb3J0Jik7CisgICAgdm9pZCBkZXN0cm95ZWRNZXNzYWdl
UG9ydChNZXNzYWdlUG9ydCYpOwogCiAgICAgdm9pZCByZWYoKSB7IHJlZlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsgfQogICAgIHZvaWQgZGVyZWYoKSB7IGRlcmVmU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOyB9CkBAIC0xODUsMjIgKzE3NiwyMCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBBY3RpdmVE
T01PYmplY3Q6OlJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uRm9yU3VzcGVuZGluZ0FjdGl2ZURP
TU9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX3JlYXNvbkZvclN1c3BlbmRpbmdBY3RpdmVET01P
YmplY3RzOyB9CiAKKyAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OworCiBwcml2
YXRlOgotICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VM
ZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5z
aWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiwgSlNDOjpFeGVjU3RhdGUqID0gMCwgdW5zaWduZWQgbG9u
ZyByZXF1ZXN0SWRlbnRpZmllciA9IDApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2Fn
ZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVt
bk51bWJlciwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4sIEpTQzo6RXhl
Y1N0YXRlKiA9IG51bGxwdHIsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKSA9
IDA7CiAgICAgdmlydHVhbCBFdmVudFRhcmdldCogZXJyb3JFdmVudFRhcmdldCgpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgbG9nRXhjZXB0aW9uVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1
bW5OdW1iZXIsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+KSA9IDA7CiAg
ICAgYm9vbCBkaXNwYXRjaEVycm9yRXZlbnQoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGlu
dCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwg
Q2FjaGVkU2NyaXB0Kik7CiAKLSAgICB2b2lkIGNsb3NlTWVzc2FnZVBvcnRzKCk7Ci0KICAgICB2
aXJ0dWFsIHZvaWQgcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgZGVyZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPSAwOwogCiAgICAgSGFzaFNldDxN
ZXNzYWdlUG9ydCo+IG1fbWVzc2FnZVBvcnRzOwogICAgIEhhc2hTZXQ8Q29udGV4dERlc3RydWN0
aW9uT2JzZXJ2ZXIqPiBtX2Rlc3RydWN0aW9uT2JzZXJ2ZXJzOwotICAgIEFjdGl2ZURPTU9iamVj
dHNTZXQgbV9hY3RpdmVET01PYmplY3RzOwotICAgIGJvb2wgbV9pdGVyYXRpbmdBY3RpdmVET01P
YmplY3RzOwotICAgIGJvb2wgbV9pbkRlc3RydWN0b3I7CisgICAgSGFzaFNldDxBY3RpdmVET01P
YmplY3QqPiBtX2FjdGl2ZURPTU9iamVjdHM7CiAKICAgICBpbnQgbV9jaXJjdWxhclNlcXVlbnRp
YWxJRDsKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBET01UaW1lcio+IFRpbWVvdXRNYXA7CkBA
IC0yMjEsNiArMjEwLDEyIEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAg
ICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBtX2RhdGFiYXNlQ29udGV4dDsKICNlbmRpZgorCisj
aWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGJvb2wgbV9pblNjcmlwdEV4ZWN1dGlvbkNvbnRleHRE
ZXN0cnVjdG9yOworICAgIGJvb2wgbV9hY3RpdmVET01PYmplY3RBZGRpdGlvbkZvcmJpZGRlbjsK
KyAgICBib29sIG1fYWN0aXZlRE9NT2JqZWN0UmVtb3ZhbEZvcmJpZGRlbjsKKyNlbmRpZgogfTsK
IAogI2RlZmluZSBTQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfVFlQRV9DQVNUUyhUb1ZhbHVlVHlw
ZU5hbWUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFs
U2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAK
aW5kZXggMmI1YmRmZjY2YTgwMzQ5ZmI1MGM3YjA2MDIxNmMxZDM1NzdjYjNmNi4uYjY2MzliY2M2
ZTViMzM5NzY1NmMxMWM5YWMxZmMyZDE5NDNiOGU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAKQEAgLTE1OSwyMyArMTU5LDYgQEAgV29ya2VyTmF2
aWdhdG9yKiBXb3JrZXJHbG9iYWxTY29wZTo6bmF2aWdhdG9yKCkgY29uc3QKICAgICByZXR1cm4g
bV9uYXZpZ2F0b3IuZ2V0KCk7CiB9CiAKLWJvb2wgV29ya2VyR2xvYmFsU2NvcGU6Omhhc1BlbmRp
bmdBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAgQWN0aXZlRE9NT2JqZWN0c1NldDo6Y29uc3RfaXRl
cmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IGFjdGl2ZURPTU9iamVjdHMoKS5lbmQoKTsKLSAgICBm
b3IgKEFjdGl2ZURPTU9iamVjdHNTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBhY3RpdmVET01P
YmplY3RzKCkuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKLSAg
ICAgICAgaWYgKCgqaXRlciktPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgSGFzaFNldDxNZXNzYWdlUG9ydCo+Ojpjb25zdF9pdGVy
YXRvciBtZXNzYWdlUG9ydHNFbmQgPSBtZXNzYWdlUG9ydHMoKS5lbmQoKTsKLSAgICBmb3IgKEhh
c2hTZXQ8TWVzc2FnZVBvcnQqPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1lc3NhZ2VQb3J0cygp
LmJlZ2luKCk7IGl0ZXIgIT0gbWVzc2FnZVBvcnRzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYg
KCgqaXRlciktPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIFdvcmtlckdsb2JhbFNjb3Bl
Ojpwb3N0VGFzayhQYXNzT3duUHRyPFRhc2s+IHRhc2spCiB7CiAgICAgdGhyZWFkKCkucnVuTG9v
cCgpLnBvc3RUYXNrKHRhc2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJHbG9iYWxTY29wZS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxT
Y29wZS5oCmluZGV4IDE3NjVkOTc4NjhhMWFmMzUzODM0OGRiMWNmZTQzMjU3NDUyNDc2ZTguLjE5
ZDIwZWViYmIwOGM4OTczODMyZDZlOTEyN2NjYjYyOTYzOGNhMzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKQEAgLTc2LDcgKzc2LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIFdvcmtlclRocmVhZCYgdGhyZWFkKCkgY29uc3QgeyByZXR1
cm4gbV90aHJlYWQ7IH0KIAotICAgICAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0
OworICAgICAgICB1c2luZyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpoYXNQZW5kaW5nQWN0aXZp
dHk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrKFBhc3NPd25QdHI8VGFzaz4pIG92
ZXJyaWRlOyAvLyBFeGVjdXRlcyB0aGUgdGFzayBvbiBjb250ZXh0J3MgdGhyZWFkIGFzeW5jaHJv
bm91c2x5LgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229767</attachid>
            <date>2014-04-20 10:28:35 -0700</date>
            <delta_ts>2014-04-20 12:09:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52719-20140420102818.patch</filename>
            <type>text/plain</type>
            <size>38391</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3NTYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzI5NDg4NDEzOWYyOGY4
NDMwZWNmZTlkMGY4ZGEzZTQ1NTA5YjAwNi4uZjlmYTJkYzUzMWQwNjE5M2YzYzVlMjI4NzdmODhh
NzUzMTI1Zjc3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDE0LTA0LTIwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpzdG9wQWN0aXZlRE9NT2JqZWN0cyBpdGVyYXRlcyBhIGhhc2ggbWFwIHRoYXQgY2FuIGNo
YW5nZSBkdXJpbmcgaXRlcmF0aW9uIChmb3IgbXVsdGlwbGUgcmVhc29ucywgaW5jbHVkaW5nIEdD
KQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI3MTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBdCBsZWFz
dCB0d28gc3BlY2lmaWMgd2F5cyB0aGlzIGNhbiBoYXBwZW46CisKKyAgICAgICAgMSkgWE1MSHR0
cFJlcXVlc3Q6OnN0b3AgY2FuIHRyaWdnZXIgYSBKYXZhU2NyaXB0IGdhcmJhZ2UgY29sbGVjdGlv
bi4KKyAgICAgICAgMikgTm90aWZpY2F0aW9uQ2VudGVyOjpzdG9wIGNhbiBkZWxldGUgdGhlIGxh
c3QgcmVmZXJlbmNlcyB0byBub3RpZmljYXRpb25zOworICAgICAgICAgICB0aG9zZSBub3RpZmlj
YXRpb25zIGFyZSBhbHNvIGFjdGl2ZSBET00gb2JqZWN0cy4KKworICAgICAgICBCZXNpZGVzIGZp
eGluZyB0aGUgaXRlcmF0aW9uIGluIHRoYXQgZnVuY3Rpb24sIGRpZCBzb21lIG90aGVyIGZpeGVz
IGZvciB0aGUKKyAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBjbGFzcywgaW5jbHVkaW5n
IHNvbWUgY29kaW5nIHN0eWxlIGNoYW5nZXMuIE1hbnkgdXNlcworICAgICAgICBvZiBudWxscHRy
IGluc3RlYWQgb2YgMCwgd2l0aG91dCBsaXN0aW5nIGVhY2ggZnVuY3Rpb24gc2VwYXJhdGVseSBi
ZWxvdy4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQ29udGV4dDo6Y29udGV4dERlc3Ryb3llZCk6
IENhbGwgdGhyb3VnaCB0byB0aGUgYmFzZSBjbGFzcworICAgICAgICB2ZXJzaW9uIG9mIGNvbnRl
eHREZXN0cm95ZWQgcmF0aGVyIHRoYW4gcmVwZWF0aW5nIHdoYXQgaXQgZG9lcyAod2l0aCBhIGxh
cmdlCisgICAgICAgIGNvbW1lbnQgdGhhdCBkb2Vzbid0IGFja25vd2xlZGdlIHRoZSBiYXNlIGNs
YXNzIGFscmVhZCBkb2VzIGl0KS4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlQ29udGV4dC5oOiBSZW1vdmVkIHNvbWUgdW5uZWVkZWQgaW5jbHVkZXMuCisgICAgICAgIFdy
b3RlIG91dCAicHJpdmF0ZSIgZXhwbGljaXRseSBmb3IgZGVyaXZpbmcgZnJvbSBBY3RpdmVET01P
YmplY3QuIE1hZGUgdGhlCisgICAgICAgIEFjdGl2ZURPTU9iamVjdCBmdW5jdGlvbiBvdmVycmlk
ZXMgcHJpdmF0ZSwgYW5kIG1hcmtlZCB0aGVtIG92ZXJyaWRlIGFuZCBmaW5hbC4KKworICAgICAg
ICAqIGRvbS9BY3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9N
T2JqZWN0OjpBY3RpdmVET01PYmplY3QpOiBQYXNzIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBw
b2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NT2JqZWN0Ojp+QWN0aXZlRE9NT2Jq
ZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVET01PYmplY3Q6OnN1c3BlbmRJ
Zk5lZWRlZCk6IERpdHRvLgorCisgICAgICAgICogZG9tL0NvbnRleHREZXN0cnVjdGlvbk9ic2Vy
dmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyOjpv
YnNlcnZlQ29udGV4dCk6IFBhc3MgYSByZWZlcmVuY2UgaW5zdGVhZCBvZiBhIHBvaW50ZXIuCisK
KyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2Fn
ZVBvcnQ6Ok1lc3NhZ2VQb3J0KTogUGFzcyBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGEgcG9pbnRl
ci4KKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Ojp+TWVzc2FnZVBvcnQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZSk6IERpdHRvLgorCisg
ICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6IFVwZGF0
ZWQgZmxhZ3MgdXNlZAorICAgICAgICBmb3IgYXNzZXJ0aW9ucyBzbyB0aGV5IGFyZSBjb25kaXRp
b25hbCBhbmQgdXBkYXRlZCB0aGVpciBuYW1lcy4KKyAgICAgICAgKFdlYkNvcmU6OnRha2VPbmUp
OiBBZGRlZC4gSGVscGVyIGZ1bmN0aW9uIHRoYXQgd2UgY2FuIGNvbnNpZGVyIGZvciBIYXNoU2V0
IGluCisgICAgICAgIHRoZSBmdXR1cmU7IG1ha2VzIGxvb3BzIGJlbG93IGVhc2llciB0byByZWFk
LgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6flNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQpOiBDaGFuZ2VkIHRvIHVzZSBDKysxMQorICAgICAgICBmb3IgbG9vcHMgYW5k
IHRoZSB0YWtlT25lIGZ1bmN0aW9uIGFib3ZlLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6ZGlzcGF0Y2hNZXNzYWdlUG9ydEV2ZW50cyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y3JlYXRlZE1lc3NhZ2VQb3J0KTog
Q2hhbmdlZCB0byB0YWtlIGEgcmVmZXJlbmNlCisgICAgICAgIGZvciBjbGFyaXR5IGFuZCBzbyBp
dCBkb2Vzbid0IGhhdmUgdG8gZG8gYW4gYXNzZXJ0IHRoZSBwb2ludGVyIGlzIG5vbi1udWxsLgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZGVzdHJveWVkTWVzc2Fn
ZVBvcnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OmNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzKTogQ2hhbmdlZCB0byB1c2UKKyAgICAgICAgQysr
MTEgZm9yIGxvb3AgYW5kIHJld29yZGVkIGNvbW1lbnQgYW5kIHJlZGlkIGFzc2VydGlvbnMuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdXNwZW5kQWN0aXZlRE9N
T2JqZWN0cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6c3RvcEFjdGl2ZURPTU9iamVjdHMpOiBDaGFuZ2VkIHRvIHN1
cHBvcnQKKyAgICAgICAgcmVtb3ZhbCBvZiBhbiBhY3RpdmUgRE9NIG9iamVjdCBkdXJpbmcgdGhl
IHN0b3AgZnVuY3Rpb24uIEluY2x1ZGVkIG5ldyBjb21tZW50cworICAgICAgICB0byBjbGFyaWZ5
IHdoYXQgdGhlIHJ1bGVzIGFyZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RJZk5lZWRlZCk6IENoYW5nZWQgdG8gdGFrZQor
ICAgICAgICBhIHJlZmVyZW5jZSBmb3IgY2xhcml0eSBhbmQgc28gaXQgZG9lc24ndCBoYXZlIHRv
IGFzc2VydCBhIHBvaW50ZXIgaXMgbm9uLW51bGwuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpkaWRDcmVhdGVBY3RpdmVET01PYmplY3QpOiBEaXR0by4gR290IHJp
ZCBvZiB0aGUKKyAgICAgICAgQ1JBU0ggYmVjYXVzZSB0aGVyZSdzIG5vIGNvbXBlbGxpbmcgdmFs
dWUgdG8gdGhpcyBiZWluZyBhIHJlbGVhc2UgYXNzZXJ0IGluc3RlYWQgb2YgYQorICAgICAgICBu
b3JtYWwgYXNzZXJ0LgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
d2lsbERlc3Ryb3lBY3RpdmVET01PYmplY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmRpZENyZWF0ZURlc3RydWN0aW9uT2JzZXJ2ZXIpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OndpbGxEZXN0cm95
RGVzdHJ1Y3Rpb25PYnNlcnZlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6Y2xvc2VNZXNzYWdlUG9ydHMpOiBNb3ZlZCB0aGUgYm9keSBvZiB0aGlz
CisgICAgICAgIGZ1bmN0aW9uIGludG8gaXRzIG9uZSBjYWxsIHNpdGUsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OnN0b3BBY3RpdmVET01PYmplY3RzLAorICAgICAgICBzaW5jZSBpdCdzIHNpbXBs
ZSBlbm91Z2ggd2hlbiB3cml0dGVuIGFzIGEgQysrMTEgZm9yIGxvb3AuCisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpoYXNQZW5kaW5nQWN0aXZpdHkpOiBBZGRlZC4g
VGhpcyBmdW5jdGlvbiB3YXMKKyAgICAgICAgYWxyZWFkeSBleHBvcnRlZCBmb3Igd29ya2Vycywg
YW5kIGltcGxlbWVudGluZyBpdCBvdXRzaWRlIHRoaXMgY2xhc3MgcmVxdWlyZWQKKyAgICAgICAg
ZXhwb3NpbmcgdGhlIHByaXZhdGUgSGFzaFNldCBtZW1iZXJzOyBtb3JlIHNlbnNpYmxlIHRvIGlt
cGxlbWVudCBpdCBoZXJlIGFuZAorICAgICAgICBzaW1wbHkgbWFrZSBpdCBwdWJsaWMgaW4gV29y
a2VyR2xvYmFsU2NvcGUuCisKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
OiBSZW1vdmVkIHVubmVjZXNzYXJ5IGluY2x1ZGVzIGFuZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K
KyAgICAgICAgUmVtb3ZlZCBhIGxvbmctYWdvLWZpeGVkIEZJWE1FLiBDaGFuZ2VkIHZhcmlvdXMg
ZnVuY3Rpb25zIHRvIHRha2UgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mCisgICAgICAgIHBvaW50ZXJz
LiBBZGRlZCBhIHByb3RlY3RlZCBoYXNQZW5kaW5nQWN0aXZpdHkgZnVuY3Rpb24sIGRlbGV0ZWQg
dGhlIGNsb3NlTWVzc2FnZVBvcnRzCisgICAgICAgIGZ1bmN0aW9uLCBkZWxldGVkIHRoZSBBY3Rp
dmVET01PYmplY3RzU2V0IHR5cGVkZWYsIG1hZGUgdGhlIGFzc2VydGlvbiBmbGFncyBiZQorICAg
ICAgICAhQVNTRVJUX0RJU0FCTEVEIG9ubHksIGFuZCBkZWxldGVkIHRoZSBtZXNzYWdlUG9ydHMg
YW5kIGFjdGl2ZURPTU9iamVjdHMgZnVuY3Rpb25zLgorCisgICAgICAgICogd29ya2Vycy9Xb3Jr
ZXJHbG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJHbG9iYWxTY29wZTo6
aGFzUGVuZGluZ0FjdGl2aXR5KTogRGVsZXRlZC4gVGhpcyBpcyBub3cgaW1wbGVtZW50ZWQKKyAg
ICAgICAgaW4gdGhlIGJhc2UgY2xhc3MuCisKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2Jh
bFNjb3BlLmg6IE1ha2UgaGFzUGVuZGluZ0FjdGl2aXR5IGZ1bmN0aW9uIGZyb20gdGhlIGJhc2Ug
Y2xhc3MKKyAgICAgICAgcHVibGljIGluc3RlYWQgb2YgZGVjbGFyaW5nIGl0IGluIHRoaXMgY2xh
c3MuCisKIDIwMTQtMDQtMTkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAK
ICAgICAgICAgTGF0Y2hlZCBzY3JvbGxpbmcgbWF5IGludGVyYWN0IGJhZGx5IHdpdGggY3VzdG9t
IHByb2dyYW1tYXRpYyBzY3JvbGxpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNwcAppbmRleCBiZjczMGM4MDkxMzgzM2Yx
NjAwYWFhYWFmMjY0YjRjYzRiNjRlYTNlLi4yOGYwNzZhMzU5MWU3NDBlMTEyYzY1NmRkYWU0NTE0
M2JhOWNlMTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZUNvbnRleHQuY3BwCkBAIC0xMDQsNyArMTA0LDcgQEAgRGF0YWJhc2VDb250
ZXh0OjpEYXRhYmFzZUNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAg
ICAsIG1faGFzUmVxdWVzdGVkVGVybWluYXRpb24oZmFsc2UpCiAjaWYgUExBVEZPUk0oSU9TKQog
ICAgICwgbV9wYXVzZWQoZmFsc2UpCi0jZW5kaWYgLy9QTEFURk9STShJT1MpCisjZW5kaWYKIHsK
ICAgICAvLyBBY3RpdmVET01PYmplY3QgZXhwZWN0cyB0aGlzIHRvIGJlIGNhbGxlZCB0byBzZXQg
aW50ZXJuYWwgZmxhZ3MuCiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CkBAIC0xMjgsMjMgKzEyOCwx
NSBAQCBEYXRhYmFzZUNvbnRleHQ6On5EYXRhYmFzZUNvbnRleHQoKQogICAgIERhdGFiYXNlTWFu
YWdlcjo6bWFuYWdlcigpLmRpZERlc3RydWN0RGF0YWJhc2VDb250ZXh0KCk7CiB9CiAKLS8vIFRo
aXMgaXMgY2FsbGVkIGlmIHRoZSBhc3NvY2lhdGVkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaXMg
ZGVzdHJ1Y3Rpbmcgd2hpbGUKKy8vIFRoaXMgaXMgY2FsbGVkIGlmIHRoZSBhc3NvY2lhdGVkIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQgaXMgZGVzdHJveWVkIHdoaWxlCiAvLyB3ZSdyZSBzdGlsbCBh
c3NvY2lhdGVkIHdpdGggaXQuIFRoYXQncyBvdXIgY3VlIHRvIGRpc2Fzc29jaWF0ZSBhbmQgc2h1
dGRvd24uCi0vLyBUbyBkbyB0aGlzLCB3ZSBzdG9wIHRoZSBkYXRhYmFzZSBhbmQgbGV0IGV2ZXJ5
dGhpbmcgc2h1dGRvd24gbmF0dXJhbGx5Ci0vLyBiZWNhdXNlIHRoZSBkYXRhYmFzZSBjbG9zaW5n
IHByb2Nlc3MgbWF5IHN0aWxsIG1ha2UgdXNlIG9mIHRoaXMgY29udGV4dC4KKy8vIFRvIGRvIHRo
aXMsIHdlIHN0b3AgdGhlIGRhdGFiYXNlIGFuZCBsZXQgZXZlcnl0aGluZyBzaHV0IGRvd24gbmF0
dXJhbGx5CisvLyBiZWNhdXNlIHRoZSBkYXRhYmFzZSBjbG9zaW5nIHByb2Nlc3MgbWlnaHQgc3Rp
bGwgbWFrZSB1c2Ugb2YgdGhpcyBjb250ZXh0LgogLy8gSXQgaXMgbm90IHNhZmUgdG8ganVzdCBk
ZWxldGUgdGhlIGNvbnRleHQgaGVyZS4KIHZvaWQgRGF0YWJhc2VDb250ZXh0Ojpjb250ZXh0RGVz
dHJveWVkKCkKIHsKICAgICBzdG9wRGF0YWJhc2VzKCk7Ci0KLSAgICAvLyBOb3JtYWxseSwgd2ls
bERlc3Ryb3lBY3RpdmVET01PYmplY3QoKSBpcyBjYWxsZWQgaW4gfkFjdGl2ZURPTU9iamVjdCgp
LgotICAgIC8vIEhvd2V2ZXIsIHdlJ3JlIGhlcmUgYmVjYXVzZSB0aGUgZGVzdHJ1Y3RvciBoYXNu
J3QgYmVlbiBjYWxsZWQsIGFuZCB0aGUKLSAgICAvLyBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHdl
J3JlIGFzc29jaWF0ZWQgd2l0aCBpcyBhYm91dCB0byBiZSBkZXN0cnVjdGVkLgotICAgIC8vIFNv
LCBnbyBhaGVhZCBhbiB1bnJlZ2lzdGVyIHNlbGYgZnJvbSB0aGUgQWN0aXZlRE9NT2JqZWN0IGxp
c3QsIGFuZAotICAgIC8vIHNldCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgdG8gMCBzbyB0aGF0
IH5BY3RpdmVET01PYmplY3QoKSBkb2Vzbid0Ci0gICAgLy8gdHJ5IHRvIGRvIHNvIGFnYWluLgot
ICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+d2lsbERlc3Ryb3lBY3RpdmVET01PYmplY3Qo
dGhpcyk7Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gMDsKKyAgICBBY3RpdmVET01P
YmplY3Q6OmNvbnRleHREZXN0cm95ZWQoKTsKIH0KIAogLy8gc3RvcCgpIGlzIGZyb20gc3RvcEFj
dGl2ZURPTU9iamVjdHMoKSB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgb3duZXIgRnJhbWUKQEAg
LTE2Niw3ICsxNTgsNyBAQCBEYXRhYmFzZVRocmVhZCogRGF0YWJhc2VDb250ZXh0OjpkYXRhYmFz
ZVRocmVhZCgpCiAgICAgaWYgKCFtX2RhdGFiYXNlVGhyZWFkICYmICFtX2hhc09wZW5EYXRhYmFz
ZXMpIHsKICNpZiBQTEFURk9STShJT1MpCiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9kYXRh
YmFzZVRocmVhZE11dGV4KTsKLSNlbmRpZiAvL1BMQVRGT1JNKElPUykKKyNlbmRpZgogICAgICAg
ICAvLyBJdCdzIE9LIHRvIGFzayBmb3IgdGhlIG1fZGF0YWJhc2VUaHJlYWQgYWZ0ZXIgd2UndmUg
cmVxdWVzdGVkCiAgICAgICAgIC8vIHRlcm1pbmF0aW9uIGJlY2F1c2Ugd2UncmUgc3RpbGwgdXNp
bmcgaXQgdG8gZXhlY3V0ZSB0aGUgY2xvc2luZwogICAgICAgICAvLyBvZiB0aGUgZGF0YWJhc2Uu
IEhvd2V2ZXIsIGl0IGlzIE5PVCBPSyB0byBjcmVhdGUgYSBuZXcgdGhyZWFkCkBAIC0xNzcsMTEg
KzE2OSwxMiBAQCBEYXRhYmFzZVRocmVhZCogRGF0YWJhc2VDb250ZXh0OjpkYXRhYmFzZVRocmVh
ZCgpCiAgICAgICAgIC8vIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHdlIGFscmVhZHkgaGFkIGEgZGF0
YWJhc2UgdGhyZWFkIGFuZCB0ZXJtaW5hdGVkIGl0IGFuZCBzaG91bGQgbm90IGNyZWF0ZSBhbm90
aGVyLgogICAgICAgICBtX2RhdGFiYXNlVGhyZWFkID0gRGF0YWJhc2VUaHJlYWQ6OmNyZWF0ZSgp
OwogICAgICAgICBpZiAoIW1fZGF0YWJhc2VUaHJlYWQtPnN0YXJ0KCkpCi0gICAgICAgICAgICBt
X2RhdGFiYXNlVGhyZWFkID0gMDsKKyAgICAgICAgICAgIG1fZGF0YWJhc2VUaHJlYWQgPSBudWxs
cHRyOworCiAjaWYgUExBVEZPUk0oSU9TKQogICAgICAgICBpZiAobV9kYXRhYmFzZVRocmVhZCkK
ICAgICAgICAgICAgIG1fZGF0YWJhc2VUaHJlYWQtPnNldFBhdXNlZChtX3BhdXNlZCk7Ci0jZW5k
aWYgLy9QTEFURk9STShJT1MpCisjZW5kaWYKICAgICB9CiAKICAgICByZXR1cm4gbV9kYXRhYmFz
ZVRocmVhZC5nZXQoKTsKQEAgLTE5OCw3ICsxOTEsNyBAQCB2b2lkIERhdGFiYXNlQ29udGV4dDo6
c2V0UGF1c2VkKGJvb2wgcGF1c2VkKQogfQogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIAotYm9v
bCBEYXRhYmFzZUNvbnRleHQ6OnN0b3BEYXRhYmFzZXMoRGF0YWJhc2VUYXNrU3luY2hyb25pemVy
KiBjbGVhbnVwU3luYykKK2Jvb2wgRGF0YWJhc2VDb250ZXh0OjpzdG9wRGF0YWJhc2VzKERhdGFi
YXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyKQogewogICAgIGlmIChtX2lzUmVnaXN0
ZXJlZCkgewogICAgICAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS51bnJlZ2lzdGVyRGF0
YWJhc2VDb250ZXh0KHRoaXMpOwpAQCAtMjE2LDcgKzIwOSw3IEBAIGJvb2wgRGF0YWJhc2VDb250
ZXh0OjpzdG9wRGF0YWJhc2VzKERhdGFiYXNlVGFza1N5bmNocm9uaXplciogY2xlYW51cFN5bmMp
CiAgICAgLy8gRGF0YWJhc2VUaHJlYWQuCiAKICAgICBpZiAobV9kYXRhYmFzZVRocmVhZCAmJiAh
bV9oYXNSZXF1ZXN0ZWRUZXJtaW5hdGlvbikgewotICAgICAgICBtX2RhdGFiYXNlVGhyZWFkLT5y
ZXF1ZXN0VGVybWluYXRpb24oY2xlYW51cFN5bmMpOworICAgICAgICBtX2RhdGFiYXNlVGhyZWFk
LT5yZXF1ZXN0VGVybWluYXRpb24oc3luY2hyb25pemVyKTsKICAgICAgICAgbV9oYXNSZXF1ZXN0
ZWRUZXJtaW5hdGlvbiA9IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5o
CmluZGV4IDAyMDNlOTg0ZmU2NjIxZjY3ZWEzMGE1M2M5MjZkOTU4NmIzZmU5NjEuLjFlYWMyOTRi
MGFhMzNhYTU3NTY4YTUwOWRkZjJmMDQxNmYwMDA4NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuaApAQCAtMzEsNDAgKzMx
LDM2IEBACiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkRhdGFiYXNlRGV0YWlscy5oIgotI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRT
YWZlUmVmQ291bnRlZC5oPgogCiAjaWYgUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCisjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBEYXRhYmFzZTsKK2NsYXNzIERhdGFiYXNlRGV0YWlsczsKIGNsYXNz
IERhdGFiYXNlQmFja2VuZENvbnRleHQ7CiBjbGFzcyBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXI7
CiBjbGFzcyBEYXRhYmFzZVRocmVhZDsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAK
LWNsYXNzIERhdGFiYXNlQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRh
YmFzZUNvbnRleHQ+LCBBY3RpdmVET01PYmplY3QgeworY2xhc3MgRGF0YWJhc2VDb250ZXh0IDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERhdGFiYXNlQ29udGV4dD4sIHByaXZhdGUgQWN0
aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5EYXRhYmFzZUNvbnRleHQoKTsK
IAotICAgIC8vIEZvciBsaWZlLWN5Y2xlIG1hbmFnZW1lbnQgKGluaGVyaXRlZCBmcm9tIEFjdGl2
ZURPTU9iamVjdCk6Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc3RvcCgpOwotCiAgICAgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250
ZXh0PiBiYWNrZW5kKCk7CiAgICAgRGF0YWJhc2VUaHJlYWQqIGRhdGFiYXNlVGhyZWFkKCk7CisK
ICNpZiBQTEFURk9STShJT1MpCiAgICAgdm9pZCBzZXRQYXVzZWQoYm9vbCk7Ci0jZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQorI2VuZGlmCiAKICAgICB2b2lkIHNldEhhc09wZW5EYXRhYmFzZXMoKSB7
IG1faGFzT3BlbkRhdGFiYXNlcyA9IHRydWU7IH0KICAgICBib29sIGhhc09wZW5EYXRhYmFzZXMo
KSB7IHJldHVybiBtX2hhc09wZW5EYXRhYmFzZXM7IH0KIAotICAgIC8vIFdoZW4gdGhlIGRhdGFi
YXNlIGNsZWFudXAgaXMgZG9uZSwgY2xlYW51cFN5bmMgd2lsbCBiZSBzaWduYWxsZWQuCisgICAg
Ly8gV2hlbiB0aGUgZGF0YWJhc2UgY2xlYW51cCBpcyBkb25lLCB0aGUgc3ljaHJvbml6ZXIgd2ls
bCBiZSBzaWduYWxsZWQuCiAgICAgYm9vbCBzdG9wRGF0YWJhc2VzKERhdGFiYXNlVGFza1N5bmNo
cm9uaXplciopOwogCiAgICAgYm9vbCBhbGxvd0RhdGFiYXNlQWNjZXNzKCkgY29uc3Q7CkBAIC03
Myw3ICs2OSwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IERhdGFiYXNlQ29u
dGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKLSAgICB2b2lkIHN0b3BEYXRhYmFzZXMo
KSB7IHN0b3BEYXRhYmFzZXMoMCk7IH0KKyAgICB2b2lkIHN0b3BEYXRhYmFzZXMoKSB7IHN0b3BE
YXRhYmFzZXMobnVsbHB0cik7IH0KKworICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVk
KCkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSBvdmVycmlkZSBmaW5h
bDsKIAogICAgIFJlZlB0cjxEYXRhYmFzZVRocmVhZD4gbV9kYXRhYmFzZVRocmVhZDsKICAgICBi
b29sIG1faGFzT3BlbkRhdGFiYXNlczsgLy8gVGhpcyBuZXZlciBjaGFuZ2VzIGJhY2sgdG8gZmFs
c2UsIGV2ZW4gYWZ0ZXIgdGhlIGRhdGFiYXNlIHRocmVhZCBpcyBjbG9zZWQuCkBAIC04Niw3ICs4
NSw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIE11dGV4IG1fZGF0YWJhc2VU
aHJlYWRNdXRleDsKICAgICBib29sIG1fcGF1c2VkOwotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
KyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0
aXZlRE9NT2JqZWN0LmNwcAppbmRleCA2ZjA0MTI3MTdlY2VmNWQyMDE0NDM0MWMzYTAzMjUxNDZk
NDAxMzQzLi5lM2U4NmQ2N2IyY2QwOGNkZDk3MGE0NWJhZDFjMWQ0OWE3NjcwOWUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtNDQsNyArNDQsNyBAQCBBY3RpdmVE
T01PYmplY3Q6OkFjdGl2ZURPTU9iamVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5kaWRDcmVhdGVBY3RpdmVET01PYmplY3QodGhpcyk7CisgICAgbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5kaWRDcmVhdGVBY3RpdmVET01PYmplY3QoKnRoaXMpOwogfQogCiBB
Y3RpdmVET01PYmplY3Q6On5BY3RpdmVET01PYmplY3QoKQpAQCAtNjIsNyArNjIsNyBAQCBBY3Rp
dmVET01PYmplY3Q6On5BY3RpdmVET01PYmplY3QoKQogICAgIC8vIGhlcmUuCiAgICAgaWYgKG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCkgewogICAgICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgICAgIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+d2lsbERlc3Ryb3lBY3RpdmVET01PYmplY3QodGhpcyk7CisgICAgICAgIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+d2lsbERlc3Ryb3lBY3RpdmVET01PYmplY3QoKnRoaXMpOwog
ICAgIH0KIH0KIApAQCAtNzUsNyArNzUsNyBAQCB2b2lkIEFjdGl2ZURPTU9iamVjdDo6c3VzcGVu
ZElmTmVlZGVkKCkKICAgICBpZiAoIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zdXNwZW5kQWN0aXZlRE9N
T2JqZWN0SWZOZWVkZWQodGhpcyk7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zdXNw
ZW5kQWN0aXZlRE9NT2JqZWN0SWZOZWVkZWQoKnRoaXMpOwogfQogCiBib29sIEFjdGl2ZURPTU9i
amVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Db250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuY3BwCmluZGV4IDU2MGM1ZmI4ZmM4MzFhNWZi
NmI3ODI2MDc5YjFmZjY3NjBhODJiMjkuLmEzMzM5MTgwZThlMDNhM2U5ZjM4NmUwYjExMmQ4MTdh
ZGYzOTc1ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250ZXh0RGVzdHJ1Y3Rp
b25PYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRleHREZXN0cnVjdGlv
bk9ic2VydmVyLmNwcApAQCAtMzIsMzQgKzMyLDM0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyOjpDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQotICAgIDogbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KDApCisgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
bnVsbHB0cikKIHsKICAgICBvYnNlcnZlQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsK
IH0KIAogQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXI6On5Db250ZXh0RGVzdHJ1Y3Rpb25PYnNl
cnZlcigpCiB7Ci0gICAgb2JzZXJ2ZUNvbnRleHQoMCk7CisgICAgb2JzZXJ2ZUNvbnRleHQobnVs
bHB0cik7CiB9CiAKIHZvaWQgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXI6Om9ic2VydmVDb250
ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiB7CiAg
ICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkgewogICAgICAgICBBU1NFUlQobV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgICAgIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+d2lsbERlc3Ryb3lEZXN0cnVjdGlvbk9ic2VydmVyKHRoaXMpOwor
ICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPndpbGxEZXN0cm95RGVzdHJ1Y3Rpb25P
YnNlcnZlcigqdGhpcyk7CiAgICAgfQogCiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0g
c2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpIHsKICAgICAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0
VGhyZWFkKCkpOwotICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRpZENyZWF0ZURl
c3RydWN0aW9uT2JzZXJ2ZXIodGhpcyk7CisgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+ZGlkQ3JlYXRlRGVzdHJ1Y3Rpb25PYnNlcnZlcigqdGhpcyk7CiAgICAgfQogfQogCiB2b2lk
IENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyOjpjb250ZXh0RGVzdHJveWVkKCkKIHsKLSAgICBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSAwOworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVz
c2FnZVBvcnQuY3BwCmluZGV4IGRjZGYwZjhhOWJkZjg3NWYwMDcyY2Q2NmJiN2NkZTYxNTcwYTli
OWMuLjJjYTJiODMzNDI2OWY2M2UyMmVlOTY0NjQwYzI1ZDE3ZjdhMWIxN2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL01lc3NhZ2VQb3J0LmNwcApAQCAtNDAsNyArNDAsNyBAQCBNZXNzYWdlUG9ydDo6TWVzc2Fn
ZVBvcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAg
ICAsIG1fY2xvc2VkKGZhbHNlKQogICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KCZzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KQogewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+Y3Jl
YXRlZE1lc3NhZ2VQb3J0KHRoaXMpOworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+Y3Jl
YXRlZE1lc3NhZ2VQb3J0KCp0aGlzKTsKIAogICAgIC8vIERvbid0IG5lZWQgdG8gY2FsbCBwcm9j
ZXNzTWVzc2FnZVBvcnRNZXNzYWdlc1Nvb24oKSBoZXJlLCBiZWNhdXNlIHRoZSBwb3J0IHdpbGwg
bm90IGJlIG9wZW5lZCB1bnRpbCBzdGFydCgpIGlzIGludm9rZWQuCiB9CkBAIC00OSw3ICs0OSw3
IEBAIE1lc3NhZ2VQb3J0Ojp+TWVzc2FnZVBvcnQoKQogewogICAgIGNsb3NlKCk7CiAgICAgaWYg
KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKLSAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5kZXN0cm95ZWRNZXNzYWdlUG9ydCh0aGlzKTsKKyAgICAgICAgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5kZXN0cm95ZWRNZXNzYWdlUG9ydCgqdGhpcyk7CiB9CiAKIHZvaWQgTWVzc2Fn
ZVBvcnQ6OnBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNz
YWdlLCBNZXNzYWdlUG9ydCogcG9ydCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC04OSwxMCArODks
MTAgQEAgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gTWVzc2FnZVBvcnQ6OmRp
c2VudGFuZ2xlKCkKIAogICAgIG1fZW50YW5nbGVkQ2hhbm5lbC0+ZGlzZW50YW5nbGUoKTsKIAot
ICAgIC8vIFdlIGNhbid0IHJlY2VpdmUgYW55IG1lc3NhZ2VzIG9yIGdlbmVyYXRlIGFueSBldmVu
dHMsIHNvIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgbGlzdCBvZiBhY3RpdmUgcG9ydHMuCisg
ICAgLy8gV2UgY2FuJ3QgcmVjZWl2ZSBhbnkgbWVzc2FnZXMgb3IgZ2VuZXJhdGUgYW55IGV2ZW50
cyBhZnRlciB0aGlzLCBzbyByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGxpc3Qgb2YgYWN0aXZl
IHBvcnRzLgogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotICAgIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+ZGVzdHJveWVkTWVzc2FnZVBvcnQodGhpcyk7Ci0gICAgbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0ID0gMDsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PmRlc3Ryb3llZE1lc3NhZ2VQb3J0KCp0aGlzKTsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQgPSBudWxscHRyOwogCiAgICAgcmV0dXJuIHN0ZDo6bW92ZShtX2VudGFuZ2xlZENoYW5uZWwp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCmlu
ZGV4IDYxOWY5NTNiOTRkMTUwYmVkMmJmYzRkMWRmYTFmY2E5MWExZDI1YWEuLmM4ZjM4NGFiMzM0
OTBkNTc5OTZmZjQxMWM5OGYyZDU0M2NlYjRlZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKQEAgLTkyLDMxICs5Miw1MCBAQCB2b2lkIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OkFkZENvbnNvbGVNZXNzYWdlVGFzazo6cGVyZm9ybVRhc2soU2Ny
aXB0RXhlY3V0aW9uQwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpTY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkKLSAgICA6IG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyhmYWxzZSkKLSAg
ICAsIG1faW5EZXN0cnVjdG9yKGZhbHNlKQotICAgICwgbV9jaXJjdWxhclNlcXVlbnRpYWxJRCgw
KQorICAgIDogbV9jaXJjdWxhclNlcXVlbnRpYWxJRCgwKQogICAgICwgbV9pbkRpc3BhdGNoRXJy
b3JFdmVudChmYWxzZSkKICAgICAsIG1fYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZChmYWxz
ZSkKICAgICAsIG1fcmVhc29uRm9yU3VzcGVuZGluZ0FjdGl2ZURPTU9iamVjdHMoc3RhdGljX2Nh
c3Q8QWN0aXZlRE9NT2JqZWN0OjpSZWFzb25Gb3JTdXNwZW5zaW9uPigtMSkpCiAgICAgLCBtX2Fj
dGl2ZURPTU9iamVjdHNBcmVTdG9wcGVkKGZhbHNlKQorICAgICwgbV9hY3RpdmVET01PYmplY3RB
ZGRpdGlvbkZvcmJpZGRlbihmYWxzZSkKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgLCBtX2lu
U2NyaXB0RXhlY3V0aW9uQ29udGV4dERlc3RydWN0b3IoZmFsc2UpCisgICAgLCBtX2FjdGl2ZURP
TU9iamVjdFJlbW92YWxGb3JiaWRkZW4oZmFsc2UpCisjZW5kaWYKK3sKK30KKworLy8gRklYTUU6
IFNob3VsZCB3ZSBtYWtlIHRoaXMgYSBtZW1iZXIgZnVuY3Rpb24gb2YgSGFzaFNldD8KKy8vIFdo
aWNoIG5hbWUgaXMgYmVzdDogdGFrZU9uZSwgdGFrZUZpcnN0LCBvciB0YWtlUmFuZG9tPwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gVCB0YWtlT25lKEhhc2hTZXQ8VD4mIHNldCkKIHsKKyAgICBBU1NF
UlQoIXNldC5pc0VtcHR5KCkpOworICAgIGF1dG8gaXRlcmF0b3IgPSBzZXQuYmVnaW4oKTsKKyAg
ICBUIHJlc3VsdCA9IHN0ZDo6bW92ZSgqaXRlcmF0b3IpOworICAgIHNldC5yZW1vdmUoaXRlcmF0
b3IpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6On5T
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkKIHsKLSAgICBtX2luRGVzdHJ1Y3RvciA9IHRydWU7Ci0g
ICAgZm9yIChIYXNoU2V0PENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyKj46Oml0ZXJhdG9yIGl0
ZXIgPSBtX2Rlc3RydWN0aW9uT2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9kZXN0cnVjdGlv
bk9ic2VydmVycy5lbmQoKTsgaXRlciA9IG1fZGVzdHJ1Y3Rpb25PYnNlcnZlcnMuYmVnaW4oKSkg
ewotICAgICAgICBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlciogb2JzZXJ2ZXIgPSAqaXRlcjsK
LSAgICAgICAgbV9kZXN0cnVjdGlvbk9ic2VydmVycy5yZW1vdmUob2JzZXJ2ZXIpOworI2lmICFB
U1NFUlRfRElTQUJMRUQKKyAgICBtX2luU2NyaXB0RXhlY3V0aW9uQ29udGV4dERlc3RydWN0b3Ig
PSB0cnVlOworI2VuZGlmCisKKyAgICB3aGlsZSAoIW1fZGVzdHJ1Y3Rpb25PYnNlcnZlcnMuaXNF
bXB0eSgpKSB7CisgICAgICAgIGF1dG8qIG9ic2VydmVyID0gdGFrZU9uZShtX2Rlc3RydWN0aW9u
T2JzZXJ2ZXJzKTsKICAgICAgICAgQVNTRVJUKG9ic2VydmVyLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgPT0gdGhpcyk7CiAgICAgICAgIG9ic2VydmVyLT5jb250ZXh0RGVzdHJveWVkKCk7CiAg
ICAgfQogCi0gICAgSGFzaFNldDxNZXNzYWdlUG9ydCo+OjppdGVyYXRvciBtZXNzYWdlUG9ydHNF
bmQgPSBtX21lc3NhZ2VQb3J0cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8TWVzc2FnZVBvcnQq
Pjo6aXRlcmF0b3IgaXRlciA9IG1fbWVzc2FnZVBvcnRzLmJlZ2luKCk7IGl0ZXIgIT0gbWVzc2Fn
ZVBvcnRzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKCgqaXRlciktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAgICAgICAgKCppdGVyKS0+Y29udGV4dERlc3Ryb3ll
ZCgpOworICAgIGZvciAoYXV0byogcG9ydCA6IG1fbWVzc2FnZVBvcnRzKSB7CisgICAgICAgIEFT
U0VSVChwb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7CisgICAgICAgIHBv
cnQtPmNvbnRleHREZXN0cm95ZWQoKTsKICAgICB9CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisg
ICAgbV9pblNjcmlwdEV4ZWN1dGlvbkNvbnRleHREZXN0cnVjdG9yID0gZmFsc2U7CisjZW5kaWYK
IH0KIAogdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpwcm9jZXNzTWVzc2FnZVBvcnRNZXNz
YWdlc1Nvb24oKQpAQCAtMTI4LDUzICsxNDcsNjAgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpkaXNwYXRjaE1lc3NhZ2VQb3J0RXZlbnRzKCkKIHsKICAgICBSZWY8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dD4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICAvLyBNYWtlIGEgZnJvemVuIGNvcHku
CisgICAgLy8gTWFrZSBhIGZyb3plbiBjb3B5IG9mIHRoZSBwb3J0cyBzbyB3ZSBjYW4gaXRlcmF0
ZSB3aGlsZSBuZXcgb25lcyBtaWdodCBiZSBhZGRlZCBvciBkZXN0cm95ZWQuCiAgICAgVmVjdG9y
PE1lc3NhZ2VQb3J0Kj4gcG9ydHM7CiAgICAgY29weVRvVmVjdG9yKG1fbWVzc2FnZVBvcnRzLCBw
b3J0cyk7Ci0KLSAgICB1bnNpZ25lZCBwb3J0Q291bnQgPSBwb3J0cy5zaXplKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvcnRDb3VudDsgKytpKSB7Ci0gICAgICAgIE1lc3NhZ2VQ
b3J0KiBwb3J0ID0gcG9ydHNbaV07Ci0gICAgICAgIC8vIFRoZSBwb3J0IG1heSBiZSBkZXN0cm95
ZWQsIGFuZCBhbm90aGVyIG9uZSBjcmVhdGVkIGF0IHRoZSBzYW1lIGFkZHJlc3MsIGJ1dCB0aGlz
IGlzIHNhZmUsIGFzIHRoZSB3b3JzdCB0aGF0IGNhbiBoYXBwZW4KLSAgICAgICAgLy8gYXMgYSBy
ZXN1bHQgaXMgdGhhdCBkaXNwYXRjaE1lc3NhZ2VzKCkgd2lsbCBiZSBjYWxsZWQgbmVlZGxlc3Ns
eS4KKyAgICBmb3IgKGF1dG8qIHBvcnQgOiBwb3J0cykgeworICAgICAgICAvLyBUaGUgcG9ydCBt
YXkgYmUgZGVzdHJveWVkLCBhbmQgYW5vdGhlciBvbmUgY3JlYXRlZCBhdCB0aGUgc2FtZSBhZGRy
ZXNzLAorICAgICAgICAvLyBidXQgdGhpcyBpcyBoYXJtbGVzcy4gVGhlIHdvcnN0IHRoYXQgY2Fu
IGhhcHBlbiBhcyBhIHJlc3VsdCBpcyB0aGF0CisgICAgICAgIC8vIGRpc3BhdGNoTWVzc2FnZXMo
KSB3aWxsIGJlIGNhbGxlZCBuZWVkbGVzc2x5LgogICAgICAgICBpZiAobV9tZXNzYWdlUG9ydHMu
Y29udGFpbnMocG9ydCkgJiYgcG9ydC0+c3RhcnRlZCgpKQogICAgICAgICAgICAgcG9ydC0+ZGlz
cGF0Y2hNZXNzYWdlcygpOwogICAgIH0KIH0KIAotdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpjcmVhdGVkTWVzc2FnZVBvcnQoTWVzc2FnZVBvcnQqIHBvcnQpCit2b2lkIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OmNyZWF0ZWRNZXNzYWdlUG9ydChNZXNzYWdlUG9ydCYgcG9ydCkKIHsKLSAg
ICBBU1NFUlQocG9ydCk7CiAgICAgQVNTRVJUKChpc0RvY3VtZW50KCkgJiYgaXNNYWluVGhyZWFk
KCkpCiAgICAgICAgIHx8IChpc1dvcmtlckdsb2JhbFNjb3BlKCkgJiYgY3VycmVudFRocmVhZCgp
ID09IHRvV29ya2VyR2xvYmFsU2NvcGUodGhpcyktPnRocmVhZCgpLnRocmVhZElEKCkpKTsKIAot
ICAgIG1fbWVzc2FnZVBvcnRzLmFkZChwb3J0KTsKKyAgICBtX21lc3NhZ2VQb3J0cy5hZGQoJnBv
cnQpOwogfQogCi12b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmRlc3Ryb3llZE1lc3NhZ2VQ
b3J0KE1lc3NhZ2VQb3J0KiBwb3J0KQordm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpkZXN0
cm95ZWRNZXNzYWdlUG9ydChNZXNzYWdlUG9ydCYgcG9ydCkKIHsKLSAgICBBU1NFUlQocG9ydCk7
CiAgICAgQVNTRVJUKChpc0RvY3VtZW50KCkgJiYgaXNNYWluVGhyZWFkKCkpCiAgICAgICAgIHx8
IChpc1dvcmtlckdsb2JhbFNjb3BlKCkgJiYgY3VycmVudFRocmVhZCgpID09IHRvV29ya2VyR2xv
YmFsU2NvcGUodGhpcyktPnRocmVhZCgpLnRocmVhZElEKCkpKTsKIAotICAgIG1fbWVzc2FnZVBv
cnRzLnJlbW92ZShwb3J0KTsKKyAgICBtX21lc3NhZ2VQb3J0cy5yZW1vdmUoJnBvcnQpOwogfQog
CiBib29sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNhblN1c3BlbmRBY3RpdmVET01PYmplY3Rz
KCkKIHsKLSAgICAvLyBObyBwcm90ZWN0aW9uIGFnYWluc3QgbV9hY3RpdmVET01PYmplY3RzIGNo
YW5naW5nIGR1cmluZyBpdGVyYXRpb246IGNhblN1c3BlbmQoKSBzaG91bGRuJ3QgZXhlY3V0ZSBh
cmJpdHJhcnkgSlMuCi0gICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gdHJ1ZTsKLSAg
ICBBY3RpdmVET01PYmplY3RzU2V0OjppdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gbV9hY3Rp
dmVET01PYmplY3RzLmVuZCgpOwotICAgIGZvciAoQWN0aXZlRE9NT2JqZWN0c1NldDo6aXRlcmF0
b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVj
dHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQoKCppdGVyKS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQoKCppdGVyKS0+c3VzcGVuZElmTmVl
ZGVkQ2FsbGVkKCkpOwotICAgICAgICBpZiAoISgqaXRlciktPmNhblN1c3BlbmQoKSkgewotICAg
ICAgICAgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCBjYW5TdXNwZW5kID0gdHJ1ZTsKKworICAgIG1fYWN0
aXZlRE9NT2JqZWN0QWRkaXRpb25Gb3JiaWRkZW4gPSB0cnVlOworI2lmICFBU1NFUlRfRElTQUJM
RUQKKyAgICBtX2FjdGl2ZURPTU9iamVjdFJlbW92YWxGb3JiaWRkZW4gPSB0cnVlOworI2VuZGlm
CisKKyAgICAvLyBObyBwcm90ZWN0aW9uIGFnYWluc3QgbV9hY3RpdmVET01PYmplY3RzIGNoYW5n
aW5nIGR1cmluZyBpdGVyYXRpb246IGNhblN1c3BlbmQoKQorICAgIC8vIGZ1bmN0aW9ucyBzaG91
bGQgbm90IGFkZCBuZXcgYWN0aXZlIERPTSBvYmplY3RzLCBub3IgZXhlY3V0ZSBhcmJpdHJhcnkg
SmF2YVNjcmlwdC4KKyAgICBmb3IgKGF1dG8qIG9iamVjdCA6IG1fYWN0aXZlRE9NT2JqZWN0cykg
eworICAgICAgICBBU1NFUlQob2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhp
cyk7CisgICAgICAgIEFTU0VSVChvYmplY3QtPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKKyAg
ICAgICAgaWYgKCFvYmplY3QtPmNhblN1c3BlbmQoKSkgeworICAgICAgICAgICAgY2FuU3VzcGVu
ZCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0gICAgbV9p
dGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7CisKKyAg
ICBtX2FjdGl2ZURPTU9iamVjdEFkZGl0aW9uRm9yYmlkZGVuID0gZmFsc2U7CisjaWYgIUFTU0VS
VF9ESVNBQkxFRAorICAgIG1fYWN0aXZlRE9NT2JqZWN0UmVtb3ZhbEZvcmJpZGRlbiA9IGZhbHNl
OworI2VuZGlmCisKKyAgICByZXR1cm4gY2FuU3VzcGVuZDsKIH0KIAogdm9pZCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhBY3RpdmVET01PYmplY3Q6OlJl
YXNvbkZvclN1c3BlbnNpb24gd2h5KQpAQCAtMTg2LDE1ICsyMTIsMjQgQEAgdm9pZCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhBY3RpdmVET01PYmplY3Q6
OlJlYXNvbkZvclMKICAgICB9CiAjZW5kaWYKIAotICAgIC8vIE5vIHByb3RlY3Rpb24gYWdhaW5z
dCBtX2FjdGl2ZURPTU9iamVjdHMgY2hhbmdpbmcgZHVyaW5nIGl0ZXJhdGlvbjogc3VzcGVuZCgp
IHNob3VsZG4ndCBleGVjdXRlIGFyYml0cmFyeSBKUy4KLSAgICBtX2l0ZXJhdGluZ0FjdGl2ZURP
TU9iamVjdHMgPSB0cnVlOwotICAgIEFjdGl2ZURPTU9iamVjdHNTZXQ6Oml0ZXJhdG9yIGFjdGl2
ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7Ci0gICAgZm9yIChBY3RpdmVE
T01PYmplY3RzU2V0OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7
IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVCgoKml0
ZXIpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VSVCgo
Kml0ZXIpLT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAgICAgICgqaXRlciktPnN1c3Bl
bmQod2h5KTsKKyAgICBtX2FjdGl2ZURPTU9iamVjdEFkZGl0aW9uRm9yYmlkZGVuID0gdHJ1ZTsK
KyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgbV9hY3RpdmVET01PYmplY3RSZW1vdmFsRm9yYmlk
ZGVuID0gdHJ1ZTsKKyNlbmRpZgorCisgICAgLy8gTm8gcHJvdGVjdGlvbiBhZ2FpbnN0IG1fYWN0
aXZlRE9NT2JqZWN0cyBjaGFuZ2luZyBkdXJpbmcgaXRlcmF0aW9uOiBzdXNwZW5kKCkKKyAgICAv
LyBmdW5jdGlvbnMgc2hvdWxkIG5vdCBhZGQgbmV3IGFjdGl2ZSBET00gb2JqZWN0cywgbm9yIGV4
ZWN1dGUgYXJiaXRyYXJ5IEphdmFTY3JpcHQuCisgICAgZm9yIChhdXRvKiBvYmplY3QgOiBtX2Fj
dGl2ZURPTU9iamVjdHMpIHsKKyAgICAgICAgQVNTRVJUKG9iamVjdC0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQob2JqZWN0LT5zdXNwZW5kSWZOZWVk
ZWRDYWxsZWQoKSk7CisgICAgICAgIG9iamVjdC0+c3VzcGVuZCh3aHkpOwogICAgIH0KLSAgICBt
X2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKKworICAgIG1fYWN0aXZlRE9NT2Jq
ZWN0QWRkaXRpb25Gb3JiaWRkZW4gPSBmYWxzZTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAg
bV9hY3RpdmVET01PYmplY3RSZW1vdmFsRm9yYmlkZGVuID0gZmFsc2U7CisjZW5kaWYKKwogICAg
IG1fYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCA9IHRydWU7CiAgICAgbV9yZWFzb25Gb3JT
dXNwZW5kaW5nQWN0aXZlRE9NT2JqZWN0cyA9IHdoeTsKIH0KQEAgLTIwMywxNyArMjM4LDI1IEBA
IHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0cyhBY3Rp
dmVET01PYmplY3Q6OlJlYXNvbkZvclN1CiB7CiAgICAgaWYgKG1fcmVhc29uRm9yU3VzcGVuZGlu
Z0FjdGl2ZURPTU9iamVjdHMgIT0gd2h5KQogICAgICAgICByZXR1cm47Ci0KICAgICBtX2FjdGl2
ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQgPSBmYWxzZTsKLSAgICAvLyBObyBwcm90ZWN0aW9uIGFn
YWluc3QgbV9hY3RpdmVET01PYmplY3RzIGNoYW5naW5nIGR1cmluZyBpdGVyYXRpb246IHJlc3Vt
ZSgpIHNob3VsZG4ndCBleGVjdXRlIGFyYml0cmFyeSBKUy4KLSAgICBtX2l0ZXJhdGluZ0FjdGl2
ZURPTU9iamVjdHMgPSB0cnVlOwotICAgIEFjdGl2ZURPTU9iamVjdHNTZXQ6Oml0ZXJhdG9yIGFj
dGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7Ci0gICAgZm9yIChBY3Rp
dmVET01PYmplY3RzU2V0OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2lu
KCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVCgo
Kml0ZXIpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VS
VCgoKml0ZXIpLT5zdXNwZW5kSWZOZWVkZWRDYWxsZWQoKSk7Ci0gICAgICAgICgqaXRlciktPnJl
c3VtZSgpOworCisgICAgbV9hY3RpdmVET01PYmplY3RBZGRpdGlvbkZvcmJpZGRlbiA9IHRydWU7
CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIG1fYWN0aXZlRE9NT2JqZWN0UmVtb3ZhbEZvcmJp
ZGRlbiA9IHRydWU7CisjZW5kaWYKKworICAgIC8vIE5vIHByb3RlY3Rpb24gYWdhaW5zdCBtX2Fj
dGl2ZURPTU9iamVjdHMgY2hhbmdpbmcgZHVyaW5nIGl0ZXJhdGlvbjogcmVzdW1lKCkKKyAgICAv
LyBmdW5jdGlvbnMgc2hvdWxkIG5vdCBhZGQgbmV3IGFjdGl2ZSBET00gb2JqZWN0cywgbm9yIGV4
ZWN1dGUgYXJiaXRyYXJ5IEphdmFTY3JpcHQuCisgICAgZm9yIChhdXRvKiBvYmplY3QgOiBtX2Fj
dGl2ZURPTU9iamVjdHMpIHsKKyAgICAgICAgQVNTRVJUKG9iamVjdC0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQob2JqZWN0LT5zdXNwZW5kSWZOZWVk
ZWRDYWxsZWQoKSk7CisgICAgICAgIG9iamVjdC0+cmVzdW1lKCk7CiAgICAgfQotICAgIG1faXRl
cmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOworCisgICAgbV9hY3RpdmVET01PYmplY3RB
ZGRpdGlvbkZvcmJpZGRlbiA9IGZhbHNlOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBtX2Fj
dGl2ZURPTU9iamVjdFJlbW92YWxGb3JiaWRkZW4gPSBmYWxzZTsKKyNlbmRpZgogfQogCiB2b2lk
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN0b3BBY3RpdmVET01PYmplY3RzKCkKQEAgLTIyMSw2
NiArMjY0LDczIEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3RvcEFjdGl2ZURPTU9i
amVjdHMoKQogICAgIGlmIChtX2FjdGl2ZURPTU9iamVjdHNBcmVTdG9wcGVkKQogICAgICAgICBy
ZXR1cm47CiAgICAgbV9hY3RpdmVET01PYmplY3RzQXJlU3RvcHBlZCA9IHRydWU7Ci0gICAgLy8g
Tm8gcHJvdGVjdGlvbiBhZ2FpbnN0IG1fYWN0aXZlRE9NT2JqZWN0cyBjaGFuZ2luZyBkdXJpbmcg
aXRlcmF0aW9uOiBzdG9wKCkgc2hvdWxkbid0IGV4ZWN1dGUgYXJiaXRyYXJ5IEpTLgotICAgIG1f
aXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7Ci0gICAgQWN0aXZlRE9NT2JqZWN0c1Nl
dDo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsK
LSAgICBmb3IgKEFjdGl2ZURPTU9iamVjdHNTZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjdGl2ZURP
TU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKLSAg
ICAgICAgQVNTRVJUKCgqaXRlciktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsK
LSAgICAgICAgQVNTRVJUKCgqaXRlciktPnN1c3BlbmRJZk5lZWRlZENhbGxlZCgpKTsKLSAgICAg
ICAgKCppdGVyKS0+c3RvcCgpOworCisgICAgLy8gTWFrZSBhIGZyb3plbiBjb3B5IG9mIHRoZSBv
YmplY3RzIHNvIHdlIGNhbiBpdGVyYXRlIHdoaWxlIG5ldyBvbmVzIG1pZ2h0IGJlIGRlc3Ryb3ll
ZC4KKyAgICBWZWN0b3I8QWN0aXZlRE9NT2JqZWN0Kj4gb2JqZWN0czsKKyAgICBjb3B5VG9WZWN0
b3IobV9hY3RpdmVET01PYmplY3RzLCBvYmplY3RzKTsKKworICAgIG1fYWN0aXZlRE9NT2JqZWN0
QWRkaXRpb25Gb3JiaWRkZW4gPSB0cnVlOworCisgICAgLy8gTm8gcHJvdGVjdGlvbiBhZ2FpbnN0
IG5ldyBvYmplY3RzIGJlaW5nIGFkZGVkIGR1cmluZyB0aGlzIGl0ZXJhdGlvbjogc3RvcCgpCisg
ICAgLy8gZnVuY3Rpb25zIHNob3VsZCBub3QgYWRkIG5ldyBhY3RpdmUgRE9NIG9iamVjdHMsIG5v
ciBleGVjdXRlIGFyYml0cmFyeSBKYXZhU2NyaXB0LgorICAgIC8vIEhvd2V2ZXIsIHN0b3AoKSBm
dW5jdGlvbiBtYXkgcmVtb3ZlIGFjdGl2ZSBET00gb2JqZWN0cy4KKyAgICBmb3IgKGF1dG8qIG9i
amVjdCA6IG9iamVjdHMpIHsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvYmplY3Qgd2FzIGRl
bGV0ZWQgYWxyZWFkeS4gSWYgc28sIGp1c3Qgc2tpcCBpdC4KKyAgICAgICAgLy8gQ2FsbGluZyBj
b250YWlucyBvbiBhIHBvc3NpYmx5LWFscmVhZHktZGVsZXRlZCBvYmplY3QgaXMgT0sgYmVjYXVz
ZSB3ZSBndWFyYW50ZWUKKyAgICAgICAgLy8gbm8gbmV3IG9iamVjdCBjYW4gYmUgYWRkZWQsIHNv
IGV2ZW4gaWYgYSBuZXcgb2JqZWN0IGVuZHMgdXAgYWxsb2NhdGVkIHdpdGggdGhlCisgICAgICAg
IC8vIHNhbWUgYWRkcmVzcywgdGhhdCB3aWxsIGJlICphZnRlciogdGhpcyBmdW5jdGlvbiBleGl0
cy4KKyAgICAgICAgaWYgKCFtX2FjdGl2ZURPTU9iamVjdHMuY29udGFpbnMob2JqZWN0KSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBBU1NFUlQob2JqZWN0LT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgPT0gdGhpcyk7CisgICAgICAgIEFTU0VSVChvYmplY3QtPnN1c3BlbmRJZk5l
ZWRlZENhbGxlZCgpKTsKKyAgICAgICAgb2JqZWN0LT5zdG9wKCk7CiAgICAgfQotICAgIG1faXRl
cmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOwogCi0gICAgLy8gQWxzbyBjbG9zZSBNZXNz
YWdlUG9ydHMuIElmIHRoZXkgd2VyZSBBY3RpdmVET01PYmplY3RzICh0aGV5IGNvdWxkIGJlKSB0
aGVuIHRoZXkgY291bGQgYmUgc3RvcHBlZCBpbnN0ZWFkLgotICAgIGNsb3NlTWVzc2FnZVBvcnRz
KCk7CisgICAgbV9hY3RpdmVET01PYmplY3RBZGRpdGlvbkZvcmJpZGRlbiA9IGZhbHNlOworCisg
ICAgLy8gRklYTUU6IE1ha2UgbWVzc2FnZSBwb3J0cyBiZSBhY3RpdmUgRE9NIG9iamVjdHMgYW5k
IGxldCB0aGVtIGltcGxlbWVudCBzdG9wIGluc3RlYWQKKyAgICAvLyBvZiBoYXZpbmcgdGhpcyBz
ZXBhcmF0ZSBtZWNoYW5pc20ganVzdCBmb3IgdGhlbS4KKyAgICBmb3IgKGF1dG8qIHBvcnQgOiBt
X21lc3NhZ2VQb3J0cykgeworICAgICAgICBBU1NFUlQocG9ydC0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpID09IHRoaXMpOworICAgICAgICBwb3J0LT5jbG9zZSgpOworICAgIH0KIH0KIAotdm9p
ZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0SWZOZWVkZWQo
QWN0aXZlRE9NT2JqZWN0KiBvYmplY3QpCit2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1
c3BlbmRBY3RpdmVET01PYmplY3RJZk5lZWRlZChBY3RpdmVET01PYmplY3QmIG9iamVjdCkKIHsK
LSAgICBBU1NFUlQobV9hY3RpdmVET01PYmplY3RzLmNvbnRhaW5zKG9iamVjdCkpOwotICAgIC8v
IEVuc3VyZSBhbGwgQWN0aXZlRE9NT2JqZWN0cyBhcmUgc3VzcGVuZGVkIGFsc28gbmV3bHkgY3Jl
YXRlZCBvbmVzLgorICAgIEFTU0VSVChtX2FjdGl2ZURPTU9iamVjdHMuY29udGFpbnMoJm9iamVj
dCkpOwogICAgIGlmIChtX2FjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQpCi0gICAgICAgIG9i
amVjdC0+c3VzcGVuZChtX3JlYXNvbkZvclN1c3BlbmRpbmdBY3RpdmVET01PYmplY3RzKTsKKyAg
ICAgICAgb2JqZWN0LnN1c3BlbmQobV9yZWFzb25Gb3JTdXNwZW5kaW5nQWN0aXZlRE9NT2JqZWN0
cyk7CiAgICAgaWYgKG1fYWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQpCi0gICAgICAgIG9iamVj
dC0+c3RvcCgpOworICAgICAgICBvYmplY3Quc3RvcCgpOwogfQogCi12b2lkIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OmRpZENyZWF0ZUFjdGl2ZURPTU9iamVjdChBY3RpdmVET01PYmplY3QqIG9i
amVjdCkKK3ZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZGlkQ3JlYXRlQWN0aXZlRE9NT2Jq
ZWN0KEFjdGl2ZURPTU9iamVjdCYgb2JqZWN0KQogewotICAgIEFTU0VSVChvYmplY3QpOwotICAg
IEFTU0VSVCghbV9pbkRlc3RydWN0b3IpOwotICAgIGlmIChtX2l0ZXJhdGluZ0FjdGl2ZURPTU9i
amVjdHMpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgbV9hY3RpdmVET01PYmplY3RzLmFkZChvYmpl
Y3QpOworICAgIC8vIFRoZSBtX2FjdGl2ZURPTU9iamVjdEFkZGl0aW9uRm9yYmlkZGVuIGNoZWNr
IGlzIGEgUkVMRUFTRV9BU1NFUlQgYmVjYXVzZSBvZiB0aGUKKyAgICAvLyBjb25zZXF1ZW5jZXMg
b2YgaGF2aW5nIGFuIEFjdGl2ZURPTU9iamVjdCB0aGF0IGlzIG5vdCBjb3JyZWN0bHkgcmVmbGVj
dGVkIGluIHRoZSBzZXQuCisgICAgLy8gSWYgd2UgZG8gaGF2ZSBvbmUgb2YgdGhvc2UsIGl0IGNh
biBwb3NzaWJseSBiZSBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuIFNvIHdlJ2QKKyAgICAvLyBy
YXRoZXIgaGF2ZSBhIGNyYXNoIHRoYW4gY29udGludWUgcnVubmluZyB3aXRoIHRoZSBzZXQgcG9z
c2libHkgY29tcHJvbWlzZWQuCisgICAgQVNTRVJUKCFtX2luU2NyaXB0RXhlY3V0aW9uQ29udGV4
dERlc3RydWN0b3IpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX2FjdGl2ZURPTU9iamVjdEFkZGl0
aW9uRm9yYmlkZGVuKTsKKyAgICBtX2FjdGl2ZURPTU9iamVjdHMuYWRkKCZvYmplY3QpOwogfQog
Ci12b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OndpbGxEZXN0cm95QWN0aXZlRE9NT2JqZWN0
KEFjdGl2ZURPTU9iamVjdCogb2JqZWN0KQordm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojp3
aWxsRGVzdHJveUFjdGl2ZURPTU9iamVjdChBY3RpdmVET01PYmplY3QmIG9iamVjdCkKIHsKLSAg
ICBBU1NFUlQob2JqZWN0KTsKLSAgICBpZiAobV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzKQot
ICAgICAgICBDUkFTSCgpOwotICAgIG1fYWN0aXZlRE9NT2JqZWN0cy5yZW1vdmUob2JqZWN0KTsK
KyAgICBBU1NFUlQoIW1fYWN0aXZlRE9NT2JqZWN0UmVtb3ZhbEZvcmJpZGRlbik7CisgICAgbV9h
Y3RpdmVET01PYmplY3RzLnJlbW92ZSgmb2JqZWN0KTsKIH0KIAotdm9pZCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpkaWRDcmVhdGVEZXN0cnVjdGlvbk9ic2VydmVyKENvbnRleHREZXN0cnVjdGlv
bk9ic2VydmVyKiBvYnNlcnZlcikKK3ZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZGlkQ3Jl
YXRlRGVzdHJ1Y3Rpb25PYnNlcnZlcihDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlciYgb2JzZXJ2
ZXIpCiB7Ci0gICAgQVNTRVJUKG9ic2VydmVyKTsKLSAgICBBU1NFUlQoIW1faW5EZXN0cnVjdG9y
KTsKLSAgICBtX2Rlc3RydWN0aW9uT2JzZXJ2ZXJzLmFkZChvYnNlcnZlcik7CisgICAgQVNTRVJU
KCFtX2luU2NyaXB0RXhlY3V0aW9uQ29udGV4dERlc3RydWN0b3IpOworICAgIG1fZGVzdHJ1Y3Rp
b25PYnNlcnZlcnMuYWRkKCZvYnNlcnZlcik7CiB9CiAKLXZvaWQgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6d2lsbERlc3Ryb3lEZXN0cnVjdGlvbk9ic2VydmVyKENvbnRleHREZXN0cnVjdGlvbk9i
c2VydmVyKiBvYnNlcnZlcikKK3ZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6d2lsbERlc3Ry
b3lEZXN0cnVjdGlvbk9ic2VydmVyKENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyJiBvYnNlcnZl
cikKIHsKLSAgICBBU1NFUlQob2JzZXJ2ZXIpOwotICAgIG1fZGVzdHJ1Y3Rpb25PYnNlcnZlcnMu
cmVtb3ZlKG9ic2VydmVyKTsKLX0KLQotdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpjbG9z
ZU1lc3NhZ2VQb3J0cygpIHsKLSAgICBIYXNoU2V0PE1lc3NhZ2VQb3J0Kj46Oml0ZXJhdG9yIG1l
c3NhZ2VQb3J0c0VuZCA9IG1fbWVzc2FnZVBvcnRzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxN
ZXNzYWdlUG9ydCo+OjppdGVyYXRvciBpdGVyID0gbV9tZXNzYWdlUG9ydHMuYmVnaW4oKTsgaXRl
ciAhPSBtZXNzYWdlUG9ydHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQoKCppdGVyKS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICAoKml0ZXIpLT5jbG9z
ZSgpOwotICAgIH0KKyAgICBtX2Rlc3RydWN0aW9uT2JzZXJ2ZXJzLnJlbW92ZSgmb2JzZXJ2ZXIp
OwogfQogCiBib29sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnNhbml0aXplU2NyaXB0RXJyb3Io
U3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCYgbGluZU51bWJlciwgaW50JiBjb2x1bW5OdW1iZXIs
IFN0cmluZyYgc291cmNlVVJMLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKQEAgLTQxOSw0
ICs0NjksMTkgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpzZXREYXRhYmFzZUNvbnRl
eHQoRGF0YWJhc2VDb250ZXh0KiBkYXRhYmFzZUNvbnRleHQKIH0KICNlbmRpZgogCitib29sIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Cit7CisgICAg
Zm9yIChhdXRvKiBvYmplY3QgOiBtX2FjdGl2ZURPTU9iamVjdHMpIHsKKyAgICAgICAgaWYgKG9i
amVjdC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBmb3IgKGF1dG8qIHBvcnQgOiBtX21lc3NhZ2VQb3J0cykgeworICAgICAgICBp
ZiAocG9ydC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCmluZGV4IDQwZTRi
Nzk3M2IxMjkzMjZlZWExNGVlZTIzNmVmYTUyYWUzZWI1ZTEuLjQ2NjcyYzBhMmQ0MDU0MmU0MzVi
MWViM2I0Y2YzNjkxNzIyMDMzZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5Q29udGV4dC5oIgogI2luY2x1ZGUgIlN1cHBsZW1lbnRh
YmxlLmgiCi0jaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8cnVudGltZS9Db25zb2xlVHlwZXMu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCkBAIC00OSwxNCArNDgsMTEgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgQ2FjaGVkU2NyaXB0OwogY2xhc3MgRGF0YWJhc2VDb250ZXh0
OwogY2xhc3MgRE9NVGltZXI7Ci1jbGFzcyBFdmVudExpc3RlbmVyOwogY2xhc3MgRXZlbnRRdWV1
ZTsKIGNsYXNzIEV2ZW50VGFyZ2V0OwogY2xhc3MgTWVzc2FnZVBvcnQ7Ci0KLSNpZiBFTkFCTEUo
QkxPQikKIGNsYXNzIFB1YmxpY1VSTE1hbmFnZXI7Ci0jZW5kaWYKK2NsYXNzIFVSTDsKIAogY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCA6IHB1YmxpYyBTZWN1cml0eUNvbnRleHQsIHB1Ymxp
YyBTdXBwbGVtZW50YWJsZTxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiB7CiBwdWJsaWM6CkBAIC03
NiwxMSArNzIsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGVFdmFsKGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSA9IDA7CiAKLSAgICBib29sIHNhbml0aXplU2NyaXB0
RXJyb3IoU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCYgbGluZU51bWJlciwgaW50JiBjb2x1bW5O
dW1iZXIsIFN0cmluZyYgc291cmNlVVJMLCBDYWNoZWRTY3JpcHQqID0gMCk7Ci0gICAgLy8gRklY
TUU6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzExNDMxNT4gU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBs
b2cgZXhjZXB0aW9uIHNob3VsZCBpbmNsdWRlIGEgY29sdW1uIG51bWJlcgotICAgIHZvaWQgcmVw
b3J0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwg
aW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+LCBDYWNoZWRTY3JpcHQqID0gMCk7CisgICAgYm9vbCBz
YW5pdGl6ZVNjcmlwdEVycm9yKFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQmIGxpbmVOdW1iZXIs
IGludCYgY29sdW1uTnVtYmVyLCBTdHJpbmcmIHNvdXJjZVVSTCwgQ2FjaGVkU2NyaXB0KiA9IG51
bGxwdHIpOworICAgIHZvaWQgcmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+LCBDYWNoZWRTY3Jp
cHQqID0gbnVsbHB0cik7CiAKLSAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3Vy
Y2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNv
dXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6
OkV4ZWNTdGF0ZSogPSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7Cisg
ICAgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxp
bmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUqID0gbnVsbHB0
ciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwogICAgIHZpcnR1YWwgdm9p
ZCBhZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApID0gMDsK
IAogICAgIHZpcnR1YWwgU2VjdXJpdHlPcmlnaW4qIHRvcE9yaWdpbigpIGNvbnN0ID0gMDsKQEAg
LTEwMSwyNCArOTYsMjAgQEAgcHVibGljOgogICAgIGJvb2wgYWN0aXZlRE9NT2JqZWN0c0FyZVN0
b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZURPTU9iamVjdHNBcmVTdG9wcGVkOyB9CiAK
ICAgICAvLyBDYWxsZWQgZnJvbSB0aGUgY29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3JzIG9mIEFj
dGl2ZURPTU9iamVjdC4KLSAgICB2b2lkIGRpZENyZWF0ZUFjdGl2ZURPTU9iamVjdChBY3RpdmVE
T01PYmplY3QqKTsKLSAgICB2b2lkIHdpbGxEZXN0cm95QWN0aXZlRE9NT2JqZWN0KEFjdGl2ZURP
TU9iamVjdCopOworICAgIHZvaWQgZGlkQ3JlYXRlQWN0aXZlRE9NT2JqZWN0KEFjdGl2ZURPTU9i
amVjdCYpOworICAgIHZvaWQgd2lsbERlc3Ryb3lBY3RpdmVET01PYmplY3QoQWN0aXZlRE9NT2Jq
ZWN0Jik7CiAKICAgICAvLyBDYWxsZWQgYWZ0ZXIgdGhlIGNvbnN0cnVjdGlvbiBvZiBhbiBBY3Rp
dmVET01PYmplY3QgdG8gc3luY2hyb25pemUgc3VzcGVuZCBzdGF0ZS4KLSAgICB2b2lkIHN1c3Bl
bmRBY3RpdmVET01PYmplY3RJZk5lZWRlZChBY3RpdmVET01PYmplY3QqKTsKKyAgICB2b2lkIHN1
c3BlbmRBY3RpdmVET01PYmplY3RJZk5lZWRlZChBY3RpdmVET01PYmplY3QmKTsKIAotICAgIHR5
cGVkZWYgSGFzaFNldDxBY3RpdmVET01PYmplY3QqPiBBY3RpdmVET01PYmplY3RzU2V0OwotICAg
IGNvbnN0IEFjdGl2ZURPTU9iamVjdHNTZXQmIGFjdGl2ZURPTU9iamVjdHMoKSBjb25zdCB7IHJl
dHVybiBtX2FjdGl2ZURPTU9iamVjdHM7IH0KLQotICAgIHZvaWQgZGlkQ3JlYXRlRGVzdHJ1Y3Rp
b25PYnNlcnZlcihDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlciopOwotICAgIHZvaWQgd2lsbERl
c3Ryb3lEZXN0cnVjdGlvbk9ic2VydmVyKENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyKik7Cisg
ICAgdm9pZCBkaWRDcmVhdGVEZXN0cnVjdGlvbk9ic2VydmVyKENvbnRleHREZXN0cnVjdGlvbk9i
c2VydmVyJik7CisgICAgdm9pZCB3aWxsRGVzdHJveURlc3RydWN0aW9uT2JzZXJ2ZXIoQ29udGV4
dERlc3RydWN0aW9uT2JzZXJ2ZXImKTsKIAogICAgIC8vIE1lc3NhZ2VQb3J0IGlzIGNvbmNlcHR1
YWxseSBhIGtpbmQgb2YgQWN0aXZlRE9NT2JqZWN0LCBidXQgaXQgbmVlZHMgdG8gYmUgdHJhY2tl
ZCBzZXBhcmF0ZWx5IGZvciBtZXNzYWdlIGRpc3BhdGNoLgogICAgIHZvaWQgcHJvY2Vzc01lc3Nh
Z2VQb3J0TWVzc2FnZXNTb29uKCk7CiAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VQb3J0RXZlbnRz
KCk7Ci0gICAgdm9pZCBjcmVhdGVkTWVzc2FnZVBvcnQoTWVzc2FnZVBvcnQqKTsKLSAgICB2b2lk
IGRlc3Ryb3llZE1lc3NhZ2VQb3J0KE1lc3NhZ2VQb3J0Kik7Ci0gICAgY29uc3QgSGFzaFNldDxN
ZXNzYWdlUG9ydCo+JiBtZXNzYWdlUG9ydHMoKSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2VQb3J0
czsgfQorICAgIHZvaWQgY3JlYXRlZE1lc3NhZ2VQb3J0KE1lc3NhZ2VQb3J0Jik7CisgICAgdm9p
ZCBkZXN0cm95ZWRNZXNzYWdlUG9ydChNZXNzYWdlUG9ydCYpOwogCiAgICAgdm9pZCByZWYoKSB7
IHJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQogICAgIHZvaWQgZGVyZWYoKSB7IGRlcmVm
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CkBAIC0xODUsMjIgKzE3NiwyMCBAQCBwcm90ZWN0
ZWQ6CiAKICAgICBBY3RpdmVET01PYmplY3Q6OlJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uRm9y
U3VzcGVuZGluZ0FjdGl2ZURPTU9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX3JlYXNvbkZvclN1
c3BlbmRpbmdBY3RpdmVET01PYmplY3RzOyB9CiAKKyAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0
eSgpIGNvbnN0OworCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlKE1lc3Nh
Z2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVy
LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiwgSlNDOjpFeGVjU3RhdGUq
ID0gMCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENh
bGxTdGFjaz4sIEpTQzo6RXhlY1N0YXRlKiA9IG51bGxwdHIsIHVuc2lnbmVkIGxvbmcgcmVxdWVz
dElkZW50aWZpZXIgPSAwKSA9IDA7CiAgICAgdmlydHVhbCBFdmVudFRhcmdldCogZXJyb3JFdmVu
dFRhcmdldCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgbG9nRXhjZXB0aW9uVG9Db25zb2xlKGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxp
bmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRD
YWxsU3RhY2s+KSA9IDA7CiAgICAgYm9vbCBkaXNwYXRjaEVycm9yRXZlbnQoY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTCwgQ2FjaGVkU2NyaXB0Kik7CiAKLSAgICB2b2lkIGNsb3NlTWVzc2Fn
ZVBvcnRzKCk7Ci0KICAgICB2aXJ0dWFsIHZvaWQgcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPSAw
OwogCiAgICAgSGFzaFNldDxNZXNzYWdlUG9ydCo+IG1fbWVzc2FnZVBvcnRzOwogICAgIEhhc2hT
ZXQ8Q29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIqPiBtX2Rlc3RydWN0aW9uT2JzZXJ2ZXJzOwot
ICAgIEFjdGl2ZURPTU9iamVjdHNTZXQgbV9hY3RpdmVET01PYmplY3RzOwotICAgIGJvb2wgbV9p
dGVyYXRpbmdBY3RpdmVET01PYmplY3RzOwotICAgIGJvb2wgbV9pbkRlc3RydWN0b3I7CisgICAg
SGFzaFNldDxBY3RpdmVET01PYmplY3QqPiBtX2FjdGl2ZURPTU9iamVjdHM7CiAKICAgICBpbnQg
bV9jaXJjdWxhclNlcXVlbnRpYWxJRDsKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBET01UaW1l
cio+IFRpbWVvdXRNYXA7CkBAIC0yMjEsNiArMjEwLDEzIEBAIHByaXZhdGU6CiAjaWYgRU5BQkxF
KFNRTF9EQVRBQkFTRSkKICAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBtX2RhdGFiYXNlQ29u
dGV4dDsKICNlbmRpZgorCisgICAgYm9vbCBtX2FjdGl2ZURPTU9iamVjdEFkZGl0aW9uRm9yYmlk
ZGVuOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGJvb2wgbV9pblNjcmlwdEV4ZWN1dGlv
bkNvbnRleHREZXN0cnVjdG9yOworICAgIGJvb2wgbV9hY3RpdmVET01PYmplY3RSZW1vdmFsRm9y
YmlkZGVuOworI2VuZGlmCiB9OwogCiAjZGVmaW5lIFNDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9U
WVBFX0NBU1RTKFRvVmFsdWVUeXBlTmFtZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckdsb2JhbFNjb3BlLmNwcAppbmRleCAyYjViZGZmNjZhODAzNDlmYjUwYzdiMDYwMjE2YzFk
MzU3N2NiM2Y2Li5iNjYzOWJjYzZlNWIzMzk3NjU2YzExYzlhYzFmYzJkMTk0M2I4ZThmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcApAQCAtMTU5LDIz
ICsxNTksNiBAQCBXb3JrZXJOYXZpZ2F0b3IqIFdvcmtlckdsb2JhbFNjb3BlOjpuYXZpZ2F0b3Io
KSBjb25zdAogICAgIHJldHVybiBtX25hdmlnYXRvci5nZXQoKTsKIH0KIAotYm9vbCBXb3JrZXJH
bG9iYWxTY29wZTo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKLXsKLSAgICBBY3RpdmVET01P
YmplY3RzU2V0Ojpjb25zdF9pdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gYWN0aXZlRE9NT2Jq
ZWN0cygpLmVuZCgpOwotICAgIGZvciAoQWN0aXZlRE9NT2JqZWN0c1NldDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IGFjdGl2ZURPTU9iamVjdHMoKS5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVj
dHNFbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoKCppdGVyKS0+aGFzUGVuZGluZ0FjdGl2aXR5
KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBIYXNoU2V0PE1lc3Nh
Z2VQb3J0Kj46OmNvbnN0X2l0ZXJhdG9yIG1lc3NhZ2VQb3J0c0VuZCA9IG1lc3NhZ2VQb3J0cygp
LmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxNZXNzYWdlUG9ydCo+Ojpjb25zdF9pdGVyYXRvciBp
dGVyID0gbWVzc2FnZVBvcnRzKCkuYmVnaW4oKTsgaXRlciAhPSBtZXNzYWdlUG9ydHNFbmQ7ICsr
aXRlcikgewotICAgICAgICBpZiAoKCppdGVyKS0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZv
aWQgV29ya2VyR2xvYmFsU2NvcGU6OnBvc3RUYXNrKFBhc3NPd25QdHI8VGFzaz4gdGFzaykKIHsK
ICAgICB0aHJlYWQoKS5ydW5Mb29wKCkucG9zdFRhc2sodGFzayk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKaW5kZXggMTc2NWQ5Nzg2OGExYWYzNTM4MzQ4ZGIx
Y2ZlNDMyNTc0NTI0NzZlOC4uMTlkMjBlZWJiYjA4Yzg5NzM4MzJkNmU5MTI3Y2NiNjI5NjM4Y2Ez
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaApAQCAtNzYs
NyArNzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgV29ya2VyVGhyZWFkJiB0
aHJlYWQoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZDsgfQogCi0gICAgICAgIGJvb2wgaGFzUGVu
ZGluZ0FjdGl2aXR5KCkgY29uc3Q7CisgICAgICAgIHVzaW5nIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6Omhhc1BlbmRpbmdBY3Rpdml0eTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2so
UGFzc093blB0cjxUYXNrPikgb3ZlcnJpZGU7IC8vIEV4ZWN1dGVzIHRoZSB0YXNrIG9uIGNvbnRl
eHQncyB0aHJlYWQgYXN5bmNocm9ub3VzbHkuCiAK
</data>
<flag name="review"
          id="254137"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>