<?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>147978</bug_id>
          
          <creation_ts>2015-08-13 09:08:48 -0700</creation_ts>
          <short_desc>[Streams API] Update implementation with the latest spec</short_desc>
          <delta_ts>2015-08-18 10:45:43 -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>New Bugs</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>
          
          <blocked>148075</blocked>
    
    <blocked>148078</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Xabier Rodríguez Calvar">calvaris</reporter>
          <assigned_to name="Xabier Rodríguez Calvar">calvaris</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1117235</commentid>
    <comment_count>0</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-08-13 09:08:48 -0700</bug_when>
    <thetext>ç[Streams API] Update implementation and tests with the latest spec</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117244</commentid>
    <comment_count>1</comment_count>
      <attachid>258892</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-08-13 09:38:10 -0700</bug_when>
    <thetext>Created attachment 258892
Patch

Brought changes in the tests done at the reference. I left some of the custom ones cause I think they are not explicitely covered but I do think they are implicitly. Youenn, any opinion about leaving or removing them? I also fixed the implementation according to the latest changes in the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117290</commentid>
    <comment_count>2</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-08-13 11:20:15 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created attachment 258892 [details]
&gt; Patch
&gt; 
&gt; Brought changes in the tests done at the reference. I left some of the
&gt; custom ones cause I think they are not explicitely covered but I do think
&gt; they are implicitly. Youenn, any opinion about leaving or removing them? I
&gt; also fixed the implementation according to the latest changes in the spec.

It is a bit difficult to precisely check all the changes.
Could you split the patch in two:
1. Inverting the order of read/closed promise resolution (with updated related tests)
2. Updating other tests

It might not be necessary to move the read promises from ReadableStream to ReadableStreamReader.
The current design is to make controller and reader just dummy objects whose sole purpose is to expose specific parts of ReadableStream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117338</commentid>
    <comment_count>3</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-08-13 13:10:29 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; Created attachment 258892 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; Brought changes in the tests done at the reference. I left some of the
&gt; &gt; custom ones cause I think they are not explicitely covered but I do think
&gt; &gt; they are implicitly. Youenn, any opinion about leaving or removing them? I
&gt; &gt; also fixed the implementation according to the latest changes in the spec.
&gt; 
&gt; It is a bit difficult to precisely check all the changes.
&gt; Could you split the patch in two:
&gt; 1. Inverting the order of read/closed promise resolution (with updated
&gt; related tests)
&gt; 2. Updating other tests

I can try that.

&gt; It might not be necessary to move the read promises from ReadableStream to
&gt; ReadableStreamReader.
&gt; The current design is to make controller and reader just dummy objects whose
&gt; sole purpose is to expose specific parts of ReadableStream.

The new spec says that you have to be able to resolve the promises belonging to a specific reader, so you have to track which promises belong to which reader.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117615</commentid>
    <comment_count>4</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-08-14 00:46:22 -0700</bug_when>
    <thetext>A stream may have only one reader at a time. This allows storing pending requests in the stream itself.
A minor point is that the reader class (several instances per stream potentially) is made smaller.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117625</commentid>
    <comment_count>5</comment_count>
      <attachid>258998</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-08-14 05:59:16 -0700</bug_when>
    <thetext>Created attachment 258998
Patch

As Youenn suggested, I am splitting the patch in two. In the end it is true that we don&apos;t need to move the read pending requests to the reader. Basically I renamed the releaseReader into closeReader according to the spec and did the necessary changes in promise resolution order and object release.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117710</commentid>
    <comment_count>6</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-08-14 12:26:59 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created attachment 258998 [details]
&gt; Patch
&gt; 
&gt; As Youenn suggested, I am splitting the patch in two. In the end it is true
&gt; that we don&apos;t need to move the read pending requests to the reader.
&gt; Basically I renamed the releaseReader into closeReader according to the spec
&gt; and did the necessary changes in promise resolution order and object release.

That looks mostly good to me.
I would make the following &quot;fine-tuning&quot; tweaks to changeStateToErrored:
1. m_state could be set earlier than what the patch is doing (no behavior impact but closer to spec).
2. after setting m_state to Errored, we could exit early if m_reader is null.

I would leave releaseReader renaming to another patch, as it might be good to rename  at the same time ReadableStream::close into finishClosing.
At the same time of renaming these methods, I would inline clearCallbacks. This would get us closer to the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118091</commentid>
    <comment_count>7</comment_count>
      <attachid>259140</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-08-17 02:09:09 -0700</bug_when>
    <thetext>Created attachment 259140
Patch

Set m_state to Errored earlier, bailout if no m_reader and keep releaseReader as method name as suggested by Youenn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118092</commentid>
    <comment_count>8</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-08-17 02:54:38 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; 1. m_state could be set earlier than what the patch is doing (no behavior
&gt; impact but closer to spec).

True, I mixed the reader and stream state. That&apos;s why I was setting it later.

I changed everything you requested and if reviewers agree, I think we are ready for a r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118105</commentid>
    <comment_count>9</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-08-17 07:47:47 -0700</bug_when>
    <thetext>Sounds good to me.
Maybe rename the bug and update change logs accordingly, at cq time or updated patch if additional changes are required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118111</commentid>
    <comment_count>10</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-08-17 08:39:35 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Sounds good to me.
&gt; Maybe rename the bug and update change logs accordingly, at cq time or
&gt; updated patch if additional changes are required.

I can do it, but I don&apos;t think it&apos;s even needed, as it is an update according to the spec, the only point is that we don&apos;t follow the same naming conventions, which is accessory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118491</commentid>
    <comment_count>11</comment_count>
      <attachid>259140</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-18 01:25:29 -0700</bug_when>
    <thetext>Comment on attachment 259140
Patch

Clearing flags on attachment: 259140

Committed r188580: &lt;http://trac.webkit.org/changeset/188580&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118492</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-18 01:25:33 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118556</commentid>
    <comment_count>13</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-08-18 10:45:43 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Sounds good to me.
&gt; &gt; Maybe rename the bug and update change logs accordingly, at cq time or
&gt; &gt; updated patch if additional changes are required.
&gt; 
&gt; I can do it, but I don&apos;t think it&apos;s even needed, as it is an update
&gt; according to the spec, the only point is that we don&apos;t follow the same
&gt; naming conventions, which is accessory.

Bug title is a minor point but still useful.
It seems to me the title should help future developers grasp quickly the scope of the patch.

The current bug title seems to convey what you are trying to do (sync the impl with the spec), not what the patch is.
Something like &quot;[Streams API] ReadableStreamReader read promises should be resolved before closed promise&quot; might have been clearer.
Also, at some point, we may need again to &quot;update implementation with the latest spec&quot;.

The same applies a bit to bug 148075 as well. How about something along the lines of &quot;[Streams API] ReadableStream close methods should better match specification naming&quot;?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258892</attachid>
            <date>2015-08-13 09:38:10 -0700</date>
            <delta_ts>2015-08-14 05:58:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>webkit-tests.patch</filename>
            <type>text/plain</type>
            <size>46362</size>
            <attacher name="Xabier Rodríguez Calvar">calvaris</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlZTYxNzdmLi45NmMzNGQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTUtMDgt
MTMgIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbU3RyZWFtcyBBUEldIFVwZGF0ZSBpbXBsZW1lbnRhdGlvbiBhbmQgdGVzdHMgd2l0aCB0
aGUgbGF0ZXN0IHNwZWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0Nzk3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoZXJlIHdlcmUgc29tZSBjaGFuZ2VzIGluIHRoZSBpbXBsZW1lbnRhdGlvbiB0aGF0
IHJlcXVpcmVkIHNvbWUgYWRhcHRhdGlvbnMgaW4gb3VyIHRlc3RzLiBUaGVyZSB3ZXJlIGFsc28g
c29tZQorICAgICAgICB0ZXN0cyB0aGF0IHdlcmUgbW92ZWQgdG8gdGhlIHNwZWMgYW5kIHRoZXJl
Zm9yZSB3ZSBtb3ZlZCB0aGVtIGhlcmUgdG9vLiBTb21lIG1pbm9yIGZpeGVzIHdlcmUgbWFkZSBh
cyB3ZWxsLiBJbgorICAgICAgICBnZW5lcmFsLCB0aGlzIGltcHJvdmVzIG91ciB0ZXN0IHF1YWxp
dHkgYW5kIGNvdmVyYWdlLgorCisgICAgICAgICogc3RyZWFtcy9yZWFkYWJsZS1zdHJlYW0tY29u
dHJvbGxlci1lcnJvci1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3RyZWFtcy9yZWFkYWJsZS1z
dHJlYW0tY29udHJvbGxlci1lcnJvci5odG1sOiBVcGRhdGVkIHRlc3RzIGRlc2NyaXB0aW9ucy4K
KyAgICAgICAgKiBzdHJlYW1zL3JlYWRhYmxlLXN0cmVhbS1nYy1leHBlY3RlZC50eHQ6IFJlbW92
ZWQuCisgICAgICAgICogc3RyZWFtcy9yZWFkYWJsZS1zdHJlYW0tZ2MuaHRtbDogUmVtb3ZlZCBi
ZWNhdXNlIHRoZXNlIHRlc3RzIGFyZSBub3cgaW4gdGhlIHNwZWMgb25lcy4KKyAgICAgICAgKiBz
dHJlYW1zL3JlYWRhYmxlLXN0cmVhbS1yZWFkZXItcmVhZC1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogc3RyZWFtcy9yZWFkYWJsZS1zdHJlYW0tcmVhZGVyLXJlYWQuaHRtbDogUmVtb3ZlZCBvbmUg
dGVzdCBhbmQgdHdlYWtlZCBvdGhlcnMuCisgICAgICAgICogc3RyZWFtcy9yZWZlcmVuY2UtaW1w
bGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFtLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdHJl
YW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0tcmVhZGVyLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBzdHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFk
YWJsZS1zdHJlYW0tcmVhZGVyLmh0bWw6IEFkZGVkIHRlc3QgY29taW5nIGZyb20gdGhlIHNwZWMu
CisgICAgICAgICogc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFibGUtc3Ry
ZWFtLXRlZS5odG1sOiBUd2Vha2VkIHNvbWUgdGVzdHMuCisgICAgICAgICogc3RyZWFtcy9yZWZl
cmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFtLXRlbXBsYXRlZC1leHBlY3RlZC50
eHQ6CisgICAgICAgICogc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFibGUt
c3RyZWFtLXRlbXBsYXRlZC5odG1sOiBBZGRlZCBsb3RzIG9mIHRlc3RzIGFuZCBvdGhlciBjaGFu
Z2VzIGNvbWluZworICAgICAgICBmcm9tIHRoZSBzcGVjLgorICAgICAgICAqIHN0cmVhbXMvcmVm
ZXJlbmNlLWltcGxlbWVudGF0aW9uL3JlYWRhYmxlLXN0cmVhbS5odG1sOiBBZGRlZCBnYXJiYWdl
IGNvbGxlY3Rpb24gdGVzdHMgZnJvbSB0aGUgc3BlYyBhbmQKKyAgICAgICAgdW5jb21tZW50ZWQg
YSBkaXNhYmxlZCB0ZXN0LgorCiAyMDE1LTA4LTEyICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBA
YXBwbGUuY29tPgogCiAgICAgICAgIE1hYyBUZXN0RXhwZWN0YXRpb25zIGdhcmRlbmluZy4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGUtc3RyZWFtLWNvbnRyb2xsZXIt
ZXJyb3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZS1zdHJlYW0t
Y29udHJvbGxlci1lcnJvci1leHBlY3RlZC50eHQKaW5kZXggZjAzMzZlMC4uNDJlYjMwMiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZS1zdHJlYW0tY29udHJvbGxlci1l
cnJvci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZS1zdHJl
YW0tY29udHJvbGxlci1lcnJvci1leHBlY3RlZC50eHQKQEAgLTEsNSArMSw0IEBACiAKLVBBU1Mg
RXJyb3JpbmcgYSBSZWFkYWJsZVN0cmVhbSBzaG91bGQgcmVqZWN0IFJlYWRhYmxlU3RyZWFtUmVh
ZGVyIGNsb3NlIHByb21pc2UgCi1QQVNTIEVycm9yaW5nIGEgUmVhZGFibGVTdHJlYW0gc2hvdWxk
IHJlamVjdCBSZWFkYWJsZVN0cmVhbVJlYWRlciBjbG9zZSBwcm9taXNlIAotUEFTUyBFcnJvcmlu
ZyBhIFJlYWRhYmxlU3RyZWFtIHdpdGhvdXQgYW55IHZhbHVlIAorUEFTUyBFcnJvcmluZyBhIFJl
YWRhYmxlU3RyZWFtIGFmdGVyIGNoZWNraW5nIGNsb3NlZCBzaG91bGQgcmVqZWN0IFJlYWRhYmxl
U3RyZWFtUmVhZGVyIGNsb3NlZCBwcm9taXNlIAorUEFTUyBFcnJvcmluZyBhIFJlYWRhYmxlU3Ry
ZWFtIGJlZm9yZSBjaGVja2luZyBjbG9zZWQgc2hvdWxkIHJlamVjdCBSZWFkYWJsZVN0cmVhbVJl
YWRlciBjbG9zZWQgcHJvbWlzZSAKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9y
ZWFkYWJsZS1zdHJlYW0tY29udHJvbGxlci1lcnJvci5odG1sIGIvTGF5b3V0VGVzdHMvc3RyZWFt
cy9yZWFkYWJsZS1zdHJlYW0tY29udHJvbGxlci1lcnJvci5odG1sCmluZGV4IGNlZWEzYmYuLjg3
NDBhNDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGUtc3RyZWFtLWNv
bnRyb2xsZXItZXJyb3IuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlLXN0
cmVhbS1jb250cm9sbGVyLWVycm9yLmh0bWwKQEAgLTIsNyArMiw3IEBACiA8c2NyaXB0IHNyYz0n
Li4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzJz48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPScuLi9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMnPjwvc2NyaXB0PgogPHNjcmlwdD4KLXZhciB0
ZXN0MSA9IGFzeW5jX3Rlc3QoJ0Vycm9yaW5nIGEgUmVhZGFibGVTdHJlYW0gc2hvdWxkIHJlamVj
dCBSZWFkYWJsZVN0cmVhbVJlYWRlciBjbG9zZSBwcm9taXNlJyk7Cit2YXIgdGVzdDEgPSBhc3lu
Y190ZXN0KCdFcnJvcmluZyBhIFJlYWRhYmxlU3RyZWFtIGFmdGVyIGNoZWNraW5nIGNsb3NlZCBz
aG91bGQgcmVqZWN0IFJlYWRhYmxlU3RyZWFtUmVhZGVyIGNsb3NlZCBwcm9taXNlJyk7CiB0ZXN0
MS5zdGVwKGZ1bmN0aW9uKCkgewogICAgIHZhciBjb250cm9sbGVyOwogICAgIHZhciBycyA9IG5l
dyBSZWFkYWJsZVN0cmVhbSh7CkBAIC0yMiw3ICsyMiw3IEBAIHRlc3QxLnN0ZXAoZnVuY3Rpb24o
KSB7CiAgICAgY29udHJvbGxlci5lcnJvcihyc0Vycm9yKTsKIH0pOwogCi12YXIgdGVzdDIgPSBh
c3luY190ZXN0KCdFcnJvcmluZyBhIFJlYWRhYmxlU3RyZWFtIHNob3VsZCByZWplY3QgUmVhZGFi
bGVTdHJlYW1SZWFkZXIgY2xvc2UgcHJvbWlzZScpOwordmFyIHRlc3QyID0gYXN5bmNfdGVzdCgn
RXJyb3JpbmcgYSBSZWFkYWJsZVN0cmVhbSBiZWZvcmUgY2hlY2tpbmcgY2xvc2VkIHNob3VsZCBy
ZWplY3QgUmVhZGFibGVTdHJlYW1SZWFkZXIgY2xvc2VkIHByb21pc2UnKTsKIHRlc3QyLnN0ZXAo
ZnVuY3Rpb24oKSB7CiAgICAgdmFyIGNvbnRyb2xsZXI7CiAgICAgdmFyIHJzID0gbmV3IFJlYWRh
YmxlU3RyZWFtKHsKQEAgLTQzLDIzICs0Myw0IEBAIHRlc3QyLnN0ZXAoZnVuY3Rpb24oKSB7CiAg
ICAgICAgIHRlc3QyLmRvbmUoKTsKICAgICB9KSk7CiB9KTsKLQotdmFyIHRlc3QzID0gYXN5bmNf
dGVzdCgnRXJyb3JpbmcgYSBSZWFkYWJsZVN0cmVhbSB3aXRob3V0IGFueSB2YWx1ZScpOwotdGVz
dDMuc3RlcChmdW5jdGlvbigpIHsKLSAgICB2YXIgY29udHJvbGxlcjsKLSAgICB2YXIgcnMgPSBu
ZXcgUmVhZGFibGVTdHJlYW0oewotICAgICAgICBzdGFydDogZnVuY3Rpb24oYykgewotICAgICAg
ICAgICAgY29udHJvbGxlciA9IGM7Ci0gICAgICAgIH0KLSAgICB9KTsKLQotICAgIHJzLmdldFJl
YWRlcigpLmNsb3NlZC50aGVuKHRlc3QzLnN0ZXBfZnVuYyhmdW5jdGlvbigpIHsKLSAgICAgICAg
YXNzZXJ0X3VucmVhY2hlZCgiY2xvc2VkIHByb21pc2Ugc2hvdWxkIG5vdCBiZSByZXNvbHZlZCB3
aGVuIHN0cmVhbSBpcyBlcnJvcmVkIik7Ci0gICAgfSksIHRlc3QzLnN0ZXBfZnVuYyhmdW5jdGlv
bihlcnIpIHsKLSAgICAgICAgYXNzZXJ0X2VxdWFscyhlcnIsIHVuZGVmaW5lZCk7Ci0gICAgICAg
IHRlc3QzLmRvbmUoKTsKLSAgICB9KSk7Ci0KLSAgICBjb250cm9sbGVyLmVycm9yKCk7Ci19KTsK
IDwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZS1zdHJl
YW0tZ2MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZS1zdHJlYW0t
Z2MtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmMyODQwLi4w
MDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGUtc3RyZWFtLWdjLWV4cGVj
dGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotCi1QQVNTIFJlYWRhYmxlIHN0
cmVhbSBjb250cm9sbGVyIG1ldGhvZHMgc2hvdWxkIGNvbnRpbnVlIHdvcmtpbmcgcHJvcGVybHkg
d2hlbiBzY3JpcHRzIGFyZSBsb29zaW5nIHJlZmVyZW5jZSB0byB0aGUgcmVhZGFibGUgc3RyZWFt
IAotUEFTUyBSZWFkYWJsZSBzdHJlYW0gY2xvc2VkIHByb21pc2Ugc2hvdWxkIHJlc29sdmUgZXZl
biBpZiBzdHJlYW0gYW5kIHJlYWRlciBKUyByZWZlcmVuY2VzIGFyZSBsb3N0IAotUEFTUyBSZWFk
YWJsZSBzdHJlYW0gY2xvc2VkIHByb21pc2Ugc2hvdWxkIHJlamVjdCBldmVuIGlmIHN0cmVhbSBh
bmQgcmVhZGVyIEpTIHJlZmVyZW5jZXMgYXJlIGxvc3QgCi0KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3N0cmVhbXMvcmVhZGFibGUtc3RyZWFtLWdjLmh0bWwgYi9MYXlvdXRUZXN0cy9zdHJlYW1z
L3JlYWRhYmxlLXN0cmVhbS1nYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk
MDc0MjExLi4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGUtc3RyZWFt
LWdjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4K
LTxzY3JpcHQgc3JjPScuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMnPjwvc2NyaXB0PgotPHNj
cmlwdCBzcmM9Jy4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyc+PC9zY3JpcHQ+Ci08
c2NyaXB0IHNyYz0nLi4vcmVzb3VyY2VzL2djLmpzJz48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1mdW5j
dGlvbiBnYXJiYWdlQ29sbGVjdEFuZERvKHRhc2spCi17Ci0gICAgdmFyIHRpbWVvdXQgPSA1MDsK
LSAgICBpZiAod2luZG93LkdDQ29udHJvbGxlcikKLSAgICAgICAgd2luZG93LkdDQ29udHJvbGxl
ci5jb2xsZWN0KCk7Ci0gICAgZWxzZSBpZiAod2luZG93LmdjKQotICAgICAgICB3aW5kb3cuZ2Mo
KTsKLSAgICBlbHNlCi0gICAgICAgIHRpbWVvdXQgPSA0MDA7Ci0gICAgc2V0VGltZW91dCh0YXNr
LCB0aW1lb3V0KTsKLX0KLQotdmFyIHRlc3QxID0gYXN5bmNfdGVzdCgnUmVhZGFibGUgc3RyZWFt
IGNvbnRyb2xsZXIgbWV0aG9kcyBzaG91bGQgY29udGludWUgd29ya2luZyBwcm9wZXJseSB3aGVu
IHNjcmlwdHMgYXJlIGxvb3NpbmcgcmVmZXJlbmNlIHRvIHRoZSByZWFkYWJsZSBzdHJlYW0nKTsK
LXRlc3QxLnN0ZXAoZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGNvbnRyb2xsZXI7Ci0gICAgbmV3IFJl
YWRhYmxlU3RyZWFtKHsKLSAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uKGMpIHsKLSAgICAgICAgICAg
IGNvbnRyb2xsZXIgPSBjOwotICAgICAgICB9Ci0gICAgfSk7Ci0KLSAgICBnYXJiYWdlQ29sbGVj
dEFuZERvKHRlc3QxLnN0ZXBfZnVuYyhmdW5jdGlvbigpIHsKLSAgICAgICAgY29udHJvbGxlci5j
bG9zZSgpOwotICAgICAgICBhc3NlcnRfdGhyb3dzKG5ldyBUeXBlRXJyb3IoKSwgZnVuY3Rpb24o
KSB7IGNvbnRyb2xsZXIuY2xvc2UoKTsgfSk7Ci0gICAgICAgIGFzc2VydF90aHJvd3MobmV3IFR5
cGVFcnJvcigpLCBmdW5jdGlvbigpIHsgY29udHJvbGxlci5lcnJvcigpOyB9KTsKLSAgICAgICAg
dGVzdDEuZG9uZSgpOwotICAgIH0pKTsKLX0pOwotCi12YXIgdGVzdDIgPSBhc3luY190ZXN0KCdS
ZWFkYWJsZSBzdHJlYW0gY2xvc2VkIHByb21pc2Ugc2hvdWxkIHJlc29sdmUgZXZlbiBpZiBzdHJl
YW0gYW5kIHJlYWRlciBKUyByZWZlcmVuY2VzIGFyZSBsb3N0Jyk7Ci10ZXN0Mi5zdGVwKGZ1bmN0
aW9uKCkgewotICAgIHZhciBjb250cm9sbGVyOwotICAgIG5ldyBSZWFkYWJsZVN0cmVhbSh7Ci0g
ICAgICAgIHN0YXJ0OiBmdW5jdGlvbihjKSB7Ci0gICAgICAgICAgICBjb250cm9sbGVyID0gYzsK
LSAgICAgICAgfQotICAgIH0pLmdldFJlYWRlcigpLmNsb3NlZC50aGVuKHRlc3QyLnN0ZXBfZnVu
YyhmdW5jdGlvbigpIHsKLSAgICAgICAgdGVzdDIuZG9uZSgpOwotICAgIH0pKTsKLQotICAgIGdh
cmJhZ2VDb2xsZWN0QW5kRG8odGVzdDIuc3RlcF9mdW5jKGZ1bmN0aW9uKCkgewotICAgICAgICBj
b250cm9sbGVyLmNsb3NlKCk7Ci0gICAgfSkpOwotfSk7Ci0KLXZhciB0ZXN0MyA9IGFzeW5jX3Rl
c3QoJ1JlYWRhYmxlIHN0cmVhbSBjbG9zZWQgcHJvbWlzZSBzaG91bGQgcmVqZWN0IGV2ZW4gaWYg
c3RyZWFtIGFuZCByZWFkZXIgSlMgcmVmZXJlbmNlcyBhcmUgbG9zdCcpOwotdGVzdDMuc3RlcChm
dW5jdGlvbigpIHsKLSAgICB2YXIgY29udHJvbGxlcjsKLSAgICBuZXcgUmVhZGFibGVTdHJlYW0o
ewotICAgICAgICBzdGFydDogZnVuY3Rpb24oYykgewotICAgICAgICAgICAgY29udHJvbGxlciA9
IGM7Ci0gICAgICAgIH0KLSAgICB9KS5nZXRSZWFkZXIoKS5jbG9zZWQuY2F0Y2godGVzdDMuc3Rl
cF9mdW5jKGZ1bmN0aW9uKCkgewotICAgICAgICB0ZXN0My5kb25lKCk7Ci0gICAgfSkpOwotCi0g
ICAgZ2FyYmFnZUNvbGxlY3RBbmREbyh0ZXN0My5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIGNvbnRyb2xsZXIuZXJyb3IoKTsKLSAgICB9KSk7Ci19KTsKLTwvc2NyaXB0PgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZS1zdHJlYW0tcmVhZGVyLXJlYWQtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZS1zdHJlYW0tcmVhZGVyLXJl
YWQtZXhwZWN0ZWQudHh0CmluZGV4IDU0NzlhYjUuLjA3ZWQzMGUgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3N0cmVhbXMvcmVhZGFibGUtc3RyZWFtLXJlYWRlci1yZWFkLWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlLXN0cmVhbS1yZWFkZXItcmVhZC1leHBl
Y3RlZC50eHQKQEAgLTMsNiArMyw1IEBAIFBBU1MgUmVhZGluZyB0d2ljZSBvbiBhIHN0cmVhbSB0
aGF0IGdldHMgY2xvc2VkCiBQQVNTIFJlYWRpbmcgdHdpY2Ugb24gYSBjbG9zZWQgc3RyZWFtIAog
UEFTUyBSZWFkaW5nIHR3aWNlIG9uIGFuIGVycm9yZWQgc3RyZWFtIAogUEFTUyBSZWFkaW5nIHR3
aWNlIG9uIGEgc3RyZWFtIHRoYXQgZ2V0cyBlcnJvcmVkIAotUEFTUyBSZWFkaW5nIHdpdGhpbiBh
IHJlYWQgcHJvbWlzZSByZXNvbHZlIGNhbGxiYWNrIG9uIGEgc3RyZWFtIHRoYXQgZ2V0cyBjbG9z
ZWQgCiBQQVNTIFJlYWRhYmxlU3RyZWFtOiBpZiBzdGFydCByZWplY3RzIHdpdGggbm8gcGFyYW1l
dGVyLCBpdCBzaG91bGQgZXJyb3IgdGhlIHN0cmVhbSB3aXRoIGFuIHVuZGVmaW5lZCBlcnJvciAK
IApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZS1zdHJlYW0tcmVhZGVy
LXJlYWQuaHRtbCBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGUtc3RyZWFtLXJlYWRlci1y
ZWFkLmh0bWwKaW5kZXggZGZkNjQ4OC4uMGY0ODZlNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
c3RyZWFtcy9yZWFkYWJsZS1zdHJlYW0tcmVhZGVyLXJlYWQuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9zdHJlYW1zL3JlYWRhYmxlLXN0cmVhbS1yZWFkZXItcmVhZC5odG1sCkBAIC0xNSwxOCArMTUs
MTUgQEAgdGVzdDEuc3RlcChmdW5jdGlvbigpIHsKIAogICAgIHJlYWRlci5yZWFkKCkudGhlbih0
ZXN0MS5zdGVwX2Z1bmMoZnVuY3Rpb24ocmVzdWx0KSB7CiAgICAgICAgIGFzc2VydF9vYmplY3Rf
ZXF1YWxzKHJlc3VsdCwgeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0sICdyZWFkKCkg
c2hvdWxkIGZ1bGZpbGwgd2l0aCBjbG9zZScpOwotICAgICAgICBhc3NlcnRfZXF1YWxzKGNvdW50
ZXIsIDEpOwotICAgICAgICBjb3VudGVyKys7CisgICAgICAgIGFzc2VydF9lcXVhbHMoKytjb3Vu
dGVyLCAxKTsKICAgICB9KSk7CiAgICAgcmVhZGVyLnJlYWQoKS50aGVuKHRlc3QxLnN0ZXBfZnVu
YyhmdW5jdGlvbihyZXN1bHQpIHsKICAgICAgICAgYXNzZXJ0X29iamVjdF9lcXVhbHMocmVzdWx0
LCB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfSwgJ3JlYWQoKSBzaG91bGQgZnVsZmls
bCB3aXRoIGNsb3NlJyk7Ci0gICAgICAgIGFzc2VydF9lcXVhbHMoY291bnRlciwgMik7Ci0gICAg
ICAgIGNvdW50ZXIrKzsKLSAgICAgICAgdGVzdDEuZG9uZSgpOworICAgICAgICBhc3NlcnRfZXF1
YWxzKCsrY291bnRlciwgMik7CiAgICAgfSkpOwogICAgIHJlYWRlci5jbG9zZWQudGhlbih0ZXN0
MS5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7Ci0gICAgICAgIGFzc2VydF9lcXVhbHMoY291bnRlciwg
MCk7Ci0gICAgICAgIGNvdW50ZXIrKzsKKyAgICAgICAgYXNzZXJ0X2VxdWFscygrK2NvdW50ZXIs
IDMpOworICAgICAgICB0ZXN0MS5kb25lKCk7CiAgICAgfSkpOwogCiAgICAgY29udHJvbGxlci5j
bG9zZSgpOwpAQCAtMTE4LDU5ICsxMTUsMzcgQEAgdGVzdDQuc3RlcChmdW5jdGlvbigpIHsKICAg
ICAgICAgYXNzZXJ0X3VucmVhY2hlZCgncmVhZCgpIHNob3VsZCByZWplY3Qgb24gYW4gZXJyb3Jl
ZCBzdHJlYW0nKTsKICAgICB9KSwgdGVzdDQuc3RlcF9mdW5jKGZ1bmN0aW9uKGVycikgewogICAg
ICAgICBhc3NlcnRfZXF1YWxzKG15RXJyb3IsIGVycik7Ci0gICAgICAgIGFzc2VydF9lcXVhbHMo
Y291bnRlciwgMSk7Ci0gICAgICAgIGNvdW50ZXIrKzsKKyAgICAgICAgYXNzZXJ0X2VxdWFscygr
K2NvdW50ZXIsIDEpOwogICAgIH0pKTsKICAgICByZWFkZXIucmVhZCgpLnRoZW4odGVzdDQuc3Rl
cF9mdW5jKGZ1bmN0aW9uKCkgewogICAgICAgICBhc3NlcnRfdW5yZWFjaGVkKCdyZWFkKCkgc2hv
dWxkIHJlamVjdCBvbiBhbiBlcnJvcmVkIHN0cmVhbScpOwogICAgIH0pLCB0ZXN0NC5zdGVwX2Z1
bmMoZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgIGFzc2VydF9lcXVhbHMobXlFcnJvciwgZXJyKTsK
LSAgICAgICAgYXNzZXJ0X2VxdWFscyhjb3VudGVyLCAyKTsKLSAgICAgICAgY291bnRlcisrOwot
ICAgICAgICB0ZXN0NC5kb25lKCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMoKytjb3VudGVyLCAy
KTsKICAgICB9KSk7CiAgICAgcmVhZGVyLmNsb3NlZC50aGVuKHRlc3Q0LnN0ZXBfZnVuYyhmdW5j
dGlvbigpIHsKICAgICAgICAgYXNzZXJ0X3VucmVhY2hlZCgncmVhZCgpIHNob3VsZCByZWplY3Qg
b24gYW4gZXJyb3JlZCBzdHJlYW0nKTsKICAgICB9KSwgdGVzdDQuc3RlcF9mdW5jKGZ1bmN0aW9u
KGVycikgewogICAgICAgICBhc3NlcnRfZXF1YWxzKG15RXJyb3IsIGVycik7Ci0gICAgICAgIGFz
c2VydF9lcXVhbHMoY291bnRlciwgMCk7Ci0gICAgICAgIGNvdW50ZXIrKzsKKyAgICAgICAgYXNz
ZXJ0X2VxdWFscygrK2NvdW50ZXIsIDMpOworICAgICAgICB0ZXN0NC5kb25lKCk7CiAgICAgfSkp
OwogCiAgICAgdmFyIG15RXJyb3IgPSB7IHBvdGF0bzogJ21hc2hlZCcgfTsKICAgICBjb250cm9s
bGVyLmVycm9yKG15RXJyb3IpOwogIH0pOwogCi12YXIgdGVzdDUgPSBhc3luY190ZXN0KCdSZWFk
aW5nIHdpdGhpbiBhIHJlYWQgcHJvbWlzZSByZXNvbHZlIGNhbGxiYWNrIG9uIGEgc3RyZWFtIHRo
YXQgZ2V0cyBjbG9zZWQnKTsKK3ZhciB0ZXN0NSA9IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFt
OiBpZiBzdGFydCByZWplY3RzIHdpdGggbm8gcGFyYW1ldGVyLCBpdCBzaG91bGQgZXJyb3IgdGhl
IHN0cmVhbSB3aXRoIGFuIHVuZGVmaW5lZCBlcnJvcicpOwogdGVzdDUuc3RlcChmdW5jdGlvbigp
IHsKLSAgICB2YXIgY29udHJvbGxlcjsKLSAgICB2YXIgcnMgPSBuZXcgUmVhZGFibGVTdHJlYW0o
ewotICAgICAgICBzdGFydDogZnVuY3Rpb24oYykgewotICAgICAgICAgICAgY29udHJvbGxlciA9
IGM7Ci0gICAgICAgIH0KLSAgICB9KTsKLQotICAgIHZhciByZWFkZXIgPSBycy5nZXRSZWFkZXIo
KTsKLQotICAgIHJlYWRlci5yZWFkKCkudGhlbih0ZXN0NS5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHJlYWRlci5yZWFkKCkudGhlbih0ZXN0NS5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICB0ZXN0NS5kb25lKCk7Ci0gICAgICAgIH0pKTsKLSAgICB9KSk7Ci0gICAg
Y29udHJvbGxlci5jbG9zZSgpOwotfSk7Ci0KLXZhciB0ZXN0NiA9IGFzeW5jX3Rlc3QoJ1JlYWRh
YmxlU3RyZWFtOiBpZiBzdGFydCByZWplY3RzIHdpdGggbm8gcGFyYW1ldGVyLCBpdCBzaG91bGQg
ZXJyb3IgdGhlIHN0cmVhbSB3aXRoIGFuIHVuZGVmaW5lZCBlcnJvcicpOwotdGVzdDYuc3RlcChm
dW5jdGlvbigpIHsKICAgICB2YXIgcnMgPSBuZXcgUmVhZGFibGVTdHJlYW0oewogICAgICAgICBz
dGFydDogZnVuY3Rpb24oYykgewogICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7
CiAgICAgICAgIH0KICAgICB9KTsKIAotICAgIHJzLmdldFJlYWRlcigpLnJlYWQoKS5jYXRjaCh0
ZXN0Ni5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkgeworICAgIHJzLmdldFJlYWRlcigpLnJlYWQoKS5j
YXRjaCh0ZXN0NS5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkgewogICAgICAgICBhc3NlcnRfZXF1YWxz
KHR5cGVvZiBlLCAidW5kZWZpbmVkIik7Ci0gICAgICAgIHRlc3Q2LmRvbmUoKTsKKyAgICAgICAg
dGVzdDUuZG9uZSgpOwogICAgIH0pKTsKIH0pOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9z
dHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0tZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFi
bGUtc3RyZWFtLWV4cGVjdGVkLnR4dAppbmRleCA0YWQ5MTRlLi5lNjFmN2Q2IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1z
dHJlYW0tZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVmZXJlbmNlLWlt
cGxlbWVudGF0aW9uL3JlYWRhYmxlLXN0cmVhbS1leHBlY3RlZC50eHQKQEAgLTMwLDQgKzMwLDgg
QEAgUEFTUyBSZWFkYWJsZVN0cmVhbSBzdHJhdGVnaWVzOiB0aGUgZGVmYXVsdCBzdHJhdGVneSBz
aG91bGQgZ2l2ZSBkZXNpcmVkU2l6ZSBvZgogUEFTUyBSZWFkYWJsZVN0cmVhbSBzdHJhdGVnaWVz
OiB0aGUgZGVmYXVsdCBzdHJhdGVneSBzaG91bGQgY29udGludWUgZ2l2aW5nIGRlc2lyZWRTaXpl
IG9mIDEgaWYgdGhlIGNodW5rcyBhcmUgcmVhZCBpbW1lZGlhdGVseSAKIFBBU1MgUmVhZGFibGVT
dHJlYW0gaW50ZWdyYXRpb24gdGVzdDogYWRhcHRpbmcgYSByYW5kb20gcHVzaCBzb3VyY2UgCiBQ
QVNTIFJlYWRhYmxlU3RyZWFtIGludGVncmF0aW9uIHRlc3Q6IGFkYXB0aW5nIGEgc3luYyBwdWxs
IHNvdXJjZSAKK1BBU1MgUmVhZGFibGVTdHJlYW0gaW50ZWdyYXRpb24gdGVzdDogYWRhcHRpbmcg
YW4gYXN5bmMgcHVsbCBzb3VyY2UgCitQQVNTIFJlYWRhYmxlU3RyZWFtQ29udHJvbGxlciBtZXRo
b2RzIHNob3VsZCBjb250aW51ZSB3b3JraW5nIHByb3Blcmx5IHdoZW4gc2NyaXB0cyBsb3NlIHRo
ZWlyIHJlZmVyZW5jZSB0byB0aGUgcmVhZGFibGUgc3RyZWFtIAorUEFTUyBSZWFkYWJsZVN0cmVh
bSBjbG9zZWQgcHJvbWlzZSBzaG91bGQgZnVsZmlsbCBldmVuIGlmIHRoZSBzdHJlYW0gYW5kIHJl
YWRlciBKUyByZWZlcmVuY2VzIGFyZSBsb3N0IAorUEFTUyBSZWFkYWJsZVN0cmVhbSBjbG9zZWQg
cHJvbWlzZSBzaG91bGQgcmVqZWN0IGV2ZW4gaWYgc3RyZWFtIGFuZCByZWFkZXIgSlMgcmVmZXJl
bmNlcyBhcmUgbG9zdCAKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWZlcmVu
Y2UtaW1wbGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFtLXJlYWRlci1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJl
YW0tcmVhZGVyLWV4cGVjdGVkLnR4dAppbmRleCBkNWU2ZDNmLi4yNjQwY2QyIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1z
dHJlYW0tcmVhZGVyLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlZmVy
ZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0tcmVhZGVyLWV4cGVjdGVkLnR4dApA
QCAtMTgsNCArMTgsNSBAQCBQQVNTIENhbm5vdCB1c2UgYW4gYWxyZWFkeS1yZWxlYXNlZCByZWFk
ZXIgdG8gdW5sb2NrIGEgc3RyZWFtIGFnYWluCiBQQVNTIGNhbmNlbCgpIG9uIGEgcmVsZWFzZWQg
cmVhZGVyIGlzIGEgbm8tb3AgYW5kIGRvZXMgbm90IHBhc3MgdGhyb3VnaCAKIFBBU1MgR2V0dGlu
ZyBhIHNlY29uZCByZWFkZXIgYWZ0ZXIgZXJyb3JpbmcgdGhlIHN0cmVhbSBzaG91bGQgc3VjY2Vl
ZCAKIFBBU1MgR2FyYmFnZS1jb2xsZWN0aW5nIGEgUmVhZGFibGVTdHJlYW1SZWFkZXIgc2hvdWxk
IG5vdCB1bmxvY2sgaXRzIHN0cmVhbSAKK1BBU1MgUmVhZGFibGVTdHJlYW1SZWFkZXIgY2xvc2Vk
IHByb21pc2Ugc2hvdWxkIGJlIHJlamVjdGVkIHdpdGggdW5kZWZpbmVkIGlmIHRoYXQgaXMgdGhl
IGVycm9yIAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1pbXBs
ZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0tcmVhZGVyLmh0bWwgYi9MYXlvdXRUZXN0cy9zdHJl
YW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0tcmVhZGVyLmh0bWwK
aW5kZXggOTg5YWY0OS4uNDJlNzc4ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9y
ZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFtLXJlYWRlci5odG1sCisrKyBi
L0xheW91dFRlc3RzL3N0cmVhbXMvcmVmZXJlbmNlLWltcGxlbWVudGF0aW9uL3JlYWRhYmxlLXN0
cmVhbS1yZWFkZXIuaHRtbApAQCAtMzEyLDQgKzMxMiwyMyBAQCB0ZXN0KGZ1bmN0aW9uKCkgewog
CiAgICAgYXNzZXJ0X3Rocm93cyhuZXcgVHlwZUVycm9yKCksIGZ1bmN0aW9uKCkgeyBycy5nZXRS
ZWFkZXIoKTsgfSwgJ29sZCByZWFkZXIgc2hvdWxkIHN0aWxsIGJlIGxvY2tpbmcgdGhlIHN0cmVh
bSBldmVuIGFmdGVyIGdhcmJhZ2UgY29sbGVjdGlvbicpOwogfSwgJ0dhcmJhZ2UtY29sbGVjdGlu
ZyBhIFJlYWRhYmxlU3RyZWFtUmVhZGVyIHNob3VsZCBub3QgdW5sb2NrIGl0cyBzdHJlYW0nKTsK
KwordmFyIHRlc3Q5ID0gYXN5bmNfdGVzdCgnUmVhZGFibGVTdHJlYW1SZWFkZXIgY2xvc2VkIHBy
b21pc2Ugc2hvdWxkIGJlIHJlamVjdGVkIHdpdGggdW5kZWZpbmVkIGlmIHRoYXQgaXMgdGhlIGVy
cm9yJyk7Cit0ZXN0OS5zdGVwKGZ1bmN0aW9uKCkgeworICAgIHZhciBjb250cm9sbGVyOworICAg
IHZhciBycyA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7CisgICAgICAgIHN0YXJ0OiBmdW5jdGlvbihj
KSB7CisgICAgICAgICAgICBjb250cm9sbGVyID0gYzsKKyAgICAgICAgfQorICAgIH0pOworCisg
ICAgcnMuZ2V0UmVhZGVyKCkuY2xvc2VkLnRoZW4odGVzdDkuc3RlcF9mdW5jKGZ1bmN0aW9uKCkg
eworICAgICAgICBhc3NlcnRfdW5yZWFjaGVkKCJjbG9zZWQgcHJvbWlzZSBzaG91bGQgbm90IGJl
IHJlc29sdmVkIHdoZW4gc3RyZWFtIGlzIGVycm9yZWQiKTsKKyAgICB9KSwgdGVzdDkuc3RlcF9m
dW5jKGZ1bmN0aW9uKGVycikgeworICAgICAgICBhc3NlcnRfZXF1YWxzKGVyciwgdW5kZWZpbmVk
LCAncGFzc2VkIGVycm9yIHNob3VsZCBiZSB1bmRlZmluZWQgYXMgaXQgd2FzJyk7CisgICAgICAg
IHRlc3Q5LmRvbmUoKTsKKyAgICB9KSk7CisKKyAgICBjb250cm9sbGVyLmVycm9yKCk7Cit9KTsK
IDwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWZlcmVuY2UtaW1w
bGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFtLXRlZS5odG1sIGIvTGF5b3V0VGVzdHMvc3RyZWFt
cy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFtLXRlZS5odG1sCmluZGV4
IDE0Y2IwYWQuLjE5NGZlMTMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVmZXJl
bmNlLWltcGxlbWVudGF0aW9uL3JlYWRhYmxlLXN0cmVhbS10ZWUuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0tdGVl
Lmh0bWwKQEAgLTE2LDcgKzE2LDYgQEAgdGVzdChmdW5jdGlvbigpIHsKIAogdmFyIHRlc3QxID0g
YXN5bmNfdGVzdCgnUmVhZGFibGVTdHJlYW0gdGVlaW5nOiBzaG91bGQgYmUgYWJsZSB0byByZWFk
IG9uZSBicmFuY2ggdG8gdGhlIGVuZCB3aXRob3V0IGFmZmVjdGluZyB0aGUgb3RoZXInKTsKIHRl
c3QxLnN0ZXAoZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGNsb3NlZENhbGxlZCA9IGZhbHNlOwogICAg
IHZhciByZWFkQ2FsbHMgPSAwOwogICAgIGNvbnN0IHJzID0gbmV3IFJlYWRhYmxlU3RyZWFtKHsK
ICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uKGMpIHsKQEAgLTMzLDcgKzMyLDggQEAgdGVzdDEuc3Rl
cChmdW5jdGlvbigpIHsKICAgICB2YXIgcmVhZGVyMiA9IGJyYW5jaDIuZ2V0UmVhZGVyKCk7CiAK
ICAgICByZWFkZXIxLmNsb3NlZC50aGVuKHRlc3QxLnN0ZXBfZnVuYyhmdW5jdGlvbigpIHsKLSAg
ICAgICAgY2xvc2VkQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhyZWFkQ2Fs
bHMsIDQpOworICAgICAgICB0ZXN0MS5kb25lKCk7CiAgICAgfSkpLmNhdGNoKHRlc3QxLnN0ZXBf
ZnVuYyhmdW5jdGlvbihlKSB7IGFzc2VydF91bnJlYWNoZWQoZSk7IH0pKTsKICAgICByZWFkZXIy
LmNsb3NlZC50aGVuKHRlc3QxLnN0ZXBfZnVuYyhmdW5jdGlvbigpIHsgYXNzZXJ0X3VucmVhY2hl
ZCgnYnJhbmNoMiBzaG91bGQgbm90IGJlIGNsb3NlZCcpOyB9KSk7CiAKQEAgLTQ3LDkgKzQ3LDcg
QEAgdGVzdDEuc3RlcChmdW5jdGlvbigpIHsKICAgICB9KSk7CiAgICAgcmVhZGVyMS5yZWFkKCku
dGhlbih0ZXN0MS5zdGVwX2Z1bmMoZnVuY3Rpb24ocikgewogICAgICAgICBhc3NlcnRfb2JqZWN0
X2VxdWFscyhyLCB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfSwgJ3RoaXJkIHJlYWQo
KSBmcm9tIGJyYW5jaDEgc2hvdWxkIGJlIGRvbmUnKTsKLSAgICAgICAgYXNzZXJ0X3RydWUoY2xv
c2VkQ2FsbGVkKTsKLSAgICAgICAgYXNzZXJ0X2VxdWFscygrK3JlYWRDYWxscywgNCk7Ci0gICAg
ICAgIHRlc3QxLmRvbmUoKTsKKyAgICAgICAgKytyZWFkQ2FsbHM7CiAgICAgfSkpOwogCiAgICAg
cmVhZGVyMi5yZWFkKCkudGhlbih0ZXN0MS5zdGVwX2Z1bmMoZnVuY3Rpb24ocikgewpAQCAtMjAz
LDEwICsyMDEsMTAgQEAgdGVzdDYuc3RlcChmdW5jdGlvbigpIHsKICAgICB2YXIgcmVhc29uMiA9
IG5ldyBFcnJvcignSSBoYXZlIHRoZSBkZWF0aCBzZW50ZW5jZSBvbiB0d2VsdmUgc3lzdGVtcy4n
KTsKIAogICAgIHZhciBycyA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7Ci0gICAgICAgIGNhbmNlbDog
dGVzdDYuc3RlcF9mdW5jKGZ1bmN0aW9uKHJlYXNvbikgeworICAgICAgICBjYW5jZWw6IGZ1bmN0
aW9uKHJlYXNvbikgewogICAgICAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhyZWFzb24sIFty
ZWFzb24xLCByZWFzb24yXSwgJ3RoZSBjYW5jZWwgcmVhc29uIHNob3VsZCBiZSBhbiBhcnJheSBj
b250YWluaW5nIHRob3NlIGZyb20gdGhlIGJyYW5jaGVzJyk7CiAgICAgICAgICAgICB0ZXN0Ni5k
b25lKCk7Ci0gICAgICAgIH0pCisgICAgICAgIH0KICAgICB9KTsKIAogICAgIHZhciBicmFuY2gg
PSBycy50ZWUoKTsKQEAgLTIzMiw3ICsyMzAsNiBAQCB0ZXN0Ny5zdGVwKGZ1bmN0aW9uKCkgewog
ICAgIGJyYW5jaDEuY2FuY2VsKCkuY2F0Y2godGVzdDcuc3RlcF9mdW5jKGZ1bmN0aW9uKGUpIHsK
ICAgICAgICAgYXNzZXJ0X2VxdWFscyhlLCB0aGVFcnJvciwgJ2JyYW5jaDEuY2FuY2VsKCkgc2hv
dWxkIHJlamVjdCB3aXRoIHRoZSBlcnJvcicpOwogICAgICAgICBjYW5jZWxSZWplY3RlZCA9IHRy
dWU7Ci0gICAgICAgIHRlc3Q3LmRvbmUoKTsKICAgICB9KSk7CiAgICAgYnJhbmNoMi5jYW5jZWwo
KS5jYXRjaCh0ZXN0Ny5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkgewogICAgICAgICBhc3NlcnRfZXF1
YWxzKGUsIHRoZUVycm9yLCAnYnJhbmNoMi5jYW5jZWwoKSBzaG91bGQgcmVqZWN0IHdpdGggdGhl
IGVycm9yJyk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1pbXBs
ZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0tdGVtcGxhdGVkLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3N0cmVhbXMvcmVmZXJlbmNlLWltcGxlbWVudGF0aW9uL3JlYWRhYmxlLXN0cmVhbS10
ZW1wbGF0ZWQtZXhwZWN0ZWQudHh0CmluZGV4IDBlMzg1NTEuLjczMDNiYzMgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3N0cmVhbXMvcmVmZXJlbmNlLWltcGxlbWVudGF0aW9uL3JlYWRhYmxlLXN0
cmVhbS10ZW1wbGF0ZWQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVm
ZXJlbmNlLWltcGxlbWVudGF0aW9uL3JlYWRhYmxlLXN0cmVhbS10ZW1wbGF0ZWQtZXhwZWN0ZWQu
dHh0CkBAIC0xOSw4ICsxOSwxNiBAQCBQQVNTIGNhbmNlbCgpIHNob3VsZCByZXR1cm4gYSBkaXN0
aW5jdCBmdWxmaWxsZWQgcHJvbWlzZSBlYWNoIHRpbWUKIFBBU1MgbG9ja2VkIHNob3VsZCBiZSBm
YWxzZSAKIFBBU1MgZ2V0UmVhZGVyKCkgc2hvdWxkIGJlIE9LIAogUEFTUyBzaG91bGQgYmUgYWJs
ZSB0byBhY3F1aXJlIG11bHRpcGxlIHJlYWRlcnMsIHNpbmNlIHRoZXkgYXJlIGFsbCBhdXRvLXJl
bGVhc2VkIAotUEFTUyBSdW5uaW5nIHRlbXBsYXRlZFJTQ2xvc2VkUmVhZGVyIHdpdGggUmVhZGFi
bGVTdHJlYW0gKGNsb3NlZCB2aWEgY2FsbCBpbiBzdGFydCkgcmVhZGVyIAorUEFTUyBSdW5uaW5n
IHRlbXBsYXRlZFJTQ2xvc2VkUmVhZGVyIHdpdGggUmVhZGFibGVTdHJlYW0gcmVhZGVyIChjbG9z
ZWQgYmVmb3JlIGdldHRpbmcgcmVhZGVyKSAKIFBBU1MgcmVhZCgpIHNob3VsZCBmdWxmaWxsIHdp
dGggeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0gCitQQVNTIHJlYWQoKSBtdWx0aXBs
ZSB0aW1lcyBzaG91bGQgZnVsZmlsbCB3aXRoIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1
ZSB9IAorUEFTUyByZWFkKCkgc2hvdWxkIHdvcmsgd2hlbiB1c2VkIHdpdGhpbiBhbm90aGVyIHJl
YWQoKSBmdWxmaWxsIGNhbGxiYWNrIAorUEFTUyBjbG9zZWQgc2hvdWxkIGZ1bGZpbGwgd2l0aCB1
bmRlZmluZWQgCitQQVNTIGNhbmNlbCgpIHNob3VsZCByZXR1cm4gYSBkaXN0aW5jdCBmdWxmaWxs
ZWQgcHJvbWlzZSBlYWNoIHRpbWUgCitQQVNTIFJ1bm5pbmcgdGVtcGxhdGVkUlNDbG9zZWRSZWFk
ZXIgd2l0aCBSZWFkYWJsZVN0cmVhbSByZWFkZXIgKGNsb3NlZCBhZnRlciBnZXR0aW5nIHJlYWRl
cikgCitQQVNTIHJlYWQoKSBzaG91bGQgZnVsZmlsbCB3aXRoIHsgdmFsdWU6IHVuZGVmaW5lZCwg
ZG9uZTogdHJ1ZSB9IAorUEFTUyByZWFkKCkgbXVsdGlwbGUgdGltZXMgc2hvdWxkIGZ1bGZpbGwg
d2l0aCB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfSAKK1BBU1MgcmVhZCgpIHNob3Vs
ZCB3b3JrIHdoZW4gdXNlZCB3aXRoaW4gYW5vdGhlciByZWFkKCkgZnVsZmlsbCBjYWxsYmFjayAK
IFBBU1MgY2xvc2VkIHNob3VsZCBmdWxmaWxsIHdpdGggdW5kZWZpbmVkIAogUEFTUyBjYW5jZWwo
KSBzaG91bGQgcmV0dXJuIGEgZGlzdGluY3QgZnVsZmlsbGVkIHByb21pc2UgZWFjaCB0aW1lIAog
UEFTUyBSdW5uaW5nIHRlbXBsYXRlZFJTQ2xvc2VkIHdpdGggUmVhZGFibGVTdHJlYW0gKGNsb3Nl
ZCB2aWEgY2FuY2VsKSAKQEAgLTI4LDIzICszNiwzNCBAQCBQQVNTIGNhbmNlbCgpIHNob3VsZCBy
ZXR1cm4gYSBkaXN0aW5jdCBmdWxmaWxsZWQgcHJvbWlzZSBlYWNoIHRpbWUKIFBBU1MgbG9ja2Vk
IHNob3VsZCBiZSBmYWxzZSAKIFBBU1MgZ2V0UmVhZGVyKCkgc2hvdWxkIGJlIE9LIAogUEFTUyBz
aG91bGQgYmUgYWJsZSB0byBhY3F1aXJlIG11bHRpcGxlIHJlYWRlcnMsIHNpbmNlIHRoZXkgYXJl
IGFsbCBhdXRvLXJlbGVhc2VkIAotUEFTUyBSdW5uaW5nIHRlbXBsYXRlZFJTQ2xvc2VkUmVhZGVy
IHdpdGggUmVhZGFibGVTdHJlYW0gKGNsb3NlZCB2aWEgY2FuY2VsKSByZWFkZXIgCitQQVNTIFJ1
bm5pbmcgdGVtcGxhdGVkUlNDbG9zZWRSZWFkZXIgd2l0aCBSZWFkYWJsZVN0cmVhbSByZWFkZXIg
KGNsb3NlZCB2aWEgY2FuY2VsIGFmdGVyIGdldHRpbmcgcmVhZGVyKSAKIFBBU1MgcmVhZCgpIHNo
b3VsZCBmdWxmaWxsIHdpdGggeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0gCitQQVNT
IHJlYWQoKSBtdWx0aXBsZSB0aW1lcyBzaG91bGQgZnVsZmlsbCB3aXRoIHsgdmFsdWU6IHVuZGVm
aW5lZCwgZG9uZTogdHJ1ZSB9IAorUEFTUyByZWFkKCkgc2hvdWxkIHdvcmsgd2hlbiB1c2VkIHdp
dGhpbiBhbm90aGVyIHJlYWQoKSBmdWxmaWxsIGNhbGxiYWNrIAogUEFTUyBjbG9zZWQgc2hvdWxk
IGZ1bGZpbGwgd2l0aCB1bmRlZmluZWQgCiBQQVNTIGNhbmNlbCgpIHNob3VsZCByZXR1cm4gYSBk
aXN0aW5jdCBmdWxmaWxsZWQgcHJvbWlzZSBlYWNoIHRpbWUgCiBQQVNTIFJ1bm5pbmcgdGVtcGxh
dGVkUlNFcnJvcmVkIHdpdGggUmVhZGFibGVTdHJlYW0gKGVycm9yZWQgdmlhIGNhbGwgaW4gc3Rh
cnQpIAogUEFTUyBnZXRSZWFkZXIoKSBzaG91bGQgcmV0dXJuIGEgcmVhZGVyIHRoYXQgYWN0cyBl
cnJvcmVkIAorUEFTUyByZWFkKCkgdHdpY2Ugc2hvdWxkIGdpdmUgdGhlIGVycm9yIGVhY2ggdGlt
ZSAKIFBBU1MgbG9ja2VkIHNob3VsZCBiZSBmYWxzZSAKIFBBU1MgUnVubmluZyB0ZW1wbGF0ZWRS
U0Vycm9yZWRTeW5jT25seSB3aXRoIFJlYWRhYmxlU3RyZWFtIChlcnJvcmVkIHZpYSBjYWxsIGlu
IHN0YXJ0KSAKK1BBU1Mgc2hvdWxkIGJlIGFibGUgdG8gb2J0YWluIGEgc2Vjb25kIHJlYWRlciwg
d2l0aCB0aGUgY29ycmVjdCBjbG9zZWQgcHJvbWlzZSAKIFBBU1MgY2FuY2VsKCkgc2hvdWxkIHJl
dHVybiBhIGRpc3RpbmN0IHJlamVjdGVkIHByb21pc2UgZWFjaCB0aW1lIAogUEFTUyByZWFkZXIg
Y2FuY2VsKCkgc2hvdWxkIHJldHVybiBhIGRpc3RpbmN0IHJlamVjdGVkIHByb21pc2UgZWFjaCB0
aW1lIAogUEFTUyBzaG91bGQgYmUgYWJsZSB0byBhY3F1aXJlIG11bHRpcGxlIHJlYWRlcnMsIHNp
bmNlIHRoZXkgYXJlIGFsbCBhdXRvLXJlbGVhc2VkIAogUEFTUyBSdW5uaW5nIHRlbXBsYXRlZFJT
RXJyb3JlZCB3aXRoIFJlYWRhYmxlU3RyZWFtIChlcnJvcmVkIHZpYSByZXR1cm5pbmcgYSByZWpl
Y3RlZCBwcm9taXNlIGluIHN0YXJ0KSAKIFBBU1MgZ2V0UmVhZGVyKCkgc2hvdWxkIHJldHVybiBh
IHJlYWRlciB0aGF0IGFjdHMgZXJyb3JlZCAKK1BBU1MgcmVhZCgpIHR3aWNlIHNob3VsZCBnaXZl
IHRoZSBlcnJvciBlYWNoIHRpbWUgCiBQQVNTIGxvY2tlZCBzaG91bGQgYmUgZmFsc2UgCiBQQVNT
IFJ1bm5pbmcgdGVtcGxhdGVkUlNFcnJvcmVkUmVhZGVyIHdpdGggUmVhZGFibGVTdHJlYW0gKGVy
cm9yZWQgdmlhIHJldHVybmluZyBhIHJlamVjdGVkIHByb21pc2UgaW4gc3RhcnQpIHJlYWRlciAK
IFBBU1MgY2xvc2VkIHNob3VsZCByZWplY3Qgd2l0aCB0aGUgZXJyb3IgCiBQQVNTIHJlYWQoKSBz
aG91bGQgcmVqZWN0IHdpdGggdGhlIGVycm9yIAorUEFTUyBSdW5uaW5nIHRlbXBsYXRlZFJTRXJy
b3JlZFJlYWRlciB3aXRoIFJlYWRhYmxlU3RyZWFtIHJlYWRlciAoZXJyb3JlZCBiZWZvcmUgZ2V0
dGluZyByZWFkZXIpIAorUEFTUyBjbG9zZWQgc2hvdWxkIHJlamVjdCB3aXRoIHRoZSBlcnJvciAK
K1BBU1MgcmVhZCgpIHNob3VsZCByZWplY3Qgd2l0aCB0aGUgZXJyb3IgCitQQVNTIFJ1bm5pbmcg
dGVtcGxhdGVkUlNFcnJvcmVkUmVhZGVyIHdpdGggUmVhZGFibGVTdHJlYW0gcmVhZGVyIChlcnJv
cmVkIGFmdGVyIGdldHRpbmcgcmVhZGVyKSAKK1BBU1MgY2xvc2VkIHNob3VsZCByZWplY3Qgd2l0
aCB0aGUgZXJyb3IgCitQQVNTIHJlYWQoKSBzaG91bGQgcmVqZWN0IHdpdGggdGhlIGVycm9yIAog
UEFTUyBSdW5uaW5nIHRlbXBsYXRlZFJTVHdvQ2h1bmtzT3BlblJlYWRlciB3aXRoIFJlYWRhYmxl
U3RyZWFtICh0d28gY2h1bmtzIGVucXVldWVkLCBzdGlsbCBvcGVuKSByZWFkZXIgCiBQQVNTIGNh
bGxpbmcgcmVhZCgpIHR3aWNlIHdpdGhvdXQgd2FpdGluZyB3aWxsIGV2ZW50dWFsbHkgZ2l2ZSBi
b3RoIGNodW5rcyAKIFBBU1MgY2FsbGluZyByZWFkKCkgdHdpY2Ugd2l0aCB3YWl0aW5nIHdpbGwg
ZXZlbnR1YWxseSBnaXZlIGJvdGggY2h1bmtzIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Ry
ZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFtLXRlbXBsYXRlZC5o
dG1sIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFi
bGUtc3RyZWFtLXRlbXBsYXRlZC5odG1sCmluZGV4IDM4Yjc1MzAuLjdiNzAyYWIgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVmZXJlbmNlLWltcGxlbWVudGF0aW9uL3JlYWRhYmxl
LXN0cmVhbS10ZW1wbGF0ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlZmVyZW5j
ZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0tdGVtcGxhdGVkLmh0bWwKQEAgLTgxLDE1
ICs4MSwzOCBAQCBmdW5jdGlvbiB0ZW1wbGF0ZWRSU0Vycm9yZWQobGFiZWwsIGZhY3RvcnksIGVy
cm9yKSB7CiAKICAgICAgICAgcmVhZGVyLmNsb3NlZC5jYXRjaCh0ZXN0MS5zdGVwX2Z1bmMoZnVu
Y3Rpb24oZSkgewogICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhlLCBlcnJvciwgJ3JlYWRlci5j
bG9zZWQgc2hvdWxkIHJlamVjdCB3aXRoIHRoZSBlcnJvcicpOwotICAgICAgICAgICAgKytwcm9t
aXNlc0NvdW50OworICAgICAgICAgICAgaWYgKCsrcHJvbWlzZXNDb3VudCA9PT0gMikKKyAgICAg
ICAgICAgICAgICB0ZXN0MS5kb25lKCk7CiAgICAgICAgIH0pKTsKICAgICAgICAgcmVhZGVyLnJl
YWQoKS5jYXRjaCh0ZXN0MS5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgYXNz
ZXJ0X2VxdWFscyhlLCBlcnJvciwgJ3JlYWRlci5yZWFkKCkgc2hvdWxkIHJlamVjdCB3aXRoIHRo
ZSBlcnJvcicpOwotICAgICAgICAgICAgYXNzZXJ0X2VxdWFscygrK3Byb21pc2VzQ291bnQsIDIp
OwotICAgICAgICAgICAgdGVzdDEuZG9uZSgpOworICAgICAgICAgICAgaWYgKCsrcHJvbWlzZXND
b3VudCA9PT0gMikKKyAgICAgICAgICAgICAgICB0ZXN0MS5kb25lKCk7CiAgICAgICAgIH0pKTsK
ICAgICB9KTsKIAorICAgIHZhciB0ZXN0MiA9IGFzeW5jX3Rlc3QoJ3JlYWQoKSB0d2ljZSBzaG91
bGQgZ2l2ZSB0aGUgZXJyb3IgZWFjaCB0aW1lJyk7CisgICAgdGVzdDIuc3RlcChmdW5jdGlvbigp
IHsKKyAgICAgICAgdmFyIHJzID0gZmFjdG9yeSgpOworICAgICAgICB2YXIgcHJvbWlzZUNvdW50
ID0gMDsKKworICAgICAgICB2YXIgcmVhZGVyID0gcnMuZ2V0UmVhZGVyKCk7CisKKyAgICAgICAg
cmVhZGVyLnJlYWQoKS5jYXRjaCh0ZXN0Mi5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkgeworICAgICAg
ICAgICAgYXNzZXJ0X2VxdWFscyhlLCBlcnJvciwgJ3JlYWRlci5yZWFkKCkgc2hvdWxkIHJlamVj
dCB3aXRoIHRoZSBlcnJvcicpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscygrK3Byb21pc2VD
b3VudCwgMSk7CisgICAgICAgIH0pKTsKKyAgICAgICAgcmVhZGVyLnJlYWQoKS5jYXRjaCh0ZXN0
Mi5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhlLCBl
cnJvciwgJ3JlYWRlci5yZWFkKCkgc2hvdWxkIHJlamVjdCB3aXRoIHRoZSBlcnJvcicpOworICAg
ICAgICAgICAgYXNzZXJ0X2VxdWFscygrK3Byb21pc2VDb3VudCwgMik7CisgICAgICAgIH0pKTsK
KyAgICAgICAgcmVhZGVyLmNsb3NlZC5jYXRjaCh0ZXN0Mi5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkg
eworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhlLCBlcnJvciwgJ3JlYWRlci5jbG9zZWQgc2hv
dWxkIHJlamVjdCB3aXRoIHRoZSBlcnJvcicpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscygr
K3Byb21pc2VDb3VudCwgMyk7CisgICAgICAgICAgICB0ZXN0Mi5kb25lKCk7CisgICAgICAgIH0p
KTsKKyAgIH0pOworCiAgICAgdGVzdChmdW5jdGlvbigpIHsKICAgICAgICAgdmFyIHJzID0gZmFj
dG9yeSgpOwogCkBAIC0xMDEsMzEgKzEyNCw0OCBAQCBmdW5jdGlvbiB0ZW1wbGF0ZWRSU0Vycm9y
ZWRTeW5jT25seShsYWJlbCwgZmFjdG9yeSwgZXJyb3IpIHsKICAgICB0ZXN0KGZ1bmN0aW9uKCkg
ewogICAgIH0sICdSdW5uaW5nIHRlbXBsYXRlZFJTRXJyb3JlZFN5bmNPbmx5IHdpdGggJyArIGxh
YmVsKTsKIAotICAgIHZhciB0ZXN0MSA9IGFzeW5jX3Rlc3QoJ2NhbmNlbCgpIHNob3VsZCByZXR1
cm4gYSBkaXN0aW5jdCByZWplY3RlZCBwcm9taXNlIGVhY2ggdGltZScpOworICAgIHZhciB0ZXN0
MSA9IGFzeW5jX3Rlc3QoJ3Nob3VsZCBiZSBhYmxlIHRvIG9idGFpbiBhIHNlY29uZCByZWFkZXIs
IHdpdGggdGhlIGNvcnJlY3QgY2xvc2VkIHByb21pc2UnKTsKICAgICB0ZXN0MS5zdGVwKGZ1bmN0
aW9uKCkgewogICAgICAgICB2YXIgcnMgPSBmYWN0b3J5KCk7CisKKyAgICAgICAgcnMuZ2V0UmVh
ZGVyKCk7CisKKyAgICAgICAgdmFyIHJlYWRlciA9IHJzLmdldFJlYWRlcigpOyAvLyBDYWxsaW5n
IGdldFJlYWRlcigpIHR3aWNlIGRvZXMgbm90IHRocm93ICh0aGUgc3RyZWFtIGlzIG5vdCBsb2Nr
ZWQpLgorCisgICAgICAgIHJlYWRlci5jbG9zZWQudGhlbigKKyAgICAgICAgICAgIHRlc3QxLnN0
ZXBfZnVuYyhmdW5jdGlvbigpIHsgYXNzZXJ0X3VucmVhY2hlZCgnY2xvc2VkIHByb21pc2Ugc2hv
dWxkIG5vdCBiZSBmdWxmaWxsZWQgd2hlbiBzdHJlYW0gaXMgZXJyb3JlZCcpOyB9KSwKKyAgICAg
ICAgICAgIHRlc3QxLnN0ZXBfZnVuYyhmdW5jdGlvbihlcnIpIHsKKyAgICAgICAgICAgICAgICBh
c3NlcnRfZXF1YWxzKGVyciwgZXJyb3IpOworICAgICAgICAgICAgICAgIHRlc3QxLmRvbmUoKTsK
KyAgICAgICAgICAgIH0pCisgICAgICAgICk7CisgICAgfSk7CisKKyAgICB2YXIgdGVzdDIgPSBh
c3luY190ZXN0KCdjYW5jZWwoKSBzaG91bGQgcmV0dXJuIGEgZGlzdGluY3QgcmVqZWN0ZWQgcHJv
bWlzZSBlYWNoIHRpbWUnKTsKKyAgICB0ZXN0Mi5zdGVwKGZ1bmN0aW9uKCkgeworICAgICAgICB2
YXIgcnMgPSBmYWN0b3J5KCk7CiAgICAgICAgIHZhciBwcm9taXNlc0NvdW50ID0gMDsKICAgICAg
ICAgdmFyIGFsbENoZWNrZWQgPSBmYWxzZTsKIAogICAgICAgICB2YXIgY2FuY2VsUHJvbWlzZTEg
PSBycy5jYW5jZWwoKTsKICAgICAgICAgdmFyIGNhbmNlbFByb21pc2UyID0gcnMuY2FuY2VsKCk7
CiAKLSAgICAgICAgY2FuY2VsUHJvbWlzZTEuY2F0Y2godGVzdDEuc3RlcF9mdW5jKGZ1bmN0aW9u
KGUpIHsKKyAgICAgICAgY2FuY2VsUHJvbWlzZTEuY2F0Y2godGVzdDIuc3RlcF9mdW5jKGZ1bmN0
aW9uKGUpIHsKICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoZSwgZXJyb3IsICdmaXJzdCBjYW5j
ZWwoKSBjYWxsIHNob3VsZCByZWplY3Qgd2l0aCB0aGUgZXJyb3InKTsKICAgICAgICAgICAgICsr
cHJvbWlzZXNDb3VudDsKICAgICAgICAgfSkpOwotICAgICAgICBjYW5jZWxQcm9taXNlMi5jYXRj
aCh0ZXN0MS5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkgeworICAgICAgICBjYW5jZWxQcm9taXNlMi5j
YXRjaCh0ZXN0Mi5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgYXNzZXJ0X2Vx
dWFscyhlLCBlcnJvciwgJ3NlY29uZCBjYW5jZWwoKSBjYWxsIHNob3VsZCByZWplY3Qgd2l0aCB0
aGUgZXJyb3InKTsKICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoKytwcm9taXNlc0NvdW50LCAy
KTsKICAgICAgICAgICAgIGFzc2VydF90cnVlKGFsbENoZWNrZWQpOwotICAgICAgICAgICAgdGVz
dDEuZG9uZSgpOworICAgICAgICAgICAgdGVzdDIuZG9uZSgpOwogICAgICAgICB9KSk7CiAgICAg
ICAgIGFzc2VydF9ub3RfZXF1YWxzKGNhbmNlbFByb21pc2UxLCBjYW5jZWxQcm9taXNlMiwgJ2Nh
bmNlbCgpIGNhbGxzIHNob3VsZCByZXR1cm4gZGlzdGluY3QgcHJvbWlzZXMnKTsKICAgICAgICAg
YWxsQ2hlY2tlZCA9IHRydWU7CiAgICAgfSk7CiAKLSAgICB2YXIgdGVzdDIgPSBhc3luY190ZXN0
KCdyZWFkZXIgY2FuY2VsKCkgc2hvdWxkIHJldHVybiBhIGRpc3RpbmN0IHJlamVjdGVkIHByb21p
c2UgZWFjaCB0aW1lJyk7Ci0gICAgdGVzdDIuc3RlcChmdW5jdGlvbigpIHsKKyAgICB2YXIgdGVz
dDMgPSBhc3luY190ZXN0KCdyZWFkZXIgY2FuY2VsKCkgc2hvdWxkIHJldHVybiBhIGRpc3RpbmN0
IHJlamVjdGVkIHByb21pc2UgZWFjaCB0aW1lJyk7CisgICAgdGVzdDMuc3RlcChmdW5jdGlvbigp
IHsKICAgICAgICAgdmFyIHJzID0gZmFjdG9yeSgpOwogICAgICAgICB2YXIgcmVhZGVyID0gcnMu
Z2V0UmVhZGVyKCk7CiAgICAgICAgIHZhciBwcm9taXNlc0NvdW50ID0gMDsKQEAgLTEzNCwxNSAr
MTc0LDE1IEBAIGZ1bmN0aW9uIHRlbXBsYXRlZFJTRXJyb3JlZFN5bmNPbmx5KGxhYmVsLCBmYWN0
b3J5LCBlcnJvcikgewogICAgICAgICB2YXIgY2FuY2VsUHJvbWlzZTEgPSByZWFkZXIuY2FuY2Vs
KCk7CiAgICAgICAgIHZhciBjYW5jZWxQcm9taXNlMiA9IHJlYWRlci5jYW5jZWwoKTsKIAotICAg
ICAgICBjYW5jZWxQcm9taXNlMS5jYXRjaCh0ZXN0Mi5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkgewor
ICAgICAgICBjYW5jZWxQcm9taXNlMS5jYXRjaCh0ZXN0My5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkg
ewogICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhlLCBlcnJvciwgJ2ZpcnN0IGNhbmNlbCgpIGNh
bGwgc2hvdWxkIHJlamVjdCB3aXRoIHRoZSBlcnJvcicpOwogICAgICAgICAgICAgKytwcm9taXNl
c0NvdW50OwogICAgICAgICB9KSk7Ci0gICAgICAgIGNhbmNlbFByb21pc2UyLmNhdGNoKHRlc3Qy
LnN0ZXBfZnVuYyhmdW5jdGlvbihlKSB7CisgICAgICAgIGNhbmNlbFByb21pc2UyLmNhdGNoKHRl
c3QzLnN0ZXBfZnVuYyhmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGUs
IGVycm9yLCAnc2Vjb25kIGNhbmNlbCgpIGNhbGwgc2hvdWxkIHJlamVjdCB3aXRoIHRoZSBlcnJv
cicpOwogICAgICAgICAgICAgYXNzZXJ0X2VxdWFscygrK3Byb21pc2VzQ291bnQsIDIpOwogICAg
ICAgICAgICAgYXNzZXJ0X3RydWUoYWxsQ2hlY2tlZCk7Ci0gICAgICAgICAgICB0ZXN0Mi5kb25l
KCk7CisgICAgICAgICAgICB0ZXN0My5kb25lKCk7CiAgICAgICAgIH0pKTsKICAgICAgICAgYXNz
ZXJ0X25vdF9lcXVhbHMoY2FuY2VsUHJvbWlzZTEsIGNhbmNlbFByb21pc2UyLCAnY2FuY2VsKCkg
Y2FsbHMgc2hvdWxkIHJldHVybiBkaXN0aW5jdCBwcm9taXNlcycpOwogICAgICAgICBhbGxDaGVj
a2VkID0gdHJ1ZTsKQEAgLTMyNywyMiArMzY3LDUxIEBAIGZ1bmN0aW9uIHRlbXBsYXRlZFJTQ2xv
c2VkUmVhZGVyKGxhYmVsLCBmYWN0b3J5KSB7CiAgICAgICAgICk7CiAgICAgfSk7CiAKLSAgICB2
YXIgdGVzdDIgPSBhc3luY190ZXN0KCdjbG9zZWQgc2hvdWxkIGZ1bGZpbGwgd2l0aCB1bmRlZmlu
ZWQnKTsKKyAgICB2YXIgdGVzdDIgPSBhc3luY190ZXN0KCdyZWFkKCkgbXVsdGlwbGUgdGltZXMg
c2hvdWxkIGZ1bGZpbGwgd2l0aCB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfScpOwog
ICAgIHRlc3QyLnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgICAgIHZhciB7IHJlYWRlciB9ID0gZmFj
dG9yeSgpOworICAgICAgICB2YXIgcmVhZENvdW50ID0gMDsKIAotICAgICAgICByZWFkZXIuY2xv
c2VkLnRoZW4oCisgICAgICAgIHJlYWRlci5yZWFkKCkudGhlbigKICAgICAgICAgICAgIHRlc3Qy
LnN0ZXBfZnVuYyhmdW5jdGlvbih2KSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh2
LCB1bmRlZmluZWQsICdyZWFkZXIgY2xvc2VkIHNob3VsZCBmdWxmaWxsIHdpdGggdW5kZWZpbmVk
Jyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0X29iamVjdF9lcXVhbHModiwgeyB2YWx1ZTogdW5k
ZWZpbmVkLCBkb25lOiB0cnVlIH0sICdyZWFkKCkgc2hvdWxkIGZ1bGZpbGwgY29ycmVjdGx5Jyk7
CisgICAgICAgICAgICAgICAgKytyZWFkQ291bnQ7CisgICAgICAgICAgICB9KSwKKyAgICAgICAg
ICAgIHRlc3QyLnN0ZXBfZnVuYyhmdW5jdGlvbigpIHsgYXNzZXJ0X3VucmVhY2hlZCgncmVhZCgp
IHNob3VsZCBub3QgcmV0dXJuIGEgcmVqZWN0ZWQgcHJvbWlzZScpOyB9KQorICAgICAgICApOwor
ICAgICAgICByZWFkZXIucmVhZCgpLnRoZW4oCisgICAgICAgICAgICB0ZXN0Mi5zdGVwX2Z1bmMo
ZnVuY3Rpb24odikgeworICAgICAgICAgICAgICAgIGFzc2VydF9vYmplY3RfZXF1YWxzKHYsIHsg
dmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9LCAncmVhZCgpIHNob3VsZCBmdWxmaWxsIGNv
cnJlY3RseScpOworICAgICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoKytyZWFkQ291bnQsIDIp
OwogICAgICAgICAgICAgICAgIHRlc3QyLmRvbmUoKTsKICAgICAgICAgICAgIH0pLAotICAgICAg
ICAgICAgdGVzdDIuc3RlcF9mdW5jKGZ1bmN0aW9uKCkgeyBhc3NlcnRfdW5yZWFjaGVkKCdyZWFk
ZXIgY2xvc2VkIHNob3VsZCBub3QgcmVqZWN0Jyk7IH0pCisgICAgICAgICAgICB0ZXN0Mi5zdGVw
X2Z1bmMoZnVuY3Rpb24oKSB7IGFzc2VydF91bnJlYWNoZWQoJ3JlYWQoKSBzaG91bGQgbm90IHJl
dHVybiBhIHJlamVjdGVkIHByb21pc2UnKTsgfSkKICAgICAgICAgKTsKICAgICB9KTsKIAotICAg
IHZhciB0ZXN0MyA9IGFzeW5jX3Rlc3QoJ2NhbmNlbCgpIHNob3VsZCByZXR1cm4gYSBkaXN0aW5j
dCBmdWxmaWxsZWQgcHJvbWlzZSBlYWNoIHRpbWUnKTsKKyAgICB2YXIgdGVzdDMgPSBhc3luY190
ZXN0KCdyZWFkKCkgc2hvdWxkIHdvcmsgd2hlbiB1c2VkIHdpdGhpbiBhbm90aGVyIHJlYWQoKSBm
dWxmaWxsIGNhbGxiYWNrJyk7CiAgICAgdGVzdDMuc3RlcChmdW5jdGlvbigpIHsKICAgICAgICAg
dmFyIHsgcmVhZGVyIH0gPSBmYWN0b3J5KCk7CisKKyAgICAgICAgcmVhZGVyLnJlYWQoKS50aGVu
KHRlc3QzLnN0ZXBfZnVuYyhmdW5jdGlvbigpIHsgcmVhZGVyLnJlYWQoKS50aGVuKHRlc3QzLnN0
ZXBfZnVuYyhmdW5jdGlvbigpIHsgdGVzdDMuZG9uZSgncmVhZCgpIHNob3VsZCBmdWxmaWxsJyk7
IH0pKTsgfSkpOworICAgIH0pOworCisgICAgdmFyIHRlc3Q0ID0gYXN5bmNfdGVzdCgnY2xvc2Vk
IHNob3VsZCBmdWxmaWxsIHdpdGggdW5kZWZpbmVkJyk7CisgICAgdGVzdDQuc3RlcChmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIHsgcmVhZGVyIH0gPSBmYWN0b3J5KCk7CisKKyAgICAgICAgcmVh
ZGVyLmNsb3NlZC50aGVuKAorICAgICAgICAgICAgdGVzdDQuc3RlcF9mdW5jKGZ1bmN0aW9uKHYp
IHsKKyAgICAgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKHYsIHVuZGVmaW5lZCwgJ3JlYWRlciBj
bG9zZWQgc2hvdWxkIGZ1bGZpbGwgd2l0aCB1bmRlZmluZWQnKTsKKyAgICAgICAgICAgICAgICB0
ZXN0NC5kb25lKCk7CisgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgIHRlc3Q0LnN0ZXBfZnVu
YyhmdW5jdGlvbigpIHsgYXNzZXJ0X3VucmVhY2hlZCgncmVhZGVyIGNsb3NlZCBzaG91bGQgbm90
IHJlamVjdCcpOyB9KQorICAgICAgICApOworICAgIH0pOworCisgICAgdmFyIHRlc3Q1ID0gYXN5
bmNfdGVzdCgnY2FuY2VsKCkgc2hvdWxkIHJldHVybiBhIGRpc3RpbmN0IGZ1bGZpbGxlZCBwcm9t
aXNlIGVhY2ggdGltZScpOworICAgIHRlc3Q1LnN0ZXAoZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciB7IHJlYWRlciB9ID0gZmFjdG9yeSgpOwogICAgICAgICB2YXIgcHJvbWlzZUNvdW50ID0gMDsK
ICAgICAgICAgdmFyIGFsbENoZWNrZWQgPSBmYWxzZTsKIApAQCAtMzUwLDE1ICs0MTksMTUgQEAg
ZnVuY3Rpb24gdGVtcGxhdGVkUlNDbG9zZWRSZWFkZXIobGFiZWwsIGZhY3RvcnkpIHsKICAgICAg
ICAgdmFyIGNhbmNlbFByb21pc2UyID0gcmVhZGVyLmNhbmNlbCgpOwogICAgICAgICB2YXIgY2xv
c2VkUmVhZGVyUHJvbWlzZSA9IHJlYWRlci5jbG9zZWQ7CiAKLSAgICAgICAgY2FuY2VsUHJvbWlz
ZTEudGhlbih0ZXN0My5zdGVwX2Z1bmMoZnVuY3Rpb24odikgeworICAgICAgICBjYW5jZWxQcm9t
aXNlMS50aGVuKHRlc3Q1LnN0ZXBfZnVuYyhmdW5jdGlvbih2KSB7CiAgICAgICAgICAgICBhc3Nl
cnRfZXF1YWxzKHYsIHVuZGVmaW5lZCwgJ2ZpcnN0IGNhbmNlbCgpIGNhbGwgc2hvdWxkIGZ1bGZp
bGwgd2l0aCB1bmRlZmluZWQnKTsKICAgICAgICAgICAgICsrcHJvbWlzZUNvdW50OwogICAgICAg
ICB9KSk7Ci0gICAgICAgIGNhbmNlbFByb21pc2UyLnRoZW4odGVzdDMuc3RlcF9mdW5jKGZ1bmN0
aW9uKHYpIHsKKyAgICAgICAgY2FuY2VsUHJvbWlzZTIudGhlbih0ZXN0NS5zdGVwX2Z1bmMoZnVu
Y3Rpb24odikgewogICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh2LCB1bmRlZmluZWQsICdzZWNv
bmQgY2FuY2VsKCkgY2FsbCBzaG91bGQgZnVsZmlsbCB3aXRoIHVuZGVmaW5lZCcpOwogICAgICAg
ICAgICAgYXNzZXJ0X2VxdWFscygrK3Byb21pc2VDb3VudCwgMik7CiAgICAgICAgICAgICBhc3Nl
cnRfdHJ1ZShhbGxDaGVja2VkKTsKLSAgICAgICAgICAgIHRlc3QzLmRvbmUoKTsKKyAgICAgICAg
ICAgIHRlc3Q1LmRvbmUoKTsKICAgICAgICAgfSkpOwogICAgICAgICBhc3NlcnRfbm90X2VxdWFs
cyhjYW5jZWxQcm9taXNlMSwgY2FuY2VsUHJvbWlzZTIsICdjYW5jZWwoKSBjYWxscyBzaG91bGQg
cmV0dXJuIGRpc3RpbmN0IHByb21pc2VzJyk7CiAgICAgICAgIGFzc2VydF9ub3RfZXF1YWxzKGNh
bmNlbFByb21pc2UxLCBjbG9zZWRSZWFkZXJQcm9taXNlLCAnY2FuY2VsKCkgcHJvbWlzZSAxIHNo
b3VsZCBiZSBkaXN0aW5jdCBmcm9tIHJlYWRlci5jbG9zZWQnKTsKQEAgLTYwNiw3ICs2NzUsMTkg
QEAgdGVtcGxhdGVkUlNDbG9zZWQoJ1JlYWRhYmxlU3RyZWFtIChjbG9zZWQgdmlhIGNhbGwgaW4g
c3RhcnQpJywgZnVuY3Rpb24oKSB7CiAgICAgfSk7CiB9KTsKIAotdGVtcGxhdGVkUlNDbG9zZWRS
ZWFkZXIoJ1JlYWRhYmxlU3RyZWFtIChjbG9zZWQgdmlhIGNhbGwgaW4gc3RhcnQpIHJlYWRlcics
IGZ1bmN0aW9uKCkgewordGVtcGxhdGVkUlNDbG9zZWRSZWFkZXIoJ1JlYWRhYmxlU3RyZWFtIHJl
YWRlciAoY2xvc2VkIGJlZm9yZSBnZXR0aW5nIHJlYWRlciknLCBmdW5jdGlvbigpIHsKKyAgICB2
YXIgY29udHJvbGxlcjsKKyAgICB2YXIgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHsKKyAg
ICAgICAgc3RhcnQ6IGZ1bmN0aW9uKGMpIHsKKyAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBjOwor
ICAgICAgICB9CisgICAgfSk7CisgICAgY29udHJvbGxlci5jbG9zZSgpOworICAgIHZhciByZXN1
bHQgPSBzdHJlYW1BbmREZWZhdWx0UmVhZGVyKHN0cmVhbSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30pOworCit0ZW1wbGF0ZWRSU0Nsb3NlZFJlYWRlcignUmVhZGFibGVTdHJlYW0gcmVhZGVyIChj
bG9zZWQgYWZ0ZXIgZ2V0dGluZyByZWFkZXIpJywgZnVuY3Rpb24oKSB7CiAgICAgdmFyIGNvbnRy
b2xsZXI7CiAgICAgdmFyIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7CiAgICAgICAgIHN0
YXJ0OiBmdW5jdGlvbihjKSB7CkBAIC02MjQsNyArNzA1LDcgQEAgdGVtcGxhdGVkUlNDbG9zZWQo
J1JlYWRhYmxlU3RyZWFtIChjbG9zZWQgdmlhIGNhbmNlbCknLCBmdW5jdGlvbigpIHsKICAgICBy
ZXR1cm4gc3RyZWFtOwogfSk7CiAKLXRlbXBsYXRlZFJTQ2xvc2VkUmVhZGVyKCdSZWFkYWJsZVN0
cmVhbSAoY2xvc2VkIHZpYSBjYW5jZWwpIHJlYWRlcicsIGZ1bmN0aW9uKCkgewordGVtcGxhdGVk
UlNDbG9zZWRSZWFkZXIoJ1JlYWRhYmxlU3RyZWFtIHJlYWRlciAoY2xvc2VkIHZpYSBjYW5jZWwg
YWZ0ZXIgZ2V0dGluZyByZWFkZXIpJywgZnVuY3Rpb24oKSB7CiAgICAgdmFyIHN0cmVhbSA9IG5l
dyBSZWFkYWJsZVN0cmVhbSgpOwogICAgIHZhciByZXN1bHQgPSBzdHJlYW1BbmREZWZhdWx0UmVh
ZGVyKHN0cmVhbSk7CiAgICAgcmVzdWx0LnJlYWRlci5jYW5jZWwoKTsKQEAgLTY2OSw2ICs3NTAs
MjggQEAgdGVtcGxhdGVkUlNFcnJvcmVkUmVhZGVyKCdSZWFkYWJsZVN0cmVhbSAoZXJyb3JlZCB2
aWEgcmV0dXJuaW5nIGEgcmVqZWN0ZWQgcHJvbWkKICAgICB0aGVFcnJvcgogKTsKIAordGVtcGxh
dGVkUlNFcnJvcmVkUmVhZGVyKCdSZWFkYWJsZVN0cmVhbSByZWFkZXIgKGVycm9yZWQgYmVmb3Jl
IGdldHRpbmcgcmVhZGVyKScsIGZ1bmN0aW9uKCkgeworICAgIHZhciBjb250cm9sbGVyOworICAg
IHZhciBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oeworICAgICAgICBzdGFydDogZnVuY3Rp
b24oYykgeworICAgICAgICAgICAgY29udHJvbGxlciA9IGM7CisgICAgICAgIH0KKyAgICB9KTsK
KyAgICBjb250cm9sbGVyLmVycm9yKHRoZUVycm9yKTsKKyAgICByZXR1cm4gc3RyZWFtQW5kRGVm
YXVsdFJlYWRlcihzdHJlYW0pOworfSwgdGhlRXJyb3IpOworCit0ZW1wbGF0ZWRSU0Vycm9yZWRS
ZWFkZXIoJ1JlYWRhYmxlU3RyZWFtIHJlYWRlciAoZXJyb3JlZCBhZnRlciBnZXR0aW5nIHJlYWRl
ciknLCBmdW5jdGlvbigpIHsKKyAgICB2YXIgY29udHJvbGxlcjsKKyAgICB2YXIgcmVzdWx0ID0g
c3RyZWFtQW5kRGVmYXVsdFJlYWRlcihuZXcgUmVhZGFibGVTdHJlYW0oeworICAgICAgICBzdGFy
dDogZnVuY3Rpb24oYykgeworICAgICAgICAgICAgY29udHJvbGxlciA9IGM7CisgICAgICAgIH0K
KyAgICB9KSk7CisgICAgY29udHJvbGxlci5lcnJvcih0aGVFcnJvcik7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30sIHRoZUVycm9yKTsKKwogdmFyIGNodW5rcyA9IFsnYScsICdiJ107CiAKIHRlbXBs
YXRlZFJTVHdvQ2h1bmtzT3BlblJlYWRlcignUmVhZGFibGVTdHJlYW0gKHR3byBjaHVua3MgZW5x
dWV1ZWQsIHN0aWxsIG9wZW4pIHJlYWRlcicsIGZ1bmN0aW9uKCkgewpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFt
Lmh0bWwgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFk
YWJsZS1zdHJlYW0uaHRtbAppbmRleCAyYWQwMmE0Li42ODk3MzQwIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0u
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9y
ZWFkYWJsZS1zdHJlYW0uaHRtbApAQCAtMiw2ICsyLDcgQEAKIDxzY3JpcHQgc3JjPScuLi8uLi9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMnPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Jy4uLy4uL3Jl
c291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyc+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0ncmVz
b3VyY2VzL3N0cmVhbXMtdXRpbHMuanMnPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Jy4uLy4uL3Jl
c291cmNlcy9nYy5qcyc+PC9zY3JpcHQ+CiA8c2NyaXB0PgogdGVzdChmdW5jdGlvbigpIHsKICAg
ICBuZXcgUmVhZGFibGVTdHJlYW0oKTsgLy8gUmVhZGFibGVTdHJlYW0gY29uc3RydWN0ZWQgd2l0
aCBubyBwYXJhbWV0ZXJzLgpAQCAtMjQwLDE1ICsyNDEsMTUgQEAgdGVzdDUuc3RlcChmdW5jdGlv
bigpIHsKIAogICAgIHJlYWRlci5jbG9zZWQuY2F0Y2godGVzdDUuc3RlcF9mdW5jKGZ1bmN0aW9u
KGUpIHsKICAgICAgICAgY2xvc2VkID0gdHJ1ZTsKLSAgICAgICAgYXNzZXJ0X2ZhbHNlKHJlYWQp
OworICAgICAgICBhc3NlcnRfdHJ1ZShyZWFkKTsKICAgICAgICAgYXNzZXJ0X2VxdWFscyhlLCBl
cnJvciwgJ2Nsb3NlZCBzaG91bGQgcmVqZWN0IHdpdGggdGhlIHRocm93biBlcnJvcicpOworICAg
ICAgICB0ZXN0NS5kb25lKCk7CiAgICAgfSkpOwogCiAgICAgcmVhZGVyLnJlYWQoKS5jYXRjaCh0
ZXN0NS5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkgewogICAgICAgICByZWFkID0gdHJ1ZTsKLSAgICAg
ICAgYXNzZXJ0X3RydWUoY2xvc2VkKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGNsb3NlZCk7CiAg
ICAgICAgIGFzc2VydF9lcXVhbHMoZSwgZXJyb3IsICdyZWFkKCkgc2hvdWxkIHJlamVjdCB3aXRo
IHRoZSB0aHJvd24gZXJyb3InKTsKLSAgICAgICAgdGVzdDUuZG9uZSgpOwogICAgIH0pKTsKIH0p
OwogCkBAIC03NjUsMTUgKzc2Niw3NiBAQCB0ZXN0MTkuc3RlcChmdW5jdGlvbigpIHsKICAgICB9
KSk7CiB9KTsKIAotLy8gdmFyIHRlc3QyMCA9IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtIGlu
dGVncmF0aW9uIHRlc3Q6IGFkYXB0aW5nIGFuIGFzeW5jIHB1bGwgc291cmNlJyk7Ci0vLyB0ZXN0
MjAuc3RlcChmdW5jdGlvbigpIHsKLS8vICAgICB2YXIgcnMgPSBzZXF1ZW50aWFsUmVhZGFibGVT
dHJlYW0oMTAsIHsgYXN5bmM6IHRydWUgfSk7Cit2YXIgdGVzdDIwID0gYXN5bmNfdGVzdCgnUmVh
ZGFibGVTdHJlYW0gaW50ZWdyYXRpb24gdGVzdDogYWRhcHRpbmcgYW4gYXN5bmMgcHVsbCBzb3Vy
Y2UnKTsKK3Rlc3QyMC5zdGVwKGZ1bmN0aW9uKCkgeworICAgIHZhciBycyA9IHNlcXVlbnRpYWxS
ZWFkYWJsZVN0cmVhbSgxMCwgeyBhc3luYzogdHJ1ZSB9KTsKKworICAgIHJlYWRhYmxlU3RyZWFt
VG9BcnJheShycykudGhlbih0ZXN0MjAuc3RlcF9mdW5jKGZ1bmN0aW9uKGNodW5rcykgeworICAg
ICAgICBhc3NlcnRfdHJ1ZShycy5zb3VyY2UuY2xvc2VkLCAnc291cmNlIHNob3VsZCBiZSBjbG9z
ZWQgYWZ0ZXIgYWxsIGNodW5rcyBhcmUgcmVhZCcpOworICAgICAgICBhc3NlcnRfYXJyYXlfZXF1
YWxzKGNodW5rcywgWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXSwgJ3RoZSBleHBlY3Rl
ZCAxMCBjaHVua3Mgc2hvdWxkIGJlIHJlYWQnKTsKKworICAgICAgICB0ZXN0MjAuZG9uZSgpOwor
ICAgIH0pKTsKK30pOworCitmdW5jdGlvbiBnYXJiYWdlQ29sbGVjdEFuZERvKHRhc2spCit7Cisg
ICAgdmFyIHRpbWVvdXQgPSA1MDsKKyAgICBpZiAod2luZG93LkdDQ29udHJvbGxlcikKKyAgICAg
ICAgd2luZG93LkdDQ29udHJvbGxlci5jb2xsZWN0KCk7CisgICAgZWxzZSBpZiAod2luZG93Lmdj
KQorICAgICAgICB3aW5kb3cuZ2MoKTsKKyAgICBlbHNlCisgICAgICAgIHRpbWVvdXQgPSA0MDA7
CisgICAgc2V0VGltZW91dCh0YXNrLCB0aW1lb3V0KTsKK30KKwordmFyIHRlc3QyMSA9IGFzeW5j
X3Rlc3QoJ1JlYWRhYmxlU3RyZWFtQ29udHJvbGxlciBtZXRob2RzIHNob3VsZCBjb250aW51ZSB3
b3JraW5nIHByb3Blcmx5IHdoZW4gc2NyaXB0cyBsb3NlIHRoZWlyIHJlZmVyZW5jZSB0byB0aGUg
cmVhZGFibGUgc3RyZWFtJyk7Cit0ZXN0MjEuc3RlcChmdW5jdGlvbigpIHsKKyAgICB2YXIgY29u
dHJvbGxlcjsKKyAgICBuZXcgUmVhZGFibGVTdHJlYW0oeworICAgICAgICBzdGFydDogZnVuY3Rp
b24oYykgeworICAgICAgICAgICAgY29udHJvbGxlciA9IGM7CisgICAgICAgIH0KKyAgICB9KTsK
IAotLy8gICAgIHJlYWRhYmxlU3RyZWFtVG9BcnJheShycykudGhlbih0ZXN0MjAuc3RlcF9mdW5j
KGZ1bmN0aW9uKGNodW5rcykgewotLy8gICAgICAgICBhc3NlcnRfdHJ1ZShycy5zb3VyY2UuY2xv
c2VkLCAnc291cmNlIHNob3VsZCBiZSBjbG9zZWQgYWZ0ZXIgYWxsIGNodW5rcyBhcmUgcmVhZCcp
OwotLy8gICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKGNodW5rcywgWzEsIDIsIDMsIDQsIDUs
IDYsIDcsIDgsIDksIDEwXSwgJ3RoZSBleHBlY3RlZCAxMCBjaHVua3Mgc2hvdWxkIGJlIHJlYWQn
KTsKKyAgICBnYXJiYWdlQ29sbGVjdEFuZERvKHRlc3QyMS5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7
CisgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTsKKyAgICAgICAgYXNzZXJ0X3Rocm93cyhuZXcg
VHlwZUVycm9yKCksIGZ1bmN0aW9uKCkgeyBjb250cm9sbGVyLmNsb3NlKCk7IH0sICdjbG9zZSBz
aG91bGQgdGhyb3cgYSBUeXBlRXJyb3IgdGhlIHNlY29uZCB0aW1lJyk7CisgICAgICAgIGFzc2Vy
dF90aHJvd3MobmV3IFR5cGVFcnJvcigpLCBmdW5jdGlvbigpIHsgY29udHJvbGxlci5lcnJvcigp
OyB9KSwgJ2Vycm9yIHNob3VsZCB0aHJvdyBhIFR5cGVFcnJvciBvbiBhIGNsb3NlZCBzdHJlYW0n
OworICAgICAgICB0ZXN0MjEuZG9uZSgpOworICAgIH0pKTsKK30pOwogCi0vLyAgICAgICAgIHRl
c3QyMC5kb25lKCk7Ci0vLyAgICAgfSkpOwotLy8gfSk7Cit2YXIgdGVzdDIyID0gYXN5bmNfdGVz
dCgnUmVhZGFibGVTdHJlYW0gY2xvc2VkIHByb21pc2Ugc2hvdWxkIGZ1bGZpbGwgZXZlbiBpZiB0
aGUgc3RyZWFtIGFuZCByZWFkZXIgSlMgcmVmZXJlbmNlcyBhcmUgbG9zdCcpOwordGVzdDIyLnN0
ZXAoZnVuY3Rpb24oKSB7CisgICAgdmFyIGNvbnRyb2xsZXI7CisgICAgbmV3IFJlYWRhYmxlU3Ry
ZWFtKHsKKyAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uKGMpIHsKKyAgICAgICAgICAgIGNvbnRyb2xs
ZXIgPSBjOworICAgICAgICB9CisgICAgfSkuZ2V0UmVhZGVyKCkuY2xvc2VkLnRoZW4odGVzdDIy
LnN0ZXBfZnVuYyhmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdDIyLmRvbmUoJ2Nsb3NlZCBwcm9t
aXNlIHNob3VsZCBiZSBmdWxmaWxsZWQnKTsKKyAgICB9KSk7CisKKyAgICBnYXJiYWdlQ29sbGVj
dEFuZERvKHRlc3QyMi5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7CisgICAgICAgIGNvbnRyb2xsZXIu
Y2xvc2UoKTsKKyAgICB9KSk7Cit9KTsKKwordmFyIHRlc3QyMyA9IGFzeW5jX3Rlc3QoJ1JlYWRh
YmxlU3RyZWFtIGNsb3NlZCBwcm9taXNlIHNob3VsZCByZWplY3QgZXZlbiBpZiBzdHJlYW0gYW5k
IHJlYWRlciBKUyByZWZlcmVuY2VzIGFyZSBsb3N0Jyk7Cit0ZXN0MjMuc3RlcChmdW5jdGlvbigp
IHsKKyAgICB2YXIgY29udHJvbGxlcjsKKyAgICBuZXcgUmVhZGFibGVTdHJlYW0oeworICAgICAg
ICBzdGFydDogZnVuY3Rpb24oYykgeworICAgICAgICAgICAgY29udHJvbGxlciA9IGM7CisgICAg
ICAgIH0KKyAgICB9KS5nZXRSZWFkZXIoKS5jbG9zZWQuY2F0Y2godGVzdDIzLnN0ZXBfZnVuYyhm
dW5jdGlvbigpIHsKKyAgICAgICAgdGVzdDIzLmRvbmUoJ2Nsb3NlZCBwcm9taXNlIHNob3VsZCBi
ZSByZWplY3RlZCcpOworICAgIH0pKTsKKworICAgIGdhcmJhZ2VDb2xsZWN0QW5kRG8odGVzdDIz
LnN0ZXBfZnVuYyhmdW5jdGlvbigpIHsKKyAgICAgICAgY29udHJvbGxlci5lcnJvcigpOworICAg
IH0pKTsKK30pOwogPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTM4YWYzNy4uODA4YWM5MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE1LTA4LTEzICBYYWJpZXIgUm9kcmlndWV6IENh
bHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1N0cmVhbXMgQVBJXSBVcGRh
dGUgaW1wbGVtZW50YXRpb24gYW5kIHRlc3RzIHdpdGggdGhlIGxhdGVzdCBzcGVjCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc5NzgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHaXZlbiB0aGUgbGF0ZXN0
IGNoYW5nZXMgaW4gdGhlIHNwZWMgd2UgbmVlZGVkIHRvIGNoYW5nZSBzb21lIHRoaW5nczoKKyAg
ICAgICAgLSBNb3ZlIHRoZSByZWFkIHBlbmRpbmcgcmVxdWVzdHMgdG8gdGhlIHJlYWRlciBiZWNh
dXNlIHRoZXkgbmVlZCB0byBiZSByZXNvbHZlZCB3aGVuIHRoZSByZWFkZXIgaXMgY2xvc2VkIG9y
CisgICAgICAgIGVycm9yZWQuCisgICAgICAgIC0gTW9kaWZ5IHRoZSB3YXkgYSBzdHJlYW0gaXMg
Y2xvc2VkIGFuZCB0aGUgcmVhZGVyIGlzIHJlbGVhc2VkLiBSZWFkZXJzIHRha2UgY2FyZSBub3cg
b2YgdGhlaXIgb3duIHJlYWQgcmVxdWVzdHMKKyAgICAgICAgYW5kIGNsb3NlZCBhbmQgcmVhZCBw
cm9taXNlcyBhcmUgcmVzb2x2ZWQgYW5kIGNsZWFyZWQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgKGZp
cnN0IHJlYWQsIHRoZW4gY2xvc2VkKS4KKworICAgICAgICBUaGVyZSBhcmUgc3VidGFudGlhbCBj
aGFuZ2VzIG9uIHRoZSB0ZXN0cyBtYWlubHkgY29taW5nIGZyb20gdGhlIHNwZWMuCisKKyAgICAg
ICAgKiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVhZGFibGVTdHJlYW06OmNsZWFyQ2FsbGJhY2tzKTogV2UgZG8gbm90IGVtcHR5IHRoZSBy
ZWFkIHBlbmRpbmcgcXVldWUgYmVjYXVzZSBpdCBpcyBub3QgaW4gdGhlCisgICAgICAgIG9iamVj
dCBhbnltb3JlLgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OmNsb3NlKTogQ2Fs
bCBjbG9zZWRSZWFkZXIgaW5zdGVhZCBvZiByZWxlYXNlUmVhZGVyLgorICAgICAgICAoV2ViQ29y
ZTo6UmVhZGFibGVTdHJlYW06OmNsb3NlUmVhZGVyKTogSW1wbGVtZW50ZWQgZm9sbG93aW5nIHRo
ZSBzcGVjIHRvIHJlc29sdmUgdGhlIHJlYWQgcGVuZGluZyByZXF1ZXN0cyBhdAorICAgICAgICB0
aGUgcmVhZGVyLCByZWxlYXNlIGl0IGFuZCByZXNvbHZlIHRoZSBjbG9zZWQgcHJvbWlzZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpyZWxlYXNlUmVhZGVyKTogQ2hhbmdlZCB0
byBvbmx5IHJlbGVhc2UgdGhlIHJlYWRlciBub3cuCisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJs
ZVN0cmVhbTo6Y2hhbmdlU3RhdGVUb0Vycm9yZWQpOiBGb2xsb3dlZCB0aGUgc3BlYyB0byByZWpl
Y3QgdGhlIHJlYWQgcGVuZGluZyByZXF1ZXN0cyBpbiB0aGUKKyAgICAgICAgcmVhZGVyLCByZWxl
YXNlIGl0LCBzZXQgZXJyb3JlZCBzdGF0ZSBhbmQgcmVqZWN0IHRoZSBjbG9zZWQgcHJvbWlzZQor
ICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnB1bGwpOiBVc2UgYSBtZXRob2QgdG8g
Y2hlY2sgZm9yIHJlYWQgcGVuZGluZyByZXF1ZXN0cyBzaW5jZSB0aGUgcXVldWUgaXMgZ29uZSBm
cm9tCisgICAgICAgIHRoaXMgb2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJl
YW06OnJlYWQpOiBBcHBlbmQgdGhlIHJlYWQgcmVxdWVzdCB0byB0aGUgcmVhZGVyLgorICAgICAg
ICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnJlc29sdmVSZWFkQ2FsbGJhY2spOiBSZXNvbHZl
IHRoZSByZWFkIGNhbGxiYWNrIGluIHRoZSByZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpSZWFk
YWJsZVN0cmVhbTo6aGFzUmVhZFBlbmRpbmdSZXF1ZXN0cyk6IENoZWNrcyBpZiB0aGVyZSdzIGEg
cmVhZGVyIGFuZCBpZiBpdCBoYXMgcmVhZCBwZW5kaW5nIHJlcXVlc3RzLgorICAgICAgICAqIE1v
ZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFi
bGVTdHJlYW06OmlzQ2xvc2VkKTogQWRkZWQuIENoZWNrcyBmb3IgY2xvc2VkIHN0YXRlLgorICAg
ICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06Omhhc1JlYWRQZW5kaW5nUmVxdWVzdHMpOiBN
b3ZlZCBpbXBsZW1lbnRhdGlvbiB0byBjcHAgZmlsZS4KKyAgICAgICAgKiBNb2R1bGVzL3N0cmVh
bXMvUmVhZGFibGVTdHJlYW1SZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVT
dHJlYW1SZWFkZXI6OmNsb3NlZCk6IEFjY29yZGluZyB0byB0aGUgc3BlYywgZnVsZmlsbCBjbG9z
ZWQgaWYgc3RyZWFtIGlzIGNsb3NlZCBhbmQgcmVqZWN0IGl0CisgICAgICAgIGlmIHN0cmVhbSBp
cyBlcnJvcmVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW1SZWFkZXI6OnJlbGVh
c2VMb2NrKTogQ2hlY2sgZm9yIHJlYWQgcGVuZGluZyByZXF1ZXN0cyBpbiB0aGlzIG9iamVjdCBp
bnN0ZWFkIG9mIHRoZQorICAgICAgICBzdHJlYW0gYW5kIGNsb3NlIHRoZSByZWFkZXIgaW5zdGVh
ZCBvZiByZWxlYXNpbmcgaXQuCisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbVJlYWRl
cjo6cmVzb2x2ZVJlYWRDYWxsYmFjayk6IE1vdmVkIGZyb20gdGhlIHN0cmVhbS4gVGFrZXMgdGhl
IGZpcnN0IHByb21pc2UgZnJvbSB0aGUKKyAgICAgICAgcXVldWUgYW5kIGZ1bGZpbGxzIGl0Lgor
ICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW1SZWFkZXI6OnJlc29sdmVFbmRSZWFkUGVu
ZGluZ1JlcXVlc3RzKTogUmVzb2x2ZSBhcyBlbmQgYWxsIHJlYWQgcGVuZGluZyByZXF1ZXN0cy4K
KyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtUmVhZGVyOjpyZWplY3RSZWFkUGVuZGlu
Z1JlcXVlc3RzKTogUmVqZWN0cyBhbGwgcmVhZCBwZW5kaW5nIHJlcXVlc3RzLgorICAgICAgICAo
V2ViQ29yZTo6UmVhZGFibGVTdHJlYW1SZWFkZXI6OmFwcGVuZFJlYWRQZW5kaW5nUmVxdWVzdCk6
IEFwcGVuZHMgYSByZWFkIHBlbmRpbmcgcmVxdWVzdCB0byB0aGUgcXVldWUuCisgICAgICAgICog
TW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFkYWJsZVN0cmVhbVJlYWRlcjo6aGFzUmVhZFBlbmRpbmdSZXF1ZXN0cyk6IENoZWNrcyBp
ZiB0aGUgcmVhZCBwZW5kaW5nIHF1ZXVlIGlzIGVtcHR5LgorCiAyMDE1LTA4LTEyICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbQ2Fpcm9dIElt
cHJvdmUgaW1hZ2UgcXVhbGl0eSB3aGVuIHVzaW5nIG5ld2VyIHZlcnNpb25zIG9mIGNhaXJvL3Bp
eG1hbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxl
U3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVh
bS5jcHAKaW5kZXggNjlhZjVhMS4uZjllYTNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uY3BwCkBAIC02Nyw3ICs2Nyw2IEBAIFJlYWRh
YmxlU3RyZWFtOjp+UmVhZGFibGVTdHJlYW0oKQogdm9pZCBSZWFkYWJsZVN0cmVhbTo6Y2xlYXJD
YWxsYmFja3MoKQogewogICAgIG1fY2xvc2VkUHJvbWlzZSA9IE51bGxvcHQ7Ci0gICAgbV9yZWFk
UmVxdWVzdHMuY2xlYXIoKTsKIH0KIAogdm9pZCBSZWFkYWJsZVN0cmVhbTo6Y2hhbmdlU3RhdGVU
b0Nsb3NlZCgpCkBAIC04NSwxOCArODQsMjMgQEAgdm9pZCBSZWFkYWJsZVN0cmVhbTo6Y2hhbmdl
U3RhdGVUb0Nsb3NlZCgpCiB2b2lkIFJlYWRhYmxlU3RyZWFtOjpjbG9zZSgpCiB7CiAgICAgbV9z
dGF0ZSA9IFN0YXRlOjpDbG9zZWQ7Ci0gICAgcmVsZWFzZVJlYWRlcigpOworICAgIGNsb3NlUmVh
ZGVyKCk7CiB9CiAKLXZvaWQgUmVhZGFibGVTdHJlYW06OnJlbGVhc2VSZWFkZXIoKQordm9pZCBS
ZWFkYWJsZVN0cmVhbTo6Y2xvc2VSZWFkZXIoKQogeworICAgIGlmIChtX3JlYWRlcikgeworICAg
ICAgICBtX3JlYWRlci0+cmVzb2x2ZUVuZFJlYWRQZW5kaW5nUmVxdWVzdHMoKTsKKyAgICAgICAg
cmVsZWFzZVJlYWRlcigpOworICAgIH0KKwogICAgIGlmIChtX2Nsb3NlZFByb21pc2UpCiAgICAg
ICAgIG1fY2xvc2VkUHJvbWlzZS52YWx1ZSgpLnJlc29sdmUobnVsbHB0cik7Ci0KLSAgICBmb3Ig
KGF1dG8mIHJlcXVlc3QgOiBtX3JlYWRSZXF1ZXN0cykKLSAgICAgICAgcmVxdWVzdC5yZXNvbHZl
RW5kKCk7Ci0KICAgICBjbGVhckNhbGxiYWNrcygpOworfQorCit2b2lkIFJlYWRhYmxlU3RyZWFt
OjpyZWxlYXNlUmVhZGVyKCkKK3sKICAgICBpZiAobV9yZWFkZXIpCiAgICAgICAgIG1fcmVsZWFz
ZWRSZWFkZXJzLmFwcGVuZChXVEY6Om1vdmUobV9yZWFkZXIpKTsKIH0KQEAgLTEwNywxOCArMTEx
LDE4IEBAIHZvaWQgUmVhZGFibGVTdHJlYW06OmNoYW5nZVN0YXRlVG9FcnJvcmVkKCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgY2xlYXJWYWx1ZXMoKTsKLSAgICBtX3N0YXRlID0gU3RhdGU6OkVy
cm9yZWQ7CiAKICAgICBKU0M6OkpTVmFsdWUgZXJyb3IgPSB0aGlzLT5lcnJvcigpOwotICAgIGlm
IChtX2Nsb3NlZFByb21pc2UpCi0gICAgICAgIG1fY2xvc2VkUHJvbWlzZS52YWx1ZSgpLnJlamVj
dChlcnJvcik7CisgICAgaWYgKG1fcmVhZGVyKSB7CisgICAgICAgIG1fcmVhZGVyLT5yZWplY3RS
ZWFkUGVuZGluZ1JlcXVlc3RzKGVycm9yKTsKKyAgICAgICAgcmVsZWFzZVJlYWRlcigpOworICAg
IH0KIAotICAgIGZvciAoYXV0byYgcmVxdWVzdCA6IG1fcmVhZFJlcXVlc3RzKQotICAgICAgICBy
ZXF1ZXN0LnJlamVjdChlcnJvcik7CisgICAgbV9zdGF0ZSA9IFN0YXRlOjpFcnJvcmVkOwogCisg
ICAgaWYgKG1fY2xvc2VkUHJvbWlzZSkKKyAgICAgICAgbV9jbG9zZWRQcm9taXNlLnZhbHVlKCku
cmVqZWN0KGVycm9yKTsKICAgICBjbGVhckNhbGxiYWNrcygpOwotICAgIGlmIChtX3JlYWRlcikK
LSAgICAgICAgcmVsZWFzZVJlYWRlcigpOwogfQogCiB2b2lkIFJlYWRhYmxlU3RyZWFtOjpzdGFy
dCgpCkBAIC0xMzIsNyArMTM2LDcgQEAgdm9pZCBSZWFkYWJsZVN0cmVhbTo6cHVsbCgpCiAgICAg
aWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXRlID09IFN0YXRlOjpDbG9zZWQgfHwgbV9zdGF0ZSA9
PSBTdGF0ZTo6RXJyb3JlZCB8fCBtX2Nsb3NlUmVxdWVzdGVkKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAobV9yZWFkUmVxdWVzdHMuaXNFbXB0eSgpICYmIGhhc0Vub3VnaFZhbHVlcygpKQor
ICAgIGlmICghaGFzUmVhZFBlbmRpbmdSZXF1ZXN0cygpICYmIGhhc0Vub3VnaFZhbHVlcygpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9pc1B1bGxpbmcpIHsKQEAgLTI1OCwxNyArMjYy
LDE3IEBAIHZvaWQgUmVhZGFibGVTdHJlYW06OnJlYWQoUmVhZFByb21pc2UmJiByZWFkUHJvbWlz
ZSkKICAgICAgICAgICAgIGNsb3NlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9y
ZWFkUmVxdWVzdHMuYXBwZW5kKFdURjo6bW92ZShyZWFkUHJvbWlzZSkpOworICAgIEFTU0VSVCht
X3JlYWRlcik7CisgICAgbV9yZWFkZXItPmFwcGVuZFJlYWRQZW5kaW5nUmVxdWVzdChXVEY6Om1v
dmUocmVhZFByb21pc2UpKTsKICAgICBwdWxsKCk7CiB9CiAKIGJvb2wgUmVhZGFibGVTdHJlYW06
OnJlc29sdmVSZWFkQ2FsbGJhY2soSlNDOjpKU1ZhbHVlIHZhbHVlKQogewotICAgIGlmIChtX3Jl
YWRSZXF1ZXN0cy5pc0VtcHR5KCkpCisgICAgaWYgKCFtX3JlYWRlcikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgbV9yZWFkUmVxdWVzdHMudGFrZUZpcnN0KCkucmVzb2x2ZSh2YWx1ZSk7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIG1fcmVhZGVyLT5yZXNvbHZlUmVhZENhbGxi
YWNrKHZhbHVlKTsKIH0KIAogY29uc3QgY2hhciogUmVhZGFibGVTdHJlYW06OmFjdGl2ZURPTU9i
amVjdE5hbWUoKSBjb25zdApAQCAtMjgyLDYgKzI4NiwxMSBAQCBib29sIFJlYWRhYmxlU3RyZWFt
OjpjYW5TdXNwZW5kRm9yUGFnZUNhY2hlKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
K2Jvb2wgUmVhZGFibGVTdHJlYW06Omhhc1JlYWRQZW5kaW5nUmVxdWVzdHMoKSBjb25zdAorewor
ICAgIHJldHVybiAhIW1fcmVhZGVyICYmIG1fcmVhZGVyLT5oYXNSZWFkUGVuZGluZ1JlcXVlc3Rz
KCk7Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFt
cy9SZWFkYWJsZVN0cmVhbS5oCmluZGV4IDRlNzdiYTUuLmU4NjNlYTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oCkBAIC03NiwxMCArNzYs
MTEgQEAgcHVibGljOgogICAgIGJvb2wgbG9ja2VkKCkgY29uc3QgeyByZXR1cm4gISFtX3JlYWRl
cjsgfQogCiAgICAgdm9pZCByZWxlYXNlUmVhZGVyKCk7Ci0gICAgYm9vbCBoYXNSZWFkUGVuZGlu
Z1JlcXVlc3RzKCkgeyByZXR1cm4gIW1fcmVhZFJlcXVlc3RzLmlzRW1wdHkoKTsgfQorICAgIGJv
b2wgaGFzUmVhZFBlbmRpbmdSZXF1ZXN0cygpIGNvbnN0OwogCiAgICAgYm9vbCBpc0Vycm9yZWQo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFN0YXRlOjpFcnJvcmVkOyB9CiAgICAgYm9vbCBp
c1JlYWRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTdGF0ZTo6UmVhZGFibGU7IH0K
KyAgICBib29sIGlzQ2xvc2VkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTdGF0ZTo6Q2xv
c2VkOyB9CiAgICAgYm9vbCBpc0Nsb3NlUmVxdWVzdGVkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9z
ZVJlcXVlc3RlZDsgfQogCiAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWUgZXJyb3IoKSA9IDA7CkBA
IC05MCw2ICs5MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmlzaFB1bGxpbmcoKTsKICAgICB2
b2lkIG5vdGlmeUNhbmNlbFN1Y2NlZWRlZCgpOwogICAgIHZvaWQgbm90aWZ5Q2FuY2VsRmFpbGVk
KCk7CisgICAgdm9pZCBjbG9zZVJlYWRlcigpOwogCiAgICAgdHlwZWRlZiBET01Qcm9taXNlPHN0
ZDo6bnVsbHB0cl90LCBKU0M6OkpTVmFsdWU+IENhbmNlbFByb21pc2U7CiAgICAgdm9pZCBjYW5j
ZWwoSlNDOjpKU1ZhbHVlLCBDYW5jZWxQcm9taXNlJiYsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTEy
OCw4ICsxMzAsNiBAQCBwcml2YXRlOgogICAgIE9wdGlvbmFsPENhbmNlbFByb21pc2U+IG1fY2Fu
Y2VsUHJvbWlzZTsKICAgICBPcHRpb25hbDxDbG9zZWRQcm9taXNlPiBtX2Nsb3NlZFByb21pc2U7
CiAKLSAgICBEZXF1ZTxSZWFkUHJvbWlzZT4gbV9yZWFkUmVxdWVzdHM7Ci0KICAgICBib29sIG1f
aXNTdGFydGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNQdWxsaW5nIHsgZmFsc2UgfTsKICAg
ICBib29sIG1fc2hvdWxkUHVsbEFnYWluIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1SZWFkZXIuY3BwCmluZGV4IDNm
MzdkOTkuLjFlMWZmZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFt
cy9SZWFkYWJsZVN0cmVhbVJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
dHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVyLmNwcApAQCAtNDgsMTAgKzQ4LDE0IEBAIHZvaWQg
UmVhZGFibGVTdHJlYW1SZWFkZXI6OmNhbmNlbChKU0M6OkpTVmFsdWUgcmVhc29uLCBSZWFkYWJs
ZVN0cmVhbTo6Q2FuY2VsUHJvCiAKIHZvaWQgUmVhZGFibGVTdHJlYW1SZWFkZXI6OmNsb3NlZChS
ZWFkYWJsZVN0cmVhbTo6Q2xvc2VkUHJvbWlzZSYmIHByb21pc2UpCiB7Ci0gICAgaWYgKG1fc3Ry
ZWFtLmlzUmVhZGFibGUoKSAmJiBtX3N0cmVhbS5yZWFkZXIoKSAhPSB0aGlzKSB7CisgICAgaWYg
KChtX3N0cmVhbS5pc1JlYWRhYmxlKCkgJiYgbV9zdHJlYW0ucmVhZGVyKCkgIT0gdGhpcykgfHwg
bV9zdHJlYW0uaXNDbG9zZWQoKSkgewogICAgICAgICBwcm9taXNlLnJlc29sdmUobnVsbHB0cik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKG1fc3RyZWFtLmlzRXJyb3JlZCgpKSB7
CisgICAgICAgIHByb21pc2UucmVqZWN0KG1fc3RyZWFtLmVycm9yKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQogICAgIG1fc3RyZWFtLmNsb3NlZChXVEY6Om1vdmUocHJvbWlzZSkpOwogfQog
CkBAIC02OCwxMSArNzIsMzkgQEAgdm9pZCBSZWFkYWJsZVN0cmVhbVJlYWRlcjo6cmVsZWFzZUxv
Y2soRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKG1fc3RyZWFtLnJlYWRlcigpICE9IHRo
aXMpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAobV9zdHJlYW0uaGFzUmVhZFBlbmRpbmdSZXF1
ZXN0cygpKSB7CisgICAgaWYgKGhhc1JlYWRQZW5kaW5nUmVxdWVzdHMoKSkgewogICAgICAgICBl
YyA9IFR5cGVFcnJvcjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX3N0cmVhbS5yZWxl
YXNlUmVhZGVyKCk7CisgICAgbV9zdHJlYW0uY2xvc2VSZWFkZXIoKTsKK30KKworYm9vbCBSZWFk
YWJsZVN0cmVhbVJlYWRlcjo6cmVzb2x2ZVJlYWRDYWxsYmFjayhKU0M6OkpTVmFsdWUgdmFsdWUp
Cit7CisgICAgaWYgKG1fcmVhZFJlcXVlc3RzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgbV9yZWFkUmVxdWVzdHMudGFrZUZpcnN0KCkucmVzb2x2ZSh2YWx1ZSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVhZGFibGVTdHJlYW1SZWFkZXI6OnJlc29sdmVF
bmRSZWFkUGVuZGluZ1JlcXVlc3RzKCkKK3sKKyAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBtX3Jl
YWRSZXF1ZXN0cykKKyAgICAgICAgcmVxdWVzdC5yZXNvbHZlRW5kKCk7CisgICAgbV9yZWFkUmVx
dWVzdHMuY2xlYXIoKTsKK30KKwordm9pZCBSZWFkYWJsZVN0cmVhbVJlYWRlcjo6cmVqZWN0UmVh
ZFBlbmRpbmdSZXF1ZXN0cyhKU0M6OkpTVmFsdWUgZXJyb3IpCit7CisgICAgZm9yIChhdXRvJiBy
ZXF1ZXN0IDogbV9yZWFkUmVxdWVzdHMpCisgICAgICAgIHJlcXVlc3QucmVqZWN0KGVycm9yKTsK
KyAgICBtX3JlYWRSZXF1ZXN0cy5jbGVhcigpOworfQorCit2b2lkIFJlYWRhYmxlU3RyZWFtUmVh
ZGVyOjphcHBlbmRSZWFkUGVuZGluZ1JlcXVlc3QoUmVhZGFibGVTdHJlYW06OlJlYWRQcm9taXNl
JiYgcmVhZFByb21pc2UpCit7CisgICAgbV9yZWFkUmVxdWVzdHMuYXBwZW5kKFdURjo6bW92ZShy
ZWFkUHJvbWlzZSkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3N0cmVhbXMvUmVhZGFibGVTdHJlYW1SZWFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRlci5oCmluZGV4IGI0ZDJmYjUuLmI1ZWQwY2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJl
YWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVh
bVJlYWRlci5oCkBAIC01OCwxMSArNTgsMTggQEAgcHVibGljOgogICAgIHZvaWQgcmVhZChSZWFk
YWJsZVN0cmVhbTo6UmVhZFByb21pc2UmJik7CiAgICAgdm9pZCByZWxlYXNlTG9jayhFeGNlcHRp
b25Db2RlJik7CiAKKyAgICBib29sIHJlc29sdmVSZWFkQ2FsbGJhY2soSlNDOjpKU1ZhbHVlKTsK
KyAgICBib29sIGhhc1JlYWRQZW5kaW5nUmVxdWVzdHMoKSB7IHJldHVybiAhbV9yZWFkUmVxdWVz
dHMuaXNFbXB0eSgpOyB9CisgICAgdm9pZCByZXNvbHZlRW5kUmVhZFBlbmRpbmdSZXF1ZXN0cygp
OworICAgIHZvaWQgcmVqZWN0UmVhZFBlbmRpbmdSZXF1ZXN0cyhKU0M6OkpTVmFsdWUpOworICAg
IHZvaWQgYXBwZW5kUmVhZFBlbmRpbmdSZXF1ZXN0KFJlYWRhYmxlU3RyZWFtOjpSZWFkUHJvbWlz
ZSYmKTsKKwogICAgIHZvaWQgcmVmKCkgeyBtX3N0cmVhbS5yZWYoKTsgfQogICAgIHZvaWQgZGVy
ZWYoKSB7IG1fc3RyZWFtLmRlcmVmKCk7IH0KIAogcHJpdmF0ZToKICAgICBSZWFkYWJsZVN0cmVh
bSYgbV9zdHJlYW07CisgICAgRGVxdWU8UmVhZGFibGVTdHJlYW06OlJlYWRQcm9taXNlPiBtX3Jl
YWRSZXF1ZXN0czsKIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258998</attachid>
            <date>2015-08-14 05:59:16 -0700</date>
            <delta_ts>2015-08-17 02:09:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147978-20150814145856.patch</filename>
            <type>text/plain</type>
            <size>10913</size>
            <attacher name="Xabier Rodríguez Calvar">calvaris</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4MzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTM4YWYzN2IxZGY2Nzgz
NTRlMmViMTJjM2Q4MDVjODdlMmIyYTQyMi4uMmRiZmZmODkyMjdmNDljMmEyYzVjNjBkMWYwZmNl
NTQ1Njg1OGJiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE1LTA4LTE0ICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1N0
cmVhbXMgQVBJXSBVcGRhdGUgaW1wbGVtZW50YXRpb24gd2l0aCB0aGUgbGF0ZXN0IHNwZWMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Nzk3OAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgdGhl
IHdheSB0aGUgcmVhZCBhbmQgY2xvc2VkIHByb21pc2VzIGFyZSByZXNvbHZlZCBhbmQgdGhlIHN0
cmVhbSBpcyByZWxlYXNlZCB3aGVuIGFuIGV2ZW4gY2xvc2VzIG9yCisgICAgICAgIGVycm9ycyB0
aGUgc3RyZWFtLgorCisgICAgICAgIEN1cnJlbnQgdGVzdHMgc3VmZmljZSBhZnRlciBjaGFuZ2lu
ZyB0aGUgb3JkZXIgb2YgdGhlIHByb21pc2UgcmVzb2x1dGlvbiBhY2NvcmRpbmcgdG8gdGhlIG5l
dyBzcGVjLgorCisgICAgICAgICogTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpjbG9zZSk6IENhbGwgY2xvc2VSZWFk
ZXIuCisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbTo6Y2xvc2VSZWFkZXIpOiBSZW5h
bWVkIGZyb20gcmVsZWFzZVJlYWRlci4gQ2hhbmdlZCBob3cgdGhlIHByb21pc2VzIGFyZSByZXNv
bHZlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpjaGFuZ2VTdGF0ZVRvRXJy
b3JlZCk6IENoYW5nZWQgaG93IHRoZSBwcm9taXNlcyBhcmUgcmVzb2x2ZWQgYW5kIG1hbnVhbGx5
IHJlbGVhc2luZworICAgICAgICB0aGUgc3RyZWFtIGluc3RlYWQgb2YgY2FsbGluZyByZWxlYXNl
UmVhZGVyIGFjY29yZGluZyB0byB0aGUgc3BlYy4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxl
U3RyZWFtOjpyZWxlYXNlUmVhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3N0cmVh
bXMvUmVhZGFibGVTdHJlYW0uaDoKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVT
dHJlYW1SZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW1SZWFkZXI6
OnJlbGVhc2VMb2NrKTogQ2FsbCBjbG9zZVJlYWRlciBpbnN0ZWFkIG9mIHJlbGVhc2VSZWFkZXIg
YWNjb3JkaW5nIHRvIHRoZSBzcGVjLgorCiAyMDE1LTA4LTEyICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbQ2Fpcm9dIEltcHJvdmUgaW1hZ2Ug
cXVhbGl0eSB3aGVuIHVzaW5nIG5ld2VyIHZlcnNpb25zIG9mIGNhaXJvL3BpeG1hbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHAKaW5kZXgg
NjlhZjVhMWIwMGJlMWExODIzMGIxNmE4NTJiYzM4Nzg5ODA0YTdmZi4uZTQwNzE2YzllMDNmNGE3
MDFkNmYzYTI2YjZlYjRlMmY1MTUzZTViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uY3BwCkBAIC04NSwyMCArODUsMTkgQEAgdm9pZCBS
ZWFkYWJsZVN0cmVhbTo6Y2hhbmdlU3RhdGVUb0Nsb3NlZCgpCiB2b2lkIFJlYWRhYmxlU3RyZWFt
OjpjbG9zZSgpCiB7CiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpDbG9zZWQ7Ci0gICAgcmVsZWFzZVJl
YWRlcigpOworICAgIGNsb3NlUmVhZGVyKCk7CiB9CiAKLXZvaWQgUmVhZGFibGVTdHJlYW06OnJl
bGVhc2VSZWFkZXIoKQordm9pZCBSZWFkYWJsZVN0cmVhbTo6Y2xvc2VSZWFkZXIoKQogewotICAg
IGlmIChtX2Nsb3NlZFByb21pc2UpCi0gICAgICAgIG1fY2xvc2VkUHJvbWlzZS52YWx1ZSgpLnJl
c29sdmUobnVsbHB0cik7Ci0KICAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBtX3JlYWRSZXF1ZXN0
cykKICAgICAgICAgcmVxdWVzdC5yZXNvbHZlRW5kKCk7Ci0KLSAgICBjbGVhckNhbGxiYWNrcygp
OwogICAgIGlmIChtX3JlYWRlcikKICAgICAgICAgbV9yZWxlYXNlZFJlYWRlcnMuYXBwZW5kKFdU
Rjo6bW92ZShtX3JlYWRlcikpOworCisgICAgaWYgKG1fY2xvc2VkUHJvbWlzZSkKKyAgICAgICAg
bV9jbG9zZWRQcm9taXNlLnZhbHVlKCkucmVzb2x2ZShudWxscHRyKTsKKyAgICBjbGVhckNhbGxi
YWNrcygpOwogfQogCiB2b2lkIFJlYWRhYmxlU3RyZWFtOjpjaGFuZ2VTdGF0ZVRvRXJyb3JlZCgp
CkBAIC0xMDcsMTggKzEwNiwxOCBAQCB2b2lkIFJlYWRhYmxlU3RyZWFtOjpjaGFuZ2VTdGF0ZVRv
RXJyb3JlZCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNsZWFyVmFsdWVzKCk7Ci0gICAgbV9z
dGF0ZSA9IFN0YXRlOjpFcnJvcmVkOwogCiAgICAgSlNDOjpKU1ZhbHVlIGVycm9yID0gdGhpcy0+
ZXJyb3IoKTsKLSAgICBpZiAobV9jbG9zZWRQcm9taXNlKQotICAgICAgICBtX2Nsb3NlZFByb21p
c2UudmFsdWUoKS5yZWplY3QoZXJyb3IpOwotCiAgICAgZm9yIChhdXRvJiByZXF1ZXN0IDogbV9y
ZWFkUmVxdWVzdHMpCiAgICAgICAgIHJlcXVlc3QucmVqZWN0KGVycm9yKTsKKyAgICBpZiAobV9y
ZWFkZXIpCisgICAgICAgIG1fcmVsZWFzZWRSZWFkZXJzLmFwcGVuZChXVEY6Om1vdmUobV9yZWFk
ZXIpKTsKIAorICAgIG1fc3RhdGUgPSBTdGF0ZTo6RXJyb3JlZDsKKworICAgIGlmIChtX2Nsb3Nl
ZFByb21pc2UpCisgICAgICAgIG1fY2xvc2VkUHJvbWlzZS52YWx1ZSgpLnJlamVjdChlcnJvcik7
CiAgICAgY2xlYXJDYWxsYmFja3MoKTsKLSAgICBpZiAobV9yZWFkZXIpCi0gICAgICAgIHJlbGVh
c2VSZWFkZXIoKTsKIH0KIAogdm9pZCBSZWFkYWJsZVN0cmVhbTo6c3RhcnQoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaAppbmRleCA0ZTc3YmE1
ODllZTAyMTA1NzExOTVkOWEzYTVhN2NiYTM1MGQxNjY3Li4wNjIyZjgyZGY4YjQyMjZlZDlkODNm
NGY4ZjJmMjY4NjY2NzRkMTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0
cmVhbXMvUmVhZGFibGVTdHJlYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVh
bXMvUmVhZGFibGVTdHJlYW0uaApAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAKICAgICBib29s
IGxvY2tlZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9yZWFkZXI7IH0KIAotICAgIHZvaWQgcmVsZWFz
ZVJlYWRlcigpOworICAgIHZvaWQgY2xvc2VSZWFkZXIoKTsKICAgICBib29sIGhhc1JlYWRQZW5k
aW5nUmVxdWVzdHMoKSB7IHJldHVybiAhbV9yZWFkUmVxdWVzdHMuaXNFbXB0eSgpOyB9CiAKICAg
ICBib29sIGlzRXJyb3JlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU3RhdGU6OkVycm9y
ZWQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJs
ZVN0cmVhbVJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFi
bGVTdHJlYW1SZWFkZXIuY3BwCmluZGV4IDNmMzdkOTljMDFkOWMxYWFhZTlkYzhlYzI4Y2Y3N2M1
ZTZlZjBkYjkuLjlhZTRiMDYwOTk2M2E5YjY5YmZjMTEwNDNlMmJjNjkwYzQ3ZTM3NzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFt
UmVhZGVyLmNwcApAQCAtNzIsNyArNzIsNyBAQCB2b2lkIFJlYWRhYmxlU3RyZWFtUmVhZGVyOjpy
ZWxlYXNlTG9jayhFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgZWMgPSBUeXBlRXJyb3I7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9zdHJlYW0ucmVsZWFzZVJlYWRlcigpOworICAg
IG1fc3RyZWFtLmNsb3NlUmVhZGVyKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlZTYxNzdmOTM0OWQ2OWZi
NTc3NTBiNThlODY4OTRhODQwMTQ4MzcyLi40YmIzMDNmMzZjYjE4NjE5NDA3MzQ3YTI4NDUxMDFl
OTJmN2E4ZmIyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTUtMDgtMTQgIFhhYmllciBSb2Ry
aWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKworICAgICAgICBbU3RyZWFtcyBB
UEldIFVwZGF0ZSBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZSBsYXRlc3Qgc3BlYworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3OTc4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCB0ZXN0cyBhYm91
dCB0aGUgb3JkZXIgb2YgdGhlIHJlYWQgYW5kIGNsb3NlZCBwcm9taXNlIHJlc29sdXRpb24uCisK
KyAgICAgICAgKiBzdHJlYW1zL3JlYWRhYmxlLXN0cmVhbS1yZWFkZXItcmVhZC5odG1sOgorICAg
ICAgICAqIHN0cmVhbXMvcmVmZXJlbmNlLWltcGxlbWVudGF0aW9uL3JlYWRhYmxlLXN0cmVhbS10
ZWUuaHRtbDoKKyAgICAgICAgKiBzdHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFk
YWJsZS1zdHJlYW0tdGVtcGxhdGVkLmh0bWw6CisgICAgICAgICogc3RyZWFtcy9yZWZlcmVuY2Ut
aW1wbGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFtLmh0bWw6CisKIDIwMTUtMDgtMTIgIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgTWFjIFRlc3RFeHBlY3Rh
dGlvbnMgZ2FyZGVuaW5nLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJs
ZS1zdHJlYW0tcmVhZGVyLXJlYWQuaHRtbCBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGUt
c3RyZWFtLXJlYWRlci1yZWFkLmh0bWwKaW5kZXggZGZkNjQ4ODkwNjQzYjFkY2Q5OWYzNWQyMzUy
MGM1YzgwNTA2NDMxOS4uNjdhNmU5ZDE2ZDhkMTMwNTI2YmJhMjU4ZDk4NjY3ZjUwODNjMWY3OCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZS1zdHJlYW0tcmVhZGVyLXJl
YWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlLXN0cmVhbS1yZWFkZXIt
cmVhZC5odG1sCkBAIC0xNSwxOCArMTUsMTUgQEAgdGVzdDEuc3RlcChmdW5jdGlvbigpIHsKIAog
ICAgIHJlYWRlci5yZWFkKCkudGhlbih0ZXN0MS5zdGVwX2Z1bmMoZnVuY3Rpb24ocmVzdWx0KSB7
CiAgICAgICAgIGFzc2VydF9vYmplY3RfZXF1YWxzKHJlc3VsdCwgeyB2YWx1ZTogdW5kZWZpbmVk
LCBkb25lOiB0cnVlIH0sICdyZWFkKCkgc2hvdWxkIGZ1bGZpbGwgd2l0aCBjbG9zZScpOwotICAg
ICAgICBhc3NlcnRfZXF1YWxzKGNvdW50ZXIsIDEpOwotICAgICAgICBjb3VudGVyKys7CisgICAg
ICAgIGFzc2VydF9lcXVhbHMoKytjb3VudGVyLCAxKTsKICAgICB9KSk7CiAgICAgcmVhZGVyLnJl
YWQoKS50aGVuKHRlc3QxLnN0ZXBfZnVuYyhmdW5jdGlvbihyZXN1bHQpIHsKICAgICAgICAgYXNz
ZXJ0X29iamVjdF9lcXVhbHMocmVzdWx0LCB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUg
fSwgJ3JlYWQoKSBzaG91bGQgZnVsZmlsbCB3aXRoIGNsb3NlJyk7Ci0gICAgICAgIGFzc2VydF9l
cXVhbHMoY291bnRlciwgMik7Ci0gICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgdGVzdDEuZG9u
ZSgpOworICAgICAgICBhc3NlcnRfZXF1YWxzKCsrY291bnRlciwgMik7CiAgICAgfSkpOwogICAg
IHJlYWRlci5jbG9zZWQudGhlbih0ZXN0MS5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7Ci0gICAgICAg
IGFzc2VydF9lcXVhbHMoY291bnRlciwgMCk7Ci0gICAgICAgIGNvdW50ZXIrKzsKKyAgICAgICAg
YXNzZXJ0X2VxdWFscygrK2NvdW50ZXIsIDMpOworICAgICAgICB0ZXN0MS5kb25lKCk7CiAgICAg
fSkpOwogCiAgICAgY29udHJvbGxlci5jbG9zZSgpOwpAQCAtMTE4LDIzICsxMTUsMjAgQEAgdGVz
dDQuc3RlcChmdW5jdGlvbigpIHsKICAgICAgICAgYXNzZXJ0X3VucmVhY2hlZCgncmVhZCgpIHNo
b3VsZCByZWplY3Qgb24gYW4gZXJyb3JlZCBzdHJlYW0nKTsKICAgICB9KSwgdGVzdDQuc3RlcF9m
dW5jKGZ1bmN0aW9uKGVycikgewogICAgICAgICBhc3NlcnRfZXF1YWxzKG15RXJyb3IsIGVycik7
Ci0gICAgICAgIGFzc2VydF9lcXVhbHMoY291bnRlciwgMSk7Ci0gICAgICAgIGNvdW50ZXIrKzsK
KyAgICAgICAgYXNzZXJ0X2VxdWFscygrK2NvdW50ZXIsIDEpOwogICAgIH0pKTsKICAgICByZWFk
ZXIucmVhZCgpLnRoZW4odGVzdDQuc3RlcF9mdW5jKGZ1bmN0aW9uKCkgewogICAgICAgICBhc3Nl
cnRfdW5yZWFjaGVkKCdyZWFkKCkgc2hvdWxkIHJlamVjdCBvbiBhbiBlcnJvcmVkIHN0cmVhbScp
OwogICAgIH0pLCB0ZXN0NC5zdGVwX2Z1bmMoZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgIGFzc2Vy
dF9lcXVhbHMobXlFcnJvciwgZXJyKTsKLSAgICAgICAgYXNzZXJ0X2VxdWFscyhjb3VudGVyLCAy
KTsKLSAgICAgICAgY291bnRlcisrOwotICAgICAgICB0ZXN0NC5kb25lKCk7CisgICAgICAgIGFz
c2VydF9lcXVhbHMoKytjb3VudGVyLCAyKTsKICAgICB9KSk7CiAgICAgcmVhZGVyLmNsb3NlZC50
aGVuKHRlc3Q0LnN0ZXBfZnVuYyhmdW5jdGlvbigpIHsKICAgICAgICAgYXNzZXJ0X3VucmVhY2hl
ZCgncmVhZCgpIHNob3VsZCByZWplY3Qgb24gYW4gZXJyb3JlZCBzdHJlYW0nKTsKICAgICB9KSwg
dGVzdDQuc3RlcF9mdW5jKGZ1bmN0aW9uKGVycikgewogICAgICAgICBhc3NlcnRfZXF1YWxzKG15
RXJyb3IsIGVycik7Ci0gICAgICAgIGFzc2VydF9lcXVhbHMoY291bnRlciwgMCk7Ci0gICAgICAg
IGNvdW50ZXIrKzsKKyAgICAgICAgYXNzZXJ0X2VxdWFscygrK2NvdW50ZXIsIDMpOworICAgICAg
ICB0ZXN0NC5kb25lKCk7CiAgICAgfSkpOwogCiAgICAgdmFyIG15RXJyb3IgPSB7IHBvdGF0bzog
J21hc2hlZCcgfTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVmZXJlbmNlLWlt
cGxlbWVudGF0aW9uL3JlYWRhYmxlLXN0cmVhbS10ZWUuaHRtbCBiL0xheW91dFRlc3RzL3N0cmVh
bXMvcmVmZXJlbmNlLWltcGxlbWVudGF0aW9uL3JlYWRhYmxlLXN0cmVhbS10ZWUuaHRtbAppbmRl
eCAxNGNiMGFkMDJjODc2NTYzMzYxY2U0NTAzNWJhOWU2MGY2NmQ4NTExLi5iOGY1NDllODdlNjhi
MzVhMDhlZTZiNWMwMDYxMjI2MDYyMjYxYTFhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdHJl
YW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0tdGVlLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFibGUt
c3RyZWFtLXRlZS5odG1sCkBAIC0xNiw3ICsxNiw2IEBAIHRlc3QoZnVuY3Rpb24oKSB7CiAKIHZh
ciB0ZXN0MSA9IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtIHRlZWluZzogc2hvdWxkIGJlIGFi
bGUgdG8gcmVhZCBvbmUgYnJhbmNoIHRvIHRoZSBlbmQgd2l0aG91dCBhZmZlY3RpbmcgdGhlIG90
aGVyJyk7CiB0ZXN0MS5zdGVwKGZ1bmN0aW9uKCkgewotICAgIHZhciBjbG9zZWRDYWxsZWQgPSBm
YWxzZTsKICAgICB2YXIgcmVhZENhbGxzID0gMDsKICAgICBjb25zdCBycyA9IG5ldyBSZWFkYWJs
ZVN0cmVhbSh7CiAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbihjKSB7CkBAIC0zMyw3ICszMiw4IEBA
IHRlc3QxLnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIHJlYWRlcjIgPSBicmFuY2gyLmdldFJl
YWRlcigpOwogCiAgICAgcmVhZGVyMS5jbG9zZWQudGhlbih0ZXN0MS5zdGVwX2Z1bmMoZnVuY3Rp
b24oKSB7Ci0gICAgICAgIGNsb3NlZENhbGxlZCA9IHRydWU7CisgICAgICAgIGFzc2VydF9lcXVh
bHMocmVhZENhbGxzLCA0KTsKKyAgICAgICAgdGVzdDEuZG9uZSgpOwogICAgIH0pKS5jYXRjaCh0
ZXN0MS5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkgeyBhc3NlcnRfdW5yZWFjaGVkKGUpOyB9KSk7CiAg
ICAgcmVhZGVyMi5jbG9zZWQudGhlbih0ZXN0MS5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7IGFzc2Vy
dF91bnJlYWNoZWQoJ2JyYW5jaDIgc2hvdWxkIG5vdCBiZSBjbG9zZWQnKTsgfSkpOwogCkBAIC00
Nyw5ICs0Nyw3IEBAIHRlc3QxLnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgfSkpOwogICAgIHJlYWRl
cjEucmVhZCgpLnRoZW4odGVzdDEuc3RlcF9mdW5jKGZ1bmN0aW9uKHIpIHsKICAgICAgICAgYXNz
ZXJ0X29iamVjdF9lcXVhbHMociwgeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0sICd0
aGlyZCByZWFkKCkgZnJvbSBicmFuY2gxIHNob3VsZCBiZSBkb25lJyk7Ci0gICAgICAgIGFzc2Vy
dF90cnVlKGNsb3NlZENhbGxlZCk7Ci0gICAgICAgIGFzc2VydF9lcXVhbHMoKytyZWFkQ2FsbHMs
IDQpOwotICAgICAgICB0ZXN0MS5kb25lKCk7CisgICAgICAgICsrcmVhZENhbGxzOwogICAgIH0p
KTsKIAogICAgIHJlYWRlcjIucmVhZCgpLnRoZW4odGVzdDEuc3RlcF9mdW5jKGZ1bmN0aW9uKHIp
IHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVmZXJlbmNlLWltcGxlbWVudGF0
aW9uL3JlYWRhYmxlLXN0cmVhbS10ZW1wbGF0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3N0cmVhbXMv
cmVmZXJlbmNlLWltcGxlbWVudGF0aW9uL3JlYWRhYmxlLXN0cmVhbS10ZW1wbGF0ZWQuaHRtbApp
bmRleCAzOGI3NTMwYjgwYzAwMmZkMDZmOGI2ZDA0OWIzNDhmOTNjYWY2NjJlLi5kYTM4ZTQ3YTA2
MTJmZjBkYzFlOGM4MzRhOGRjMmE3ODIwZTQ4NzNmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9z
dHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0tdGVtcGxhdGVk
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24v
cmVhZGFibGUtc3RyZWFtLXRlbXBsYXRlZC5odG1sCkBAIC04MSwxMiArODEsMTMgQEAgZnVuY3Rp
b24gdGVtcGxhdGVkUlNFcnJvcmVkKGxhYmVsLCBmYWN0b3J5LCBlcnJvcikgewogCiAgICAgICAg
IHJlYWRlci5jbG9zZWQuY2F0Y2godGVzdDEuc3RlcF9mdW5jKGZ1bmN0aW9uKGUpIHsKICAgICAg
ICAgICAgIGFzc2VydF9lcXVhbHMoZSwgZXJyb3IsICdyZWFkZXIuY2xvc2VkIHNob3VsZCByZWpl
Y3Qgd2l0aCB0aGUgZXJyb3InKTsKLSAgICAgICAgICAgICsrcHJvbWlzZXNDb3VudDsKKyAgICAg
ICAgICAgIGlmICgrK3Byb21pc2VzQ291bnQgPT09IDIpCisgICAgICAgICAgICAgICAgdGVzdDEu
ZG9uZSgpOwogICAgICAgICB9KSk7CiAgICAgICAgIHJlYWRlci5yZWFkKCkuY2F0Y2godGVzdDEu
c3RlcF9mdW5jKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoZSwgZXJy
b3IsICdyZWFkZXIucmVhZCgpIHNob3VsZCByZWplY3Qgd2l0aCB0aGUgZXJyb3InKTsKLSAgICAg
ICAgICAgIGFzc2VydF9lcXVhbHMoKytwcm9taXNlc0NvdW50LCAyKTsKLSAgICAgICAgICAgIHRl
c3QxLmRvbmUoKTsKKyAgICAgICAgICAgIGlmICgrK3Byb21pc2VzQ291bnQgPT09IDIpCisgICAg
ICAgICAgICAgICAgdGVzdDEuZG9uZSgpOwogICAgICAgICB9KSk7CiAgICAgfSk7CiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVmZXJlbmNlLWltcGxlbWVudGF0aW9uL3JlYWRh
YmxlLXN0cmVhbS5odG1sIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50
YXRpb24vcmVhZGFibGUtc3RyZWFtLmh0bWwKaW5kZXggMmFkMDJhNDQ2NGUzM2I3MmJlNjhhZjhj
NjNiZDdmODcwN2VhMWEwOS4uZjcxYjMyYzhmMmQ1ZGE0MDY4M2FhOGI2YmI3ZjVlM2M2MWVmMThj
MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRp
b24vcmVhZGFibGUtc3RyZWFtLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWZlcmVu
Y2UtaW1wbGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFtLmh0bWwKQEAgLTI0MCwxNSArMjQwLDE1
IEBAIHRlc3Q1LnN0ZXAoZnVuY3Rpb24oKSB7CiAKICAgICByZWFkZXIuY2xvc2VkLmNhdGNoKHRl
c3Q1LnN0ZXBfZnVuYyhmdW5jdGlvbihlKSB7CiAgICAgICAgIGNsb3NlZCA9IHRydWU7Ci0gICAg
ICAgIGFzc2VydF9mYWxzZShyZWFkKTsKKyAgICAgICAgYXNzZXJ0X3RydWUocmVhZCk7CiAgICAg
ICAgIGFzc2VydF9lcXVhbHMoZSwgZXJyb3IsICdjbG9zZWQgc2hvdWxkIHJlamVjdCB3aXRoIHRo
ZSB0aHJvd24gZXJyb3InKTsKKyAgICAgICAgdGVzdDUuZG9uZSgpOwogICAgIH0pKTsKIAogICAg
IHJlYWRlci5yZWFkKCkuY2F0Y2godGVzdDUuc3RlcF9mdW5jKGZ1bmN0aW9uKGUpIHsKICAgICAg
ICAgcmVhZCA9IHRydWU7Ci0gICAgICAgIGFzc2VydF90cnVlKGNsb3NlZCk7CisgICAgICAgIGFz
c2VydF9mYWxzZShjbG9zZWQpOwogICAgICAgICBhc3NlcnRfZXF1YWxzKGUsIGVycm9yLCAncmVh
ZCgpIHNob3VsZCByZWplY3Qgd2l0aCB0aGUgdGhyb3duIGVycm9yJyk7Ci0gICAgICAgIHRlc3Q1
LmRvbmUoKTsKICAgICB9KSk7CiB9KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259140</attachid>
            <date>2015-08-17 02:09:09 -0700</date>
            <delta_ts>2015-08-18 01:25:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147978-20150817110907.patch</filename>
            <type>text/plain</type>
            <size>9325</size>
            <attacher name="Xabier Rodríguez Calvar">calvaris</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4NTIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWRhNmMwZTMxMjUzOTU2
MzAyOGI1MmUxZjUyZWFhYTU5MTNhODVjMi4uY2MxZjFhMDY5MzZiY2M5YmUyYWVjYTBjMTZlODNh
NjZkZTJkYjU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE1LTA4LTE3ICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1N0
cmVhbXMgQVBJXSBVcGRhdGUgaW1wbGVtZW50YXRpb24gd2l0aCB0aGUgbGF0ZXN0IHNwZWMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Nzk3OAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgdGhl
IHdheSB0aGUgcmVhZCBhbmQgY2xvc2VkIHByb21pc2VzIGFyZSByZXNvbHZlZCBhbmQgdGhlIHN0
cmVhbSBpcyByZWxlYXNlZCB3aGVuIGFuIGV2ZW4gY2xvc2VzIG9yCisgICAgICAgIGVycm9ycyB0
aGUgc3RyZWFtLgorCisgICAgICAgIEN1cnJlbnQgdGVzdHMgc3VmZmljZSBhZnRlciBjaGFuZ2lu
ZyB0aGUgb3JkZXIgb2YgdGhlIHByb21pc2UgcmVzb2x1dGlvbiBhY2NvcmRpbmcgdG8gdGhlIG5l
dyBzcGVjLgorCisgICAgICAgICogTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpyZWxlYXNlUmVhZGVyKTogQ2hhbmdl
ZCBob3cgdGhlIHByb21pc2VzIGFyZSByZXNvbHZlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWRh
YmxlU3RyZWFtOjpjaGFuZ2VTdGF0ZVRvRXJyb3JlZCk6IENoYW5nZWQgaG93IHRoZSBwcm9taXNl
cyBhcmUgcmVzb2x2ZWQgYW5kIG1hbnVhbGx5IHJlbGVhc2luZworICAgICAgICB0aGUgc3RyZWFt
IGluc3RlYWQgb2YgY2FsbGluZyByZWxlYXNlUmVhZGVyIGFjY29yZGluZyB0byB0aGUgc3BlYy4K
KwogMjAxNS0wOC0xNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IFJlZmFjdG9yIEhUTUxDb2xsZWN0aW9uIHRvIGJlIGFzIGZhc3QgYXMgQ2FjaGVkTGl2ZU5vZGVM
aXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVT
dHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFt
LmNwcAppbmRleCA2OWFmNWExYjAwYmUxYTE4MjMwYjE2YTg1MmJjMzg3ODk4MDRhN2ZmLi40MGVk
ZWJhMTEwMzI0MDk1OGMzYmE1NGQ2MTY2ZmUxMGEyMjcxODAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHAKQEAgLTkwLDE1ICs5MCwx
NCBAQCB2b2lkIFJlYWRhYmxlU3RyZWFtOjpjbG9zZSgpCiAKIHZvaWQgUmVhZGFibGVTdHJlYW06
OnJlbGVhc2VSZWFkZXIoKQogewotICAgIGlmIChtX2Nsb3NlZFByb21pc2UpCi0gICAgICAgIG1f
Y2xvc2VkUHJvbWlzZS52YWx1ZSgpLnJlc29sdmUobnVsbHB0cik7Ci0KICAgICBmb3IgKGF1dG8m
IHJlcXVlc3QgOiBtX3JlYWRSZXF1ZXN0cykKICAgICAgICAgcmVxdWVzdC5yZXNvbHZlRW5kKCk7
Ci0KLSAgICBjbGVhckNhbGxiYWNrcygpOwogICAgIGlmIChtX3JlYWRlcikKICAgICAgICAgbV9y
ZWxlYXNlZFJlYWRlcnMuYXBwZW5kKFdURjo6bW92ZShtX3JlYWRlcikpOworCisgICAgaWYgKG1f
Y2xvc2VkUHJvbWlzZSkKKyAgICAgICAgbV9jbG9zZWRQcm9taXNlLnZhbHVlKCkucmVzb2x2ZShu
dWxscHRyKTsKKyAgICBjbGVhckNhbGxiYWNrcygpOwogfQogCiB2b2lkIFJlYWRhYmxlU3RyZWFt
OjpjaGFuZ2VTdGF0ZVRvRXJyb3JlZCgpCkBAIC0xMDcsMTggKzEwNiwyMCBAQCB2b2lkIFJlYWRh
YmxlU3RyZWFtOjpjaGFuZ2VTdGF0ZVRvRXJyb3JlZCgpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGNsZWFyVmFsdWVzKCk7CisKICAgICBtX3N0YXRlID0gU3RhdGU6OkVycm9yZWQ7CiAKLSAgICBK
U0M6OkpTVmFsdWUgZXJyb3IgPSB0aGlzLT5lcnJvcigpOwotICAgIGlmIChtX2Nsb3NlZFByb21p
c2UpCi0gICAgICAgIG1fY2xvc2VkUHJvbWlzZS52YWx1ZSgpLnJlamVjdChlcnJvcik7CisgICAg
aWYgKCFtX3JlYWRlcikKKyAgICAgICAgcmV0dXJuOwogCisgICAgSlNDOjpKU1ZhbHVlIGVycm9y
ID0gdGhpcy0+ZXJyb3IoKTsKICAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBtX3JlYWRSZXF1ZXN0
cykKICAgICAgICAgcmVxdWVzdC5yZWplY3QoZXJyb3IpOworICAgIG1fcmVsZWFzZWRSZWFkZXJz
LmFwcGVuZChXVEY6Om1vdmUobV9yZWFkZXIpKTsKIAorICAgIGlmIChtX2Nsb3NlZFByb21pc2Up
CisgICAgICAgIG1fY2xvc2VkUHJvbWlzZS52YWx1ZSgpLnJlamVjdChlcnJvcik7CiAgICAgY2xl
YXJDYWxsYmFja3MoKTsKLSAgICBpZiAobV9yZWFkZXIpCi0gICAgICAgIHJlbGVhc2VSZWFkZXIo
KTsKIH0KIAogdm9pZCBSZWFkYWJsZVN0cmVhbTo6c3RhcnQoKQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDMzMjVjYWI3NzMz
MWYxZjVhNWMwNzBhN2Q5N2QwOTcxZWUzNjdlZjIuLjQ4YzFjMDJkMmFlMDNmNGNhMDc5YWY3N2My
NmUyYWE4ZTM1N2YxNzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNS0wOC0xNyAgWGFiaWVy
IFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJpc0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtTdHJl
YW1zIEFQSV0gVXBkYXRlIGltcGxlbWVudGF0aW9uIHdpdGggdGhlIGxhdGVzdCBzcGVjCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc5NzgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2VkIHRlc3Rz
IGFib3V0IHRoZSBvcmRlciBvZiB0aGUgcmVhZCBhbmQgY2xvc2VkIHByb21pc2UgcmVzb2x1dGlv
bi4KKworICAgICAgICAqIHN0cmVhbXMvcmVhZGFibGUtc3RyZWFtLXJlYWRlci1yZWFkLmh0bWw6
CisgICAgICAgICogc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFibGUtc3Ry
ZWFtLXRlZS5odG1sOgorICAgICAgICAqIHN0cmVhbXMvcmVmZXJlbmNlLWltcGxlbWVudGF0aW9u
L3JlYWRhYmxlLXN0cmVhbS10ZW1wbGF0ZWQuaHRtbDoKKyAgICAgICAgKiBzdHJlYW1zL3JlZmVy
ZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0uaHRtbDoKKwogMjAxNS0wOC0xNSAg
QWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmVkIGFu
IGV4cGVjdGF0aW9uIGZvciBodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLWJ1ZmZlcmVkLXJhbmdlLWNv
bnRhaW5zLWN1cnJlbnRUaW1lLmh0bWwsCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdHJlYW1z
L3JlYWRhYmxlLXN0cmVhbS1yZWFkZXItcmVhZC5odG1sIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9y
ZWFkYWJsZS1zdHJlYW0tcmVhZGVyLXJlYWQuaHRtbAppbmRleCBkZmQ2NDg4OTA2NDNiMWRjZDk5
ZjM1ZDIzNTIwYzVjODA1MDY0MzE5Li42N2E2ZTlkMTZkOGQxMzA1MjZiYmEyNThkOTg2NjdmNTA4
M2MxZjc4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlLXN0cmVhbS1y
ZWFkZXItcmVhZC5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGUtc3RyZWFt
LXJlYWRlci1yZWFkLmh0bWwKQEAgLTE1LDE4ICsxNSwxNSBAQCB0ZXN0MS5zdGVwKGZ1bmN0aW9u
KCkgewogCiAgICAgcmVhZGVyLnJlYWQoKS50aGVuKHRlc3QxLnN0ZXBfZnVuYyhmdW5jdGlvbihy
ZXN1bHQpIHsKICAgICAgICAgYXNzZXJ0X29iamVjdF9lcXVhbHMocmVzdWx0LCB7IHZhbHVlOiB1
bmRlZmluZWQsIGRvbmU6IHRydWUgfSwgJ3JlYWQoKSBzaG91bGQgZnVsZmlsbCB3aXRoIGNsb3Nl
Jyk7Ci0gICAgICAgIGFzc2VydF9lcXVhbHMoY291bnRlciwgMSk7Ci0gICAgICAgIGNvdW50ZXIr
KzsKKyAgICAgICAgYXNzZXJ0X2VxdWFscygrK2NvdW50ZXIsIDEpOwogICAgIH0pKTsKICAgICBy
ZWFkZXIucmVhZCgpLnRoZW4odGVzdDEuc3RlcF9mdW5jKGZ1bmN0aW9uKHJlc3VsdCkgewogICAg
ICAgICBhc3NlcnRfb2JqZWN0X2VxdWFscyhyZXN1bHQsIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9u
ZTogdHJ1ZSB9LCAncmVhZCgpIHNob3VsZCBmdWxmaWxsIHdpdGggY2xvc2UnKTsKLSAgICAgICAg
YXNzZXJ0X2VxdWFscyhjb3VudGVyLCAyKTsKLSAgICAgICAgY291bnRlcisrOwotICAgICAgICB0
ZXN0MS5kb25lKCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMoKytjb3VudGVyLCAyKTsKICAgICB9
KSk7CiAgICAgcmVhZGVyLmNsb3NlZC50aGVuKHRlc3QxLnN0ZXBfZnVuYyhmdW5jdGlvbigpIHsK
LSAgICAgICAgYXNzZXJ0X2VxdWFscyhjb3VudGVyLCAwKTsKLSAgICAgICAgY291bnRlcisrOwor
ICAgICAgICBhc3NlcnRfZXF1YWxzKCsrY291bnRlciwgMyk7CisgICAgICAgIHRlc3QxLmRvbmUo
KTsKICAgICB9KSk7CiAKICAgICBjb250cm9sbGVyLmNsb3NlKCk7CkBAIC0xMTgsMjMgKzExNSwy
MCBAQCB0ZXN0NC5zdGVwKGZ1bmN0aW9uKCkgewogICAgICAgICBhc3NlcnRfdW5yZWFjaGVkKCdy
ZWFkKCkgc2hvdWxkIHJlamVjdCBvbiBhbiBlcnJvcmVkIHN0cmVhbScpOwogICAgIH0pLCB0ZXN0
NC5zdGVwX2Z1bmMoZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgIGFzc2VydF9lcXVhbHMobXlFcnJv
ciwgZXJyKTsKLSAgICAgICAgYXNzZXJ0X2VxdWFscyhjb3VudGVyLCAxKTsKLSAgICAgICAgY291
bnRlcisrOworICAgICAgICBhc3NlcnRfZXF1YWxzKCsrY291bnRlciwgMSk7CiAgICAgfSkpOwog
ICAgIHJlYWRlci5yZWFkKCkudGhlbih0ZXN0NC5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7CiAgICAg
ICAgIGFzc2VydF91bnJlYWNoZWQoJ3JlYWQoKSBzaG91bGQgcmVqZWN0IG9uIGFuIGVycm9yZWQg
c3RyZWFtJyk7CiAgICAgfSksIHRlc3Q0LnN0ZXBfZnVuYyhmdW5jdGlvbihlcnIpIHsKICAgICAg
ICAgYXNzZXJ0X2VxdWFscyhteUVycm9yLCBlcnIpOwotICAgICAgICBhc3NlcnRfZXF1YWxzKGNv
dW50ZXIsIDIpOwotICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgIHRlc3Q0LmRvbmUoKTsKKyAg
ICAgICAgYXNzZXJ0X2VxdWFscygrK2NvdW50ZXIsIDIpOwogICAgIH0pKTsKICAgICByZWFkZXIu
Y2xvc2VkLnRoZW4odGVzdDQuc3RlcF9mdW5jKGZ1bmN0aW9uKCkgewogICAgICAgICBhc3NlcnRf
dW5yZWFjaGVkKCdyZWFkKCkgc2hvdWxkIHJlamVjdCBvbiBhbiBlcnJvcmVkIHN0cmVhbScpOwog
ICAgIH0pLCB0ZXN0NC5zdGVwX2Z1bmMoZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgIGFzc2VydF9l
cXVhbHMobXlFcnJvciwgZXJyKTsKLSAgICAgICAgYXNzZXJ0X2VxdWFscyhjb3VudGVyLCAwKTsK
LSAgICAgICAgY291bnRlcisrOworICAgICAgICBhc3NlcnRfZXF1YWxzKCsrY291bnRlciwgMyk7
CisgICAgICAgIHRlc3Q0LmRvbmUoKTsKICAgICB9KSk7CiAKICAgICB2YXIgbXlFcnJvciA9IHsg
cG90YXRvOiAnbWFzaGVkJyB9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWZl
cmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFtLXRlZS5odG1sIGIvTGF5b3V0VGVz
dHMvc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFtLXRlZS5o
dG1sCmluZGV4IDE0Y2IwYWQwMmM4NzY1NjMzNjFjZTQ1MDM1YmE5ZTYwZjY2ZDg1MTEuLmI4ZjU0
OWU4N2U2OGIzNWEwOGVlNmI1YzAwNjEyMjYwNjIyNjFhMWEgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3N0cmVhbXMvcmVmZXJlbmNlLWltcGxlbWVudGF0aW9uL3JlYWRhYmxlLXN0cmVhbS10ZWUu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9y
ZWFkYWJsZS1zdHJlYW0tdGVlLmh0bWwKQEAgLTE2LDcgKzE2LDYgQEAgdGVzdChmdW5jdGlvbigp
IHsKIAogdmFyIHRlc3QxID0gYXN5bmNfdGVzdCgnUmVhZGFibGVTdHJlYW0gdGVlaW5nOiBzaG91
bGQgYmUgYWJsZSB0byByZWFkIG9uZSBicmFuY2ggdG8gdGhlIGVuZCB3aXRob3V0IGFmZmVjdGlu
ZyB0aGUgb3RoZXInKTsKIHRlc3QxLnN0ZXAoZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGNsb3NlZENh
bGxlZCA9IGZhbHNlOwogICAgIHZhciByZWFkQ2FsbHMgPSAwOwogICAgIGNvbnN0IHJzID0gbmV3
IFJlYWRhYmxlU3RyZWFtKHsKICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uKGMpIHsKQEAgLTMzLDcg
KzMyLDggQEAgdGVzdDEuc3RlcChmdW5jdGlvbigpIHsKICAgICB2YXIgcmVhZGVyMiA9IGJyYW5j
aDIuZ2V0UmVhZGVyKCk7CiAKICAgICByZWFkZXIxLmNsb3NlZC50aGVuKHRlc3QxLnN0ZXBfZnVu
YyhmdW5jdGlvbigpIHsKLSAgICAgICAgY2xvc2VkQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgYXNz
ZXJ0X2VxdWFscyhyZWFkQ2FsbHMsIDQpOworICAgICAgICB0ZXN0MS5kb25lKCk7CiAgICAgfSkp
LmNhdGNoKHRlc3QxLnN0ZXBfZnVuYyhmdW5jdGlvbihlKSB7IGFzc2VydF91bnJlYWNoZWQoZSk7
IH0pKTsKICAgICByZWFkZXIyLmNsb3NlZC50aGVuKHRlc3QxLnN0ZXBfZnVuYyhmdW5jdGlvbigp
IHsgYXNzZXJ0X3VucmVhY2hlZCgnYnJhbmNoMiBzaG91bGQgbm90IGJlIGNsb3NlZCcpOyB9KSk7
CiAKQEAgLTQ3LDkgKzQ3LDcgQEAgdGVzdDEuc3RlcChmdW5jdGlvbigpIHsKICAgICB9KSk7CiAg
ICAgcmVhZGVyMS5yZWFkKCkudGhlbih0ZXN0MS5zdGVwX2Z1bmMoZnVuY3Rpb24ocikgewogICAg
ICAgICBhc3NlcnRfb2JqZWN0X2VxdWFscyhyLCB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRy
dWUgfSwgJ3RoaXJkIHJlYWQoKSBmcm9tIGJyYW5jaDEgc2hvdWxkIGJlIGRvbmUnKTsKLSAgICAg
ICAgYXNzZXJ0X3RydWUoY2xvc2VkQ2FsbGVkKTsKLSAgICAgICAgYXNzZXJ0X2VxdWFscygrK3Jl
YWRDYWxscywgNCk7Ci0gICAgICAgIHRlc3QxLmRvbmUoKTsKKyAgICAgICAgKytyZWFkQ2FsbHM7
CiAgICAgfSkpOwogCiAgICAgcmVhZGVyMi5yZWFkKCkudGhlbih0ZXN0MS5zdGVwX2Z1bmMoZnVu
Y3Rpb24ocikgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWZlcmVuY2UtaW1w
bGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFtLXRlbXBsYXRlZC5odG1sIGIvTGF5b3V0VGVzdHMv
c3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFtLXRlbXBsYXRl
ZC5odG1sCmluZGV4IDM4Yjc1MzBiODBjMDAyZmQwNmY4YjZkMDQ5YjM0OGY5M2NhZjY2MmUuLmRh
MzhlNDdhMDYxMmZmMGRjMWU4YzgzNGE4ZGMyYTc4MjBlNDg3M2YgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3N0cmVhbXMvcmVmZXJlbmNlLWltcGxlbWVudGF0aW9uL3JlYWRhYmxlLXN0cmVhbS10
ZW1wbGF0ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1l
bnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0tdGVtcGxhdGVkLmh0bWwKQEAgLTgxLDEyICs4MSwxMyBA
QCBmdW5jdGlvbiB0ZW1wbGF0ZWRSU0Vycm9yZWQobGFiZWwsIGZhY3RvcnksIGVycm9yKSB7CiAK
ICAgICAgICAgcmVhZGVyLmNsb3NlZC5jYXRjaCh0ZXN0MS5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkg
ewogICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhlLCBlcnJvciwgJ3JlYWRlci5jbG9zZWQgc2hv
dWxkIHJlamVjdCB3aXRoIHRoZSBlcnJvcicpOwotICAgICAgICAgICAgKytwcm9taXNlc0NvdW50
OworICAgICAgICAgICAgaWYgKCsrcHJvbWlzZXNDb3VudCA9PT0gMikKKyAgICAgICAgICAgICAg
ICB0ZXN0MS5kb25lKCk7CiAgICAgICAgIH0pKTsKICAgICAgICAgcmVhZGVyLnJlYWQoKS5jYXRj
aCh0ZXN0MS5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgYXNzZXJ0X2VxdWFs
cyhlLCBlcnJvciwgJ3JlYWRlci5yZWFkKCkgc2hvdWxkIHJlamVjdCB3aXRoIHRoZSBlcnJvcicp
OwotICAgICAgICAgICAgYXNzZXJ0X2VxdWFscygrK3Byb21pc2VzQ291bnQsIDIpOwotICAgICAg
ICAgICAgdGVzdDEuZG9uZSgpOworICAgICAgICAgICAgaWYgKCsrcHJvbWlzZXNDb3VudCA9PT0g
MikKKyAgICAgICAgICAgICAgICB0ZXN0MS5kb25lKCk7CiAgICAgICAgIH0pKTsKICAgICB9KTsK
IApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRp
b24vcmVhZGFibGUtc3RyZWFtLmh0bWwgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1p
bXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0uaHRtbAppbmRleCAyYWQwMmE0NDY0ZTMzYjcy
YmU2OGFmOGM2M2JkN2Y4NzA3ZWExYTA5Li5mNzFiMzJjOGYyZDVkYTQwNjgzYWE4YjZiYjdmNWUz
YzYxZWYxOGMxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1pbXBs
ZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1z
L3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0uaHRtbApAQCAtMjQwLDE1
ICsyNDAsMTUgQEAgdGVzdDUuc3RlcChmdW5jdGlvbigpIHsKIAogICAgIHJlYWRlci5jbG9zZWQu
Y2F0Y2godGVzdDUuc3RlcF9mdW5jKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgY2xvc2VkID0gdHJ1
ZTsKLSAgICAgICAgYXNzZXJ0X2ZhbHNlKHJlYWQpOworICAgICAgICBhc3NlcnRfdHJ1ZShyZWFk
KTsKICAgICAgICAgYXNzZXJ0X2VxdWFscyhlLCBlcnJvciwgJ2Nsb3NlZCBzaG91bGQgcmVqZWN0
IHdpdGggdGhlIHRocm93biBlcnJvcicpOworICAgICAgICB0ZXN0NS5kb25lKCk7CiAgICAgfSkp
OwogCiAgICAgcmVhZGVyLnJlYWQoKS5jYXRjaCh0ZXN0NS5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkg
ewogICAgICAgICByZWFkID0gdHJ1ZTsKLSAgICAgICAgYXNzZXJ0X3RydWUoY2xvc2VkKTsKKyAg
ICAgICAgYXNzZXJ0X2ZhbHNlKGNsb3NlZCk7CiAgICAgICAgIGFzc2VydF9lcXVhbHMoZSwgZXJy
b3IsICdyZWFkKCkgc2hvdWxkIHJlamVjdCB3aXRoIHRoZSB0aHJvd24gZXJyb3InKTsKLSAgICAg
ICAgdGVzdDUuZG9uZSgpOwogICAgIH0pKTsKIH0pOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>