<?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>145223</bug_id>
          
          <creation_ts>2015-05-20 14:14:19 -0700</creation_ts>
          <short_desc>Refactor AudioContext implementation to enable automatic binding generation of promise-based methods</short_desc>
          <delta_ts>2015-06-10 01:11:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>jer.noble</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1096347</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-05-20 14:14:19 -0700</bug_when>
    <thetext>It would be good to have automatic generation of binding code for promise-based APIs.
A first step might be to refactor existing promise based APIs such as AudioContext, getUserMedia or ReadableStreamReader to align the custom binding code with what would be automatically generated.

I can see 3 approaches:
- Making resolve/reject promise callbacks take a single parameter, passed to the DeferredWrapper without any change.
- Beef-up the IDL promise to type the reject/resolve promise values
- Bite the bullet and make DeferredWrapper a first class citizen of WebCore (maybe renaming it then?). Use directly its API and remove callbacks, at least at binding level.

Option 1 is the natural step given the current code since DeferredWrapper is currently contained to custom binding code.

Option 2 is similar to option 1, a bit more complex at code generation probably, and extending the IDL language.
It would allow having better callback prototypes, like callbacks taking no parameters (or several) for instance.

Option 3 is probably the way to go in the end.
The binding code would be straightforward.
It would handle more nicely rejection of promise with different types (like exceptions or specific application values).
We would no longer be restricted by resolve/reject overloading rules (current reject(int) probably means reject(ExceptionCode)).

The downsides of option 3 compared to callback-based APIs is that callbacks are probably more reusable.
This may be useful (highly speculative) when implementing ReadableStream/MSE link for instance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096348</commentid>
    <comment_count>1</comment_count>
      <attachid>253461</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-05-20 14:18:44 -0700</bug_when>
    <thetext>Created attachment 253461
Example of AudioContext refactoring</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096349</commentid>
    <comment_count>2</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-05-20 14:19:56 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created attachment 253461 [details]
&gt; Example of AudioContext refactoring

This refactoring illustrates option 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097408</commentid>
    <comment_count>3</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-05-26 13:37:16 -0700</bug_when>
    <thetext>Checking Mozilla and Blink code, they went with option 3, which gets the code closer to the spec.
As said before, this has some benefit like rejecting with exception codes or other specific values, resolving with no value by calling resolve()...

To be noted also that the ReadableStream implementation will need a way to call &quot;then&quot; on JS promise values, as well as promises created from WebCore APIs.

webkitGetUserMedia is already a consumer of getUserMedia promise.
Option 3 would solve the potential issue of callbacks that are sometimes called synchronously sometimes asynchronously.

Any thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097409</commentid>
    <comment_count>4</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-05-26 13:38:27 -0700</bug_when>
    <thetext>Checking Mozilla and Blink code, they went with option 3, which gets the code closer to the spec.
As said before, this has some benefit like rejecting with exception codes or other specific values, resolving with no value by calling resolve()...

To be noted also that the ReadableStream implementation will need a way to call &quot;then&quot; on JS promise values, as well as promises created from WebCore APIs.

webkitGetUserMedia is already a consumer of getUserMedia promise.
Option 3 would solve the potential issue of callbacks that are sometimes called synchronously sometimes asynchronously.

Any thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100325</commentid>
    <comment_count>5</comment_count>
      <attachid>254482</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-06-08 02:14:40 -0700</bug_when>
    <thetext>Created attachment 254482
DOMPromise option</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100326</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-08 02:16:26 -0700</bug_when>
    <thetext>Attachment 254482 did not pass style-queue:


ERROR: Source/WebCore/bindings/js/JSDOMPromise.h:64:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/js/JSDOMPromise.h:78:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 2 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100448</commentid>
    <comment_count>7</comment_count>
      <attachid>254482</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-06-08 14:15:48 -0700</bug_when>
    <thetext>Comment on attachment 254482
DOMPromise option

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

&gt; Source/WebCore/bindings/js/JSDOMPromise.h:84
&gt; +template &lt;typename Value, typename Error&gt;
&gt; +class DOMPromise {
&gt; +public:
&gt; +    DOMPromise(DeferredWrapper&amp;&amp; wrapper) : m_wrapper(WTF::move(wrapper)) { }
&gt; +
&gt; +    DOMPromise(const DOMPromise&amp;)= delete;
&gt; +    DOMPromise&amp; operator=(DOMPromise const&amp;) = delete;
&gt; +
&gt; +    void resolve(const Value&amp; value) { m_wrapper.resolve&lt;Value&gt;(value); }
&gt; +    void reject(const Error&amp; error) { m_wrapper.reject&lt;Error&gt;(error); }
&gt; +private:
&gt; +    DeferredWrapper m_wrapper;
&gt; +};
&gt; +
&gt; +template &lt;typename Error&gt;
&gt; +class DOMPromise&lt;std::nullptr_t, Error&gt; {
&gt; +public:
&gt; +    DOMPromise(DeferredWrapper&amp;&amp; wrapper) : m_wrapper(WTF::move(wrapper)) { }
&gt; +
&gt; +    void resolve() { m_wrapper.resolve&lt;std::nullptr_t&gt;(nullptr); }
&gt; +    void reject(const Error&amp; error) { m_wrapper.reject&lt;Error&gt;(error); }
&gt; +private:
&gt; +    DeferredWrapper m_wrapper;
&gt; +};

I don&apos;t think this template specialization adds much. I guess the point is to be able to call resolve() without supplying an argument? But couldn&apos;t the caller supply nullptr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100593</commentid>
    <comment_count>8</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-06-09 00:45:45 -0700</bug_when>
    <thetext>&gt; &gt; +template &lt;typename Error&gt;
&gt; &gt; +class DOMPromise&lt;std::nullptr_t, Error&gt; {
&gt; &gt; +public:
&gt; &gt; +    DOMPromise(DeferredWrapper&amp;&amp; wrapper) : m_wrapper(WTF::move(wrapper)) { }
&gt; &gt; +
&gt; &gt; +    void resolve() { m_wrapper.resolve&lt;std::nullptr_t&gt;(nullptr); }
&gt; &gt; +    void reject(const Error&amp; error) { m_wrapper.reject&lt;Error&gt;(error); }
&gt; &gt; +private:
&gt; &gt; +    DeferredWrapper m_wrapper;
&gt; &gt; +};
&gt; 
&gt; I don&apos;t think this template specialization adds much. I guess the point is
&gt; to be able to call resolve() without supplying an argument? But couldn&apos;t the
&gt; caller supply nullptr?

Depending on its template type, DOMPromise&lt;V,E&gt;::resolve(nullptr) may resolve with jsUndefined() or jsNull().

This specialization (that may be used for ReadableStreamReader::closed) disambiguates the two cases. It also makes the C++ code a bit closer to JS equivalent code.

Hence my slight preference to keep it.

Fact is also that most promises are resolved with values passed by references and not pointers. This makes the jsNull() case not probable in practice.

So, if you still prefer to remove it, I am also fine going that way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100729</commentid>
    <comment_count>9</comment_count>
      <attachid>254482</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-09 11:44:05 -0700</bug_when>
    <thetext>Comment on attachment 254482
DOMPromise option

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

&gt; Source/WebCore/bindings/js/JSDOMPromise.cpp:64
&gt; +    // FIXME: We shoud clear m_globalObject and m_deferred here.

Would be nice to say why.

&gt; Source/WebCore/bindings/js/JSDOMPromise.h:53
&gt; +    void callFunction(JSC::ExecState*, JSC::JSValue function, JSC::JSValue resolution);

Consider changing these all to take JSC::ExecState&amp; and naming the state as &quot;state&quot; instead of &quot;exec&quot;?

&gt; Source/WebCore/bindings/js/JSDOMPromise.h:54
&gt; +    void resolve(JSC::ExecState*exec, JSC::JSValue resolution) { callFunction(exec, m_deferred-&gt;resolve(), resolution); }

Missing space before &quot;exec&quot;.

&gt; Source/WebCore/bindings/js/JSDOMPromise.h:71
&gt; +private:

Please leave a blank line before &quot;private&quot;.

&gt; Source/WebCore/bindings/js/JSDOMPromise.h:82
&gt; +private:

Please leave a blank line before &quot;private&quot;.

&gt;&gt; Source/WebCore/bindings/js/JSDOMPromise.h:84
&gt;&gt; +};
&gt; 
&gt; I don&apos;t think this template specialization adds much. I guess the point is to be able to call resolve() without supplying an argument? But couldn&apos;t the caller supply nullptr?

I agree with Geoff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100930</commentid>
    <comment_count>10</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-06-09 23:55:01 -0700</bug_when>
    <thetext>Thanks for the reviews.

(In reply to comment #9)
&gt; Comment on attachment 254482 [details]
&gt; DOMPromise option
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=254482&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSDOMPromise.cpp:64
&gt; &gt; +    // FIXME: We shoud clear m_globalObject and m_deferred here.
&gt; 
&gt; Would be nice to say why.
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSDOMPromise.h:53
&gt; &gt; +    void callFunction(JSC::ExecState*, JSC::JSValue function, JSC::JSValue resolution);
&gt; 
&gt; Consider changing these all to take JSC::ExecState&amp; and naming the state as
&gt; &quot;state&quot; instead of &quot;exec&quot;?
OK.
I guess globalExec should also be renamed globalExecState then.

&gt; &gt; Source/WebCore/bindings/js/JSDOMPromise.h:54
&gt; &gt; +    void resolve(JSC::ExecState*exec, JSC::JSValue resolution) { callFunction(exec, m_deferred-&gt;resolve(), resolution); }
&gt; 
&gt; Missing space before &quot;exec&quot;.

OK

&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSDOMPromise.h:71
&gt; &gt; +private:
&gt; 
&gt; Please leave a blank line before &quot;private&quot;.
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSDOMPromise.h:82
&gt; &gt; +private:
&gt; 
&gt; Please leave a blank line before &quot;private&quot;.

OK

&gt; 
&gt; &gt;&gt; Source/WebCore/bindings/js/JSDOMPromise.h:84
&gt; &gt;&gt; +};
&gt; &gt; 
&gt; &gt; I don&apos;t think this template specialization adds much. I guess the point is to be able to call resolve() without supplying an argument? But couldn&apos;t the caller supply nullptr?
&gt; 
&gt; I agree with Geoff.

I&apos;ll remove it then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100933</commentid>
    <comment_count>11</comment_count>
      <attachid>254632</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-06-10 00:15:34 -0700</bug_when>
    <thetext>Created attachment 254632
Patch for landing (removed DOMPromise std::nullptr_t specialization)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100941</commentid>
    <comment_count>12</comment_count>
      <attachid>254632</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-10 01:11:18 -0700</bug_when>
    <thetext>Comment on attachment 254632
Patch for landing (removed DOMPromise std::nullptr_t specialization)

Clearing flags on attachment: 254632

Committed r185407: &lt;http://trac.webkit.org/changeset/185407&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100942</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-10 01:11:22 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253461</attachid>
            <date>2015-05-20 14:18:44 -0700</date>
            <delta_ts>2015-06-08 02:14:34 -0700</delta_ts>
            <desc>Example of AudioContext refactoring</desc>
            <filename>bug-145223-20150520231838.patch</filename>
            <type>text/plain</type>
            <size>9221</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NjQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGViZGI3YzcwOGQ0N2Rl
NWI1OGUwNzMzYWNhZGFlZjNiNWMzMzcyOC4uNjMxMjcwN2JiNDRlMjg2Y2UzNjlkOGE3MWU3NjUx
MDA0NzVjYjQwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI2IEBACiAyMDE1LTA1LTIwICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKKyAgICAgICAgUmVmYWN0
b3IgQXVkaW9Db250ZXh0IGltcGxlbWVudGF0aW9uIHRvIGVuYWJsZSBhdXRvbWF0aWMgYmluZGlu
ZyBnZW5lcmF0aW9uIG9mIHByb21pc2UtYmFzZWQgbWV0aG9kcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1MjIzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gYmVoYXZpb3VyIGNoYW5nZS4KKworICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvQ29udGV4dDo6YWRkUmVhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9D
b250ZXh0OjpzZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnN1c3Bl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpyZXN1bWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9Db250ZXh0OjpjbG9zZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0NvbnRleHQuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0F1ZGlvQ29udGV4dDo6c3VzcGVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0F1ZGlvQ29udGV4dDo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTQXVkaW9Db250ZXh0OjpjbG9zZSk6CisKKzIwMTUtMDUtMjAgIFlvdWVubiBGYWJsZXQg
IDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKwogICAgICAgICBBdWRpb0NvbnRleHQgcmVz
dW1lL2Nsb3NlL3N1c3BlbmQgc2hvdWxkIHJlamVjdCBwcm9taXNlcyB3aXRoIGEgRE9NIGV4Y2Vw
dGlvbiBpbiBsaWV1IG9mIHRocm93aW5nIGV4Y2VwdGlvbnMKICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTA2NAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKaW5kZXggMGRjNjg1ZmY2YTJhYWE5
M2IxNzVmNjE2NmQ3MDUwYWZkYWVhN2I1YS4uZDM4OTMzNTZhMzM5MDQwNzZjODc5MmMwMjNlMTE1
NjljMTNkNTVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9Db250ZXh0LmNwcApAQCAtMjc3LDcgKzI3Nyw3IEBAIGJvb2wgQXVkaW9Db250ZXh0Ojppc0lu
aXRpYWxpemVkKCkgY29uc3QKICAgICByZXR1cm4gbV9pc0luaXRpYWxpemVkOwogfQogCi12b2lk
IEF1ZGlvQ29udGV4dDo6YWRkUmVhY3Rpb24oU3RhdGUgc3RhdGUsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCgpPiByZWFjdGlvbikKK3ZvaWQgQXVkaW9Db250ZXh0OjphZGRSZWFjdGlvbihTdGF0ZSBzdGF0
ZSwgU3VjY2Vzc0NhbGxiYWNrIHJlYWN0aW9uKQogewogICAgIHNpemVfdCBzdGF0ZUluZGV4ID0g
c3RhdGljX2Nhc3Q8c2l6ZV90PihzdGF0ZSk7CiAgICAgaWYgKHN0YXRlSW5kZXggPj0gbV9zdGF0
ZVJlYWN0aW9ucy5zaXplKCkpCkBAIC0yOTgsMTEgKzI5OCwxMSBAQCB2b2lkIEF1ZGlvQ29udGV4
dDo6c2V0U3RhdGUoU3RhdGUgc3RhdGUpCiAgICAgaWYgKHN0YXRlSW5kZXggPj0gbV9zdGF0ZVJl
YWN0aW9ucy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4+IHJlYWN0aW9uczsKKyAgICBWZWN0b3I8U3VjY2Vzc0NhbGxiYWNrPiByZWFj
dGlvbnM7CiAgICAgbV9zdGF0ZVJlYWN0aW9uc1tzdGF0ZUluZGV4XS5zd2FwKHJlYWN0aW9ucyk7
CiAKICAgICBmb3IgKGF1dG8mIHJlYWN0aW9uIDogcmVhY3Rpb25zKQotICAgICAgICByZWFjdGlv
bigpOworICAgICAgICByZWFjdGlvbihudWxscHRyKTsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5n
JiBBdWRpb0NvbnRleHQ6OnN0YXRlKCkgY29uc3QKQEAgLTExMDEsNyArMTEwMSw3IEBAIHZvaWQg
QXVkaW9Db250ZXh0OjpkZWNyZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpCiAgICAgLS1tX2FjdGl2
ZVNvdXJjZUNvdW50OwogfQogCi12b2lkIEF1ZGlvQ29udGV4dDo6c3VzcGVuZENvbnRleHQoc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaywgRmFpbHVyZUNhbGxiYWNrIGZhaWx1
cmVDYWxsYmFjaykKK3ZvaWQgQXVkaW9Db250ZXh0OjpzdXNwZW5kKFN1Y2Nlc3NDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2ssIEZhaWx1cmVDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2spCiB7CiAgICAg
QVNTRVJUKHN1Y2Nlc3NDYWxsYmFjayk7CiAgICAgQVNTRVJUKGZhaWx1cmVDYWxsYmFjayk7CkBA
IC0xMTEyLDEzICsxMTEyLDEyIEBAIHZvaWQgQXVkaW9Db250ZXh0OjpzdXNwZW5kQ29udGV4dChz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrLCBGYWlsdXJlCiAgICAgfQogCiAg
ICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlN1c3BlbmRlZCkgewotICAgICAgICBzdWNjZXNzQ2Fs
bGJhY2soKTsKKyAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKG51bGxwdHIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNsb3NlZCB8fCBtX3N0YXRl
ID09IFN0YXRlOjpJbnRlcnJ1cHRlZCB8fCAhbV9kZXN0aW5hdGlvbk5vZGUpIHsKICAgICAgICAg
ZmFpbHVyZUNhbGxiYWNrKDApOwotICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYWRkUmVh
Y3Rpb24oU3RhdGU6OlN1c3BlbmRlZCwgc3VjY2Vzc0NhbGxiYWNrKTsKQEAgLTExMzQsNyArMTEz
Myw3IEBAIHZvaWQgQXVkaW9Db250ZXh0OjpzdXNwZW5kQ29udGV4dChzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4gc3VjY2Vzc0NhbGxiYWNrLCBGYWlsdXJlCiAgICAgfSk7CiB9CiAKLXZvaWQgQXVkaW9D
b250ZXh0OjpyZXN1bWVDb250ZXh0KHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJh
Y2ssIEZhaWx1cmVDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2spCit2b2lkIEF1ZGlvQ29udGV4dDo6
cmVzdW1lKFN1Y2Nlc3NDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssIEZhaWx1cmVDYWxsYmFjayBm
YWlsdXJlQ2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKHN1Y2Nlc3NDYWxsYmFjayk7CiAgICAgQVNT
RVJUKGZhaWx1cmVDYWxsYmFjayk7CkBAIC0xMTQ1LDcgKzExNDQsNyBAQCB2b2lkIEF1ZGlvQ29u
dGV4dDo6cmVzdW1lQ29udGV4dChzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNr
LCBGYWlsdXJlQwogICAgIH0KIAogICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpSdW5uaW5nKSB7
Ci0gICAgICAgIHN1Y2Nlc3NDYWxsYmFjaygpOworICAgICAgICBzdWNjZXNzQ2FsbGJhY2sobnVs
bHB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTExNjcsNyArMTE2Niw3IEBAIHZv
aWQgQXVkaW9Db250ZXh0OjpyZXN1bWVDb250ZXh0KHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNj
ZXNzQ2FsbGJhY2ssIEZhaWx1cmVDCiAgICAgfSk7CiB9CiAKLXZvaWQgQXVkaW9Db250ZXh0Ojpj
bG9zZUNvbnRleHQoc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaywgRmFpbHVy
ZUNhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaykKK3ZvaWQgQXVkaW9Db250ZXh0OjpjbG9zZShTdWNj
ZXNzQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBGYWlsdXJlQ2FsbGJhY2sgZmFpbHVyZUNhbGxi
YWNrKQogewogICAgIEFTU0VSVChzdWNjZXNzQ2FsbGJhY2spOwogICAgIEFTU0VSVChmYWlsdXJl
Q2FsbGJhY2spOwpAQCAtMTE3OCw3ICsxMTc3LDcgQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmNsb3Nl
Q29udGV4dChzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrLCBGYWlsdXJlQ2EK
ICAgICB9CiAKICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2xvc2VkIHx8ICFtX2Rlc3RpbmF0
aW9uTm9kZSkgewotICAgICAgICBzdWNjZXNzQ2FsbGJhY2soKTsKKyAgICAgICAgc3VjY2Vzc0Nh
bGxiYWNrKG51bGxwdHIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAppbmRleCA5ZmYzNTMyNTE1Mjgy
NGRiN2JiYjM1Yzg4NzQzNDI1Yzk0NTZkOTlmLi5lNTJlNDYyZTlhNGExMTFmM2ZiOTAzMDNlNzI5
MGU3OGU5YjJkZTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9Db250ZXh0LmgKQEAgLTEwNiwxMSArMTA2LDIzIEBAIHB1YmxpYzoKIAogICAgIEF1ZGlvTGlz
dGVuZXIqIGxpc3RlbmVyKCkgeyByZXR1cm4gbV9saXN0ZW5lci5nZXQoKTsgfQogCisgICAgdHlw
ZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoc3RkOjpudWxscHRyX3QpPiBTdWNjZXNzQ2FsbGJhY2s7
CiAgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoRXhjZXB0aW9uQ29kZSk+IEZhaWx1cmVD
YWxsYmFjazsKIAotICAgIHZvaWQgc3VzcGVuZENvbnRleHQoc3RkOjpmdW5jdGlvbjx2b2lkKCk+
LCBGYWlsdXJlQ2FsbGJhY2spOwotICAgIHZvaWQgcmVzdW1lQ29udGV4dChzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4sIEZhaWx1cmVDYWxsYmFjayk7Ci0gICAgdm9pZCBjbG9zZUNvbnRleHQoc3RkOjpm
dW5jdGlvbjx2b2lkKCk+LCBGYWlsdXJlQ2FsbGJhY2spOworICAgIHR5cGVkZWYgc3RkOjpudWxs
cHRyX3QgU3VzcGVuZFJlc29sdmVSZXN1bHQ7CisgICAgdHlwZWRlZiBFeGNlcHRpb25Db2RlIFN1
c3BlbmRSZWplY3RSZXN1bHQ7CisgICAgdHlwZWRlZiBzdGQ6Om51bGxwdHJfdCBSZXN1bWVSZXNv
bHZlUmVzdWx0OworICAgIHR5cGVkZWYgRXhjZXB0aW9uQ29kZSBSZXN1bWVSZWplY3RSZXN1bHQ7
CisgICAgdHlwZWRlZiBzdGQ6Om51bGxwdHJfdCBDbG9zZVJlc29sdmVSZXN1bHQ7CisgICAgdHlw
ZWRlZiBFeGNlcHRpb25Db2RlIENsb3NlUmVqZWN0UmVzdWx0OworCisgICAgdm9pZCBzdXNwZW5k
KFN1Y2Nlc3NDYWxsYmFjaywgRmFpbHVyZUNhbGxiYWNrKTsKKyAgICB2b2lkIHJlc3VtZShTdWNj
ZXNzQ2FsbGJhY2ssIEZhaWx1cmVDYWxsYmFjayk7CisgICAgdm9pZCBjbG9zZShTdWNjZXNzQ2Fs
bGJhY2ssIEZhaWx1cmVDYWxsYmFjayk7CisKKyAgICB1c2luZyBBY3RpdmVET01PYmplY3Q6OnN1
c3BlbmQ7CisgICAgdXNpbmcgQWN0aXZlRE9NT2JqZWN0OjpyZXN1bWU7CisKICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHN0YXRlKCkgY29uc3Q7CiAKICAgICAvLyBUaGUgQXVkaW9Ob2RlIGNyZWF0
ZSBtZXRob2RzIGFyZSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIChmcm9tIEphdmFTY3JpcHQp
LgpAQCAtMzI0LDcgKzMzNiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVEaXJ0eUF1ZGlv
U3VtbWluZ0p1bmN0aW9ucygpOwogICAgIHZvaWQgaGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRz
KCk7CiAKLSAgICB2b2lkIGFkZFJlYWN0aW9uKFN0YXRlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4p
OworICAgIHZvaWQgYWRkUmVhY3Rpb24oU3RhdGUsIFN1Y2Nlc3NDYWxsYmFjayk7CiAgICAgdm9p
ZCB1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMoKTsKIAogICAgIC8vIE9ubHkgYWNjZXNzZWQgaW4g
dGhlIGF1ZGlvIHRocmVhZC4KQEAgLTM2MSw3ICszNzMsNyBAQCBwcml2YXRlOgogICAgIFZlY3Rv
cjxBdWRpb05vZGUqPiBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2RlczsKICAgICAvLyBPbmx5
IGFjY2Vzc2VkIGluIHRoZSBhdWRpbyB0aHJlYWQuCiAgICAgVmVjdG9yPEF1ZGlvTm9kZSo+IG1f
ZGVmZXJyZWRGaW5pc2hEZXJlZkxpc3Q7Ci0gICAgVmVjdG9yPFZlY3RvcjxzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4+PiBtX3N0YXRlUmVhY3Rpb25zOworICAgIFZlY3RvcjxWZWN0b3I8U3VjY2Vzc0Nh
bGxiYWNrPj4gbV9zdGF0ZVJlYWN0aW9uczsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVNl
c3Npb24+IG1fbWVkaWFTZXNzaW9uOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxHZW5lcmljRXZlbnRR
dWV1ZT4gbV9ldmVudFF1ZXVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNBdWRpb0NvbnRleHRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNBdWRpb0NvbnRleHRDdXN0b20uY3BwCmluZGV4IDNlZjg1NWM3OTZlNTNlZGIyYjdhZjA1N2M1
NjU5MmE0MTliMjA4ZDQuLmM3MWI4MGIyZWE2MmUwOGRlOGQwMDYzNTJiZmYxNzZmM2ZjMGQ1YTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1
c3RvbS5jcHAKQEAgLTExNCwxNCArMTE0LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0SlNBdWRpb0NvbnRleHQoRXhlY1N0YXRlKiBleGVjKQogSlNWYWx1ZSBKU0F1
ZGlvQ29udGV4dDo6c3VzcGVuZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRGVmZXJyZWRXcmFw
cGVyIHdyYXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwotICAgIGF1dG8gc3VjY2Vzc0NhbGxi
YWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7Ci0gICAgICAgIHdyYXBwZXIucmVzb2x2ZShudWxs
cHRyKTsKKyAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShBdWRpb0NvbnRleHQ6
OlN1c3BlbmRSZXNvbHZlUmVzdWx0IHZhbHVlKSBtdXRhYmxlIHsKKyAgICAgICAgd3JhcHBlci5y
ZXNvbHZlKHZhbHVlKTsKICAgICB9OwotICAgIGF1dG8gZmFpbHVyZUNhbGxiYWNrID0gW3dyYXBw
ZXJdKEV4Y2VwdGlvbkNvZGUgdmFsdWUpIG11dGFibGUgeworICAgIGF1dG8gZmFpbHVyZUNhbGxi
YWNrID0gW3dyYXBwZXJdKEF1ZGlvQ29udGV4dDo6U3VzcGVuZFJlamVjdFJlc3VsdCB2YWx1ZSkg
bXV0YWJsZSB7CiAgICAgICAgIHdyYXBwZXIucmVqZWN0KHZhbHVlKTsKICAgICB9OwogCi0gICAg
aW1wbCgpLnN1c3BlbmRDb250ZXh0KFdURjo6bW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEY6Om1v
dmUoZmFpbHVyZUNhbGxiYWNrKSk7CisgICAgaW1wbCgpLnN1c3BlbmQoV1RGOjptb3ZlKHN1Y2Nl
c3NDYWxsYmFjayksIFdURjo6bW92ZShmYWlsdXJlQ2FsbGJhY2spKTsKIAogICAgIHJldHVybiB3
cmFwcGVyLnByb21pc2UoKTsKIH0KQEAgLTEyOSwxNCArMTI5LDE0IEBAIEpTVmFsdWUgSlNBdWRp
b0NvbnRleHQ6OnN1c3BlbmQoRXhlY1N0YXRlKiBleGVjKQogSlNWYWx1ZSBKU0F1ZGlvQ29udGV4
dDo6cmVzdW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBl
cihleGVjLCBnbG9iYWxPYmplY3QoKSk7Ci0gICAgYXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBbd3Jh
cHBlcl0oKSBtdXRhYmxlIHsKLSAgICAgICAgd3JhcHBlci5yZXNvbHZlKG51bGxwdHIpOworICAg
IGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKEF1ZGlvQ29udGV4dDo6UmVzdW1lUmVz
b2x2ZVJlc3VsdCB2YWx1ZSkgbXV0YWJsZSB7CisgICAgICAgIHdyYXBwZXIucmVzb2x2ZSh2YWx1
ZSk7CiAgICAgfTsKLSAgICBhdXRvIGZhaWx1cmVDYWxsYmFjayA9IFt3cmFwcGVyXShFeGNlcHRp
b25Db2RlIHZhbHVlKSBtdXRhYmxlIHsKKyAgICBhdXRvIGZhaWx1cmVDYWxsYmFjayA9IFt3cmFw
cGVyXShBdWRpb0NvbnRleHQ6OlJlc3VtZVJlamVjdFJlc3VsdCB2YWx1ZSkgbXV0YWJsZSB7CiAg
ICAgICAgIHdyYXBwZXIucmVqZWN0KHZhbHVlKTsKICAgICB9OwogCi0gICAgaW1wbCgpLnJlc3Vt
ZUNvbnRleHQoV1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdURjo6bW92ZShmYWlsdXJlQ2Fs
bGJhY2spKTsKKyAgICBpbXBsKCkucmVzdW1lKFdURjo6bW92ZShzdWNjZXNzQ2FsbGJhY2spLCBX
VEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSk7CiAKICAgICByZXR1cm4gd3JhcHBlci5wcm9taXNl
KCk7CiB9CkBAIC0xNDQsMTQgKzE0NCwxNCBAQCBKU1ZhbHVlIEpTQXVkaW9Db250ZXh0OjpyZXN1
bWUoRXhlY1N0YXRlKiBleGVjKQogSlNWYWx1ZSBKU0F1ZGlvQ29udGV4dDo6Y2xvc2UoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKGV4ZWMsIGdsb2JhbE9i
amVjdCgpKTsKLSAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXSgpIG11dGFibGUg
ewotICAgICAgICB3cmFwcGVyLnJlc29sdmUobnVsbHB0cik7CisgICAgYXV0byBzdWNjZXNzQ2Fs
bGJhY2sgPSBbd3JhcHBlcl0oQXVkaW9Db250ZXh0OjpDbG9zZVJlc29sdmVSZXN1bHQgdmFsdWUp
IG11dGFibGUgeworICAgICAgICB3cmFwcGVyLnJlc29sdmUodmFsdWUpOwogICAgIH07Ci0gICAg
YXV0byBmYWlsdXJlQ2FsbGJhY2sgPSBbd3JhcHBlcl0oRXhjZXB0aW9uQ29kZSB2YWx1ZSkgbXV0
YWJsZSB7CisgICAgYXV0byBmYWlsdXJlQ2FsbGJhY2sgPSBbd3JhcHBlcl0oQXVkaW9Db250ZXh0
OjpDbG9zZVJlamVjdFJlc3VsdCB2YWx1ZSkgbXV0YWJsZSB7CiAgICAgICAgIHdyYXBwZXIucmVq
ZWN0KHZhbHVlKTsKICAgICB9OwogCi0gICAgaW1wbCgpLmNsb3NlQ29udGV4dChXVEY6Om1vdmUo
c3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3ZlKGZhaWx1cmVDYWxsYmFjaykpOworICAgIGltcGwo
KS5jbG9zZShXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3ZlKGZhaWx1cmVDYWxs
YmFjaykpOwogCiAgICAgcmV0dXJuIHdyYXBwZXIucHJvbWlzZSgpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254482</attachid>
            <date>2015-06-08 02:14:40 -0700</date>
            <delta_ts>2015-06-10 00:15:26 -0700</delta_ts>
            <desc>DOMPromise option</desc>
            <filename>bug-145223-20150608111413.patch</filename>
            <type>text/plain</type>
            <size>14583</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1MzEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjA0M2ZiYThlNTBiMWFl
NGE5OTdiN2Y4NzdiNGJlMjNhZDQ5NDdiZC4uMTM4ZjkyNjZmOWY2ZjMwZmFkZjk3OTI4MDViOTk5
OTIyZDZhMmFkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE1LTA2LTA4ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgUmVmYWN0
b3IgQXVkaW9Db250ZXh0IGltcGxlbWVudGF0aW9uIHRvIGVuYWJsZSBhdXRvbWF0aWMgYmluZGlu
ZyBnZW5lcmF0aW9uIG9mIHByb21pc2UtYmFzZWQgbWV0aG9kcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1MjIzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNpbmcgRE9NUHJvbWlzZSBhcyBh
IHR5cGVkIHdyYXBwZXIgYWJvdmUgRGVmZXJyZWRXcmFwcGVyLgorICAgICAgICBUaGlzIERPTVBy
b21pc2UgYWxsb3dzIGNvbnN0cmFpbmluZyBQcm9taXNlIHJlc29sdXRpb24vcmVqZWN0aW9uIHRv
IGEgc2luZ2xlIHJlc29sdXRpb24gdHlwZSBhbmQgcmVqZWN0aW9uIHR5cGUuIAorICAgICAgICBU
aGlzIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgdHlwZWQgY2FsbGJhY2sgdXNhZ2Ugb2YgcHJvbWlzZSBi
YXNlZCBBUElzLCBsaWtlIGdldFVzZXJNZWRpYSgpIG9yIFJlYWRhYmxlU3RyZWFtUmVhZGVyLnJl
YWQoKS4KKworICAgICAgICBBcHBseWluZyBET01Qcm9taXNlIHRvIEF1ZGlvQ29udGV4dCBjbG9z
ZSwgc3VzcGVuZCBhbmQgcmVzdW1lLgorICAgICAgICBDaGFuZ2VkIGJpbmRpbmcgY29kZSB0byBy
ZXByZXNlbnQgd2hhdCBjb3VsZCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBiaW5kaW5n
IGdlbmVyYXRvci4KKyAgICAgICAgRml4aW5nIHVubmVlZGVkIGNvcGllcyBvZiBzdGQ6OmZ1bmN0
aW9uIGNhbGxiYWNrcy4KKworICAgICAgICBEaXNhYmxpbmcgRE9NUHJvbWlzZSBjb3B5IGNvbnN0
cnVjdG9yIHRvIHByZXBhcmUgZm9yIGNsZWFyaW5nIG9mIERlZmVycmVkV3JhcHBlciBnbG9iYWxP
YmplY3QKKyAgICAgICAgYW5kIHByb21pc2VEZWZlcnJlZCB3aGVuIGNhbGxpbmcgcmVqZWN0L3Jl
c29sdmUgY2FsbGJhY2suCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKwor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvQ29udGV4dDo6YWRkUmVhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9Db250ZXh0OjpzZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnN1
c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpyZXN1bWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpjbG9zZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0NvbnRleHQuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4
dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0F1ZGlvQ29udGV4dDo6c3VzcGVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpKU0F1ZGlvQ29udGV4dDo6cmVzdW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTQXVkaW9Db250ZXh0OjpjbG9zZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01Qcm9taXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkV3JhcHBlcjo6Y2FsbEZ1
bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRlZmVycmVkV3JhcHBlcjo6cmVzb2x2ZSk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWZlcnJlZFdyYXBwZXI6OnJlamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpET01Qcm9taXNlOjpE
T01Qcm9taXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVByb21pc2U6OnJlc29sdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NUHJvbWlzZTo6cmVqZWN0KToKKwogMjAxNS0wNi0wNyAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjE4MTcyMCk6
IFVubmVjZXNzYXJ5IGxheW91dCB0cmlnZ2VyZWQgYW55IHRpbWUgYW5pbWF0ZWQgR0lGIGFkdmFu
Y2VzIHRvIGEgbmV3IGZyYW1lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQ29udGV4dC5jcHAKaW5kZXggYTI5MzE2YTE1ZmYyZWI3OTU4OTIwNmExMjQ1MTBkZmEw
N2U1ODEwYS4uMTJjZTg0YmEzYzQ0Nzg2MjVmNDdiODRiNmE4MWM0N2FhYWZhNzM3YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcApAQCAt
NTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIkdlbmVyaWNFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAi
SFJURkRhdGFiYXNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiSFJURlBhbm5lci5oIgorI2luY2x1ZGUg
IkpTRE9NUHJvbWlzZS5oIgogI2luY2x1ZGUgIk9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5o
IgogI2luY2x1ZGUgIk9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgogI2luY2x1ZGUgIk9z
Y2lsbGF0b3JOb2RlLmgiCkBAIC0yNzcsMTMgKzI3OCwxMyBAQCBib29sIEF1ZGlvQ29udGV4dDo6
aXNJbml0aWFsaXplZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1faXNJbml0aWFsaXplZDsKIH0KIAot
dm9pZCBBdWRpb0NvbnRleHQ6OmFkZFJlYWN0aW9uKFN0YXRlIHN0YXRlLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gcmVhY3Rpb24pCit2b2lkIEF1ZGlvQ29udGV4dDo6YWRkUmVhY3Rpb24oU3RhdGUg
c3RhdGUsIFByb21pc2UmJiBwcm9taXNlKQogewogICAgIHNpemVfdCBzdGF0ZUluZGV4ID0gc3Rh
dGljX2Nhc3Q8c2l6ZV90PihzdGF0ZSk7CiAgICAgaWYgKHN0YXRlSW5kZXggPj0gbV9zdGF0ZVJl
YWN0aW9ucy5zaXplKCkpCiAgICAgICAgIG1fc3RhdGVSZWFjdGlvbnMucmVzaXplKHN0YXRlSW5k
ZXggKyAxKTsKIAotICAgIG1fc3RhdGVSZWFjdGlvbnNbc3RhdGVJbmRleF0uYXBwZW5kKHJlYWN0
aW9uKTsKKyAgICBtX3N0YXRlUmVhY3Rpb25zW3N0YXRlSW5kZXhdLmFwcGVuZChXVEY6Om1vdmUo
cHJvbWlzZSkpOwogfQogCiB2b2lkIEF1ZGlvQ29udGV4dDo6c2V0U3RhdGUoU3RhdGUgc3RhdGUp
CkBAIC0yOTgsMTEgKzI5OSwxMSBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6c2V0U3RhdGUoU3RhdGUg
c3RhdGUpCiAgICAgaWYgKHN0YXRlSW5kZXggPj0gbV9zdGF0ZVJlYWN0aW9ucy5zaXplKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IHJlYWN0
aW9uczsKKyAgICBWZWN0b3I8UHJvbWlzZT4gcmVhY3Rpb25zOwogICAgIG1fc3RhdGVSZWFjdGlv
bnNbc3RhdGVJbmRleF0uc3dhcChyZWFjdGlvbnMpOwogCi0gICAgZm9yIChhdXRvJiByZWFjdGlv
biA6IHJlYWN0aW9ucykKLSAgICAgICAgcmVhY3Rpb24oKTsKKyAgICBmb3IgKGF1dG8mIHByb21p
c2UgOiByZWFjdGlvbnMpCisgICAgICAgIHByb21pc2UucmVzb2x2ZSgpOwogfQogCiBjb25zdCBB
dG9taWNTdHJpbmcmIEF1ZGlvQ29udGV4dDo6c3RhdGUoKSBjb25zdApAQCAtMTEwMSwyNyArMTEw
MiwyNCBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6ZGVjcmVtZW50QWN0aXZlU291cmNlQ291bnQoKQog
ICAgIC0tbV9hY3RpdmVTb3VyY2VDb3VudDsKIH0KIAotdm9pZCBBdWRpb0NvbnRleHQ6OnN1c3Bl
bmRDb250ZXh0KHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2ssIEZhaWx1cmVD
YWxsYmFjayBmYWlsdXJlQ2FsbGJhY2spCit2b2lkIEF1ZGlvQ29udGV4dDo6c3VzcGVuZChQcm9t
aXNlJiYgcHJvbWlzZSkKIHsKLSAgICBBU1NFUlQoc3VjY2Vzc0NhbGxiYWNrKTsKLSAgICBBU1NF
UlQoZmFpbHVyZUNhbGxiYWNrKTsKLQogICAgIGlmIChpc09mZmxpbmVDb250ZXh0KCkpIHsKLSAg
ICAgICAgZmFpbHVyZUNhbGxiYWNrKElOVkFMSURfU1RBVEVfRVJSKTsKKyAgICAgICAgcHJvbWlz
ZS5yZWplY3QoSU5WQUxJRF9TVEFURV9FUlIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlN1c3BlbmRlZCkgewotICAgICAgICBzdWNjZXNzQ2Fs
bGJhY2soKTsKKyAgICAgICAgcHJvbWlzZS5yZXNvbHZlKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2xvc2VkIHx8IG1fc3RhdGUgPT0gU3Rh
dGU6OkludGVycnVwdGVkIHx8ICFtX2Rlc3RpbmF0aW9uTm9kZSkgewotICAgICAgICBmYWlsdXJl
Q2FsbGJhY2soMCk7CisgICAgICAgIHByb21pc2UucmVqZWN0KDApOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgYWRkUmVhY3Rpb24oU3RhdGU6OlN1c3BlbmRlZCwgc3VjY2Vzc0NhbGxi
YWNrKTsKKyAgICBhZGRSZWFjdGlvbihTdGF0ZTo6U3VzcGVuZGVkLCBXVEY6Om1vdmUocHJvbWlz
ZSkpOwogCiAgICAgaWYgKCF3aWxsUGF1c2VQbGF5YmFjaygpKQogICAgICAgICByZXR1cm47CkBA
IC0xMTM0LDI3ICsxMTMyLDI0IEBAIHZvaWQgQXVkaW9Db250ZXh0OjpzdXNwZW5kQ29udGV4dChz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrLCBGYWlsdXJlCiAgICAgfSk7CiB9
CiAKLXZvaWQgQXVkaW9Db250ZXh0OjpyZXN1bWVDb250ZXh0KHN0ZDo6ZnVuY3Rpb248dm9pZCgp
PiBzdWNjZXNzQ2FsbGJhY2ssIEZhaWx1cmVDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2spCit2b2lk
IEF1ZGlvQ29udGV4dDo6cmVzdW1lKFByb21pc2UmJiBwcm9taXNlKQogewotICAgIEFTU0VSVChz
dWNjZXNzQ2FsbGJhY2spOwotICAgIEFTU0VSVChmYWlsdXJlQ2FsbGJhY2spOwotCiAgICAgaWYg
KGlzT2ZmbGluZUNvbnRleHQoKSkgewotICAgICAgICBmYWlsdXJlQ2FsbGJhY2soSU5WQUxJRF9T
VEFURV9FUlIpOworICAgICAgICBwcm9taXNlLnJlamVjdChJTlZBTElEX1NUQVRFX0VSUik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6UnVubmlu
ZykgewotICAgICAgICBzdWNjZXNzQ2FsbGJhY2soKTsKKyAgICAgICAgcHJvbWlzZS5yZXNvbHZl
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6
Q2xvc2VkIHx8ICFtX2Rlc3RpbmF0aW9uTm9kZSkgewotICAgICAgICBmYWlsdXJlQ2FsbGJhY2so
MCk7CisgICAgICAgIHByb21pc2UucmVqZWN0KDApOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgYWRkUmVhY3Rpb24oU3RhdGU6OlJ1bm5pbmcsIHN1Y2Nlc3NDYWxsYmFjayk7CisgICAg
YWRkUmVhY3Rpb24oU3RhdGU6OlJ1bm5pbmcsIFdURjo6bW92ZShwcm9taXNlKSk7CiAKICAgICBp
ZiAoIXdpbGxCZWdpblBsYXliYWNrKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExNjcsMjcgKzEx
NjIsMjQgQEAgdm9pZCBBdWRpb0NvbnRleHQ6OnJlc3VtZUNvbnRleHQoc3RkOjpmdW5jdGlvbjx2
b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaywgRmFpbHVyZUMKICAgICB9KTsKIH0KIAotdm9pZCBBdWRp
b0NvbnRleHQ6OmNsb3NlQ29udGV4dChzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxi
YWNrLCBGYWlsdXJlQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrKQordm9pZCBBdWRpb0NvbnRleHQ6
OmNsb3NlKFByb21pc2UmJiBwcm9taXNlKQogewotICAgIEFTU0VSVChzdWNjZXNzQ2FsbGJhY2sp
OwotICAgIEFTU0VSVChmYWlsdXJlQ2FsbGJhY2spOwotCiAgICAgaWYgKGlzT2ZmbGluZUNvbnRl
eHQoKSkgewotICAgICAgICBmYWlsdXJlQ2FsbGJhY2soSU5WQUxJRF9TVEFURV9FUlIpOworICAg
ICAgICBwcm9taXNlLnJlamVjdChJTlZBTElEX1NUQVRFX0VSUik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2xvc2VkIHx8ICFtX2Rlc3RpbmF0
aW9uTm9kZSkgewotICAgICAgICBzdWNjZXNzQ2FsbGJhY2soKTsKKyAgICAgICAgcHJvbWlzZS5y
ZXNvbHZlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRSZWFjdGlvbihTdGF0
ZTo6Q2xvc2VkLCBzdWNjZXNzQ2FsbGJhY2spOworICAgIGFkZFJlYWN0aW9uKFN0YXRlOjpDbG9z
ZWQsIFdURjo6bW92ZShwcm9taXNlKSk7CiAKICAgICBsYXp5SW5pdGlhbGl6ZSgpOwogCiAgICAg
UmVmUHRyPEF1ZGlvQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICBtX2Rlc3RpbmF0aW9u
Tm9kZS0+Y2xvc2UoW3N0cm9uZ1RoaXMsIHN1Y2Nlc3NDYWxsYmFja10geworICAgIG1fZGVzdGlu
YXRpb25Ob2RlLT5jbG9zZShbc3Ryb25nVGhpc10gewogICAgICAgICBzdHJvbmdUaGlzLT5zZXRT
dGF0ZShTdGF0ZTo6Q2xvc2VkKTsKICAgICAgICAgc3Ryb25nVGhpcy0+dW5pbml0aWFsaXplKCk7
CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRl
eHQuaAppbmRleCA0Mzk2OGYyZmJhOTJhY2RjOTVkMmNiYjRjNGE1MDNlZjkyMjQ2ZGFiLi5lOWY3
NmM5N2JiMDUwMTIzNjllMzA1MTdkMDdhNzhlNDMyYWM2OWMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIu
aCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgog
I2luY2x1ZGUgIk1lZGlhQ2FuU3RhcnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIk1lZGlhUHJvZHVj
ZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbi5oIgpAQCAtMTA2LDExICsxMDcs
MTUgQEAgcHVibGljOgogCiAgICAgQXVkaW9MaXN0ZW5lciogbGlzdGVuZXIoKSB7IHJldHVybiBt
X2xpc3RlbmVyLmdldCgpOyB9CiAKLSAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZChFeGNl
cHRpb25Db2RlKT4gRmFpbHVyZUNhbGxiYWNrOworICAgIHVzaW5nIEFjdGl2ZURPTU9iamVjdDo6
c3VzcGVuZDsKKyAgICB1c2luZyBBY3RpdmVET01PYmplY3Q6OnJlc3VtZTsKKworICAgIHR5cGVk
ZWYgRE9NUHJvbWlzZTxzdGQ6Om51bGxwdHJfdCwgRXhjZXB0aW9uQ29kZT4gUHJvbWlzZTsKKwor
ICAgIHZvaWQgc3VzcGVuZChQcm9taXNlJiYpOworICAgIHZvaWQgcmVzdW1lKFByb21pc2UmJik7
CisgICAgdm9pZCBjbG9zZShQcm9taXNlJiYpOwogCi0gICAgdm9pZCBzdXNwZW5kQ29udGV4dChz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4sIEZhaWx1cmVDYWxsYmFjayk7Ci0gICAgdm9pZCByZXN1bWVD
b250ZXh0KHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiwgRmFpbHVyZUNhbGxiYWNrKTsKLSAgICB2b2lk
IGNsb3NlQ29udGV4dChzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4sIEZhaWx1cmVDYWxsYmFjayk7CiAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGF0ZSgpIGNvbnN0OwogCiAgICAgLy8gVGhlIEF1ZGlv
Tm9kZSBjcmVhdGUgbWV0aG9kcyBhcmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCAoZnJvbSBK
YXZhU2NyaXB0KS4KQEAgLTMyNCw3ICszMjksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxl
RGlydHlBdWRpb1N1bW1pbmdKdW5jdGlvbnMoKTsKICAgICB2b2lkIGhhbmRsZURpcnR5QXVkaW9O
b2RlT3V0cHV0cygpOwogCi0gICAgdm9pZCBhZGRSZWFjdGlvbihTdGF0ZSwgc3RkOjpmdW5jdGlv
bjx2b2lkKCk+KTsKKyAgICB2b2lkIGFkZFJlYWN0aW9uKFN0YXRlLCBQcm9taXNlJiYpOwogICAg
IHZvaWQgdXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKCk7CiAKICAgICAvLyBPbmx5IGFjY2Vzc2Vk
IGluIHRoZSBhdWRpbyB0aHJlYWQuCkBAIC0zNjEsNyArMzY2LDcgQEAgcHJpdmF0ZToKICAgICBW
ZWN0b3I8QXVkaW9Ob2RlKj4gbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXM7CiAgICAgLy8g
T25seSBhY2Nlc3NlZCBpbiB0aGUgYXVkaW8gdGhyZWFkLgogICAgIFZlY3RvcjxBdWRpb05vZGUq
PiBtX2RlZmVycmVkRmluaXNoRGVyZWZMaXN0OwotICAgIFZlY3RvcjxWZWN0b3I8c3RkOjpmdW5j
dGlvbjx2b2lkKCk+Pj4gbV9zdGF0ZVJlYWN0aW9uczsKKyAgICBWZWN0b3I8VmVjdG9yPFByb21p
c2U+PiBtX3N0YXRlUmVhY3Rpb25zOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtTWVk
aWFTZXNzaW9uPiBtX21lZGlhU2Vzc2lvbjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8R2VuZXJpY0V2
ZW50UXVldWU+IG1fZXZlbnRRdWV1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcAppbmRleCAzZWY4NTVjNzk2ZTUzZWRiMmI3YWYw
NTdjNTY1OTJhNDE5YjIwOGQ0Li44OWIwNGM1NzE0NGYzYTM4OTJmMzcyZGE3ZTRjMTZjN2FjZmNl
YjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4
dEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnRl
eHRDdXN0b20uY3BwCkBAIC0xMTMsNDcgKzExMywyOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdEpTQXVkaW9Db250ZXh0KEV4ZWNTdGF0ZSogZXhlYykKIAogSlNWYWx1
ZSBKU0F1ZGlvQ29udGV4dDo6c3VzcGVuZChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgRGVmZXJy
ZWRXcmFwcGVyIHdyYXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwotICAgIGF1dG8gc3VjY2Vz
c0NhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7Ci0gICAgICAgIHdyYXBwZXIucmVzb2x2
ZShudWxscHRyKTsKLSAgICB9OwotICAgIGF1dG8gZmFpbHVyZUNhbGxiYWNrID0gW3dyYXBwZXJd
KEV4Y2VwdGlvbkNvZGUgdmFsdWUpIG11dGFibGUgewotICAgICAgICB3cmFwcGVyLnJlamVjdCh2
YWx1ZSk7Ci0gICAgfTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0g
SlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QoKSk7CiAKLSAgICBp
bXBsKCkuc3VzcGVuZENvbnRleHQoV1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdURjo6bW92
ZShmYWlsdXJlQ2FsbGJhY2spKTsKKyAgICBpbXBsKCkuc3VzcGVuZChEZWZlcnJlZFdyYXBwZXIo
ZXhlYywgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCkpOwogCi0gICAgcmV0dXJuIHdy
YXBwZXIucHJvbWlzZSgpOworICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsK
IH0KIAogSlNWYWx1ZSBKU0F1ZGlvQ29udGV4dDo6cmVzdW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3QoKSk7Ci0gICAg
YXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxlIHsKLSAgICAgICAgd3Jh
cHBlci5yZXNvbHZlKG51bGxwdHIpOwotICAgIH07Ci0gICAgYXV0byBmYWlsdXJlQ2FsbGJhY2sg
PSBbd3JhcHBlcl0oRXhjZXB0aW9uQ29kZSB2YWx1ZSkgbXV0YWJsZSB7Ci0gICAgICAgIHdyYXBw
ZXIucmVqZWN0KHZhbHVlKTsKLSAgICB9OworICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNl
RGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCgp
KTsKIAotICAgIGltcGwoKS5yZXN1bWVDb250ZXh0KFdURjo6bW92ZShzdWNjZXNzQ2FsbGJhY2sp
LCBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSk7CisgICAgaW1wbCgpLnJlc3VtZShEZWZlcnJl
ZFdyYXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCkpOwogCi0gICAg
cmV0dXJuIHdyYXBwZXIucHJvbWlzZSgpOworICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnBy
b21pc2UoKTsKIH0KIAogSlNWYWx1ZSBKU0F1ZGlvQ29udGV4dDo6Y2xvc2UoRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgp
KTsKLSAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXSgpIG11dGFibGUgewotICAg
ICAgICB3cmFwcGVyLnJlc29sdmUobnVsbHB0cik7Ci0gICAgfTsKLSAgICBhdXRvIGZhaWx1cmVD
YWxsYmFjayA9IFt3cmFwcGVyXShFeGNlcHRpb25Db2RlIHZhbHVlKSBtdXRhYmxlIHsKLSAgICAg
ICAgd3JhcHBlci5yZWplY3QodmFsdWUpOwotICAgIH07CisgICAgSlNQcm9taXNlRGVmZXJyZWQq
IHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFs
T2JqZWN0KCkpOwogCi0gICAgaW1wbCgpLmNsb3NlQ29udGV4dChXVEY6Om1vdmUoc3VjY2Vzc0Nh
bGxiYWNrKSwgV1RGOjptb3ZlKGZhaWx1cmVDYWxsYmFjaykpOworICAgIGltcGwoKS5jbG9zZShE
ZWZlcnJlZFdyYXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCkpOwog
Ci0gICAgcmV0dXJuIHdyYXBwZXIucHJvbWlzZSgpOworICAgIHJldHVybiBwcm9taXNlRGVmZXJy
ZWQtPnByb21pc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAKaW5kZXggNDZiZGRiYTE4ZjhjODViZmNi
N2ZkMWU4Y2M2N2M1NzdkNTE3ZGYxMi4uNDViMDQzZGFmNzNkYWQwOGRjZWEyODUxNjhlZGY0YTk3
Nzg2MDViZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9t
aXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuY3Bw
CkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAKKyNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCisKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTQ5LDMyICs1MSwxNyBAQCBKU09iamVjdCogRGVmZXJyZWRXcmFwcGVyOjpwcm9t
aXNlKCkgY29uc3QKICAgICByZXR1cm4gbV9kZWZlcnJlZC0+cHJvbWlzZSgpOwogfQogCi12b2lk
IERlZmVycmVkV3JhcHBlcjo6cmVzb2x2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgcmVzb2x1
dGlvbikKK3ZvaWQgRGVmZXJyZWRXcmFwcGVyOjpjYWxsRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGZ1bmN0aW9uLCBKU1ZhbHVlIHJlc29sdXRpb24pCiB7Ci0gICAgSlNWYWx1ZSBk
ZWZlcnJlZFJlc29sdmUgPSBtX2RlZmVycmVkLT5yZXNvbHZlKCk7Ci0KLSAgICBDYWxsRGF0YSBy
ZXNvbHZlQ2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgcmVzb2x2ZUNhbGxUeXBlID0gZ2V0Q2FsbERh
dGEoZGVmZXJyZWRSZXNvbHZlLCByZXNvbHZlQ2FsbERhdGEpOwotICAgIEFTU0VSVChyZXNvbHZl
Q2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25lKTsKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBD
YWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAg
QVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlTm9uZSk7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZChyZXNvbHV0aW9uKTsKIAotICAg
IGNhbGwoZXhlYywgZGVmZXJyZWRSZXNvbHZlLCByZXNvbHZlQ2FsbFR5cGUsIHJlc29sdmVDYWxs
RGF0YSwganNVbmRlZmluZWQoKSwgYXJndW1lbnRzKTsKLX0KLQotdm9pZCBEZWZlcnJlZFdyYXBw
ZXI6OnJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgcmVhc29uKQotewotICAgIEpTVmFs
dWUgZGVmZXJyZWRSZWplY3QgPSBtX2RlZmVycmVkLT5yZWplY3QoKTsKLQotICAgIENhbGxEYXRh
IHJlamVjdENhbGxEYXRhOwotICAgIENhbGxUeXBlIHJlamVjdENhbGxUeXBlID0gZ2V0Q2FsbERh
dGEoZGVmZXJyZWRSZWplY3QsIHJlamVjdENhbGxEYXRhKTsKLSAgICBBU1NFUlQocmVqZWN0Q2Fs
bFR5cGUgIT0gQ2FsbFR5cGVOb25lKTsKLQotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3Vt
ZW50czsKLSAgICBhcmd1bWVudHMuYXBwZW5kKHJlYXNvbik7Ci0KLSAgICBjYWxsKGV4ZWMsIGRl
ZmVycmVkUmVqZWN0LCByZWplY3RDYWxsVHlwZSwgcmVqZWN0Q2FsbERhdGEsIGpzVW5kZWZpbmVk
KCksIGFyZ3VtZW50cyk7CisgICAgY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxE
YXRhLCBqc1VuZGVmaW5lZCgpLCBhcmd1bWVudHMpOworICAgIC8vIEZJWE1FOiBXZSBzaG91ZCBj
bGVhciBtX2dsb2JhbE9iamVjdCBhbmQgbV9kZWZlcnJlZCBoZXJlLgogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oCmluZGV4IGVmMzAzYTcyNjU0MDc2MzY2
OWI1Mjg4ZDE4YWM2Nzg1MGVlZDVmNDYuLjljOTliNTA5ZWI2NDJjMjYxODU4MTdhYzY3YTQ3YzE3
Njk1MTJiZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJv
bWlzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oCkBA
IC01MCwxMyArNTAsMzkgQEAgcHVibGljOgogICAgIEpTQzo6SlNPYmplY3QqIHByb21pc2UoKSBj
b25zdDsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHJlc29sdmUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUpOwotICAgIHZvaWQgcmVqZWN0KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
KTsKKyAgICB2b2lkIGNhbGxGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBm
dW5jdGlvbiwgSlNDOjpKU1ZhbHVlIHJlc29sdXRpb24pOworICAgIHZvaWQgcmVzb2x2ZShKU0M6
OkV4ZWNTdGF0ZSpleGVjLCBKU0M6OkpTVmFsdWUgcmVzb2x1dGlvbikgeyBjYWxsRnVuY3Rpb24o
ZXhlYywgbV9kZWZlcnJlZC0+cmVzb2x2ZSgpLCByZXNvbHV0aW9uKTsgfQorICAgIHZvaWQgcmVq
ZWN0KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgcmVzb2x1dGlvbikgeyBjYWxs
RnVuY3Rpb24oZXhlYywgbV9kZWZlcnJlZC0+cmVqZWN0KCksIHJlc29sdXRpb24pOyB9CiAKICAg
ICBKU0M6OlN0cm9uZzxKU0RPTUdsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAgICAgSlND
OjpTdHJvbmc8SlNDOjpKU1Byb21pc2VEZWZlcnJlZD4gbV9kZWZlcnJlZDsKIH07CiAKK3RlbXBs
YXRlIDx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXJyb3I+CitjbGFzcyBET01Qcm9taXNlIHsK
K3B1YmxpYzoKKyAgICBET01Qcm9taXNlKERlZmVycmVkV3JhcHBlciYmIHdyYXBwZXIpIDogbV93
cmFwcGVyKFdURjo6bW92ZSh3cmFwcGVyKSkgeyB9CisKKyAgICBET01Qcm9taXNlKGNvbnN0IERP
TVByb21pc2UmKT0gZGVsZXRlOworICAgIERPTVByb21pc2UmIG9wZXJhdG9yPShET01Qcm9taXNl
IGNvbnN0JikgPSBkZWxldGU7CisKKyAgICB2b2lkIHJlc29sdmUoY29uc3QgVmFsdWUmIHZhbHVl
KSB7IG1fd3JhcHBlci5yZXNvbHZlPFZhbHVlPih2YWx1ZSk7IH0KKyAgICB2b2lkIHJlamVjdChj
b25zdCBFcnJvciYgZXJyb3IpIHsgbV93cmFwcGVyLnJlamVjdDxFcnJvcj4oZXJyb3IpOyB9Citw
cml2YXRlOgorICAgIERlZmVycmVkV3JhcHBlciBtX3dyYXBwZXI7Cit9OworCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgRXJyb3I+CitjbGFzcyBET01Qcm9taXNlPHN0ZDo6bnVsbHB0cl90LCBFcnJvcj4g
eworcHVibGljOgorICAgIERPTVByb21pc2UoRGVmZXJyZWRXcmFwcGVyJiYgd3JhcHBlcikgOiBt
X3dyYXBwZXIoV1RGOjptb3ZlKHdyYXBwZXIpKSB7IH0KKworICAgIHZvaWQgcmVzb2x2ZSgpIHsg
bV93cmFwcGVyLnJlc29sdmU8c3RkOjpudWxscHRyX3Q+KG51bGxwdHIpOyB9CisgICAgdm9pZCBy
ZWplY3QoY29uc3QgRXJyb3ImIGVycm9yKSB7IG1fd3JhcHBlci5yZWplY3Q8RXJyb3I+KGVycm9y
KTsgfQorcHJpdmF0ZToKKyAgICBEZWZlcnJlZFdyYXBwZXIgbV93cmFwcGVyOworfTsKKwogdGVt
cGxhdGU8Y2xhc3MgUmVzb2x2ZVJlc3VsdFR5cGU+CiBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBw
ZXI6OnJlc29sdmUoY29uc3QgUmVzb2x2ZVJlc3VsdFR5cGUmIHJlc3VsdCkKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254632</attachid>
            <date>2015-06-10 00:15:34 -0700</date>
            <delta_ts>2015-06-10 01:11:18 -0700</delta_ts>
            <desc>Patch for landing (removed DOMPromise std::nullptr_t specialization)</desc>
            <filename>bug-145223-20150610091505.patch</filename>
            <type>text/plain</type>
            <size>18578</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1NDA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDBiNjQwMWY2MGY3Zjc3
MzdhYWY2MmUxZmVmYTMwOGNmYjE0MjQxMy4uNDdkZDY0MTU3NzAzNjVjNzE3MGNkYjI5MGMwNzNm
ODI4ZmFjZmJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ0IEBACiAyMDE1LTA2LTA5ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKKyAgICAgICAgUmVmYWN0
b3IgQXVkaW9Db250ZXh0IGltcGxlbWVudGF0aW9uIHRvIGVuYWJsZSBhdXRvbWF0aWMgYmluZGlu
ZyBnZW5lcmF0aW9uIG9mIHByb21pc2UtYmFzZWQgbWV0aG9kcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1MjIzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgSW50cm9kdWNpbmcgRE9NUHJvbWlzZSBhcyBhIHR5
cGVkIHdyYXBwZXIgYWJvdmUgRGVmZXJyZWRXcmFwcGVyLgorICAgICAgICBUaGlzIERPTVByb21p
c2UgYWxsb3dzIGNvbnN0cmFpbmluZyBQcm9taXNlIHJlc29sdXRpb24vcmVqZWN0aW9uIHRvIGEg
c2luZ2xlIHJlc29sdXRpb24gdHlwZSBhbmQgcmVqZWN0aW9uIHR5cGUuIAorICAgICAgICBUaGlz
IG1pZ2h0IGJlIHVzZWZ1bCBmb3IgdHlwZWQgY2FsbGJhY2sgdXNhZ2Ugb2YgcHJvbWlzZSBiYXNl
ZCBBUElzLCBsaWtlIGdldFVzZXJNZWRpYSgpIG9yIFJlYWRhYmxlU3RyZWFtUmVhZGVyLnJlYWQo
KS4KKworICAgICAgICBBcHBseWluZyBET01Qcm9taXNlIHRvIEF1ZGlvQ29udGV4dCBjbG9zZSwg
c3VzcGVuZCBhbmQgcmVzdW1lLgorICAgICAgICBDaGFuZ2VkIGJpbmRpbmcgY29kZSB0byByZXBy
ZXNlbnQgd2hhdCBjb3VsZCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBiaW5kaW5nIGdl
bmVyYXRvci4KKyAgICAgICAgRml4aW5nIHVubmVlZGVkIGNvcGllcyBvZiBzdGQ6OmZ1bmN0aW9u
IGNhbGxiYWNrcy4KKworICAgICAgICBEaXNhYmxpbmcgRE9NUHJvbWlzZSBjb3B5IGNvbnN0cnVj
dG9ycyB0byBsb3dlciBjaGFuY2VzIHRoYXQgcmVzb2x1dGlvbi9yZWplY3Rpb24gaXMgZG9uZSB0
d2ljZSBvbiB0aGUgc2FtZSBvYmplY3QuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0
ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6YWRkUmVhY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9Db250ZXh0OjpzZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Nv
bnRleHQ6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpyZXN1bWUp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpjbG9zZSk6CisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1
ZGlvQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0F1ZGlvQ29udGV4dDo6
c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0F1ZGlvQ29udGV4dDo6cmVzdW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTQXVkaW9Db250ZXh0OjpjbG9zZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNET01Qcm9taXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkV3JhcHBl
cjo6Y2FsbEZ1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkV3JhcHBlcjo6cmVzb2x2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWZlcnJlZFdyYXBwZXI6OnJlamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpET01Q
cm9taXNlOjpET01Qcm9taXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVByb21pc2U6OnJlc29s
dmUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUHJvbWlzZTo6cmVqZWN0KToKKworMjAxNS0wNi0w
OSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgorCiAgICAgICAg
IERlZmVycmVkV3JhcHBlciBzaG91bGQgY2xlYXIgaXRzIEpTIHN0cm9uZyByZWZlcmVuY2VzIG9u
Y2UgaXRzIHByb21pc2UgaXMgcmVzb2x2ZWQvcmVqZWN0ZWQKICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTc1MwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKaW5kZXggMmVkMmVmNWQ0ZWJjYWQz
Y2I5MzNjYWVmZjBhYjEyZmJiM2M5NTQxZC4uNWEzZGVhMGE1MDcxZDhkYWZiY2RmZTA1NWE4ZDA1
Y2Q4MDM0MGRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9Db250ZXh0LmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIkdlbmVyaWNFdmVudFF1
ZXVlLmgiCiAjaW5jbHVkZSAiSFJURkRhdGFiYXNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiSFJURlBh
bm5lci5oIgorI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgogI2luY2x1ZGUgIk9mZmxpbmVBdWRp
b0NvbXBsZXRpb25FdmVudC5oIgogI2luY2x1ZGUgIk9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5oIgogI2luY2x1ZGUgIk9zY2lsbGF0b3JOb2RlLmgiCkBAIC0yNzcsMTMgKzI3OCwxMyBAQCBi
b29sIEF1ZGlvQ29udGV4dDo6aXNJbml0aWFsaXplZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1faXNJ
bml0aWFsaXplZDsKIH0KIAotdm9pZCBBdWRpb0NvbnRleHQ6OmFkZFJlYWN0aW9uKFN0YXRlIHN0
YXRlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gcmVhY3Rpb24pCit2b2lkIEF1ZGlvQ29udGV4dDo6
YWRkUmVhY3Rpb24oU3RhdGUgc3RhdGUsIFByb21pc2UmJiBwcm9taXNlKQogewogICAgIHNpemVf
dCBzdGF0ZUluZGV4ID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGF0ZSk7CiAgICAgaWYgKHN0YXRl
SW5kZXggPj0gbV9zdGF0ZVJlYWN0aW9ucy5zaXplKCkpCiAgICAgICAgIG1fc3RhdGVSZWFjdGlv
bnMucmVzaXplKHN0YXRlSW5kZXggKyAxKTsKIAotICAgIG1fc3RhdGVSZWFjdGlvbnNbc3RhdGVJ
bmRleF0uYXBwZW5kKHJlYWN0aW9uKTsKKyAgICBtX3N0YXRlUmVhY3Rpb25zW3N0YXRlSW5kZXhd
LmFwcGVuZChXVEY6Om1vdmUocHJvbWlzZSkpOwogfQogCiB2b2lkIEF1ZGlvQ29udGV4dDo6c2V0
U3RhdGUoU3RhdGUgc3RhdGUpCkBAIC0yOTgsMTEgKzI5OSwxMSBAQCB2b2lkIEF1ZGlvQ29udGV4
dDo6c2V0U3RhdGUoU3RhdGUgc3RhdGUpCiAgICAgaWYgKHN0YXRlSW5kZXggPj0gbV9zdGF0ZVJl
YWN0aW9ucy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4+IHJlYWN0aW9uczsKKyAgICBWZWN0b3I8UHJvbWlzZT4gcmVhY3Rpb25zOwog
ICAgIG1fc3RhdGVSZWFjdGlvbnNbc3RhdGVJbmRleF0uc3dhcChyZWFjdGlvbnMpOwogCi0gICAg
Zm9yIChhdXRvJiByZWFjdGlvbiA6IHJlYWN0aW9ucykKLSAgICAgICAgcmVhY3Rpb24oKTsKKyAg
ICBmb3IgKGF1dG8mIHByb21pc2UgOiByZWFjdGlvbnMpCisgICAgICAgIHByb21pc2UucmVzb2x2
ZShudWxscHRyKTsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBBdWRpb0NvbnRleHQ6OnN0YXRl
KCkgY29uc3QKQEAgLTEwOTYsMjcgKzEwOTcsMjQgQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmRlY3Jl
bWVudEFjdGl2ZVNvdXJjZUNvdW50KCkKICAgICAtLW1fYWN0aXZlU291cmNlQ291bnQ7CiB9CiAK
LXZvaWQgQXVkaW9Db250ZXh0OjpzdXNwZW5kQ29udGV4dChzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4g
c3VjY2Vzc0NhbGxiYWNrLCBGYWlsdXJlQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrKQordm9pZCBB
dWRpb0NvbnRleHQ6OnN1c3BlbmQoUHJvbWlzZSYmIHByb21pc2UpCiB7Ci0gICAgQVNTRVJUKHN1
Y2Nlc3NDYWxsYmFjayk7Ci0gICAgQVNTRVJUKGZhaWx1cmVDYWxsYmFjayk7Ci0KICAgICBpZiAo
aXNPZmZsaW5lQ29udGV4dCgpKSB7Ci0gICAgICAgIGZhaWx1cmVDYWxsYmFjayhJTlZBTElEX1NU
QVRFX0VSUik7CisgICAgICAgIHByb21pc2UucmVqZWN0KElOVkFMSURfU1RBVEVfRVJSKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpTdXNwZW5k
ZWQpIHsKLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKCk7CisgICAgICAgIHByb21pc2UucmVzb2x2
ZShudWxscHRyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChtX3N0YXRlID09
IFN0YXRlOjpDbG9zZWQgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6SW50ZXJydXB0ZWQgfHwgIW1fZGVz
dGluYXRpb25Ob2RlKSB7Ci0gICAgICAgIGZhaWx1cmVDYWxsYmFjaygwKTsKKyAgICAgICAgcHJv
bWlzZS5yZWplY3QoMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRSZWFjdGlv
bihTdGF0ZTo6U3VzcGVuZGVkLCBzdWNjZXNzQ2FsbGJhY2spOworICAgIGFkZFJlYWN0aW9uKFN0
YXRlOjpTdXNwZW5kZWQsIFdURjo6bW92ZShwcm9taXNlKSk7CiAKICAgICBpZiAoIXdpbGxQYXVz
ZVBsYXliYWNrKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMjksMjcgKzExMjcsMjQgQEAgdm9p
ZCBBdWRpb0NvbnRleHQ6OnN1c3BlbmRDb250ZXh0KHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNj
ZXNzQ2FsbGJhY2ssIEZhaWx1cmUKICAgICB9KTsKIH0KIAotdm9pZCBBdWRpb0NvbnRleHQ6OnJl
c3VtZUNvbnRleHQoc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaywgRmFpbHVy
ZUNhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaykKK3ZvaWQgQXVkaW9Db250ZXh0OjpyZXN1bWUoUHJv
bWlzZSYmIHByb21pc2UpCiB7Ci0gICAgQVNTRVJUKHN1Y2Nlc3NDYWxsYmFjayk7Ci0gICAgQVNT
RVJUKGZhaWx1cmVDYWxsYmFjayk7Ci0KICAgICBpZiAoaXNPZmZsaW5lQ29udGV4dCgpKSB7Ci0g
ICAgICAgIGZhaWx1cmVDYWxsYmFjayhJTlZBTElEX1NUQVRFX0VSUik7CisgICAgICAgIHByb21p
c2UucmVqZWN0KElOVkFMSURfU1RBVEVfRVJSKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpSdW5uaW5nKSB7Ci0gICAgICAgIHN1Y2Nlc3NDYWxs
YmFjaygpOworICAgICAgICBwcm9taXNlLnJlc29sdmUobnVsbHB0cik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2xvc2VkIHx8ICFtX2Rlc3Rp
bmF0aW9uTm9kZSkgewotICAgICAgICBmYWlsdXJlQ2FsbGJhY2soMCk7CisgICAgICAgIHByb21p
c2UucmVqZWN0KDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUmVhY3Rpb24o
U3RhdGU6OlJ1bm5pbmcsIHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgYWRkUmVhY3Rpb24oU3RhdGU6
OlJ1bm5pbmcsIFdURjo6bW92ZShwcm9taXNlKSk7CiAKICAgICBpZiAoIXdpbGxCZWdpblBsYXli
YWNrKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExNjIsMjcgKzExNTcsMjQgQEAgdm9pZCBBdWRp
b0NvbnRleHQ6OnJlc3VtZUNvbnRleHQoc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxs
YmFjaywgRmFpbHVyZUMKICAgICB9KTsKIH0KIAotdm9pZCBBdWRpb0NvbnRleHQ6OmNsb3NlQ29u
dGV4dChzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrLCBGYWlsdXJlQ2FsbGJh
Y2sgZmFpbHVyZUNhbGxiYWNrKQordm9pZCBBdWRpb0NvbnRleHQ6OmNsb3NlKFByb21pc2UmJiBw
cm9taXNlKQogewotICAgIEFTU0VSVChzdWNjZXNzQ2FsbGJhY2spOwotICAgIEFTU0VSVChmYWls
dXJlQ2FsbGJhY2spOwotCiAgICAgaWYgKGlzT2ZmbGluZUNvbnRleHQoKSkgewotICAgICAgICBm
YWlsdXJlQ2FsbGJhY2soSU5WQUxJRF9TVEFURV9FUlIpOworICAgICAgICBwcm9taXNlLnJlamVj
dChJTlZBTElEX1NUQVRFX0VSUik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
bV9zdGF0ZSA9PSBTdGF0ZTo6Q2xvc2VkIHx8ICFtX2Rlc3RpbmF0aW9uTm9kZSkgewotICAgICAg
ICBzdWNjZXNzQ2FsbGJhY2soKTsKKyAgICAgICAgcHJvbWlzZS5yZXNvbHZlKG51bGxwdHIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUmVhY3Rpb24oU3RhdGU6OkNsb3NlZCwg
c3VjY2Vzc0NhbGxiYWNrKTsKKyAgICBhZGRSZWFjdGlvbihTdGF0ZTo6Q2xvc2VkLCBXVEY6Om1v
dmUocHJvbWlzZSkpOwogCiAgICAgbGF6eUluaXRpYWxpemUoKTsKIAogICAgIFJlZlB0cjxBdWRp
b0NvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgbV9kZXN0aW5hdGlvbk5vZGUtPmNsb3Nl
KFtzdHJvbmdUaGlzLCBzdWNjZXNzQ2FsbGJhY2tdIHsKKyAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+
Y2xvc2UoW3N0cm9uZ1RoaXNdIHsKICAgICAgICAgc3Ryb25nVGhpcy0+c2V0U3RhdGUoU3RhdGU6
OkNsb3NlZCk7CiAgICAgICAgIHN0cm9uZ1RoaXMtPnVuaW5pdGlhbGl6ZSgpOwogICAgIH0pOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKaW5kZXgg
NDM5NjhmMmZiYTkyYWNkYzk1ZDJjYmI0YzRhNTAzZWY5MjI0NmRhYi4uZTlmNzZjOTdiYjA1MDEy
MzY5ZTMwNTE3ZDA3YTc4ZTQzMmFjNjljMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXVk
aW9EZXN0aW5hdGlvbk5vZGUuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVk
ZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKICNpbmNsdWRlICJN
ZWRpYUNhblN0YXJ0TGlzdGVuZXIuaCIKICNpbmNsdWRlICJNZWRpYVByb2R1Y2VyLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1NZWRpYVNlc3Npb24uaCIKQEAgLTEwNiwxMSArMTA3LDE1IEBAIHB1Ymxp
YzoKIAogICAgIEF1ZGlvTGlzdGVuZXIqIGxpc3RlbmVyKCkgeyByZXR1cm4gbV9saXN0ZW5lci5n
ZXQoKTsgfQogCi0gICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoRXhjZXB0aW9uQ29kZSk+
IEZhaWx1cmVDYWxsYmFjazsKKyAgICB1c2luZyBBY3RpdmVET01PYmplY3Q6OnN1c3BlbmQ7Cisg
ICAgdXNpbmcgQWN0aXZlRE9NT2JqZWN0OjpyZXN1bWU7CisKKyAgICB0eXBlZGVmIERPTVByb21p
c2U8c3RkOjpudWxscHRyX3QsIEV4Y2VwdGlvbkNvZGU+IFByb21pc2U7CisKKyAgICB2b2lkIHN1
c3BlbmQoUHJvbWlzZSYmKTsKKyAgICB2b2lkIHJlc3VtZShQcm9taXNlJiYpOworICAgIHZvaWQg
Y2xvc2UoUHJvbWlzZSYmKTsKIAotICAgIHZvaWQgc3VzcGVuZENvbnRleHQoc3RkOjpmdW5jdGlv
bjx2b2lkKCk+LCBGYWlsdXJlQ2FsbGJhY2spOwotICAgIHZvaWQgcmVzdW1lQ29udGV4dChzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4sIEZhaWx1cmVDYWxsYmFjayk7Ci0gICAgdm9pZCBjbG9zZUNvbnRl
eHQoc3RkOjpmdW5jdGlvbjx2b2lkKCk+LCBGYWlsdXJlQ2FsbGJhY2spOwogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgc3RhdGUoKSBjb25zdDsKIAogICAgIC8vIFRoZSBBdWRpb05vZGUgY3JlYXRl
IG1ldGhvZHMgYXJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgKGZyb20gSmF2YVNjcmlwdCku
CkBAIC0zMjQsNyArMzI5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZURpcnR5QXVkaW9T
dW1taW5nSnVuY3Rpb25zKCk7CiAgICAgdm9pZCBoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMo
KTsKIAotICAgIHZvaWQgYWRkUmVhY3Rpb24oU3RhdGUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPik7
CisgICAgdm9pZCBhZGRSZWFjdGlvbihTdGF0ZSwgUHJvbWlzZSYmKTsKICAgICB2b2lkIHVwZGF0
ZUF1dG9tYXRpY1B1bGxOb2RlcygpOwogCiAgICAgLy8gT25seSBhY2Nlc3NlZCBpbiB0aGUgYXVk
aW8gdGhyZWFkLgpAQCAtMzYxLDcgKzM2Niw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPEF1ZGlv
Tm9kZSo+IG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzOwogICAgIC8vIE9ubHkgYWNjZXNz
ZWQgaW4gdGhlIGF1ZGlvIHRocmVhZC4KICAgICBWZWN0b3I8QXVkaW9Ob2RlKj4gbV9kZWZlcnJl
ZEZpbmlzaERlcmVmTGlzdDsKLSAgICBWZWN0b3I8VmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZCgp
Pj4+IG1fc3RhdGVSZWFjdGlvbnM7CisgICAgVmVjdG9yPFZlY3RvcjxQcm9taXNlPj4gbV9zdGF0
ZVJlYWN0aW9uczsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybU1lZGlhU2Vzc2lvbj4g
bV9tZWRpYVNlc3Npb247CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdlbmVyaWNFdmVudFF1ZXVlPiBt
X2V2ZW50UXVldWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1
ZGlvQ29udGV4dEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlv
Q29udGV4dEN1c3RvbS5jcHAKaW5kZXggZGE0YjdiYzYzMTI3MmZiM2QyOWI5NzdjZmEyZDU5NTdi
MzMwODZmMS4uMGIyYjI2YTVkOWVmM2EzODJmZDc0MDBlYjk0MjQxMWIyNTg1N2ZkOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnRleHRDdXN0b20uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNw
cApAQCAtMTExLDUwICsxMTEsMjkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RKU0F1ZGlvQ29udGV4dChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShDUkVBVEVfRE9NX1dSQVBQRVIoanNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCks
IEF1ZGlvQ29udGV4dCwgYXVkaW9Db250ZXh0LmdldCgpKSk7CiB9CiAKLUpTVmFsdWUgSlNBdWRp
b0NvbnRleHQ6OnN1c3BlbmQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0F1ZGlvQ29udGV4
dDo6c3VzcGVuZChFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTUHJvbWlzZURlZmVycmVkKiBw
cm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9i
amVjdCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3Qo
KSwgcHJvbWlzZURlZmVycmVkKTsKLSAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVy
XSgpIG11dGFibGUgewotICAgICAgICB3cmFwcGVyLnJlc29sdmUobnVsbHB0cik7Ci0gICAgfTsK
LSAgICBhdXRvIGZhaWx1cmVDYWxsYmFjayA9IFt3cmFwcGVyXShFeGNlcHRpb25Db2RlIHZhbHVl
KSBtdXRhYmxlIHsKLSAgICAgICAgd3JhcHBlci5yZWplY3QodmFsdWUpOwotICAgIH07CisgICAg
SlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpj
cmVhdGUoc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKIAotICAgIGltcGwoKS5zdXNwZW5kQ29udGV4
dChXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3ZlKGZhaWx1cmVDYWxsYmFjaykp
OworICAgIGltcGwoKS5zdXNwZW5kKERlZmVycmVkV3JhcHBlcihzdGF0ZSwgZ2xvYmFsT2JqZWN0
KCksIHByb21pc2VEZWZlcnJlZCkpOwogCiAgICAgcmV0dXJuIHByb21pc2VEZWZlcnJlZC0+cHJv
bWlzZSgpOwogfQogCi1KU1ZhbHVlIEpTQXVkaW9Db250ZXh0OjpyZXN1bWUoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0F1ZGlvQ29udGV4dDo6cmVzdW1lKEV4ZWNTdGF0ZSogc3RhdGUpCiB7
Ci0gICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVy
cmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBlciB3
cmFwcGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwotICAgIGF1dG8g
c3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7Ci0gICAgICAgIHdyYXBwZXIu
cmVzb2x2ZShudWxscHRyKTsKLSAgICB9OwotICAgIGF1dG8gZmFpbHVyZUNhbGxiYWNrID0gW3dy
YXBwZXJdKEV4Y2VwdGlvbkNvZGUgdmFsdWUpIG11dGFibGUgewotICAgICAgICB3cmFwcGVyLnJl
amVjdCh2YWx1ZSk7Ci0gICAgfTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVy
cmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwog
Ci0gICAgaW1wbCgpLnJlc3VtZUNvbnRleHQoV1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdU
Rjo6bW92ZShmYWlsdXJlQ2FsbGJhY2spKTsKKyAgICBpbXBsKCkucmVzdW1lKERlZmVycmVkV3Jh
cHBlcihzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCkpOwogCiAgICAgcmV0
dXJuIHByb21pc2VEZWZlcnJlZC0+cHJvbWlzZSgpOwogfQogCi1KU1ZhbHVlIEpTQXVkaW9Db250
ZXh0OjpjbG9zZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQXVkaW9Db250ZXh0OjpjbG9z
ZShFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVm
ZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCgpKTsK
LSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlz
ZURlZmVycmVkKTsKLSAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXSgpIG11dGFi
bGUgewotICAgICAgICB3cmFwcGVyLnJlc29sdmUobnVsbHB0cik7Ci0gICAgfTsKLSAgICBhdXRv
IGZhaWx1cmVDYWxsYmFjayA9IFt3cmFwcGVyXShFeGNlcHRpb25Db2RlIHZhbHVlKSBtdXRhYmxl
IHsKLSAgICAgICAgd3JhcHBlci5yZWplY3QodmFsdWUpOwotICAgIH07Ci0KLSAgICBpbXBsKCku
Y2xvc2VDb250ZXh0KFdURjo6bW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEY6Om1vdmUoZmFpbHVy
ZUNhbGxiYWNrKSk7CisgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpT
UHJvbWlzZURlZmVycmVkOjpjcmVhdGUoc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKKworICAgIGlt
cGwoKS5jbG9zZShEZWZlcnJlZFdyYXBwZXIoc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNl
RGVmZXJyZWQpKTsKIAogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuY3BwCmluZGV4IGViNGU4
OTgwNDVjMDFlZWE0Yjc0MjY4NzBjY2FhZjgwMmI1YTYwN2QuLmRmNmJjYjEzMDcwMzhkYTQyMTIw
YTVhM2ZkYjZiNmQ2NDAwMzFiOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NUHJvbWlzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Qcm9taXNlLmNwcApAQCAtMjgsNiArMjgsOCBAQAogCiAjaWYgRU5BQkxFKFBST01JU0VTKQog
CisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NSwzNSArNDcsMTYgQEAgSlNPYmplY3QqIERlZmVycmVk
V3JhcHBlcjo6cHJvbWlzZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGVmZXJyZWQtPnByb21pc2Uo
KTsKIH0KIAotdm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJlc29sdmUoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHJlc29sdXRpb24pCit2b2lkIERlZmVycmVkV3JhcHBlcjo6Y2FsbEZ1bmN0aW9uKEV4
ZWNTdGF0ZSYgZXhlYywgSlNWYWx1ZSBmdW5jdGlvbiwgSlNWYWx1ZSByZXNvbHV0aW9uKQogewot
ICAgIEpTVmFsdWUgZGVmZXJyZWRSZXNvbHZlID0gbV9kZWZlcnJlZC0+cmVzb2x2ZSgpOwotCi0g
ICAgQ2FsbERhdGEgcmVzb2x2ZUNhbGxEYXRhOwotICAgIENhbGxUeXBlIHJlc29sdmVDYWxsVHlw
ZSA9IGdldENhbGxEYXRhKGRlZmVycmVkUmVzb2x2ZSwgcmVzb2x2ZUNhbGxEYXRhKTsKLSAgICBB
U1NFUlQocmVzb2x2ZUNhbGxUeXBlICE9IENhbGxUeXBlTm9uZSk7CisgICAgQ2FsbERhdGEgY2Fs
bERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2Fs
bERhdGEpOworICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpOwogCiAgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQocmVzb2x1
dGlvbik7CiAKLSAgICBjYWxsKGV4ZWMsIGRlZmVycmVkUmVzb2x2ZSwgcmVzb2x2ZUNhbGxUeXBl
LCByZXNvbHZlQ2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3VtZW50cyk7Ci0KLSAgICBtX2ds
b2JhbE9iamVjdC5jbGVhcigpOwotICAgIG1fZGVmZXJyZWQuY2xlYXIoKTsKLX0KLQotdm9pZCBE
ZWZlcnJlZFdyYXBwZXI6OnJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgcmVhc29uKQot
ewotICAgIEpTVmFsdWUgZGVmZXJyZWRSZWplY3QgPSBtX2RlZmVycmVkLT5yZWplY3QoKTsKLQot
ICAgIENhbGxEYXRhIHJlamVjdENhbGxEYXRhOwotICAgIENhbGxUeXBlIHJlamVjdENhbGxUeXBl
ID0gZ2V0Q2FsbERhdGEoZGVmZXJyZWRSZWplY3QsIHJlamVjdENhbGxEYXRhKTsKLSAgICBBU1NF
UlQocmVqZWN0Q2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25lKTsKLQotICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyIGFyZ3VtZW50czsKLSAgICBhcmd1bWVudHMuYXBwZW5kKHJlYXNvbik7Ci0KLSAgICBj
YWxsKGV4ZWMsIGRlZmVycmVkUmVqZWN0LCByZWplY3RDYWxsVHlwZSwgcmVqZWN0Q2FsbERhdGEs
IGpzVW5kZWZpbmVkKCksIGFyZ3VtZW50cyk7CisgICAgY2FsbCgmZXhlYywgZnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJndW1lbnRzKTsKIAogICAgIG1fZ2xv
YmFsT2JqZWN0LmNsZWFyKCk7CiAgICAgbV9kZWZlcnJlZC5jbGVhcigpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaAppbmRleCBhNGRlMTY4MjJlM2FjY2E3NTI2Zjg0
ZmQ1ODk5MzUzMjM1ZDA0NWQ4Li4yMWM5ZjgyN2YwYzRhZmM5MTczMzg2YTcwYjJjYjg2ZjdjOTYw
NGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaApAQCAtNDks
MTMgKzQ5LDMwIEBAIHB1YmxpYzoKICAgICBKU0M6OkpTT2JqZWN0KiBwcm9taXNlKCkgY29uc3Q7
CiAKIHByaXZhdGU6Ci0gICAgdm9pZCByZXNvbHZlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlKTsKLSAgICB2b2lkIHJlamVjdChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7Cisg
ICAgdm9pZCBjYWxsRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgZnVuY3Rp
b24sIEpTQzo6SlNWYWx1ZSByZXNvbHV0aW9uKTsKKyAgICB2b2lkIHJlc29sdmUoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgcmVzb2x1dGlvbikgeyBjYWxsRnVuY3Rpb24oc3Rh
dGUsIG1fZGVmZXJyZWQtPnJlc29sdmUoKSwgcmVzb2x1dGlvbik7IH0KKyAgICB2b2lkIHJlamVj
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSByZXNvbHV0aW9uKSB7IGNhbGxG
dW5jdGlvbihzdGF0ZSwgbV9kZWZlcnJlZC0+cmVqZWN0KCksIHJlc29sdXRpb24pOyB9CiAKICAg
ICBKU0M6OlN0cm9uZzxKU0RPTUdsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAgICAgSlND
OjpTdHJvbmc8SlNDOjpKU1Byb21pc2VEZWZlcnJlZD4gbV9kZWZlcnJlZDsKIH07CiAKK3RlbXBs
YXRlIDx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXJyb3I+CitjbGFzcyBET01Qcm9taXNlIHsK
K3B1YmxpYzoKKyAgICBET01Qcm9taXNlKERlZmVycmVkV3JhcHBlciYmIHdyYXBwZXIpIDogbV93
cmFwcGVyKFdURjo6bW92ZSh3cmFwcGVyKSkgeyB9CisgICAgRE9NUHJvbWlzZShET01Qcm9taXNl
JiYgcHJvbWlzZSkgOiBtX3dyYXBwZXIoV1RGOjptb3ZlKHByb21pc2UubV93cmFwcGVyKSkgeyB9
CisKKyAgICBET01Qcm9taXNlKGNvbnN0IERPTVByb21pc2UmKT0gZGVsZXRlOworICAgIERPTVBy
b21pc2UmIG9wZXJhdG9yPShET01Qcm9taXNlIGNvbnN0JikgPSBkZWxldGU7CisKKyAgICB2b2lk
IHJlc29sdmUoY29uc3QgVmFsdWUmIHZhbHVlKSB7IG1fd3JhcHBlci5yZXNvbHZlPFZhbHVlPih2
YWx1ZSk7IH0KKyAgICB2b2lkIHJlamVjdChjb25zdCBFcnJvciYgZXJyb3IpIHsgbV93cmFwcGVy
LnJlamVjdDxFcnJvcj4oZXJyb3IpOyB9CisKK3ByaXZhdGU6CisgICAgRGVmZXJyZWRXcmFwcGVy
IG1fd3JhcHBlcjsKK307CisKIHRlbXBsYXRlPGNsYXNzIFJlc29sdmVSZXN1bHRUeXBlPgogaW5s
aW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZXNvbHZlKGNvbnN0IFJlc29sdmVSZXN1bHRUeXBl
JiByZXN1bHQpCiB7CkBAIC02Myw3ICs4MCw3IEBAIGlubGluZSB2b2lkIERlZmVycmVkV3JhcHBl
cjo6cmVzb2x2ZShjb25zdCBSZXNvbHZlUmVzdWx0VHlwZSYgcmVzdWx0KQogICAgIEFTU0VSVCht
X2dsb2JhbE9iamVjdCk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpOwogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKLSAg
ICByZXNvbHZlKGV4ZWMsIHRvSlMoZXhlYywgbV9nbG9iYWxPYmplY3QuZ2V0KCksIHJlc3VsdCkp
OworICAgIHJlc29sdmUoKmV4ZWMsIHRvSlMoZXhlYywgbV9nbG9iYWxPYmplY3QuZ2V0KCksIHJl
c3VsdCkpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBSZWplY3RSZXN1bHRUeXBlPgpAQCAtNzMsNyAr
OTAsNyBAQCBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJlamVjdChjb25zdCBSZWplY3RS
ZXN1bHRUeXBlJiByZXN1bHQpCiAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0KTsKICAgICBKU0M6
OkV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOwotICAgIHJlamVjdChleGVjLCB0b0pTKGV4ZWMs
IG1fZ2xvYmFsT2JqZWN0LmdldCgpLCByZXN1bHQpKTsKKyAgICByZWplY3QoKmV4ZWMsIHRvSlMo
ZXhlYywgbV9nbG9iYWxPYmplY3QuZ2V0KCksIHJlc3VsdCkpOwogfQogCiB0ZW1wbGF0ZTw+CkBA
IC04Myw3ICsxMDAsNyBAQCBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJlamVjdChjb25z
dCBzdGQ6Om51bGxwdHJfdCYpCiAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0KTsKICAgICBKU0M6
OkV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOwotICAgIHJlamVjdChleGVjLCBKU0M6OmpzTnVs
bCgpKTsKKyAgICByZWplY3QoKmV4ZWMsIEpTQzo6anNOdWxsKCkpOwogfQogCiB0ZW1wbGF0ZTw+
CkBAIC05Myw3ICsxMTAsNyBAQCBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJlamVjdChj
b25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQogICAgIEFTU0VSVChtX2dsb2JhbE9iamVjdCk7CiAg
ICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwog
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKLSAgICByZWplY3QoZXhlYywgdmFs
dWUpOworICAgIHJlamVjdCgqZXhlYywgdmFsdWUpOwogfQogCiB0ZW1wbGF0ZTw+CkBAIC0xMDMs
NyArMTIwLDcgQEAgaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZWplY3Q8RXhjZXB0aW9u
Q29kZT4oY29uc3QgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0
KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOwotICAgIHJlamVjdChleGVj
LCBjcmVhdGVET01FeGNlcHRpb24oZXhlYywgZWMpKTsKKyAgICByZWplY3QoKmV4ZWMsIGNyZWF0
ZURPTUV4Y2VwdGlvbihleGVjLCBlYykpOwogfQogCiB0ZW1wbGF0ZTw+CkBAIC0xMTMsNyArMTMw
LDcgQEAgaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZXNvbHZlPFN0cmluZz4oY29uc3Qg
U3RyaW5nJiByZXN1bHQpCiAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0KTsKICAgICBKU0M6OkV4
ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOwotICAgIHJlc29sdmUoZXhlYywganNTdHJpbmcoZXhl
YywgcmVzdWx0KSk7CisgICAgcmVzb2x2ZSgqZXhlYywganNTdHJpbmcoZXhlYywgcmVzdWx0KSk7
CiB9CiAKIHRlbXBsYXRlPD4KQEAgLTEyMyw3ICsxNDAsNyBAQCBpbmxpbmUgdm9pZCBEZWZlcnJl
ZFdyYXBwZXI6OnJlc29sdmU8Ym9vbD4oY29uc3QgYm9vbCYgcmVzdWx0KQogICAgIEFTU0VSVCht
X2dsb2JhbE9iamVjdCk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpOwogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKLSAg
ICByZXNvbHZlKGV4ZWMsIEpTQzo6anNCb29sZWFuKHJlc3VsdCkpOworICAgIHJlc29sdmUoKmV4
ZWMsIEpTQzo6anNCb29sZWFuKHJlc3VsdCkpOwogfQogCiB0ZW1wbGF0ZTw+CkBAIC0xMzMsNyAr
MTUwLDcgQEAgaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZXNvbHZlPEpTQzo6SlNWYWx1
ZT4oY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKICAgICBBU1NFUlQobV9nbG9iYWxPYmplY3Qp
OwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7Ci0gICAgcmVzb2x2ZShleGVj
LCB2YWx1ZSk7CisgICAgcmVzb2x2ZSgqZXhlYywgdmFsdWUpOwogfQogdGVtcGxhdGU8PgogaW5s
aW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZXNvbHZlPFZlY3Rvcjx1bnNpZ25lZCBjaGFyPj4o
Y29uc3QgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiByZXN1bHQpCkBAIC0xNDMsNyArMTYwLDcgQEAg
aW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZXNvbHZlPFZlY3Rvcjx1bnNpZ25lZCBjaGFy
Pj4oY29uc3QgVmVjdG9yPHVuc2lnbmUKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKGV4
ZWMpOwogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0
ZShyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKLSAgICByZXNvbHZlKGV4ZWMsIHRvSlMo
ZXhlYywgbV9nbG9iYWxPYmplY3QuZ2V0KCksIGJ1ZmZlci5nZXQoKSkpOworICAgIHJlc29sdmUo
KmV4ZWMsIHRvSlMoZXhlYywgbV9nbG9iYWxPYmplY3QuZ2V0KCksIGJ1ZmZlci5nZXQoKSkpOwog
fQogCiB0ZW1wbGF0ZTw+CkBAIC0xNTMsNyArMTcwLDcgQEAgaW5saW5lIHZvaWQgRGVmZXJyZWRX
cmFwcGVyOjpyZXNvbHZlKGNvbnN0IHN0ZDo6bnVsbHB0cl90JikKICAgICBBU1NFUlQobV9nbG9i
YWxPYmplY3QpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7Ci0gICAgcmVz
b2x2ZShleGVjLCBKU0M6OmpzVW5kZWZpbmVkKCkpOworICAgIHJlc29sdmUoKmV4ZWMsIEpTQzo6
anNVbmRlZmluZWQoKSk7CiB9CiAKIHRlbXBsYXRlPD4KQEAgLTE2Myw3ICsxODAsNyBAQCBpbmxp
bmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJlamVjdDxTdHJpbmc+KGNvbnN0IFN0cmluZyYgcmVz
dWx0KQogICAgIEFTU0VSVChtX2dsb2JhbE9iamVjdCk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4
ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2tlcihleGVjKTsKLSAgICByZWplY3QoZXhlYywganNTdHJpbmcoZXhlYywgcmVzdWx0KSk7
CisgICAgcmVqZWN0KCpleGVjLCBqc1N0cmluZyhleGVjLCByZXN1bHQpKTsKIH0KIAogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>