<?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>37053</bug_id>
          
          <creation_ts>2010-04-02 17:41:45 -0700</creation_ts>
          <short_desc>WorkerGlobalScope.close() should let the currently running script complete execution, then terminate the worker.</short_desc>
          <delta_ts>2010-04-09 16:29:01 -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 Misc.</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="Dmitry Titov">dimich</reporter>
          <assigned_to name="Dmitry Titov">dimich</assigned_to>
          <cc>ap</cc>
    
    <cc>atwilson</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>208186</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-04-02 17:41:45 -0700</bug_when>
    <thetext>As a result of WHATWG discussion, we need to change the behavior of close() method. This will make 3 implementations (FF, Safari and Chrome) behave the same way.
Basically, close() will return and allow the remaiing JS in the running JS fragment to complete execution with all worker functionality unaffected, but then terminate the worker when it returns from JS.

The terminate() and closing parent context still terminate the worker using &apos;terminate a worker&apos; algorithm from the spec.

http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2010-March/025727.html and http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2010-April/025763.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208195</commentid>
    <comment_count>1</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2010-04-02 18:18:48 -0700</bug_when>
    <thetext>Note that this may be tricky. There are places in the system (e.g. dispatching MessagePort messages, and I believe certain state transitions for XHR) where we call back into JS multiple times before we exit back out to the event loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208196</commentid>
    <comment_count>2</comment_count>
      <attachid>52473</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-04-02 18:20:12 -0700</bug_when>
    <thetext>Created attachment 52473
Patch.

The WorkerContext::close() now disables future execution (but does not interrupt current JS fragment) and posts a cleanup task that will eventually call WorkerThread::stop().
Since WorkerContext::isClosed() returns true, all non-cleanup tasks that may happen to be in the queue before StopWorkerContextTask will be thrown away w/o execution.
Updated test to match.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208233</commentid>
    <comment_count>3</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-04-02 22:58:36 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Note that this may be tricky. There are places in the system (e.g. dispatching
&gt; MessagePort messages, and I believe certain state transitions for XHR) where we
&gt; call back into JS multiple times before we exit back out to the event loop.

Good point. In V8 case, we have the checks in right places (running any JS needs to retrieve a proxy/context, they are retrieved as 0 when WorkerScriptController.m_executionForbidden == true.

In JSC case I&apos;m not sure we have this. Will check. Removing r? for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208281</commentid>
    <comment_count>4</comment_count>
      <attachid>52473</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2010-04-03 09:24:01 -0700</bug_when>
    <thetext>Comment on attachment 52473
Patch.


&gt; diff --git a/LayoutTests/fast/workers/worker-close.html b/LayoutTests/fast/workers/worker-close.html
&gt; index fd8dfd8..e6c0733 100644
&gt; --- a/LayoutTests/fast/workers/worker-close.html
&gt; +++ b/LayoutTests/fast/workers/worker-close.html

&gt; +    // Tell the worker to close, then send a followup message which should be delivered.
&gt; +    // However, the &apos;ping&apos; should not come back as &apos;pong&apos;, since that is a separate message
&gt; +    // and onmessage handler should not be called again after the one with close() exits.

I&apos;m not sure I understand this comment. If the onmessage handler isn&apos;t called for the &quot;ping&quot; message, then that means it wasn&apos;t delivered, right? Maybe you mean to say that &quot;ping&quot; won&apos;t be delivered since the worker will already be closed?

&gt; +++ b/WebCore/ChangeLog
&gt; @@ -1,3 +1,38 @@
&gt; +2010-04-02  Dmitry Titov  &lt;dimich@chromium.org&gt;
&gt; +
&gt; +        (WebCore::WorkerScriptController::):
&gt; +        Added option parameter to forbidExecution (bith JCS and V8 versions) that specifies whether currently running
&gt; +        script should be immediately terminated or left executed until the end.

Typo: should be &quot;both JSC and V8&quot;, not &quot;bith JCS and V8&quot;.

Overall this looks good - I&apos;d like to see us add one more test:

1) Page starts worker
2) Page sends message to worker to invoke close()
3) Worker invokes close(), sends message back to page, then enters infinite loop
4) Page receives message from step 3, calls worker.terminate().

At this point, we can use the waitUntilWorkerThreadsExit() helper function to ensure that the thread itself actually exits (we&apos;d need to roll a different test for V8 since that DRT function doesn&apos;t exist there).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210452</commentid>
    <comment_count>5</comment_count>
      <attachid>52909</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-04-08 15:58:28 -0700</bug_when>
    <thetext>Created attachment 52909
Patch.

Updated patch:

- fixed comments and typos.
- Added a check into WorkerScriptController for JCS to mimic what v8 version also does to prevent re-entry into JS when further execution is forbidden.
- Added 2 new tests, one that Andrew Wilson has suggested and another one for MessagePort events dispatching while calling close().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210761</commentid>
    <comment_count>6</comment_count>
      <attachid>52909</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-09 09:26:48 -0700</bug_when>
    <thetext>Comment on attachment 52909
Patch.

&gt; +        return new CloseWorkerContextTask();

I normally leave out the parentheses in new expressions like this one.

&gt; -    // Notify parent that this context is closed. Parent is responsible for calling WorkerThread::stop().
&gt; -    thread()-&gt;workerReportingProxy().workerContextClosed();
&gt; +    // Let current script run to completion  but prevent future script evaluations.

Extra space here before &quot;but&quot;.

While I don&apos;t understand every bit of the patch thoroughly, it looks good to me, and the tests seem to cover what&apos;s changing here. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210868</commentid>
    <comment_count>7</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-04-09 13:18:15 -0700</bug_when>
    <thetext>Updated per Darin&apos;s comments and landed: http://trac.webkit.org/changeset/57349</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210910</commentid>
    <comment_count>8</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2010-04-09 14:02:25 -0700</bug_when>
    <thetext>Just had a chance to review this. I&apos;m concerned that just returning 0 from workerContextWrapper() will lead to crashes in various places. For example, ScheduledAction calls workerContextWrapper() and uses the return value without any further checking (although in theory ScheduledAction shouldn&apos;t happen after close(), right?).

My other concern is there are other places in WorkerScriptController.cpp that just use m_workerContextWrapper directly to execute code without checking forbidExecution first, so I&apos;m wondering if any further changes may still be necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211019</commentid>
    <comment_count>9</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-04-09 16:29:01 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Just had a chance to review this. I&apos;m concerned that just returning 0 from
&gt; workerContextWrapper() will lead to crashes in various places. For example,
&gt; ScheduledAction calls workerContextWrapper() and uses the return value without
&gt; any further checking (although in theory ScheduledAction shouldn&apos;t happen after
&gt; close(), right?).

I looked over all the places that use this call. The ones that do not check for 0 are guaranteed not to be called by virtue of WorkerContext::isClosed() being true and runloop not executing tasks after close(). For example, ScheduledAction is nto executed because it&apos;s a timer callback mechanism that gets executed by runloop as well.

The most important consumer of workerContextWrapper() is toJSDOMGlobalObject(..), which normally precedes any reentry into JS (as in event handling). All those places check for 0 and return early.

I pondered to be &apos;safe&apos; and add checks everywhere but then realized that it in fact can mask other issues (lets say we have a regression and continue execute tasks in the Worker run loop even though isClose flag is set on a context). Crash would be a better trap then not executing something.

&gt; My other concern is there are other places in WorkerScriptController.cpp that
&gt; just use m_workerContextWrapper directly to execute code without checking
&gt; forbidExecution first, so I&apos;m wondering if any further changes may still be
&gt; necessary.

The only other place I can see that doesn&apos;t check for m_forbidExecution is WorkerScriptController::setException(). I am not sure it has to be protected, since it&apos;s essentially an assignment into a variable. But I&apos;ll give it additional look.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52473</attachid>
            <date>2010-04-02 18:20:12 -0700</date>
            <delta_ts>2010-04-08 15:58:28 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>13827</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4ZGQ5Njk5Li5jZDRkNDhhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDQt
MDIgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV29ya2VyR2xvYmFsU2NvcGUuY2xvc2Uo
KSBzaG91bGQgbGV0IHRoZSBjdXJyZW50bHkgcnVubmluZyBzY3JpcHQgY29tcGxldGUgZXhlY3V0
aW9uLCB0aGVuIHRlcm1pbmF0ZSB0aGUgd29ya2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcwNTMKKworICAgICAgICBVcGRhdGVkIGV4aXN0aW5n
IHRlc3QgdG8gcmVmbGVjdCBuZXcgYmVoYXZpb3IuCisKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMv
cmVzb3VyY2VzL3dvcmtlci1jbG9zZS5qczoKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvd29ya2Vy
LWNsb3NlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvd29ya2VyLWNsb3Nl
Lmh0bWw6CisKIDIwMTAtMDMtMjkgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IERtaXRyeSBUaXRvdi4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLWNsb3NlLmpzIGIvTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy93b3JrZXItY2xvc2UuanMKaW5kZXggYTQ3NDE1
NC4uZmU5MjJjZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNl
cy93b3JrZXItY2xvc2UuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNl
cy93b3JrZXItY2xvc2UuanMKQEAgLTE3LDcgKzE3LDcgQEAgb25tZXNzYWdlID0gZnVuY3Rpb24o
ZXZ0KQogICAgICAgICBwb3N0TWVzc2FnZSgidHlwZW9mIGNsb3NlOiAiICsgKHR5cGVvZiBjbG9z
ZSkpOwogICAgIH0gZWxzZSBpZiAoZXZ0LmRhdGEgPT0gImNsb3NlIikgewogICAgICAgICBjbG9z
ZSgpOwotICAgICAgICBwb3N0TWVzc2FnZSgiU2hvdWxkIG5vdCBiZSBkZWxpdmVyZWQiKTsKKyAg
ICAgICAgcG9zdE1lc3NhZ2UoIlNob3VsZCBiZSBkZWxpdmVyZWQiKTsKICAgICB9IGVsc2UgaWYg
KGV2dC5kYXRhID09ICJwaW5nIikgewogICAgICAgICBwb3N0TWVzc2FnZSgicG9uZyIpOwogICAg
IH0gZWxzZSBpZiAoZXZ0LmRhdGEgPT0gInRocm93IikgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3dvcmtlci1jbG9zZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvd29ya2VyLWNsb3NlLWV4cGVjdGVkLnR4dAppbmRleCA3NmZiY2FmLi5jMDY3
YjYxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNsb3NlLWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNsb3NlLWV4
cGVjdGVkLnR4dApAQCAtMiw4ICsyLDEwIEBAIFRlc3QgV29ya2VyQ29udGV4dC5jbG9zZSBmdW5j
dGlvbmFsaXR5LiBTaG91bGQgcHJpbnQgYSBzZXJpZXMgb2YgUEFTUyBtZXNzYWdlcywKIAogUEFT
UzogdHlwZW9mIGNsb3NlOiBmdW5jdGlvbgogUEFTUzogcmVjZWl2ZWQgbWVzc2FnZSBiZWZvcmUg
Y2xvc2UKLVBBU1M6IG1lc3NhZ2VzIHNlbnQgYWZ0ZXIgY2xvc2UoKSBhcmUgaWdub3JlZAorUEFT
UzogUmVjZWl2ZWQgbWVzc2FnZSBwb3N0ZWQgcmlnaHQgYWZ0ZXIgY2xvc2UoKSB3YXMgaW52b2tl
ZDogU2hvdWxkIGJlIGRlbGl2ZXJlZAorUEFTUzogbm8gbWVzc2FnZXMgYXJyaXZlIHRvIHdvcmtl
ciBhZnRlciBKUyBmcmFnbWVudCB3aXRoIGNsb3NlKCkgZXhpdHMKIFBBU1M6IEVycm9yIGFycml2
ZWQgYWZ0ZXIgY2xvc2U6IFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBub25F
eGlzdGVudEZ1bmN0aW9uCiBQQVNTOiBjbG9zZSgpIGRpZCBub3QgZGlzcGF0Y2ggcGVuZGluZyBl
dmVudHMKK1BBU1M6IFJlY2VpdmVkIG1lc3NhZ2UgYWZ0ZXIgd29ya2VyIGNsb3NlZDogU2hvdWxk
IGJlIGRlbGl2ZXJlZAogRE9ORQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvd29ya2VyLWNsb3NlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNs
b3NlLmh0bWwKaW5kZXggZmQ4ZGZkOC4uZTZjMDczMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3dvcmtlci1jbG9zZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy93b3JrZXItY2xvc2UuaHRtbApAQCAtMzUsMjggKzM1LDI1IEBAIGZ1bmN0aW9uIHRlc3RN
ZXNzYWdlQWZ0ZXJDbG9zZShldnQpIHsKICAgICBlbHNlCiAgICAgICAgIGxvZygiRkFJTDogcmVj
ZWl2ZWQgdW5rbm93biByZXNwb25zZTogIiArIGV2dC5kYXRhKTsKIAotICAgIC8vIFRlbGwgdGhl
IHdvcmtlciB0byBjbG9zZSwgdGhlbiBzZW5kIGEgZm9sbG93dXAgbWVzc2FnZQotICAgIC8vIHdo
aWNoIHNob3VsZCBub3QgYmUgZGVsaXZlcmVkLgorICAgIC8vIFRlbGwgdGhlIHdvcmtlciB0byBj
bG9zZSwgdGhlbiBzZW5kIGEgZm9sbG93dXAgbWVzc2FnZSB3aGljaCBzaG91bGQgYmUgZGVsaXZl
cmVkLgorICAgIC8vIEhvd2V2ZXIsIHRoZSAncGluZycgc2hvdWxkIG5vdCBjb21lIGJhY2sgYXMg
J3BvbmcnLCBzaW5jZSB0aGF0IGlzIGEgc2VwYXJhdGUgbWVzc2FnZQorICAgIC8vIGFuZCBvbm1l
c3NhZ2UgaGFuZGxlciBzaG91bGQgbm90IGJlIGNhbGxlZCBhZ2FpbiBhZnRlciB0aGUgb25lIHdp
dGggY2xvc2UoKSBleGl0cy4KICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoImNsb3NlIik7CisgICAg
d29ya2VyLnBvc3RNZXNzYWdlKCJwaW5nIik7CiAgICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0
aW9uKGV2dCkgewotICAgICAgICBsb2coIkZBSUw6IFJlY2VpdmVkIG1lc3NhZ2UgYWZ0ZXIgd29y
a2VyIGNsb3NlZDogIiArIGV2dC5kYXRhKTsKLSAgICAgICAgZG9uZSgpOworICAgICAgICBpZiAo
ZXZ0LmRhdGEgIT0gInBvbmciKQorICAgICAgICAgICAgbG9nKCJQQVNTOiBSZWNlaXZlZCBtZXNz
YWdlIHBvc3RlZCByaWdodCBhZnRlciBjbG9zZSgpIHdhcyBpbnZva2VkOiAiICsgZXZ0LmRhdGEp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGxvZygiRkFJTDogUmVjZWl2ZWQgYSBtZXNz
YWdlIG9yaWdpbmF0ZWQgZnJvbSBhIGhhbmRsZXIgaW4gdGhlIHdvcmtlciBhZnRlciB0aGUgSlMg
ZnJhZ21lbnQgd2l0aCBjbG9zZSgpIGV4aXRlZCIgKyBldnQuZGF0YSk7CisgICAgICAgICAgICBk
b25lKCk7CisgICAgICAgIH0KICAgICB9OwotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG1lc3NhZ2Vz
IGRvbid0IGFycml2ZSBhdCB0aGUgcmVtb3RlIGVuZCAtIHNpbmNlIHRoZXkKLSAgICAvLyBjYW4n
dCBzZW5kIGJhY2sgcmVzcG9uc2UgbWVzc2FnZXMsIHdlJ2xsIGhhdmUgdGhlIHdvcmtlciB0aHJv
dyBhbgotICAgIC8vIGV4Y2VwdGlvbiBpbnN0ZWFkIChlcnJvcnMgYXJlIHN0aWxsIHByb3BhZ2F0
ZWQgdG8gdGhlIGNhbGxlciBldmVuIGFmdGVyCi0gICAgLy8gY2xvc2UoKSkuCi0gICAgd29ya2Vy
LnBvc3RNZXNzYWdlKCJ0aHJvdyIpOwotICAgIHdvcmtlci5vbmVycm9yID0gZnVuY3Rpb24oZXZ0
KSB7Ci0gICAgICAgIGxvZygiRkFJTDogbWVzc2FnZSBkZWxpdmVyZWQgYWZ0ZXIgY2xvc2UoKTog
IiArIGV2dC5tZXNzYWdlKTsKLSAgICAgICAgZG9uZSgpOwotICAgIH0KICAgICB0aW1lb3V0ID0g
c2V0VGltZW91dCh0ZXN0RXJyb3JBZnRlckNsb3NlLCAxMDAwKTsKIH0KIAogZnVuY3Rpb24gdGVz
dEVycm9yQWZ0ZXJDbG9zZSgpCiB7Ci0gICAgbG9nKCJQQVNTOiBtZXNzYWdlcyBzZW50IGFmdGVy
IGNsb3NlKCkgYXJlIGlnbm9yZWQiKTsKKyAgICBsb2coIlBBU1M6IG5vIG1lc3NhZ2VzIGFycml2
ZSB0byB3b3JrZXIgYWZ0ZXIgSlMgZnJhZ21lbnQgd2l0aCBjbG9zZSgpIGV4aXRzIik7CiAgICAg
Ly8gVGVzdCB0aGF0IGVycm9ycyBhcmUgZGVsaXZlcmVkIGFmdGVyIGNsb3NlLgogICAgIHdvcmtl
ciA9IG5ldyBXb3JrZXIoJ3Jlc291cmNlcy93b3JrZXItY2xvc2UuanMnKTsKICAgICB3b3JrZXIu
cG9zdE1lc3NhZ2UoImNsb3NlV2l0aEVycm9yIik7CkBAIC04NiwxMSArODMsMTAgQEAgZnVuY3Rp
b24gdGVzdFBlbmRpbmdFdmVudHMoKQogZnVuY3Rpb24gdGVzdFRlcm1pbmF0ZUFmdGVyQ2xvc2Uo
KQogewogICAgIGxvZygiUEFTUzogY2xvc2UoKSBkaWQgbm90IGRpc3BhdGNoIHBlbmRpbmcgZXZl
bnRzIik7Ci0gICAgd29ya2VyID0gbmV3IFdvcmtlcigncmVzb3VyY2VzL3dvcmtlci1jbGFzcy5q
cycpOworICAgIHdvcmtlciA9IG5ldyBXb3JrZXIoJ3Jlc291cmNlcy93b3JrZXItY2xvc2UuanMn
KTsKICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoImNsb3NlIik7CiAgICAgd29ya2VyLm9ubWVzc2Fn
ZSA9IGZ1bmN0aW9uKGV2dCkgewotICAgICAgICBsb2coIkZBSUw6IFJlY2VpdmVkIG1lc3NhZ2Ug
YWZ0ZXIgd29ya2VyIGNsb3NlZDogIiArIGV2dC5kYXRhKTsKLSAgICAgICAgZG9uZSgpOworICAg
ICAgICBsb2coIlBBU1M6IFJlY2VpdmVkIG1lc3NhZ2UgYWZ0ZXIgd29ya2VyIGNsb3NlZDogIiAr
IGV2dC5kYXRhKTsKICAgICB9OwogICAgIC8vIEdpdmUgd29ya2VyIGEgY2hhbmNlIHRvIGNsb3Nl
IGZpcnN0LCB0aGVuIHRlcm1pbmF0ZSBpdC4KICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChmdW5j
dGlvbigpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggYmFhMDU1Mi4uZWY2NDQ3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMC0wNC0wMiAgRG1p
dHJ5IFRpdG92ICA8ZGltaWNoQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrZXJHbG9iYWxTY29wZS5jbG9zZSgpIHNob3Vs
ZCBsZXQgdGhlIGN1cnJlbnRseSBydW5uaW5nIHNjcmlwdCBjb21wbGV0ZSBleGVjdXRpb24sIHRo
ZW4gdGVybWluYXRlIHRoZSB3b3JrZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNzA1MworCisgICAgICAgICogYmluZGluZ3MvanMvV29ya2VyU2Ny
aXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9s
bGVyOjpmb3JiaWRFeGVjdXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlw
dENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6
Oik6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpmb3JiaWRFeGVjdXRpb24p
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6Oik6CisgICAgICAgIEFkZGVkIG9w
dGlvbiBwYXJhbWV0ZXIgdG8gZm9yYmlkRXhlY3V0aW9uIChiaXRoIEpDUyBhbmQgVjggdmVyc2lv
bnMpIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgY3VycmVudGx5IHJ1bm5pbmcKKyAgICAgICAgc2Ny
aXB0IHNob3VsZCBiZSBpbW1lZGlhdGVseSB0ZXJtaW5hdGVkIG9yIGxlZnQgZXhlY3V0ZWQgdW50
aWwgdGhlIGVuZC4KKworICAgICAgICAqIHdvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Ojpwb3N0TWVzc2Fn
ZSk6CisgICAgICAgIFJlbW92ZWQgY2hlY2sgdGhhdCBpbW1lZGlhdGVseSBkaXNhYmxlcyBwb3N0
TWVzc2FnZSBmcm9tIFdvcmtlckNvbnRleHQgYWZ0ZXIgY2xvc2UoKS4KKworICAgICAgICAqIHdv
cmtlcnMvV29ya2VyQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9zZVdvcmtlckNv
bnRleHRUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvc2VXb3JrZXJDb250ZXh0
VGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Q2xvc2VXb3JrZXJDb250ZXh0
VGFzazo6aXNDbGVhbnVwVGFzayk6CisgICAgICAgIENsb3NlV29ya2VyQ29udGV4dFRhc2sgYXN5
bmNocm9ub3VzbHkgY2F1c2VzIFdvcmtlclRocmVhZDo6c3RvcCgpLgorCisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJDb250ZXh0OjpjbG9zZSk6CisgICAgICAgIFVzZSBuZXcgZm9yYmlkRXhlY3V0
aW9uKExldFJ1bm5pbmdTY3JpcHRGaW5pc2gpIHRvIGF2b2lkIHRlcm1pbmF0aW9uIG9mIHNjcmlw
dCB1bnRpbCBpdCBleGVjdXRlcyBhbmQgZXhpdHMuCisKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtl
clRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OnN0b3ApOgorCiAyMDEwLTAzLTI5
ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBGaXNoZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNj
cmlwdENvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250
cm9sbGVyLmNwcAppbmRleCBlMzcxNDIzLi5jN2ZhNGFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTEzNiwxNSArMTM2LDE2IEBAIHZv
aWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6c2V0RXhjZXB0aW9uKFNjcmlwdFZhbHVlIGV4Y2Vw
dGlvbikKICAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9iYWxFeGVjKCktPnNldEV4Y2Vw
dGlvbihleGNlcHRpb24uanNWYWx1ZSgpKTsKIH0KIAotdm9pZCBXb3JrZXJTY3JpcHRDb250cm9s
bGVyOjpmb3JiaWRFeGVjdXRpb24oKQordm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpmb3Ji
aWRFeGVjdXRpb24oRm9yYmlkRXhlY3V0aW9uT3B0aW9uIG9wdGlvbikKIHsKLSAgICAvLyBUaGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFkLgorICAgIC8vIFRoaXMgZnVu
Y3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFkLgogICAgIC8vIE11dGV4IHBy
b3RlY3Rpb24gZm9yIG1fZXhlY3V0aW9uRm9yYmlkZGVuIGlzIG5lZWRlZCB0byBndWFyYW50ZWUg
dGhhdCB0aGUgdmFsdWUgaXMgc3luY2hyb25pemVkIGJldHdlZW4gcHJvY2Vzc29ycywgYmVjYXVz
ZQogICAgIC8vIGlmIGl0IHdlcmUgbm90LCB0aGUgd29ya2VyIGNvdWxkIHJlLWVudGVyIEpTQzo6
ZXZhbHVhdGUoKSwgYnV0IHdpdGggdGltZW91dCBhbHJlYWR5IHJlc2V0LgogICAgIC8vIEl0IGlz
IG5vdCBjcml0aWNhbCBmb3IgSW50ZXJwcmV0ZXI6Om1fdGltZW91dFRpbWUgdG8gYmUgc3luY2hy
b25pemVkLCB3ZSBqdXN0IHJlbHkgb24gaXQgcmVhY2hpbmcgdGhlIHdvcmtlciB0aHJlYWQncyBw
cm9jZXNzb3Igc29vbmVyIG9yIGxhdGVyLgogICAgIE11dGV4TG9ja2VyIGxvY2sobV9zaGFyZWRE
YXRhTXV0ZXgpOwogICAgIG1fZXhlY3V0aW9uRm9yYmlkZGVuID0gdHJ1ZTsKLSAgICBtX2dsb2Jh
bERhdGEtPnRpbWVvdXRDaGVja2VyLnNldFRpbWVvdXRJbnRlcnZhbCgxKTsgLy8gMW1zIGlzIHRo
ZSBzbWFsbGVzdCB0aW1lb3V0IHRoYXQgY2FuIGJlIHNldC4KKyAgICBpZiAob3B0aW9uID09IFRl
cm1pbmF0ZVJ1bm5pbmdTY3JpcHQpCisgICAgICAgIG1fZ2xvYmFsRGF0YS0+dGltZW91dENoZWNr
ZXIuc2V0VGltZW91dEludGVydmFsKDEpOyAvLyAxbXMgaXMgdGhlIHNtYWxsZXN0IHRpbWVvdXQg
dGhhdCBjYW4gYmUgc2V0LgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaCBiL1dlYkNvcmUv
YmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IGM4MjBjZDkuLmQ0Y2Iz
ZGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxl
ci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCkBA
IC02MSw3ICs2MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHNldEV4
Y2VwdGlvbihTY3JpcHRWYWx1ZSk7CiAKLSAgICAgICAgdm9pZCBmb3JiaWRFeGVjdXRpb24oKTsK
KyAgICAgICAgZW51bSBGb3JiaWRFeGVjdXRpb25PcHRpb24geyBUZXJtaW5hdGVSdW5uaW5nU2Ny
aXB0LCBMZXRSdW5uaW5nU2NyaXB0RmluaXNoIH07CisgICAgICAgIHZvaWQgZm9yYmlkRXhlY3V0
aW9uKEZvcmJpZEV4ZWN1dGlvbk9wdGlvbik7CiAKICAgICAgICAgSlNDOjpKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEoKSB7IHJldHVybiBtX2dsb2JhbERhdGEuZ2V0KCk7IH0KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggNTU5OTI2Zi4u
N2RiMGQ4ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250
cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xs
ZXIuY3BwCkBAIC04NiwxMiArODYsMTMgQEAgU2NyaXB0VmFsdWUgV29ya2VyU2NyaXB0Q29udHJv
bGxlcjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSwKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmZvcmJpZEV4
ZWN1dGlvbigpCit2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmZvcmJpZEV4ZWN1dGlvbihG
b3JiaWRFeGVjdXRpb25PcHRpb24gb3B0aW9uKQogewotICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMg
Y2FsbGVkIGZyb20gYW5vdGhlciB0aHJlYWQuCisgICAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUg
Y2FsbGVkIGZyb20gYW5vdGhlciB0aHJlYWQuCiAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3NoYXJl
ZERhdGFNdXRleCk7CiAgICAgbV9leGVjdXRpb25Gb3JiaWRkZW4gPSB0cnVlOwotICAgIHY4OjpW
ODo6VGVybWluYXRlRXhlY3V0aW9uKCk7CisgICAgaWYgKG9wdGlvbiA9PSBUZXJtaW5hdGVSdW5u
aW5nU2NyaXB0KQorICAgICAgICB2ODo6Vjg6OlRlcm1pbmF0ZUV4ZWN1dGlvbigpOwogfQogCiB2
b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OnNldEV4Y2VwdGlvbihTY3JpcHRWYWx1ZSBleGNl
cHRpb24pCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRy
b2xsZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCmlu
ZGV4IGI3M2RlNWYuLjY4NzVlMDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2Ny
aXB0Q29udHJvbGxlci5oCkBAIC01NSw3ICs1NSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICB2b2lkIHNldEV4Y2VwdGlvbihTY3JpcHRWYWx1ZSk7CiAKLSAgICAgICAgdm9pZCBm
b3JiaWRFeGVjdXRpb24oKTsKKyAgICAgICAgZW51bSBGb3JiaWRFeGVjdXRpb25PcHRpb24geyBU
ZXJtaW5hdGVSdW5uaW5nU2NyaXB0LCBMZXRSdW5uaW5nU2NyaXB0RmluaXNoIH07CisgICAgICAg
IHZvaWQgZm9yYmlkRXhlY3V0aW9uKEZvcmJpZEV4ZWN1dGlvbk9wdGlvbik7CisKICAgICAgICAg
Ly8gUmV0dXJucyBXb3JrZXJTY3JpcHRDb250cm9sbGVyIGZvciB0aGUgY3VycmVudGx5IGV4ZWN1
dGluZyBjb250ZXh0LiAwIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIGN1cnJlbnQgZXhlY3V0aW5n
IGNvbnRleHQgaXMgbm90IHRoZSB3b3JrZXIgY29udGV4dC4KICAgICAgICAgc3RhdGljIFdvcmtl
clNjcmlwdENvbnRyb2xsZXIqIGNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmNwcCBiL1dlYkNvcmUvd29y
a2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmNwcAppbmRleCA4MmRjNGIzLi45ODY5NmUwIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5jcHAKKysr
IGIvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuY3BwCkBAIC02Miw4ICs2
Miw2IEBAIHZvaWQgRGVkaWNhdGVkV29ya2VyQ29udGV4dDo6cG9zdE1lc3NhZ2UoUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhCiAKIHZvaWQgRGVkaWNhdGVkV29ya2VyQ29u
dGV4dDo6cG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3Nh
Z2UsIGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkqIHBvcnRzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
LSAgICBpZiAoaXNDbG9zaW5nKCkpCi0gICAgICAgIHJldHVybjsKICAgICAvLyBEaXNlbnRhbmds
ZSB0aGUgcG9ydCBpbiBwcmVwYXJhdGlvbiBmb3Igc2VuZGluZyBpdCB0byB0aGUgcmVtb3RlIGNv
bnRleHQuCiAgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscyA9IE1l
c3NhZ2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKHBvcnRzLCBlYyk7CiAgICAgaWYgKGVjKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwIGIvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuY3BwCmluZGV4IDdiNGYyOTMuLmM5MDc4MWUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyQ29udGV4dC5jcHAKQEAgLTU4LDYgKzU4LDI0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgQ2xvc2VXb3JrZXJDb250ZXh0VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDbG9zZVdv
cmtlckNvbnRleHRUYXNrPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDbG9z
ZVdvcmtlckNvbnRleHRUYXNrKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1U
YXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgKmNvbnRleHQpCisgICAgeworICAgICAgICBBU1NF
UlQoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgICAgICBXb3JrZXJDb250ZXh0KiB3
b3JrZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpOworICAg
ICAgICAvLyBOb3RpZnkgcGFyZW50IHRoYXQgdGhpcyBjb250ZXh0IGlzIGNsb3NlZC4gUGFyZW50
IGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIFdvcmtlclRocmVhZDo6c3RvcCgpLgorICAgICAg
ICB3b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29ya2VyUmVwb3J0aW5nUHJveHkoKS53b3JrZXJD
b250ZXh0Q2xvc2VkKCk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGlzQ2xlYW51cFRhc2so
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cit9OworCiBXb3JrZXJDb250ZXh0OjpXb3JrZXJDb250
ZXh0KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIFdvcmtlclRocmVh
ZCogdGhyZWFkKQogICAgIDogbV91cmwodXJsKQogICAgICwgbV91c2VyQWdlbnQodXNlckFnZW50
KQpAQCAtMTIxLDggKzEzOSw5IEBAIHZvaWQgV29ya2VyQ29udGV4dDo6Y2xvc2UoKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX2Nsb3NpbmcgPSB0cnVlOwotICAgIC8vIE5vdGlmeSBwYXJlbnQg
dGhhdCB0aGlzIGNvbnRleHQgaXMgY2xvc2VkLiBQYXJlbnQgaXMgcmVzcG9uc2libGUgZm9yIGNh
bGxpbmcgV29ya2VyVGhyZWFkOjpzdG9wKCkuCi0gICAgdGhyZWFkKCktPndvcmtlclJlcG9ydGlu
Z1Byb3h5KCkud29ya2VyQ29udGV4dENsb3NlZCgpOworICAgIC8vIExldCBjdXJyZW50IHNjcmlw
dCBydW4gdG8gY29tcGxldGlvbiAgYnV0IHByZXZlbnQgZnV0dXJlIHNjcmlwdCBldmFsdWF0aW9u
cy4KKyAgICBtX3NjcmlwdC0+Zm9yYmlkRXhlY3V0aW9uKFdvcmtlclNjcmlwdENvbnRyb2xsZXI6
OkxldFJ1bm5pbmdTY3JpcHRGaW5pc2gpOworICAgIHBvc3RUYXNrKENsb3NlV29ya2VyQ29udGV4
dFRhc2s6OmNyZWF0ZSgpKTsKIH0KIAogV29ya2VyTmF2aWdhdG9yKiBXb3JrZXJDb250ZXh0Ojpu
YXZpZ2F0b3IoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVh
ZC5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAppbmRleCAzODIzYWQ0Li4x
NmM1YjcwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAorKysg
Yi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcApAQCAtMTIxLDcgKzEyMSw3IEBAIHZv
aWQqIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkKCkKICAgICAgICAgaWYgKG1fcnVuTG9vcC50
ZXJtaW5hdGVkKCkpIHsKICAgICAgICAgICAgIC8vIFRoZSB3b3JrZXIgd2FzIHRlcm1pbmF0ZWQg
YmVmb3JlIHRoZSB0aHJlYWQgaGFkIGEgY2hhbmNlIHRvIHJ1bi4gU2luY2UgdGhlIGNvbnRleHQg
ZGlkbid0IGV4aXN0IHlldCwKICAgICAgICAgICAgIC8vIGZvcmJpZEV4ZWN1dGlvbigpIGNvdWxk
bid0IGJlIGNhbGxlZCBmcm9tIHN0b3AoKS4KLSAgICAgICAgICAgbV93b3JrZXJDb250ZXh0LT5z
Y3JpcHQoKS0+Zm9yYmlkRXhlY3V0aW9uKCk7CisgICAgICAgICAgIG1fd29ya2VyQ29udGV4dC0+
c2NyaXB0KCktPmZvcmJpZEV4ZWN1dGlvbihXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpUZXJtaW5h
dGVSdW5uaW5nU2NyaXB0KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjE4LDcgKzIxOCw3IEBA
IHZvaWQgV29ya2VyVGhyZWFkOjpzdG9wKCkKIAogICAgIC8vIEVuc3VyZSB0aGF0IHRhc2tzIGFy
ZSBiZWluZyBoYW5kbGVkIGJ5IHRocmVhZCBldmVudCBsb29wLiBJZiBzY3JpcHQgZXhlY3V0aW9u
IHdlcmVuJ3QgZm9yYmlkZGVuLCBhIHdoaWxlKDEpIGxvb3AgaW4gSlMgY291bGQga2VlcCB0aGUg
dGhyZWFkIGFsaXZlIGZvcmV2ZXIuCiAgICAgaWYgKG1fd29ya2VyQ29udGV4dCkgewotICAgICAg
ICBtX3dvcmtlckNvbnRleHQtPnNjcmlwdCgpLT5mb3JiaWRFeGVjdXRpb24oKTsKKyAgICAgICAg
bV93b3JrZXJDb250ZXh0LT5zY3JpcHQoKS0+Zm9yYmlkRXhlY3V0aW9uKFdvcmtlclNjcmlwdENv
bnRyb2xsZXI6OlRlcm1pbmF0ZVJ1bm5pbmdTY3JpcHQpOwogCiAgICAgLy8gRklYTUU6IFJ1ZGVs
eSBraWxsaW5nIHRoZSB0aHJlYWQgd29uJ3Qgd29yayB3aGVuIHdlIGFsbG93IG5lc3RlZCB3b3Jr
ZXJzLCBiZWNhdXNlIHRoZXkgd2lsbCB0cnkgdG8gcG9zdCBub3RpZmljYXRpb25zIG9mIHRoZWly
IGRlc3RydWN0aW9uLgogICAgIC8vIFRoaXMgY2FuIGxpa2VseSB1c2UgdGhlIHNhbWUgbWVjaGFu
aXNtIGFzIHVzZWQgZm9yIGRhdGFiYXNlcyBhYm92ZS4K
</data>
<flag name="commit-queue"
          id="35973"
          type_id="3"
          status="-"
          setter="dimich"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52909</attachid>
            <date>2010-04-08 15:58:28 -0700</date>
            <delta_ts>2010-04-09 09:26:48 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>19493</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxNWNkNTVlLi40NTUyYzJiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMDQt
MDggIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViQ29yZTogV29ya2VyR2xvYmFsU2Nv
cGUuY2xvc2UoKSBzaG91bGQgbGV0IHRoZSBjdXJyZW50bHkgcnVubmluZyBzY3JpcHQgY29tcGxl
dGUgZXhlY3V0aW9uLCB0aGVuIHRlcm1pbmF0ZSB0aGUgd29ya2VyLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcwNTMKKworICAgICAgICAqIGZhc3Qv
d29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLWNsb3NlLmpzOgorICAgICAgICAqIGZhc3Qvd29ya2Vy
cy93b3JrZXItY2xvc2UtZXhwZWN0ZWQudHh0OgorICAgICAgICBVcGRhdGVkIHRlc3RzIHRvIGV4
cGVjdCB0aGUgc2NyaXB0IGZyYWdtZW50IHRoYXQgaW5jbHVkZXMgY2xvc2UoKSB0byBydW4gdG8g
Y29tcGxldGlvbi4KKworICAgICAgICAqIGZhc3Qvd29ya2Vycy93b3JrZXItY2xvc2UtbW9yZS1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy93b3JrZXItY2xvc2Ut
bW9yZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvd29ya2VyLWNsb3NlLmh0
bWw6CisgICAgICAgIEFkZGVkIHRlc3QgdG8gY2hlY2sgdGVybWluYXRlKCkgYWZ0ZXIgY2xvc2Uo
KSBhbmQgY2xvc2UoKSBpbiB0aGUgY2FzZSBvZiBtdWx0aXBsZSBNZXNzYWdlUG9ydCBtZXNzYWdl
cyBkaXNwYXRjaGluZy4KKwogMjAxMC0wNC0wOCAgT2phbiBWYWZhaSAgPG9qYW5AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLWNsb3NlLmpzIGIvTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy93b3JrZXItY2xvc2UuanMKaW5kZXggYTQ3
NDE1NC4uMTdmNDFiNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291
cmNlcy93b3JrZXItY2xvc2UuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291
cmNlcy93b3JrZXItY2xvc2UuanMKQEAgLTE3LDcgKzE3LDcgQEAgb25tZXNzYWdlID0gZnVuY3Rp
b24oZXZ0KQogICAgICAgICBwb3N0TWVzc2FnZSgidHlwZW9mIGNsb3NlOiAiICsgKHR5cGVvZiBj
bG9zZSkpOwogICAgIH0gZWxzZSBpZiAoZXZ0LmRhdGEgPT0gImNsb3NlIikgewogICAgICAgICBj
bG9zZSgpOwotICAgICAgICBwb3N0TWVzc2FnZSgiU2hvdWxkIG5vdCBiZSBkZWxpdmVyZWQiKTsK
KyAgICAgICAgcG9zdE1lc3NhZ2UoIlNob3VsZCBiZSBkZWxpdmVyZWQiKTsKICAgICB9IGVsc2Ug
aWYgKGV2dC5kYXRhID09ICJwaW5nIikgewogICAgICAgICBwb3N0TWVzc2FnZSgicG9uZyIpOwog
ICAgIH0gZWxzZSBpZiAoZXZ0LmRhdGEgPT0gInRocm93IikgewpAQCAtMjUsNiArMjUsMTggQEAg
b25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KQogICAgIH0gZWxzZSBpZiAoZXZ0LmRhdGEgPT0gImNs
b3NlV2l0aEVycm9yIikgewogICAgICAgICBjbG9zZSgpOwogICAgICAgICBub25FeGlzdGVudEZ1
bmN0aW9uKCk7ICAvLyBVbmRlZmluZWQgZnVuY3Rpb24gLSB0aHJvd3MgZXhjZXB0aW9uCisgICAg
fSBlbHNlIGlmIChldnQuZGF0YSA9PSAiY2xvc2VfcG9zdF9sb29wIikgeworICAgICAgICBjbG9z
ZSgpOworICAgICAgICBwb3N0TWVzc2FnZSgiY2xvc2VkIik7CisgICAgICAgIHdoaWxlKHRydWUp
IHt9IC8vIFNob3VsZCBsb29wIGZvcmV2ZXIuCisgICAgfSBlbHNlIGlmIChldnQuZGF0YSA9PSAi
dGFrZV9wb3J0IikgeworICAgICAgICBtZXNzYWdlUG9ydCA9IGV2dC5wb3J0c1swXTsKKyAgICAg
ICAgbWVzc2FnZVBvcnQub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsgCisgICAgICAgICAg
ICBjbG9zZSgpOworICAgICAgICAgICAgcG9zdE1lc3NhZ2UoImVjaG9fIiArIGV2ZW50LmRhdGEp
OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChldnQuZGF0YSA9PSAic3RhcnRfcG9ydCIpIHsK
KyAgICAgICAgbWVzc2FnZVBvcnQuc3RhcnQoKTsKICAgICB9IGVsc2UgewogICAgICAgICBwb3N0
TWVzc2FnZSgiRkFJTDogVW5rbm93biBtZXNzYWdlIHR5cGU6ICIgKyBldnQuZGF0YSk7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1jbG9zZS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNsb3NlLWV4cGVjdGVk
LnR4dAppbmRleCA3NmZiY2FmLi5jMDY3YjYxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvd29ya2VyLWNsb3NlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvd29ya2VyLWNsb3NlLWV4cGVjdGVkLnR4dApAQCAtMiw4ICsyLDEwIEBAIFRlc3Qg
V29ya2VyQ29udGV4dC5jbG9zZSBmdW5jdGlvbmFsaXR5LiBTaG91bGQgcHJpbnQgYSBzZXJpZXMg
b2YgUEFTUyBtZXNzYWdlcywKIAogUEFTUzogdHlwZW9mIGNsb3NlOiBmdW5jdGlvbgogUEFTUzog
cmVjZWl2ZWQgbWVzc2FnZSBiZWZvcmUgY2xvc2UKLVBBU1M6IG1lc3NhZ2VzIHNlbnQgYWZ0ZXIg
Y2xvc2UoKSBhcmUgaWdub3JlZAorUEFTUzogUmVjZWl2ZWQgbWVzc2FnZSBwb3N0ZWQgcmlnaHQg
YWZ0ZXIgY2xvc2UoKSB3YXMgaW52b2tlZDogU2hvdWxkIGJlIGRlbGl2ZXJlZAorUEFTUzogbm8g
bWVzc2FnZXMgYXJyaXZlIHRvIHdvcmtlciBhZnRlciBKUyBmcmFnbWVudCB3aXRoIGNsb3NlKCkg
ZXhpdHMKIFBBU1M6IEVycm9yIGFycml2ZWQgYWZ0ZXIgY2xvc2U6IFJlZmVyZW5jZUVycm9yOiBD
YW4ndCBmaW5kIHZhcmlhYmxlOiBub25FeGlzdGVudEZ1bmN0aW9uCiBQQVNTOiBjbG9zZSgpIGRp
ZCBub3QgZGlzcGF0Y2ggcGVuZGluZyBldmVudHMKK1BBU1M6IFJlY2VpdmVkIG1lc3NhZ2UgYWZ0
ZXIgd29ya2VyIGNsb3NlZDogU2hvdWxkIGJlIGRlbGl2ZXJlZAogRE9ORQogCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNsb3NlLW1vcmUtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1jbG9zZS1tb3JlLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTQ0ZDk3Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1jbG9zZS1tb3JlLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitUZXN0IFdvcmtlckdsb2JhbFNjb3BlLmNsb3NlKCkg
bWV0aG9kLiBXaWxsIHByaW50IFBBU1MgbXVsdGlwbGUgdGltZXMsIGZvbGxvd2VkIGJ5IERPTkUu
CisKK1Rlc3QgMTogQ2FsbCBjbG9zZSgpIGluIHRoZSB3b3JrZXIsIHRoZW4gZW50ZXIgaW5maW5p
dGUgbG9vcC4gRnJvbSB0aGUgV29ya2VyIG9iamVjdCBzaWRlLCBjYWxsIHRlcm1pbmF0ZSgpLiBW
ZXJpZnkgdGhlIGxvb3AgaXMgdGVybWluYXRlZC4KK1BBU1M6IHdvcmtlclRocmVhZENvdW50ID0g
MAorUEFTUzogV29ya2VyIHRocmVhZCBjcmVhdGVkIGFuZCBjbG9zZWQsIHJlY2VpdmVkIG1lc3Nh
Z2U6IGNsb3NlZAorUEFTUzogV29ya2VyIGV4aXRlZCBhZnRlciB0ZXJtaW5hdGUoKSB0ZXJtaW5h
dGVkIHRoZSBpbmZpbml0ZSBsb29wLgorVGVzdCAyOiBwb3N0IDIgbWVzc2FnZXMgdG8gYSBNZXNz
YWdlUG9ydCBpbnRvIHRoZSB3b3JrZXIuIHBvcnQub25tZXNzYWdlIGhhbmRsZXIgaW5zaWRlIHRo
ZSB3b3JrZXIgd2lsbCBjYWxsIGNsb3NlKCkuIFZlcmlmeSB0aGF0IHRoZSBzZWNvbmQgb25tZXNz
YWdlIHdhcyBub3QgZXhlY3V0ZWQuCitQQVNTOiB3b3JrZXJUaHJlYWRDb3VudCA9IDAKK1BBU1M6
IE1lc3NhZ2VQb3J0IG11bHRpcGxlIG1lc3NhZ2UgdGVzdCwgcmVjZWl2ZWQgbWVzc2FnZTogZWNo
b19waW5nMQorUEFTUzogTWVzc2FnZVBvcnQgbWVzc2FnZXMgd2VyZSBub3QgZGVsaXZlcmVkIGFz
ZnRlciBjbG9zZSgpLgorRE9ORQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvd29ya2VyLWNsb3NlLW1vcmUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3Jr
ZXItY2xvc2UtbW9yZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQy
M2NjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2Vy
LWNsb3NlLW1vcmUuaHRtbApAQCAtMCwwICsxLDY4IEBACis8Ym9keT4KKzxwPlRlc3QgV29ya2Vy
R2xvYmFsU2NvcGUuY2xvc2UoKSBtZXRob2QuIFdpbGwgcHJpbnQgUEFTUyBtdWx0aXBsZSB0aW1l
cywgZm9sbG93ZWQgYnkgRE9ORS48L3A+Cis8ZGl2IGlkPXJlc3VsdD48L2Rpdj4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvd29ya2VyLXV0aWwuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2lmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgIHdhaXRVbnRpbFdvcmtlclRocmVhZHNFeGl0KHJ1blRlc3RzKTsKK30gZWxzZSB7CisgICAg
bG9nKCJOT1RFOiBUZXN0IHJlbGllcyBvbiB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIgdG8g
ZGV0ZWN0IHdoZW4gd29ya2VyIHRocmVhZHMgaGF2ZSBleGl0ZWQuIFBsZWFzZSBydW4gdGhpcyB0
ZXN0IHZpYSBEdW1wUmVuZGVyVHJlZSIpOworICAgIHdhaXRVbnRpbFdvcmtlclRocmVhZHNFeGl0
KHJ1blRlc3RzKTsKK30KKwordmFyIHdvcmtlcjsKKworZnVuY3Rpb24gc3RhcnRXb3JrZXIoKQor
eworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxvZygiUEFT
Uzogd29ya2VyVGhyZWFkQ291bnQgPSAiICsgbGF5b3V0VGVzdENvbnRyb2xsZXIud29ya2VyVGhy
ZWFkQ291bnQpOworICAgIHdvcmtlciA9IG5ldyBXb3JrZXIoJ3Jlc291cmNlcy93b3JrZXItY2xv
c2UuanMnKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdHMoKQoreworICAgIGxvZygiVGVzdCAxOiBD
YWxsIGNsb3NlKCkgaW4gdGhlIHdvcmtlciwgdGhlbiBlbnRlciBpbmZpbml0ZSBsb29wLiBGcm9t
IHRoZSBXb3JrZXIgb2JqZWN0IHNpZGUsIGNhbGwgdGVybWluYXRlKCkuIFZlcmlmeSB0aGUgbG9v
cCBpcyB0ZXJtaW5hdGVkLiIpCisgICAgc3RhcnRXb3JrZXIoKTsKKyAgICB3b3JrZXIucG9zdE1l
c3NhZ2UoImNsb3NlX3Bvc3RfbG9vcCIpOyAvLyBDbG9zZSB0aGUgd29ya2VyIGJ1dCBwdXQgaXQg
aW1tZWRpYXRlbHkgaW50byBpbmZpbml0ZSBsb29wLgorICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBm
dW5jdGlvbihldmVudCkgeworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7CisgICAgICAgICAgICBsb2coIlBBU1M6IFdvcmtlciB0aHJlYWQgY3JlYXRlZCBhbmQgY2xv
c2VkLCByZWNlaXZlZCBtZXNzYWdlOiAiICsgZXZlbnQuZGF0YSk7CisgICAgICAgICAgICAvLyBU
ZXJtaW5hdGUgdGhlIHdvcmtlci4KKyAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTsKKyAg
ICAgICAgICAgIHdhaXRVbnRpbFdvcmtlclRocmVhZHNFeGl0KHRlc3RDbG9zZVdpdGhBY2N1bXVs
YXRlZE1lc3NhZ2VzKTsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gdGVzdENsb3Nl
V2l0aEFjY3VtdWxhdGVkTWVzc2FnZXMoKQoreworICAgIGxvZygiUEFTUzogV29ya2VyIGV4aXRl
ZCBhZnRlciB0ZXJtaW5hdGUoKSB0ZXJtaW5hdGVkIHRoZSBpbmZpbml0ZSBsb29wLiIpOworICAg
IGxvZygiVGVzdCAyOiBwb3N0IDIgbWVzc2FnZXMgdG8gYSBNZXNzYWdlUG9ydCBpbnRvIHRoZSB3
b3JrZXIuIHBvcnQub25tZXNzYWdlIGhhbmRsZXIgaW5zaWRlIHRoZSB3b3JrZXIgd2lsbCBjYWxs
IGNsb3NlKCkuIFZlcmlmeSB0aGF0IHRoZSBzZWNvbmQgb25tZXNzYWdlIHdhcyBub3QgZXhlY3V0
ZWQuIikKKyAgICBzdGFydFdvcmtlcigpOworICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VD
aGFubmVsKCk7CisgICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAg
ICAgIGlmIChldmVudC5kYXRhID09ICJlY2hvX3BpbmcyIikKKyAgICAgICAgICAgIGxvZygiRkFJ
TDogVGhlIE1lc3NhZ2VQb3J0IG1lc3NhZ2Ugd2FzIGRpc3BhdGNoZWQgYWZ0ZXIgYSBKUyBmcmFn
bWVudCB0aGF0IGNhbGxlZCAnY2xvc2UoKScgZXhpdGVkLiIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBsb2coIlBBU1M6IE1lc3NhZ2VQb3J0IG11bHRpcGxlIG1lc3NhZ2UgdGVzdCwgcmVj
ZWl2ZWQgbWVzc2FnZTogIiArIGV2ZW50LmRhdGEpOworICAgICAgICBzZXRUaW1lb3V0KCJ3YWl0
VW50aWxXb3JrZXJUaHJlYWRzRXhpdCh3b3JrZXJFeGl0ZWQpIiwgMTAwKTsgLy8gTGV0IGl0IHJ1
biBhIGJpdCB0byBjYXRjaCB0aGUgZWNob19waW5nMiBpZiBpdCBhcnJpdmVzLgorICAgIH0KKyAg
ICB3b3JrZXIucG9zdE1lc3NhZ2UoInRha2VfcG9ydCIsIFtjaGFubmVsLnBvcnQyXSk7CisKKyAg
ICAvLyBRdWV1ZSAyIG1lc3NhZ2VzLgorICAgIGNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UoInBp
bmcxIik7CisgICAgY2hhbm5lbC5wb3J0MS5wb3N0TWVzc2FnZSgicGluZzIiKTsKKworICAgIC8v
IE5vdyBlbmFibGUgdGhlIG1lc3NhZ2VzIHRvIGJlIGRlbGl2ZXJlZC4gT25seSBmaXJzdCBzaG91
bGQgZWNobyBiYWNrLgorICAgIHdvcmtlci5wb3N0TWVzc2FnZSgic3RhcnRfcG9ydCIpOworfQor
CitmdW5jdGlvbiB3b3JrZXJFeGl0ZWQoKQoreworICAgIGxvZygiUEFTUzogTWVzc2FnZVBvcnQg
bWVzc2FnZXMgd2VyZSBub3QgZGVsaXZlcmVkIGFzZnRlciBjbG9zZSgpLiIpOworICAgIGRvbmUo
KTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3dvcmtlci1jbG9zZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtl
ci1jbG9zZS5odG1sCmluZGV4IGZkOGRmZDguLmY0YjhjYWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItY2xvc2UuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvd29ya2VyLWNsb3NlLmh0bWwKQEAgLTM1LDI4ICszNSwyNSBAQCBmdW5jdGlvbiB0
ZXN0TWVzc2FnZUFmdGVyQ2xvc2UoZXZ0KSB7CiAgICAgZWxzZQogICAgICAgICBsb2coIkZBSUw6
IHJlY2VpdmVkIHVua25vd24gcmVzcG9uc2U6ICIgKyBldnQuZGF0YSk7CiAKLSAgICAvLyBUZWxs
IHRoZSB3b3JrZXIgdG8gY2xvc2UsIHRoZW4gc2VuZCBhIGZvbGxvd3VwIG1lc3NhZ2UKLSAgICAv
LyB3aGljaCBzaG91bGQgbm90IGJlIGRlbGl2ZXJlZC4KKyAgICAvLyBUZWxsIHRoZSB3b3JrZXIg
dG8gY2xvc2UsIHRoZW4gc2VuZCBhIGZvbGxvd3VwIG1lc3NhZ2UuIFRoaXMgbWVzc2FnZSBzaG91
bGQgbm90IGJlIGRlbGl2ZXJlZCwKKyAgICAvLyBzaW5jZSB0aGF0IHdvdWxkIHJlcXVpcmUgSlMg
dG8gaW52b2tlIHRoZSBvbm1lc3NhZ2UgaGFuZGxlciwgd2hpY2ggZG9lcyBub3QgaGFwcGVuIGFm
dGVyIHRoZSBKUworICAgIC8vIGZyYWdtZW50IHdpdGggJ2Nsb3NlKCknIGluIGl0IGV4aXRzLiBT
bywgdGhlICdwaW5nJyBzaG91bGQgbm90IGNvbWUgYmFjayBhcyAncG9uZycuCiAgICAgd29ya2Vy
LnBvc3RNZXNzYWdlKCJjbG9zZSIpOworICAgIHdvcmtlci5wb3N0TWVzc2FnZSgicGluZyIpOwog
ICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKLSAgICAgICAgbG9nKCJGQUlM
OiBSZWNlaXZlZCBtZXNzYWdlIGFmdGVyIHdvcmtlciBjbG9zZWQ6ICIgKyBldnQuZGF0YSk7Ci0g
ICAgICAgIGRvbmUoKTsKKyAgICAgICAgaWYgKGV2dC5kYXRhICE9ICJwb25nIikKKyAgICAgICAg
ICAgIGxvZygiUEFTUzogUmVjZWl2ZWQgbWVzc2FnZSBwb3N0ZWQgcmlnaHQgYWZ0ZXIgY2xvc2Uo
KSB3YXMgaW52b2tlZDogIiArIGV2dC5kYXRhKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBsb2coIkZBSUw6IFJlY2VpdmVkIGEgbWVzc2FnZSBvcmlnaW5hdGVkIGZyb20gYSBoYW5kbGVy
IGluIHRoZSB3b3JrZXIgYWZ0ZXIgdGhlIEpTIGZyYWdtZW50IHdpdGggY2xvc2UoKSBleGl0ZWQi
ICsgZXZ0LmRhdGEpOworICAgICAgICAgICAgZG9uZSgpOworICAgICAgICB9CiAgICAgfTsKLSAg
ICAvLyBNYWtlIHN1cmUgdGhhdCBtZXNzYWdlcyBkb24ndCBhcnJpdmUgYXQgdGhlIHJlbW90ZSBl
bmQgLSBzaW5jZSB0aGV5Ci0gICAgLy8gY2FuJ3Qgc2VuZCBiYWNrIHJlc3BvbnNlIG1lc3NhZ2Vz
LCB3ZSdsbCBoYXZlIHRoZSB3b3JrZXIgdGhyb3cgYW4KLSAgICAvLyBleGNlcHRpb24gaW5zdGVh
ZCAoZXJyb3JzIGFyZSBzdGlsbCBwcm9wYWdhdGVkIHRvIHRoZSBjYWxsZXIgZXZlbiBhZnRlcgot
ICAgIC8vIGNsb3NlKCkpLgotICAgIHdvcmtlci5wb3N0TWVzc2FnZSgidGhyb3ciKTsKLSAgICB3
b3JrZXIub25lcnJvciA9IGZ1bmN0aW9uKGV2dCkgewotICAgICAgICBsb2coIkZBSUw6IG1lc3Nh
Z2UgZGVsaXZlcmVkIGFmdGVyIGNsb3NlKCk6ICIgKyBldnQubWVzc2FnZSk7Ci0gICAgICAgIGRv
bmUoKTsKLSAgICB9CiAgICAgdGltZW91dCA9IHNldFRpbWVvdXQodGVzdEVycm9yQWZ0ZXJDbG9z
ZSwgMTAwMCk7CiB9CiAKIGZ1bmN0aW9uIHRlc3RFcnJvckFmdGVyQ2xvc2UoKQogewotICAgIGxv
ZygiUEFTUzogbWVzc2FnZXMgc2VudCBhZnRlciBjbG9zZSgpIGFyZSBpZ25vcmVkIik7CisgICAg
bG9nKCJQQVNTOiBubyBtZXNzYWdlcyBhcnJpdmUgdG8gd29ya2VyIGFmdGVyIEpTIGZyYWdtZW50
IHdpdGggY2xvc2UoKSBleGl0cyIpOwogICAgIC8vIFRlc3QgdGhhdCBlcnJvcnMgYXJlIGRlbGl2
ZXJlZCBhZnRlciBjbG9zZS4KICAgICB3b3JrZXIgPSBuZXcgV29ya2VyKCdyZXNvdXJjZXMvd29y
a2VyLWNsb3NlLmpzJyk7CiAgICAgd29ya2VyLnBvc3RNZXNzYWdlKCJjbG9zZVdpdGhFcnJvciIp
OwpAQCAtODYsMTEgKzgzLDEwIEBAIGZ1bmN0aW9uIHRlc3RQZW5kaW5nRXZlbnRzKCkKIGZ1bmN0
aW9uIHRlc3RUZXJtaW5hdGVBZnRlckNsb3NlKCkKIHsKICAgICBsb2coIlBBU1M6IGNsb3NlKCkg
ZGlkIG5vdCBkaXNwYXRjaCBwZW5kaW5nIGV2ZW50cyIpOwotICAgIHdvcmtlciA9IG5ldyBXb3Jr
ZXIoJ3Jlc291cmNlcy93b3JrZXItY2xhc3MuanMnKTsKKyAgICB3b3JrZXIgPSBuZXcgV29ya2Vy
KCdyZXNvdXJjZXMvd29ya2VyLWNsb3NlLmpzJyk7CiAgICAgd29ya2VyLnBvc3RNZXNzYWdlKCJj
bG9zZSIpOwogICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKLSAgICAgICAg
bG9nKCJGQUlMOiBSZWNlaXZlZCBtZXNzYWdlIGFmdGVyIHdvcmtlciBjbG9zZWQ6ICIgKyBldnQu
ZGF0YSk7Ci0gICAgICAgIGRvbmUoKTsKKyAgICAgICAgbG9nKCJQQVNTOiBSZWNlaXZlZCBtZXNz
YWdlIGFmdGVyIHdvcmtlciBjbG9zZWQ6ICIgKyBldnQuZGF0YSk7CiAgICAgfTsKICAgICAvLyBH
aXZlIHdvcmtlciBhIGNoYW5jZSB0byBjbG9zZSBmaXJzdCwgdGhlbiB0ZXJtaW5hdGUgaXQuCiAg
ICAgdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGIyMjc0NTMuLmE1ODk3MTUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDUgQEAKKzIwMTAtMDQtMDggIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Vi
Q29yZTogV29ya2VyR2xvYmFsU2NvcGUuY2xvc2UoKSBzaG91bGQgbGV0IHRoZSBjdXJyZW50bHkg
cnVubmluZyBzY3JpcHQgY29tcGxldGUgZXhlY3V0aW9uLCB0aGVuIHRlcm1pbmF0ZSB0aGUgd29y
a2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzcw
NTMKKworICAgICAgICBUZXN0OiBmYXN0L3dvcmtlcnMvd29ya2VyLWNsb3NlLW1vcmUuaHRtbAor
CisgICAgICAgICogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpmb3JiaWRFeGVjdXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6KToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmZvcmJpZEV4ZWN1dGlvbik6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6KToKKyAgICAgICAgQWRkZWQgb3B0aW9uIHBhcmFtZXRlciB0
byBmb3JiaWRFeGVjdXRpb24gKGJvdGggSkNTIGFuZCBWOCB2ZXJzaW9ucykgdGhhdCBzcGVjaWZp
ZXMgd2hldGhlciBjdXJyZW50bHkgcnVubmluZworICAgICAgICBzY3JpcHQgc2hvdWxkIGJlIGlt
bWVkaWF0ZWx5IHRlcm1pbmF0ZWQgb3IgbGVmdCBleGVjdXRlZCB1bnRpbCB0aGUgZW5kLgorCisg
ICAgICAgICogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6d29ya2VyQ29udGV4dFdyYXBwZXIpOgor
ICAgICAgICBUaGlzIG1ldGhvZCBub3cgY2FuIHJldHVybiAwIGluc3RlYWQgb2YgY29udGV4dCBp
ZiB0aGUgZnVydGhlciBleGVjdXRpb24gb2YgSlMgaXMgZm9yYmlkZGVuLiBTaW5jZSBhbnkgSlMg
ZXhlY3V0aW9uIHJlcXVpcmVzCisgICAgICAgIGZldGNoaW5nIEpTIGdsb2JhbCBvYmplY3QgZmly
c3QsIHJldHVybmluZyAwIGhlcmUgaXMgYSBnb29kIHdheSB0byBwcmV2ZW50IHJlLWVudHJ5IGlu
dG8gSlMgb25jZSB3b3JrZXIgc3RhcnRlZCB0ZXJtaW5hdGlvbi4KKyAgICAgICAgVjggdmVyc2lv
biBkb2VzIHNpbWlsYXIgdGhpbmcgYWxyZWFkeSBpbiBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpw
cm94eSgpLgorCisgICAgICAgICogd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRlZGljYXRlZFdvcmtlckNvbnRleHQ6OnBvc3RNZXNzYWdlKToK
KyAgICAgICAgUmVtb3ZlZCBjaGVjayB0aGF0IGltbWVkaWF0ZWx5IGRpc2FibGVzIHBvc3RNZXNz
YWdlIGZyb20gV29ya2VyQ29udGV4dCBhZnRlciBjbG9zZSgpLgorCisgICAgICAgICogd29ya2Vy
cy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb3NlV29ya2VyQ29udGV4
dFRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9zZVdvcmtlckNvbnRleHRUYXNr
OjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpDbG9zZVdvcmtlckNvbnRleHRUYXNr
Ojppc0NsZWFudXBUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmNsb3Nl
KToKKyAgICAgICAgVXNlIG5ldyBmb3JiaWRFeGVjdXRpb24oTGV0UnVubmluZ1NjcmlwdEZpbmlz
aCkgdG8gYXZvaWQgdGVybWluYXRpb24gb2Ygc2NyaXB0IHVudGlsIGl0IGV4ZWN1dGVzIGFuZCBl
eGl0cy4KKyAgICAgICAgUG9zdCBhIHRhc2sgdG8gYWN0dWFsbHkgdGVybWluYXRlIHRoZSB3b3Jr
ZXIgb25jZSB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBKUyBmcmFnbWVudCBleGl0cy4KKworICAg
ICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clRocmVhZDo6d29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6
c3RvcCk6CisgICAgICAgIFVzZSBuZXcgZm9yYmlkRXhlY3V0aW9uKFRlcm1pbmF0ZVJ1bm5pbmdT
Y3JpcHQpIHRvIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSB0aGUgSlMuCisKIDIwMTAtMDQtMDcgIERh
dmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZl
ciBIdW50LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250
cm9sbGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5j
cHAKaW5kZXggNWNlYzZkMS4uYWZiMThmNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9q
cy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1dv
cmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC0xMzYsMTUgKzEzNiwxNiBAQCB2b2lkIFdvcmtl
clNjcmlwdENvbnRyb2xsZXI6OnNldEV4Y2VwdGlvbihTY3JpcHRWYWx1ZSBleGNlcHRpb24pCiAg
ICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRXhlYygpLT5zZXRFeGNlcHRpb24oZXhj
ZXB0aW9uLmpzVmFsdWUoKSk7CiB9CiAKLXZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6Zm9y
YmlkRXhlY3V0aW9uKCkKK3ZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6Zm9yYmlkRXhlY3V0
aW9uKEZvcmJpZEV4ZWN1dGlvbk9wdGlvbiBvcHRpb24pCiB7Ci0gICAgLy8gVGhpcyBmdW5jdGlv
biBpcyBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZC4KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG1h
eSBiZSBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZC4KICAgICAvLyBNdXRleCBwcm90ZWN0aW9u
IGZvciBtX2V4ZWN1dGlvbkZvcmJpZGRlbiBpcyBuZWVkZWQgdG8gZ3VhcmFudGVlIHRoYXQgdGhl
IHZhbHVlIGlzIHN5bmNocm9uaXplZCBiZXR3ZWVuIHByb2Nlc3NvcnMsIGJlY2F1c2UKICAgICAv
LyBpZiBpdCB3ZXJlIG5vdCwgdGhlIHdvcmtlciBjb3VsZCByZS1lbnRlciBKU0M6OmV2YWx1YXRl
KCksIGJ1dCB3aXRoIHRpbWVvdXQgYWxyZWFkeSByZXNldC4KICAgICAvLyBJdCBpcyBub3QgY3Jp
dGljYWwgZm9yIFRlcm1pbmF0b3I6Om1fc2hvdWxkVGVybWluYXRlIHRvIGJlIHN5bmNocm9uaXpl
ZCwgd2UganVzdCByZWx5IG9uIGl0IHJlYWNoaW5nIHRoZSB3b3JrZXIgdGhyZWFkJ3MgcHJvY2Vz
c29yIHNvb25lciBvciBsYXRlci4KICAgICBNdXRleExvY2tlciBsb2NrKG1fc2hhcmVkRGF0YU11
dGV4KTsKICAgICBtX2V4ZWN1dGlvbkZvcmJpZGRlbiA9IHRydWU7Ci0gICAgbV9nbG9iYWxEYXRh
LT50ZXJtaW5hdG9yLnRlcm1pbmF0ZVNvb24oKTsKKyAgICBpZiAob3B0aW9uID09IFRlcm1pbmF0
ZVJ1bm5pbmdTY3JpcHQpCisgICAgICAgIG1fZ2xvYmFsRGF0YS0+dGVybWluYXRvci50ZXJtaW5h
dGVTb29uKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgKaW5kZXggYzgyMGNkOS4uMzhjM2MzMCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgKQEAgLTUyLDYg
KzUyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIEpTV29ya2VyQ29udGV4dCog
d29ya2VyQ29udGV4dFdyYXBwZXIoKQogICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9leGVj
dXRpb25Gb3JiaWRkZW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKICAgICAgICAgICAg
IGluaXRTY3JpcHRJZk5lZWRlZCgpOwogICAgICAgICAgICAgcmV0dXJuIG1fd29ya2VyQ29udGV4
dFdyYXBwZXI7CiAgICAgICAgIH0KQEAgLTYxLDcgKzY0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgICAgIHZvaWQgc2V0RXhjZXB0aW9uKFNjcmlwdFZhbHVlKTsKIAotICAgICAgICB2
b2lkIGZvcmJpZEV4ZWN1dGlvbigpOworICAgICAgICBlbnVtIEZvcmJpZEV4ZWN1dGlvbk9wdGlv
biB7IFRlcm1pbmF0ZVJ1bm5pbmdTY3JpcHQsIExldFJ1bm5pbmdTY3JpcHRGaW5pc2ggfTsKKyAg
ICAgICAgdm9pZCBmb3JiaWRFeGVjdXRpb24oRm9yYmlkRXhlY3V0aW9uT3B0aW9uKTsKIAogICAg
ICAgICBKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIHsgcmV0dXJuIG1fZ2xvYmFsRGF0
YS5nZXQoKTsgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlw
dENvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9s
bGVyLmNwcAppbmRleCA1NTk5MjZmLi43ZGIwZDhkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTg2LDEyICs4NiwxMyBAQCBTY3JpcHRW
YWx1ZSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VD
b2RlJiBzb3VyY2VDb2RlLAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgV29ya2VyU2Ny
aXB0Q29udHJvbGxlcjo6Zm9yYmlkRXhlY3V0aW9uKCkKK3ZvaWQgV29ya2VyU2NyaXB0Q29udHJv
bGxlcjo6Zm9yYmlkRXhlY3V0aW9uKEZvcmJpZEV4ZWN1dGlvbk9wdGlvbiBvcHRpb24pCiB7Ci0g
ICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZC4KKyAgICAv
LyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZC4KICAgICBN
dXRleExvY2tlciBsb2NrKG1fc2hhcmVkRGF0YU11dGV4KTsKICAgICBtX2V4ZWN1dGlvbkZvcmJp
ZGRlbiA9IHRydWU7Ci0gICAgdjg6OlY4OjpUZXJtaW5hdGVFeGVjdXRpb24oKTsKKyAgICBpZiAo
b3B0aW9uID09IFRlcm1pbmF0ZVJ1bm5pbmdTY3JpcHQpCisgICAgICAgIHY4OjpWODo6VGVybWlu
YXRlRXhlY3V0aW9uKCk7CiB9CiAKIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6c2V0RXhj
ZXB0aW9uKFNjcmlwdFZhbHVlIGV4Y2VwdGlvbikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3Jr
ZXJTY3JpcHRDb250cm9sbGVyLmgKaW5kZXggYjczZGU1Zi4uNjg3NWUwNiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgKQEAgLTU1LDcgKzU1LDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc2V0RXhjZXB0aW9uKFNjcmlwdFZh
bHVlKTsKIAotICAgICAgICB2b2lkIGZvcmJpZEV4ZWN1dGlvbigpOworICAgICAgICBlbnVtIEZv
cmJpZEV4ZWN1dGlvbk9wdGlvbiB7IFRlcm1pbmF0ZVJ1bm5pbmdTY3JpcHQsIExldFJ1bm5pbmdT
Y3JpcHRGaW5pc2ggfTsKKyAgICAgICAgdm9pZCBmb3JiaWRFeGVjdXRpb24oRm9yYmlkRXhlY3V0
aW9uT3B0aW9uKTsKKwogICAgICAgICAvLyBSZXR1cm5zIFdvcmtlclNjcmlwdENvbnRyb2xsZXIg
Zm9yIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNvbnRleHQuIDAgd2lsbCBiZSByZXR1cm5lZCBp
ZiB0aGUgY3VycmVudCBleGVjdXRpbmcgY29udGV4dCBpcyBub3QgdGhlIHdvcmtlciBjb250ZXh0
LgogICAgICAgICBzdGF0aWMgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlckZvckNv
bnRleHQoKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNv
bnRleHQuY3BwIGIvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuY3BwCmlu
ZGV4IDk3YjdhNjIuLjU0YjViYTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0
ZWRXb3JrZXJDb250ZXh0LmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2Vy
Q29udGV4dC5jcHAKQEAgLTYyLDggKzYyLDYgQEAgdm9pZCBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0
Ojpwb3N0TWVzc2FnZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2EKIAog
dm9pZCBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Ojpwb3N0TWVzc2FnZShQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSogcG9ydHMs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmIChpc0Nsb3NpbmcoKSkKLSAgICAgICAgcmV0
dXJuOwogICAgIC8vIERpc2VudGFuZ2xlIHRoZSBwb3J0IGluIHByZXBhcmF0aW9uIGZvciBzZW5k
aW5nIGl0IHRvIHRoZSByZW1vdGUgY29udGV4dC4KICAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFu
bmVsQXJyYXk+IGNoYW5uZWxzID0gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMocG9ydHMs
IGVjKTsKICAgICBpZiAoZWMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29u
dGV4dC5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKaW5kZXggZDAxZWZl
OC4uN2UwMjg0OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3Bw
CisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcApAQCAtNjAsNiArNjAsMjQg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDbG9zZVdvcmtlckNvbnRleHRUYXNr
IDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzT3duUHRyPENsb3NlV29ya2VyQ29udGV4dFRhc2s+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gbmV3IENsb3NlV29ya2VyQ29udGV4dFRhc2soKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCAqY29udGV4
dCkKKyAgICB7CisgICAgICAgIEFTU0VSVChjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7Cisg
ICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxXb3JrZXJD
b250ZXh0Kj4oY29udGV4dCk7CisgICAgICAgIC8vIE5vdGlmeSBwYXJlbnQgdGhhdCB0aGlzIGNv
bnRleHQgaXMgY2xvc2VkLiBQYXJlbnQgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgV29ya2Vy
VGhyZWFkOjpzdG9wKCkuCisgICAgICAgIHdvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJS
ZXBvcnRpbmdQcm94eSgpLndvcmtlckNvbnRleHRDbG9zZWQoKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgaXNDbGVhbnVwVGFzaygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KK307CisKIFdv
cmtlckNvbnRleHQ6OldvcmtlckNvbnRleHQoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IHVzZXJBZ2VudCwgV29ya2VyVGhyZWFkKiB0aHJlYWQpCiAgICAgOiBtX3VybCh1cmwpCiAgICAg
LCBtX3VzZXJBZ2VudCh1c2VyQWdlbnQpCkBAIC0xMjQsOCArMTQyLDkgQEAgdm9pZCBXb3JrZXJD
b250ZXh0OjpjbG9zZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY2xvc2luZyA9IHRydWU7
Ci0gICAgLy8gTm90aWZ5IHBhcmVudCB0aGF0IHRoaXMgY29udGV4dCBpcyBjbG9zZWQuIFBhcmVu
dCBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBXb3JrZXJUaHJlYWQ6OnN0b3AoKS4KLSAgICB0
aHJlYWQoKS0+d29ya2VyUmVwb3J0aW5nUHJveHkoKS53b3JrZXJDb250ZXh0Q2xvc2VkKCk7Cisg
ICAgLy8gTGV0IGN1cnJlbnQgc2NyaXB0IHJ1biB0byBjb21wbGV0aW9uICBidXQgcHJldmVudCBm
dXR1cmUgc2NyaXB0IGV2YWx1YXRpb25zLgorICAgIG1fc2NyaXB0LT5mb3JiaWRFeGVjdXRpb24o
V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6TGV0UnVubmluZ1NjcmlwdEZpbmlzaCk7CisgICAgcG9z
dFRhc2soQ2xvc2VXb3JrZXJDb250ZXh0VGFzazo6Y3JlYXRlKCkpOwogfQogCiBXb3JrZXJOYXZp
Z2F0b3IqIFdvcmtlckNvbnRleHQ6Om5hdmlnYXRvcigpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJl
YWQuY3BwCmluZGV4IDM4MjNhZDQuLjE2YzViNzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJUaHJlYWQuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3Bw
CkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCogV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQoKQog
ICAgICAgICBpZiAobV9ydW5Mb29wLnRlcm1pbmF0ZWQoKSkgewogICAgICAgICAgICAgLy8gVGhl
IHdvcmtlciB3YXMgdGVybWluYXRlZCBiZWZvcmUgdGhlIHRocmVhZCBoYWQgYSBjaGFuY2UgdG8g
cnVuLiBTaW5jZSB0aGUgY29udGV4dCBkaWRuJ3QgZXhpc3QgeWV0LAogICAgICAgICAgICAgLy8g
Zm9yYmlkRXhlY3V0aW9uKCkgY291bGRuJ3QgYmUgY2FsbGVkIGZyb20gc3RvcCgpLgotICAgICAg
ICAgICBtX3dvcmtlckNvbnRleHQtPnNjcmlwdCgpLT5mb3JiaWRFeGVjdXRpb24oKTsKKyAgICAg
ICAgICAgbV93b3JrZXJDb250ZXh0LT5zY3JpcHQoKS0+Zm9yYmlkRXhlY3V0aW9uKFdvcmtlclNj
cmlwdENvbnRyb2xsZXI6OlRlcm1pbmF0ZVJ1bm5pbmdTY3JpcHQpOwogICAgICAgICB9CiAgICAg
fQogCkBAIC0yMTgsNyArMjE4LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWQ6OnN0b3AoKQogCiAgICAg
Ly8gRW5zdXJlIHRoYXQgdGFza3MgYXJlIGJlaW5nIGhhbmRsZWQgYnkgdGhyZWFkIGV2ZW50IGxv
b3AuIElmIHNjcmlwdCBleGVjdXRpb24gd2VyZW4ndCBmb3JiaWRkZW4sIGEgd2hpbGUoMSkgbG9v
cCBpbiBKUyBjb3VsZCBrZWVwIHRoZSB0aHJlYWQgYWxpdmUgZm9yZXZlci4KICAgICBpZiAobV93
b3JrZXJDb250ZXh0KSB7Ci0gICAgICAgIG1fd29ya2VyQ29udGV4dC0+c2NyaXB0KCktPmZvcmJp
ZEV4ZWN1dGlvbigpOworICAgICAgICBtX3dvcmtlckNvbnRleHQtPnNjcmlwdCgpLT5mb3JiaWRF
eGVjdXRpb24oV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6VGVybWluYXRlUnVubmluZ1NjcmlwdCk7
CiAKICAgICAvLyBGSVhNRTogUnVkZWx5IGtpbGxpbmcgdGhlIHRocmVhZCB3b24ndCB3b3JrIHdo
ZW4gd2UgYWxsb3cgbmVzdGVkIHdvcmtlcnMsIGJlY2F1c2UgdGhleSB3aWxsIHRyeSB0byBwb3N0
IG5vdGlmaWNhdGlvbnMgb2YgdGhlaXIgZGVzdHJ1Y3Rpb24uCiAgICAgLy8gVGhpcyBjYW4gbGlr
ZWx5IHVzZSB0aGUgc2FtZSBtZWNoYW5pc20gYXMgdXNlZCBmb3IgZGF0YWJhc2VzIGFib3ZlLgo=
</data>
<flag name="review"
          id="36520"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="36521"
          type_id="3"
          status="-"
          setter="dimich"
    />
          </attachment>
      

    </bug>

</bugzilla>