<?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>25435</bug_id>
          
          <creation_ts>2009-04-27 15:54:08 -0700</creation_ts>
          <short_desc>Dedicated workers do not support sending MessagePorts in messages</short_desc>
          <delta_ts>2009-06-30 10:33:10 -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>Mac</rep_platform>
          <op_sys>OS X 10.5</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrew Wilson">atwilson</reporter>
          <assigned_to name="Andrew Wilson">atwilson</assigned_to>
          <cc>ap</cc>
    
    <cc>dimich</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>119040</commentid>
    <comment_count>0</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-04-27 15:54:08 -0700</bug_when>
    <thetext>Worker.postMessage() and WorkerContext.postMessage() should take an optional second argument that is a MessagePort (actually, the latest spec has changed this to be an array of MessagePorts, but I&apos;ll file a separate bug for that).

Implementing this is the first step towards SharedWorkers as it lets us shake out any threading issues in the MessagePort implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119635</commentid>
    <comment_count>1</comment_count>
      <attachid>29947</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-05-01 15:00:59 -0700</bug_when>
    <thetext>Created attachment 29947
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122606</commentid>
    <comment_count>2</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-05-22 01:26:11 -0700</bug_when>
    <thetext>How does this patch handle cross-thread GC of message ports?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122656</commentid>
    <comment_count>3</comment_count>
      <attachid>29947</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-22 07:18:03 -0700</bug_when>
    <thetext>Comment on attachment 29947
proposed patch

Is this safe/correct?  args.size() &lt; 1?
 88     String message = args.at(exec, 0).toString(exec);

Sad that JSWorker and JSWorkerContext can&apos;t share more code...

style:
7     if (proxy) {
 58         context = proxy-&gt;workerContext();
 59     } else {


We eventually need to write a throwOrReturn(ec, value) helper function to git rid of this idiom:
67     if (ec)
 68         return throwError(ec);
 69 
 70     return v8::Undefined();

return throwOrReturn(ec, v8::Undefined())

Or better yet, a special case for there of:

return throwOrReturnUndefined(ec);

static v8::Handle&lt;Value&gt; throwOrReturn(ExceptionCode ec, v8::Handle&lt;Value&gt; value)
{
   if (ec)
       return throwError(ec);
   return value;
}

that would clean up many of these bindings think.  Even just using it in these two new places might be worth the win :)

We only name arguments when the names provide clarity beyond the typename:
 83         void postMessage(const String&amp; message, MessagePort* port, ExceptionCode&amp;);
 84         void postMessage(const String&amp; message, ExceptionCode&amp; ec);

again:
 56         virtual void postMessageToWorkerContext(const String&amp;, MessagePort*, ExceptionCode&amp; ec) = 0;

Overall this looks sane to me, but I&apos;m not the right reviewer here.  Alexey is your man I think.

r- for the style issues.  Re-post and Alexey can review for content.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122687</commentid>
    <comment_count>4</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-05-22 10:21:35 -0700</bug_when>
    <thetext>I&apos;ll clean up the style changes that Eric mentioned.

As Maciej points out, this patch does not address the cross-thread GC issues, and it also does not properly copy the MessagePort to the destination heap.

I&apos;ll revisit this patch once we&apos;ve resolved some of the spec issues around MessagePorts and GC - it&apos;s possible that this API will be removed from HTML5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128355</commentid>
    <comment_count>5</comment_count>
      <attachid>31895</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-06-25 18:24:35 -0700</bug_when>
    <thetext>Created attachment 31895
revised patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128902</commentid>
    <comment_count>6</comment_count>
      <attachid>31895</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-29 15:20:50 -0700</bug_when>
    <thetext>Comment on attachment 31895
revised patch

Just a few issues to address.



&gt; diff --git a/LayoutTests/fast/workers/worker-cloneport.html-disabled b/LayoutTests/fast/workers/worker-cloneport.html-disabled

&gt; +worker.postMessage(&quot;postBack &quot; + numMessages, channel.port1);
&gt; +
&gt; +// Test posting back 50000 messages, make sure ordering is fine

Nice to add &quot;.&quot;

&gt; +worker.onmessage = function(evt) {
&gt; +    if (evt.data == &quot;postBackDone&quot;) {
&gt; +       stopCloning = true;

indent off.

&gt; +// Keep cloning the passed port until we&apos;re told to stop

Nice to add &quot;.&quot;


&gt; +        if (numClones &lt; 1000) {
&gt; +            // If we didn&apos;t clone at least 1000 times, then there&apos;s something amiss

Nice to add &quot;.&quot;

This seems timing sensitive.  I guess you&apos;re relying on a 1:50 ratio so it shouldn&apos;t be too timing sensitive but I don&apos;t really see why an implementation that did 50,000 messages of the other messages before 1000 of these would be wrong.


&gt; +        // Make sure the messages arrived in order

Nice to add &quot;.&quot;

&gt; +        var timer = setTimeout(function() {
&gt; +            log(&quot;FAILURE: Received: &quot; + itemNum + &quot; events - expected: &quot; + numMessages);
&gt; +        }, 1000);

How fast does the test run? (How close do you come to this time out and will slower machines hit this time out?)
 

&gt; +            if (done) {
&gt; +               gc();
&gt; +               setTimeout(reportDone, 100);  // Make sure no unexpected events come in

Nice to add &quot;.&quot;

Also these are indented 3 spaces instead of 4.  However, it has been argued that inconsistency in formatting js code helps ensure that the js parser can handle these different formats, so I leave it up to you.




&gt; diff --git a/WebCore/bindings/v8/custom/V8MessageChannelConstructor.cpp b/WebCore/bindings/v8/custom/V8MessageChannelConstructor.cpp
&gt;  
&gt;  #include &quot;Document.h&quot;
&gt;  #include &quot;Frame.h&quot;
&gt; +#include &quot;WorkerContext.h&quot;
&gt;  
&gt;  #include &quot;V8Binding.h&quot;
&gt;  #include &quot;V8Proxy.h&quot;
&gt; +#include &quot;WorkerContextExecutionProxy.h&quot;

These headers aren&apos;t ordered correctly.  Sort alphabetically.
  



&gt; diff --git a/WebCore/platform/CrossThreadCopier.h b/WebCore/platform/CrossThreadCopier.h
&gt; +    template&lt;typename T&gt; struct CrossThreadCopierBase&lt;false, PassOwnPtr&lt;T&gt; &gt; {
&gt; +        typedef PassOwnPtr&lt;T&gt; Type;
&gt; +        static Type copy(const PassOwnPtr&lt;T&gt;&amp; refPtr)
&gt; +        {
&gt; +            return PassOwnPtr&lt;T&gt;(static_cast&lt;T*&gt;(refPtr.release()));
&gt; +        }

s/refPtr/ownPtr/



&gt; diff --git a/WebCore/workers/Worker.idl b/WebCore/workers/Worker.idl
&gt; +        void postMessage(in DOMString message, in [Optional] MessagePort messagePort)
&gt; +            raises(DOMException);

Same question as WorkerContext.idl about this extra parameter (see below).


&gt; diff --git a/WebCore/workers/WorkerContext.idl b/WebCore/workers/WorkerContext.idl

&gt; +        void postMessage(in DOMString message, in [Optional] MessagePort messagePort)
&gt; +            raises(DOMException);

Should MessagePort be allowed to be passed in if !ENABLE(CHANNEL_MESSAGING) ?

&gt;  
&gt; +#if ENABLE_CHANNEL_MESSAGING

Can this be
  #if ENABLE(CHANNEL_MESSAGING)
?

&gt; +        attribute [JSCCustomGetter] MessageChannelConstructor MessageChannel;
&gt; +#endif


&gt; diff --git a/WebCore/workers/WorkerObjectProxy.h b/WebCore/workers/WorkerObjectProxy.h
&gt; +#include &lt;wtf/PassOwnPtr.h&gt;


The &lt;&gt; come after the &quot;&quot; headers.

&gt;  #include &quot;Console.h&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128911</commentid>
    <comment_count>7</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-06-29 16:13:03 -0700</bug_when>
    <thetext>
&gt;This seems timing sensitive.  I guess you&apos;re relying on a 1:50 ratio so it
&gt;shouldn&apos;t be too timing sensitive but I don&apos;t really see why an implementation
&gt;that did 50,000 messages of the other messages before 1000 of these would be
&gt;wrong.
The point of this test is to check for race conditions/lost/out-of-order messages when posting messages to a queue while it is in the middle of cloning. I&apos;m just trying to make sure that enough iterations of both loops happen to shake out potential race conditions. I chose a number that was sufficiently conservative that it shouldn&apos;t be a problem - it&apos;s mainly a test to make sure that someone doesn&apos;t accidentally break my test in silent ways.


&gt;How fast does the test run? (How close do you come to this time out and will
&gt;slower machines hit this time out?)

This timeout should never be hit - I could&apos;ve just set a timeout of 10 msecs. The point is to queue up a callback that happens after the queue has been emptied of messages. I&apos;ll see if I can clarify this code.


&gt;Also these are indented 3 spaces instead of 4.  However, it has been argued
&gt;that inconsistency in formatting js code helps ensure that the js parser can
&gt;handle these different formats, so I leave it up to you.

I&apos;ll fix this, since it was unintentional.



&gt; diff --git a/WebCore/bindings/v8/custom/V8MessageChannelConstructor.cpp b/WebCore/bindings/v8/custom/V8MessageChannelConstructor.cpp
&gt;  
&gt;  #include &quot;Document.h&quot;
&gt;  #include &quot;Frame.h&quot;
&gt; +#include &quot;WorkerContext.h&quot;
&gt;  
&gt;  #include &quot;V8Binding.h&quot;
&gt;  #include &quot;V8Proxy.h&quot;
&gt; +#include &quot;WorkerContextExecutionProxy.h&quot;

These headers aren&apos;t ordered correctly.  Sort alphabetically.






&gt;&gt; +        void postMessage(in DOMString message, in [Optional] MessagePort messagePort)
&gt;&gt; +            raises(DOMException);
&gt;
&gt;Should MessagePort be allowed to be passed in if !ENABLE(CHANNEL_MESSAGING) ?

You can&apos;t create MessagePorts if !ENABLE(CHANNEL_MESSAGING) so no check is needed.

&gt;  
&gt;&gt; +#if ENABLE_CHANNEL_MESSAGING
&gt;
&gt;Can this be
&gt;  #if ENABLE(CHANNEL_MESSAGING)

Apparently not - the ENABLE macro is not available to IDL files, per a comment in the ChangeLog from ap@webkit

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128941</commentid>
    <comment_count>8</comment_count>
      <attachid>32029</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-06-29 18:19:31 -0700</bug_when>
    <thetext>Created attachment 32029
Patch addressing Levin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129090</commentid>
    <comment_count>9</comment_count>
      <attachid>32074</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-06-30 10:03:36 -0700</bug_when>
    <thetext>Created attachment 32074
Patch with merge error fixed.

This fixes the merge error Levin ran into while trying to land this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129104</commentid>
    <comment_count>10</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-30 10:33:10 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/45381
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29947</attachid>
            <date>2009-05-01 15:00:59 -0700</date>
            <delta_ts>2009-06-25 18:24:35 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>25435-2.txt</filename>
            <type>text/plain</type>
            <size>28905</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQyODc5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMDktMDQtMjYgIERyZXcgV2ls
c29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAgICAgICBVcGRhdGVkIHRoZSB4Y29kZSBw
cm9qZWN0IGZpbGVzIHRvIHBhc3MgdGhyb3VnaCB0aGUgCisgICAgICAgIEVOQUJMRV9DSEFOTkVM
X01FU1NBR0lORyBmbGFnIHJhdGhlciB0aGFuIGV4cGxpY2l0bHkgc2V0dGluZworICAgICAgICBp
dCB0byBvZmYuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2Nv
bmZpZzoKKwogMjAwOS0wNC0yNSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoQnVpbGRmaXgpLgpJbmRleDogSmF2YVNjcmlwdENv
cmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcJKHJl
dmlzaW9uIDQyODc2KQorKysgSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURl
ZmluZXMueGNjb25maWcJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIC8vIFNldCBh
bnkgRU5BQkxFX0ZFQVRVUkVfTkFNRSBtYWNybyB0byBhbiBlbXB0eSBzdHJpbmcgdG8gZGlzYWJs
ZSB0aGF0IGZlYXR1cmUuCiAKIEVOQUJMRV8zRF9SRU5ERVJJTkcgPSA7Ci1FTkFCTEVfQ0hBTk5F
TF9NRVNTQUdJTkcgPSA7CitFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcgPSBFTkFCTEVfQ0hBTk5F
TF9NRVNTQUdJTkc7CiBFTkFCTEVfREFUQUJBU0UgPSBFTkFCTEVfREFUQUJBU0U7CiBFTkFCTEVf
RE9NX1NUT1JBR0UgPSBFTkFCTEVfRE9NX1NUT1JBR0U7CiBFTkFCTEVfR0VPTE9DQVRJT04gPSA7
CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gNDI4NzkpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDQxIEBACisyMDA5LTA0LTI2ICBEcmV3IFdpbHNvbiAgPGF0d2lsc29uQGdvb2ds
ZS5jb20+CisKKyAgICAgICAgQWRkZWQgTWVzc2FnZVBvcnQgbWVzc2FnaW5nIHRvIGRlZGljYXRl
ZCBXb3JrZXJzIHZpYSBXb3JrZXIucG9zdE1lc3NhZ2UobXNnLCBwb3J0KSBhbmQgV29ya2VyQ29u
dGV4dC5wb3N0TWVzc2FnZShtc2csIHBvcnQpLgorICAgICAgICBBbHNvIGV4cG9zZWQgTWVzc2Fn
ZUNoYW5uZWwgY29uc3RydWN0b3IgaW4gV29ya2VyQ29udGV4dC4KKyAgICAgICAgT25seSBlbmFi
bGVkIHdoZW4gQ0hBTk5FTF9NRVNTQUdJTkcgaXMgZW5hYmxlZC4KKworICAgICAgICAqIENvbmZp
Z3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckNv
bnRleHQ6Om1lc3NhZ2VDaGFubmVsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlcjo6cG9zdE1lc3NhZ2UpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FM
TEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXI6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
cjo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlci5oOgorICAgICAg
ICAqIHdvcmtlcnMvV29ya2VyLmlkbDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6cG9zdE1lc3NhZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAg
KiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRl
eHQuaWRsOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dFByb3h5Lmg6CisgICAgICAg
ICogd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
ZXNzYWdlV29ya2VyQ29udGV4dFRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNz
YWdlV29ya2VyQ29udGV4dFRhc2s6Ok1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzayk6CisgICAgICAg
IChXZWJDb3JlOjpNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lc3NhZ2VXb3JrZXJUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVzc2FnZVdvcmtlclRhc2s6Ok1lc3NhZ2VXb3JrZXJUYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lc3NhZ2VXb3JrZXJUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRl
eHQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuaDoKKyAgICAgICAg
KiB3b3JrZXJzL1dvcmtlck9iamVjdFByb3h5Lmg6CisKIDIwMDktMDQtMjYgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFN1Z2dlc3RlZCBieSBEYXJpbiBGaXNoZXIu
CkluZGV4OiBXZWJDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25m
aWcJKHJldmlzaW9uIDQyODc2KQorKysgV2ViQ29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVm
aW5lcy54Y2NvbmZpZwkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogLy8gU2V0IGFu
eSBFTkFCTEVfRkVBVFVSRV9OQU1FIG1hY3JvIHRvIGFuIGVtcHR5IHN0cmluZyB0byBkaXNhYmxl
IHRoYXQgZmVhdHVyZS4KIAogRU5BQkxFXzNEX1JFTkRFUklORyA9IDsKLUVOQUJMRV9DSEFOTkVM
X01FU1NBR0lORyA9IDsKK0VOQUJMRV9DSEFOTkVMX01FU1NBR0lORyA9IEVOQUJMRV9DSEFOTkVM
X01FU1NBR0lORzsKIEVOQUJMRV9EQVRBQkFTRSA9IEVOQUJMRV9EQVRBQkFTRTsKIEVOQUJMRV9E
T01fU1RPUkFHRSA9IEVOQUJMRV9ET01fU1RPUkFHRTsKIEVOQUJMRV9HRU9MT0NBVElPTiA9IDsK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDQyODc2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCwxMCBAQAogI2luY2x1ZGUgIkpT
V29ya2VyQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAi
SlNET01HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKKyNpbmNs
dWRlICJKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU01lc3NhZ2VQ
b3J0LmgiCiAjaW5jbHVkZSAiSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiU2NoZWR1bGVkQWN0aW9uLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgpAQCAtODAs
NiArODMsMjAgQEAgSlNWYWx1ZVB0ciBKU1dvcmtlckNvbnRleHQ6OnhtbEh0dHBSZXF1ZQogICAg
IHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3I+KGV4
ZWMsIHRoaXMpOwogfQogCitKU1ZhbHVlUHRyIEpTV29ya2VyQ29udGV4dDo6cG9zdE1lc3NhZ2Uo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIFN0cmluZyBtZXNz
YWdlID0gYXJncy5hdChleGVjLCAwKS50b1N0cmluZyhleGVjKTsKKworICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBNZXNz
YWdlUG9ydCogbWVzc2FnZVBvcnQgPSAoYXJncy5zaXplKCkgPCAyKSA/IDAgOiB0b01lc3NhZ2VQ
b3J0KGFyZ3MuYXQoZXhlYywgMSkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGlt
cGwoKS0+cG9zdE1lc3NhZ2UobWVzc2FnZSwgbWVzc2FnZVBvcnQsIGVjKTsKKyAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCiBKU1Zh
bHVlUHRyIEpTV29ya2VyQ29udGV4dDo6aW1wb3J0U2NyaXB0cyhFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKCFhcmdzLnNpemUoKSkKQEAgLTE1Nyw2ICsx
NzQsMTQgQEAgSlNWYWx1ZVB0ciBKU1dvcmtlckNvbnRleHQ6OmNsZWFySW50ZXJ2YQogICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQogCisKKyNpZiBFTkFCTEUoQ0hBTk5FTF9NRVNTQUdJTkcp
CitKU1ZhbHVlUHRyIEpTV29ya2VyQ29udGV4dDo6bWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU01lc3NhZ2VDaGFu
bmVsQ29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDQyODc2KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKIAogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNFdmVudExp
c3RlbmVyLmgiCisjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIldvcmtlci5o
IgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtNTMsNiArNTQsMjAgQEAgdm9pZCBKU1dvcmtl
cjo6bWFyaygpCiAgICAgfQogfQogCitKU1ZhbHVlUHRyIEpTV29ya2VyOjpwb3N0TWVzc2FnZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgU3RyaW5nIG1lc3Nh
Z2UgPSBhcmdzLmF0KGV4ZWMsIDApLnRvU3RyaW5nKGV4ZWMpOworCisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIE1lc3Nh
Z2VQb3J0KiBtZXNzYWdlUG9ydCA9IChhcmdzLnNpemUoKSA8IDIpID8gMCA6IHRvTWVzc2FnZVBv
cnQoYXJncy5hdChleGVjLCAxKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaW1w
bCgpLT5wb3N0TWVzc2FnZShtZXNzYWdlLCBtZXNzYWdlUG9ydCwgZWMpOworICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKIEpTVmFs
dWVQdHIgSlNXb3JrZXI6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0
b0pTRE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdl
Q2hhbm5lbENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNDI4NzYpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw5ICszMywxMSBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKIAogI2luY2x1ZGUgIlY4Qmlu
ZGluZy5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkuaCIKIAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNDksMTYgKzUx
LDIxIEBAIENBTExCQUNLX0ZVTkNfREVDTChNZXNzYWdlQ2hhbm5lbENvbnN0cnUKICAgICBpZiAo
IWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJET00g
b2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iKTsKIAot
ICAgIC8vIEdldCB0aGUgZG9jdW1lbnQuCi0gICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0
cmlldmVGcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAg
ICAvLyBHZXQgdGhlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgKFdvcmtlckNvbnRleHQgb3IgRG9j
dW1lbnQpCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IDA7CisgICAgV29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBwcm94eSA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eTo6cmV0cmlldmUoKTsKKyAgICBpZiAocHJveHkpIHsKKyAgICAgICAgY29udGV4dCA9IHBy
b3h5LT53b3JrZXJDb250ZXh0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgRnJhbWUqIGZyYW1l
ID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZSgpOworICAgICAgICBpZiAoIWZyYW1lKQorICAgICAg
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAgY29udGV4dCA9IGZyYW1lLT5k
b2N1bWVudCgpOworICAgIH0KIAogICAgIC8vIE5vdGU6IGl0J3MgT0sgdG8gbGV0IHRoaXMgUmVm
UHRyIGdvIG91dCBvZiBzY29wZSBiZWNhdXNlIHdlIGFsc28gY2FsbAogICAgIC8vIFNldERPTVdy
YXBwZXIoKSwgd2hpY2ggZWZmZWN0aXZlbHkgaG9sZHMgYSByZWZlcmVuY2UgdG8gb2JqLgotICAg
IFJlZlB0cjxNZXNzYWdlQ2hhbm5lbD4gb2JqID0gTWVzc2FnZUNoYW5uZWw6OmNyZWF0ZShkb2N1
bWVudCk7CisgICAgUmVmUHRyPE1lc3NhZ2VDaGFubmVsPiBvYmogPSBNZXNzYWdlQ2hhbm5lbDo6
Y3JlYXRlKGNvbnRleHQpOwogCiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG1lc3NhZ2VDaGFu
bmVsID0gYXJncy5Ib2xkZXIoKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiA0Mjg3NikKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDI0IEBAIEFDQ0VTU09SX0dFVFRFUihXb3JrZXJDb250
ZXh0U2VsZikKICAgICByZXR1cm4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpXb3JrZXJD
b250ZXh0VG9WOE9iamVjdCh3b3JrZXJDb250ZXh0KTsKIH0KIAorQ0FMTEJBQ0tfRlVOQ19ERUNM
KFdvcmtlckNvbnRleHRQb3N0TWVzc2FnZSkKK3sKKyAgICBJTkNfU1RBVFMoTCJET00uV29ya2Vy
Q29udGV4dC5wb3N0TWVzc2FnZSgpIik7CisgICAgV29ya2VyQ29udGV4dCogY29udGV4dCA9IFY4
UHJveHk6OlRvTmF0aXZlT2JqZWN0PFdvcmtlckNvbnRleHQ+KFY4Q2xhc3NJbmRleDo6V09SS0VS
Q09OVEVYVCwgYXJncy5Ib2xkZXIoKSk7CisKKyAgICBTdHJpbmcgbWVzc2FnZSA9IHZhbHVlVG9T
dHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbMF0pOworICAgIC8vIEhhbmRsZSBvcHRpb25hbCBzZWNv
bmQgbWVzc2FnZVBvcnQgYXJndW1lbnQKKyAgICBNZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQgPSAw
OworICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMSAmJiBWOFByb3h5OjpJc1dyYXBwZXJPZlR5cGUo
YXJnc1sxXSwgVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCkpCisgICAgICAgIG1lc3NhZ2VQb3J0
ID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVT
U0FHRVBPUlQsIGFyZ3NbMV0pOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGNvbnRl
eHQtPnBvc3RNZXNzYWdlKG1lc3NhZ2UsIG1lc3NhZ2VQb3J0LCBlYyk7CisgICAgaWYgKGVjKQor
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7CisKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOworfQorCiBBQ0NFU1NPUl9HRVRURVIoV29ya2VyQ29udGV4dE9ubWVzc2FnZSkKIHsKICAg
ICBJTkNfU1RBVFMoTCJET00uV29ya2VyQ29udGV4dC5vbm1lc3NhZ2UuX2dldCIpOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcAkocmV2aXNp
b24gNDI4NzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDI0IEBAIENBTExCQUNLX0ZVTkNfREVDTChX
b3JrZXJDb25zdHJ1Y3RvcikKICAgICByZXR1cm4gd3JhcHBlck9iamVjdDsKIH0KIAorQ0FMTEJB
Q0tfRlVOQ19ERUNMKFdvcmtlclBvc3RNZXNzYWdlKQoreworICAgIElOQ19TVEFUUyhMIkRPTS5X
b3JrZXIucG9zdE1lc3NhZ2UoKSIpOworICAgIFdvcmtlciogd29ya2VyID0gVjhQcm94eTo6VG9O
YXRpdmVPYmplY3Q8V29ya2VyPihWOENsYXNzSW5kZXg6OldPUktFUiwgYXJncy5Ib2xkZXIoKSk7
CisKKyAgICBTdHJpbmcgbWVzc2FnZSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3Nb
MF0pOworICAgIC8vIEhhbmRsZSBvcHRpb25hbCBzZWNvbmQgbWVzc2FnZVBvcnQgYXJndW1lbnQK
KyAgICBNZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQgPSAwOworICAgIGlmIChhcmdzLkxlbmd0aCgp
ID4gMSAmJiBWOFByb3h5OjpJc1dyYXBwZXJPZlR5cGUoYXJnc1sxXSwgVjhDbGFzc0luZGV4OjpN
RVNTQUdFUE9SVCkpCisgICAgICAgIG1lc3NhZ2VQb3J0ID0gVjhQcm94eTo6VG9OYXRpdmVPYmpl
Y3Q8TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQsIGFyZ3NbMV0pOworICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHdvcmtlci0+cG9zdE1lc3NhZ2UobWVzc2FnZSwg
bWVzc2FnZVBvcnQsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGVjKTsKKworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKIEFDQ0VTU09SX0dFVFRF
UihXb3JrZXJPbm1lc3NhZ2UpCiB7CiAgICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlci5vbm1lc3Nh
Z2UuX2dldCIpOwpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAJKHJldmlzaW9uIDQyODc2KQorKysgV2ViQ29y
ZS93b3JrZXJzL1dvcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDkgKzg2LDkgQEAgV29y
a2VyOjp+V29ya2VyKCkKICAgICBtX2NvbnRleHRQcm94eS0+d29ya2VyT2JqZWN0RGVzdHJveWVk
KCk7CiB9CiAKLXZvaWQgV29ya2VyOjpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Cit2b2lkIFdvcmtlcjo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBNZXNzYWdl
UG9ydCogbWVzc2FnZVBvcnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIG1fY29udGV4dFBy
b3h5LT5wb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChtZXNzYWdlKTsKKyAgICBtX2NvbnRleHRQ
cm94eS0+cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQobWVzc2FnZSwgbWVzc2FnZVBvcnQsIGVj
KTsKIH0KIAogdm9pZCBXb3JrZXI6OnRlcm1pbmF0ZSgpCkBAIC0xOTIsOSArMTkyLDkgQEAgYm9v
bCBXb3JrZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdgogICAgIHJldHVybiAhZXZlbnQt
PmRlZmF1bHRQcmV2ZW50ZWQoKTsKIH0KIAotdm9pZCBXb3JrZXI6OmRpc3BhdGNoTWVzc2FnZShj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFdvcmtlcjo6ZGlzcGF0Y2hNZXNzYWdlKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydCkKIHsKLSAgICBS
ZWZQdHI8RXZlbnQ+IGV2dCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKG1lc3NhZ2UsICIiLCAiIiwg
MCwgMCk7CisgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShtZXNz
YWdlLCAiIiwgIiIsIDAsIHBvcnQpOwogCiAgICAgaWYgKG1fb25NZXNzYWdlTGlzdGVuZXIuZ2V0
KCkpIHsKICAgICAgICAgZXZ0LT5zZXRUYXJnZXQodGhpcyk7CkluZGV4OiBXZWJDb3JlL3dvcmtl
cnMvV29ya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oCShyZXZp
c2lvbiA0Mjg3NikKKysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNTgsMTEgKzU4LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFs
IFdvcmtlciogdG9Xb3JrZXIoKSB7IHJldHVybiB0aGlzOyB9CiAKLSAgICAgICAgdm9pZCBwb3N0
TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgICAgICB2b2lkIHBvc3RNZXNzYWdl
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgTWVzc2FnZVBvcnQqLCBFeGNlcHRpb25Db2RlJik7CiAK
ICAgICAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKIAotICAgICAgICB2b2lkIGRpc3BhdGNoTWVzc2Fn
ZShjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4pOwogICAgICAgICB2b2lkIGRpc3BhdGNoRXJy
b3JFdmVudCgpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7Cklu
ZGV4OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dv
cmtlcnMvV29ya2VyLmlkbAkocmV2aXNpb24gNDI4NzYpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29y
a2VyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOCBAQCBtb2R1bGUgdGhyZWFkcyB7
CiAKICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKICAgICAgICAgYXR0
cmlidXRlIEV2ZW50TGlzdGVuZXIgb25tZXNzYWdlOwotICAgICAgICB2b2lkIHBvc3RNZXNzYWdl
KGluIERPTVN0cmluZyBtZXNzYWdlKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBwb3N0TWVzc2Fn
ZShpbiBET01TdHJpbmcgbWVzc2FnZSwgaW4gW09wdGlvbmFsXSBNZXNzYWdlUG9ydCBtZXNzYWdl
UG9ydCkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogCiAgICAgICAgIHZvaWQg
dGVybWluYXRlKCk7CiAKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAJKHJldmlzaW9u
IDQyODc2KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDAsOSArMTQwLDE0IEBAIHZvaWQgV29ya2VyQ29udGV4dDo6c2NyaXB0SW1wb3J0
ZWQodW5zaWcKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFdvcmtlckNvbnRleHQ6
OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgV29ya2VyQ29udGV4dDo6
cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
LSAgICBtX3RocmVhZC0+d29ya2VyT2JqZWN0UHJveHkoKS0+cG9zdE1lc3NhZ2VUb1dvcmtlck9i
amVjdChtZXNzYWdlKTsKKyAgICBwb3N0TWVzc2FnZShtZXNzYWdlLCAwLCBlYyk7Cit9CisKK3Zv
aWQgV29ya2VyQ29udGV4dDo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBNZXNz
YWdlUG9ydCogcG9ydCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgbV90aHJlYWQtPndvcmtl
ck9iamVjdFByb3h5KCktPnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QobWVzc2FnZSwgcG9ydCwg
ZWMpOwogfQogCiB2b2lkIFdvcmtlckNvbnRleHQ6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0
ZW5lciwgYm9vbCkKQEAgLTIxMSw5ICsyMTYsOSBAQCB2b2lkIFdvcmtlckNvbnRleHQ6OnJlbW92
ZVRpbWVvdXQoaW50IHRpCiAgICAgRE9NVGltZXI6OnJlbW92ZUJ5SWQoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLCB0aW1lb3V0SWQpOwogfQogCi12b2lkIFdvcmtlckNvbnRleHQ6OmRpc3BhdGNo
TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFdvcmtlckNvbnRleHQ6OmRpc3Bh
dGNoTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+
IHBvcnQpCiB7Ci0gICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZSht
ZXNzYWdlLCAiIiwgIiIsIDAsIDApOworICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2
ZW50OjpjcmVhdGUobWVzc2FnZSwgIiIsICIiLCAwLCBwb3J0KTsKIAogICAgIGlmIChtX29ubWVz
c2FnZUxpc3RlbmVyLmdldCgpKSB7CiAgICAgICAgIGV2dC0+c2V0VGFyZ2V0KHRoaXMpOwpJbmRl
eDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCShyZXZpc2lvbiA0Mjg3NikKKysrIFdlYkNvcmUvd29y
a2Vycy9Xb3JrZXJDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEzICs4MCwxNSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCBXb3JrZXJDb250ZXh0KiB0b1dv
cmtlckNvbnRleHQoKSB7IHJldHVybiB0aGlzOyB9CiAKLSAgICAgICAgdm9pZCBwb3N0TWVzc2Fn
ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgTWVzc2FnZVBvcnQqIHBvcnQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNv
ZGUmIGVjKTsKKwogICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2soUGFzc1JlZlB0cjxUYXNr
Pik7IC8vIEV4ZWN1dGVzIHRoZSB0YXNrIG9uIGNvbnRleHQncyB0aHJlYWQgYXN5bmNocm9ub3Vz
bHkuCiAKICAgICAgICAgaW50IGluc3RhbGxUaW1lb3V0KFNjaGVkdWxlZEFjdGlvbiosIGludCB0
aW1lb3V0LCBib29sIHNpbmdsZVNob3QpOwogICAgICAgICB2b2lkIHJlbW92ZVRpbWVvdXQoaW50
IHRpbWVvdXRJZCk7CiAKLSAgICAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3RyaW5n
Jik7CisgICAgICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlKGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQ
dHI8TWVzc2FnZVBvcnQ+KTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5l
cihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiwgYm9vbCB1c2VDYXB0dXJlKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlz
dGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29s
IHVzZUNhcHR1cmUpOwpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAkocmV2aXNpb24g
NDI4NzYpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDcgKzM5LDggQEAgbW9kdWxlIHRocmVhZHMgewogI2VuZGlmCiAKICAgICAgICAg
YXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25tZXNzYWdlOwotICAgICAgICB2b2lkIHBvc3RNZXNz
YWdlKGluIERPTVN0cmluZyBtZXNzYWdlKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBwb3N0TWVz
c2FnZShpbiBET01TdHJpbmcgbWVzc2FnZSwgaW4gW09wdGlvbmFsXSBNZXNzYWdlUG9ydCBtZXNz
YWdlUG9ydCkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICBbQ3Vz
dG9tXSB2b2lkIGltcG9ydFNjcmlwdHMoLyogdXJscyAqLyk7CiAKICAgICAgICAgYXR0cmlidXRl
IFtSZXBsYWNlYWJsZV0gV29ya2VyTG9jYXRpb24gbG9jYXRpb247CkBAIC00OCw2ICs0OSw5IEBA
IG1vZHVsZSB0aHJlYWRzIHsKICAgICAgICAgYXR0cmlidXRlIE1lc3NhZ2VFdmVudENvbnN0cnVj
dG9yIE1lc3NhZ2VFdmVudDsKICAgICAgICAgYXR0cmlidXRlIFdvcmtlckxvY2F0aW9uQ29uc3Ry
dWN0b3IgV29ya2VyTG9jYXRpb247CiAKKyNpZiBFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcKKyAg
ICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXJdIE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0
b3IgTWVzc2FnZUNoYW5uZWw7CisjZW5kaWYKICAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21H
ZXR0ZXJdIFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IgWE1MSHR0cFJlcXVlc3Q7CiAKICAgICAg
ICAgLy8gVGltZXJzCkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dFByb3h5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHRQcm94eS5oCShyZXZp
c2lvbiA0Mjg3NikKKysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0UHJveHkuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsOSArMzYsMTIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IGNsYXNzIEtVUkw7CisgICAgY2xhc3MgTWVzc2FnZVBvcnQ7CiAgICAgY2xhc3MgU3RyaW5nOwog
ICAgIGNsYXNzIFdvcmtlcjsKIAorICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKICAg
ICAvLyBBIHByb3h5IHRvIHRhbGsgdG8gdGhlIHdvcmtlciBjb250ZXh0LgogICAgIGNsYXNzIFdv
cmtlckNvbnRleHRQcm94eSB7CiAgICAgcHVibGljOgpAQCAtNTAsNyArNTMsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZVdvcmtlckNvbnRl
eHQoKSA9IDA7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJDb250
ZXh0KGNvbnN0IFN0cmluZyYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdl
VG9Xb3JrZXJDb250ZXh0KGNvbnN0IFN0cmluZyYsIE1lc3NhZ2VQb3J0KiwgRXhjZXB0aW9uQ29k
ZSYgZWMpID0gMDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3QgPSAwOwogCkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5j
cHAJKHJldmlzaW9uIDQyODc2KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1By
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTQgKzQ0LDE1IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrIDogcHVibGljIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1l
c3NhZ2VXb3JrZXJDb250ZXh0VGFzaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s+IGNyZWF0ZShjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzayhtZXNz
YWdlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZVdvcmtlckNvbnRleHRU
YXNrKG1lc3NhZ2UsIHBvcnQpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgTWVzc2FnZVdvcmtl
ckNvbnRleHRUYXNrKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKKyAgICBNZXNzYWdlV29ya2VyQ29u
dGV4dFRhc2soY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBw
b3J0KQogICAgICAgICA6IG1fbWVzc2FnZShtZXNzYWdlLmNvcHkoKSkKKyAgICAgICAgLCBtX21l
c3NhZ2VQb3J0KHBvcnQpCiAgICAgewogICAgIH0KIApAQCAtNTksNDEgKzYwLDQ4IEBAIHByaXZh
dGU6CiAgICAgewogICAgICAgICBBU1NFUlQoc2NyaXB0Q29udGV4dC0+aXNXb3JrZXJDb250ZXh0
KCkpOwogICAgICAgICBXb3JrZXJDb250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2Vy
Q29udGV4dCo+KHNjcmlwdENvbnRleHQpOwotCi0gICAgICAgIGNvbnRleHQtPmRpc3BhdGNoTWVz
c2FnZShtX21lc3NhZ2UpOworICAgICAgICBpZiAobV9tZXNzYWdlUG9ydCkgeworICAgICAgICAg
ICAgbV9tZXNzYWdlUG9ydC0+YXR0YWNoVG9Db250ZXh0KGNvbnRleHQpOworICAgICAgICB9Cisg
ICAgICAgIGNvbnRleHQtPmRpc3BhdGNoTWVzc2FnZShtX21lc3NhZ2UsIG1fbWVzc2FnZVBvcnQp
OwogCiAgICAgICAgIGNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJPYmplY3RQcm94eSgpLT5jb25m
aXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoY29udGV4dC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkp
OwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9tZXNzYWdlOworICAgIFJlZlB0cjxN
ZXNzYWdlUG9ydD4gbV9tZXNzYWdlUG9ydDsKIH07CiAKIGNsYXNzIE1lc3NhZ2VXb3JrZXJUYXNr
IDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VXb3JrZXJUYXNrPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8TWVzc2FnZVdvcmtlclRhc2s+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQsIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBt
ZXNzYWdpbmdQcm94eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVzc2Fn
ZVdvcmtlclRhc2sobWVzc2FnZSwgbWVzc2FnaW5nUHJveHkpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBNZXNzYWdlV29ya2VyVGFzayhtZXNzYWdlLCBwb3J0LCBtZXNzYWdpbmdQcm94
eSkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBNZXNzYWdlV29ya2VyVGFzayhjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkKKyAgICBN
ZXNzYWdlV29ya2VyVGFzayhjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8TWVzc2Fn
ZVBvcnQ+IHBvcnQsIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkKICAgICAg
ICAgOiBtX21lc3NhZ2UobWVzc2FnZS5jb3B5KCkpCisgICAgICAgICwgbV9tZXNzYWdlUG9ydChw
b3J0KQogICAgICAgICAsIG1fbWVzc2FnaW5nUHJveHkobWVzc2FnaW5nUHJveHkpCiAgICAgewog
ICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KikKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkKICAgICB7CiAgICAgICAgIFdvcmtlciogd29ya2VyT2JqZWN0ID0gbV9tZXNz
YWdpbmdQcm94eS0+d29ya2VyT2JqZWN0KCk7CiAgICAgICAgIGlmICghd29ya2VyT2JqZWN0IHx8
IG1fbWVzc2FnaW5nUHJveHktPmFza2VkVG9UZXJtaW5hdGUoKSkKICAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICB3b3JrZXJPYmplY3QtPmRpc3BhdGNoTWVzc2FnZShtX21lc3NhZ2UpOwor
ICAgICAgICBpZiAobV9tZXNzYWdlUG9ydCkgeworICAgICAgICAgICAgbV9tZXNzYWdlUG9ydC0+
YXR0YWNoVG9Db250ZXh0KGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIHdvcmtlck9iamVj
dC0+ZGlzcGF0Y2hNZXNzYWdlKG1fbWVzc2FnZSwgbV9tZXNzYWdlUG9ydCk7CiAgICAgfQogCiBw
cml2YXRlOgogICAgIFN0cmluZyBtX21lc3NhZ2U7CisgICAgUmVmUHRyPE1lc3NhZ2VQb3J0PiBt
X21lc3NhZ2VQb3J0OwogICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtX21lc3NhZ2luZ1Byb3h5
OwogfTsKIApAQCAtMjA1LDIxICsyMTMsMzEgQEAgdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6
c3RhcnRXb3JrZXJDbwogICAgIHRocmVhZC0+c3RhcnQoKTsKIH0KIAotdm9pZCBXb3JrZXJNZXNz
YWdpbmdQcm94eTo6cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgTWVzc2FnZVBvcnQqIHBvcnQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soTWVzc2FnZVdv
cmtlclRhc2s6OmNyZWF0ZShtZXNzYWdlLCB0aGlzKSk7CisgICAgLy8gQ2xvbmUgdGhlIHBvcnQg
aW4gcHJlcGFyYXRpb24gZm9yIHNlbmRpbmcgaXQgdG8gdGhlIHJlbW90ZSBjb250ZXh0CisgICAg
UmVmUHRyPE1lc3NhZ2VQb3J0PiBuZXdQb3J0ID0gcG9ydCA/IHBvcnQtPmNsb25lKGVjKSA6IDA7
CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPnBvc3RUYXNrKE1lc3NhZ2VXb3JrZXJUYXNrOjpjcmVhdGUobWVzc2FnZSwgbmV3UG9y
dCwgdGhpcykpOwogfQogCi12b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0TWVzc2FnZVRv
V29ya2VyQ29udGV4dChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFdvcmtlck1lc3NhZ2lu
Z1Byb3h5Ojpwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IE1lc3NhZ2VQb3J0ICpwb3J0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAobV9hc2tl
ZFRvVGVybWluYXRlKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBDbG9uZSB0aGUgcG9ydCBp
biBwcmVwYXJhdGlvbiBmb3Igc2VuZGluZyBpdCB0byB0aGUgcmVtb3RlIGNvbnRleHQKKyAgICBS
ZWZQdHI8TWVzc2FnZVBvcnQ+IG5ld1BvcnQgPSBwb3J0ID8gcG9ydC0+Y2xvbmUoZWMpIDogMDsK
KyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChtX3dvcmtlclRocmVhZCkg
ewogICAgICAgICArK21fdW5jb25maXJtZWRNZXNzYWdlQ291bnQ7Ci0gICAgICAgIG1fd29ya2Vy
VGhyZWFkLT5ydW5Mb29wKCkucG9zdFRhc2soTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpjcmVh
dGUobWVzc2FnZSkpOworICAgICAgICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNr
KE1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzazo6Y3JlYXRlKG1lc3NhZ2UsIG5ld1BvcnQpKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgbV9xdWV1ZWRFYXJseVRhc2tzLmFwcGVuZChNZXNzYWdlV29ya2Vy
Q29udGV4dFRhc2s6OmNyZWF0ZShtZXNzYWdlKSk7CisgICAgICAgIG1fcXVldWVkRWFybHlUYXNr
cy5hcHBlbmQoTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpjcmVhdGUobWVzc2FnZSwgbmV3UG9y
dCkpOwogfQogCiB2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0VGFza1RvV29ya2VyQ29u
dGV4dChQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCkluZGV4
OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuaAkocmV2aXNpb24gNDI4NzYpCisr
KyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuaAkod29ya2luZyBjb3B5KQpA
QCAtNTIsMTMgKzUyLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gKE9ubHkg
dXNlIHRoZXNlIG1ldGhvZHMgaW4gdGhlIHdvcmtlciBvYmplY3QgdGhyZWFkLikKICAgICAgICAg
dmlydHVhbCB2b2lkIHN0YXJ0V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNv
bnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgdGVybWluYXRlV29ya2VyQ29udGV4dCgpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgTWVzc2FnZVBvcnQqLCBFeGNlcHRpb25Db2RlJiBlYyk7CiAgICAgICAg
IHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKICAgICAgICAgdmlydHVh
bCB2b2lkIHdvcmtlck9iamVjdERlc3Ryb3llZCgpOwogCiAgICAgICAgIC8vIEltcGxlbWVudGF0
aW9ucyBvZiBXb3JrZXJPYmplY3RQcm94eS4KICAgICAgICAgLy8gKE9ubHkgdXNlIHRoZXNlIG1l
dGhvZHMgaW4gdGhlIHdvcmtlciBjb250ZXh0IHRocmVhZC4pCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgTWVzc2FnZVBvcnQqLCBFeGNlcHRpb25Db2RlJiBlYyk7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoY29uc3QgU3RyaW5nJiBlcnJvck1l
c3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChNZXNzYWdlRGVz
dGluYXRpb24sIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgY29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGJvb2wgaGFzUGVuZGlu
Z0FjdGl2aXR5KTsKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJPYmplY3RQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJPYmplY3RQcm94eS5oCShyZXZpc2lv
biA0Mjg3NikKKysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJPYmplY3RQcm94eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSwxMiArMzksMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xh
c3MgU3RyaW5nOwogCisgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKwogICAgIC8vIEEg
cHJveHkgdG8gdGFsayB0byB0aGUgd29ya2VyIG9iamVjdC4KICAgICBjbGFzcyBXb3JrZXJPYmpl
Y3RQcm94eSB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5Xb3JrZXJPYmplY3RQcm94
eSgpIHt9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3Qo
Y29uc3QgU3RyaW5nJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dv
cmtlck9iamVjdChjb25zdCBTdHJpbmcmLCBNZXNzYWdlUG9ydCosIEV4Y2VwdGlvbkNvZGUmKSA9
IDA7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYg
c291cmNlVVJMKSA9IDA7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQyODc5KQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMDQtMjYg
IERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGRlZCB0ZXN0
cyBmb3IgdGhlIG5ldyBXb3JrZXIucG9zdE1lc3NhZ2UobXNnLCBwb3J0KSBBUEkKKyAgICAgICAg
KGRpc2FibGVkIGJ5IGRlZmF1bHQgc2luY2UgQ0hBTk5FTF9NRVNTQUdJTkcgaXMgZGlzYWJsZWQK
KyAgICAgICAgYnkgZGVmYXVsdCkuCisKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvcmVzb3VyY2Vz
L3dvcmtlci1tZXNzYWdlcG9ydC5qczogQWRkZWQuCisgICAgICAgIChvbm1lc3NhZ2UuZXZ0Lm1l
c3NhZ2VQb3J0Lm9ubWVzc2FnZSk6CisgICAgICAgIChvbm1lc3NhZ2UuZWxzZS5jaGFubmVsLnBv
cnQyLm9ubWVzc2FnZSk6CisgICAgICAgIChvbm1lc3NhZ2UpOgorICAgICAgICAocGluZ0JhY2sp
OgorICAgICAgICAqIGZhc3Qvd29ya2Vycy93b3JrZXItbWVzc2FnZXBvcnQtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvd29ya2VyLW1lc3NhZ2Vwb3J0Lmh0bWwt
ZGlzYWJsZWQ6IEFkZGVkLgorCiAyMDA5LTA0LTI1ICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxn
bnNAZ25vbWUub3JnPgogCiAgICAgICAgIEdvIGJhY2sgdG8gZGlzYWJsaW5nIGFjY2Vzc2liaWxp
dHkgdGVzdHMgYXMgYSB3aG9sZSwgc2luY2Ugd2UgaGF2ZQpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3dvcmtlci1tZXNzYWdlcG9ydC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1tZXNzYWdlcG9ydC1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLW1lc3NhZ2Vw
b3J0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACitUZXN0IHRoYXQg
cGFnZXMgYW5kIHdvcmtlcnMgY2FuIHNlbmQgTWVzc2FnZVBvcnRzIHRvIG9uZSBhbm90aGVyLiBT
aG91bGQgcHJpbnQgIlNVQ0NFU1MiIHdoZW4gZG9uZS4KKworUEFTUzogZXZ0Lm1lc3NhZ2VQb3J0
ID0gbnVsbCBhcyBleHBlY3RlZAorUEFTUzogUmVjZWl2ZWQgbWVzc2FnZSBwb3J0CitQQVNTOiBS
ZWNlaXZlZCByZXNwb25zZSBmcm9tIFdvcmtlciB2aWEgTWVzc2FnZVBvcnQKK1BBU1M6IEdvdCBw
b3J0IGZyb20gd29ya2VyCitQQVNTOiBSZWNlaXZlZCBmaW5hbCByZXNwb25zZSBmcm9tIHdvcmtl
cgorU1VDQ0VTUworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLW1lc3Nh
Z2Vwb3J0Lmh0bWwtZGlzYWJsZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3dvcmtlci1tZXNzYWdlcG9ydC5odG1sLWRpc2FibGVkCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1tZXNzYWdlcG9ydC5odG1sLWRpc2FibGVkCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACis8Ym9keT4KKzxwPlRlc3QgdGhhdCBwYWdlcyBh
bmQgd29ya2VycyBjYW4gc2VuZCBNZXNzYWdlUG9ydHMgdG8gb25lIGFub3RoZXIuCitTaG91bGQg
cHJpbnQgIlNVQ0NFU1MiIHdoZW4gZG9uZS48L3A+Cis8ZGl2IGlkPXJlc3VsdD48L2Rpdj4KKzxz
Y3JpcHQ+CitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisKK2lmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
fQorCisvLyBDcmVhdGUgd29ya2VyIGFuZCB0ZXN0IHNlbmRpbmcgbWVzc2FnZXMgYm90aCB3aXRo
IGFuZCB3aXRob3V0IHBvcnRzCisvLyB0byBpdAordmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoInJl
c291cmNlcy93b3JrZXItbWVzc2FnZXBvcnQuanMiKTsKK3dvcmtlci5vbm1lc3NhZ2UgPSBmdW5j
dGlvbihldnQpIHsKKyAgICBsb2coZXZ0LmRhdGEpOworfTsKKwordmFyIGNoYW5uZWwgPSBuZXcg
TWVzc2FnZUNoYW5uZWwoKTsKKworCisvLyBTZW5kIG1lc3NhZ2VzIHdpdGggYW5kIHdpdGhvdXQg
cG9ydHMgdG8gdGhlIHdvcmtlciB0byBtYWtlIHN1cmUgaXQKKy8vIGdldHMgdGhlbS4KK3dvcmtl
ci5wb3N0TWVzc2FnZSgibm9wb3J0Iik7IAord29ya2VyLnBvc3RNZXNzYWdlKCJwb3J0IiwgY2hh
bm5lbC5wb3J0MSk7CisKKy8vIFNlbmQgYSBtZXNzYWdlIG9uIHRoZSBuZXcgcG9ydCB0byBtYWtl
IHN1cmUgaXQgZ2V0cyB0byB0aGUgd29ya2VyCitjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKCJw
aW5nIik7CisKKy8vIFdhaXQgZm9yIHRoZSByZXNwb25zZS4KK2NoYW5uZWwucG9ydDIub25tZXNz
YWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgaWYgKGV2dC5kYXRhID09ICJwb25nIikgeworICAg
ICAgICBsb2coIlBBU1M6IFJlY2VpdmVkIHJlc3BvbnNlIGZyb20gV29ya2VyIHZpYSBNZXNzYWdl
UG9ydCIpOworICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gYXdhaXRQb3J0RnJvbVdvcmtlcjsK
KyAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKCJnZXRwb3J0Iik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbG9nKCJGQUlMOiBSZWNlaXZlZCB1bmtub3duIGV2ZW50OiAiICsgZXZ0LmRhdGEpOwor
ICAgIH0KK30KK2NoYW5uZWwucG9ydDIuc3RhcnQoKTsKKworLy8gSW52b2tlZCBvbmNlIHRoZSBm
aXJzdCBiYXRjaCBvZiB0ZXN0cyBhcmUgZG9uZSwgdG8gdGVzdCBzZW5kaW5nIGZyb20gdGhlCisv
LyB3b3JrZXIuCitmdW5jdGlvbiBhd2FpdFBvcnRGcm9tV29ya2VyKGV2dCkgeworICAgIGlmIChl
dnQuZGF0YSA9PSAicG9ydCIpIHsKKyAgICAgICAgaWYgKCFldnQubWVzc2FnZVBvcnQpIHsKKyAg
ICAgICAgICAgIGxvZygiRkFJTDogRGlkIG5vdCBnZXQgcG9ydCBmcm9tIHdvcmtlciIpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nKCJQQVNTOiBHb3QgcG9ydCBmcm9tIHdvcmtl
ciIpOworICAgICAgICAgICAgZXZ0Lm1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKCJwaW5nIik7Cisg
ICAgICAgICAgICBldnQubWVzc2FnZVBvcnQub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGV2dC5kYXRhID09ICJwb25nIikgeworICAgICAgICAgICAgICAg
ICAgICBsb2coIlBBU1M6IFJlY2VpdmVkIGZpbmFsIHJlc3BvbnNlIGZyb20gd29ya2VyIik7Cisg
ICAgICAgICAgICAgICAgICAgIGxvZygiU1VDQ0VTUyIpOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIGxvZygiRkFJTDogR290IHVuZXhwZWN0ZWQgcmVzcG9u
c2U6ICIgKyBldnQuZGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgZXZ0Lm1lc3NhZ2VQb3J0LnN0YXJ0KCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBsb2coZXZ0LmRhdGEpOworICAgIH0KK30KKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1tZXNz
YWdlcG9ydC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3Vy
Y2VzL3dvcmtlci1tZXNzYWdlcG9ydC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLW1lc3NhZ2Vwb3J0LmpzCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDM1IEBACitvbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICBpZiAoZXZ0
LmRhdGEgPT0gInBvcnQiKSB7CisgICAgICAgIGlmIChldnQubWVzc2FnZVBvcnQpIHsKKyAgICAg
ICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBSZWNlaXZlZCBtZXNzYWdlIHBvcnQiKTsKKyAgICAg
ICAgICAgIGV2dC5tZXNzYWdlUG9ydC5vbm1lc3NhZ2UgPSBwaW5nQmFjazsKKyAgICAgICAgICAg
IGV2dC5tZXNzYWdlUG9ydC5zdGFydCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
cG9zdE1lc3NhZ2UoIkZBSUw6IERpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBNZXNzYWdlUG9ydCIp
OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChldnQuZGF0YSA9PSAibm9wb3J0IikgeworICAg
ICAgICBpZiAoZXZ0Lm1lc3NhZ2VQb3J0KSB7CisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiRkFJ
TDogUmVjZWl2ZWQgbWVzc2FnZSBwb3J0Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBwb3N0TWVzc2FnZSgiUEFTUzogZXZ0Lm1lc3NhZ2VQb3J0ID0gbnVsbCBhcyBleHBlY3RlZCIp
OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChldnQuZGF0YSA9PSAiZ2V0cG9ydCIpIHsKKyAg
ICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsKKyAgICAgICAgcG9zdE1l
c3NhZ2UoInBvcnQiLCBjaGFubmVsLnBvcnQxKTsKKyAgICAgICAgY2hhbm5lbC5wb3J0Mi5vbm1l
c3NhZ2UgPSBwaW5nQmFjazsKKyAgICAgICAgY2hhbm5lbC5wb3J0Mi5zdGFydCgpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHBvc3RNZXNzYWdlKCJVbmtub3duIG1lc3NhZ2U6IiArIGV2dC5kYXRh
KTsKKyAgICB9CisKK30KKworZnVuY3Rpb24gcGluZ0JhY2soZXZ0KSB7CisgICAgLy8gTWFrZSBz
dXJlIHdlIGdvdCB0aGUgZXhwZWN0ZWQgZGF0YSBhbmQgc2VuZCBhIHJldHVybiBtZXNzYWdlIG92
ZXIKKyAgICAvLyB0aGUgcG9ydC4KKyAgICBpZiAoZXZ0LmRhdGEgPT0gInBpbmciKSB7CisgICAg
ICAgIGV2dC50YXJnZXQucG9zdE1lc3NhZ2UoInBvbmciKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBwb3N0TWVzc2FnZSgiRkFJTDogdW5rbm93biBtZXNzYWdlOiAiICsgZXZ0LmRhdGEpOworICAg
IH0KK30K
</data>
<flag name="review"
          id="15008"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31895</attachid>
            <date>2009-06-25 18:24:35 -0700</date>
            <delta_ts>2009-06-29 18:19:31 -0700</delta_ts>
            <desc>revised patch</desc>
            <filename>patch-2.txt</filename>
            <type>text/plain</type>
            <size>36204</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzOWU0NDUzLi40NmRmNmE1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMDktMDYt
MjUgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI1NDM1PgorCisgICAgICAgIEFkZGVkIHRlc3RzIGZvciBzZW5kaW5n
IE1lc3NhZ2VQb3J0cyB0by9mcm9tIHdvcmtlcnMuCisKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMv
cmVzb3VyY2VzL3dvcmtlci1jbG9uZXBvcnQuanM6IEFkZGVkLgorICAgICAgICAob25tZXNzYWdl
KToKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1tZXNzYWdlcG9ydC5q
czogQWRkZWQuCisgICAgICAgIChvbm1lc3NhZ2UpOgorICAgICAgICAocGluZ0JhY2spOgorICAg
ICAgICAqIGZhc3Qvd29ya2Vycy93b3JrZXItY2xvbmVwb3J0LWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC93b3JrZXJzL3dvcmtlci1jbG9uZXBvcnQuaHRtbC1kaXNhYmxlZDog
QWRkZWQuCisgICAgICAgIFRlc3RzIGZvciBjbG9uaW5nIGEgcG9ydCB3aGlsZSBtZXNzYWdlcyBh
cmUgc2VudCBmcm9tIGFub3RoZXIgdGhyZWFkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy93b3Jr
ZXItbWVzc2FnZXBvcnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtl
cnMvd29ya2VyLW1lc3NhZ2Vwb3J0Lmh0bWwtZGlzYWJsZWQ6IEFkZGVkLgorICAgICAgICBHZW5l
cmFsIHRlc3RzIGZvciBzZW5kaW5nIG1lc3NhZ2VzIHRvIHdvcmtlcnMgdmlhIG1lc3NhZ2UgcG9y
dHMuCisgICAgICAgICogZmFzdC93b3JrZXJzL3dvcmtlci1tZXNzYWdlcG9ydC1nYy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy93b3JrZXItbWVzc2FnZXBvcnQt
Z2MuaHRtbC1kaXNhYmxlZDogQWRkZWQuCisgICAgICAgIFRlc3RzIHRvIGVuc3VyZSBXb3JrZXJz
IGRvbid0IHNodXQgZG93biB3aGVuIHJlYWNoYWJsZSBvbmx5IHZpYSBNZXNzYWdlUG9ydHMuCisK
IDIwMDktMDYtMjUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvcmVzb3VyY2VzL3dvcmtlci1jbG9uZXBvcnQuanMgYi9MYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvcmVzb3VyY2VzL3dvcmtlci1jbG9uZXBvcnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNTVmMDNiYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLWNsb25lcG9ydC5qcwpAQCAtMCwwICsxLDE3IEBA
Citvbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICBpZiAoZXZ0LmRhdGEuaW5kZXhPZigi
cG9zdEJhY2sgIikgPT0gMCkgeworICAgICAgICBpZiAoIWV2dC5tZXNzYWdlUG9ydCkgeworICAg
ICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUxVUkU6IE5vIE1lc3NhZ2VQb3J0IHdpdGggcG9zdEJh
Y2sgY29tbWFuZCIpOworICAgICAgICB9CisgICAgICAgIHZhciBzdHJpbmdzID0gZXZ0LmRhdGEu
c3BsaXQoIiAiLCAyKTsKKyAgICAgICAgdmFyIG51bUl0ZW1zID0gcGFyc2VJbnQoc3RyaW5nc1sx
XSk7CisgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBSZWNlaXZlZCByZXF1ZXN0IGZvciAiICsg
bnVtSXRlbXMgKyAiIG1lc3NhZ2VzIik7CisgICAgICAgIGZvciAodmFyIGkgPSAwIDsgaSA8IG51
bUl0ZW1zIDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgbXNnID0gIiIgKyBpOworICAgICAgICAg
ICAgZXZ0Lm1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKG1zZyk7CisgICAgICAgIH0KKyAgICAgICAg
cG9zdE1lc3NhZ2UoInBvc3RCYWNrRG9uZSIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHBvc3RN
ZXNzYWdlKCJGQUlMVVJFOiB1bmtub3duIG1lc3NhZ2U6ICIgKyBldnQuZGF0YSk7CisgICAgfQor
fQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy93b3JrZXIt
bWVzc2FnZXBvcnQuanMgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtl
ci1tZXNzYWdlcG9ydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDBm
MDBjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNl
cy93b3JrZXItbWVzc2FnZXBvcnQuanMKQEAgLTAsMCArMSw0MCBAQAorb25tZXNzYWdlID0gZnVu
Y3Rpb24oZXZ0KSB7CisgICAgaWYgKGV2dC5kYXRhID09ICJwb3J0IikgeworICAgICAgICBpZiAo
ZXZ0Lm1lc3NhZ2VQb3J0KSB7CisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogUmVjZWl2
ZWQgbWVzc2FnZSBwb3J0Iik7CisgICAgICAgICAgICBldnQubWVzc2FnZVBvcnQub25tZXNzYWdl
ID0gcGluZ0JhY2s7CisgICAgICAgICAgICBldnQubWVzc2FnZVBvcnQuc3RhcnQoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBEaWQgbm90IHJlY2Vp
dmUgZXhwZWN0ZWQgTWVzc2FnZVBvcnQiKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZXZ0
LmRhdGEgPT0gIm5vcG9ydCIpIHsKKyAgICAgICAgaWYgKGV2dC5tZXNzYWdlUG9ydCkgeworICAg
ICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IFJlY2VpdmVkIG1lc3NhZ2UgcG9ydCIpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGV2dC5tZXNzYWdl
UG9ydCA9IG51bGwgYXMgZXhwZWN0ZWQiKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZXZ0
LmRhdGEgPT0gInNwYW0iKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwIDsgaSA8IDEwMDAgOyBp
KyspIHsKKyAgICAgICAgICAgIGV2dC5tZXNzYWdlUG9ydC5wb3N0TWVzc2FnZShpKTsKKyAgICAg
ICAgfQorICAgICAgICBwb3N0TWVzc2FnZSgic3BhbURvbmUiKTsKKyAgICB9IGVsc2UgaWYgKGV2
dC5kYXRhID09ICJnZXRwb3J0IikgeworICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdl
Q2hhbm5lbCgpOworICAgICAgICBwb3N0TWVzc2FnZSgicG9ydCIsIGNoYW5uZWwucG9ydDEpOwor
ICAgICAgICBjaGFubmVsLnBvcnQyLm9ubWVzc2FnZSA9IHBpbmdCYWNrOworICAgICAgICBjaGFu
bmVsLnBvcnQyLnN0YXJ0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcG9zdE1lc3NhZ2UoIlVu
a25vd24gbWVzc2FnZToiICsgZXZ0LmRhdGEpOworICAgIH0KKworfQorCitmdW5jdGlvbiBwaW5n
QmFjayhldnQpIHsKKyAgICAvLyBNYWtlIHN1cmUgd2UgZ290IHRoZSBleHBlY3RlZCBkYXRhIGFu
ZCBzZW5kIGEgcmV0dXJuIG1lc3NhZ2Ugb3ZlcgorICAgIC8vIHRoZSBwb3J0LgorICAgIGlmIChl
dnQuZGF0YSA9PSAicGluZyIpIHsKKyAgICAgICAgZXZ0LnRhcmdldC5wb3N0TWVzc2FnZSgicG9u
ZyIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB1bmtub3duIG1l
c3NhZ2U6ICIgKyBldnQuZGF0YSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3dvcmtlci1jbG9uZXBvcnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3dvcmtlci1jbG9uZXBvcnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NWFkNmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNsb25lcG9ydC1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSw3IEBACitUZXN0IE1lc3NhZ2VQb3J0IG1lc3NhZ2luZy9lbnRhbmdsZS9kZXRhbmdsZSBhY3Jv
c3MgdGhyZWFkcy4gU2hvdWxkIHByaW50ICJTVUNDRVNTIiB3aGVuIGRvbmUuCisKK1BBU1M6IFJl
Y2VpdmVkIHJlcXVlc3QgZm9yIDUwMDAwIG1lc3NhZ2VzCitQQVNTOiBwb3N0QmFjayBjb21wbGV0
ZSwgY2xvbmVkID4gMTAwMCB0aW1lcworU1VDQ0VTUyAtIHJlY2VpdmVkIDUwMDAwIG1lc3NhZ2Vz
CitET05FCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItY2xv
bmVwb3J0Lmh0bWwtZGlzYWJsZWQgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNs
b25lcG9ydC5odG1sLWRpc2FibGVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjdlMDIwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29y
a2VyLWNsb25lcG9ydC5odG1sLWRpc2FibGVkCkBAIC0wLDAgKzEsMTAyIEBACis8Ym9keT4KKzxw
PlRlc3QgTWVzc2FnZVBvcnQgbWVzc2FnaW5nL2VudGFuZ2xlL2RldGFuZ2xlIGFjcm9zcyB0aHJl
YWRzLiBTaG91bGQgcHJpbnQgIlNVQ0NFU1MiIHdoZW4gZG9uZS48L3A+Cis8ZGl2IGlkPXJlc3Vs
dD48L2Rpdj4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7
Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworfQorCisKK3ZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7Cit2
YXIgbnVtTWVzc2FnZXMgPSA1MDAwMDsKKworLy8gQ3JlYXRlIGEgY2hhbm5lbCB3aGljaCB3ZSB3
aWxsIHVzZSB0byBjbG9uZSBhbmQgcmUtY2xvbmUgb25lIGVuZCBvZiBhCisvLyBNZXNzYWdlQ2hh
bm5lbC4KK3ZhciBjbG9uZUNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsKK3ZhciBzdG9w
Q2xvbmluZyA9IGZhbHNlOworY2xvbmVDaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGNsb25lQ2hh
bm5lbC5wb3J0Mi5vbm1lc3NhZ2UgPSByZXNlbmRQb3J0OworY2xvbmVDaGFubmVsLnBvcnQxLnN0
YXJ0KCk7CitjbG9uZUNoYW5uZWwucG9ydDIuc3RhcnQoKTsKK2Nsb25lQ2hhbm5lbC5wb3J0MS5w
b3N0TWVzc2FnZSgiIiwgY2hhbm5lbC5wb3J0Mik7CisKKy8vIENyZWF0ZSB3b3JrZXIgd2l0aCBv
dGhlciBlbmQgb2YgcG9ydCBhbmQgaGF2ZSBpdCBzZW5kIG1lc3NhZ2VzIGJhY2sgdG8gdXMKKy8v
IHdoaWxlIHdlIGNsb25lIG91ciBlbmQgb2YgdGhlIHBvcnQgcmVwZWF0ZWRseS4KK3ZhciB3b3Jr
ZXIgPSBuZXcgV29ya2VyKCJyZXNvdXJjZXMvd29ya2VyLWNsb25lcG9ydC5qcyIpOword29ya2Vy
LnBvc3RNZXNzYWdlKCJwb3N0QmFjayAiICsgbnVtTWVzc2FnZXMsIGNoYW5uZWwucG9ydDEpOwor
CisvLyBUZXN0IHBvc3RpbmcgYmFjayA1MDAwMCBtZXNzYWdlcywgbWFrZSBzdXJlIG9yZGVyaW5n
IGlzIGZpbmUKK3dvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICBpZiAoZXZ0
LmRhdGEgPT0gInBvc3RCYWNrRG9uZSIpIHsKKyAgICAgICBzdG9wQ2xvbmluZyA9IHRydWU7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTG9nIG1lc3NhZ2UgZnJvbSB3b3JrZXIKKyAgICAgICAg
bG9nKGV2dC5kYXRhKTsKKyAgICB9Cit9CisKKy8vIEtlZXAgY2xvbmluZyB0aGUgcGFzc2VkIHBv
cnQgdW50aWwgd2UncmUgdG9sZCB0byBzdG9wCit2YXIgbnVtQ2xvbmVzID0gMDsKK2Z1bmN0aW9u
IHJlc2VuZFBvcnQoZXZ0KQoreworICAgIGlmICghc3RvcENsb25pbmcpIHsKKyAgICAgICAgbnVt
Q2xvbmVzKys7CisgICAgICAgIGV2dC50YXJnZXQucG9zdE1lc3NhZ2UoIiIsIGV2dC5tZXNzYWdl
UG9ydCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG51bUNsb25lcyA8IDEwMDApIHsKKyAg
ICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBjbG9uZSBhdCBsZWFzdCAxMDAwIHRpbWVzLCB0aGVu
IHRoZXJlJ3Mgc29tZXRoaW5nIGFtaXNzCisgICAgICAgICAgICBsb2coIkZBSUw6IHBvc3RCYWNr
IGNvbXBsZXRlLCBidXQgb25seSBjbG9uZWQgIiArIG51bUNsb25lcyArICIgdGltZXMiKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZygiUEFTUzogcG9zdEJhY2sgY29tcGxldGUs
IGNsb25lZCA+IDEwMDAgdGltZXMiKTsKKyAgICAgICAgfQorICAgICAgICAvLyBNYWtlIHN1cmUg
dGhlIG1lc3NhZ2VzIGFycml2ZWQgaW4gb3JkZXIKKyAgICAgICAgdmFyIGl0ZW1OdW0gPSAwOwor
ICAgICAgICB2YXIgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
bG9nKCJGQUlMVVJFOiBSZWNlaXZlZDogIiArIGl0ZW1OdW0gKyAiIGV2ZW50cyAtIGV4cGVjdGVk
OiAiICsgbnVtTWVzc2FnZXMpOworICAgICAgICB9LCAxMDAwKTsKKyAgICAgICAgZXZ0Lm1lc3Nh
Z2VQb3J0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICB2YXIgZG9u
ZSA9IGZhbHNlOworICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEgPT0gaXRlbU51bSkgeworICAg
ICAgICAgICAgICAgIGl0ZW1OdW0rKzsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbU51bSA9PSBu
dW1NZXNzYWdlcykgeworICAgICAgICAgICAgICAgICAgICBsb2coIlNVQ0NFU1MgLSByZWNlaXZl
ZCAiICsgbnVtTWVzc2FnZXMgKyAiIG1lc3NhZ2VzIik7CisgICAgICAgICAgICAgICAgICAgIGRv
bmUgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgbG9nKCJGQUlMVVJFOiBPdXQgb2Ygb3JkZXIgbWVzc2FnZTogZXhwZWN0ZWQg
IzogIiArIGl0ZW1OdW0gKyAiLCByZWNlaXZlZDogIiArIGV2ZW50LmRhdGEpOworICAgICAgICAg
ICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2xlYXJUaW1l
b3V0KHRpbWVyKTsKKyAgICAgICAgICAgIGlmIChkb25lKSB7CisgICAgICAgICAgICAgICBnYygp
OworICAgICAgICAgICAgICAgc2V0VGltZW91dChyZXBvcnREb25lLCAxMDApOyAgLy8gTWFrZSBz
dXJlIG5vIHVuZXhwZWN0ZWQgZXZlbnRzIGNvbWUgaW4KKyAgICAgICAgICAgIH0KKyAgICAgICB9
CisgICAgICAgIGV2dC5tZXNzYWdlUG9ydC5zdGFydCgpOworICAgIH0KK30KKworZnVuY3Rpb24g
Z2MoKQoreworICAgIGlmICh3aW5kb3cuR0NDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gR0ND
b250cm9sbGVyLmNvbGxlY3QoKTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7IGkr
KykgeyAvLyBmb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gKEZGIHJlcXVpcmVzIGFib3V0IDlLIGFs
bG9jYXRpb25zIGJlZm9yZSBhIGNvbGxlY3QpCisgICAgICAgIHZhciBzID0gbmV3IFN0cmluZygi
YWJjIik7CisgICAgfQorfQorZnVuY3Rpb24gcmVwb3J0RG9uZSgpCit7CisgICAgIGxvZygiRE9O
RSIpOworICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItbWVz
c2FnZXBvcnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1t
ZXNzYWdlcG9ydC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNGFiZWEwZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93
b3JrZXItbWVzc2FnZXBvcnQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3QgdGhh
dCBwYWdlcyBhbmQgd29ya2VycyBjYW4gc2VuZCBNZXNzYWdlUG9ydHMgdG8gb25lIGFub3RoZXIu
IFNob3VsZCBwcmludCAiRE9ORSIgd2hlbiBkb25lLgorCitQQVNTOiBldnQubWVzc2FnZVBvcnQg
PSBudWxsIGFzIGV4cGVjdGVkCitQQVNTOiBSZWNlaXZlZCBtZXNzYWdlIHBvcnQKK1BBU1M6IFJl
Y2VpdmVkIHJlc3BvbnNlIGZyb20gV29ya2VyIHZpYSBNZXNzYWdlUG9ydAorUEFTUzogR290IHBv
cnQgZnJvbSB3b3JrZXIKK1BBU1M6IFJlY2VpdmVkIGZpbmFsIHJlc3BvbnNlIGZyb20gd29ya2Vy
CitQQVNTOiBHb3QgMTAwMCBtZXNzYWdlcworRE9ORQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvd29ya2VyLW1lc3NhZ2Vwb3J0LWdjLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItbWVzc2FnZXBvcnQtZ2MtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZTdiOGQKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLW1lc3NhZ2Vwb3J0LWdjLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1Rlc3QgdGhhdCB3b3JrZXJzIHN0YXkgcmVhY2hhYmxl
IHZpYSBtZXNzYWdlIHBvcnRzLiBTaG91bGQgcHJpbnQgIkRPTkUiIHdoZW4gZG9uZS4KKworUEFT
UzogV29ya2VyIGlzIHJlYWNoYWJsZS4KK0RPTkUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3dvcmtlci1tZXNzYWdlcG9ydC1nYy5odG1sLWRpc2FibGVkIGIvTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1tZXNzYWdlcG9ydC1nYy5odG1sLWRpc2FibGVkCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4Yzk3YTUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLW1lc3NhZ2Vwb3J0LWdjLmh0bWwt
ZGlzYWJsZWQKQEAgLTAsMCArMSw1OCBAQAorPGJvZHk+Cis8cD5UZXN0IHRoYXQgd29ya2VycyBz
dGF5IHJlYWNoYWJsZSB2aWEgbWVzc2FnZSBwb3J0cy4KK1Nob3VsZCBwcmludCAiRE9ORSIgd2hl
biBkb25lLjwvcD4KKzxkaXYgaWQ9cmVzdWx0PjwvZGl2PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxv
ZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5l
ckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKKy8vIFRlc3QgdGhhdCB3
b3JrZXJzIHN0YXkgYWxpdmUgZXZlbiB0aG91Z2ggdGhleSBhcmUgb25seSByZWFjaGFibGUgdmlh
IG1lc3NhZ2UgcG9ydHMuCit2YXIgd29ya2VyID0gbmV3IFdvcmtlcigicmVzb3VyY2VzL3dvcmtl
ci1tZXNzYWdlcG9ydC5qcyIpOwordmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsK
K3dvcmtlci5wb3N0TWVzc2FnZSgicG9ydCIsIGNoYW5uZWwucG9ydDEpOword29ya2VyID0gMDsK
KworY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSgicGluZyIpOworY2hhbm5lbC5wb3J0Mi5vbm1l
c3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICAvLyBPdGhlciBzaWRlIGlzIHJ1bm5pbmcsIG5v
dyBmb3JjZSBhIEdDLCB3YWl0IGEgYml0LCBhbmQgc2VuZCBhIG5ldyBtZXNzYWdlIHRvIG1ha2Ug
c3VyZSBpdCBhcnJpdmVzLgorICAgIGdjKCk7CisgICAgc2V0VGltZW91dCh0ZXN0UmVhY2hhYmxl
LCAxMDApOworfQorCitmdW5jdGlvbiB0ZXN0UmVhY2hhYmxlKCkKK3sKKyAgICBjaGFubmVsLnBv
cnQyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkgeworICAgICAgICBsb2coIlBBU1M6IFdvcmtl
ciBpcyByZWFjaGFibGUuIik7CisgICAgICAgIGRvbmUoKTsKKyAgICB9CisgICAgY2hhbm5lbC5w
b3J0Mi5wb3N0TWVzc2FnZSgicGluZyIpOworfQorCitmdW5jdGlvbiBnYygpCit7CisgICAgaWYg
KHdpbmRvdy5HQ0NvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBHQ0NvbnRyb2xsZXIuY29sbGVj
dCgpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7IC8vIGZvcmNlIGdh
cmJhZ2UgY29sbGVjdGlvbiAoRkYgcmVxdWlyZXMgYWJvdXQgOUsgYWxsb2NhdGlvbnMgYmVmb3Jl
IGEgY29sbGVjdCkKKyAgICAgICAgdmFyIHMgPSBuZXcgU3RyaW5nKCJhYmMiKTsKKyAgICB9Cit9
CisKK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIGxvZygiRE9ORSIpOworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKK30KKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItbWVzc2FnZXBvcnQuaHRtbC1kaXNhYmxl
ZCBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItbWVzc2FnZXBvcnQuaHRtbC1kaXNh
YmxlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmE2ZWJiCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1tZXNzYWdlcG9ydC5o
dG1sLWRpc2FibGVkCkBAIC0wLDAgKzEsOTggQEAKKzxib2R5PgorPHA+VGVzdCB0aGF0IHBhZ2Vz
IGFuZCB3b3JrZXJzIGNhbiBzZW5kIE1lc3NhZ2VQb3J0cyB0byBvbmUgYW5vdGhlci4KK1Nob3Vs
ZCBwcmludCAiRE9ORSIgd2hlbiBkb25lLjwvcD4KKzxkaXYgaWQ9cmVzdWx0PjwvZGl2PgorPHNj
cmlwdD4KK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKworaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9
CisKK3ZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCJyZXNvdXJjZXMvd29ya2VyLW1lc3NhZ2Vwb3J0
LmpzIik7Cit2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOworCisvLyBTZW5kIG1l
c3NhZ2VzIHdpdGggYW5kIHdpdGhvdXQgcG9ydHMgdG8gdGhlIHdvcmtlciB0byBtYWtlIHN1cmUg
aXQgZ2V0cyB0aGVtLgord29ya2VyLnBvc3RNZXNzYWdlKCJub3BvcnQiKTsKK3dvcmtlci5vbm1l
c3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICBsb2coZXZ0LmRhdGEpOworICAgIHdvcmtlci5w
b3N0TWVzc2FnZSgicG9ydCIsIGNoYW5uZWwucG9ydDEpOworICAgIHdvcmtlci5vbm1lc3NhZ2Ug
PSBmdW5jdGlvbihldnQpIHsKKyAgICAgICAgbG9nKGV2dC5kYXRhKTsKKyAgICB9Cit9OworCisv
LyBTZW5kIGEgbWVzc2FnZSBvbiB0aGUgbmV3IHBvcnQgdG8gbWFrZSBzdXJlIGl0IGdldHMgdG8g
dGhlIHdvcmtlci4KK2NoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoInBpbmciKTsKKworLy8gV2Fp
dCBmb3IgdGhlIHJlc3BvbnNlLgorY2hhbm5lbC5wb3J0Mi5vbm1lc3NhZ2UgPSBmdW5jdGlvbihl
dnQpIHsKKyAgICBpZiAoZXZ0LmRhdGEgPT0gInBvbmciKSB7CisgICAgICAgIGxvZygiUEFTUzog
UmVjZWl2ZWQgcmVzcG9uc2UgZnJvbSBXb3JrZXIgdmlhIE1lc3NhZ2VQb3J0Iik7CisgICAgICAg
IHdvcmtlci5vbm1lc3NhZ2UgPSBhd2FpdFBvcnRGcm9tV29ya2VyOworICAgICAgICB3b3JrZXIu
cG9zdE1lc3NhZ2UoImdldHBvcnQiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2coIkZBSUw6
IFJlY2VpdmVkIHVua25vd24gZXZlbnQ6ICIgKyBldnQuZGF0YSk7CisgICAgfQorfQorY2hhbm5l
bC5wb3J0Mi5zdGFydCgpOworCisvLyBJbnZva2VkIG9uY2UgdGhlIGZpcnN0IGJhdGNoIG9mIHRl
c3RzIGFyZSBkb25lLCB0byB0ZXN0IHNlbmRpbmcgZnJvbSB0aGUgd29ya2VyLgorZnVuY3Rpb24g
YXdhaXRQb3J0RnJvbVdvcmtlcihldnQpCit7CisgICAgaWYgKGV2dC5kYXRhID09ICJwb3J0Iikg
eworICAgICAgICBpZiAoIWV2dC5tZXNzYWdlUG9ydCkgeworICAgICAgICAgICAgbG9nKCJGQUlM
OiBEaWQgbm90IGdldCBwb3J0IGZyb20gd29ya2VyIik7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBsb2coIlBBU1M6IEdvdCBwb3J0IGZyb20gd29ya2VyIik7CisgICAgICAgICAgICBl
dnQubWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UoInBpbmciKTsKKyAgICAgICAgICAgIGV2dC5tZXNz
YWdlUG9ydC5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZXZ0LmRhdGEgPT0gInBvbmciKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZygiUEFTUzogUmVj
ZWl2ZWQgZmluYWwgcmVzcG9uc2UgZnJvbSB3b3JrZXIiKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBsb2coIkZBSUw6IEdvdCB1bmV4cGVjdGVkIHJlc3Bv
bnNlOiAiICsgZXZ0LmRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBz
dGFydFNwYW1UZXN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBldnQubWVzc2FnZVBv
cnQuc3RhcnQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGxvZyhldnQuZGF0
YSk7CisgICAgfQorfQorCitmdW5jdGlvbiBzdGFydFNwYW1UZXN0KCkKK3sKKyAgICB2YXIgY2hh
bm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOworICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5j
dGlvbiAoKSB7IGdvdFNwYW0oY2hhbm5lbC5wb3J0MSk7IH0KKyAgICB3b3JrZXIucG9zdE1lc3Nh
Z2UoInNwYW0iLCBjaGFubmVsLnBvcnQyKTsKK30KKworZnVuY3Rpb24gZ290U3BhbShwb3J0KQor
eworICAgIHZhciBzcGFtQ291bnQgPSAwOworICAgIHBvcnQub25tZXNzYWdlID0gZnVuY3Rpb24o
ZXZ0KSB7CisgICAgICAgIGlmIChldnQuZGF0YSAhPSBzcGFtQ291bnQpCisgICAgICAgICAgICBs
b2coIkZBSUw6IEdvdCBvdXQgb2Ygb3JkZXIgbWVzc2FnZTogIiArIHNwYW1Db3VudCk7CisgICAg
ICAgIHNwYW1Db3VudCsrOworICAgICAgICBpZiAoc3BhbUNvdW50ID09IDEwMDApIHsKKyAgICAg
ICAgICAgIGxvZygiUEFTUzogR290IDEwMDAgbWVzc2FnZXMiKTsKKyAgICAgICAgICAgIGRvbmUo
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gZG9uZSgpCit7CisgICAgbG9nKCJE
T05FIik7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggZGE3NDA3Ni4uMWViN2MzNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NSBAQAorMjAwOS0wNi0yNSAgRHJl
dyBXaWxzb24gIDxhdHdpbHNvbkBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjU0MzU+CisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3Igc2VuZGluZyBNZXNz
YWdlUG9ydHMgdG8vZnJvbSBXb3JrZXJzIHZpYSBwb3N0TWVzc2FnZSgpLgorCisgICAgICAgICog
YmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTV29ya2VyQ29udGV4dDo6bWVzc2FnZUNoYW5uZWwpOgorICAgICAgICBFeHBvc2VzIE1lc3Nh
Z2VDaGFubmVsIGNvbnN0cnVjdG9yIFdvcmtlckNvbnRleHQuCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNXb3JrZXJDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE1l
c3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tf
RlVOQ19ERUNMKToKKyAgICAgICAgTm93IGNvcnJlY3RseSBoYW5kbGVzIGJlaW5nIGluc3RhbnRp
YXRlZCBmcm9tIHdpdGhpbiBhIFdvcmtlci4KKyAgICAgICAqIHBsYXRmb3JtL0Nyb3NzVGhyZWFk
Q29waWVyLmg6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICBBZGRlZCBzdXBwb3J0IGZv
ciBwYXNzaW5nIFBhc3NPd25QdHIgYXMgYXJndW1lbnQgdG8gR2VuZXJpY1dvcmtlclRhc2sKKyAg
ICAgICAqIHdvcmtlcnMvR2VuZXJpY1dvcmtlclRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6
CisgICAgICAgICogd29ya2Vycy9Xb3JrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
Ojpwb3N0TWVzc2FnZSk6CisgICAgICAgIE5vdyBoYW5kbGVzIGRpc2VudGFuZ2xpbmcvZW50YW5n
bGluZyBNZXNzYWdlUG9ydHMgc2VudCB0by9mcm9tIHZpYSBwb3N0TWVzc2FnZS4KKyAgICAgICAg
KFdlYkNvcmU6Oldvcmtlcjo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKiB3b3JrZXJzL1dv
cmtlci5oOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmlkbDoKKyAgICAgICAgQWRkZWQgYW4g
b3B0aW9uYWwgTWVzc2FnZVBvcnQgYXJndW1lbnQgdG8gcG9zdE1lc3NhZ2UoKQorICAgICAgICAq
IHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250
ZXh0OjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICBXb3JrZXJzIG5vdyByZXBvcnQgcGVu
ZGluZyBhY3Rpdml0eSB3aGVuZXZlciB0aGVyZSBhcmUgcmVtb3RlbHkgZW50YW5nbGVkIHBvcnRz
LgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6cG9zdE1lc3NhZ2UpOgorICAgICAg
ICBOb3cgaGFuZGxlcyBkaXNlbnRhbmdsaW5nL2VudGFuZ2xpbmcgTWVzc2FnZVBvcnRzIHNlbnQg
dG8vZnJvbSB2aWEgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0
OjpkaXNwYXRjaE1lc3NhZ2UpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5oOgor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5pZGw6CisgICAgICAgIEFkZGVkIGFuIG9w
dGlvbmFsIE1lc3NhZ2VQb3J0IGFyZ3VtZW50IHRvIHBvc3RNZXNzYWdlKCkKKyAgICAgICAgKiB3
b3JrZXJzL1dvcmtlckNvbnRleHRQcm94eS5oOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyTWVz
c2FnaW5nUHJveHkuY3BwOgorICAgICAgICBVcGRhdGVkIG1lc3NhZ2luZyBpbmZyYXN0cnVjdHVy
ZSB0byB0cmFuc3BvcnQgYW4gb3B0aW9uYWwgTWVzc2FnZVBvcnQvTWVzc2FnZVBvcnRDaGFubmVs
LgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpNZXNzYWdlV29ya2Vy
Q29udGV4dFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVdvcmtlckNvbnRleHRUYXNr
OjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlV29ya2VyVGFzazo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VXb3JrZXJUYXNrOjpNZXNzYWdlV29ya2Vy
VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlV29ya2VyVGFzazo6cGVyZm9ybVRhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RNZXNzYWdlVG9X
b3JrZXJPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6OnBv
c3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlck1lc3Nh
Z2luZ1Byb3h5Lmg6CisgICAgICAgIEFkZGVkIGFkZGl0aW9uYWwgcG9zdE1lc3NhZ2UoKSBBUEkg
dGhhdCBhY2NlcHRzIGEgTWVzc2FnZVBvcnQKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlck9iamVj
dFByb3h5Lmg6CisgICAgICAgIEFkZGVkIGFkZGl0aW9uYWwgcG9zdE1lc3NhZ2UoKSBBUEkgdGhh
dCBhY2NlcHRzIGEgTWVzc2FnZVBvcnQKKwogMjAwOS0wNi0yNSAgQWxiZXJ0IEouIFdvbmcgIDxh
andvbmdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAppbmRleCAx
NGJiZTE5Li4wNjQ3NWY5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
Q29udGV4dEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRl
eHRDdXN0b20uY3BwCkBAIC0zMCw3ICszMCwxMCBAQAogI2luY2x1ZGUgIkpTV29ya2VyQ29udGV4
dC5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01HbG9iYWxP
YmplY3QuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJKU01lc3Nh
Z2VDaGFubmVsQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU01lc3NhZ2VQb3J0LmgiCiAjaW5j
bHVkZSAiSlNXb3JrZXJMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkpTV29ya2VyTmF2aWdhdG9yLmgi
CiAjaW5jbHVkZSAiSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmgiCkBAIC0xMzgsNiArMTQx
LDE0IEBAIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjpzZXRJbnRlcnZhbChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGltcGwo
KS0+c2V0SW50ZXJ2YWwoYWN0aW9uLCBkZWxheSkpOwogfQogCisKKyNpZiBFTkFCTEUoQ0hBTk5F
TF9NRVNTQUdJTkcpCitKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6bWVzc2FnZUNoYW5uZWwoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU01l
c3NhZ2VDaGFubmVsQ29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOworfQorI2VuZGlmCisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAppbmRleCBmNGQzMDMzLi45NzA3NTE5IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcApAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5j
bHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIK
KyNpbmNsdWRlICJKU01lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiV29ya2VyLmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcAppbmRleCAzYTQxNDY3Li4xYzY0MTVi
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVs
Q29uc3RydWN0b3IuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2Fn
ZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAKQEAgLTMzLDkgKzMzLDExIEBACiAKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5o
IgogCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1
ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgogCiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogCkBAIC00OSwxNiArNTEsMjEgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKE1lc3NhZ2VDaGFu
bmVsQ29uc3RydWN0b3IpCiAgICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQogICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcigiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2Fs
bGVkIGFzIGEgZnVuY3Rpb24uIik7CiAKLSAgICAvLyBHZXQgdGhlIGRvY3VtZW50LgotICAgIEZy
YW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQot
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgLy8gR2V0IHRoZSBTY3JpcHRFeGVjdXRpb25Db250
ZXh0IChXb3JrZXJDb250ZXh0IG9yIERvY3VtZW50KQorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQgPSAwOworICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogcHJveHkg
PSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJldHJpZXZlKCk7CisgICAgaWYgKHByb3h5
KQorICAgICAgICBjb250ZXh0ID0gcHJveHktPndvcmtlckNvbnRleHQoKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZSgpOworICAgICAg
ICBpZiAoIWZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAg
ICAgY29udGV4dCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIH0KIAogICAgIC8vIE5vdGU6IGl0
J3MgT0sgdG8gbGV0IHRoaXMgUmVmUHRyIGdvIG91dCBvZiBzY29wZSBiZWNhdXNlIHdlIGFsc28g
Y2FsbAogICAgIC8vIFNldERPTVdyYXBwZXIoKSwgd2hpY2ggZWZmZWN0aXZlbHkgaG9sZHMgYSBy
ZWZlcmVuY2UgdG8gb2JqLgotICAgIFJlZlB0cjxNZXNzYWdlQ2hhbm5lbD4gb2JqID0gTWVzc2Fn
ZUNoYW5uZWw6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgUmVmUHRyPE1lc3NhZ2VDaGFubmVsPiBv
YmogPSBNZXNzYWdlQ2hhbm5lbDo6Y3JlYXRlKGNvbnRleHQpOwogCiAgICAgdjg6OkxvY2FsPHY4
OjpPYmplY3Q+IG1lc3NhZ2VDaGFubmVsID0gYXJncy5Ib2xkZXIoKTsKIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9D
cm9zc1RocmVhZENvcGllci5oCmluZGV4IGU3YjRjMGUuLjhlYmY2YmYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L0Nyb3NzVGhyZWFkQ29waWVyLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgQ3Jvc3NUaHJl
YWRDb3BpZXJfaAogCiAjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgpAQCAtNzMsNiArNzQsMTQgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB9CiAgICAgfTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFBhc3NPd25QdHI8VD4gPiB7Cisg
ICAgICAgIHR5cGVkZWYgUGFzc093blB0cjxUPiBUeXBlOworICAgICAgICBzdGF0aWMgVHlwZSBj
b3B5KGNvbnN0IFBhc3NPd25QdHI8VD4mIHJlZlB0cikKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIFBhc3NPd25QdHI8VD4oc3RhdGljX2Nhc3Q8VCo+KHJlZlB0ci5yZWxlYXNlKCkpKTsK
KyAgICAgICAgfQorICAgIH07CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jv
c3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBzdGQ6OmF1dG9fcHRyPFQ+ID4gewogICAgICAgICB0
eXBlZGVmIHN0ZDo6YXV0b19wdHI8VD4gVHlwZTsKICAgICAgICAgc3RhdGljIFR5cGUgY29weShj
b25zdCBzdGQ6OmF1dG9fcHRyPFQ+JiBhdXRvUHRyKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3Jr
ZXJzL0dlbmVyaWNXb3JrZXJUYXNrLmggYi9XZWJDb3JlL3dvcmtlcnMvR2VuZXJpY1dvcmtlclRh
c2suaAppbmRleCA5NmIwZTcwLi4zNjExZmVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMv
R2VuZXJpY1dvcmtlclRhc2suaAorKysgYi9XZWJDb3JlL3dvcmtlcnMvR2VuZXJpY1dvcmtlclRh
c2suaApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkNyb3NzVGhyZWFkQ29waWVyLmgiCiAj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPG1lbW9yeT4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KIApAQCAtNTgsNiArNTksMTAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB0eXBlZGVmIFBhc3NSZWZQdHI8VD4gUGFyYW1UeXBlOwogICAg
IH07CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgR2VuZXJpY1dvcmtlclRhc2tU
cmFpdHM8UGFzc093blB0cjxUPiA+IHsKKyAgICAgICAgdHlwZWRlZiBQYXNzT3duUHRyPFQ+IFBh
cmFtVHlwZTsKKyAgICB9OworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1Q
MT4KICAgICBjbGFzcyBHZW5lcmljV29ya2VyVGFzazEgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzayB7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJz
L1dvcmtlci5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAppbmRleCBhODEwZGRhLi4y
ZTAzZTNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAorKysgYi9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyLmNwcApAQCAtNzcsOSArNzcsMTggQEAgV29ya2VyOjp+V29ya2Vy
KCkKICAgICBtX2NvbnRleHRQcm94eS0+d29ya2VyT2JqZWN0RGVzdHJveWVkKCk7CiB9CiAKLXZv
aWQgV29ya2VyOjpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFdvcmtl
cjo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICBtX2NvbnRleHRQcm94eS0+cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQobWVzc2Fn
ZSk7CisgICAgcG9zdE1lc3NhZ2UobWVzc2FnZSwgMCwgZWMpOworfQorCit2b2lkIFdvcmtlcjo6
cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBNZXNzYWdlUG9ydCogbWVzc2FnZVBv
cnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIC8vIERpc2VudGFuZ2xlIHRoZSBwb3J0IGlu
IHByZXBhcmF0aW9uIGZvciBzZW5kaW5nIGl0IHRvIHRoZSByZW1vdGUgY29udGV4dC4KKyAgICBP
d25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBjaGFubmVsID0gbWVzc2FnZVBvcnQgPyBtZXNzYWdl
UG9ydC0+ZGlzZW50YW5nbGUoZWMpIDogMDsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2NvbnRleHRQcm94eS0+cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQobWVzc2FnZSwg
Y2hhbm5lbC5yZWxlYXNlKCkpOwogfQogCiB2b2lkIFdvcmtlcjo6dGVybWluYXRlKCkKQEAgLTE4
MCw5ICsxODksOSBAQCBib29sIFdvcmtlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFBy
ZXZlbnRlZCgpOwogfQogCi12b2lkIFdvcmtlcjo6ZGlzcGF0Y2hNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKK3ZvaWQgV29ya2VyOjpkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBwb3J0KQogewotICAgIFJlZlB0cjxFdmVu
dD4gZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2FnZSwgIiIsICIiLCAwLCAwKTsKKyAg
ICBSZWZQdHI8RXZlbnQ+IGV2dCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKG1lc3NhZ2UsICIiLCAi
IiwgMCwgcG9ydCk7CiAKICAgICBpZiAobV9vbk1lc3NhZ2VMaXN0ZW5lci5nZXQoKSkgewogICAg
ICAgICBldnQtPnNldFRhcmdldCh0aGlzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXIuaCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaAppbmRleCBiZDllNTU2Li4xZmNjOGJl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmgKKysrIGIvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlci5oCkBAIC01OCwxMSArNTgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIHZpcnR1YWwgV29ya2VyKiB0b1dvcmtlcigpIHsgcmV0dXJuIHRoaXM7IH0KIAotICAg
ICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgICAgIHZv
aWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2
b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYsIE1lc3NhZ2VQb3J0KiwgRXhjZXB0aW9uQ29k
ZSYpOwogCiAgICAgICAgIHZvaWQgdGVybWluYXRlKCk7CiAKLSAgICAgICAgdm9pZCBkaXNwYXRj
aE1lc3NhZ2UoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlKGNv
bnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+KTsKICAgICAgICAgdm9pZCBkaXNw
YXRjaEVycm9yRXZlbnQoKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNv
bnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5pZGwgYi9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyLmlkbAppbmRleCAyZWY5YjYyLi5lMDc4ZTdjIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyLmlkbAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmlkbApA
QCAtMzAsNyArMzAsOCBAQCBtb2R1bGUgdGhyZWFkcyB7CiAKICAgICAgICAgYXR0cmlidXRlIEV2
ZW50TGlzdGVuZXIgb25lcnJvcjsKICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25t
ZXNzYWdlOwotICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGluIERPTVN0cmluZyBtZXNzYWdlKTsK
KyAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShpbiBET01TdHJpbmcgbWVzc2FnZSwgaW4gW09wdGlv
bmFsXSBNZXNzYWdlUG9ydCBtZXNzYWdlUG9ydCkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNl
cHRpb24pOwogCiAgICAgICAgIHZvaWQgdGVybWluYXRlKCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250
ZXh0LmNwcAppbmRleCBmZDA1MDYyLi45YjAxOWI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyQ29udGV4dC5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQu
Y3BwCkBAIC0xMzAsNiArMTMwLDE0IEBAIGJvb2wgV29ya2VyQ29udGV4dDo6aGFzUGVuZGluZ0Fj
dGl2aXR5KCkgY29uc3QKICAgICAgICAgaWYgKGl0ZXItPmZpcnN0LT5oYXNQZW5kaW5nQWN0aXZp
dHkoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworICAgIC8vIEtlZXAgdGhl
IHdvcmtlciBhY3RpdmUgYXMgbG9uZyBhcyB0aGVyZSBpcyBhIE1lc3NhZ2VQb3J0IHdpdGggcGVu
ZGluZyBhY3Rpdml0eSBvciB0aGF0IGlzIHJlbW90ZWx5IGVudGFuZ2xlZC4KKyAgICBIYXNoU2V0
PE1lc3NhZ2VQb3J0Kj46OmNvbnN0X2l0ZXJhdG9yIG1lc3NhZ2VQb3J0c0VuZCA9IG1lc3NhZ2VQ
b3J0cygpLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxNZXNzYWdlUG9ydCo+Ojpjb25zdF9pdGVy
YXRvciBpdGVyID0gbWVzc2FnZVBvcnRzKCkuYmVnaW4oKTsgaXRlciAhPSBtZXNzYWdlUG9ydHNF
bmQ7ICsraXRlcikgeworICAgICAgICBpZiAoKCppdGVyKS0+aGFzUGVuZGluZ0FjdGl2aXR5KCkg
fHwgKCgqaXRlciktPmlzRW50YW5nbGVkKCkgJiYgISgqaXRlciktPmxvY2FsbHlFbnRhbmdsZWRQ
b3J0KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCkBAIC0xNTUsMTIgKzE2MywyMCBAQCB2b2lkIFdvcmtlckNvbnRleHQ6OnNjcmlw
dEltcG9ydGVkKHVuc2lnbmVkIGxvbmcsIGNvbnN0IFN0cmluZyYpCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAotdm9pZCBXb3JrZXJDb250ZXh0Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCit2b2lkIFdvcmtlckNvbnRleHQ6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcG9zdE1lc3NhZ2UobWVzc2FnZSwg
MCwgZWMpOworfQorCit2b2lkIFdvcmtlckNvbnRleHQ6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgTWVzc2FnZVBvcnQqIHBvcnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IGlmIChtX2Nsb3NpbmcpCiAgICAgICAgIHJldHVybjsKLQotICAgIG1fdGhyZWFkLT53b3JrZXJP
YmplY3RQcm94eSgpLnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QobWVzc2FnZSk7CisgICAgLy8g
RGlzZW50YW5nbGUgdGhlIHBvcnQgaW4gcHJlcGFyYXRpb24gZm9yIHNlbmRpbmcgaXQgdG8gdGhl
IHJlbW90ZSBjb250ZXh0LgorICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IGNoYW5uZWwg
PSBwb3J0ID8gcG9ydC0+ZGlzZW50YW5nbGUoZWMpIDogMDsKKyAgICBpZiAoZWMpCisgICAgICAg
IHJldHVybjsKKyAgICBtX3RocmVhZC0+d29ya2VyT2JqZWN0UHJveHkoKS5wb3N0TWVzc2FnZVRv
V29ya2VyT2JqZWN0KG1lc3NhZ2UsIGNoYW5uZWwucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBXb3Jr
ZXJDb250ZXh0OjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIsIGJvb2wpCkBAIC0yMzks
MTEgKzI1NSwxMSBAQCB2b2lkIFdvcmtlckNvbnRleHQ6OmNsZWFySW50ZXJ2YWwoaW50IHRpbWVv
dXRJZCkKICAgICBET01UaW1lcjo6cmVtb3ZlQnlJZChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IHRpbWVvdXRJZCk7CiB9CiAKLXZvaWQgV29ya2VyQ29udGV4dDo6ZGlzcGF0Y2hNZXNzYWdlKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgV29ya2VyQ29udGV4dDo6ZGlzcGF0Y2hNZXNzYWdl
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydCkKIHsK
ICAgICAvLyBTaW5jZSBjbG9zZSgpIHN0b3BzIHRoZSB0aHJlYWQgZXZlbnQgbG9vcCwgdGhpcyBz
aG91bGQgbm90IGV2ZXIgZ2V0IGNhbGxlZCB3aGlsZSBjbG9zaW5nLgogICAgIEFTU0VSVCghbV9j
bG9zaW5nKTsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKG1l
c3NhZ2UsICIiLCAiIiwgMCwgMCk7CisgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZl
bnQ6OmNyZWF0ZShtZXNzYWdlLCAiIiwgIiIsIDAsIHBvcnQpOwogCiAgICAgaWYgKG1fb25tZXNz
YWdlTGlzdGVuZXIuZ2V0KCkpIHsKICAgICAgICAgZXZ0LT5zZXRUYXJnZXQodGhpcyk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oIGIvV2ViQ29yZS93b3JrZXJz
L1dvcmtlckNvbnRleHQuaAppbmRleCBjZTc4MmY4Li5iY2VjNzY5IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJD
b250ZXh0LmgKQEAgLTgwLDcgKzgwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBwb3N0VGFzayhQYXNzUmVmUHRyPFRhc2s+KTsgLy8gRXhlY3V0ZXMgdGhl
IHRhc2sgb24gY29udGV4dCdzIHRocmVhZCBhc3luY2hyb25vdXNseS4KIAotCiAgICAgICAgIC8v
IFdvcmtlckdsb2JhbFNjb3BlCiAgICAgICAgIFdvcmtlckNvbnRleHQqIHNlbGYoKSB7IHJldHVy
biB0aGlzOyB9CiAgICAgICAgIFdvcmtlckxvY2F0aW9uKiBsb2NhdGlvbigpIGNvbnN0OwpAQCAt
OTAsOSArODksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgaW1wb3J0U2Ny
aXB0cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgdXJscywgY29uc3QgU3RyaW5nJiBjYWxsZXJVUkws
IGludCBjYWxsZXJMaW5lLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIFdvcmtlck5hdmlnYXRv
ciogbmF2aWdhdG9yKCkgY29uc3Q7CiAKLQogICAgICAgICAvLyBEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZQotICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7
CisgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYp
OworICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYsIE1lc3NhZ2VQb3J0Kiwg
RXhjZXB0aW9uQ29kZSYpOwogICAgICAgICB2b2lkIHNldE9ubWVzc2FnZShQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbm1lc3NhZ2VMaXN0ZW5lciA9IGV2ZW50
TGlzdGVuZXI7IH0KICAgICAgICAgRXZlbnRMaXN0ZW5lciogb25tZXNzYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vbm1lc3NhZ2VMaXN0ZW5lci5nZXQoKTsgfQogCkBAIC0xMTEsNyArMTEwLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5n
LCBMaXN0ZW5lclZlY3Rvcj4gRXZlbnRMaXN0ZW5lcnNNYXA7CiAgICAgICAgIEV2ZW50TGlzdGVu
ZXJzTWFwJiBldmVudExpc3RlbmVycygpIHsgcmV0dXJuIG1fZXZlbnRMaXN0ZW5lcnM7IH0KIAot
ICAgICAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZShjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgdm9p
ZCBkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4p
OwogCiAgICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgZm9yIEdDIG1hcmtpbmcuIFNl
ZSBKU1dvcmtlckNvbnRleHQ6Om1hcmsoKSBpbgogICAgICAgICAvLyBKU1dvcmtlckNvbnRleHRD
dXN0b20uY3BwLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRs
IGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCmluZGV4IDlkNWFhNzkuLjcwOTQx
MGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAorKysgYi9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKQEAgLTQxLDcgKzQxLDYgQEAgbW9kdWxl
IHRocmVhZHMgewogI2VuZGlmCiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbUmVwbGFjZWFi
bGVdIFdvcmtlckxvY2F0aW9uIGxvY2F0aW9uOwogICAgICAgICB2b2lkIGNsb3NlKCk7Ci0gICAg
ICAgIC8vICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25jbG9zZTsKICAgICAgICAg
Ly8gICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOwogCiAgICAgICAgIC8v
IFdvcmtlclV0aWxzCkBAIC01MiwxMCArNTEsMTAgQEAgbW9kdWxlIHRocmVhZHMgewogCiAKICAg
ICAgICAgLy8gRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUKLSAgICAgICAgdm9pZCBwb3N0TWVz
c2FnZShpbiBET01TdHJpbmcgbWVzc2FnZSk7CisgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoaW4g
RE9NU3RyaW5nIG1lc3NhZ2UsIGluIFtPcHRpb25hbF0gTWVzc2FnZVBvcnQgbWVzc2FnZVBvcnQp
CisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgICAgICAgICAgYXR0
cmlidXRlIEV2ZW50TGlzdGVuZXIgb25tZXNzYWdlOwogCi0KICAgICAgICAgLy8gVGltZXJzCiAg
ICAgICAgIFtDdXN0b21dIGxvbmcgc2V0VGltZW91dChpbiBUaW1lb3V0SGFuZGxlciBoYW5kbGVy
LCBpbiBsb25nIHRpbWVvdXQpOwogICAgICAgICAvLyBbQ3VzdG9tXSBsb25nIHNldFRpbWVvdXQo
aW4gRE9NU3RyaW5nIGNvZGUsIGluIGxvbmcgdGltZW91dCk7CkBAIC04MCw2ICs3OSw5IEBAIG1v
ZHVsZSB0aHJlYWRzIHsKICAgICAgICAgYXR0cmlidXRlIE1lc3NhZ2VFdmVudENvbnN0cnVjdG9y
IE1lc3NhZ2VFdmVudDsKICAgICAgICAgYXR0cmlidXRlIFdvcmtlckxvY2F0aW9uQ29uc3RydWN0
b3IgV29ya2VyTG9jYXRpb247CiAKKyNpZiBFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcKKyAgICAg
ICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXJdIE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3Ig
TWVzc2FnZUNoYW5uZWw7CisjZW5kaWYKICAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0
ZXJdIFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IgWE1MSHR0cFJlcXVlc3Q7CiAgICAgfTsKIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHRQcm94eS5oIGIvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckNvbnRleHRQcm94eS5oCmluZGV4IGM4ZjU3NjEuLmY0MjUyN2UgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0UHJveHkuaAorKysgYi9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dFByb3h5LmgKQEAgLTMzLDkgKzMzLDEyIEBACiAKICNp
ZiBFTkFCTEUoV09SS0VSUykKIAorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3MgTWVzc2FnZVBvcnRD
aGFubmVsOwogICAgIGNsYXNzIFN0cmluZzsKICAgICBjbGFzcyBXb3JrZXI7CiAKQEAgLTUwLDcg
KzUzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCB0ZXJt
aW5hdGVXb3JrZXJDb250ZXh0KCkgPSAwOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVz
c2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBTdHJpbmcmKSA9IDA7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBTdHJpbmcmLCBQYXNzT3duUHRy
PE1lc3NhZ2VQb3J0Q2hhbm5lbD4pID0gMDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVu
ZGluZ0FjdGl2aXR5KCkgY29uc3QgPSAwOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyTWVzc2FnaW5nUHJveHkuY3BwIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2lu
Z1Byb3h5LmNwcAppbmRleCBhNmQwZDVkLi4wNGU2MWMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJNZXNzYWdpbmdQcm94eS5jcHAKQEAgLTQ0LDE0ICs0NCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIE1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXNz
YWdlV29ya2VyQ29udGV4dFRhc2s+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8TWVzc2FnZVdvcmtlckNvbnRleHRUYXNrPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5lbCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZVdvcmtlckNvbnRleHRU
YXNrKG1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlV29ya2Vy
Q29udGV4dFRhc2sobWVzc2FnZSwgY2hhbm5lbCkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBN
ZXNzYWdlV29ya2VyQ29udGV4dFRhc2soY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgIE1lc3Nh
Z2VXb3JrZXJDb250ZXh0VGFzayhjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVz
c2FnZVBvcnRDaGFubmVsPiBjaGFubmVsKQogICAgICAgICA6IG1fbWVzc2FnZShtZXNzYWdlLmNv
cHkoKSkKKyAgICAgICAgLCBtX2NoYW5uZWwoY2hhbm5lbCkKICAgICB7CiAgICAgfQogCkBAIC01
OSw0MSArNjAsNTIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVChzY3JpcHRDb250
ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7CiAgICAgICAgIFdvcmtlckNvbnRleHQqIGNvbnRleHQg
PSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oc2NyaXB0Q29udGV4dCk7Ci0KLSAgICAgICAg
Y29udGV4dC0+ZGlzcGF0Y2hNZXNzYWdlKG1fbWVzc2FnZSk7Ci0KKyAgICAgICAgUmVmUHRyPE1l
c3NhZ2VQb3J0PiBwb3J0OworICAgICAgICBpZiAobV9jaGFubmVsKSB7CisgICAgICAgICAgICBw
b3J0ID0gTWVzc2FnZVBvcnQ6OmNyZWF0ZSgqc2NyaXB0Q29udGV4dCk7CisgICAgICAgICAgICBw
b3J0LT5lbnRhbmdsZShtX2NoYW5uZWwucmVsZWFzZSgpKTsKKyAgICAgICAgfQorICAgICAgICBj
b250ZXh0LT5kaXNwYXRjaE1lc3NhZ2UobV9tZXNzYWdlLCBwb3J0LnJlbGVhc2UoKSk7CiAgICAg
ICAgIGNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJPYmplY3RQcm94eSgpLmNvbmZpcm1NZXNzYWdl
RnJvbVdvcmtlck9iamVjdChjb250ZXh0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSk7CiAgICAgfQog
CiBwcml2YXRlOgogICAgIFN0cmluZyBtX21lc3NhZ2U7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0
Q2hhbm5lbD4gbV9jaGFubmVsOwogfTsKIAogY2xhc3MgTWVzc2FnZVdvcmtlclRhc2sgOiBwdWJs
aWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8TWVzc2FnZVdvcmtlclRhc2s+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxNZXNzYWdlV29ya2VyVGFzaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFz
c093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IGNoYW5uZWwsIFdvcmtlck1lc3NhZ2luZ1Byb3h5
KiBtZXNzYWdpbmdQcm94eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVz
c2FnZVdvcmtlclRhc2sobWVzc2FnZSwgbWVzc2FnaW5nUHJveHkpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBNZXNzYWdlV29ya2VyVGFzayhtZXNzYWdlLCBjaGFubmVsLCBtZXNzYWdp
bmdQcm94eSkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBNZXNzYWdlV29ya2VyVGFzayhjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkK
KyAgICBNZXNzYWdlV29ya2VyVGFzayhjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NPd25QdHI8
TWVzc2FnZVBvcnRDaGFubmVsPiBjaGFubmVsLCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2Fn
aW5nUHJveHkpCiAgICAgICAgIDogbV9tZXNzYWdlKG1lc3NhZ2UuY29weSgpKQorICAgICAgICAs
IG1fY2hhbm5lbChjaGFubmVsKQogICAgICAgICAsIG1fbWVzc2FnaW5nUHJveHkobWVzc2FnaW5n
UHJveHkpCiAgICAgewogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KikKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCkKICAgICB7CiAgICAgICAgIFdvcmtlciog
d29ya2VyT2JqZWN0ID0gbV9tZXNzYWdpbmdQcm94eS0+d29ya2VyT2JqZWN0KCk7CiAgICAgICAg
IGlmICghd29ya2VyT2JqZWN0IHx8IG1fbWVzc2FnaW5nUHJveHktPmFza2VkVG9UZXJtaW5hdGUo
KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB3b3JrZXJPYmplY3QtPmRpc3BhdGNo
TWVzc2FnZShtX21lc3NhZ2UpOworICAgICAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQ7Cisg
ICAgICAgIGlmIChtX2NoYW5uZWwpIHsKKyAgICAgICAgICAgIHBvcnQgPSBNZXNzYWdlUG9ydDo6
Y3JlYXRlKCpzY3JpcHRDb250ZXh0KTsKKyAgICAgICAgICAgIHBvcnQtPmVudGFuZ2xlKG1fY2hh
bm5lbC5yZWxlYXNlKCkpOworICAgICAgICB9CisgICAgICAgIHdvcmtlck9iamVjdC0+ZGlzcGF0
Y2hNZXNzYWdlKG1fbWVzc2FnZSwgcG9ydC5yZWxlYXNlKCkpOwogICAgIH0KIAogcHJpdmF0ZToK
ICAgICBTdHJpbmcgbV9tZXNzYWdlOworICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IG1f
Y2hhbm5lbDsKICAgICBXb3JrZXJNZXNzYWdpbmdQcm94eSogbV9tZXNzYWdpbmdQcm94eTsKIH07
CiAKQEAgLTIwNSwyMSArMjE3LDIxIEBAIHZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnN0YXJ0
V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluCiAgICAgdGhy
ZWFkLT5zdGFydCgpOwogfQogCi12b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0TWVzc2Fn
ZVRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgV29ya2VyTWVzc2Fn
aW5nUHJveHk6OnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5lbCkKIHsKLSAgICBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKE1lc3NhZ2VXb3JrZXJUYXNrOjpjcmVhdGUobWVz
c2FnZSwgdGhpcykpOworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soTWVz
c2FnZVdvcmtlclRhc2s6OmNyZWF0ZShtZXNzYWdlLCBjaGFubmVsLCB0aGlzKSk7CiB9CiAKLXZv
aWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RNZXNzYWdl
VG9Xb3JrZXJDb250ZXh0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdl
UG9ydENoYW5uZWw+IGNoYW5uZWwpCiB7CiAgICAgaWYgKG1fYXNrZWRUb1Rlcm1pbmF0ZSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fd29ya2VyVGhyZWFkKSB7CiAgICAgICAgICsrbV91
bmNvbmZpcm1lZE1lc3NhZ2VDb3VudDsKLSAgICAgICAgbV93b3JrZXJUaHJlYWQtPnJ1bkxvb3Ao
KS5wb3N0VGFzayhNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s6OmNyZWF0ZShtZXNzYWdlKSk7Cisg
ICAgICAgIG1fd29ya2VyVGhyZWFkLT5ydW5Mb29wKCkucG9zdFRhc2soTWVzc2FnZVdvcmtlckNv
bnRleHRUYXNrOjpjcmVhdGUobWVzc2FnZSwgY2hhbm5lbCkpOwogICAgIH0gZWxzZQotICAgICAg
ICBtX3F1ZXVlZEVhcmx5VGFza3MuYXBwZW5kKE1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzazo6Y3Jl
YXRlKG1lc3NhZ2UpKTsKKyAgICAgICAgbV9xdWV1ZWRFYXJseVRhc2tzLmFwcGVuZChNZXNzYWdl
V29ya2VyQ29udGV4dFRhc2s6OmNyZWF0ZShtZXNzYWdlLCBjaGFubmVsKSk7CiB9CiAKIHZvaWQg
V29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChQYXNz
UmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYg
bW9kZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5o
IGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKaW5kZXggN2ZjOTc5Ny4u
Mjk4ZDg2OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5
LmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKQEAgLTM0LDEy
ICszNCwxNCBAQAogI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCiAjaW5jbHVkZSAiV29y
a2VyT2JqZWN0UHJveHkuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCisgICAgY2xhc3MgTWVzc2FnZVBvcnRDaGFubmVsOwogICAgIGNsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgY2xhc3MgU3RyaW5nOwogICAgIGNsYXNzIFdvcmtlcjsK
QEAgLTUzLDEzICs1NSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIChPbmx5
IHVzZSB0aGVzZSBtZXRob2RzIGluIHRoZSB3b3JrZXIgb2JqZWN0IHRocmVhZC4pCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBzdGFydFdvcmtlckNvbnRleHQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBj
b25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlKTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBT
dHJpbmcmLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4pOwogICAgICAgICB2aXJ0dWFs
IGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB3
b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKIAogICAgICAgICAvLyBJbXBsZW1lbnRhdGlvbnMgb2Yg
V29ya2VyT2JqZWN0UHJveHkuCiAgICAgICAgIC8vIChPbmx5IHVzZSB0aGVzZSBtZXRob2RzIGlu
IHRoZSB3b3JrZXIgY29udGV4dCB0aHJlYWQuKQotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdE1l
c3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmLCBQYXNzT3du
UHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4pOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2Vw
dGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51
bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcG9z
dENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoTWVzc2FnZURlc3RpbmF0aW9uLCBNZXNzYWdl
U291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1i
ZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGNvbmZp
cm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChib29sIGhhc1BlbmRpbmdBY3Rpdml0eSk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyT2JqZWN0UHJveHkuaCBiL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJPYmplY3RQcm94eS5oCmluZGV4IDNiODYwMjguLjJlMTQ1ZWMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJPYmplY3RQcm94eS5oCisrKyBiL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJPYmplY3RQcm94eS5oCkBAIC0zMywxMCArMzMsMTMgQEAKIAogI2lmIEVOQUJM
RShXT1JLRVJTKQogCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwogI2luY2x1ZGUgIkNv
bnNvbGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAgY2xhc3MgTWVzc2FnZVBvcnRD
aGFubmVsOwogICAgIGNsYXNzIFN0cmluZzsKIAogICAgIC8vIEEgcHJveHkgdG8gdGFsayB0byB0
aGUgd29ya2VyIG9iamVjdC4KQEAgLTQ0LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+V29ya2VyT2JqZWN0UHJveHkoKSB7fQogCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmlu
ZyYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3Qo
Y29uc3QgU3RyaW5nJiwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+KSA9IDA7CiAKICAg
ICAgICAgdmlydHVhbCB2b2lkIHBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJM
KSA9IDA7CiAK
</data>
<flag name="review"
          id="16453"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32029</attachid>
            <date>2009-06-29 18:19:31 -0700</date>
            <delta_ts>2009-06-30 10:04:12 -0700</delta_ts>
            <desc>Patch addressing Levin&apos;s comments</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>36515</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzOWU0NDUzLi40NmRmNmE1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMDktMDYt
MjUgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI1NDM1PgorCisgICAgICAgIEFkZGVkIHRlc3RzIGZvciBzZW5kaW5n
IE1lc3NhZ2VQb3J0cyB0by9mcm9tIHdvcmtlcnMuCisKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMv
cmVzb3VyY2VzL3dvcmtlci1jbG9uZXBvcnQuanM6IEFkZGVkLgorICAgICAgICAob25tZXNzYWdl
KToKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1tZXNzYWdlcG9ydC5q
czogQWRkZWQuCisgICAgICAgIChvbm1lc3NhZ2UpOgorICAgICAgICAocGluZ0JhY2spOgorICAg
ICAgICAqIGZhc3Qvd29ya2Vycy93b3JrZXItY2xvbmVwb3J0LWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC93b3JrZXJzL3dvcmtlci1jbG9uZXBvcnQuaHRtbC1kaXNhYmxlZDog
QWRkZWQuCisgICAgICAgIFRlc3RzIGZvciBjbG9uaW5nIGEgcG9ydCB3aGlsZSBtZXNzYWdlcyBh
cmUgc2VudCBmcm9tIGFub3RoZXIgdGhyZWFkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy93b3Jr
ZXItbWVzc2FnZXBvcnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtl
cnMvd29ya2VyLW1lc3NhZ2Vwb3J0Lmh0bWwtZGlzYWJsZWQ6IEFkZGVkLgorICAgICAgICBHZW5l
cmFsIHRlc3RzIGZvciBzZW5kaW5nIG1lc3NhZ2VzIHRvIHdvcmtlcnMgdmlhIG1lc3NhZ2UgcG9y
dHMuCisgICAgICAgICogZmFzdC93b3JrZXJzL3dvcmtlci1tZXNzYWdlcG9ydC1nYy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy93b3JrZXItbWVzc2FnZXBvcnQt
Z2MuaHRtbC1kaXNhYmxlZDogQWRkZWQuCisgICAgICAgIFRlc3RzIHRvIGVuc3VyZSBXb3JrZXJz
IGRvbid0IHNodXQgZG93biB3aGVuIHJlYWNoYWJsZSBvbmx5IHZpYSBNZXNzYWdlUG9ydHMuCisK
IDIwMDktMDYtMjUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvcmVzb3VyY2VzL3dvcmtlci1jbG9uZXBvcnQuanMgYi9MYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvcmVzb3VyY2VzL3dvcmtlci1jbG9uZXBvcnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNTVmMDNiYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLWNsb25lcG9ydC5qcwpAQCAtMCwwICsxLDE3IEBA
Citvbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICBpZiAoZXZ0LmRhdGEuaW5kZXhPZigi
cG9zdEJhY2sgIikgPT0gMCkgeworICAgICAgICBpZiAoIWV2dC5tZXNzYWdlUG9ydCkgeworICAg
ICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUxVUkU6IE5vIE1lc3NhZ2VQb3J0IHdpdGggcG9zdEJh
Y2sgY29tbWFuZCIpOworICAgICAgICB9CisgICAgICAgIHZhciBzdHJpbmdzID0gZXZ0LmRhdGEu
c3BsaXQoIiAiLCAyKTsKKyAgICAgICAgdmFyIG51bUl0ZW1zID0gcGFyc2VJbnQoc3RyaW5nc1sx
XSk7CisgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBSZWNlaXZlZCByZXF1ZXN0IGZvciAiICsg
bnVtSXRlbXMgKyAiIG1lc3NhZ2VzIik7CisgICAgICAgIGZvciAodmFyIGkgPSAwIDsgaSA8IG51
bUl0ZW1zIDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgbXNnID0gIiIgKyBpOworICAgICAgICAg
ICAgZXZ0Lm1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKG1zZyk7CisgICAgICAgIH0KKyAgICAgICAg
cG9zdE1lc3NhZ2UoInBvc3RCYWNrRG9uZSIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHBvc3RN
ZXNzYWdlKCJGQUlMVVJFOiB1bmtub3duIG1lc3NhZ2U6ICIgKyBldnQuZGF0YSk7CisgICAgfQor
fQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy93b3JrZXIt
bWVzc2FnZXBvcnQuanMgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtl
ci1tZXNzYWdlcG9ydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDBm
MDBjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNl
cy93b3JrZXItbWVzc2FnZXBvcnQuanMKQEAgLTAsMCArMSw0MCBAQAorb25tZXNzYWdlID0gZnVu
Y3Rpb24oZXZ0KSB7CisgICAgaWYgKGV2dC5kYXRhID09ICJwb3J0IikgeworICAgICAgICBpZiAo
ZXZ0Lm1lc3NhZ2VQb3J0KSB7CisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogUmVjZWl2
ZWQgbWVzc2FnZSBwb3J0Iik7CisgICAgICAgICAgICBldnQubWVzc2FnZVBvcnQub25tZXNzYWdl
ID0gcGluZ0JhY2s7CisgICAgICAgICAgICBldnQubWVzc2FnZVBvcnQuc3RhcnQoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBEaWQgbm90IHJlY2Vp
dmUgZXhwZWN0ZWQgTWVzc2FnZVBvcnQiKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZXZ0
LmRhdGEgPT0gIm5vcG9ydCIpIHsKKyAgICAgICAgaWYgKGV2dC5tZXNzYWdlUG9ydCkgeworICAg
ICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IFJlY2VpdmVkIG1lc3NhZ2UgcG9ydCIpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGV2dC5tZXNzYWdl
UG9ydCA9IG51bGwgYXMgZXhwZWN0ZWQiKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZXZ0
LmRhdGEgPT0gInNwYW0iKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwIDsgaSA8IDEwMDAgOyBp
KyspIHsKKyAgICAgICAgICAgIGV2dC5tZXNzYWdlUG9ydC5wb3N0TWVzc2FnZShpKTsKKyAgICAg
ICAgfQorICAgICAgICBwb3N0TWVzc2FnZSgic3BhbURvbmUiKTsKKyAgICB9IGVsc2UgaWYgKGV2
dC5kYXRhID09ICJnZXRwb3J0IikgeworICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdl
Q2hhbm5lbCgpOworICAgICAgICBwb3N0TWVzc2FnZSgicG9ydCIsIGNoYW5uZWwucG9ydDEpOwor
ICAgICAgICBjaGFubmVsLnBvcnQyLm9ubWVzc2FnZSA9IHBpbmdCYWNrOworICAgICAgICBjaGFu
bmVsLnBvcnQyLnN0YXJ0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcG9zdE1lc3NhZ2UoIlVu
a25vd24gbWVzc2FnZToiICsgZXZ0LmRhdGEpOworICAgIH0KKworfQorCitmdW5jdGlvbiBwaW5n
QmFjayhldnQpIHsKKyAgICAvLyBNYWtlIHN1cmUgd2UgZ290IHRoZSBleHBlY3RlZCBkYXRhIGFu
ZCBzZW5kIGEgcmV0dXJuIG1lc3NhZ2Ugb3ZlcgorICAgIC8vIHRoZSBwb3J0LgorICAgIGlmIChl
dnQuZGF0YSA9PSAicGluZyIpIHsKKyAgICAgICAgZXZ0LnRhcmdldC5wb3N0TWVzc2FnZSgicG9u
ZyIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB1bmtub3duIG1l
c3NhZ2U6ICIgKyBldnQuZGF0YSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3dvcmtlci1jbG9uZXBvcnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3dvcmtlci1jbG9uZXBvcnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMDZmYmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNsb25lcG9ydC1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSw3IEBACitUZXN0IE1lc3NhZ2VQb3J0IG1lc3NhZ2luZy9lbnRhbmdsZS9kZXRhbmdsZSBhY3Jv
c3MgdGhyZWFkcy4gU2hvdWxkIHByaW50ICJTVUNDRVNTIiB3aGVuIGRvbmUuCisKK1BBU1M6IFJl
Y2VpdmVkIHJlcXVlc3QgZm9yIDUwMDAwIG1lc3NhZ2VzCitQQVNTOiBwb3N0QmFjayBjb21wbGV0
ZSwgY2xvbmVkID4gMTAwMCB0aW1lcy4KK1NVQ0NFU1MgLSByZWNlaXZlZCA1MDAwMCBtZXNzYWdl
cy4KK0RPTkUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1j
bG9uZXBvcnQuaHRtbC1kaXNhYmxlZCBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXIt
Y2xvbmVwb3J0Lmh0bWwtZGlzYWJsZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZjVkMmM2MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93
b3JrZXItY2xvbmVwb3J0Lmh0bWwtZGlzYWJsZWQKQEAgLTAsMCArMSwxMDMgQEAKKzxib2R5Pgor
PHA+VGVzdCBNZXNzYWdlUG9ydCBtZXNzYWdpbmcvZW50YW5nbGUvZGV0YW5nbGUgYWNyb3NzIHRo
cmVhZHMuIFNob3VsZCBwcmludCAiU1VDQ0VTUyIgd2hlbiBkb25lLjwvcD4KKzxkaXYgaWQ9cmVz
dWx0PjwvZGl2PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+
IjsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7Cit9CisKKwordmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsK
K3ZhciBudW1NZXNzYWdlcyA9IDUwMDAwOworCisvLyBDcmVhdGUgYSBjaGFubmVsIHdoaWNoIHdl
IHdpbGwgdXNlIHRvIGNsb25lIGFuZCByZS1jbG9uZSBvbmUgZW5kIG9mIGEKKy8vIE1lc3NhZ2VD
aGFubmVsLgordmFyIGNsb25lQ2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOwordmFyIHN0
b3BDbG9uaW5nID0gZmFsc2U7CitjbG9uZUNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gY2xvbmVD
aGFubmVsLnBvcnQyLm9ubWVzc2FnZSA9IHJlc2VuZFBvcnQ7CitjbG9uZUNoYW5uZWwucG9ydDEu
c3RhcnQoKTsKK2Nsb25lQ2hhbm5lbC5wb3J0Mi5zdGFydCgpOworY2xvbmVDaGFubmVsLnBvcnQx
LnBvc3RNZXNzYWdlKCIiLCBjaGFubmVsLnBvcnQyKTsKKworLy8gQ3JlYXRlIHdvcmtlciB3aXRo
IG90aGVyIGVuZCBvZiBwb3J0IGFuZCBoYXZlIGl0IHNlbmQgbWVzc2FnZXMgYmFjayB0byB1cwor
Ly8gd2hpbGUgd2UgY2xvbmUgb3VyIGVuZCBvZiB0aGUgcG9ydCByZXBlYXRlZGx5LgordmFyIHdv
cmtlciA9IG5ldyBXb3JrZXIoInJlc291cmNlcy93b3JrZXItY2xvbmVwb3J0LmpzIik7Cit3b3Jr
ZXIucG9zdE1lc3NhZ2UoInBvc3RCYWNrICIgKyBudW1NZXNzYWdlcywgY2hhbm5lbC5wb3J0MSk7
CisKKy8vIFRlc3QgcG9zdGluZyBiYWNrIDUwMDAwIG1lc3NhZ2VzLCBtYWtlIHN1cmUgb3JkZXJp
bmcgaXMgZmluZQord29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkgeworICAgIGlmIChl
dnQuZGF0YSA9PSAicG9zdEJhY2tEb25lIikgeworICAgICAgICBzdG9wQ2xvbmluZyA9IHRydWU7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTG9nIG1lc3NhZ2UgZnJvbSB3b3JrZXIKKyAgICAg
ICAgbG9nKGV2dC5kYXRhKTsKKyAgICB9Cit9CisKKy8vIEtlZXAgY2xvbmluZyB0aGUgcGFzc2Vk
IHBvcnQgdW50aWwgd2UncmUgdG9sZCB0byBzdG9wLgordmFyIG51bUNsb25lcyA9IDA7CitmdW5j
dGlvbiByZXNlbmRQb3J0KGV2dCkKK3sKKyAgICBpZiAoIXN0b3BDbG9uaW5nKSB7CisgICAgICAg
IG51bUNsb25lcysrOworICAgICAgICBldnQudGFyZ2V0LnBvc3RNZXNzYWdlKCIiLCBldnQubWVz
c2FnZVBvcnQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChudW1DbG9uZXMgPCAxMDAwKSB7
CisgICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgY2xvbmUgYXQgbGVhc3QgMTAwMCB0aW1lcywg
dGhlbiB0aGVyZSdzIHNvbWV0aGluZyBhbWlzcy4KKyAgICAgICAgICAgIGxvZygiRkFJTDogcG9z
dEJhY2sgY29tcGxldGUsIGJ1dCBvbmx5IGNsb25lZCAiICsgbnVtQ2xvbmVzICsgIiB0aW1lcy4i
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZygiUEFTUzogcG9zdEJhY2sgY29t
cGxldGUsIGNsb25lZCA+IDEwMDAgdGltZXMuIik7CisgICAgICAgIH0KKyAgICAgICAgLy8gTWFr
ZSBzdXJlIHRoZSBtZXNzYWdlcyBhcnJpdmVkIGluIG9yZGVyLgorICAgICAgICB2YXIgaXRlbU51
bSA9IDA7CisgICAgICAgIC8vIFF1ZXVlIHVwIGEgdGFzayB0byBleGVjdXRlIG9uY2UgdGhlIG1l
c3NhZ2VzIGhhdmUgYmVlbiBwcm9jZXNzZWQuIFRoZSB0aW1lb3V0IHZhbHVlIGRvZXNuJ3QgbWF0
dGVyLCBzaW5jZSB0aW1lcnMgd29uJ3QgZmlyZSB1bnRpbCB0aGUgbWVzc2FnZSBxdWV1ZSBpcyBj
bGVhcmVkLgorICAgICAgICB2YXIgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgbG9nKCJGQUlMVVJFOiBSZWNlaXZlZDogIiArIGl0ZW1OdW0gKyAiIGV2ZW50cyAt
IGV4cGVjdGVkOiAiICsgbnVtTWVzc2FnZXMpOworICAgICAgICB9LCAxMCk7CisgICAgICAgIGV2
dC5tZXNzYWdlUG9ydC5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAg
dmFyIGRvbmUgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChldmVudC5kYXRhID09IGl0ZW1OdW0p
IHsKKyAgICAgICAgICAgICAgICBpdGVtTnVtKys7CisgICAgICAgICAgICAgICAgaWYgKGl0ZW1O
dW0gPT0gbnVtTWVzc2FnZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nKCJTVUNDRVNTIC0g
cmVjZWl2ZWQgIiArIG51bU1lc3NhZ2VzICsgIiBtZXNzYWdlcy4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBsb2coIkZBSUxVUkU6IE91dCBvZiBvcmRlciBtZXNzYWdlOiBl
eHBlY3RlZCAjOiAiICsgaXRlbU51bSArICIsIHJlY2VpdmVkOiAiICsgZXZlbnQuZGF0YSk7Cisg
ICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
bGVhclRpbWVvdXQodGltZXIpOworICAgICAgICAgICAgaWYgKGRvbmUpIHsKKyAgICAgICAgICAg
ICAgICBnYygpOworICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocmVwb3J0RG9uZSwgMTAwKTsg
IC8vIE1ha2Ugc3VyZSBubyB1bmV4cGVjdGVkIGV2ZW50cyBjb21lIGluLgorICAgICAgICAgICAg
fQorICAgICAgIH0KKyAgICAgICAgZXZ0Lm1lc3NhZ2VQb3J0LnN0YXJ0KCk7CisgICAgfQorfQor
CitmdW5jdGlvbiBnYygpCit7CisgICAgaWYgKHdpbmRvdy5HQ0NvbnRyb2xsZXIpCisgICAgICAg
IHJldHVybiBHQ0NvbnRyb2xsZXIuY29sbGVjdCgpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDAwMDsgaSsrKSB7IC8vIGZvcmNlIGdhcmJhZ2UgY29sbGVjdGlvbiAoRkYgcmVxdWlyZXMg
YWJvdXQgOUsgYWxsb2NhdGlvbnMgYmVmb3JlIGEgY29sbGVjdCkuCisgICAgICAgIHZhciBzID0g
bmV3IFN0cmluZygiYWJjIik7CisgICAgfQorfQorZnVuY3Rpb24gcmVwb3J0RG9uZSgpCit7Cisg
ICAgIGxvZygiRE9ORSIpOworICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy93b3JrZXItbWVzc2FnZXBvcnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3dvcmtlci1tZXNzYWdlcG9ydC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNGFiZWEwZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy93b3JrZXItbWVzc2FnZXBvcnQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAg
QEAKK1Rlc3QgdGhhdCBwYWdlcyBhbmQgd29ya2VycyBjYW4gc2VuZCBNZXNzYWdlUG9ydHMgdG8g
b25lIGFub3RoZXIuIFNob3VsZCBwcmludCAiRE9ORSIgd2hlbiBkb25lLgorCitQQVNTOiBldnQu
bWVzc2FnZVBvcnQgPSBudWxsIGFzIGV4cGVjdGVkCitQQVNTOiBSZWNlaXZlZCBtZXNzYWdlIHBv
cnQKK1BBU1M6IFJlY2VpdmVkIHJlc3BvbnNlIGZyb20gV29ya2VyIHZpYSBNZXNzYWdlUG9ydAor
UEFTUzogR290IHBvcnQgZnJvbSB3b3JrZXIKK1BBU1M6IFJlY2VpdmVkIGZpbmFsIHJlc3BvbnNl
IGZyb20gd29ya2VyCitQQVNTOiBHb3QgMTAwMCBtZXNzYWdlcworRE9ORQorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLW1lc3NhZ2Vwb3J0LWdjLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItbWVzc2FnZXBvcnQtZ2MtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZTdiOGQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLW1lc3NhZ2Vw
b3J0LWdjLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1Rlc3QgdGhhdCB3b3JrZXJzIHN0
YXkgcmVhY2hhYmxlIHZpYSBtZXNzYWdlIHBvcnRzLiBTaG91bGQgcHJpbnQgIkRPTkUiIHdoZW4g
ZG9uZS4KKworUEFTUzogV29ya2VyIGlzIHJlYWNoYWJsZS4KK0RPTkUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1tZXNzYWdlcG9ydC1nYy5odG1sLWRpc2Fi
bGVkIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1tZXNzYWdlcG9ydC1nYy5odG1s
LWRpc2FibGVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4Yzk3YTUKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLW1lc3NhZ2Vw
b3J0LWdjLmh0bWwtZGlzYWJsZWQKQEAgLTAsMCArMSw1OCBAQAorPGJvZHk+Cis8cD5UZXN0IHRo
YXQgd29ya2VycyBzdGF5IHJlYWNoYWJsZSB2aWEgbWVzc2FnZSBwb3J0cy4KK1Nob3VsZCBwcmlu
dCAiRE9ORSIgd2hlbiBkb25lLjwvcD4KKzxkaXYgaWQ9cmVzdWx0PjwvZGl2PgorPHNjcmlwdD4K
K2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJy
ZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKKy8v
IFRlc3QgdGhhdCB3b3JrZXJzIHN0YXkgYWxpdmUgZXZlbiB0aG91Z2ggdGhleSBhcmUgb25seSBy
ZWFjaGFibGUgdmlhIG1lc3NhZ2UgcG9ydHMuCit2YXIgd29ya2VyID0gbmV3IFdvcmtlcigicmVz
b3VyY2VzL3dvcmtlci1tZXNzYWdlcG9ydC5qcyIpOwordmFyIGNoYW5uZWwgPSBuZXcgTWVzc2Fn
ZUNoYW5uZWwoKTsKK3dvcmtlci5wb3N0TWVzc2FnZSgicG9ydCIsIGNoYW5uZWwucG9ydDEpOwor
d29ya2VyID0gMDsKKworY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSgicGluZyIpOworY2hhbm5l
bC5wb3J0Mi5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICAvLyBPdGhlciBzaWRlIGlz
IHJ1bm5pbmcsIG5vdyBmb3JjZSBhIEdDLCB3YWl0IGEgYml0LCBhbmQgc2VuZCBhIG5ldyBtZXNz
YWdlIHRvIG1ha2Ugc3VyZSBpdCBhcnJpdmVzLgorICAgIGdjKCk7CisgICAgc2V0VGltZW91dCh0
ZXN0UmVhY2hhYmxlLCAxMDApOworfQorCitmdW5jdGlvbiB0ZXN0UmVhY2hhYmxlKCkKK3sKKyAg
ICBjaGFubmVsLnBvcnQyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkgeworICAgICAgICBsb2co
IlBBU1M6IFdvcmtlciBpcyByZWFjaGFibGUuIik7CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cisg
ICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSgicGluZyIpOworfQorCitmdW5jdGlvbiBnYygp
Cit7CisgICAgaWYgKHdpbmRvdy5HQ0NvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBHQ0NvbnRy
b2xsZXIuY29sbGVjdCgpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7
IC8vIGZvcmNlIGdhcmJhZ2UgY29sbGVjdGlvbiAoRkYgcmVxdWlyZXMgYWJvdXQgOUsgYWxsb2Nh
dGlvbnMgYmVmb3JlIGEgY29sbGVjdCkKKyAgICAgICAgdmFyIHMgPSBuZXcgU3RyaW5nKCJhYmMi
KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIGxvZygiRE9ORSIpOworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItbWVzc2FnZXBvcnQu
aHRtbC1kaXNhYmxlZCBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItbWVzc2FnZXBv
cnQuaHRtbC1kaXNhYmxlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmE2
ZWJiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1t
ZXNzYWdlcG9ydC5odG1sLWRpc2FibGVkCkBAIC0wLDAgKzEsOTggQEAKKzxib2R5PgorPHA+VGVz
dCB0aGF0IHBhZ2VzIGFuZCB3b3JrZXJzIGNhbiBzZW5kIE1lc3NhZ2VQb3J0cyB0byBvbmUgYW5v
dGhlci4KK1Nob3VsZCBwcmludCAiRE9ORSIgd2hlbiBkb25lLjwvcD4KKzxkaXYgaWQ9cmVzdWx0
PjwvZGl2PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsK
K30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7Cit9CisKK3ZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCJyZXNvdXJjZXMvd29ya2Vy
LW1lc3NhZ2Vwb3J0LmpzIik7Cit2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOwor
CisvLyBTZW5kIG1lc3NhZ2VzIHdpdGggYW5kIHdpdGhvdXQgcG9ydHMgdG8gdGhlIHdvcmtlciB0
byBtYWtlIHN1cmUgaXQgZ2V0cyB0aGVtLgord29ya2VyLnBvc3RNZXNzYWdlKCJub3BvcnQiKTsK
K3dvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICBsb2coZXZ0LmRhdGEpOwor
ICAgIHdvcmtlci5wb3N0TWVzc2FnZSgicG9ydCIsIGNoYW5uZWwucG9ydDEpOworICAgIHdvcmtl
ci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICAgICAgbG9nKGV2dC5kYXRhKTsKKyAg
ICB9Cit9OworCisvLyBTZW5kIGEgbWVzc2FnZSBvbiB0aGUgbmV3IHBvcnQgdG8gbWFrZSBzdXJl
IGl0IGdldHMgdG8gdGhlIHdvcmtlci4KK2NoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoInBpbmci
KTsKKworLy8gV2FpdCBmb3IgdGhlIHJlc3BvbnNlLgorY2hhbm5lbC5wb3J0Mi5vbm1lc3NhZ2Ug
PSBmdW5jdGlvbihldnQpIHsKKyAgICBpZiAoZXZ0LmRhdGEgPT0gInBvbmciKSB7CisgICAgICAg
IGxvZygiUEFTUzogUmVjZWl2ZWQgcmVzcG9uc2UgZnJvbSBXb3JrZXIgdmlhIE1lc3NhZ2VQb3J0
Iik7CisgICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBhd2FpdFBvcnRGcm9tV29ya2VyOworICAg
ICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoImdldHBvcnQiKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBsb2coIkZBSUw6IFJlY2VpdmVkIHVua25vd24gZXZlbnQ6ICIgKyBldnQuZGF0YSk7CisgICAg
fQorfQorY2hhbm5lbC5wb3J0Mi5zdGFydCgpOworCisvLyBJbnZva2VkIG9uY2UgdGhlIGZpcnN0
IGJhdGNoIG9mIHRlc3RzIGFyZSBkb25lLCB0byB0ZXN0IHNlbmRpbmcgZnJvbSB0aGUgd29ya2Vy
LgorZnVuY3Rpb24gYXdhaXRQb3J0RnJvbVdvcmtlcihldnQpCit7CisgICAgaWYgKGV2dC5kYXRh
ID09ICJwb3J0IikgeworICAgICAgICBpZiAoIWV2dC5tZXNzYWdlUG9ydCkgeworICAgICAgICAg
ICAgbG9nKCJGQUlMOiBEaWQgbm90IGdldCBwb3J0IGZyb20gd29ya2VyIik7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBsb2coIlBBU1M6IEdvdCBwb3J0IGZyb20gd29ya2VyIik7Cisg
ICAgICAgICAgICBldnQubWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UoInBpbmciKTsKKyAgICAgICAg
ICAgIGV2dC5tZXNzYWdlUG9ydC5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZXZ0LmRhdGEgPT0gInBvbmciKSB7CisgICAgICAgICAgICAgICAgICAgIGxv
ZygiUEFTUzogUmVjZWl2ZWQgZmluYWwgcmVzcG9uc2UgZnJvbSB3b3JrZXIiKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsb2coIkZBSUw6IEdvdCB1bmV4
cGVjdGVkIHJlc3BvbnNlOiAiICsgZXZ0LmRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBzdGFydFNwYW1UZXN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
dnQubWVzc2FnZVBvcnQuc3RhcnQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGxvZyhldnQuZGF0YSk7CisgICAgfQorfQorCitmdW5jdGlvbiBzdGFydFNwYW1UZXN0KCkKK3sK
KyAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOworICAgIHdvcmtlci5vbm1l
c3NhZ2UgPSBmdW5jdGlvbiAoKSB7IGdvdFNwYW0oY2hhbm5lbC5wb3J0MSk7IH0KKyAgICB3b3Jr
ZXIucG9zdE1lc3NhZ2UoInNwYW0iLCBjaGFubmVsLnBvcnQyKTsKK30KKworZnVuY3Rpb24gZ290
U3BhbShwb3J0KQoreworICAgIHZhciBzcGFtQ291bnQgPSAwOworICAgIHBvcnQub25tZXNzYWdl
ID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgICAgIGlmIChldnQuZGF0YSAhPSBzcGFtQ291bnQpCisg
ICAgICAgICAgICBsb2coIkZBSUw6IEdvdCBvdXQgb2Ygb3JkZXIgbWVzc2FnZTogIiArIHNwYW1D
b3VudCk7CisgICAgICAgIHNwYW1Db3VudCsrOworICAgICAgICBpZiAoc3BhbUNvdW50ID09IDEw
MDApIHsKKyAgICAgICAgICAgIGxvZygiUEFTUzogR290IDEwMDAgbWVzc2FnZXMiKTsKKyAgICAg
ICAgICAgIGRvbmUoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gZG9uZSgpCit7
CisgICAgbG9nKCJET05FIik7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggZGE3NDA3Ni4uZDJmMzcyYyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NSBAQAorMjAw
OS0wNi0yNSAgRHJldyBXaWxzb24gIDxhdHdpbHNvbkBnb29nbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU0MzU+CisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3Ig
c2VuZGluZyBNZXNzYWdlUG9ydHMgdG8vZnJvbSBXb3JrZXJzIHZpYSBwb3N0TWVzc2FnZSgpLgor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6bWVzc2FnZUNoYW5uZWwpOgorICAgICAgICBF
eHBvc2VzIE1lc3NhZ2VDaGFubmVsIGNvbnN0cnVjdG9yIFdvcmtlckNvbnRleHQuCisgICAgICAg
ICogYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgTm93IGNvcnJlY3RseSBoYW5kbGVzIGJl
aW5nIGluc3RhbnRpYXRlZCBmcm9tIHdpdGhpbiBhIFdvcmtlci4KKyAgICAgICAqIHBsYXRmb3Jt
L0Nyb3NzVGhyZWFkQ29waWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmljV29ya2VyVGFz
a1RyYWl0czxQYXNzT3duUHRyPik6CisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHBhc3Npbmcg
UGFzc093blB0ciBhcyBhcmd1bWVudCB0byBHZW5lcmljV29ya2VyVGFzaworICAgICAgICogd29y
a2Vycy9HZW5lcmljV29ya2VyVGFzay5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAg
KiB3b3JrZXJzL1dvcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6OnBvc3RNZXNz
YWdlKToKKyAgICAgICAgTm93IGhhbmRsZXMgZGlzZW50YW5nbGluZy9lbnRhbmdsaW5nIE1lc3Nh
Z2VQb3J0cyBzZW50IHRvL2Zyb20gdmlhIHBvc3RNZXNzYWdlLgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyOjpkaXNwYXRjaE1lc3NhZ2UpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmg6Cisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXIuaWRsOgorICAgICAgICBBZGRlZCBhbiBvcHRpb25hbCBN
ZXNzYWdlUG9ydCBhcmd1bWVudCB0byBwb3N0TWVzc2FnZSgpCisgICAgICAgICogd29ya2Vycy9X
b3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6Omhhc1Bl
bmRpbmdBY3Rpdml0eSk6CisgICAgICAgIFdvcmtlcnMgbm93IHJlcG9ydCBwZW5kaW5nIGFjdGl2
aXR5IHdoZW5ldmVyIHRoZXJlIGFyZSByZW1vdGVseSBlbnRhbmdsZWQgcG9ydHMuCisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJDb250ZXh0Ojpwb3N0TWVzc2FnZSk6CisgICAgICAgIE5vdyBoYW5k
bGVzIGRpc2VudGFuZ2xpbmcvZW50YW5nbGluZyBNZXNzYWdlUG9ydHMgc2VudCB0by9mcm9tIHZp
YSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmRpc3BhdGNo
TWVzc2FnZSk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0Lmg6CisgICAgICAgICog
d29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbDoKKyAgICAgICAgQWRkZWQgYW4gb3B0aW9uYWwgTWVz
c2FnZVBvcnQgYXJndW1lbnQgdG8gcG9zdE1lc3NhZ2UoKQorICAgICAgICAqIHdvcmtlcnMvV29y
a2VyQ29udGV4dFByb3h5Lmg6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94
eS5jcHA6CisgICAgICAgIFVwZGF0ZWQgbWVzc2FnaW5nIGluZnJhc3RydWN0dXJlIHRvIHRyYW5z
cG9ydCBhbiBvcHRpb25hbCBNZXNzYWdlUG9ydC9NZXNzYWdlUG9ydENoYW5uZWwuCisgICAgICAg
IChXZWJDb3JlOjpNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s6Ok1lc3NhZ2VXb3JrZXJDb250ZXh0VGFz
ayk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s6OnBlcmZvcm1U
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VXb3JrZXJUYXNrOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVzc2FnZVdvcmtlclRhc2s6Ok1lc3NhZ2VXb3JrZXJUYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VXb3JrZXJUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdE1lc3NhZ2VU
b1dvcmtlckNvbnRleHQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHku
aDoKKyAgICAgICAgQWRkZWQgYWRkaXRpb25hbCBwb3N0TWVzc2FnZSgpIEFQSSB0aGF0IGFjY2Vw
dHMgYSBNZXNzYWdlUG9ydAorICAgICAgICAqIHdvcmtlcnMvV29ya2VyT2JqZWN0UHJveHkuaDoK
KyAgICAgICAgQWRkZWQgYWRkaXRpb25hbCBwb3N0TWVzc2FnZSgpIEFQSSB0aGF0IGFjY2VwdHMg
YSBNZXNzYWdlUG9ydAorCiAyMDA5LTA2LTI1ICBBbGJlcnQgSi4gV29uZyAgPGFqd29uZ0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCmluZGV4IDE0YmJlMTkuLjA2
NDc1ZjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3Vz
dG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5j
cHAKQEAgLTMwLDcgKzMwLDEwIEBACiAjaW5jbHVkZSAiSlNXb3JrZXJDb250ZXh0LmgiCiAKICNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgog
I2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkpTTWVzc2FnZUNoYW5uZWxD
b25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJKU1dv
cmtlckxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiSlNXb3JrZXJOYXZpZ2F0b3IuaCIKICNpbmNsdWRl
ICJKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuaCIKQEAgLTEzOCw2ICsxNDEsMTQgQEAgSlNW
YWx1ZSBKU1dvcmtlckNvbnRleHQ6OnNldEludGVydmFsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgaW1wbCgpLT5zZXRJbnRl
cnZhbChhY3Rpb24sIGRlbGF5KSk7CiB9CiAKKworI2lmIEVOQUJMRShDSEFOTkVMX01FU1NBR0lO
RykKK0pTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjptZXNzYWdlQ2hhbm5lbChFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTTWVzc2FnZUNoYW5u
ZWxDb25zdHJ1Y3Rvcj4oZXhlYywgdGhpcyk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNX
b3JrZXJDdXN0b20uY3BwCmluZGV4IGY0ZDMwMzMuLjk3MDc1MTkgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJDdXN0b20uY3BwCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJKU0RP
TUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUg
IkpTTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJXb3JrZXIuaCIKIAogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNo
YW5uZWxDb25zdHJ1Y3Rvci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3Nh
Z2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCmluZGV4IDNhNDE0NjcuLmNjMDA0OTIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rv
ci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENv
bnN0cnVjdG9yLmNwcApAQCAtMzEsMTIgKzMxLDE0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiTWVzc2FnZUNoYW5uZWwuaCIKIAotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRnJhbWUuaCIKLQogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4UHJv
eHkuaCIKIAorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNs
dWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5LmgiCisKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTQ5LDE2ICs1MSwyMSBAQCBDQUxMQkFDS19GVU5DX0RFQ0woTWVzc2FnZUNoYW5uZWxDb25z
dHJ1Y3RvcikKICAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCiAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMg
YSBmdW5jdGlvbi4iKTsKIAotICAgIC8vIEdldCB0aGUgZG9jdW1lbnQuCi0gICAgRnJhbWUqIGZy
YW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFt
ZS0+ZG9jdW1lbnQoKTsKKyAgICAvLyBHZXQgdGhlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgKFdv
cmtlckNvbnRleHQgb3IgRG9jdW1lbnQpCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCA9IDA7CisgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBwcm94eSA9IFdvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmlldmUoKTsKKyAgICBpZiAocHJveHkpCisgICAg
ICAgIGNvbnRleHQgPSBwcm94eS0+d29ya2VyQ29udGV4dCgpOworICAgIGVsc2UgeworICAgICAg
ICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKCk7CisgICAgICAgIGlmICgh
ZnJhbWUpCisgICAgICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgICAgICBjb250
ZXh0ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgfQogCiAgICAgLy8gTm90ZTogaXQncyBPSyB0
byBsZXQgdGhpcyBSZWZQdHIgZ28gb3V0IG9mIHNjb3BlIGJlY2F1c2Ugd2UgYWxzbyBjYWxsCiAg
ICAgLy8gU2V0RE9NV3JhcHBlcigpLCB3aGljaCBlZmZlY3RpdmVseSBob2xkcyBhIHJlZmVyZW5j
ZSB0byBvYmouCi0gICAgUmVmUHRyPE1lc3NhZ2VDaGFubmVsPiBvYmogPSBNZXNzYWdlQ2hhbm5l
bDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBSZWZQdHI8TWVzc2FnZUNoYW5uZWw+IG9iaiA9IE1l
c3NhZ2VDaGFubmVsOjpjcmVhdGUoY29udGV4dCk7CiAKICAgICB2ODo6TG9jYWw8djg6Ok9iamVj
dD4gbWVzc2FnZUNoYW5uZWwgPSBhcmdzLkhvbGRlcigpOwogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhy
ZWFkQ29waWVyLmgKaW5kZXggZTdiNGMwZS4uZDEyZDcyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NU
aHJlYWRDb3BpZXIuaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBDcm9zc1RocmVhZENvcGll
cl9oCiAKICNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nLmg+CkBAIC03Myw2ICs3NCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIH0KICAgICB9OwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgUGFzc093blB0cjxUPiA+IHsKKyAgICAgICAg
dHlwZWRlZiBQYXNzT3duUHRyPFQ+IFR5cGU7CisgICAgICAgIHN0YXRpYyBUeXBlIGNvcHkoY29u
c3QgUGFzc093blB0cjxUPiYgb3duUHRyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
UGFzc093blB0cjxUPihzdGF0aWNfY2FzdDxUKj4ob3duUHRyLnJlbGVhc2UoKSkpOworICAgICAg
ICB9CisgICAgfTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDcm9zc1RocmVh
ZENvcGllckJhc2U8ZmFsc2UsIHN0ZDo6YXV0b19wdHI8VD4gPiB7CiAgICAgICAgIHR5cGVkZWYg
c3RkOjphdXRvX3B0cjxUPiBUeXBlOwogICAgICAgICBzdGF0aWMgVHlwZSBjb3B5KGNvbnN0IHN0
ZDo6YXV0b19wdHI8VD4mIGF1dG9QdHIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvR2Vu
ZXJpY1dvcmtlclRhc2suaCBiL1dlYkNvcmUvd29ya2Vycy9HZW5lcmljV29ya2VyVGFzay5oCmlu
ZGV4IDk2YjBlNzAuLjM2MTFmZWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9HZW5lcmlj
V29ya2VyVGFzay5oCisrKyBiL1dlYkNvcmUvd29ya2Vycy9HZW5lcmljV29ya2VyVGFzay5oCkBA
IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRDb3BpZXIuaCIKICNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvVHlwZVRyYWl0cy5oPgogCkBAIC01OCw2ICs1OSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHR5cGVkZWYgUGFzc1JlZlB0cjxUPiBQYXJhbVR5cGU7CiAgICAgfTsKIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQ
YXNzT3duUHRyPFQ+ID4geworICAgICAgICB0eXBlZGVmIFBhc3NPd25QdHI8VD4gUGFyYW1UeXBl
OworICAgIH07CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxPgogICAg
IGNsYXNzIEdlbmVyaWNXb3JrZXJUYXNrMSA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrIHsKICAgICBwdWJsaWM6CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
LmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCmluZGV4IGE4MTBkZGEuLjJlMDNlM2Qg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCisrKyBiL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXIuY3BwCkBAIC03Nyw5ICs3NywxOCBAQCBXb3JrZXI6On5Xb3JrZXIoKQogICAg
IG1fY29udGV4dFByb3h5LT53b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKIH0KIAotdm9pZCBXb3Jr
ZXI6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgV29ya2VyOjpwb3N0
TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAg
IG1fY29udGV4dFByb3h5LT5wb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChtZXNzYWdlKTsKKyAg
ICBwb3N0TWVzc2FnZShtZXNzYWdlLCAwLCBlYyk7Cit9CisKK3ZvaWQgV29ya2VyOjpwb3N0TWVz
c2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gRGlzZW50YW5nbGUgdGhlIHBvcnQgaW4gcHJlcGFy
YXRpb24gZm9yIHNlbmRpbmcgaXQgdG8gdGhlIHJlbW90ZSBjb250ZXh0LgorICAgIE93blB0cjxN
ZXNzYWdlUG9ydENoYW5uZWw+IGNoYW5uZWwgPSBtZXNzYWdlUG9ydCA/IG1lc3NhZ2VQb3J0LT5k
aXNlbnRhbmdsZShlYykgOiAwOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOworICAgIG1f
Y29udGV4dFByb3h5LT5wb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChtZXNzYWdlLCBjaGFubmVs
LnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgV29ya2VyOjp0ZXJtaW5hdGUoKQpAQCAtMTgwLDkgKzE4
OSw5IEBAIGJvb2wgV29ya2VyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVk
KCk7CiB9CiAKLXZvaWQgV29ya2VyOjpkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQordm9pZCBXb3JrZXI6OmRpc3BhdGNoTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQpCiB7Ci0gICAgUmVmUHRyPEV2ZW50PiBldnQg
PSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShtZXNzYWdlLCAiIiwgIiIsIDAsIDApOworICAgIFJlZlB0
cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2FnZSwgIiIsICIiLCAwLCBw
b3J0KTsKIAogICAgIGlmIChtX29uTWVzc2FnZUxpc3RlbmVyLmdldCgpKSB7CiAgICAgICAgIGV2
dC0+c2V0VGFyZ2V0KHRoaXMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5o
IGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oCmluZGV4IGJkOWU1NTYuLjFmY2M4YmUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyLmgKQEAgLTU4LDExICs1OCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
dmlydHVhbCBXb3JrZXIqIHRvV29ya2VyKCkgeyByZXR1cm4gdGhpczsgfQogCi0gICAgICAgIHZv
aWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICAgICAgdm9pZCBwb3N0
TWVzc2FnZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgcG9z
dE1lc3NhZ2UoY29uc3QgU3RyaW5nJiwgTWVzc2FnZVBvcnQqLCBFeGNlcHRpb25Db2RlJik7CiAK
ICAgICAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKIAotICAgICAgICB2b2lkIGRpc3BhdGNoTWVzc2Fn
ZShjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4pOwogICAgICAgICB2b2lkIGRpc3BhdGNoRXJy
b3JFdmVudCgpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmlkbCBiL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXIuaWRsCmluZGV4IDJlZjliNjIuLmUwNzhlN2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXIuaWRsCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaWRsCkBAIC0zMCw3
ICszMCw4IEBAIG1vZHVsZSB0aHJlYWRzIHsKIAogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0
ZW5lciBvbmVycm9yOwogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7
Ci0gICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9NU3RyaW5nIG1lc3NhZ2UpOworICAgICAg
ICB2b2lkIHBvc3RNZXNzYWdlKGluIERPTVN0cmluZyBtZXNzYWdlLCBpbiBbT3B0aW9uYWxdIE1l
c3NhZ2VQb3J0IG1lc3NhZ2VQb3J0KQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7
CiAKICAgICAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuY3BwIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3Bw
CmluZGV4IGZkMDUwNjIuLjliMDE5YjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKQEAg
LTEzMCw2ICsxMzAsMTQgQEAgYm9vbCBXb3JrZXJDb250ZXh0OjpoYXNQZW5kaW5nQWN0aXZpdHko
KSBjb25zdAogICAgICAgICBpZiAoaXRlci0+Zmlyc3QtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCisgICAgLy8gS2VlcCB0aGUgd29ya2Vy
IGFjdGl2ZSBhcyBsb25nIGFzIHRoZXJlIGlzIGEgTWVzc2FnZVBvcnQgd2l0aCBwZW5kaW5nIGFj
dGl2aXR5IG9yIHRoYXQgaXMgcmVtb3RlbHkgZW50YW5nbGVkLgorICAgIEhhc2hTZXQ8TWVzc2Fn
ZVBvcnQqPjo6Y29uc3RfaXRlcmF0b3IgbWVzc2FnZVBvcnRzRW5kID0gbWVzc2FnZVBvcnRzKCku
ZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PE1lc3NhZ2VQb3J0Kj46OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBtZXNzYWdlUG9ydHMoKS5iZWdpbigpOyBpdGVyICE9IG1lc3NhZ2VQb3J0c0VuZDsgKytp
dGVyKSB7CisgICAgICAgIGlmICgoKml0ZXIpLT5oYXNQZW5kaW5nQWN0aXZpdHkoKSB8fCAoKCpp
dGVyKS0+aXNFbnRhbmdsZWQoKSAmJiAhKCppdGVyKS0+bG9jYWxseUVudGFuZ2xlZFBvcnQoKSkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKQEAgLTE1NSwxMiArMTYzLDIwIEBAIHZvaWQgV29ya2VyQ29udGV4dDo6c2NyaXB0SW1wb3J0
ZWQodW5zaWduZWQgbG9uZywgY29uc3QgU3RyaW5nJikKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi12b2lkIFdvcmtlckNvbnRleHQ6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKK3ZvaWQgV29ya2VyQ29udGV4dDo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBwb3N0TWVzc2FnZShtZXNzYWdlLCAwLCBlYyk7
Cit9CisKK3ZvaWQgV29ya2VyQ29udGV4dDo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBNZXNzYWdlUG9ydCogcG9ydCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKG1f
Y2xvc2luZykKICAgICAgICAgcmV0dXJuOwotCi0gICAgbV90aHJlYWQtPndvcmtlck9iamVjdFBy
b3h5KCkucG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChtZXNzYWdlKTsKKyAgICAvLyBEaXNlbnRh
bmdsZSB0aGUgcG9ydCBpbiBwcmVwYXJhdGlvbiBmb3Igc2VuZGluZyBpdCB0byB0aGUgcmVtb3Rl
IGNvbnRleHQuCisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5lbCA9IHBvcnQg
PyBwb3J0LT5kaXNlbnRhbmdsZShlYykgOiAwOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJu
OworICAgIG1fdGhyZWFkLT53b3JrZXJPYmplY3RQcm94eSgpLnBvc3RNZXNzYWdlVG9Xb3JrZXJP
YmplY3QobWVzc2FnZSwgY2hhbm5lbC5yZWxlYXNlKCkpOwogfQogCiB2b2lkIFdvcmtlckNvbnRl
eHQ6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciwgYm9vbCkKQEAgLTIzOSwxMSArMjU1
LDExIEBAIHZvaWQgV29ya2VyQ29udGV4dDo6Y2xlYXJJbnRlcnZhbChpbnQgdGltZW91dElkKQog
ICAgIERPTVRpbWVyOjpyZW1vdmVCeUlkKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdGltZW91
dElkKTsKIH0KIAotdm9pZCBXb3JrZXJDb250ZXh0OjpkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQordm9pZCBXb3JrZXJDb250ZXh0OjpkaXNwYXRjaE1lc3NhZ2UoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBwb3J0KQogewogICAgIC8v
IFNpbmNlIGNsb3NlKCkgc3RvcHMgdGhlIHRocmVhZCBldmVudCBsb29wLCB0aGlzIHNob3VsZCBu
b3QgZXZlciBnZXQgY2FsbGVkIHdoaWxlIGNsb3NpbmcuCiAgICAgQVNTRVJUKCFtX2Nsb3Npbmcp
OwotICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2FnZSwg
IiIsICIiLCAwLCAwKTsKKyAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9IE1lc3NhZ2VFdmVudDo6Y3Jl
YXRlKG1lc3NhZ2UsICIiLCAiIiwgMCwgcG9ydCk7CiAKICAgICBpZiAobV9vbm1lc3NhZ2VMaXN0
ZW5lci5nZXQoKSkgewogICAgICAgICBldnQtPnNldFRhcmdldCh0aGlzKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmggYi9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5oCmluZGV4IGNlNzgyZjguLmJjZWM3NjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJDb250ZXh0LmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQu
aApAQCAtODAsNyArODAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVh
bCB2b2lkIHBvc3RUYXNrKFBhc3NSZWZQdHI8VGFzaz4pOyAvLyBFeGVjdXRlcyB0aGUgdGFzayBv
biBjb250ZXh0J3MgdGhyZWFkIGFzeW5jaHJvbm91c2x5LgogCi0KICAgICAgICAgLy8gV29ya2Vy
R2xvYmFsU2NvcGUKICAgICAgICAgV29ya2VyQ29udGV4dCogc2VsZigpIHsgcmV0dXJuIHRoaXM7
IH0KICAgICAgICAgV29ya2VyTG9jYXRpb24qIGxvY2F0aW9uKCkgY29uc3Q7CkBAIC05MCw5ICs4
OSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBpbXBvcnRTY3JpcHRzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiB1cmxzLCBjb25zdCBTdHJpbmcmIGNhbGxlclVSTCwgaW50IGNh
bGxlckxpbmUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgV29ya2VyTmF2aWdhdG9yKiBuYXZp
Z2F0b3IoKSBjb25zdDsKIAotCiAgICAgICAgIC8vIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
Ci0gICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICAg
ICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CisgICAg
ICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiwgTWVzc2FnZVBvcnQqLCBFeGNlcHRp
b25Db2RlJik7CiAgICAgICAgIHZvaWQgc2V0T25tZXNzYWdlKFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29ubWVzc2FnZUxpc3RlbmVyID0gZXZlbnRMaXN0ZW5l
cjsgfQogICAgICAgICBFdmVudExpc3RlbmVyKiBvbm1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBt
X29ubWVzc2FnZUxpc3RlbmVyLmdldCgpOyB9CiAKQEAgLTExMSw3ICsxMTAsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIExpc3Rl
bmVyVmVjdG9yPiBFdmVudExpc3RlbmVyc01hcDsKICAgICAgICAgRXZlbnRMaXN0ZW5lcnNNYXAm
IGV2ZW50TGlzdGVuZXJzKCkgeyByZXR1cm4gbV9ldmVudExpc3RlbmVyczsgfQogCi0gICAgICAg
IHZvaWQgZGlzcGF0Y2hNZXNzYWdlKGNvbnN0IFN0cmluZyYpOworICAgICAgICB2b2lkIGRpc3Bh
dGNoTWVzc2FnZShjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0Pik7CiAKICAg
ICAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCBmb3IgR0MgbWFya2luZy4gU2VlIEpTV29y
a2VyQ29udGV4dDo6bWFyaygpIGluCiAgICAgICAgIC8vIEpTV29ya2VyQ29udGV4dEN1c3RvbS5j
cHAuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwgYi9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKaW5kZXggOWQ1YWE3OS4uNzA5NDEwYSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCisrKyBiL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbApAQCAtNDEsNyArNDEsNiBAQCBtb2R1bGUgdGhyZWFk
cyB7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtSZXBsYWNlYWJsZV0gV29y
a2VyTG9jYXRpb24gbG9jYXRpb247CiAgICAgICAgIHZvaWQgY2xvc2UoKTsKLSAgICAgICAgLy8g
ICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmNsb3NlOwogICAgICAgICAvLyAgICAg
ICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZXJyb3I7CiAKICAgICAgICAgLy8gV29ya2Vy
VXRpbHMKQEAgLTUyLDEwICs1MSwxMCBAQCBtb2R1bGUgdGhyZWFkcyB7CiAKIAogICAgICAgICAv
LyBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZQotICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGlu
IERPTVN0cmluZyBtZXNzYWdlKTsKKyAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShpbiBET01TdHJp
bmcgbWVzc2FnZSwgaW4gW09wdGlvbmFsXSBNZXNzYWdlUG9ydCBtZXNzYWdlUG9ydCkKKyAgICAg
ICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUg
RXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7CiAKLQogICAgICAgICAvLyBUaW1lcnMKICAgICAgICAg
W0N1c3RvbV0gbG9uZyBzZXRUaW1lb3V0KGluIFRpbWVvdXRIYW5kbGVyIGhhbmRsZXIsIGluIGxv
bmcgdGltZW91dCk7CiAgICAgICAgIC8vIFtDdXN0b21dIGxvbmcgc2V0VGltZW91dChpbiBET01T
dHJpbmcgY29kZSwgaW4gbG9uZyB0aW1lb3V0KTsKQEAgLTgwLDYgKzc5LDkgQEAgbW9kdWxlIHRo
cmVhZHMgewogICAgICAgICBhdHRyaWJ1dGUgTWVzc2FnZUV2ZW50Q29uc3RydWN0b3IgTWVzc2Fn
ZUV2ZW50OwogICAgICAgICBhdHRyaWJ1dGUgV29ya2VyTG9jYXRpb25Db25zdHJ1Y3RvciBXb3Jr
ZXJMb2NhdGlvbjsKIAorI2lmIEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORworICAgICAgICBhdHRy
aWJ1dGUgW0pTQ0N1c3RvbUdldHRlcl0gTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3RvciBNZXNzYWdl
Q2hhbm5lbDsKKyNlbmRpZgogICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlcl0gWE1M
SHR0cFJlcXVlc3RDb25zdHJ1Y3RvciBYTUxIdHRwUmVxdWVzdDsKICAgICB9OwogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dFByb3h5LmggYi9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyQ29udGV4dFByb3h5LmgKaW5kZXggYzhmNTc2MS4uZjQyNTI3ZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHRQcm94eS5oCisrKyBiL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJDb250ZXh0UHJveHkuaApAQCAtMzMsOSArMzMsMTIgQEAKIAogI2lmIEVOQUJM
RShXT1JLRVJTKQogCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgY2xhc3MgS1VSTDsKKyAgICBjbGFzcyBNZXNzYWdlUG9ydENoYW5uZWw7
CiAgICAgY2xhc3MgU3RyaW5nOwogICAgIGNsYXNzIFdvcmtlcjsKIApAQCAtNTAsNyArNTMsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZVdv
cmtlckNvbnRleHQoKSA9IDA7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9X
b3JrZXJDb250ZXh0KGNvbnN0IFN0cmluZyYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBv
c3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KGNvbnN0IFN0cmluZyYsIFBhc3NPd25QdHI8TWVzc2Fn
ZVBvcnRDaGFubmVsPikgPSAwOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0
aXZpdHkoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJN
ZXNzYWdpbmdQcm94eS5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHku
Y3BwCmluZGV4IGE2ZDBkNWQuLjA0ZTYxYzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3Nh
Z2luZ1Byb3h5LmNwcApAQCAtNDQsMTQgKzQ0LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VXb3Jr
ZXJDb250ZXh0VGFzaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s+IGNyZWF0ZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBjaGFubmVsKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlV29ya2VyQ29udGV4dFRhc2sobWVz
c2FnZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lc3NhZ2VXb3JrZXJDb250ZXh0
VGFzayhtZXNzYWdlLCBjaGFubmVsKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIE1lc3NhZ2VX
b3JrZXJDb250ZXh0VGFzayhjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCisgICAgTWVzc2FnZVdvcmtl
ckNvbnRleHRUYXNrKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdlUG9y
dENoYW5uZWw+IGNoYW5uZWwpCiAgICAgICAgIDogbV9tZXNzYWdlKG1lc3NhZ2UuY29weSgpKQor
ICAgICAgICAsIG1fY2hhbm5lbChjaGFubmVsKQogICAgIHsKICAgICB9CiAKQEAgLTU5LDQxICs2
MCw1MiBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUKHNjcmlwdENvbnRleHQtPmlz
V29ya2VyQ29udGV4dCgpKTsKICAgICAgICAgV29ya2VyQ29udGV4dCogY29udGV4dCA9IHN0YXRp
Y19jYXN0PFdvcmtlckNvbnRleHQqPihzY3JpcHRDb250ZXh0KTsKLQotICAgICAgICBjb250ZXh0
LT5kaXNwYXRjaE1lc3NhZ2UobV9tZXNzYWdlKTsKLQorICAgICAgICBSZWZQdHI8TWVzc2FnZVBv
cnQ+IHBvcnQ7CisgICAgICAgIGlmIChtX2NoYW5uZWwpIHsKKyAgICAgICAgICAgIHBvcnQgPSBN
ZXNzYWdlUG9ydDo6Y3JlYXRlKCpzY3JpcHRDb250ZXh0KTsKKyAgICAgICAgICAgIHBvcnQtPmVu
dGFuZ2xlKG1fY2hhbm5lbC5yZWxlYXNlKCkpOworICAgICAgICB9CisgICAgICAgIGNvbnRleHQt
PmRpc3BhdGNoTWVzc2FnZShtX21lc3NhZ2UsIHBvcnQucmVsZWFzZSgpKTsKICAgICAgICAgY29u
dGV4dC0+dGhyZWFkKCktPndvcmtlck9iamVjdFByb3h5KCkuY29uZmlybU1lc3NhZ2VGcm9tV29y
a2VyT2JqZWN0KGNvbnRleHQtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKTsKICAgICB9CiAKIHByaXZh
dGU6CiAgICAgU3RyaW5nIG1fbWVzc2FnZTsKKyAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVs
PiBtX2NoYW5uZWw7CiB9OwogCiBjbGFzcyBNZXNzYWdlV29ya2VyVGFzayA6IHB1YmxpYyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxNZXNzYWdlV29ya2VyVGFzaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgV29ya2Vy
TWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1l
c3NhZ2VXb3JrZXJUYXNrPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzT3duUHRy
PE1lc3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5lbCwgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3Nh
Z2luZ1Byb3h5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlV29y
a2VyVGFzayhtZXNzYWdlLCBtZXNzYWdpbmdQcm94eSkpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IE1lc3NhZ2VXb3JrZXJUYXNrKG1lc3NhZ2UsIGNoYW5uZWwsIG1lc3NhZ2luZ1Byb3h5
KSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIE1lc3NhZ2VXb3JrZXJUYXNrKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQorICAgIE1l
c3NhZ2VXb3JrZXJUYXNrKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdl
UG9ydENoYW5uZWw+IGNoYW5uZWwsIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94
eSkKICAgICAgICAgOiBtX21lc3NhZ2UobWVzc2FnZS5jb3B5KCkpCisgICAgICAgICwgbV9jaGFu
bmVsKGNoYW5uZWwpCiAgICAgICAgICwgbV9tZXNzYWdpbmdQcm94eShtZXNzYWdpbmdQcm94eSkK
ICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqKQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRDb250ZXh0KQogICAgIHsKICAgICAgICAgV29ya2VyKiB3b3JrZXJP
YmplY3QgPSBtX21lc3NhZ2luZ1Byb3h5LT53b3JrZXJPYmplY3QoKTsKICAgICAgICAgaWYgKCF3
b3JrZXJPYmplY3QgfHwgbV9tZXNzYWdpbmdQcm94eS0+YXNrZWRUb1Rlcm1pbmF0ZSgpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHdvcmtlck9iamVjdC0+ZGlzcGF0Y2hNZXNzYWdl
KG1fbWVzc2FnZSk7CisgICAgICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydDsKKyAgICAgICAg
aWYgKG1fY2hhbm5lbCkgeworICAgICAgICAgICAgcG9ydCA9IE1lc3NhZ2VQb3J0OjpjcmVhdGUo
KnNjcmlwdENvbnRleHQpOworICAgICAgICAgICAgcG9ydC0+ZW50YW5nbGUobV9jaGFubmVsLnJl
bGVhc2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgd29ya2VyT2JqZWN0LT5kaXNwYXRjaE1lc3Nh
Z2UobV9tZXNzYWdlLCBwb3J0LnJlbGVhc2UoKSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFN0
cmluZyBtX21lc3NhZ2U7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gbV9jaGFubmVs
OwogICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtX21lc3NhZ2luZ1Byb3h5OwogfTsKIApAQCAt
MjA1LDIxICsyMTcsMjEgQEAgdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6c3RhcnRXb3JrZXJD
b250ZXh0KGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW4KICAgICB0aHJlYWQtPnN0
YXJ0KCk7CiB9CiAKLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RNZXNzYWdlVG9Xb3Jr
ZXJPYmplY3QoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQordm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94
eTo6cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NP
d25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBjaGFubmVsKQogewotICAgIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+cG9zdFRhc2soTWVzc2FnZVdvcmtlclRhc2s6OmNyZWF0ZShtZXNzYWdlLCB0
aGlzKSk7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhNZXNzYWdlV29y
a2VyVGFzazo6Y3JlYXRlKG1lc3NhZ2UsIGNoYW5uZWwsIHRoaXMpKTsKIH0KIAotdm9pZCBXb3Jr
ZXJNZXNzYWdpbmdQcm94eTo6cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQordm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdE1lc3NhZ2VUb1dvcmtl
ckNvbnRleHQoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hh
bm5lbD4gY2hhbm5lbCkKIHsKICAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAobV93b3JrZXJUaHJlYWQpIHsKICAgICAgICAgKyttX3VuY29uZmly
bWVkTWVzc2FnZUNvdW50OwotICAgICAgICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RU
YXNrKE1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzazo6Y3JlYXRlKG1lc3NhZ2UpKTsKKyAgICAgICAg
bV93b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKS5wb3N0VGFzayhNZXNzYWdlV29ya2VyQ29udGV4dFRh
c2s6OmNyZWF0ZShtZXNzYWdlLCBjaGFubmVsKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fcXVl
dWVkRWFybHlUYXNrcy5hcHBlbmQoTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpjcmVhdGUobWVz
c2FnZSkpOworICAgICAgICBtX3F1ZXVlZEVhcmx5VGFza3MuYXBwZW5kKE1lc3NhZ2VXb3JrZXJD
b250ZXh0VGFzazo6Y3JlYXRlKG1lc3NhZ2UsIGNoYW5uZWwpKTsKIH0KIAogdm9pZCBXb3JrZXJN
ZXNzYWdpbmdQcm94eTo6cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KFBhc3NSZWZQdHI8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmggYi9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuaAppbmRleCA3ZmM5Nzk3Li4yOThkODY4
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuaAorKysg
Yi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuaApAQCAtMzQsMTIgKzM0LDE0
IEBACiAjaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKICNpbmNsdWRlICJXb3JrZXJPYmpl
Y3RQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKKyAgICBjbGFzcyBNZXNzYWdlUG9ydENoYW5uZWw7CiAgICAgY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKICAgICBjbGFzcyBTdHJpbmc7CiAgICAgY2xhc3MgV29ya2VyOwpAQCAtNTMs
MTMgKzU1LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gKE9ubHkgdXNlIHRo
ZXNlIG1ldGhvZHMgaW4gdGhlIHdvcmtlciBvYmplY3QgdGhyZWFkLikKICAgICAgICAgdmlydHVh
bCB2b2lkIHN0YXJ0V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0
cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgdGVybWluYXRlV29ya2VyQ29udGV4dCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KGNvbnN0IFN0cmluZyYs
IFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBo
YXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIHdvcmtlck9i
amVjdERlc3Ryb3llZCgpOwogCiAgICAgICAgIC8vIEltcGxlbWVudGF0aW9ucyBvZiBXb3JrZXJP
YmplY3RQcm94eS4KICAgICAgICAgLy8gKE9ubHkgdXNlIHRoZXNlIG1ldGhvZHMgaW4gdGhlIHdv
cmtlciBjb250ZXh0IHRocmVhZC4pCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRv
V29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYsIFBhc3NPd25QdHI8TWVz
c2FnZVBvcnRDaGFubmVsPik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0RXhjZXB0aW9uVG9X
b3JrZXJPYmplY3QoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29s
ZU1lc3NhZ2VUb1dvcmtlck9iamVjdChNZXNzYWdlRGVzdGluYXRpb24sIE1lc3NhZ2VTb3VyY2Us
IE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY29uZmlybU1lc3Nh
Z2VGcm9tV29ya2VyT2JqZWN0KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJPYmplY3RQcm94eS5oIGIvV2ViQ29yZS93b3JrZXJzL1dv
cmtlck9iamVjdFByb3h5LmgKaW5kZXggM2I4NjAyOC4uYmRiYzJiYiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlck9iamVjdFByb3h5LmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dv
cmtlck9iamVjdFByb3h5LmgKQEAgLTM1LDggKzM1LDExIEBACiAKICNpbmNsdWRlICJDb25zb2xl
LmgiCiAKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKKyAgICBjbGFzcyBNZXNzYWdlUG9ydENoYW5uZWw7CiAgICAgY2xhc3MgU3RyaW5nOwogCiAg
ICAgLy8gQSBwcm94eSB0byB0YWxrIHRvIHRoZSB3b3JrZXIgb2JqZWN0LgpAQCAtNDQsNyArNDcs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5X
b3JrZXJPYmplY3RQcm94eSgpIHt9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdl
VG9Xb3JrZXJPYmplY3QoY29uc3QgU3RyaW5nJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQg
cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmLCBQYXNzT3duUHRyPE1lc3Nh
Z2VQb3J0Q2hhbm5lbD4pID0gMDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlv
blRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJl
ciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpID0gMDsKIAo=
</data>
<flag name="review"
          id="16554"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32074</attachid>
            <date>2009-06-30 10:03:36 -0700</date>
            <delta_ts>2009-06-30 10:04:37 -0700</delta_ts>
            <desc>Patch with merge error fixed.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>36592</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3ZmI3YWQyLi43Y2RiNzBmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMDktMDYt
MzAgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI1NDM1PgorCisgICAgICAgIEFkZGVkIHRlc3RzIGZvciBzZW5kaW5n
IE1lc3NhZ2VQb3J0cyB0by9mcm9tIHdvcmtlcnMuCisKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMv
cmVzb3VyY2VzL3dvcmtlci1jbG9uZXBvcnQuanM6IEFkZGVkLgorICAgICAgICAob25tZXNzYWdl
KToKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1tZXNzYWdlcG9ydC5q
czogQWRkZWQuCisgICAgICAgIChvbm1lc3NhZ2UpOgorICAgICAgICAocGluZ0JhY2spOgorICAg
ICAgICAqIGZhc3Qvd29ya2Vycy93b3JrZXItY2xvbmVwb3J0LWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC93b3JrZXJzL3dvcmtlci1jbG9uZXBvcnQuaHRtbC1kaXNhYmxlZDog
QWRkZWQuCisgICAgICAgIFRlc3RzIGZvciBjbG9uaW5nIGEgcG9ydCB3aGlsZSBtZXNzYWdlcyBh
cmUgc2VudCBmcm9tIGFub3RoZXIgdGhyZWFkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy93b3Jr
ZXItbWVzc2FnZXBvcnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtl
cnMvd29ya2VyLW1lc3NhZ2Vwb3J0Lmh0bWwtZGlzYWJsZWQ6IEFkZGVkLgorICAgICAgICBHZW5l
cmFsIHRlc3RzIGZvciBzZW5kaW5nIG1lc3NhZ2VzIHRvIHdvcmtlcnMgdmlhIG1lc3NhZ2UgcG9y
dHMuCisgICAgICAgICogZmFzdC93b3JrZXJzL3dvcmtlci1tZXNzYWdlcG9ydC1nYy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy93b3JrZXItbWVzc2FnZXBvcnQt
Z2MuaHRtbC1kaXNhYmxlZDogQWRkZWQuCisgICAgICAgIFRlc3RzIHRvIGVuc3VyZSBXb3JrZXJz
IGRvbid0IHNodXQgZG93biB3aGVuIHJlYWNoYWJsZSBvbmx5IHZpYSBNZXNzYWdlUG9ydHMuCisK
IDIwMDktMDYtMzAgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3Jlc291cmNlcy93b3JrZXItY2xvbmVwb3J0LmpzIGIvTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3Jlc291cmNlcy93b3JrZXItY2xvbmVwb3J0LmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZjAzYmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1jbG9uZXBvcnQuanMKQEAgLTAsMCAr
MSwxNyBAQAorb25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgaWYgKGV2dC5kYXRhLmlu
ZGV4T2YoInBvc3RCYWNrICIpID09IDApIHsKKyAgICAgICAgaWYgKCFldnQubWVzc2FnZVBvcnQp
IHsKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMVVJFOiBObyBNZXNzYWdlUG9ydCB3aXRo
IHBvc3RCYWNrIGNvbW1hbmQiKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgc3RyaW5ncyA9IGV2
dC5kYXRhLnNwbGl0KCIgIiwgMik7CisgICAgICAgIHZhciBudW1JdGVtcyA9IHBhcnNlSW50KHN0
cmluZ3NbMV0pOworICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogUmVjZWl2ZWQgcmVxdWVzdCBm
b3IgIiArIG51bUl0ZW1zICsgIiBtZXNzYWdlcyIpOworICAgICAgICBmb3IgKHZhciBpID0gMCA7
IGkgPCBudW1JdGVtcyA7IGkrKykgeworICAgICAgICAgICAgdmFyIG1zZyA9ICIiICsgaTsKKyAg
ICAgICAgICAgIGV2dC5tZXNzYWdlUG9ydC5wb3N0TWVzc2FnZShtc2cpOworICAgICAgICB9Cisg
ICAgICAgIHBvc3RNZXNzYWdlKCJwb3N0QmFja0RvbmUiKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBwb3N0TWVzc2FnZSgiRkFJTFVSRTogdW5rbm93biBtZXNzYWdlOiAiICsgZXZ0LmRhdGEpOwor
ICAgIH0KK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9yZXNvdXJjZXMv
d29ya2VyLW1lc3NhZ2Vwb3J0LmpzIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNl
cy93b3JrZXItbWVzc2FnZXBvcnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uODQwZjAwYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9y
ZXNvdXJjZXMvd29ya2VyLW1lc3NhZ2Vwb3J0LmpzCkBAIC0wLDAgKzEsNDAgQEAKK29ubWVzc2Fn
ZSA9IGZ1bmN0aW9uKGV2dCkgeworICAgIGlmIChldnQuZGF0YSA9PSAicG9ydCIpIHsKKyAgICAg
ICAgaWYgKGV2dC5tZXNzYWdlUG9ydCkgeworICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6
IFJlY2VpdmVkIG1lc3NhZ2UgcG9ydCIpOworICAgICAgICAgICAgZXZ0Lm1lc3NhZ2VQb3J0Lm9u
bWVzc2FnZSA9IHBpbmdCYWNrOworICAgICAgICAgICAgZXZ0Lm1lc3NhZ2VQb3J0LnN0YXJ0KCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogRGlkIG5v
dCByZWNlaXZlIGV4cGVjdGVkIE1lc3NhZ2VQb3J0Iik7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKGV2dC5kYXRhID09ICJub3BvcnQiKSB7CisgICAgICAgIGlmIChldnQubWVzc2FnZVBvcnQp
IHsKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBSZWNlaXZlZCBtZXNzYWdlIHBvcnQi
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBldnQu
bWVzc2FnZVBvcnQgPSBudWxsIGFzIGV4cGVjdGVkIik7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKGV2dC5kYXRhID09ICJzcGFtIikgeworICAgICAgICBmb3IgKHZhciBpID0gMCA7IGkgPCAx
MDAwIDsgaSsrKSB7CisgICAgICAgICAgICBldnQubWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UoaSk7
CisgICAgICAgIH0KKyAgICAgICAgcG9zdE1lc3NhZ2UoInNwYW1Eb25lIik7CisgICAgfSBlbHNl
IGlmIChldnQuZGF0YSA9PSAiZ2V0cG9ydCIpIHsKKyAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcg
TWVzc2FnZUNoYW5uZWwoKTsKKyAgICAgICAgcG9zdE1lc3NhZ2UoInBvcnQiLCBjaGFubmVsLnBv
cnQxKTsKKyAgICAgICAgY2hhbm5lbC5wb3J0Mi5vbm1lc3NhZ2UgPSBwaW5nQmFjazsKKyAgICAg
ICAgY2hhbm5lbC5wb3J0Mi5zdGFydCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHBvc3RNZXNz
YWdlKCJVbmtub3duIG1lc3NhZ2U6IiArIGV2dC5kYXRhKTsKKyAgICB9CisKK30KKworZnVuY3Rp
b24gcGluZ0JhY2soZXZ0KSB7CisgICAgLy8gTWFrZSBzdXJlIHdlIGdvdCB0aGUgZXhwZWN0ZWQg
ZGF0YSBhbmQgc2VuZCBhIHJldHVybiBtZXNzYWdlIG92ZXIKKyAgICAvLyB0aGUgcG9ydC4KKyAg
ICBpZiAoZXZ0LmRhdGEgPT0gInBpbmciKSB7CisgICAgICAgIGV2dC50YXJnZXQucG9zdE1lc3Nh
Z2UoInBvbmciKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogdW5r
bm93biBtZXNzYWdlOiAiICsgZXZ0LmRhdGEpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItY2xvbmVwb3J0LWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItY2xvbmVwb3J0LWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTA2ZmJhCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1jbG9uZXBvcnQtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsNyBAQAorVGVzdCBNZXNzYWdlUG9ydCBtZXNzYWdpbmcvZW50YW5nbGUvZGV0YW5n
bGUgYWNyb3NzIHRocmVhZHMuIFNob3VsZCBwcmludCAiU1VDQ0VTUyIgd2hlbiBkb25lLgorCitQ
QVNTOiBSZWNlaXZlZCByZXF1ZXN0IGZvciA1MDAwMCBtZXNzYWdlcworUEFTUzogcG9zdEJhY2sg
Y29tcGxldGUsIGNsb25lZCA+IDEwMDAgdGltZXMuCitTVUNDRVNTIC0gcmVjZWl2ZWQgNTAwMDAg
bWVzc2FnZXMuCitET05FCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93
b3JrZXItY2xvbmVwb3J0Lmh0bWwtZGlzYWJsZWQgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
d29ya2VyLWNsb25lcG9ydC5odG1sLWRpc2FibGVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmY1ZDJjNjMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvd29ya2VyLWNsb25lcG9ydC5odG1sLWRpc2FibGVkCkBAIC0wLDAgKzEsMTAzIEBACis8
Ym9keT4KKzxwPlRlc3QgTWVzc2FnZVBvcnQgbWVzc2FnaW5nL2VudGFuZ2xlL2RldGFuZ2xlIGFj
cm9zcyB0aHJlYWRzLiBTaG91bGQgcHJpbnQgIlNVQ0NFU1MiIHdoZW4gZG9uZS48L3A+Cis8ZGl2
IGlkPXJlc3VsdD48L2Rpdj4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1lc3NhZ2Ug
KyAiPGJyPiI7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworfQorCisKK3ZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFu
bmVsKCk7Cit2YXIgbnVtTWVzc2FnZXMgPSA1MDAwMDsKKworLy8gQ3JlYXRlIGEgY2hhbm5lbCB3
aGljaCB3ZSB3aWxsIHVzZSB0byBjbG9uZSBhbmQgcmUtY2xvbmUgb25lIGVuZCBvZiBhCisvLyBN
ZXNzYWdlQ2hhbm5lbC4KK3ZhciBjbG9uZUNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsK
K3ZhciBzdG9wQ2xvbmluZyA9IGZhbHNlOworY2xvbmVDaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9
IGNsb25lQ2hhbm5lbC5wb3J0Mi5vbm1lc3NhZ2UgPSByZXNlbmRQb3J0OworY2xvbmVDaGFubmVs
LnBvcnQxLnN0YXJ0KCk7CitjbG9uZUNoYW5uZWwucG9ydDIuc3RhcnQoKTsKK2Nsb25lQ2hhbm5l
bC5wb3J0MS5wb3N0TWVzc2FnZSgiIiwgY2hhbm5lbC5wb3J0Mik7CisKKy8vIENyZWF0ZSB3b3Jr
ZXIgd2l0aCBvdGhlciBlbmQgb2YgcG9ydCBhbmQgaGF2ZSBpdCBzZW5kIG1lc3NhZ2VzIGJhY2sg
dG8gdXMKKy8vIHdoaWxlIHdlIGNsb25lIG91ciBlbmQgb2YgdGhlIHBvcnQgcmVwZWF0ZWRseS4K
K3ZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCJyZXNvdXJjZXMvd29ya2VyLWNsb25lcG9ydC5qcyIp
Oword29ya2VyLnBvc3RNZXNzYWdlKCJwb3N0QmFjayAiICsgbnVtTWVzc2FnZXMsIGNoYW5uZWwu
cG9ydDEpOworCisvLyBUZXN0IHBvc3RpbmcgYmFjayA1MDAwMCBtZXNzYWdlcywgbWFrZSBzdXJl
IG9yZGVyaW5nIGlzIGZpbmUKK3dvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAg
ICBpZiAoZXZ0LmRhdGEgPT0gInBvc3RCYWNrRG9uZSIpIHsKKyAgICAgICAgc3RvcENsb25pbmcg
PSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIExvZyBtZXNzYWdlIGZyb20gd29ya2Vy
CisgICAgICAgIGxvZyhldnQuZGF0YSk7CisgICAgfQorfQorCisvLyBLZWVwIGNsb25pbmcgdGhl
IHBhc3NlZCBwb3J0IHVudGlsIHdlJ3JlIHRvbGQgdG8gc3RvcC4KK3ZhciBudW1DbG9uZXMgPSAw
OworZnVuY3Rpb24gcmVzZW5kUG9ydChldnQpCit7CisgICAgaWYgKCFzdG9wQ2xvbmluZykgewor
ICAgICAgICBudW1DbG9uZXMrKzsKKyAgICAgICAgZXZ0LnRhcmdldC5wb3N0TWVzc2FnZSgiIiwg
ZXZ0Lm1lc3NhZ2VQb3J0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobnVtQ2xvbmVzIDwg
MTAwMCkgeworICAgICAgICAgICAgLy8gSWYgd2UgZGlkbid0IGNsb25lIGF0IGxlYXN0IDEwMDAg
dGltZXMsIHRoZW4gdGhlcmUncyBzb21ldGhpbmcgYW1pc3MuCisgICAgICAgICAgICBsb2coIkZB
SUw6IHBvc3RCYWNrIGNvbXBsZXRlLCBidXQgb25seSBjbG9uZWQgIiArIG51bUNsb25lcyArICIg
dGltZXMuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2coIlBBU1M6IHBvc3RC
YWNrIGNvbXBsZXRlLCBjbG9uZWQgPiAxMDAwIHRpbWVzLiIpOworICAgICAgICB9CisgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGUgbWVzc2FnZXMgYXJyaXZlZCBpbiBvcmRlci4KKyAgICAgICAgdmFy
IGl0ZW1OdW0gPSAwOworICAgICAgICAvLyBRdWV1ZSB1cCBhIHRhc2sgdG8gZXhlY3V0ZSBvbmNl
IHRoZSBtZXNzYWdlcyBoYXZlIGJlZW4gcHJvY2Vzc2VkLiBUaGUgdGltZW91dCB2YWx1ZSBkb2Vz
bid0IG1hdHRlciwgc2luY2UgdGltZXJzIHdvbid0IGZpcmUgdW50aWwgdGhlIG1lc3NhZ2UgcXVl
dWUgaXMgY2xlYXJlZC4KKyAgICAgICAgdmFyIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIGxvZygiRkFJTFVSRTogUmVjZWl2ZWQ6ICIgKyBpdGVtTnVtICsgIiBl
dmVudHMgLSBleHBlY3RlZDogIiArIG51bU1lc3NhZ2VzKTsKKyAgICAgICAgfSwgMTApOworICAg
ICAgICBldnQubWVzc2FnZVBvcnQub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAg
ICAgICAgIHZhciBkb25lID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YSA9PSBp
dGVtTnVtKSB7CisgICAgICAgICAgICAgICAgaXRlbU51bSsrOworICAgICAgICAgICAgICAgIGlm
IChpdGVtTnVtID09IG51bU1lc3NhZ2VzKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZygiU1VD
Q0VTUyAtIHJlY2VpdmVkICIgKyBudW1NZXNzYWdlcyArICIgbWVzc2FnZXMuIik7CisgICAgICAg
ICAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG9nKCJGQUlMVVJFOiBPdXQgb2Ygb3JkZXIgbWVz
c2FnZTogZXhwZWN0ZWQgIzogIiArIGl0ZW1OdW0gKyAiLCByZWNlaXZlZDogIiArIGV2ZW50LmRh
dGEpOworICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTsKKyAgICAgICAgICAgIGlmIChkb25lKSB7CisgICAg
ICAgICAgICAgICAgZ2MoKTsKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJlcG9ydERvbmUs
IDEwMCk7ICAvLyBNYWtlIHN1cmUgbm8gdW5leHBlY3RlZCBldmVudHMgY29tZSBpbi4KKyAgICAg
ICAgICAgIH0KKyAgICAgICB9CisgICAgICAgIGV2dC5tZXNzYWdlUG9ydC5zdGFydCgpOworICAg
IH0KK30KKworZnVuY3Rpb24gZ2MoKQoreworICAgIGlmICh3aW5kb3cuR0NDb250cm9sbGVyKQor
ICAgICAgICByZXR1cm4gR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKKworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDA7IGkrKykgeyAvLyBmb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gKEZGIHJl
cXVpcmVzIGFib3V0IDlLIGFsbG9jYXRpb25zIGJlZm9yZSBhIGNvbGxlY3QpLgorICAgICAgICB2
YXIgcyA9IG5ldyBTdHJpbmcoImFiYyIpOworICAgIH0KK30KK2Z1bmN0aW9uIHJlcG9ydERvbmUo
KQoreworICAgICBsb2coIkRPTkUiKTsKKyAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvd29ya2VyLW1lc3NhZ2Vwb3J0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy93b3JrZXItbWVzc2FnZXBvcnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYmVhMGUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLW1lc3NhZ2Vwb3J0LWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDEwIEBACitUZXN0IHRoYXQgcGFnZXMgYW5kIHdvcmtlcnMgY2FuIHNlbmQgTWVzc2FnZVBv
cnRzIHRvIG9uZSBhbm90aGVyLiBTaG91bGQgcHJpbnQgIkRPTkUiIHdoZW4gZG9uZS4KKworUEFT
UzogZXZ0Lm1lc3NhZ2VQb3J0ID0gbnVsbCBhcyBleHBlY3RlZAorUEFTUzogUmVjZWl2ZWQgbWVz
c2FnZSBwb3J0CitQQVNTOiBSZWNlaXZlZCByZXNwb25zZSBmcm9tIFdvcmtlciB2aWEgTWVzc2Fn
ZVBvcnQKK1BBU1M6IEdvdCBwb3J0IGZyb20gd29ya2VyCitQQVNTOiBSZWNlaXZlZCBmaW5hbCBy
ZXNwb25zZSBmcm9tIHdvcmtlcgorUEFTUzogR290IDEwMDAgbWVzc2FnZXMKK0RPTkUKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1tZXNzYWdlcG9ydC1nYy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLW1lc3NhZ2Vwb3J0
LWdjLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmU3
YjhkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1t
ZXNzYWdlcG9ydC1nYy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitUZXN0IHRoYXQgd29y
a2VycyBzdGF5IHJlYWNoYWJsZSB2aWEgbWVzc2FnZSBwb3J0cy4gU2hvdWxkIHByaW50ICJET05F
IiB3aGVuIGRvbmUuCisKK1BBU1M6IFdvcmtlciBpcyByZWFjaGFibGUuCitET05FCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItbWVzc2FnZXBvcnQtZ2MuaHRt
bC1kaXNhYmxlZCBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItbWVzc2FnZXBvcnQt
Z2MuaHRtbC1kaXNhYmxlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGM5
N2E1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1t
ZXNzYWdlcG9ydC1nYy5odG1sLWRpc2FibGVkCkBAIC0wLDAgKzEsNTggQEAKKzxib2R5PgorPHA+
VGVzdCB0aGF0IHdvcmtlcnMgc3RheSByZWFjaGFibGUgdmlhIG1lc3NhZ2UgcG9ydHMuCitTaG91
bGQgcHJpbnQgIkRPTkUiIHdoZW4gZG9uZS48L3A+Cis8ZGl2IGlkPXJlc3VsdD48L2Rpdj4KKzxz
Y3JpcHQ+CitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisKK2lmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
fQorCisvLyBUZXN0IHRoYXQgd29ya2VycyBzdGF5IGFsaXZlIGV2ZW4gdGhvdWdoIHRoZXkgYXJl
IG9ubHkgcmVhY2hhYmxlIHZpYSBtZXNzYWdlIHBvcnRzLgordmFyIHdvcmtlciA9IG5ldyBXb3Jr
ZXIoInJlc291cmNlcy93b3JrZXItbWVzc2FnZXBvcnQuanMiKTsKK3ZhciBjaGFubmVsID0gbmV3
IE1lc3NhZ2VDaGFubmVsKCk7Cit3b3JrZXIucG9zdE1lc3NhZ2UoInBvcnQiLCBjaGFubmVsLnBv
cnQxKTsKK3dvcmtlciA9IDA7CisKK2NoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoInBpbmciKTsK
K2NoYW5uZWwucG9ydDIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgLy8gT3RoZXIg
c2lkZSBpcyBydW5uaW5nLCBub3cgZm9yY2UgYSBHQywgd2FpdCBhIGJpdCwgYW5kIHNlbmQgYSBu
ZXcgbWVzc2FnZSB0byBtYWtlIHN1cmUgaXQgYXJyaXZlcy4KKyAgICBnYygpOworICAgIHNldFRp
bWVvdXQodGVzdFJlYWNoYWJsZSwgMTAwKTsKK30KKworZnVuY3Rpb24gdGVzdFJlYWNoYWJsZSgp
Cit7CisgICAgY2hhbm5lbC5wb3J0Mi5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICAg
ICAgbG9nKCJQQVNTOiBXb3JrZXIgaXMgcmVhY2hhYmxlLiIpOworICAgICAgICBkb25lKCk7Cisg
ICAgfQorICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoInBpbmciKTsKK30KKworZnVuY3Rp
b24gZ2MoKQoreworICAgIGlmICh3aW5kb3cuR0NDb250cm9sbGVyKQorICAgICAgICByZXR1cm4g
R0NDb250cm9sbGVyLmNvbGxlY3QoKTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7
IGkrKykgeyAvLyBmb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gKEZGIHJlcXVpcmVzIGFib3V0IDlL
IGFsbG9jYXRpb25zIGJlZm9yZSBhIGNvbGxlY3QpCisgICAgICAgIHZhciBzID0gbmV3IFN0cmlu
ZygiYWJjIik7CisgICAgfQorfQorCitmdW5jdGlvbiBkb25lKCkKK3sKKyAgICBsb2coIkRPTkUi
KTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLW1lc3Nh
Z2Vwb3J0Lmh0bWwtZGlzYWJsZWQgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLW1l
c3NhZ2Vwb3J0Lmh0bWwtZGlzYWJsZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYzJhNmViYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93
b3JrZXItbWVzc2FnZXBvcnQuaHRtbC1kaXNhYmxlZApAQCAtMCwwICsxLDk4IEBACis8Ym9keT4K
KzxwPlRlc3QgdGhhdCBwYWdlcyBhbmQgd29ya2VycyBjYW4gc2VuZCBNZXNzYWdlUG9ydHMgdG8g
b25lIGFub3RoZXIuCitTaG91bGQgcHJpbnQgIkRPTkUiIHdoZW4gZG9uZS48L3A+Cis8ZGl2IGlk
PXJlc3VsdD48L2Rpdj4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAi
PGJyPiI7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgd29ya2VyID0gbmV3IFdvcmtlcigicmVzb3VyY2Vz
L3dvcmtlci1tZXNzYWdlcG9ydC5qcyIpOwordmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5u
ZWwoKTsKKworLy8gU2VuZCBtZXNzYWdlcyB3aXRoIGFuZCB3aXRob3V0IHBvcnRzIHRvIHRoZSB3
b3JrZXIgdG8gbWFrZSBzdXJlIGl0IGdldHMgdGhlbS4KK3dvcmtlci5wb3N0TWVzc2FnZSgibm9w
b3J0Iik7Cit3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgbG9nKGV2dC5k
YXRhKTsKKyAgICB3b3JrZXIucG9zdE1lc3NhZ2UoInBvcnQiLCBjaGFubmVsLnBvcnQxKTsKKyAg
ICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgICAgIGxvZyhldnQuZGF0
YSk7CisgICAgfQorfTsKKworLy8gU2VuZCBhIG1lc3NhZ2Ugb24gdGhlIG5ldyBwb3J0IHRvIG1h
a2Ugc3VyZSBpdCBnZXRzIHRvIHRoZSB3b3JrZXIuCitjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdl
KCJwaW5nIik7CisKKy8vIFdhaXQgZm9yIHRoZSByZXNwb25zZS4KK2NoYW5uZWwucG9ydDIub25t
ZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgaWYgKGV2dC5kYXRhID09ICJwb25nIikgewor
ICAgICAgICBsb2coIlBBU1M6IFJlY2VpdmVkIHJlc3BvbnNlIGZyb20gV29ya2VyIHZpYSBNZXNz
YWdlUG9ydCIpOworICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gYXdhaXRQb3J0RnJvbVdvcmtl
cjsKKyAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKCJnZXRwb3J0Iik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbG9nKCJGQUlMOiBSZWNlaXZlZCB1bmtub3duIGV2ZW50OiAiICsgZXZ0LmRhdGEp
OworICAgIH0KK30KK2NoYW5uZWwucG9ydDIuc3RhcnQoKTsKKworLy8gSW52b2tlZCBvbmNlIHRo
ZSBmaXJzdCBiYXRjaCBvZiB0ZXN0cyBhcmUgZG9uZSwgdG8gdGVzdCBzZW5kaW5nIGZyb20gdGhl
IHdvcmtlci4KK2Z1bmN0aW9uIGF3YWl0UG9ydEZyb21Xb3JrZXIoZXZ0KQoreworICAgIGlmIChl
dnQuZGF0YSA9PSAicG9ydCIpIHsKKyAgICAgICAgaWYgKCFldnQubWVzc2FnZVBvcnQpIHsKKyAg
ICAgICAgICAgIGxvZygiRkFJTDogRGlkIG5vdCBnZXQgcG9ydCBmcm9tIHdvcmtlciIpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nKCJQQVNTOiBHb3QgcG9ydCBmcm9tIHdvcmtl
ciIpOworICAgICAgICAgICAgZXZ0Lm1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKCJwaW5nIik7Cisg
ICAgICAgICAgICBldnQubWVzc2FnZVBvcnQub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGV2dC5kYXRhID09ICJwb25nIikgeworICAgICAgICAgICAgICAg
ICAgICBsb2coIlBBU1M6IFJlY2VpdmVkIGZpbmFsIHJlc3BvbnNlIGZyb20gd29ya2VyIik7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nKCJGQUlMOiBH
b3QgdW5leHBlY3RlZCByZXNwb25zZTogIiArIGV2dC5kYXRhKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgc3RhcnRTcGFtVGVzdCgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZXZ0Lm1lc3NhZ2VQb3J0LnN0YXJ0KCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBsb2coZXZ0LmRhdGEpOworICAgIH0KK30KKworZnVuY3Rpb24gc3RhcnRTcGFtVGVz
dCgpCit7CisgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsKKyAgICB3b3Jr
ZXIub25tZXNzYWdlID0gZnVuY3Rpb24gKCkgeyBnb3RTcGFtKGNoYW5uZWwucG9ydDEpOyB9Cisg
ICAgd29ya2VyLnBvc3RNZXNzYWdlKCJzcGFtIiwgY2hhbm5lbC5wb3J0Mik7Cit9CisKK2Z1bmN0
aW9uIGdvdFNwYW0ocG9ydCkKK3sKKyAgICB2YXIgc3BhbUNvdW50ID0gMDsKKyAgICBwb3J0Lm9u
bWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkgeworICAgICAgICBpZiAoZXZ0LmRhdGEgIT0gc3BhbUNv
dW50KQorICAgICAgICAgICAgbG9nKCJGQUlMOiBHb3Qgb3V0IG9mIG9yZGVyIG1lc3NhZ2U6ICIg
KyBzcGFtQ291bnQpOworICAgICAgICBzcGFtQ291bnQrKzsKKyAgICAgICAgaWYgKHNwYW1Db3Vu
dCA9PSAxMDAwKSB7CisgICAgICAgICAgICBsb2coIlBBU1M6IEdvdCAxMDAwIG1lc3NhZ2VzIik7
CisgICAgICAgICAgICBkb25lKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIGRv
bmUoKQoreworICAgIGxvZygiRE9ORSIpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGU4YmE5MTIuLjJhNjMxODEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUg
QEAKKzIwMDktMDYtMzAgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1NDM1PgorCisgICAgICAgIEFkZGVkIHN1cHBv
cnQgZm9yIHNlbmRpbmcgTWVzc2FnZVBvcnRzIHRvL2Zyb20gV29ya2VycyB2aWEgcG9zdE1lc3Nh
Z2UoKS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckNvbnRleHQ6Om1lc3NhZ2VDaGFubmVsKToKKyAg
ICAgICAgRXhwb3NlcyBNZXNzYWdlQ2hhbm5lbCBjb25zdHJ1Y3RvciBXb3JrZXJDb250ZXh0Lgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgIE5vdyBjb3JyZWN0bHkgaGFu
ZGxlcyBiZWluZyBpbnN0YW50aWF0ZWQgZnJvbSB3aXRoaW4gYSBXb3JrZXIuCisgICAgICAgKiBw
bGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oOgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJpY1dv
cmtlclRhc2tUcmFpdHM8UGFzc093blB0cj4pOgorICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBw
YXNzaW5nIFBhc3NPd25QdHIgYXMgYXJndW1lbnQgdG8gR2VuZXJpY1dvcmtlclRhc2sKKyAgICAg
ICAqIHdvcmtlcnMvR2VuZXJpY1dvcmtlclRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6Cisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyOjpw
b3N0TWVzc2FnZSk6CisgICAgICAgIE5vdyBoYW5kbGVzIGRpc2VudGFuZ2xpbmcvZW50YW5nbGlu
ZyBNZXNzYWdlUG9ydHMgc2VudCB0by9mcm9tIHZpYSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdl
YkNvcmU6Oldvcmtlcjo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtl
ci5oOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmlkbDoKKyAgICAgICAgQWRkZWQgYW4gb3B0
aW9uYWwgTWVzc2FnZVBvcnQgYXJndW1lbnQgdG8gcG9zdE1lc3NhZ2UoKQorICAgICAgICAqIHdv
cmtlcnMvV29ya2VyQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0
OjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICBXb3JrZXJzIG5vdyByZXBvcnQgcGVuZGlu
ZyBhY3Rpdml0eSB3aGVuZXZlciB0aGVyZSBhcmUgcmVtb3RlbHkgZW50YW5nbGVkIHBvcnRzLgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6cG9zdE1lc3NhZ2UpOgorICAgICAgICBO
b3cgaGFuZGxlcyBkaXNlbnRhbmdsaW5nL2VudGFuZ2xpbmcgTWVzc2FnZVBvcnRzIHNlbnQgdG8v
ZnJvbSB2aWEgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0Ojpk
aXNwYXRjaE1lc3NhZ2UpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5oOgorICAg
ICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5pZGw6CisgICAgICAgIEFkZGVkIGFuIG9wdGlv
bmFsIE1lc3NhZ2VQb3J0IGFyZ3VtZW50IHRvIHBvc3RNZXNzYWdlKCkKKyAgICAgICAgKiB3b3Jr
ZXJzL1dvcmtlckNvbnRleHRQcm94eS5oOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyTWVzc2Fn
aW5nUHJveHkuY3BwOgorICAgICAgICBVcGRhdGVkIG1lc3NhZ2luZyBpbmZyYXN0cnVjdHVyZSB0
byB0cmFuc3BvcnQgYW4gb3B0aW9uYWwgTWVzc2FnZVBvcnQvTWVzc2FnZVBvcnRDaGFubmVsLgor
ICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpNZXNzYWdlV29ya2VyQ29u
dGV4dFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpw
ZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlV29ya2VyVGFzazo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VXb3JrZXJUYXNrOjpNZXNzYWdlV29ya2VyVGFz
ayk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlV29ya2VyVGFzazo6cGVyZm9ybVRhc2spOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RNZXNzYWdlVG9Xb3Jr
ZXJPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RN
ZXNzYWdlVG9Xb3JrZXJDb250ZXh0KToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlck1lc3NhZ2lu
Z1Byb3h5Lmg6CisgICAgICAgIEFkZGVkIGFkZGl0aW9uYWwgcG9zdE1lc3NhZ2UoKSBBUEkgdGhh
dCBhY2NlcHRzIGEgTWVzc2FnZVBvcnQKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlck9iamVjdFBy
b3h5Lmg6CisgICAgICAgIEFkZGVkIGFkZGl0aW9uYWwgcG9zdE1lc3NhZ2UoKSBBUEkgdGhhdCBh
Y2NlcHRzIGEgTWVzc2FnZVBvcnQKKwogMjAwOS0wNi0zMCAgRXJpYyBDYXJsc29uICA8ZXJpYy5j
YXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAKaW5kZXggMTRi
YmUxOS4uMDY0NzVmOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNv
bnRleHRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0
Q3VzdG9tLmNwcApAQCAtMzAsNyArMzAsMTAgQEAKICNpbmNsdWRlICJKU1dvcmtlckNvbnRleHQu
aCIKIAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSlNNZXNzYWdl
Q2hhbm5lbENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgogI2luY2x1
ZGUgIkpTV29ya2VyTG9jYXRpb24uaCIKICNpbmNsdWRlICJKU1dvcmtlck5hdmlnYXRvci5oIgog
I2luY2x1ZGUgIkpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5oIgpAQCAtMTM4LDYgKzE0MSwx
NCBAQCBKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6c2V0SW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogICAgIHJldHVybiBqc051bWJlcihleGVjLCBpbXBsKCkt
PnNldEludGVydmFsKGFjdGlvbiwgZGVsYXkpKTsKIH0KIAorCisjaWYgRU5BQkxFKENIQU5ORUxf
TUVTU0FHSU5HKQorSlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6Om1lc3NhZ2VDaGFubmVsKEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNNZXNz
YWdlQ2hhbm5lbENvbnN0cnVjdG9yPihleGVjLCB0aGlzKTsKK30KKyNlbmRpZgorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKaW5kZXggZjRkMzAzMy4uOTcwNzUxOSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1
ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisj
aW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIldvcmtlci5oIgogCiB1c2luZyBu
YW1lc3BhY2UgSlNDOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhN
ZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNGNhOWI5ZC4uODA3M2NiZCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENv
bnN0cnVjdG9yLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VD
aGFubmVsQ29uc3RydWN0b3IuY3BwCkBAIC0zMSwxMiArMzEsMTQgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJNZXNzYWdlQ2hhbm5lbC5oIgogCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJGcmFtZS5oIgotCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiVjhQcm94eS5oIgogCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkuaCIKKwogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDksMTYgKzUxLDIxIEBAIENBTExCQUNLX0ZVTkNfREVDTChNZXNzYWdlQ2hh
bm5lbENvbnN0cnVjdG9yKQogICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNh
bGxlZCBhcyBhIGZ1bmN0aW9uLiIpOwogCi0gICAgLy8gR2V0IHRoZSBkb2N1bWVudC4KLSAgICBG
cmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIC8vIEdldCB0aGUgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCAoV29ya2VyQ29udGV4dCBvciBEb2N1bWVudCkKKyAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0ID0gMDsKKyAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHByb3h5
ID0gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpyZXRyaWV2ZSgpOworICAgIGlmIChwcm94
eSkKKyAgICAgICAgY29udGV4dCA9IHByb3h5LT53b3JrZXJDb250ZXh0KCk7CisgICAgZWxzZSB7
CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWUoKTsKKyAgICAg
ICAgaWYgKCFmcmFtZSkKKyAgICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAg
ICAgIGNvbnRleHQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICB9CiAKICAgICAvLyBOb3RlOiBp
dCdzIE9LIHRvIGxldCB0aGlzIFJlZlB0ciBnbyBvdXQgb2Ygc2NvcGUgYmVjYXVzZSB3ZSBhbHNv
IGNhbGwKLSAgICAvLyBzZXRET01XcmFwcGVyKCksIHdoaWNoIGVmZmVjdGl2ZWx5IGhvbGRzIGEg
cmVmZXJlbmNlIHRvIG9iai4KLSAgICBSZWZQdHI8TWVzc2FnZUNoYW5uZWw+IG9iaiA9IE1lc3Nh
Z2VDaGFubmVsOjpjcmVhdGUoZG9jdW1lbnQpOworICAgIC8vIFNldERPTVdyYXBwZXIoKSwgd2hp
Y2ggZWZmZWN0aXZlbHkgaG9sZHMgYSByZWZlcmVuY2UgdG8gb2JqLgorICAgIFJlZlB0cjxNZXNz
YWdlQ2hhbm5lbD4gb2JqID0gTWVzc2FnZUNoYW5uZWw6OmNyZWF0ZShjb250ZXh0KTsKIAogICAg
IHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBtZXNzYWdlQ2hhbm5lbCA9IGFyZ3MuSG9sZGVyKCk7CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAppbmRleCBlN2I0YzBlLi5kMTJkNzJkIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVm
aW5lIENyb3NzVGhyZWFkQ29waWVyX2gKIAogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KQEAgLTczLDYgKzc0LDE0
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgfQogICAgIH07CiAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBQYXNzT3du
UHRyPFQ+ID4geworICAgICAgICB0eXBlZGVmIFBhc3NPd25QdHI8VD4gVHlwZTsKKyAgICAgICAg
c3RhdGljIFR5cGUgY29weShjb25zdCBQYXNzT3duUHRyPFQ+JiBvd25QdHIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBQYXNzT3duUHRyPFQ+KHN0YXRpY19jYXN0PFQqPihvd25QdHIu
cmVsZWFzZSgpKSk7CisgICAgICAgIH0KKyAgICB9OworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgc3RkOjphdXRvX3B0cjxUPiA+
IHsKICAgICAgICAgdHlwZWRlZiBzdGQ6OmF1dG9fcHRyPFQ+IFR5cGU7CiAgICAgICAgIHN0YXRp
YyBUeXBlIGNvcHkoY29uc3Qgc3RkOjphdXRvX3B0cjxUPiYgYXV0b1B0cikKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvd29ya2Vycy9HZW5lcmljV29ya2VyVGFzay5oIGIvV2ViQ29yZS93b3JrZXJzL0dl
bmVyaWNXb3JrZXJUYXNrLmgKaW5kZXggOTZiMGU3MC4uMzYxMWZlYSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS93b3JrZXJzL0dlbmVyaWNXb3JrZXJUYXNrLmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL0dl
bmVyaWNXb3JrZXJUYXNrLmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJDcm9zc1RocmVh
ZENvcGllci5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRl
IDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlVHJhaXRzLmg+CiAKQEAgLTU4LDYgKzU5LDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdHlwZWRlZiBQYXNzUmVmUHRyPFQ+IFBh
cmFtVHlwZTsKICAgICB9OwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEdlbmVy
aWNXb3JrZXJUYXNrVHJhaXRzPFBhc3NPd25QdHI8VD4gPiB7CisgICAgICAgIHR5cGVkZWYgUGFz
c093blB0cjxUPiBQYXJhbVR5cGU7CisgICAgfTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFAx
LCB0eXBlbmFtZSBNUDE+CiAgICAgY2xhc3MgR2VuZXJpY1dvcmtlclRhc2sxIDogcHVibGljIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewogICAgIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAKaW5k
ZXggYTgxMGRkYS4uMmUwM2UzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5j
cHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAKQEAgLTc3LDkgKzc3LDE4IEBAIFdv
cmtlcjo6fldvcmtlcigpCiAgICAgbV9jb250ZXh0UHJveHktPndvcmtlck9iamVjdERlc3Ryb3ll
ZCgpOwogfQogCi12b2lkIFdvcmtlcjo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQordm9pZCBXb3JrZXI6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7Ci0gICAgbV9jb250ZXh0UHJveHktPnBvc3RNZXNzYWdlVG9Xb3JrZXJD
b250ZXh0KG1lc3NhZ2UpOworICAgIHBvc3RNZXNzYWdlKG1lc3NhZ2UsIDAsIGVjKTsKK30KKwor
dm9pZCBXb3JrZXI6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgTWVzc2FnZVBv
cnQqIG1lc3NhZ2VQb3J0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBEaXNlbnRhbmds
ZSB0aGUgcG9ydCBpbiBwcmVwYXJhdGlvbiBmb3Igc2VuZGluZyBpdCB0byB0aGUgcmVtb3RlIGNv
bnRleHQuCisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5lbCA9IG1lc3NhZ2VQ
b3J0ID8gbWVzc2FnZVBvcnQtPmRpc2VudGFuZ2xlKGVjKSA6IDA7CisgICAgaWYgKGVjKQorICAg
ICAgICByZXR1cm47CisgICAgbV9jb250ZXh0UHJveHktPnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250
ZXh0KG1lc3NhZ2UsIGNoYW5uZWwucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBXb3JrZXI6OnRlcm1p
bmF0ZSgpCkBAIC0xODAsOSArMTg5LDkgQEAgYm9vbCBXb3JrZXI6OmRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVybiAhZXZl
bnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKIH0KIAotdm9pZCBXb3JrZXI6OmRpc3BhdGNoTWVzc2Fn
ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFdvcmtlcjo6ZGlzcGF0Y2hNZXNzYWdlKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydCkKIHsKLSAg
ICBSZWZQdHI8RXZlbnQ+IGV2dCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKG1lc3NhZ2UsICIiLCAi
IiwgMCwgMCk7CisgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZSht
ZXNzYWdlLCAiIiwgIiIsIDAsIHBvcnQpOwogCiAgICAgaWYgKG1fb25NZXNzYWdlTGlzdGVuZXIu
Z2V0KCkpIHsKICAgICAgICAgZXZ0LT5zZXRUYXJnZXQodGhpcyk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyLmggYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmgKaW5kZXggYmQ5
ZTU1Ni4uMWZjYzhiZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oCisrKyBi
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaApAQCAtNTgsMTEgKzU4LDEyIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIFdvcmtlciogdG9Xb3JrZXIoKSB7IHJldHVybiB0
aGlzOyB9CiAKLSAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
OworICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmLCBNZXNzYWdlUG9ydCos
IEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgICAgICB2b2lkIHRlcm1pbmF0ZSgpOwogCi0gICAgICAg
IHZvaWQgZGlzcGF0Y2hNZXNzYWdlKGNvbnN0IFN0cmluZyYpOworICAgICAgICB2b2lkIGRpc3Bh
dGNoTWVzc2FnZShjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0Pik7CiAgICAg
ICAgIHZvaWQgZGlzcGF0Y2hFcnJvckV2ZW50KCk7CiAKICAgICAgICAgdmlydHVhbCBib29sIGNh
blN1c3BlbmQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaWRs
IGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5pZGwKaW5kZXggMmVmOWI2Mi4uZTA3OGU3YyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5pZGwKKysrIGIvV2ViQ29yZS93b3JrZXJz
L1dvcmtlci5pZGwKQEAgLTMwLDcgKzMwLDggQEAgbW9kdWxlIHRocmVhZHMgewogCiAgICAgICAg
IGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZXJyb3I7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVu
dExpc3RlbmVyIG9ubWVzc2FnZTsKLSAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShpbiBET01TdHJp
bmcgbWVzc2FnZSk7CisgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9NU3RyaW5nIG1lc3Nh
Z2UsIGluIFtPcHRpb25hbF0gTWVzc2FnZVBvcnQgbWVzc2FnZVBvcnQpCisgICAgICAgICAgICBy
YWlzZXMoRE9NRXhjZXB0aW9uKTsKIAogICAgICAgICB2b2lkIHRlcm1pbmF0ZSgpOwogCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAgYi9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyQ29udGV4dC5jcHAKaW5kZXggZmQwNTA2Mi4uOWIwMTliOCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJDb250ZXh0LmNwcApAQCAtMTMwLDYgKzEzMCwxNCBAQCBib29sIFdvcmtlckNvbnRleHQ6
Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiAgICAgICAgIGlmIChpdGVyLT5maXJzdC0+aGFz
UGVuZGluZ0FjdGl2aXR5KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKKyAg
ICAvLyBLZWVwIHRoZSB3b3JrZXIgYWN0aXZlIGFzIGxvbmcgYXMgdGhlcmUgaXMgYSBNZXNzYWdl
UG9ydCB3aXRoIHBlbmRpbmcgYWN0aXZpdHkgb3IgdGhhdCBpcyByZW1vdGVseSBlbnRhbmdsZWQu
CisgICAgSGFzaFNldDxNZXNzYWdlUG9ydCo+Ojpjb25zdF9pdGVyYXRvciBtZXNzYWdlUG9ydHNF
bmQgPSBtZXNzYWdlUG9ydHMoKS5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8TWVzc2FnZVBvcnQq
Pjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1lc3NhZ2VQb3J0cygpLmJlZ2luKCk7IGl0ZXIgIT0g
bWVzc2FnZVBvcnRzRW5kOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKCgqaXRlciktPmhhc1BlbmRp
bmdBY3Rpdml0eSgpIHx8ICgoKml0ZXIpLT5pc0VudGFuZ2xlZCgpICYmICEoKml0ZXIpLT5sb2Nh
bGx5RW50YW5nbGVkUG9ydCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTU1LDEyICsxNjMsMjAgQEAgdm9pZCBXb3JrZXJD
b250ZXh0OjpzY3JpcHRJbXBvcnRlZCh1bnNpZ25lZCBsb25nLCBjb25zdCBTdHJpbmcmKQogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV29ya2VyQ29udGV4dDo6cG9zdE1lc3NhZ2Uo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQordm9pZCBXb3JrZXJDb250ZXh0Ojpwb3N0TWVzc2FnZShj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHBvc3RNZXNz
YWdlKG1lc3NhZ2UsIDAsIGVjKTsKK30KKwordm9pZCBXb3JrZXJDb250ZXh0Ojpwb3N0TWVzc2Fn
ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBwb3J0LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBpZiAobV9jbG9zaW5nKQogICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Ro
cmVhZC0+d29ya2VyT2JqZWN0UHJveHkoKS5wb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KG1lc3Nh
Z2UpOworICAgIC8vIERpc2VudGFuZ2xlIHRoZSBwb3J0IGluIHByZXBhcmF0aW9uIGZvciBzZW5k
aW5nIGl0IHRvIHRoZSByZW1vdGUgY29udGV4dC4KKyAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFu
bmVsPiBjaGFubmVsID0gcG9ydCA/IHBvcnQtPmRpc2VudGFuZ2xlKGVjKSA6IDA7CisgICAgaWYg
KGVjKQorICAgICAgICByZXR1cm47CisgICAgbV90aHJlYWQtPndvcmtlck9iamVjdFByb3h5KCku
cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChtZXNzYWdlLCBjaGFubmVsLnJlbGVhc2UoKSk7CiB9
CiAKIHZvaWQgV29ya2VyQ29udGV4dDo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyLCBi
b29sKQpAQCAtMjM5LDExICsyNTUsMTEgQEAgdm9pZCBXb3JrZXJDb250ZXh0OjpjbGVhckludGVy
dmFsKGludCB0aW1lb3V0SWQpCiAgICAgRE9NVGltZXI6OnJlbW92ZUJ5SWQoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLCB0aW1lb3V0SWQpOwogfQogCi12b2lkIFdvcmtlckNvbnRleHQ6OmRpc3Bh
dGNoTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFdvcmtlckNvbnRleHQ6OmRp
c3BhdGNoTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8TWVzc2FnZVBv
cnQ+IHBvcnQpCiB7CiAgICAgLy8gU2luY2UgY2xvc2UoKSBzdG9wcyB0aGUgdGhyZWFkIGV2ZW50
IGxvb3AsIHRoaXMgc2hvdWxkIG5vdCBldmVyIGdldCBjYWxsZWQgd2hpbGUgY2xvc2luZy4KICAg
ICBBU1NFUlQoIW1fY2xvc2luZyk7Ci0gICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZl
bnQ6OmNyZWF0ZShtZXNzYWdlLCAiIiwgIiIsIDAsIDApOworICAgIFJlZlB0cjxFdmVudD4gZXZ0
ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2FnZSwgIiIsICIiLCAwLCBwb3J0KTsKIAogICAg
IGlmIChtX29ubWVzc2FnZUxpc3RlbmVyLmdldCgpKSB7CiAgICAgICAgIGV2dC0+c2V0VGFyZ2V0
KHRoaXMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaCBiL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgKaW5kZXggY2U3ODJmOC4uYmNlYzc2OSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAorKysgYi9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyQ29udGV4dC5oCkBAIC04MCw3ICs4MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2soUGFzc1JlZlB0cjxUYXNrPik7IC8v
IEV4ZWN1dGVzIHRoZSB0YXNrIG9uIGNvbnRleHQncyB0aHJlYWQgYXN5bmNocm9ub3VzbHkuCiAK
LQogICAgICAgICAvLyBXb3JrZXJHbG9iYWxTY29wZQogICAgICAgICBXb3JrZXJDb250ZXh0KiBz
ZWxmKCkgeyByZXR1cm4gdGhpczsgfQogICAgICAgICBXb3JrZXJMb2NhdGlvbiogbG9jYXRpb24o
KSBjb25zdDsKQEAgLTkwLDkgKzg5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIGltcG9ydFNjcmlwdHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHVybHMsIGNvbnN0IFN0cmlu
ZyYgY2FsbGVyVVJMLCBpbnQgY2FsbGVyTGluZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgICAgICBX
b3JrZXJOYXZpZ2F0b3IqIG5hdmlnYXRvcigpIGNvbnN0OwogCi0KICAgICAgICAgLy8gRGVkaWNh
dGVkV29ya2VyR2xvYmFsU2NvcGUKLSAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpOworICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmLCBN
ZXNzYWdlUG9ydCosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgdm9pZCBzZXRPbm1lc3NhZ2Uo
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25tZXNzYWdlTGlz
dGVuZXIgPSBldmVudExpc3RlbmVyOyB9CiAgICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubWVzc2Fn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb25tZXNzYWdlTGlzdGVuZXIuZ2V0KCk7IH0KIApAQCAtMTEx
LDcgKzExMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFw
PEF0b21pY1N0cmluZywgTGlzdGVuZXJWZWN0b3I+IEV2ZW50TGlzdGVuZXJzTWFwOwogICAgICAg
ICBFdmVudExpc3RlbmVyc01hcCYgZXZlbnRMaXN0ZW5lcnMoKSB7IHJldHVybiBtX2V2ZW50TGlz
dGVuZXJzOyB9CiAKLSAgICAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3RyaW5nJik7
CisgICAgICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlKGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8
TWVzc2FnZVBvcnQ+KTsKIAogICAgICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIGZvciBH
QyBtYXJraW5nLiBTZWUgSlNXb3JrZXJDb250ZXh0OjptYXJrKCkgaW4KICAgICAgICAgLy8gSlNX
b3JrZXJDb250ZXh0Q3VzdG9tLmNwcC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmlkbCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAppbmRleCA5
ZDVhYTc5Li43MDk0MTBhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4
dC5pZGwKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCkBAIC00MSw3ICs0
MSw2IEBAIG1vZHVsZSB0aHJlYWRzIHsKICNlbmRpZgogICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGUgW1JlcGxhY2VhYmxlXSBXb3JrZXJMb2NhdGlvbiBsb2NhdGlvbjsKICAgICAgICAgdm9pZCBj
bG9zZSgpOwotICAgICAgICAvLyAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uY2xv
c2U7CiAgICAgICAgIC8vICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsK
IAogICAgICAgICAvLyBXb3JrZXJVdGlscwpAQCAtNTIsMTAgKzUxLDEwIEBAIG1vZHVsZSB0aHJl
YWRzIHsKIAogCiAgICAgICAgIC8vIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlCi0gICAgICAg
IHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9NU3RyaW5nIG1lc3NhZ2UpOworICAgICAgICB2b2lkIHBv
c3RNZXNzYWdlKGluIERPTVN0cmluZyBtZXNzYWdlLCBpbiBbT3B0aW9uYWxdIE1lc3NhZ2VQb3J0
IG1lc3NhZ2VQb3J0KQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ubWVzc2FnZTsKIAotCiAgICAgICAg
IC8vIFRpbWVycwogICAgICAgICBbQ3VzdG9tXSBsb25nIHNldFRpbWVvdXQoaW4gVGltZW91dEhh
bmRsZXIgaGFuZGxlciwgaW4gbG9uZyB0aW1lb3V0KTsKICAgICAgICAgLy8gW0N1c3RvbV0gbG9u
ZyBzZXRUaW1lb3V0KGluIERPTVN0cmluZyBjb2RlLCBpbiBsb25nIHRpbWVvdXQpOwpAQCAtODAs
NiArNzksOSBAQCBtb2R1bGUgdGhyZWFkcyB7CiAgICAgICAgIGF0dHJpYnV0ZSBNZXNzYWdlRXZl
bnRDb25zdHJ1Y3RvciBNZXNzYWdlRXZlbnQ7CiAgICAgICAgIGF0dHJpYnV0ZSBXb3JrZXJMb2Nh
dGlvbkNvbnN0cnVjdG9yIFdvcmtlckxvY2F0aW9uOwogCisjaWYgRU5BQkxFX0NIQU5ORUxfTUVT
U0FHSU5HCisgICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0dGVyXSBNZXNzYWdlQ2hhbm5l
bENvbnN0cnVjdG9yIE1lc3NhZ2VDaGFubmVsOworI2VuZGlmCiAgICAgICAgIGF0dHJpYnV0ZSBb
SlNDQ3VzdG9tR2V0dGVyXSBYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yIFhNTEh0dHBSZXF1ZXN0
OwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0UHJv
eHkuaCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0UHJveHkuaAppbmRleCBjOGY1NzYx
Li5mNDI1MjdlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dFByb3h5
LmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHRQcm94eS5oCkBAIC0zMyw5ICsz
MywxMiBAQAogCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBLVVJMOworICAgIGNsYXNz
IE1lc3NhZ2VQb3J0Q2hhbm5lbDsKICAgICBjbGFzcyBTdHJpbmc7CiAgICAgY2xhc3MgV29ya2Vy
OwogCkBAIC01MCw3ICs1Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0
dWFsIHZvaWQgdGVybWluYXRlV29ya2VyQ29udGV4dCgpID0gMDsKIAotICAgICAgICB2aXJ0dWFs
IHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoY29uc3QgU3RyaW5nJikgPSAwOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoY29uc3QgU3RyaW5n
JiwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+KSA9IDA7CiAKICAgICAgICAgdmlydHVh
bCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0ID0gMDsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcCBiL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKaW5kZXggYTZkMGQ1ZC4uMDRlNjFjMSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcAorKysgYi9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCkBAIC00NCwxNCArNDQsMTUgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNZXNzYWdlV29ya2VyQ29udGV4dFRhc2sgOiBwdWJs
aWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8TWVzc2FnZVdvcmtlckNvbnRleHRUYXNrPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzaz4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5u
ZWw+IGNoYW5uZWwpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lc3NhZ2VX
b3JrZXJDb250ZXh0VGFzayhtZXNzYWdlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
TWVzc2FnZVdvcmtlckNvbnRleHRUYXNrKG1lc3NhZ2UsIGNoYW5uZWwpKTsKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKKyAgICBNZXNzYWdlV29ya2VyQ29udGV4dFRhc2soY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQ
YXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5lbCkKICAgICAgICAgOiBtX21lc3Nh
Z2UobWVzc2FnZS5jb3B5KCkpCisgICAgICAgICwgbV9jaGFubmVsKGNoYW5uZWwpCiAgICAgewog
ICAgIH0KIApAQCAtNTksNDEgKzYwLDUyIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NF
UlQoc2NyaXB0Q29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOwogICAgICAgICBXb3JrZXJDb250
ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHNjcmlwdENvbnRleHQp
OwotCi0gICAgICAgIGNvbnRleHQtPmRpc3BhdGNoTWVzc2FnZShtX21lc3NhZ2UpOwotCisgICAg
ICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydDsKKyAgICAgICAgaWYgKG1fY2hhbm5lbCkgewor
ICAgICAgICAgICAgcG9ydCA9IE1lc3NhZ2VQb3J0OjpjcmVhdGUoKnNjcmlwdENvbnRleHQpOwor
ICAgICAgICAgICAgcG9ydC0+ZW50YW5nbGUobV9jaGFubmVsLnJlbGVhc2UoKSk7CisgICAgICAg
IH0KKyAgICAgICAgY29udGV4dC0+ZGlzcGF0Y2hNZXNzYWdlKG1fbWVzc2FnZSwgcG9ydC5yZWxl
YXNlKCkpOwogICAgICAgICBjb250ZXh0LT50aHJlYWQoKS0+d29ya2VyT2JqZWN0UHJveHkoKS5j
b25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoY29udGV4dC0+aGFzUGVuZGluZ0FjdGl2aXR5
KCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9tZXNzYWdlOworICAgIE93blB0
cjxNZXNzYWdlUG9ydENoYW5uZWw+IG1fY2hhbm5lbDsKIH07CiAKIGNsYXNzIE1lc3NhZ2VXb3Jr
ZXJUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VXb3JrZXJUYXNrPiBjcmVhdGUoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8TWVzc2FnZVdvcmtlclRhc2s+IGNyZWF0ZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBjaGFubmVsLCBXb3JrZXJN
ZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lc3NhZ2VXb3JrZXJUYXNrKG1lc3NhZ2UsIG1lc3NhZ2luZ1Byb3h5KSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZVdvcmtlclRhc2sobWVzc2FnZSwgY2hh
bm5lbCwgbWVzc2FnaW5nUHJveHkpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgTWVzc2FnZVdv
cmtlclRhc2soY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVz
c2FnaW5nUHJveHkpCisgICAgTWVzc2FnZVdvcmtlclRhc2soY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5lbCwgV29ya2VyTWVzc2FnaW5n
UHJveHkqIG1lc3NhZ2luZ1Byb3h5KQogICAgICAgICA6IG1fbWVzc2FnZShtZXNzYWdlLmNvcHko
KSkKKyAgICAgICAgLCBtX2NoYW5uZWwoY2hhbm5lbCkKICAgICAgICAgLCBtX21lc3NhZ2luZ1By
b3h5KG1lc3NhZ2luZ1Byb3h5KQogICAgIHsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCisgICAgdmlydHVhbCB2b2lkIHBlcmZv
cm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQpCiAgICAgewogICAg
ICAgICBXb3JrZXIqIHdvcmtlck9iamVjdCA9IG1fbWVzc2FnaW5nUHJveHktPndvcmtlck9iamVj
dCgpOwogICAgICAgICBpZiAoIXdvcmtlck9iamVjdCB8fCBtX21lc3NhZ2luZ1Byb3h5LT5hc2tl
ZFRvVGVybWluYXRlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgd29ya2VyT2Jq
ZWN0LT5kaXNwYXRjaE1lc3NhZ2UobV9tZXNzYWdlKTsKKyAgICAgICAgUmVmUHRyPE1lc3NhZ2VQ
b3J0PiBwb3J0OworICAgICAgICBpZiAobV9jaGFubmVsKSB7CisgICAgICAgICAgICBwb3J0ID0g
TWVzc2FnZVBvcnQ6OmNyZWF0ZSgqc2NyaXB0Q29udGV4dCk7CisgICAgICAgICAgICBwb3J0LT5l
bnRhbmdsZShtX2NoYW5uZWwucmVsZWFzZSgpKTsKKyAgICAgICAgfQorICAgICAgICB3b3JrZXJP
YmplY3QtPmRpc3BhdGNoTWVzc2FnZShtX21lc3NhZ2UsIHBvcnQucmVsZWFzZSgpKTsKICAgICB9
CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fbWVzc2FnZTsKKyAgICBPd25QdHI8TWVzc2FnZVBv
cnRDaGFubmVsPiBtX2NoYW5uZWw7CiAgICAgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1fbWVzc2Fn
aW5nUHJveHk7CiB9OwogCkBAIC0yMDUsMjEgKzIxNywyMSBAQCB2b2lkIFdvcmtlck1lc3NhZ2lu
Z1Byb3h5OjpzdGFydFdvcmtlckNvbnRleHQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBT
dHJpbgogICAgIHRocmVhZC0+c3RhcnQoKTsKIH0KIAotdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94
eTo6cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lk
IFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IGNoYW5uZWwpCiB7
Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhNZXNzYWdlV29ya2VyVGFz
azo6Y3JlYXRlKG1lc3NhZ2UsIHRoaXMpKTsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PnBvc3RUYXNrKE1lc3NhZ2VXb3JrZXJUYXNrOjpjcmVhdGUobWVzc2FnZSwgY2hhbm5lbCwgdGhp
cykpOwogfQogCi12b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0TWVzc2FnZVRvV29ya2Vy
Q29udGV4dChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5
Ojpwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NP
d25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBjaGFubmVsKQogewogICAgIGlmIChtX2Fza2VkVG9U
ZXJtaW5hdGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3dvcmtlclRocmVhZCkgewog
ICAgICAgICArK21fdW5jb25maXJtZWRNZXNzYWdlQ291bnQ7Ci0gICAgICAgIG1fd29ya2VyVGhy
ZWFkLT5ydW5Mb29wKCkucG9zdFRhc2soTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpjcmVhdGUo
bWVzc2FnZSkpOworICAgICAgICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrKE1l
c3NhZ2VXb3JrZXJDb250ZXh0VGFzazo6Y3JlYXRlKG1lc3NhZ2UsIGNoYW5uZWwpKTsKICAgICB9
IGVsc2UKLSAgICAgICAgbV9xdWV1ZWRFYXJseVRhc2tzLmFwcGVuZChNZXNzYWdlV29ya2VyQ29u
dGV4dFRhc2s6OmNyZWF0ZShtZXNzYWdlKSk7CisgICAgICAgIG1fcXVldWVkRWFybHlUYXNrcy5h
cHBlbmQoTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpjcmVhdGUobWVzc2FnZSwgY2hhbm5lbCkp
OwogfQogCiB2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0VGFza0Zvck1vZGVUb1dvcmtl
ckNvbnRleHQoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBj
b25zdCBTdHJpbmcmIG1vZGUpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVz
c2FnaW5nUHJveHkuaCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oCmlu
ZGV4IDdmYzk3OTcuLjI5OGQ4NjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJN
ZXNzYWdpbmdQcm94eS5oCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94
eS5oCkBAIC0zNCwxMiArMzQsMTQgQEAKICNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgog
I2luY2x1ZGUgIldvcmtlck9iamVjdFByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorICAgIGNsYXNzIE1lc3NhZ2VQb3J0Q2hhbm5lbDsKICAg
ICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogICAgIGNsYXNzIFN0cmluZzsKICAgICBj
bGFzcyBXb3JrZXI7CkBAIC01MywxMyArNTUsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAvLyAoT25seSB1c2UgdGhlc2UgbWV0aG9kcyBpbiB0aGUgd29ya2VyIG9iamVjdCB0aHJl
YWQuKQogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwm
IHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNl
Q29kZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB0ZXJtaW5hdGVXb3JrZXJDb250ZXh0KCk7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNv
bnRleHQoY29uc3QgU3RyaW5nJiwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+KTsKICAg
ICAgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OwogICAgICAgICB2
aXJ0dWFsIHZvaWQgd29ya2VyT2JqZWN0RGVzdHJveWVkKCk7CiAKICAgICAgICAgLy8gSW1wbGVt
ZW50YXRpb25zIG9mIFdvcmtlck9iamVjdFByb3h5LgogICAgICAgICAvLyAoT25seSB1c2UgdGhl
c2UgbWV0aG9kcyBpbiB0aGUgd29ya2VyIGNvbnRleHQgdGhyZWFkLikKLSAgICAgICAgdmlydHVh
bCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoY29uc3QgU3Ry
aW5nJiwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+KTsKICAgICAgICAgdmlydHVhbCB2
b2lkIHBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKICAgICAgICAgdmly
dHVhbCB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KE1lc3NhZ2VEZXN0aW5h
dGlvbiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoYm9vbCBoYXNQZW5kaW5nQWN0
aXZpdHkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlck9iamVjdFByb3h5Lmgg
Yi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyT2JqZWN0UHJveHkuaAppbmRleCAzYjg2MDI4Li5iZGJj
MmJiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyT2JqZWN0UHJveHkuaAorKysg
Yi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyT2JqZWN0UHJveHkuaApAQCAtMzUsOCArMzUsMTEgQEAK
IAogI2luY2x1ZGUgIkNvbnNvbGUuaCIKIAorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorICAgIGNsYXNzIE1lc3NhZ2VQb3J0Q2hhbm5lbDsKICAg
ICBjbGFzcyBTdHJpbmc7CiAKICAgICAvLyBBIHByb3h5IHRvIHRhbGsgdG8gdGhlIHdvcmtlciBv
YmplY3QuCkBAIC00NCw3ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIHZpcnR1YWwgfldvcmtlck9iamVjdFByb3h5KCkge30KIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmKSA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmlu
ZyYsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPikgPSAwOwogCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoY29uc3QgU3RyaW5nJiBlcnJvck1l
c3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkgPSAwOwogCg==
</data>
<flag name="review"
          id="16596"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>