<?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>154658</bug_id>
          
          <creation_ts>2016-02-24 14:54:35 -0800</creation_ts>
          <short_desc>B3 should have global store elimination</short_desc>
          <delta_ts>2016-02-29 14:34:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>154782</dependson>
          <blocked>154319</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1167935</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-24 14:54:35 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167937</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-24 14:59:08 -0800</bug_when>
    <thetext>The main issue here is doing backward dominators: if we have @s = Store(@x, @p) and @t = Store(@y, @p) then we can eliminate @s if it is backward dominated by @t and there does not exist a path from @s to @t that could observe the store.

On the other hand, maybe you could just do this by forward flow. If you do forward flow from @s and we find any number of @t&apos;s without ever hitting a side exit, return, read or write, then we can eliminate @s.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167938</commentid>
    <comment_count>2</comment_count>
      <attachid>272151</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-24 14:59:27 -0800</bug_when>
    <thetext>Created attachment 272151
things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168189</commentid>
    <comment_count>3</comment_count>
      <attachid>272227</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-25 13:10:26 -0800</bug_when>
    <thetext>Created attachment 272227
better approach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168226</commentid>
    <comment_count>4</comment_count>
      <attachid>272240</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-25 14:25:58 -0800</bug_when>
    <thetext>Created attachment 272240
it compiles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169022</commentid>
    <comment_count>5</comment_count>
      <attachid>272461</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-28 13:07:24 -0800</bug_when>
    <thetext>Created attachment 272461
maybe the patch

Still running tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169025</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-28 13:09:39 -0800</bug_when>
    <thetext>Attachment 272461 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3EliminateCommonSubexpressions.cpp:296:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169053</commentid>
    <comment_count>7</comment_count>
      <attachid>272470</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-28 17:51:30 -0800</bug_when>
    <thetext>Created attachment 272470
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169054</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-28 17:53:30 -0800</bug_when>
    <thetext>Attachment 272470 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3EliminateCommonSubexpressions.cpp:296:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169266</commentid>
    <comment_count>9</comment_count>
      <attachid>272470</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-02-29 14:14:26 -0800</bug_when>
    <thetext>Comment on attachment 272470
the patch

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

&gt; Source/JavaScriptCore/b3/B3EliminateCommonSubexpressions.cpp:108
&gt; +            for (Value* candidateValue : *matches) {

MemoryValue* candidateValue?

&gt; Source/JavaScriptCore/b3/B3EliminateCommonSubexpressions.cpp:109
&gt; +                if (MemoryValue* candidateMemory = candidateValue-&gt;as&lt;MemoryValue&gt;()) {

When can this be false?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169271</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-29 14:28:36 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 272470 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=272470&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3EliminateCommonSubexpressions.cpp:108
&gt; &gt; +            for (Value* candidateValue : *matches) {
&gt; 
&gt; MemoryValue* candidateValue?

Something in our list could have been turned into Identity.

We do like this:
1) Summarize things in each block before doing any changes.
2) Do changes (i.e. turn things into Identity&apos;s) and look for things in the summaries.

The things that we turn into Identity&apos;s are also the things we put into the summaries in (1).  This data structure manages summaries, so it will see Identity&apos;s.

Identity does not use MemoryValue (it&apos;s just a plain Value), so MemoryValue* here would be wrong.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3EliminateCommonSubexpressions.cpp:109
&gt; &gt; +                if (MemoryValue* candidateMemory = candidateValue-&gt;as&lt;MemoryValue&gt;()) {
&gt; 
&gt; When can this be false?

See above! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169272</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-29 14:34:13 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/197366</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272151</attachid>
            <date>2016-02-24 14:59:27 -0800</date>
            <delta_ts>2016-02-25 13:10:26 -0800</delta_ts>
            <desc>things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>14215</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGlt
aW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDE5NzAzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTYyLDExICsxNjIsMzYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBtX3Zh
bHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgaWYgKG1lbW9yeSAmJiBwcm9jZXNzTWVt
b3J5QmVmb3JlQ2xvYmJlcihtZW1vcnkpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAg
IGlmIChIZWFwUmFuZ2Ugd3JpdGVzID0gbV92YWx1ZS0+ZWZmZWN0cygpLndyaXRlcykKICAgICAg
ICAgICAgIGNsb2JiZXIobV9kYXRhLCB3cml0ZXMpOwogICAgICAgICAKLSAgICAgICAgaWYgKE1l
bW9yeVZhbHVlKiBtZW1vcnkgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSkKLSAgICAgICAg
ICAgIHByb2Nlc3NNZW1vcnkobWVtb3J5KTsKKyAgICAgICAgaWYgKG1lbW9yeSkKKyAgICAgICAg
ICAgIHByb2Nlc3NNZW1vcnlBZnRlckNsb2JiZXIobWVtb3J5KTsKKyAgICB9CisKKyAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB3ZSBnb3QgcmlkIG9mIHRoZSBvcGVyYXRpb24uIElmIHlvdSBjaGFuZ2Vk
IElSIGluIHRoaXMgZnVuY3Rpb24sIHlvdSBoYXZlIHRvCisgICAgLy8gc2V0IG1fY2hhbmdlZCBl
dmVuIGlmIHlvdSBhbHNvIHJldHVybiB0cnVlLgorICAgIGJvb2wgcHJvY2Vzc01lbW9yeUJlZm9y
ZUNsb2JiZXIoTWVtb3J5VmFsdWUqIG1lbW9yeSkKKyAgICB7CisgICAgICAgIFZhbHVlKiB2YWx1
ZSA9IG1lbW9yeS0+Y2hpbGQoMCk7CisgICAgICAgIFZhbHVlKiBwdHIgPSBtZW1vcnktPmxhc3RD
aGlsZCgpOworICAgICAgICBIZWFwUmFuZ2UgcmFuZ2UgPSBtZW1vcnktPnJhbmdlKCk7CisgICAg
ICAgIGludDMyX3Qgb2Zmc2V0ID0gbWVtb3J5LT5vZmZzZXQoKTsKKworICAgICAgICBzd2l0Y2gg
KG1lbW9yeS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAgICBy
ZXR1cm4gaGFuZGxlU3RvcmUocHRyLCByYW5nZSwgdmFsdWUsIG9mZnNldCwgU3RvcmU4LCBMb2Fk
OCk7CisgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdG9y
ZShwdHIsIHJhbmdlLCB2YWx1ZSwgb2Zmc2V0LCBTdG9yZTE2LCBMb2FkMTYpOworICAgICAgICBj
YXNlIFN0b3JlOgorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0b3JlKHB0ciwgcmFuZ2UsIHZh
bHVlLCBvZmZzZXQsIFN0b3JlLCBMb2FkKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHZvaWQgY2xvYmJlcihJbXB1
cmVCbG9ja0RhdGEmIGRhdGEsIEhlYXBSYW5nZSB3cml0ZXMpCkBAIC0xODUsNyArMjEwLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAgIH0KIAotICAgIHZvaWQgcHJvY2Vzc01lbW9y
eShNZW1vcnlWYWx1ZSogbWVtb3J5KQorICAgIHZvaWQgcHJvY2Vzc01lbW9yeUFmdGVyQ2xvYmJl
cihNZW1vcnlWYWx1ZSogbWVtb3J5KQogICAgIHsKICAgICAgICAgVmFsdWUqIHB0ciA9IG1lbW9y
eS0+bGFzdENoaWxkKCk7CiAgICAgICAgIEhlYXBSYW5nZSByYW5nZSA9IG1lbW9yeS0+cmFuZ2Uo
KTsKQEAgLTMxNiw2ICszNDEsMzAgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGaWx0ZXI+CisgICAgYm9vbCBoYW5kbGVTdG9yZSgKKyAgICAgICAgVmFsdWUqIHB0
ciwgSGVhcFJhbmdlIHJhbmdlLCBWYWx1ZSogdmFsdWUsIGludDMyX3Qgb2Zmc2V0LAorICAgICAg
ICBPcGNvZGUgc3RvcmVPcGNvZGUsIE9wY29kZSBsb2FkT3Bjb2RlKQorICAgIHsKKyAgICAgICAg
TWVtb3J5TWF0Y2hlcyBtYXRjaGVzID0gZmluZE1lbW9yeVZhbHVlKAorICAgICAgICAgICAgcHRy
LCByYW5nZSwKKyAgICAgICAgICAgIFsmXSAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0ZSkgLT4gYm9v
bCB7CisgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b2Zmc2V0KCkgIT0gb2Zmc2V0KQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKGNh
bmRpZGF0ZS0+b3Bjb2RlKCkgPT0gc3RvcmVPcGNvZGUgJiYgY2FuZGlkYXRlLT5jaGlsZCgwKSA9
PSB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAg
ICAgaWYgKGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gbG9hZE9wY29kZSAmJiBjYW5kaWRhdGUgPT0g
dmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBpZiAobWF0Y2hlcy5pc0Vt
cHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbV92YWx1ZS0+cmVw
bGFjZVdpdGhOb3AoKTsKKyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVyPgogICAgIHZvaWQg
aGFuZGxlTWVtb3J5VmFsdWUoVmFsdWUqIHB0ciwgSGVhcFJhbmdlIHJhbmdlLCBjb25zdCBGaWx0
ZXImIGZpbHRlcikKICAgICB7CiAgICAgICAgIGhhbmRsZU1lbW9yeVZhbHVlKApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxOTcwMzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUs
MTUgKzI1NSw2IEBAIGVudW0gY2xhc3MgUGxhblN0YWdlIHsKICAgICBBZnRlckZpeHVwCiB9Owog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotYm9vbCBjaGVja0FuZFNldChUJiBs
ZWZ0LCBVIHJpZ2h0KQotewotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgbGVmdCA9IHJpZ2h0OwotICAgIHJldHVybiB0cnVlOwotfQotCiAvLyBJZiBw
b3NzaWJsZSwgdGhpcyB3aWxsIGFjcXVpcmUgYSBsb2NrIHRvIG1ha2Ugc3VyZSB0aGF0IGlmIG11
bHRpcGxlIHRocmVhZHMKIC8vIHN0YXJ0IGNyYXNoaW5nIGF0IHRoZSBzYW1lIHRpbWUsIHlvdSBn
ZXQgY29oZXJlbnQgZHVtcCBvdXRwdXQuIFVzZSB0aGlzIG9ubHkKIC8vIHdoZW4geW91J3JlIGZv
cmNpbmcgYSBjcmFzaCB3aXRoIGRpYWdub3N0aWNzLgpJbmRleDogU291cmNlL1dURi93dGYvQmFj
a3dhcmRzR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWNrd2FyZHNHcmFw
aC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvQmFja3dhcmRzR3JhcGguaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDI5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdURl9CYWNrd2FyZHNHcmFwaF9oCisjZGVmaW5l
IFdURl9CYWNrd2FyZHNHcmFwaF9oCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2lu
Y2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPgorY2xh
c3MgQmFja3dhcmRzR3JhcGggeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhY2t3YXJkc0NG
Ryk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisKKyAgICBjbGFzcyBO
b2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5vZGUodHlwZW5hbWUgR3JhcGg6Ok5vZGUgbm9k
ZSA9IHR5cGVuYW1lIEdyYXBoOjpOb2RlKCkpCisgICAgICAgICAgICA6IG1fbm9kZShub2RlKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgTm9kZSByb290KCkKKyAgICAg
ICAgeworICAgICAgICAgICAgTm9kZSByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQubV9ub2Rl
ID0gMDsKKyAgICAgICAgICAgIHJlc3VsdC5tX2lzUm9vdCA9IHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IE5vZGUmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9ub2Rl
ID09IG90aGVyLm1fbm9kZQorICAgICAgICAgICAgICAgICYmIG1faXNSb290ID09IG90aGVyLm1f
aXNSb290OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE5vZGUm
IG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgICAgIH0KKworICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QgeyByZXR1cm4gKnRoaXMgIT0gTm9kZSgpOyB9CisKKyAgICAgICAgYm9vbCBpc1Jvb3QoKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pc1Jvb3Q7CisgICAgICAgIH0K
KworICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9u
b2RlOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBtX25v
ZGU7CisgICAgICAgIGJvb2wgbV9pc1Jvb3QgeyBmYWxzZSB9OworICAgIH07CisKKyAgICBjbGFz
cyBTZXQgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2V0KCkKKyAgICAgICAgeworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBib29sIGFkZChjb25zdCBOb2RlJiBub2RlKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobm9kZS5pc1Jvb3QoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y2hlY2tBbmRTZXQobV9oYXNSb290LCB0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiBtX3NldC5h
ZGQobm9kZS5ub2RlKCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCByZW1vdmUoY29uc3Qg
Tm9kZSYgbm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUuaXNSb290KCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrQW5kU2V0KG1faGFzUm9vdCwgZmFsc2UpOworICAg
ICAgICAgICAgcmV0dXJuIG1fc2V0LnJlbW92ZShub2RlLm5vZGUoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IE5vZGUmIG5vZGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChub2RlLmlzUm9vdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBtX2hhc1Jv
b3Q7CisgICAgICAgICAgICByZXR1cm4gbV9zZXQuY29udGFpbnMobm9kZS5ub2RlKCkpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dC5wcmludCgie2hhc1Jvb3QgPSAiLCBtX2hhc1Jvb3QsICIs
IHNldCA9ICIsIG1fc2V0LCAifSIpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6
CisgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpTZXQgbV9zZXQ7CisgICAgICAgIGJvb2wgbV9oYXNS
b290IHsgZmFsc2UgfTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBj
bGFzcyBNYXAgeworICAgIHB1YmxpYzoKKyAgICAgICAgTWFwKEdyYXBoJiBncmFwaCkKKyAgICAg
ICAgICAgIDogbV9tYXAoZ3JhcGgubmV3TWFwKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAgICB7CisgICAgICAgICAgICBtX21hcC5jbGVhcigp
OworICAgICAgICAgICAgbV9yb290ID0gVCgpOworICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCkgKyAxOyB9CisKKyAgICAgICAgVCYg
b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghaW5k
ZXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcm9vdDsKKyAgICAgICAgICAgIHJldHVybiBt
X21hcFtpbmRleCAtIDFdOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVCYgb3BlcmF0b3Jb
XShzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAoKmNv
bnN0X2Nhc3Q8TWFwKj4odGhpcykpW2luZGV4XTsKKyAgICAgICAgfQorCisgICAgICAgIFQmIG9w
ZXJhdG9yW10oY29uc3QgTm9kZSYgbm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5v
ZGUuaXNSb290KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcm9vdDsKKyAgICAgICAgICAg
IHJldHVybiBtX21hcFtub2RlLm5vZGUoKV07CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBU
JiBvcGVyYXRvcltdKGNvbnN0IE5vZGUmIG5vZGUpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAoKmNvbnN0X2Nhc3Q8TWFwKj4odGhpcykpW25vZGVdOworICAgICAgICB9Cisg
ICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpNYXA8VD4gbV9t
YXA7CisgICAgICAgIFQgbV9yb290OworICAgIH07CisKKyAgICB0eXBlZGVmIFZlY3RvcjxOb2Rl
LCA0PiBMaXN0OworCisgICAgQmFja3dhcmRzR3JhcGgoR3JhcGgmIGdyYXBoKQorICAgICAgICA6
IG1fZ3JhcGgoZ3JhcGgpCisgICAgeworICAgICAgICBHcmFwaFdvcmtsaXN0PHR5cGVuYW1lIEdy
YXBoOjpOb2RlLCB0eXBlbmFtZSBHcmFwaDo6U2V0PiB3b3JrbGlzdDsKKworICAgICAgICBhdXRv
IGFkZFJvb3RTdWNjZXNzb3IgPSBbJl0gKHR5cGVuYW1lIEdyYXBoOjpOb2RlIG5vZGUpIHsKKyAg
ICAgICAgICAgIGlmICh3b3JrbGlzdC5wdXNoKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgbV9y
b290U3VjY2Vzc29yTGlzdC5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICAgICAgbV9yb290U3Vj
Y2Vzc29yU2V0LnNldChub2RlKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAodHlwZW5hbWUgR3Jh
cGg6Ok5vZGUgbm9kZSA9IHdvcmtsaXN0LnBvcCgpKQorICAgICAgICAgICAgICAgICAgICB3b3Jr
bGlzdC5wdXNoQWxsKGdyYXBoLnByZWRlY2Vzc29ycyhub2RlKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdyYXBoLm51bU5v
ZGVzKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKHR5cGVuYW1lIEdyYXBoOjpOb2RlIG5vZGUg
PSBncmFwaC5ub2RlKGkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFncmFwaC5zdWNjZXNzb3Jz
KG5vZGUpLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgYWRkUm9vdFN1Y2Nlc3Nvcihub2Rl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQg
dGhlcmUgd2lsbCBiZSBzb21lIG5vZGVzIGluIHRoZSBncmFwaCB0aGF0IGFyZW4ndCBrbm93biB0
byB0aGUgd29ya2xpc3QuIFdlCisgICAgICAgIC8vIGNvdWxkIGFkZCBhbnkgb3IgYWxsIG9mIHRo
ZW0gdG8gdGhlIHJvb3Qgc3VjY2Vzc29ycyBsaXN0LiBBZGRpbmcgYWxsIG9mIHRoZW0gd291bGQg
YmUgYSBiYWQKKyAgICAgICAgLy8gcGVzc2ltaXNhdGlvbi4gSWRlYWxseSB3ZSB3b3VsZCBwaWNr
IHRoZSBvbmVzIHRoYXQgaGF2ZSBiYWNrd2FyZCBlZGdlcyBidXQgbm8gZm9yd2FyZAorICAgICAg
ICAvLyBlZGdlcy4gVGhhdCB3b3VsZCByZXF1aXJlIHRoaW5raW5nLCBzbyB3ZSBqdXN0IHVzZSBh
IHJvdWdoIGhldXJpc3RpYzogYWRkIHRoZSBoaWdoZXN0CisgICAgICAgIC8vIG51bWJlcmVkIG5v
ZGVzIGZpcnN0LCB3aGljaCBpcyB0b3RhbGx5IGZpbmUgaWYgdGhlIGlucHV0IHByb2dyYW0gaXMg
YWxyZWFkeSBzb3J0ZWQgbmljZWx5LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBncmFwaC5u
dW1Ob2RlcygpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAodHlwZW5hbWUgR3JhcGg6Ok5vZGUg
bm9kZSA9IGdyYXBoLm5vZGUoaSkpCisgICAgICAgICAgICAgICAgYWRkUm9vdFN1Y2Nlc3Nvcihu
b2RlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIE5vZGU6
OnJvb3QoKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBNYXA8VD4gbmV3TWFw
KCkgeyByZXR1cm4gTWFwPFQ+KG1fZ3JhcGgpOyB9CisKKyAgICBMaXN0IHN1Y2Nlc3NvcnMoY29u
c3QgTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLmlzUm9vdCgpKQorICAgICAg
ICAgICAgcmV0dXJuIG1fcm9vdFN1Y2Nlc3Nvckxpc3Q7CisgICAgICAgIExpc3QgcmVzdWx0Owor
ICAgICAgICBmb3IgKHR5cGVuYW1lIEdyYXBoOjpOb2RlIHByZWRlY2Vzc29yIDogbV9ncmFwaC5w
cmVkZWNlc3NvcnMobm9kZS5ub2RlKCkpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwcmVk
ZWNlc3Nvcik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgTGlzdCBwcmVk
ZWNlc3NvcnMoY29uc3QgTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLmlzUm9v
dCgpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBMaXN0IHJlc3VsdDsKKyAg
ICAgICAgCisgICAgICAgIGlmIChtX3Jvb3RTdWNjZXNzb3JTZXQuY29udGFpbnMobm9kZS5ub2Rl
KCkpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChOb2RlOjpyb290KCkpOworCisgICAgICAg
IGZvciAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgc3VjY2Vzc29yIDogbV9ncmFwaC5zdWNjZXNzb3Jz
KG5vZGUubm9kZSgpKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3VjY2Vzc29yKTsKKwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIGluZGV4KGNvbnN0
IE5vZGUmIG5vZGUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobm9kZS5pc1Jvb3QoKSkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9ncmFwaC5pbmRleChub2RlLm5v
ZGUoKSkgKyAxOworICAgIH0KKworICAgIE5vZGUgbm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmICghaW5kZXgpCisgICAgICAgICAgICByZXR1cm4gTm9kZTo6cm9v
dCgpOworICAgICAgICByZXR1cm4gbV9ncmFwaC5ub2RlKGluZGV4IC0gMSk7CisgICAgfQorCisg
ICAgdW5zaWduZWQgbm9kZU5vZGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2dy
YXBoLnNpemUoKSArIDE7CisgICAgfQorCisgICAgQ1N0cmluZyBkdW1wKE5vZGUgbm9kZSkgY29u
c3QKKyAgICB7CisgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICAgICAgaWYgKCFu
b2RlKQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICAgICAgZWxzZSBpZiAo
bm9kZS5pc1Jvb3QoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgicm9vdCIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBvdXQucHJpbnQobV9ncmFwaC5kdW1wKG5vZGUubm9kZSgpKSk7Cisg
ICAgICAgIHJldHVybiBvdXQudG9DU3RyaW5nKCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtTm9kZXMoKTsgKytpKSB7CisgICAgICAgICAgICBOb2RlIG5vZGUgPSB0aGlzLT5u
b2RlKGkpOworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgb3V0LnByaW50KGR1bXAobm9kZSksICI6XG4iKTsKKyAgICAgICAgICAg
IG91dC5wcmludCgiICAgIFByZWRzOiAiKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21t
YTsKKyAgICAgICAgICAgIGZvciAoTm9kZSBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycyhub2Rl
KSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGR1bXAocHJlZGVjZXNzb3IpKTsK
KyAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAg
IFN1Y2NzOiAiKTsKKyAgICAgICAgICAgIGNvbW1hID0gQ29tbWFQcmludGVyKCk7CisgICAgICAg
ICAgICBmb3IgKE5vZGUgc3VjY2Vzc29yIDogc3VjY2Vzc29ycyhub2RlKSkKKyAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIGR1bXAoc3VjY2Vzc29yKSk7CisgICAgICAgICAgICBvdXQu
cHJpbnQoIlxuIik7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGgmIG1f
Z3JhcGg7CisgICAgTGlzdCBtX3Jvb3RTdWNjZXNzb3JzOworICAgIHR5cGVuYW1lIEdyYXBoOjpT
ZXQgbV9yb290U3VjY2Vzc29yU2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBXVEZfQmFja3dhcmRzR3JhcGhfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Eb21pbmF0
b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRG9taW5hdG9ycy5oCShyZXZpc2lv
biAxOTcwMzUpCisrKyBTb3VyY2UvV1RGL3d0Zi9Eb21pbmF0b3JzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgIAogICAgICAgICAvLyBQbGFpbiBzdGFjay1i
YXNlZCB3b3JrbGlzdCBiZWNhdXNlIHdlIGFyZSBndWFyYW50ZWVkIHRvIHNlZSBlYWNoIGJsb2Nr
IGV4YWN0bHkgb25jZSBhbnl3YXkuCiAgICAgICAgIFZlY3RvcjxHcmFwaE5vZGVXaXRoT3JkZXI8
dHlwZW5hbWUgR3JhcGg6Ok5vZGU+PiB3b3JrbGlzdDsKLSAgICAgICAgd29ya2xpc3QuYXBwZW5k
KEdyYXBoTm9kZVdpdGhPcmRlcjx0eXBlbmFtZSBHcmFwaDo6Tm9kZT4obV9ncmFwaC5ub2RlKDAp
LCBHcmFwaFZpc2l0T3JkZXI6OlByZSkpOworICAgICAgICB3b3JrbGlzdC5hcHBlbmQoR3JhcGhO
b2RlV2l0aE9yZGVyPHR5cGVuYW1lIEdyYXBoOjpOb2RlPihtX2dyYXBoLnJvb3QoKSwgR3JhcGhW
aXNpdE9yZGVyOjpQcmUpKTsKICAgICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgIEdyYXBoTm9kZVdpdGhPcmRlcjx0eXBlbmFtZSBHcmFwaDo6Tm9kZT4gaXRl
bSA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CiAgICAgICAgICAgICBzd2l0Y2ggKGl0ZW0ub3JkZXIp
IHsKQEAgLTM0Nyw3ICszNDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gb2Ygbm90IG5v
dGljaW5nIEEtPkMgdW50aWwgd2UncmUgZG9uZSBwcm9jZXNzaW5nIEIuCiAKICAgICAgICAgICAg
IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8dHlwZW5hbWUgR3JhcGg6Ok5vZGUsIHVuc2lnbmVk
LCB0eXBlbmFtZSBHcmFwaDo6U2V0PiB3b3JrbGlzdDsKLSAgICAgICAgICAgIHdvcmtsaXN0LnB1
c2gobV9ncmFwaC5ub2RlKDApLCAwKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LnB1c2gobV9ncmFw
aC5yb290KCksIDApOwogICAgICAgICAKICAgICAgICAgICAgIHdoaWxlIChHcmFwaE5vZGVXaXRo
PHR5cGVuYW1lIEdyYXBoOjpOb2RlLCB1bnNpZ25lZD4gaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7
CiAgICAgICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBpdGVtLm5vZGU7
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMTk3MDM1KQorKysgU291cmNlL1dU
Ri93dGYvU3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2Eu
Y29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjc5LDYgKzI3OSwxNSBAQCBpbmxpbmUgdm9pZCBp
bnNlcnRJbnRvQm91bmRlZFZlY3RvcihWZWN0CiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMxODE1CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0NvbXBpbGF0
aW9uVGhyZWFkKCk7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Citib29sIGNo
ZWNrQW5kU2V0KFQmIGxlZnQsIFUgcmlnaHQpCit7CisgICAgaWYgKGxlZnQgPT0gcmlnaHQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBsZWZ0ID0gcmlnaHQ7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAvLyBUaGlzIHZlcnNpb24gb2YgcGxhY2VtZW50
IG5ldyBvbWl0cyBhIDAgY2hlY2suCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272227</attachid>
            <date>2016-02-25 13:10:26 -0800</date>
            <delta_ts>2016-02-25 14:25:58 -0800</delta_ts>
            <desc>better approach</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>15185</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGlt
aW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDE5NzAzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjYsMTAgKzY2LDY3IEBAIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwogCiB0eXBlZGVmIFZlY3RvcjxNZW1vcnlWYWx1ZSosIDE+IE1lbW9yeU1hdGNoZXM7CiAK
K2NsYXNzIE1lbW9yeVZhbHVlTWFwIHsKK3B1YmxpYzoKKyAgICBNZW1vcnlWYWx1ZU1hcCgpIHsg
fQorCisgICAgdm9pZCBhZGQoTWVtb3J5VmFsdWUqIG1lbW9yeSkKKyAgICB7CisgICAgICAgIE1h
dGNoZXMmIG1hdGNoZXMgPSBtX21hcC5hZGQobWVtb3J5LT5sYXN0Q2hpbGQoKSwgTWF0Y2hlcygp
KS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGlmIChtYXRjaGVzLmNvbnRhaW5zKG1lbW9yeSkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1hdGNoZXMuYXBwZW5kKG1lbW9yeSk7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHJlbW92ZUlm
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBtX21hcC5yZW1vdmVJZigK
KyAgICAgICAgICAgIFsmXSAoSGFzaE1hcDxWYWx1ZSosIE1hdGNoZXM+OjpLZXlWYWx1ZVBhaXJU
eXBlJiBlbnRyeSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgZW50cnkudmFsdWUucmVtb3Zl
QWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVmFsdWUqIHZhbHVlKSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNZW1vcnlWYWx1ZSogbWVtb3J5ID0g
dmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmdW5jdG9yKG1lbW9yeSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVucnR5
LnZhbHVlLmlzRW1wdHkoKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIE1hdGNoZXMq
IGZpbmQoVmFsdWUqIHB0cikKKyAgICB7CisgICAgICAgIGF1dG8gaXRlciA9IG1fbWFwLmZpbmQo
cHRyKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZpdGVyLT52YWx1ZTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIE1lbW9yeVZhbHVlKiBmaW5kKFZhbHVlKiBw
dHIsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpZiAoTWF0Y2hlcyog
bWF0Y2hlcyA9IGRhdGEubWVtb3J5VmFsdWVzQXRUYWlsLmZpbmQocHRyKSkgeworICAgICAgICAg
ICAgZm9yIChWYWx1ZSogY2FuZGlkYXRlVmFsdWUgOiAqbWF0Y2hlcykgeworICAgICAgICAgICAg
ICAgIGlmIChNZW1vcnlWYWx1ZSogY2FuZGlkYXRlTWVtb3J5ID0gY2FuZGlkYXRlVmFsdWUtPmFz
PE1lbW9yeVZhbHVlPigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdG9yKGNhbmRp
ZGF0ZU1lbW9yeSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlTWVt
b3J5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIC8vIFRoaXMgdXNl
cyBNYXRjaGVzIGZvciB0d28gcmVhc29uczoKKyAgICAvLyAtIEl0IGNhbm5vdCBiZSBhIE1lbW9y
eVZhbHVlKiBiZWNhdXNlIHRoZSBrZXkgaXMgaW1wcmVjaXNlLiBNYW55IE1lbW9yeVZhbHVlcyBj
b3VsZCBoYXZlIHRoZQorICAgIC8vICAgc2FtZSBrZXkgd2hpbGUgYmVpbmcgdW5hbGlhc2VkLgor
ICAgIC8vIC0gSXQgY2FuJ3QgYmUgYSBNZW1vcnlNYXRjaGVzIGFycmF5IGJlY2F1c2UgdGhlIE1l
bW9yeVZhbHVlKidzIGNvdWxkIGJlIHR1cm5lZCBpbnRvIElkZW50aXR5J3MuCisgICAgSGFzaE1h
cDxWYWx1ZSosIE1hdGNoZXM+IG1fbWFwOworfTsKKwogc3RydWN0IEltcHVyZUJsb2NrRGF0YSB7
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewotICAgICAgICBv
dXQucHJpbnQoInt3cml0ZXMgPSAiLCB3cml0ZXMsICIsIG1lbW9yeVZhbHVlcyA9IHsiKTsKKyAg
ICAgICAgb3V0LnByaW50KCJ7cmVhZHMgPSAiLCByZWFkcywgIiwgd3JpdGVzID0gIiwgd3JpdGVz
LCAiLCBtZW1vcnlWYWx1ZXMgPSB7Iik7CiAKICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwog
ICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbWVtb3J5VmFsdWVzKQpAQCAtNzcsMTQgKzEzNCwx
MiBAQCBzdHJ1Y3QgSW1wdXJlQmxvY2tEYXRhIHsKIAogICAgICAgICBvdXQucHJpbnQoIn19Iik7
CiAgICAgfQotICAgIAotICAgIFJhbmdlU2V0PEhlYXBSYW5nZT4gd3JpdGVzOwotICAgIAotICAg
IC8vIE1hcHMgYW4gYWRkcmVzcyBiYXNlIHRvIGFsbCBvZiB0aGUgTWVtb3J5VmFsdWVzIHRoYXQg
ZG8gdGhpbmdzIHRvIGl0LiBBZnRlciB3ZSdyZSBkb25lCi0gICAgLy8gcHJvY2Vzc2luZyBhIG1h
cCwgdGhpcyB0ZWxscyB1cyB0aGUgdmFsdWVzIGF0IHRhaWwuIE5vdGUgdGhhdCB3ZSB1c2UgYSBN
YXRjaGVzIGFycmF5Ci0gICAgLy8gYmVjYXVzZSB0aG9zZSBNZW1vcnlWYWx1ZXMgY291bGQgYmUg
dHVybmVkIGludG8gSWRlbnRpdHkncywgYW5kIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHRoaXMKLSAg
ICAvLyBhcyB3ZSBnby4KLSAgICBIYXNoTWFwPFZhbHVlKiwgTWF0Y2hlcz4gbWVtb3J5VmFsdWVz
OworCisgICAgUmFuZ2VTZXQ8SGVhcFJhbmdlPiByZWFkczsgLy8gVGhpcyBvbmx5IGdldHMgdXNl
ZCBmb3IgZm9yd2FyZCBzdG9yZSBlbGltaW5hdGlvbi4KKyAgICBSYW5nZVNldDxIZWFwUmFuZ2U+
IHdyaXRlczsgLy8gVGhpcyBnZXRzIHVzZWQgZm9yIGJvdGggbG9hZCBhbmQgc3RvcmUgZWxpbWlu
YXRpb24uCisKKyAgICBNZW1vcnlWYWx1ZU1hcCBzdG9yZXNBdEhlYWQ7CisgICAgTWVtb3J5VmFs
dWVNYXAgbWVtb3J5VmFsdWVzQXRUYWlsOwogfTsKIAogY2xhc3MgQ1NFIHsKQEAgLTEwNCwyMCAr
MTU5LDMyIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3du
ZXJzKCk7CiAKKyAgICAgICAgLy8gU3VtbWFyaXplIHRoZSBpbXB1cmUgZWZmZWN0cyBvZiBlYWNo
IGJsb2NrLCBhbmQgdGhlIGltcHVyZSB2YWx1ZXMgYXZhaWxhYmxlIGF0IHRoZSBlbmQgb2YKKyAg
ICAgICAgLy8gZWFjaCBibG9jay4gVGhpcyBkb2Vzbid0IGVkaXQgY29kZSB5ZXQuCiAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIEltcHVyZUJs
b2NrRGF0YSYgZGF0YSA9IG1faW1wdXJlQmxvY2tEYXRhW2Jsb2NrXTsKICAgICAgICAgICAgIGZv
ciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEhlYXBSYW5n
ZSB3cml0ZXMgPSB2YWx1ZS0+ZWZmZWN0cygpLndyaXRlcykKKyAgICAgICAgICAgICAgICBFZmZl
Y3RzIGVmZmVjdHMgPSB2YWx1ZS0+ZWZmZWN0cygpOworICAgICAgICAgICAgICAgIE1lbW9yeVZh
bHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgKG1lbW9yeSAmJiBtZW1vcnktPmlzU3RvcmUoKQorICAgICAg
ICAgICAgICAgICAgICAmJiAhZGF0YS5yZWFkcy5vdmVybGFwcyhtZW1vcnktPnJhbmdlKCkpCisg
ICAgICAgICAgICAgICAgICAgICYmICFkYXRhLndyaXRlcy5vdmVybGFwcyhtZW1vcnktPnJhbmdl
KCkpKQorICAgICAgICAgICAgICAgICAgICBkYXRhLnN0b3Jlc0F0SGVhZC5hZGQobWVtb3J5KTsK
KyAgICAgICAgICAgICAgICBkYXRhLnJlYWRzLmFkZChlZmZlY3RzLnJlYWRzKTsKKworICAgICAg
ICAgICAgICAgIGlmIChIZWFwUmFuZ2Ugd3JpdGVzID0gZWZmZWN0cy53cml0ZXMpCiAgICAgICAg
ICAgICAgICAgICAgIGNsb2JiZXIoZGF0YSwgd3JpdGVzKTsKIAotICAgICAgICAgICAgICAgIGlm
IChNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpKQotICAgICAg
ICAgICAgICAgICAgICBhZGRNZW1vcnlWYWx1ZShkYXRhLCBtZW1vcnkpOworICAgICAgICAgICAg
ICAgIGlmIChtZW1vcnkpCisgICAgICAgICAgICAgICAgICAgIGRhdGEubWVtb3J5VmFsdWVzQXRU
YWlsLmFkZChtZW1vcnkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJCbG9jayAiLCAqYmxvY2ssICI6ICIsIGRhdGEs
ICJcbiIpOwogICAgICAgICB9CiAKKyAgICAgICAgLy8gUGVyZm9ybSBDU0UuIFRoaXMgZWRpdHMg
Y29kZS4KICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBwb3N0T3JkZXIgPSBtX3Byb2MuYmxv
Y2tzSW5Qb3N0T3JkZXIoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcG9zdE9yZGVyLnNp
emUoKTsgaS0tOykgewogICAgICAgICAgICAgbV9ibG9jayA9IHBvc3RPcmRlcltpXTsKQEAgLTEz
Myw2ICsyMDAsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2ltcHVyZUJsb2NrRGF0YVttX2Js
b2NrXSA9IG1fZGF0YTsKICAgICAgICAgfQogCisgICAgICAgIC8vIFRoZSBwcmV2aW91cyBwYXNz
IG1pZ2h0IGhhdmUgcmVxdWVzdGVkIHRoYXQgd2UgaW5zZXJ0IGNvZGUgaW4gc29tZSBiYXNpYyBi
bG9jayBvdGhlciB0aGFuCisgICAgICAgIC8vIHRoZSBvbmUgdGhhdCBpdCB3YXMgbG9va2luZyBh
dC4gVGhpcyBpbnNlcnRzIHRoZW0uCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFsdWVJbmRleCA9IDA7IHZhbHVl
SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgpIHsKICAgICAgICAgICAgICAgICBh
dXRvIGl0ZXIgPSBtX3NldHMuZmluZChibG9jay0+YXQodmFsdWVJbmRleCkpOwpAQCAtMTYyLDMw
ICsyMzEsNjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisg
ICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsK
KyAgICAgICAgaWYgKG1lbW9yeSAmJiBwcm9jZXNzTWVtb3J5QmVmb3JlQ2xvYmJlcihtZW1vcnkp
KQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmIChIZWFwUmFuZ2Ugd3JpdGVzID0g
bV92YWx1ZS0+ZWZmZWN0cygpLndyaXRlcykKICAgICAgICAgICAgIGNsb2JiZXIobV9kYXRhLCB3
cml0ZXMpOwogICAgICAgICAKLSAgICAgICAgaWYgKE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBtX3Zh
bHVlLT5hczxNZW1vcnlWYWx1ZT4oKSkKLSAgICAgICAgICAgIHByb2Nlc3NNZW1vcnkobWVtb3J5
KTsKKyAgICAgICAgaWYgKG1lbW9yeSkKKyAgICAgICAgICAgIHByb2Nlc3NNZW1vcnlBZnRlckNs
b2JiZXIobWVtb3J5KTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB3ZSBnb3Qgcmlk
IG9mIHRoZSBvcGVyYXRpb24uIElmIHlvdSBjaGFuZ2VkIElSIGluIHRoaXMgZnVuY3Rpb24sIHlv
dSBoYXZlIHRvCisgICAgLy8gc2V0IG1fY2hhbmdlZCBldmVuIGlmIHlvdSBhbHNvIHJldHVybiB0
cnVlLgorICAgIGJvb2wgcHJvY2Vzc01lbW9yeUJlZm9yZUNsb2JiZXIoTWVtb3J5VmFsdWUqIG1l
bW9yeSkKKyAgICB7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1lbW9yeS0+Y2hpbGQoMCk7Cisg
ICAgICAgIFZhbHVlKiBwdHIgPSBtZW1vcnktPmxhc3RDaGlsZCgpOworICAgICAgICBIZWFwUmFu
Z2UgcmFuZ2UgPSBtZW1vcnktPnJhbmdlKCk7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gbWVt
b3J5LT5vZmZzZXQoKTsKKworICAgICAgICBzd2l0Y2ggKG1lbW9yeS0+b3Bjb2RlKCkpIHsKKyAg
ICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RvcmVCZWZvcmVD
bG9iYmVyKAorICAgICAgICAgICAgICAgIHB0ciwgcmFuZ2UsCisgICAgICAgICAgICAgICAgWyZd
IChNZW1vcnlWYWx1ZSogY2FuZGlkYXRlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGNhbmRpZGF0ZS0+b2Zmc2V0KCkgPT0gb2Zmc2V0CisgICAgICAgICAgICAgICAgICAg
ICAgICAmJiAoKGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gU3RvcmU4ICYmIGNhbmRpZGF0ZS0+Y2hp
bGQoMCkgPT0gdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGNhbmRpZGF0
ZS0+b3Bjb2RlKCkgPT0gTG9hZDggJiYgY2FuZGlkYXRlID09IHZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIHJldHVybiBoYW5k
bGVTdG9yZUJlZm9yZUNsb2JiZXIoCisgICAgICAgICAgICAgICAgcHRyLCByYW5nZSwKKyAgICAg
ICAgICAgICAgICBbJl0gKE1lbW9yeVZhbHVlKiBjYW5kaWRhdGUpIC0+IGJvb2wgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlLT5vZmZzZXQoKSA9PSBvZmZzZXQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICYmICgoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBTdG9yZTE2ICYm
IGNhbmRpZGF0ZS0+Y2hpbGQoMCkgPT0gdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgKGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gTG9hZDE2ICYmIGNhbmRpZGF0ZSA9PSB2YWx1
ZSkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAg
ICAgcmV0dXJuIGhhbmRsZVN0b3JlQmVmb3JlQ2xvYmJlcigKKyAgICAgICAgICAgICAgICBwdHIs
IHJhbmdlLAorICAgICAgICAgICAgICAgIFsmXSAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0ZSkgLT4g
Ym9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGUtPm9mZnNldCgpID09
IG9mZnNldAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChjYW5kaWRhdGUtPm9wY29kZSgp
ID09IFN0b3JlICYmIGNhbmRpZGF0ZS0+Y2hpbGQoMCkgPT0gdmFsdWUpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgKGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gTG9hZCAmJiBjYW5kaWRh
dGUgPT0gdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHZvaWQgY2xv
YmJlcihJbXB1cmVCbG9ja0RhdGEmIGRhdGEsIEhlYXBSYW5nZSB3cml0ZXMpCiAgICAgewogICAg
ICAgICBkYXRhLndyaXRlcy5hZGQod3JpdGVzKTsKICAgICAgICAgCi0gICAgICAgIGRhdGEubWVt
b3J5VmFsdWVzLnJlbW92ZUlmKAotICAgICAgICAgICAgWyZdIChIYXNoTWFwPFZhbHVlKiwgTWF0
Y2hlcz46OktleVZhbHVlUGFpclR5cGUmIGVudHJ5KSAtPiBib29sIHsKLSAgICAgICAgICAgICAg
ICBlbnRyeS52YWx1ZS5yZW1vdmVBbGxNYXRjaGluZygKLSAgICAgICAgICAgICAgICAgICAgWyZd
IChWYWx1ZSogdmFsdWUpIC0+IGJvb2wgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1l
bW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lbW9yeS0+cmFuZ2UoKS5vdmVybGFwcyh3cml0ZXMp
OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS52YWx1ZS5pc0VtcHR5KCk7Cisg
ICAgICAgIGRhdGEubWVtb3J5VmFsdWVzQXRUYWlsLnJlbW92ZUlmKAorICAgICAgICAgICAgWyZd
IChNZW1vcnlWYWx1ZSogbWVtb3J5KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1lbW9yeS0+
cmFuZ2UoKS5vdmVybGFwcyh3cml0ZXMpOwogICAgICAgICAgICAgfSk7CiAgICAgfQogCi0gICAg
dm9pZCBwcm9jZXNzTWVtb3J5KE1lbW9yeVZhbHVlKiBtZW1vcnkpCisgICAgdm9pZCBwcm9jZXNz
TWVtb3J5QWZ0ZXJDbG9iYmVyKE1lbW9yeVZhbHVlKiBtZW1vcnkpCiAgICAgewogICAgICAgICBW
YWx1ZSogcHRyID0gbWVtb3J5LT5sYXN0Q2hpbGQoKTsKICAgICAgICAgSGVhcFJhbmdlIHJhbmdl
ID0gbWVtb3J5LT5yYW5nZSgpOwpAQCAtMzA0LDcgKzQxMCw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgU3RvcmU4OgogICAgICAgICBjYXNlIFN0b3JlMTY6CiAgICAgICAgIGNhc2UgU3RvcmU6
IHsKLSAgICAgICAgICAgIGFkZE1lbW9yeVZhbHVlKG1fZGF0YSwgbWVtb3J5KTsKKyAgICAgICAg
ICAgIG1fZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwuYWRkKG1lbW9yeSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCkBAIC0zMTYsNiArNDIyLDc0IEBAIHByaXZhdGU6CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVyPgorICAgIGJvb2wgaGFuZGxlU3RvcmVCZWZv
cmVDbG9iYmVyKFZhbHVlKiBwdHIsIEhlYXBSYW5nZSByYW5nZSwgY29uc3QgRmlsdGVyJiBmaWx0
ZXIpCisgICAgeworICAgICAgICBpZiAoZmluZE1lbW9yeVZhbHVlKHB0ciwgcmFuZ2UsIGZpbHRl
cikuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIG1fdmFs
dWUtPnJlcGxhY2VXaXRoTm9wKCk7CisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlcj4KKyAg
ICBib29sIGhhbmRsZVN0b3JlQWZ0ZXJDbG9iYmVyKFZhbHVlKiBwdHIsIEhlYXBSYW5nZSByYW5n
ZSwgY29uc3QgRmlsdGVyJiBmaWx0ZXIpCisgICAgeworICAgICAgICAvLyBXZSBjYW4gZWxpbWlu
YXRlIGEgc3RvcmUgaWYgZXZlcnkgZm9yd2FyZCBwYXRoIGhpdHMgYSBzdG9yZSB0byB0aGUgc2Ft
ZSBsb2NhdGlvbiBiZWZvcmUKKyAgICAgICAgLy8gaGl0dGluZyBhbnkgb3BlcmF0aW9uIHRoYXQg
b2JzZXJ2ZXMgdGhlIHN0b3JlLiBUaGlzIHNlYXJjaCBzZWVtcyBsaWtlIGl0IHNob3VsZCBiZQor
ICAgICAgICAvLyBleHBlbnNpdmUsIGJ1dCBpbiB0aGUgb3ZlcndoZWxtaW5nIG1ham9yaXR5IG9m
IGNhc2VzIGl0IHdpbGwgYWxtb3N0IGltbWVkaWF0ZWx5IGhpdCBhbiAKKyAgICAgICAgLy8gb3Bl
cmF0aW9uIHRoYXQgaW50ZXJmZXJlcy4KKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgIGRhdGFMb2coKm1fdmFsdWUsICI6IGxvb2tpbmcgZm9yd2FyZCBmb3Igc3RvcmVzIHRvICIs
ICpwdHIsICIuLi5cbiIpOworCisgICAgICAgIGF1dG8ga2lsbCA9IFsmXSAoKSB7CisgICAgICAg
ICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aE5vcCgpOworICAgICAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBGaXJzdCBzZWFyY2ggZm9yd2FyZCBpbiB0
aGlzIGJhc2ljIGJsb2NrLgorICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgY29vbCB0byBn
ZXQgcmlkIG9mIHRoaXMgbGluZWFyIHNlYXJjaC4gSXQncyBub3Qgc3VwZXIgY3JpdGljYWwgc2lu
Y2UKKyAgICAgICAgLy8gd2Ugd2lsbCBwcm9iYWJseSBiYWlsIG91dCB2ZXJ5IHF1aWNrbHksIGJ1
dCBpdCAqaXMqIGFubm95aW5nLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gbV9pbmRl
eCArIDE7IGluZGV4IDwgbV9ibG9jay0+c2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBW
YWx1ZSogdmFsdWUgPSBtX2Jsb2NrLT5hdChpbmRleCk7CisKKyAgICAgICAgICAgIGlmIChNZW1v
cnlWYWx1ZSogbWVtb3J5VmFsdWUgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobWVtb3J5VmFsdWUtPmxhc3RDaGlsZCgpID09IHB0ciAmJiBmaWx0ZXIo
bWVtb3J5VmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGtpbGwoKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSB2YWx1ZS0+ZWZmZWN0cygpOworICAgICAg
ICAgICAgaWYgKGVmZmVjdHMucmVhZHMub3ZlcmxhcHMocmFuZ2UpIHx8IGVmZmVjdHMud3JpdGVz
Lm92ZXJsYXBzKHJhbmdlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICBCbG9ja1dvcmtsaXN0IHdvcmtsaXN0OworICAgICAgICB3b3JrbGlzdC5w
dXNoQWxsKG1fYmxvY2stPnN1Y2Nlc3NvcnMoKSk7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgICAgICBJbXB1cmVCbG9ja0RhdGEm
IGRhdGEgPSBtX2ltcHVyZUJsb2NrRGF0YVtibG9ja107CisKKyAgICAgICAgICAgIE1lbW9yeVZh
bHVlKiBtYXRjaCA9IGRhdGEuc3RvcmVzQXRIZWFkLmZpbmQocHRyLCBmaWx0ZXIpOworICAgICAg
ICAgICAgaWYgKG1hdGNoICYmIG1hdGNoICE9IG1fdmFsdWUpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgIGlmIChkYXRhLndyaXRlcy5vdmVybGFwcyhyYW5nZSkgfHwg
ZGF0YS5yZWFkcy5vdmVybGFwcyhyYW5nZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgICAgICBpZiAoIWJsb2NrLT5udW1TdWNjZXNzb3JzKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoQWxsKGJsb2Nr
LT5zdWNjZXNzb3JzKCkpOworICAgICAgICB9CisKKyAgICAgICAga2lsbCgpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXI+CiAgICAg
dm9pZCBoYW5kbGVNZW1vcnlWYWx1ZShWYWx1ZSogcHRyLCBIZWFwUmFuZ2UgcmFuZ2UsIGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogICAgIHsKICAgICAgICAgaGFuZGxlTWVtb3J5VmFsdWUoCkBAIC0z
MzIsNyArNTA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTWVtb3J5TWF0Y2hlcyBtYXRjaGVzID0g
ZmluZE1lbW9yeVZhbHVlKHB0ciwgcmFuZ2UsIGZpbHRlcik7CiAgICAgICAgIGlmIChyZXBsYWNl
TWVtb3J5VmFsdWUobWF0Y2hlcywgcmVwbGFjZSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGFkZE1lbW9yeVZhbHVlKG1fZGF0YSwgbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpOwor
ICAgICAgICBtX2RhdGEubWVtb3J5VmFsdWVzQXRUYWlsLmFkZChtX3ZhbHVlLT5hczxNZW1vcnlW
YWx1ZT4oKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmVwbGFjZT4KQEAgLTM5
NiwzOSArNTcwLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIHZvaWQgYWRkTWVtb3J5VmFsdWUoSW1wdXJlQmxvY2tEYXRhJiBkYXRhLCBNZW1vcnlWYWx1
ZSogbWVtb3J5KQotICAgIHsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRh
TG9nKCJBZGRpbmcgbWVtb3J5OiAiLCAqbWVtb3J5LCAiXG4iKTsKLSAgICAgICAgCi0gICAgICAg
IE1hdGNoZXMmIG1hdGNoZXMgPSBkYXRhLm1lbW9yeVZhbHVlcy5hZGQobWVtb3J5LT5sYXN0Q2hp
bGQoKSwgTWF0Y2hlcygpKS5pdGVyYXRvci0+dmFsdWU7Ci0KLSAgICAgICAgaWYgKG1hdGNoZXMu
Y29udGFpbnMobWVtb3J5KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtYXRjaGVz
LmFwcGVuZChtZW1vcnkpOwotICAgIH0KLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlcj4K
ICAgICBNZW1vcnlNYXRjaGVzIGZpbmRNZW1vcnlWYWx1ZShWYWx1ZSogcHRyLCBIZWFwUmFuZ2Ug
cmFuZ2UsIGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2Up
Ci0gICAgICAgICAgICBkYXRhTG9nKCptX3ZhbHVlLCAiOiBsb29raW5nIGZvciAiLCAqcHRyLCAi
Li4uXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coKm1fdmFsdWUsICI6IGxvb2tpbmcgYmFja3dh
cmQgZm9yICIsICpwdHIsICIuLi5cbiIpOwogICAgICAgICAKLSAgICAgICAgYXV0byBmaW5kID0g
WyZdIChJbXB1cmVCbG9ja0RhdGEmIGRhdGEpIC0+IE1lbW9yeVZhbHVlKiB7Ci0gICAgICAgICAg
ICBhdXRvIGl0ZXIgPSBkYXRhLm1lbW9yeVZhbHVlcy5maW5kKHB0cik7Ci0gICAgICAgICAgICBp
ZiAoaXRlciAhPSBkYXRhLm1lbW9yeVZhbHVlcy5lbmQoKSkgewotICAgICAgICAgICAgICAgIGZv
ciAoVmFsdWUqIGNhbmRpZGF0ZVZhbHVlIDogaXRlci0+dmFsdWUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKE1lbW9yeVZhbHVlKiBjYW5kaWRhdGVNZW1vcnkgPSBjYW5kaWRhdGVWYWx1ZS0+
YXM8TWVtb3J5VmFsdWU+KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIo
Y2FuZGlkYXRlTWVtb3J5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2Fu
ZGlkYXRlTWVtb3J5OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgaWYgKE1lbW9yeVZhbHVlKiBtYXRjaCA9IGZpbmQobV9kYXRhKSkgeworICAgICAg
ICBpZiAoTWVtb3J5VmFsdWUqIG1hdGNoID0gbV9kYXRhLm1lbW9yeVZhbHVlc0F0VGFpbC5maW5k
KHB0ciwgZmlsdGVyKSkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgIEZvdW5kICIsICptYXRjaCwgIiBsb2NhbGx5LlxuIik7CiAgICAgICAg
ICAgICByZXR1cm4geyBtYXRjaCB9OwpAQCAtNDQxLDggKzU4OSw2IEBAIHByaXZhdGU6CiAgICAg
ICAgIH0KIAogICAgICAgICBCbG9ja1dvcmtsaXN0IHdvcmtsaXN0OwotICAgICAgICBWZWN0b3I8
QmFzaWNCbG9jayosIDg+IHNlZW5MaXN0OwotCiAgICAgICAgIHdvcmtsaXN0LnB1c2hBbGwobV9i
bG9jay0+cHJlZGVjZXNzb3JzKCkpOwogCiAgICAgICAgIE1lbW9yeU1hdGNoZXMgbWF0Y2hlczsK
QEAgLTQ1MCwxMSArNTk2LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIHdoaWxlIChCYXNpY0Jsb2Nr
KiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgTG9va2luZyBhdCAiLCAqYmxvY2ssICJcbiIpOwot
ICAgICAgICAgICAgc2Vlbkxpc3QuYXBwZW5kKGJsb2NrKTsKIAogICAgICAgICAgICAgSW1wdXJl
QmxvY2tEYXRhJiBkYXRhID0gbV9pbXB1cmVCbG9ja0RhdGFbYmxvY2tdOwogCi0gICAgICAgICAg
ICBNZW1vcnlWYWx1ZSogbWF0Y2ggPSBmaW5kKGRhdGEpOworICAgICAgICAgICAgTWVtb3J5VmFs
dWUqIG1hdGNoID0gZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwuZmluZChwdHIsIGZpbHRlcik7CiAg
ICAgICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2ggIT0gbV92YWx1ZSkgewogICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRm91bmQg
bWF0Y2g6ICIsICptYXRjaCwgIlxuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDE5NzAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDIzIEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHN0YXRpYyBib29sIGlzU3RvcmUoT3Bjb2Rl
IG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2Ug
U3RvcmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmU6CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzTG9hZChPcGNv
ZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFjY2VwdHMob3Bjb2RlKSAmJiAhaXNT
dG9yZShvcGNvZGUpOworICAgIH0KKwogICAgIH5NZW1vcnlWYWx1ZSgpOwogCiAgICAgaW50MzJf
dCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxOTcwMzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsMTUgKzI1NSw2
IEBAIGVudW0gY2xhc3MgUGxhblN0YWdlIHsKICAgICBBZnRlckZpeHVwCiB9OwogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotYm9vbCBjaGVja0FuZFNldChUJiBsZWZ0LCBVIHJp
Z2h0KQotewotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbGVmdCA9IHJpZ2h0OwotICAgIHJldHVybiB0cnVlOwotfQotCiAvLyBJZiBwb3NzaWJsZSwg
dGhpcyB3aWxsIGFjcXVpcmUgYSBsb2NrIHRvIG1ha2Ugc3VyZSB0aGF0IGlmIG11bHRpcGxlIHRo
cmVhZHMKIC8vIHN0YXJ0IGNyYXNoaW5nIGF0IHRoZSBzYW1lIHRpbWUsIHlvdSBnZXQgY29oZXJl
bnQgZHVtcCBvdXRwdXQuIFVzZSB0aGlzIG9ubHkKIC8vIHdoZW4geW91J3JlIGZvcmNpbmcgYSBj
cmFzaCB3aXRoIGRpYWdub3N0aWNzLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272240</attachid>
            <date>2016-02-25 14:25:58 -0800</date>
            <delta_ts>2016-02-28 13:07:24 -0800</delta_ts>
            <desc>it compiles</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>17890</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGlt
aW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDE5NzAzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjYsMjUgKzY2LDg1IEBAIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwogCiB0eXBlZGVmIFZlY3RvcjxNZW1vcnlWYWx1ZSosIDE+IE1lbW9yeU1hdGNoZXM7CiAK
LXN0cnVjdCBJbXB1cmVCbG9ja0RhdGEgewotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAorY2xhc3MgTWVtb3J5VmFsdWVNYXAgeworcHVibGljOgorICAgIE1lbW9yeVZhbHVl
TWFwKCkgeyB9CisKKyAgICB2b2lkIGFkZChNZW1vcnlWYWx1ZSogbWVtb3J5KQorICAgIHsKKyAg
ICAgICAgTWF0Y2hlcyYgbWF0Y2hlcyA9IG1fbWFwLmFkZChtZW1vcnktPmxhc3RDaGlsZCgpLCBN
YXRjaGVzKCkpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKG1hdGNoZXMuY29udGFpbnMo
bWVtb3J5KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbWF0Y2hlcy5hcHBlbmQobWVt
b3J5KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
cmVtb3ZlSWYoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIG1fbWFwLnJl
bW92ZUlmKAorICAgICAgICAgICAgWyZdIChIYXNoTWFwPFZhbHVlKiwgTWF0Y2hlcz46OktleVZh
bHVlUGFpclR5cGUmIGVudHJ5KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBlbnRyeS52YWx1
ZS5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChWYWx1ZSogdmFs
dWUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1lbW9yeVZhbHVlKiBt
ZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZ1bmN0b3IobWVtb3J5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZW50cnkudmFsdWUuaXNFbXB0eSgpOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAg
TWF0Y2hlcyogZmluZChWYWx1ZSogcHRyKQorICAgIHsKKyAgICAgICAgYXV0byBpdGVyID0gbV9t
YXAuZmluZChwdHIpOworICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gJml0ZXItPnZhbHVlOworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgTWVtb3J5VmFsdWUqIGZpbmQo
VmFsdWUqIHB0ciwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIG91dC5w
cmludCgie3dyaXRlcyA9ICIsIHdyaXRlcywgIiwgbWVtb3J5VmFsdWVzID0geyIpOworICAgICAg
ICBpZiAoTWF0Y2hlcyogbWF0Y2hlcyA9IGZpbmQocHRyKSkgeworICAgICAgICAgICAgZm9yIChW
YWx1ZSogY2FuZGlkYXRlVmFsdWUgOiAqbWF0Y2hlcykgeworICAgICAgICAgICAgICAgIGlmIChN
ZW1vcnlWYWx1ZSogY2FuZGlkYXRlTWVtb3J5ID0gY2FuZGlkYXRlVmFsdWUtPmFzPE1lbW9yeVZh
bHVlPigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdG9yKGNhbmRpZGF0ZU1lbW9y
eSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlTWVtb3J5OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CiAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
KyAgICB7CisgICAgICAgIG91dC5wcmludCgieyIpOwogICAgICAgICBDb21tYVByaW50ZXIgY29t
bWE7Ci0gICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtZW1vcnlWYWx1ZXMpCisgICAgICAgIGZv
ciAoYXV0byYgZW50cnkgOiBtX21hcCkKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgcG9p
bnRlckR1bXAoZW50cnkua2V5KSwgIj0+IiwgcG9pbnRlckxpc3REdW1wKGVudHJ5LnZhbHVlKSk7
Ci0KLSAgICAgICAgb3V0LnByaW50KCJ9fSIpOworICAgICAgICBvdXQucHJpbnQoIn0iKTsKICAg
ICB9CiAgICAgCi0gICAgUmFuZ2VTZXQ8SGVhcFJhbmdlPiB3cml0ZXM7Ci0gICAgCi0gICAgLy8g
TWFwcyBhbiBhZGRyZXNzIGJhc2UgdG8gYWxsIG9mIHRoZSBNZW1vcnlWYWx1ZXMgdGhhdCBkbyB0
aGluZ3MgdG8gaXQuIEFmdGVyIHdlJ3JlIGRvbmUKLSAgICAvLyBwcm9jZXNzaW5nIGEgbWFwLCB0
aGlzIHRlbGxzIHVzIHRoZSB2YWx1ZXMgYXQgdGFpbC4gTm90ZSB0aGF0IHdlIHVzZSBhIE1hdGNo
ZXMgYXJyYXkKLSAgICAvLyBiZWNhdXNlIHRob3NlIE1lbW9yeVZhbHVlcyBjb3VsZCBiZSB0dXJu
ZWQgaW50byBJZGVudGl0eSdzLCBhbmQgd2UgbmVlZCB0byBjaGVjayBmb3IgdGhpcwotICAgIC8v
IGFzIHdlIGdvLgotICAgIEhhc2hNYXA8VmFsdWUqLCBNYXRjaGVzPiBtZW1vcnlWYWx1ZXM7Citw
cml2YXRlOgorICAgIC8vIFRoaXMgdXNlcyBNYXRjaGVzIGZvciB0d28gcmVhc29uczoKKyAgICAv
LyAtIEl0IGNhbm5vdCBiZSBhIE1lbW9yeVZhbHVlKiBiZWNhdXNlIHRoZSBrZXkgaXMgaW1wcmVj
aXNlLiBNYW55IE1lbW9yeVZhbHVlcyBjb3VsZCBoYXZlIHRoZQorICAgIC8vICAgc2FtZSBrZXkg
d2hpbGUgYmVpbmcgdW5hbGlhc2VkLgorICAgIC8vIC0gSXQgY2FuJ3QgYmUgYSBNZW1vcnlNYXRj
aGVzIGFycmF5IGJlY2F1c2UgdGhlIE1lbW9yeVZhbHVlKidzIGNvdWxkIGJlIHR1cm5lZCBpbnRv
IElkZW50aXR5J3MuCisgICAgSGFzaE1hcDxWYWx1ZSosIE1hdGNoZXM+IG1fbWFwOworfTsKKwor
c3RydWN0IEltcHVyZUJsb2NrRGF0YSB7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAie3JlYWRzID0g
IiwgcmVhZHMsICIsIHdyaXRlcyA9ICIsIHdyaXRlcywgIiwgc3RvcmVzQXRIZWFkID0gIiwgc3Rv
cmVzQXRIZWFkLAorICAgICAgICAgICAgIiwgbWVtb3J5VmFsdWVzQXRUYWlsID0gIiwgbWVtb3J5
VmFsdWVzQXRUYWlsLCAifSIpOworICAgIH0KKworICAgIFJhbmdlU2V0PEhlYXBSYW5nZT4gcmVh
ZHM7IC8vIFRoaXMgb25seSBnZXRzIHVzZWQgZm9yIGZvcndhcmQgc3RvcmUgZWxpbWluYXRpb24u
CisgICAgUmFuZ2VTZXQ8SGVhcFJhbmdlPiB3cml0ZXM7IC8vIFRoaXMgZ2V0cyB1c2VkIGZvciBi
b3RoIGxvYWQgYW5kIHN0b3JlIGVsaW1pbmF0aW9uLgorCisgICAgTWVtb3J5VmFsdWVNYXAgc3Rv
cmVzQXRIZWFkOworICAgIE1lbW9yeVZhbHVlTWFwIG1lbW9yeVZhbHVlc0F0VGFpbDsKIH07CiAK
IGNsYXNzIENTRSB7CkBAIC0xMDQsMjAgKzE2NCwzMiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAg
ICAgICBtX3Byb2MucmVzZXRWYWx1ZU93bmVycygpOwogCisgICAgICAgIC8vIFN1bW1hcml6ZSB0
aGUgaW1wdXJlIGVmZmVjdHMgb2YgZWFjaCBibG9jaywgYW5kIHRoZSBpbXB1cmUgdmFsdWVzIGF2
YWlsYWJsZSBhdCB0aGUgZW5kIG9mCisgICAgICAgIC8vIGVhY2ggYmxvY2suIFRoaXMgZG9lc24n
dCBlZGl0IGNvZGUgeWV0LgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9j
KSB7CiAgICAgICAgICAgICBJbXB1cmVCbG9ja0RhdGEmIGRhdGEgPSBtX2ltcHVyZUJsb2NrRGF0
YVtibG9ja107CiAgICAgICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgewotICAg
ICAgICAgICAgICAgIGlmIChIZWFwUmFuZ2Ugd3JpdGVzID0gdmFsdWUtPmVmZmVjdHMoKS53cml0
ZXMpCisgICAgICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gdmFsdWUtPmVmZmVjdHMoKTsK
KyAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZh
bHVlPigpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChtZW1vcnkgJiYg
bWVtb3J5LT5pc1N0b3JlKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgIWRhdGEucmVhZHMub3Zl
cmxhcHMobWVtb3J5LT5yYW5nZSgpKQorICAgICAgICAgICAgICAgICAgICAmJiAhZGF0YS53cml0
ZXMub3ZlcmxhcHMobWVtb3J5LT5yYW5nZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5z
dG9yZXNBdEhlYWQuYWRkKG1lbW9yeSk7CisgICAgICAgICAgICAgICAgZGF0YS5yZWFkcy5hZGQo
ZWZmZWN0cy5yZWFkcyk7CisKKyAgICAgICAgICAgICAgICBpZiAoSGVhcFJhbmdlIHdyaXRlcyA9
IGVmZmVjdHMud3JpdGVzKQogICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGRhdGEsIHdyaXRl
cyk7CiAKLSAgICAgICAgICAgICAgICBpZiAoTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5h
czxNZW1vcnlWYWx1ZT4oKSkKLSAgICAgICAgICAgICAgICAgICAgYWRkTWVtb3J5VmFsdWUoZGF0
YSwgbWVtb3J5KTsKKyAgICAgICAgICAgICAgICBpZiAobWVtb3J5KQorICAgICAgICAgICAgICAg
ICAgICBkYXRhLm1lbW9yeVZhbHVlc0F0VGFpbC5hZGQobWVtb3J5KTsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiQmxv
Y2sgIiwgKmJsb2NrLCAiOiAiLCBkYXRhLCAiXG4iKTsKICAgICAgICAgfQogCisgICAgICAgIC8v
IFBlcmZvcm0gQ1NFLiBUaGlzIGVkaXRzIGNvZGUuCiAgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2Nr
Kj4gcG9zdE9yZGVyID0gbV9wcm9jLmJsb2Nrc0luUG9zdE9yZGVyKCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IHBvc3RPcmRlci5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIG1fYmxv
Y2sgPSBwb3N0T3JkZXJbaV07CkBAIC0xMzMsNiArMjA1LDggQEAgcHVibGljOgogICAgICAgICAg
ICAgbV9pbXB1cmVCbG9ja0RhdGFbbV9ibG9ja10gPSBtX2RhdGE7CiAgICAgICAgIH0KIAorICAg
ICAgICAvLyBUaGUgcHJldmlvdXMgcGFzcyBtaWdodCBoYXZlIHJlcXVlc3RlZCB0aGF0IHdlIGlu
c2VydCBjb2RlIGluIHNvbWUgYmFzaWMgYmxvY2sgb3RoZXIgdGhhbgorICAgICAgICAvLyB0aGUg
b25lIHRoYXQgaXQgd2FzIGxvb2tpbmcgYXQuIFRoaXMgaW5zZXJ0cyB0aGVtLgogICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKyt2YWx1ZUlu
ZGV4KSB7CiAgICAgICAgICAgICAgICAgYXV0byBpdGVyID0gbV9zZXRzLmZpbmQoYmxvY2stPmF0
KHZhbHVlSW5kZXgpKTsKQEAgLTE2MiwzMCArMjM2LDY5IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gbV92
YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmIChtZW1vcnkgJiYgcHJvY2Vzc01l
bW9yeUJlZm9yZUNsb2JiZXIobWVtb3J5KSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAg
ICBpZiAoSGVhcFJhbmdlIHdyaXRlcyA9IG1fdmFsdWUtPmVmZmVjdHMoKS53cml0ZXMpCiAgICAg
ICAgICAgICBjbG9iYmVyKG1fZGF0YSwgd3JpdGVzKTsKICAgICAgICAgCi0gICAgICAgIGlmIChN
ZW1vcnlWYWx1ZSogbWVtb3J5ID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpCi0gICAgICAg
ICAgICBwcm9jZXNzTWVtb3J5KG1lbW9yeSk7CisgICAgICAgIGlmIChtZW1vcnkpCisgICAgICAg
ICAgICBwcm9jZXNzTWVtb3J5QWZ0ZXJDbG9iYmVyKG1lbW9yeSk7CisgICAgfQorCisgICAgLy8g
UmV0dXJuIHRydWUgaWYgd2UgZ290IHJpZCBvZiB0aGUgb3BlcmF0aW9uLiBJZiB5b3UgY2hhbmdl
ZCBJUiBpbiB0aGlzIGZ1bmN0aW9uLCB5b3UgaGF2ZSB0bworICAgIC8vIHNldCBtX2NoYW5nZWQg
ZXZlbiBpZiB5b3UgYWxzbyByZXR1cm4gdHJ1ZS4KKyAgICBib29sIHByb2Nlc3NNZW1vcnlCZWZv
cmVDbG9iYmVyKE1lbW9yeVZhbHVlKiBtZW1vcnkpCisgICAgeworICAgICAgICBWYWx1ZSogdmFs
dWUgPSBtZW1vcnktPmNoaWxkKDApOworICAgICAgICBWYWx1ZSogcHRyID0gbWVtb3J5LT5sYXN0
Q2hpbGQoKTsKKyAgICAgICAgSGVhcFJhbmdlIHJhbmdlID0gbWVtb3J5LT5yYW5nZSgpOworICAg
ICAgICBpbnQzMl90IG9mZnNldCA9IG1lbW9yeS0+b2Zmc2V0KCk7CisKKyAgICAgICAgc3dpdGNo
IChtZW1vcnktPm9wY29kZSgpKSB7CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICAgICAg
cmV0dXJuIGhhbmRsZVN0b3JlQmVmb3JlQ2xvYmJlcigKKyAgICAgICAgICAgICAgICBwdHIsIHJh
bmdlLAorICAgICAgICAgICAgICAgIFsmXSAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0ZSkgLT4gYm9v
bCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGUtPm9mZnNldCgpID09IG9m
ZnNldAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChjYW5kaWRhdGUtPm9wY29kZSgpID09
IFN0b3JlOCAmJiBjYW5kaWRhdGUtPmNoaWxkKDApID09IHZhbHVlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8ICgoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBMb2FkOFogfHwgY2FuZGlk
YXRlLT5vcGNvZGUoKSA9PSBMb2FkOFMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICYmIGNhbmRpZGF0ZSA9PSB2YWx1ZSkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICBj
YXNlIFN0b3JlMTY6CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RvcmVCZWZvcmVDbG9iYmVy
KAorICAgICAgICAgICAgICAgIHB0ciwgcmFuZ2UsCisgICAgICAgICAgICAgICAgWyZdIChNZW1v
cnlWYWx1ZSogY2FuZGlkYXRlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNhbmRpZGF0ZS0+b2Zmc2V0KCkgPT0gb2Zmc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAm
JiAoKGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gU3RvcmUxNiAmJiBjYW5kaWRhdGUtPmNoaWxkKDAp
ID09IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoY2FuZGlkYXRlLT5v
cGNvZGUoKSA9PSBMb2FkMTZaIHx8IGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gTG9hZDE2UykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2FuZGlkYXRlID09IHZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICByZXR1
cm4gaGFuZGxlU3RvcmVCZWZvcmVDbG9iYmVyKAorICAgICAgICAgICAgICAgIHB0ciwgcmFuZ2Us
CisgICAgICAgICAgICAgICAgWyZdIChNZW1vcnlWYWx1ZSogY2FuZGlkYXRlKSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS0+b2Zmc2V0KCkgPT0gb2Zmc2V0
CisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gU3Rv
cmUgJiYgY2FuZGlkYXRlLT5jaGlsZCgwKSA9PSB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBMb2FkICYmIGNhbmRpZGF0ZSA9PSB2
YWx1ZSkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCBjbG9iYmVyKElt
cHVyZUJsb2NrRGF0YSYgZGF0YSwgSGVhcFJhbmdlIHdyaXRlcykKICAgICB7CiAgICAgICAgIGRh
dGEud3JpdGVzLmFkZCh3cml0ZXMpOwogICAgICAgICAKLSAgICAgICAgZGF0YS5tZW1vcnlWYWx1
ZXMucmVtb3ZlSWYoCi0gICAgICAgICAgICBbJl0gKEhhc2hNYXA8VmFsdWUqLCBNYXRjaGVzPjo6
S2V5VmFsdWVQYWlyVHlwZSYgZW50cnkpIC0+IGJvb2wgewotICAgICAgICAgICAgICAgIGVudHJ5
LnZhbHVlLnJlbW92ZUFsbE1hdGNoaW5nKAotICAgICAgICAgICAgICAgICAgICBbJl0gKFZhbHVl
KiB2YWx1ZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTWVtb3J5VmFs
dWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbWVtb3J5LT5yYW5nZSgpLm92ZXJsYXBzKHdyaXRlcyk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlLmlzRW1wdHkoKTsKKyAgICAgICAg
ZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwucmVtb3ZlSWYoCisgICAgICAgICAgICBbJl0gKE1lbW9y
eVZhbHVlKiBtZW1vcnkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWVtb3J5LT5yYW5nZSgp
Lm92ZXJsYXBzKHdyaXRlcyk7CiAgICAgICAgICAgICB9KTsKICAgICB9CiAKLSAgICB2b2lkIHBy
b2Nlc3NNZW1vcnkoTWVtb3J5VmFsdWUqIG1lbW9yeSkKKyAgICB2b2lkIHByb2Nlc3NNZW1vcnlB
ZnRlckNsb2JiZXIoTWVtb3J5VmFsdWUqIG1lbW9yeSkKICAgICB7CiAgICAgICAgIFZhbHVlKiBw
dHIgPSBtZW1vcnktPmxhc3RDaGlsZCgpOwogICAgICAgICBIZWFwUmFuZ2UgcmFuZ2UgPSBtZW1v
cnktPnJhbmdlKCk7CkBAIC0zMDEsMTAgKzQxNCwzMyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgY2FzZSBT
dG9yZTE2OgorICAgICAgICBjYXNlIFN0b3JlODogeworICAgICAgICAgICAgaGFuZGxlU3RvcmVB
ZnRlckNsb2JiZXIoCisgICAgICAgICAgICAgICAgcHRyLCByYW5nZSwKKyAgICAgICAgICAgICAg
ICBbJl0gKE1lbW9yeVZhbHVlKiBjYW5kaWRhdGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBTdG9yZTgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICYmIGNhbmRpZGF0ZS0+b2Zmc2V0KCkgPT0gb2Zmc2V0OworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIFN0b3JlMTY6IHsKKyAgICAgICAgICAgIGhhbmRsZVN0b3JlQWZ0ZXJDbG9iYmVy
KAorICAgICAgICAgICAgICAgIHB0ciwgcmFuZ2UsCisgICAgICAgICAgICAgICAgWyZdIChNZW1v
cnlWYWx1ZSogY2FuZGlkYXRlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gU3RvcmUxNgorICAgICAgICAgICAgICAgICAgICAgICAg
JiYgY2FuZGlkYXRlLT5vZmZzZXQoKSA9PSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
U3RvcmU6IHsKLSAgICAgICAgICAgIGFkZE1lbW9yeVZhbHVlKG1fZGF0YSwgbWVtb3J5KTsKKyAg
ICAgICAgICAgIGhhbmRsZVN0b3JlQWZ0ZXJDbG9iYmVyKAorICAgICAgICAgICAgICAgIHB0ciwg
cmFuZ2UsCisgICAgICAgICAgICAgICAgWyZdIChNZW1vcnlWYWx1ZSogY2FuZGlkYXRlKSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0g
U3RvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGNhbmRpZGF0ZS0+b2Zmc2V0KCkgPT0g
b2Zmc2V0OworICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIApAQCAtMzE2LDYgKzQ1Miw3OCBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZpbHRlcj4KKyAgICBib29sIGhhbmRsZVN0b3JlQmVmb3JlQ2xvYmJlcihWYWx1
ZSogcHRyLCBIZWFwUmFuZ2UgcmFuZ2UsIGNvbnN0IEZpbHRlciYgZmlsdGVyKQorICAgIHsKKyAg
ICAgICAgaWYgKGZpbmRNZW1vcnlWYWx1ZShwdHIsIHJhbmdlLCBmaWx0ZXIpLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0
aE5vcCgpOworICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXI+CisgICAgdm9pZCBoYW5kbGVT
dG9yZUFmdGVyQ2xvYmJlcihWYWx1ZSogcHRyLCBIZWFwUmFuZ2UgcmFuZ2UsIGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQorICAgIHsKKyAgICAgICAgaWYgKGZpbmRTdG9yZUFmdGVyQ2xvYmJlcihwdHIs
IHJhbmdlLCBmaWx0ZXIpKSB7CisgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aE5vcCgp
OworICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwuYWRkKG1fdmFsdWUt
PmFzPE1lbW9yeVZhbHVlPigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0
ZXI+CisgICAgYm9vbCBmaW5kU3RvcmVBZnRlckNsb2JiZXIoVmFsdWUqIHB0ciwgSGVhcFJhbmdl
IHJhbmdlLCBjb25zdCBGaWx0ZXImIGZpbHRlcikKKyAgICB7CisgICAgICAgIC8vIFdlIGNhbiBl
bGltaW5hdGUgYSBzdG9yZSBpZiBldmVyeSBmb3J3YXJkIHBhdGggaGl0cyBhIHN0b3JlIHRvIHRo
ZSBzYW1lIGxvY2F0aW9uIGJlZm9yZQorICAgICAgICAvLyBoaXR0aW5nIGFueSBvcGVyYXRpb24g
dGhhdCBvYnNlcnZlcyB0aGUgc3RvcmUuIFRoaXMgc2VhcmNoIHNlZW1zIGxpa2UgaXQgc2hvdWxk
IGJlCisgICAgICAgIC8vIGV4cGVuc2l2ZSwgYnV0IGluIHRoZSBvdmVyd2hlbG1pbmcgbWFqb3Jp
dHkgb2YgY2FzZXMgaXQgd2lsbCBhbG1vc3QgaW1tZWRpYXRlbHkgaGl0IGFuIAorICAgICAgICAv
LyBvcGVyYXRpb24gdGhhdCBpbnRlcmZlcmVzLgorCisgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgZGF0YUxvZygqbV92YWx1ZSwgIjogbG9va2luZyBmb3J3YXJkIGZvciBzdG9yZXMg
dG8gIiwgKnB0ciwgIi4uLlxuIik7CisKKyAgICAgICAgLy8gRmlyc3Qgc2VhcmNoIGZvcndhcmQg
aW4gdGhpcyBiYXNpYyBibG9jay4KKyAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGNvb2wg
dG8gZ2V0IHJpZCBvZiB0aGlzIGxpbmVhciBzZWFyY2guIEl0J3Mgbm90IHN1cGVyIGNyaXRpY2Fs
IHNpbmNlCisgICAgICAgIC8vIHdlIHdpbGwgcHJvYmFibHkgYmFpbCBvdXQgdmVyeSBxdWlja2x5
LCBidXQgaXQgKmlzKiBhbm5veWluZy4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IG1f
aW5kZXggKyAxOyBpbmRleCA8IG1fYmxvY2stPnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAg
ICAgVmFsdWUqIHZhbHVlID0gbV9ibG9jay0+YXQoaW5kZXgpOworCisgICAgICAgICAgICBpZiAo
TWVtb3J5VmFsdWUqIG1lbW9yeVZhbHVlID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG1lbW9yeVZhbHVlLT5sYXN0Q2hpbGQoKSA9PSBwdHIgJiYgZmls
dGVyKG1lbW9yeVZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IHZhbHVlLT5lZmZlY3Rz
KCk7CisgICAgICAgICAgICBpZiAoZWZmZWN0cy5yZWFkcy5vdmVybGFwcyhyYW5nZSkgfHwgZWZm
ZWN0cy53cml0ZXMub3ZlcmxhcHMocmFuZ2UpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgICAg
IHdvcmtsaXN0LnB1c2hBbGwobV9ibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpOworCisgICAgICAg
IHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgICAg
ICBJbXB1cmVCbG9ja0RhdGEmIGRhdGEgPSBtX2ltcHVyZUJsb2NrRGF0YVtibG9ja107CisKKyAg
ICAgICAgICAgIE1lbW9yeVZhbHVlKiBtYXRjaCA9IGRhdGEuc3RvcmVzQXRIZWFkLmZpbmQocHRy
LCBmaWx0ZXIpOworICAgICAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoICE9IG1fdmFsdWUpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChkYXRhLndyaXRlcy5v
dmVybGFwcyhyYW5nZSkgfHwgZGF0YS5yZWFkcy5vdmVybGFwcyhyYW5nZSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoIWJsb2NrLT5udW1TdWNjZXNz
b3JzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICB3b3Jr
bGlzdC5wdXNoQWxsKGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXI+
CiAgICAgdm9pZCBoYW5kbGVNZW1vcnlWYWx1ZShWYWx1ZSogcHRyLCBIZWFwUmFuZ2UgcmFuZ2Us
IGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHsKICAgICAgICAgaGFuZGxlTWVtb3J5VmFsdWUo
CkBAIC0zMzIsNyArNTQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgTWVtb3J5TWF0Y2hlcyBtYXRj
aGVzID0gZmluZE1lbW9yeVZhbHVlKHB0ciwgcmFuZ2UsIGZpbHRlcik7CiAgICAgICAgIGlmIChy
ZXBsYWNlTWVtb3J5VmFsdWUobWF0Y2hlcywgcmVwbGFjZSkpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGFkZE1lbW9yeVZhbHVlKG1fZGF0YSwgbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+
KCkpOworICAgICAgICBtX2RhdGEubWVtb3J5VmFsdWVzQXRUYWlsLmFkZChtX3ZhbHVlLT5hczxN
ZW1vcnlWYWx1ZT4oKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmVwbGFjZT4K
QEAgLTM5NiwzOSArNjA0LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAotICAgIHZvaWQgYWRkTWVtb3J5VmFsdWUoSW1wdXJlQmxvY2tEYXRhJiBkYXRhLCBNZW1v
cnlWYWx1ZSogbWVtb3J5KQotICAgIHsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAg
ICBkYXRhTG9nKCJBZGRpbmcgbWVtb3J5OiAiLCAqbWVtb3J5LCAiXG4iKTsKLSAgICAgICAgCi0g
ICAgICAgIE1hdGNoZXMmIG1hdGNoZXMgPSBkYXRhLm1lbW9yeVZhbHVlcy5hZGQobWVtb3J5LT5s
YXN0Q2hpbGQoKSwgTWF0Y2hlcygpKS5pdGVyYXRvci0+dmFsdWU7Ci0KLSAgICAgICAgaWYgKG1h
dGNoZXMuY29udGFpbnMobWVtb3J5KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBt
YXRjaGVzLmFwcGVuZChtZW1vcnkpOwotICAgIH0KLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZp
bHRlcj4KICAgICBNZW1vcnlNYXRjaGVzIGZpbmRNZW1vcnlWYWx1ZShWYWx1ZSogcHRyLCBIZWFw
UmFuZ2UgcmFuZ2UsIGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHsKICAgICAgICAgaWYgKHZl
cmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCptX3ZhbHVlLCAiOiBsb29raW5nIGZvciAiLCAq
cHRyLCAiLi4uXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coKm1fdmFsdWUsICI6IGxvb2tpbmcg
YmFja3dhcmQgZm9yICIsICpwdHIsICIuLi5cbiIpOwogICAgICAgICAKLSAgICAgICAgYXV0byBm
aW5kID0gWyZdIChJbXB1cmVCbG9ja0RhdGEmIGRhdGEpIC0+IE1lbW9yeVZhbHVlKiB7Ci0gICAg
ICAgICAgICBhdXRvIGl0ZXIgPSBkYXRhLm1lbW9yeVZhbHVlcy5maW5kKHB0cik7Ci0gICAgICAg
ICAgICBpZiAoaXRlciAhPSBkYXRhLm1lbW9yeVZhbHVlcy5lbmQoKSkgewotICAgICAgICAgICAg
ICAgIGZvciAoVmFsdWUqIGNhbmRpZGF0ZVZhbHVlIDogaXRlci0+dmFsdWUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKE1lbW9yeVZhbHVlKiBjYW5kaWRhdGVNZW1vcnkgPSBjYW5kaWRhdGVW
YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChm
aWx0ZXIoY2FuZGlkYXRlTWVtb3J5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY2FuZGlkYXRlTWVtb3J5OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IH07Ci0KLSAgICAgICAgaWYgKE1lbW9yeVZhbHVlKiBtYXRjaCA9IGZpbmQobV9kYXRhKSkgewor
ICAgICAgICBpZiAoTWVtb3J5VmFsdWUqIG1hdGNoID0gbV9kYXRhLm1lbW9yeVZhbHVlc0F0VGFp
bC5maW5kKHB0ciwgZmlsdGVyKSkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgIEZvdW5kICIsICptYXRjaCwgIiBsb2NhbGx5LlxuIik7CiAg
ICAgICAgICAgICByZXR1cm4geyBtYXRjaCB9OwpAQCAtNDQxLDggKzYyMyw2IEBAIHByaXZhdGU6
CiAgICAgICAgIH0KIAogICAgICAgICBCbG9ja1dvcmtsaXN0IHdvcmtsaXN0OwotICAgICAgICBW
ZWN0b3I8QmFzaWNCbG9jayosIDg+IHNlZW5MaXN0OwotCiAgICAgICAgIHdvcmtsaXN0LnB1c2hB
bGwobV9ibG9jay0+cHJlZGVjZXNzb3JzKCkpOwogCiAgICAgICAgIE1lbW9yeU1hdGNoZXMgbWF0
Y2hlczsKQEAgLTQ1MCwxMSArNjMwLDEwIEBAIHByaXZhdGU6CiAgICAgICAgIHdoaWxlIChCYXNp
Y0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgTG9va2luZyBhdCAiLCAqYmxvY2ssICJc
biIpOwotICAgICAgICAgICAgc2Vlbkxpc3QuYXBwZW5kKGJsb2NrKTsKIAogICAgICAgICAgICAg
SW1wdXJlQmxvY2tEYXRhJiBkYXRhID0gbV9pbXB1cmVCbG9ja0RhdGFbYmxvY2tdOwogCi0gICAg
ICAgICAgICBNZW1vcnlWYWx1ZSogbWF0Y2ggPSBmaW5kKGRhdGEpOworICAgICAgICAgICAgTWVt
b3J5VmFsdWUqIG1hdGNoID0gZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwuZmluZChwdHIsIGZpbHRl
cik7CiAgICAgICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2ggIT0gbV92YWx1ZSkgewogICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
Rm91bmQgbWF0Y2g6ICIsICptYXRjaCwgIlxuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDE5NzAzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDIz
IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHN0YXRpYyBib29sIGlzU3RvcmUo
T3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAg
IGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmU6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzTG9h
ZChPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFjY2VwdHMob3Bjb2RlKSAm
JiAhaXNTdG9yZShvcGNvZGUpOworICAgIH0KKwogICAgIH5NZW1vcnlWYWx1ZSgpOwogCiAgICAg
aW50MzJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkocmV2aXNp
b24gMTk3MDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVj
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDYgKzkwLDUwIEBAIHB1YmxpYzoKICAgICBpdGVyYXRv
ciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQogICAgIGl0ZXJhdG9yIGVu
ZCgpIHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CiAKKyAgICBjbGFzcyBjb25z
dF9pdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBjb25zdF9pdGVyYXRvcigpCisgICAg
ICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDAp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0X2l0ZXJhdG9yKGNvbnN0IFN1
Y2Nlc3NvckNvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAg
IDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcioo
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCht
X2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisr
KCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0
X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1f
Y29sbGVjdGlvbiA9PSBvdGhlci5tX2NvbGxlY3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIG1f
aW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgY29uc3QgU3VjY2Vzc29yQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAg
ICAgICBzaXplX3QgbV9pbmRleDsKKyAgICB9OworCisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcigqdGhpcywgc2l6ZSgp
KTsgfQorCiBwcml2YXRlOgogICAgIFN1Y2Nlc3Nvckxpc3QmIG1fbGlzdDsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272461</attachid>
            <date>2016-02-28 13:07:24 -0800</date>
            <delta_ts>2016-02-28 17:51:30 -0800</delta_ts>
            <desc>maybe the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>20002</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk3MzAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE2LTAyLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGhhdmUgZ2xvYmFsIHN0b3JlIGVsaW1pbmF0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ2NTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRzIGZhaXJseSBjb21wcmVo
ZW5zaXZlIGdsb2JhbCBzdG9yZSBlbGltaW5hdGlvbjoKKworICAgICAgICAxKSBJZiB5b3Ugc3Rv
cmUgdGhlIHJlc3VsdCBvZiBhIGxvYWQgd2l0aCBubyBpbnRlcmZlcmVuY2UgaW4gYmV0d2Vlbiwg
cmVtb3ZlIHRoZSBzdG9yZS4KKworICAgICAgICAyKSBJZiB5b3Ugc3RvcmUgdGhlIHNhbWUgdGhp
bmcgeW91IHN0b3JlZCBwcmV2aW91c2x5LCByZW1vdmUgdGhlIHN0b3JlLgorCisgICAgICAgIDMp
IElmIHlvdSBzdG9yZSBzb21ldGhpbmcgdGhhdCB5b3UgZWl0aGVyIGxvYWRlZCBwcmV2aW91c2x5
IG9yIHN0b3JlZCBwcmV2aW91c2x5IGFsb25nCisgICAgICAgICAgIGFyYml0cmFyaWx5IG1hbnkg
cGF0aHMsIHJlbW92ZSB0aGUgc3RvcmUuCisKKyAgICAgICAgNCkgSWYgeW91IHN0b3JlIHRvIHNv
bWV0aGluZyB0aGF0IGlzIHN0b3JlZCB0byBhZ2FpbiBpbiB0aGUgZnV0dXJlIHdpdGggbm8gaW50
ZXJmZXJlbmNlIGluCisgICAgICAgICAgIGJldHdlZW4sIHJlbW92ZSB0aGUgc3RvcmUuCisKKyAg
ICAgICAgUnVsZSAoNCkgaXMgc3VwZXIgcmVsZXZhbnQgdG8gRlRMIHNpbmNlIHRoZSBERkcgZG9l
cyBub3QgZWxpbWluYXRlIHJlZHVuZGFudCBQdXRTdHJ1Y3R1cmVzLgorICAgICAgICBBIGNvbnN0
cnVjdG9yIHRoYXQgcHJvZHVjZXMgYSBsYXJnZSBvYmplY3Qgd2lsbCBoYXZlIG1hbnkgcmVkdW5k
YW50IHN0b3JlcyB0byB0aGUgc2FtZSBiYXNlCisgICAgICAgIHBvaW50ZXIsIG9mZnNldCwgYW5k
IGhlYXAgcmFuZ2UsIHdpdGggbm8gY29kZSB0byBvYnNlcnZlIHRoYXQgaGVhcCByYW5lZyBpbiBi
ZXR3ZWVuLgorCisgICAgICAgIEknbSBzdGlsbCBtZWFzdXJpbmcgcGVyZm9ybWFuY2UgYW5kIHJ1
bm5pbmcgdGVzdHMuCisKKyAgICAgICAgKiBiMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Np
b25zLmNwcDoKKyAgICAgICAgKiBiMy9CM01lbW9yeVZhbHVlLmg6CisgICAgICAgICogYjMvQjNT
dWNjZXNzb3JDb2xsZWN0aW9uLmg6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0
aW9uOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjplbmQp
OgorICAgICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6Y29uc3RfaXRlcmF0b3I6
OmNvbnN0X2l0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246
OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpCMzo6U3VjY2Vzc29y
Q29sbGVjdGlvbjo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAg
ICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6Y29uc3RfaXRlcmF0b3I6Om9wZXJh
dG9yIT0pOgorCiAyMDE2LTAyLTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgRlRMIHNob3VsZCBsb3dlciBpdHMgYWJzdHJhY3QgaGVhcHMgdG8gQjMgaGVhcCBy
YW5nZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1
YmV4cHJlc3Npb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDE5NzI5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMjUgKzY2LDg1IEBAIGNvbnN0IGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwogCiB0eXBlZGVmIFZlY3RvcjxNZW1vcnlWYWx1ZSosIDE+IE1lbW9yeU1hdGNo
ZXM7CiAKLXN0cnVjdCBJbXB1cmVCbG9ja0RhdGEgewotICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAorY2xhc3MgTWVtb3J5VmFsdWVNYXAgeworcHVibGljOgorICAgIE1lbW9y
eVZhbHVlTWFwKCkgeyB9CisKKyAgICB2b2lkIGFkZChNZW1vcnlWYWx1ZSogbWVtb3J5KQorICAg
IHsKKyAgICAgICAgTWF0Y2hlcyYgbWF0Y2hlcyA9IG1fbWFwLmFkZChtZW1vcnktPmxhc3RDaGls
ZCgpLCBNYXRjaGVzKCkpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKG1hdGNoZXMuY29u
dGFpbnMobWVtb3J5KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbWF0Y2hlcy5hcHBl
bmQobWVtb3J5KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHZvaWQgcmVtb3ZlSWYoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIG91
dC5wcmludCgie3dyaXRlcyA9ICIsIHdyaXRlcywgIiwgbWVtb3J5VmFsdWVzID0geyIpOworICAg
ICAgICBtX21hcC5yZW1vdmVJZigKKyAgICAgICAgICAgIFsmXSAoSGFzaE1hcDxWYWx1ZSosIE1h
dGNoZXM+OjpLZXlWYWx1ZVBhaXJUeXBlJiBlbnRyeSkgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgZW50cnkudmFsdWUucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAgICAgICAgIFsm
XSAoVmFsdWUqIHZhbHVlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChN
ZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdG9yKG1lbW9yeSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlLmlzRW1wdHkoKTsKKyAgICAgICAgICAgIH0pOwor
ICAgIH0KIAorICAgIE1hdGNoZXMqIGZpbmQoVmFsdWUqIHB0cikKKyAgICB7CisgICAgICAgIGF1
dG8gaXRlciA9IG1fbWFwLmZpbmQocHRyKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5k
KCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZpdGVyLT52
YWx1ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIE1lbW9y
eVZhbHVlKiBmaW5kKFZhbHVlKiBwdHIsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgewor
ICAgICAgICBpZiAoTWF0Y2hlcyogbWF0Y2hlcyA9IGZpbmQocHRyKSkgeworICAgICAgICAgICAg
Zm9yIChWYWx1ZSogY2FuZGlkYXRlVmFsdWUgOiAqbWF0Y2hlcykgeworICAgICAgICAgICAgICAg
IGlmIChNZW1vcnlWYWx1ZSogY2FuZGlkYXRlTWVtb3J5ID0gY2FuZGlkYXRlVmFsdWUtPmFzPE1l
bW9yeVZhbHVlPigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdG9yKGNhbmRpZGF0
ZU1lbW9yeSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlTWVtb3J5
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludCgieyIpOwogICAgICAgICBDb21tYVByaW50
ZXIgY29tbWE7Ci0gICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtZW1vcnlWYWx1ZXMpCisgICAg
ICAgIGZvciAoYXV0byYgZW50cnkgOiBtX21hcCkKICAgICAgICAgICAgIG91dC5wcmludChjb21t
YSwgcG9pbnRlckR1bXAoZW50cnkua2V5KSwgIj0+IiwgcG9pbnRlckxpc3REdW1wKGVudHJ5LnZh
bHVlKSk7Ci0KLSAgICAgICAgb3V0LnByaW50KCJ9fSIpOworICAgICAgICBvdXQucHJpbnQoIn0i
KTsKICAgICB9CiAgICAgCi0gICAgUmFuZ2VTZXQ8SGVhcFJhbmdlPiB3cml0ZXM7Ci0gICAgCi0g
ICAgLy8gTWFwcyBhbiBhZGRyZXNzIGJhc2UgdG8gYWxsIG9mIHRoZSBNZW1vcnlWYWx1ZXMgdGhh
dCBkbyB0aGluZ3MgdG8gaXQuIEFmdGVyIHdlJ3JlIGRvbmUKLSAgICAvLyBwcm9jZXNzaW5nIGEg
bWFwLCB0aGlzIHRlbGxzIHVzIHRoZSB2YWx1ZXMgYXQgdGFpbC4gTm90ZSB0aGF0IHdlIHVzZSBh
IE1hdGNoZXMgYXJyYXkKLSAgICAvLyBiZWNhdXNlIHRob3NlIE1lbW9yeVZhbHVlcyBjb3VsZCBi
ZSB0dXJuZWQgaW50byBJZGVudGl0eSdzLCBhbmQgd2UgbmVlZCB0byBjaGVjayBmb3IgdGhpcwot
ICAgIC8vIGFzIHdlIGdvLgotICAgIEhhc2hNYXA8VmFsdWUqLCBNYXRjaGVzPiBtZW1vcnlWYWx1
ZXM7Citwcml2YXRlOgorICAgIC8vIFRoaXMgdXNlcyBNYXRjaGVzIGZvciB0d28gcmVhc29uczoK
KyAgICAvLyAtIEl0IGNhbm5vdCBiZSBhIE1lbW9yeVZhbHVlKiBiZWNhdXNlIHRoZSBrZXkgaXMg
aW1wcmVjaXNlLiBNYW55IE1lbW9yeVZhbHVlcyBjb3VsZCBoYXZlIHRoZQorICAgIC8vICAgc2Ft
ZSBrZXkgd2hpbGUgYmVpbmcgdW5hbGlhc2VkLgorICAgIC8vIC0gSXQgY2FuJ3QgYmUgYSBNZW1v
cnlNYXRjaGVzIGFycmF5IGJlY2F1c2UgdGhlIE1lbW9yeVZhbHVlKidzIGNvdWxkIGJlIHR1cm5l
ZCBpbnRvIElkZW50aXR5J3MuCisgICAgSGFzaE1hcDxWYWx1ZSosIE1hdGNoZXM+IG1fbWFwOwor
fTsKKworc3RydWN0IEltcHVyZUJsb2NrRGF0YSB7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAie3Jl
YWRzID0gIiwgcmVhZHMsICIsIHdyaXRlcyA9ICIsIHdyaXRlcywgIiwgc3RvcmVzQXRIZWFkID0g
Iiwgc3RvcmVzQXRIZWFkLAorICAgICAgICAgICAgIiwgbWVtb3J5VmFsdWVzQXRUYWlsID0gIiwg
bWVtb3J5VmFsdWVzQXRUYWlsLCAifSIpOworICAgIH0KKworICAgIFJhbmdlU2V0PEhlYXBSYW5n
ZT4gcmVhZHM7IC8vIFRoaXMgb25seSBnZXRzIHVzZWQgZm9yIGZvcndhcmQgc3RvcmUgZWxpbWlu
YXRpb24uCisgICAgUmFuZ2VTZXQ8SGVhcFJhbmdlPiB3cml0ZXM7IC8vIFRoaXMgZ2V0cyB1c2Vk
IGZvciBib3RoIGxvYWQgYW5kIHN0b3JlIGVsaW1pbmF0aW9uLgorCisgICAgTWVtb3J5VmFsdWVN
YXAgc3RvcmVzQXRIZWFkOworICAgIE1lbW9yeVZhbHVlTWFwIG1lbW9yeVZhbHVlc0F0VGFpbDsK
IH07CiAKIGNsYXNzIENTRSB7CkBAIC0xMDQsMjAgKzE2NCwzMiBAQCBwdWJsaWM6CiAgICAgICAg
IAogICAgICAgICBtX3Byb2MucmVzZXRWYWx1ZU93bmVycygpOwogCisgICAgICAgIC8vIFN1bW1h
cml6ZSB0aGUgaW1wdXJlIGVmZmVjdHMgb2YgZWFjaCBibG9jaywgYW5kIHRoZSBpbXB1cmUgdmFs
dWVzIGF2YWlsYWJsZSBhdCB0aGUgZW5kIG9mCisgICAgICAgIC8vIGVhY2ggYmxvY2suIFRoaXMg
ZG9lc24ndCBlZGl0IGNvZGUgeWV0LgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9wcm9jKSB7CiAgICAgICAgICAgICBJbXB1cmVCbG9ja0RhdGEmIGRhdGEgPSBtX2ltcHVyZUJs
b2NrRGF0YVtibG9ja107CiAgICAgICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykg
ewotICAgICAgICAgICAgICAgIGlmIChIZWFwUmFuZ2Ugd3JpdGVzID0gdmFsdWUtPmVmZmVjdHMo
KS53cml0ZXMpCisgICAgICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gdmFsdWUtPmVmZmVj
dHMoKTsKKyAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1l
bW9yeVZhbHVlPigpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChtZW1v
cnkgJiYgbWVtb3J5LT5pc1N0b3JlKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgIWRhdGEucmVh
ZHMub3ZlcmxhcHMobWVtb3J5LT5yYW5nZSgpKQorICAgICAgICAgICAgICAgICAgICAmJiAhZGF0
YS53cml0ZXMub3ZlcmxhcHMobWVtb3J5LT5yYW5nZSgpKSkKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YS5zdG9yZXNBdEhlYWQuYWRkKG1lbW9yeSk7CisgICAgICAgICAgICAgICAgZGF0YS5yZWFk
cy5hZGQoZWZmZWN0cy5yZWFkcyk7CisKKyAgICAgICAgICAgICAgICBpZiAoSGVhcFJhbmdlIHdy
aXRlcyA9IGVmZmVjdHMud3JpdGVzKQogICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGRhdGEs
IHdyaXRlcyk7CiAKLSAgICAgICAgICAgICAgICBpZiAoTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZh
bHVlLT5hczxNZW1vcnlWYWx1ZT4oKSkKLSAgICAgICAgICAgICAgICAgICAgYWRkTWVtb3J5VmFs
dWUoZGF0YSwgbWVtb3J5KTsKKyAgICAgICAgICAgICAgICBpZiAobWVtb3J5KQorICAgICAgICAg
ICAgICAgICAgICBkYXRhLm1lbW9yeVZhbHVlc0F0VGFpbC5hZGQobWVtb3J5KTsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiQmxvY2sgIiwgKmJsb2NrLCAiOiAiLCBkYXRhLCAiXG4iKTsKICAgICAgICAgfQogCisgICAg
ICAgIC8vIFBlcmZvcm0gQ1NFLiBUaGlzIGVkaXRzIGNvZGUuCiAgICAgICAgIFZlY3RvcjxCYXNp
Y0Jsb2NrKj4gcG9zdE9yZGVyID0gbV9wcm9jLmJsb2Nrc0luUG9zdE9yZGVyKCk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHBvc3RPcmRlci5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAg
IG1fYmxvY2sgPSBwb3N0T3JkZXJbaV07CkBAIC0xMzMsNiArMjA1LDggQEAgcHVibGljOgogICAg
ICAgICAgICAgbV9pbXB1cmVCbG9ja0RhdGFbbV9ibG9ja10gPSBtX2RhdGE7CiAgICAgICAgIH0K
IAorICAgICAgICAvLyBUaGUgcHJldmlvdXMgcGFzcyBtaWdodCBoYXZlIHJlcXVlc3RlZCB0aGF0
IHdlIGluc2VydCBjb2RlIGluIHNvbWUgYmFzaWMgYmxvY2sgb3RoZXIgdGhhbgorICAgICAgICAv
LyB0aGUgb25lIHRoYXQgaXQgd2FzIGxvb2tpbmcgYXQuIFRoaXMgaW5zZXJ0cyB0aGVtLgogICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKyt2
YWx1ZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgYXV0byBpdGVyID0gbV9zZXRzLmZpbmQoYmxv
Y2stPmF0KHZhbHVlSW5kZXgpKTsKQEAgLTE2MiwzMCArMjM2LDY5IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5
ID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmIChtZW1vcnkgJiYgcHJv
Y2Vzc01lbW9yeUJlZm9yZUNsb2JiZXIobWVtb3J5KSkKKyAgICAgICAgICAgIHJldHVybjsKKwog
ICAgICAgICBpZiAoSGVhcFJhbmdlIHdyaXRlcyA9IG1fdmFsdWUtPmVmZmVjdHMoKS53cml0ZXMp
CiAgICAgICAgICAgICBjbG9iYmVyKG1fZGF0YSwgd3JpdGVzKTsKICAgICAgICAgCi0gICAgICAg
IGlmIChNZW1vcnlWYWx1ZSogbWVtb3J5ID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpCi0g
ICAgICAgICAgICBwcm9jZXNzTWVtb3J5KG1lbW9yeSk7CisgICAgICAgIGlmIChtZW1vcnkpCisg
ICAgICAgICAgICBwcm9jZXNzTWVtb3J5QWZ0ZXJDbG9iYmVyKG1lbW9yeSk7CisgICAgfQorCisg
ICAgLy8gUmV0dXJuIHRydWUgaWYgd2UgZ290IHJpZCBvZiB0aGUgb3BlcmF0aW9uLiBJZiB5b3Ug
Y2hhbmdlZCBJUiBpbiB0aGlzIGZ1bmN0aW9uLCB5b3UgaGF2ZSB0bworICAgIC8vIHNldCBtX2No
YW5nZWQgZXZlbiBpZiB5b3UgYWxzbyByZXR1cm4gdHJ1ZS4KKyAgICBib29sIHByb2Nlc3NNZW1v
cnlCZWZvcmVDbG9iYmVyKE1lbW9yeVZhbHVlKiBtZW1vcnkpCisgICAgeworICAgICAgICBWYWx1
ZSogdmFsdWUgPSBtZW1vcnktPmNoaWxkKDApOworICAgICAgICBWYWx1ZSogcHRyID0gbWVtb3J5
LT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgSGVhcFJhbmdlIHJhbmdlID0gbWVtb3J5LT5yYW5nZSgp
OworICAgICAgICBpbnQzMl90IG9mZnNldCA9IG1lbW9yeS0+b2Zmc2V0KCk7CisKKyAgICAgICAg
c3dpdGNoIChtZW1vcnktPm9wY29kZSgpKSB7CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAg
ICAgICAgcmV0dXJuIGhhbmRsZVN0b3JlQmVmb3JlQ2xvYmJlcigKKyAgICAgICAgICAgICAgICBw
dHIsIHJhbmdlLAorICAgICAgICAgICAgICAgIFsmXSAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0ZSkg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGUtPm9mZnNldCgp
ID09IG9mZnNldAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChjYW5kaWRhdGUtPm9wY29k
ZSgpID09IFN0b3JlOCAmJiBjYW5kaWRhdGUtPmNoaWxkKDApID09IHZhbHVlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8ICgoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBMb2FkOFogfHwg
Y2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBMb2FkOFMpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIGNhbmRpZGF0ZSA9PSB2YWx1ZSkpOworICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RvcmVCZWZvcmVD
bG9iYmVyKAorICAgICAgICAgICAgICAgIHB0ciwgcmFuZ2UsCisgICAgICAgICAgICAgICAgWyZd
IChNZW1vcnlWYWx1ZSogY2FuZGlkYXRlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGNhbmRpZGF0ZS0+b2Zmc2V0KCkgPT0gb2Zmc2V0CisgICAgICAgICAgICAgICAgICAg
ICAgICAmJiAoKGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gU3RvcmUxNiAmJiBjYW5kaWRhdGUtPmNo
aWxkKDApID09IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoY2FuZGlk
YXRlLT5vcGNvZGUoKSA9PSBMb2FkMTZaIHx8IGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gTG9hZDE2
UykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2FuZGlkYXRlID09IHZhbHVl
KSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAg
ICByZXR1cm4gaGFuZGxlU3RvcmVCZWZvcmVDbG9iYmVyKAorICAgICAgICAgICAgICAgIHB0ciwg
cmFuZ2UsCisgICAgICAgICAgICAgICAgWyZdIChNZW1vcnlWYWx1ZSogY2FuZGlkYXRlKSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS0+b2Zmc2V0KCkgPT0g
b2Zmc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKGNhbmRpZGF0ZS0+b3Bjb2RlKCkg
PT0gU3RvcmUgJiYgY2FuZGlkYXRlLT5jaGlsZCgwKSA9PSB2YWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBMb2FkICYmIGNhbmRpZGF0
ZSA9PSB2YWx1ZSkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCBjbG9i
YmVyKEltcHVyZUJsb2NrRGF0YSYgZGF0YSwgSGVhcFJhbmdlIHdyaXRlcykKICAgICB7CiAgICAg
ICAgIGRhdGEud3JpdGVzLmFkZCh3cml0ZXMpOwogICAgICAgICAKLSAgICAgICAgZGF0YS5tZW1v
cnlWYWx1ZXMucmVtb3ZlSWYoCi0gICAgICAgICAgICBbJl0gKEhhc2hNYXA8VmFsdWUqLCBNYXRj
aGVzPjo6S2V5VmFsdWVQYWlyVHlwZSYgZW50cnkpIC0+IGJvb2wgewotICAgICAgICAgICAgICAg
IGVudHJ5LnZhbHVlLnJlbW92ZUFsbE1hdGNoaW5nKAotICAgICAgICAgICAgICAgICAgICBbJl0g
KFZhbHVlKiB2YWx1ZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTWVt
b3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbWVtb3J5LT5yYW5nZSgpLm92ZXJsYXBzKHdyaXRlcyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlLmlzRW1wdHkoKTsKKyAg
ICAgICAgZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwucmVtb3ZlSWYoCisgICAgICAgICAgICBbJl0g
KE1lbW9yeVZhbHVlKiBtZW1vcnkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWVtb3J5LT5y
YW5nZSgpLm92ZXJsYXBzKHdyaXRlcyk7CiAgICAgICAgICAgICB9KTsKICAgICB9CiAKLSAgICB2
b2lkIHByb2Nlc3NNZW1vcnkoTWVtb3J5VmFsdWUqIG1lbW9yeSkKKyAgICB2b2lkIHByb2Nlc3NN
ZW1vcnlBZnRlckNsb2JiZXIoTWVtb3J5VmFsdWUqIG1lbW9yeSkKICAgICB7CiAgICAgICAgIFZh
bHVlKiBwdHIgPSBtZW1vcnktPmxhc3RDaGlsZCgpOwogICAgICAgICBIZWFwUmFuZ2UgcmFuZ2Ug
PSBtZW1vcnktPnJhbmdlKCk7CkBAIC0zMDEsMTAgKzQxNCwzMyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAg
Y2FzZSBTdG9yZTE2OgorICAgICAgICBjYXNlIFN0b3JlODogeworICAgICAgICAgICAgaGFuZGxl
U3RvcmVBZnRlckNsb2JiZXIoCisgICAgICAgICAgICAgICAgcHRyLCByYW5nZSwKKyAgICAgICAg
ICAgICAgICBbJl0gKE1lbW9yeVZhbHVlKiBjYW5kaWRhdGUpIC0+IGJvb2wgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBTdG9yZTgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICYmIGNhbmRpZGF0ZS0+b2Zmc2V0KCkgPT0gb2Zmc2V0OworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFN0b3JlMTY6IHsKKyAgICAgICAgICAgIGhhbmRsZVN0b3JlQWZ0ZXJD
bG9iYmVyKAorICAgICAgICAgICAgICAgIHB0ciwgcmFuZ2UsCisgICAgICAgICAgICAgICAgWyZd
IChNZW1vcnlWYWx1ZSogY2FuZGlkYXRlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gU3RvcmUxNgorICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgY2FuZGlkYXRlLT5vZmZzZXQoKSA9PSBvZmZzZXQ7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgU3RvcmU6IHsKLSAgICAgICAgICAgIGFkZE1lbW9yeVZhbHVlKG1fZGF0YSwgbWVtb3J5
KTsKKyAgICAgICAgICAgIGhhbmRsZVN0b3JlQWZ0ZXJDbG9iYmVyKAorICAgICAgICAgICAgICAg
IHB0ciwgcmFuZ2UsCisgICAgICAgICAgICAgICAgWyZdIChNZW1vcnlWYWx1ZSogY2FuZGlkYXRl
KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS0+b3Bjb2Rl
KCkgPT0gU3RvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGNhbmRpZGF0ZS0+b2Zmc2V0
KCkgPT0gb2Zmc2V0OworICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIApAQCAtMzE2LDYgKzQ1Miw4MiBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZpbHRlcj4KKyAgICBib29sIGhhbmRsZVN0b3JlQmVmb3JlQ2xvYmJl
cihWYWx1ZSogcHRyLCBIZWFwUmFuZ2UgcmFuZ2UsIGNvbnN0IEZpbHRlciYgZmlsdGVyKQorICAg
IHsKKyAgICAgICAgTWVtb3J5TWF0Y2hlcyBtYXRjaGVzID0gZmluZE1lbW9yeVZhbHVlKHB0ciwg
cmFuZ2UsIGZpbHRlcik7CisgICAgICAgIGlmIChtYXRjaGVzLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aE5vcCgpOwor
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXI+CisgICAgdm9pZCBoYW5kbGVTdG9yZUFmdGVy
Q2xvYmJlcihWYWx1ZSogcHRyLCBIZWFwUmFuZ2UgcmFuZ2UsIGNvbnN0IEZpbHRlciYgZmlsdGVy
KQorICAgIHsKKyAgICAgICAgaWYgKGZpbmRTdG9yZUFmdGVyQ2xvYmJlcihwdHIsIHJhbmdlLCBm
aWx0ZXIpKSB7CisgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aE5vcCgpOworICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIG1fZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwuYWRkKG1fdmFsdWUtPmFzPE1lbW9y
eVZhbHVlPigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXI+CisgICAg
Ym9vbCBmaW5kU3RvcmVBZnRlckNsb2JiZXIoVmFsdWUqIHB0ciwgSGVhcFJhbmdlIHJhbmdlLCBj
b25zdCBGaWx0ZXImIGZpbHRlcikKKyAgICB7CisgICAgICAgIC8vIFdlIGNhbiBlbGltaW5hdGUg
YSBzdG9yZSBpZiBldmVyeSBmb3J3YXJkIHBhdGggaGl0cyBhIHN0b3JlIHRvIHRoZSBzYW1lIGxv
Y2F0aW9uIGJlZm9yZQorICAgICAgICAvLyBoaXR0aW5nIGFueSBvcGVyYXRpb24gdGhhdCBvYnNl
cnZlcyB0aGUgc3RvcmUuIFRoaXMgc2VhcmNoIHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlCisgICAg
ICAgIC8vIGV4cGVuc2l2ZSwgYnV0IGluIHRoZSBvdmVyd2hlbG1pbmcgbWFqb3JpdHkgb2YgY2Fz
ZXMgaXQgd2lsbCBhbG1vc3QgaW1tZWRpYXRlbHkgaGl0IGFuIAorICAgICAgICAvLyBvcGVyYXRp
b24gdGhhdCBpbnRlcmZlcmVzLgorCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ZGF0YUxvZygqbV92YWx1ZSwgIjogbG9va2luZyBmb3J3YXJkIGZvciBzdG9yZXMgdG8gIiwgKnB0
ciwgIi4uLlxuIik7CisKKyAgICAgICAgLy8gRmlyc3Qgc2VhcmNoIGZvcndhcmQgaW4gdGhpcyBi
YXNpYyBibG9jay4KKyAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGNvb2wgdG8gZ2V0IHJp
ZCBvZiB0aGlzIGxpbmVhciBzZWFyY2guIEl0J3Mgbm90IHN1cGVyIGNyaXRpY2FsIHNpbmNlCisg
ICAgICAgIC8vIHdlIHdpbGwgcHJvYmFibHkgYmFpbCBvdXQgdmVyeSBxdWlja2x5LCBidXQgaXQg
KmlzKiBhbm5veWluZy4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IG1faW5kZXggKyAx
OyBpbmRleCA8IG1fYmxvY2stPnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgVmFsdWUq
IHZhbHVlID0gbV9ibG9jay0+YXQoaW5kZXgpOworCisgICAgICAgICAgICBpZiAoTWVtb3J5VmFs
dWUqIG1lbW9yeVZhbHVlID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1lbW9yeVZhbHVlLT5sYXN0Q2hpbGQoKSA9PSBwdHIgJiYgZmlsdGVyKG1lbW9y
eVZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IHZhbHVlLT5lZmZlY3RzKCk7CisgICAg
ICAgICAgICBpZiAoZWZmZWN0cy5yZWFkcy5vdmVybGFwcyhyYW5nZSkgfHwgZWZmZWN0cy53cml0
ZXMub3ZlcmxhcHMocmFuZ2UpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghbV9ibG9jay0+bnVtU3VjY2Vzc29ycygpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAg
ICAgIHdvcmtsaXN0LnB1c2hBbGwobV9ibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpOworCisgICAg
ICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAg
ICAgICBJbXB1cmVCbG9ja0RhdGEmIGRhdGEgPSBtX2ltcHVyZUJsb2NrRGF0YVtibG9ja107CisK
KyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtYXRjaCA9IGRhdGEuc3RvcmVzQXRIZWFkLmZpbmQo
cHRyLCBmaWx0ZXIpOworICAgICAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoICE9IG1fdmFsdWUp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChkYXRhLndyaXRl
cy5vdmVybGFwcyhyYW5nZSkgfHwgZGF0YS5yZWFkcy5vdmVybGFwcyhyYW5nZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoIWJsb2NrLT5udW1TdWNj
ZXNzb3JzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICB3
b3JrbGlzdC5wdXNoQWxsKGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0
ZXI+CiAgICAgdm9pZCBoYW5kbGVNZW1vcnlWYWx1ZShWYWx1ZSogcHRyLCBIZWFwUmFuZ2UgcmFu
Z2UsIGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHsKICAgICAgICAgaGFuZGxlTWVtb3J5VmFs
dWUoCkBAIC0zMzIsNyArNTQ0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTWVtb3J5TWF0Y2hlcyBt
YXRjaGVzID0gZmluZE1lbW9yeVZhbHVlKHB0ciwgcmFuZ2UsIGZpbHRlcik7CiAgICAgICAgIGlm
IChyZXBsYWNlTWVtb3J5VmFsdWUobWF0Y2hlcywgcmVwbGFjZSkpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGFkZE1lbW9yeVZhbHVlKG1fZGF0YSwgbV92YWx1ZS0+YXM8TWVtb3J5VmFs
dWU+KCkpOworICAgICAgICBtX2RhdGEubWVtb3J5VmFsdWVzQXRUYWlsLmFkZChtX3ZhbHVlLT5h
czxNZW1vcnlWYWx1ZT4oKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmVwbGFj
ZT4KQEAgLTM5NiwzOSArNjA4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIHZvaWQgYWRkTWVtb3J5VmFsdWUoSW1wdXJlQmxvY2tEYXRhJiBkYXRhLCBN
ZW1vcnlWYWx1ZSogbWVtb3J5KQotICAgIHsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAg
ICAgICBkYXRhTG9nKCJBZGRpbmcgbWVtb3J5OiAiLCAqbWVtb3J5LCAiXG4iKTsKLSAgICAgICAg
Ci0gICAgICAgIE1hdGNoZXMmIG1hdGNoZXMgPSBkYXRhLm1lbW9yeVZhbHVlcy5hZGQobWVtb3J5
LT5sYXN0Q2hpbGQoKSwgTWF0Y2hlcygpKS5pdGVyYXRvci0+dmFsdWU7Ci0KLSAgICAgICAgaWYg
KG1hdGNoZXMuY29udGFpbnMobWVtb3J5KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBtYXRjaGVzLmFwcGVuZChtZW1vcnkpOwotICAgIH0KLQogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZpbHRlcj4KICAgICBNZW1vcnlNYXRjaGVzIGZpbmRNZW1vcnlWYWx1ZShWYWx1ZSogcHRyLCBI
ZWFwUmFuZ2UgcmFuZ2UsIGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHsKICAgICAgICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCptX3ZhbHVlLCAiOiBsb29raW5nIGZvciAi
LCAqcHRyLCAiLi4uXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coKm1fdmFsdWUsICI6IGxvb2tp
bmcgYmFja3dhcmQgZm9yICIsICpwdHIsICIuLi5cbiIpOwogICAgICAgICAKLSAgICAgICAgYXV0
byBmaW5kID0gWyZdIChJbXB1cmVCbG9ja0RhdGEmIGRhdGEpIC0+IE1lbW9yeVZhbHVlKiB7Ci0g
ICAgICAgICAgICBhdXRvIGl0ZXIgPSBkYXRhLm1lbW9yeVZhbHVlcy5maW5kKHB0cik7Ci0gICAg
ICAgICAgICBpZiAoaXRlciAhPSBkYXRhLm1lbW9yeVZhbHVlcy5lbmQoKSkgewotICAgICAgICAg
ICAgICAgIGZvciAoVmFsdWUqIGNhbmRpZGF0ZVZhbHVlIDogaXRlci0+dmFsdWUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKE1lbW9yeVZhbHVlKiBjYW5kaWRhdGVNZW1vcnkgPSBjYW5kaWRh
dGVWYWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChmaWx0ZXIoY2FuZGlkYXRlTWVtb3J5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY2FuZGlkYXRlTWVtb3J5OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgIH07Ci0KLSAgICAgICAgaWYgKE1lbW9yeVZhbHVlKiBtYXRjaCA9IGZpbmQobV9kYXRhKSkg
eworICAgICAgICBpZiAoTWVtb3J5VmFsdWUqIG1hdGNoID0gbV9kYXRhLm1lbW9yeVZhbHVlc0F0
VGFpbC5maW5kKHB0ciwgZmlsdGVyKSkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgIEZvdW5kICIsICptYXRjaCwgIiBsb2NhbGx5LlxuIik7
CiAgICAgICAgICAgICByZXR1cm4geyBtYXRjaCB9OwpAQCAtNDQxLDggKzYyNyw2IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KIAogICAgICAgICBCbG9ja1dvcmtsaXN0IHdvcmtsaXN0OwotICAgICAg
ICBWZWN0b3I8QmFzaWNCbG9jayosIDg+IHNlZW5MaXN0OwotCiAgICAgICAgIHdvcmtsaXN0LnB1
c2hBbGwobV9ibG9jay0+cHJlZGVjZXNzb3JzKCkpOwogCiAgICAgICAgIE1lbW9yeU1hdGNoZXMg
bWF0Y2hlczsKQEAgLTQ1MCwxMSArNjM0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIHdoaWxlIChC
YXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgTG9va2luZyBhdCAiLCAqYmxvY2ss
ICJcbiIpOwotICAgICAgICAgICAgc2Vlbkxpc3QuYXBwZW5kKGJsb2NrKTsKIAogICAgICAgICAg
ICAgSW1wdXJlQmxvY2tEYXRhJiBkYXRhID0gbV9pbXB1cmVCbG9ja0RhdGFbYmxvY2tdOwogCi0g
ICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWF0Y2ggPSBmaW5kKGRhdGEpOworICAgICAgICAgICAg
TWVtb3J5VmFsdWUqIG1hdGNoID0gZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwuZmluZChwdHIsIGZp
bHRlcik7CiAgICAgICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2ggIT0gbV92YWx1ZSkgewogICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgRm91bmQgbWF0Y2g6ICIsICptYXRjaCwgIlxuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDE5NzI5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUy
LDIzIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHN0YXRpYyBib29sIGlzU3Rv
cmUoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAg
ICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIGNhc2UgU3Rv
cmU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGlz
TG9hZChPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFjY2VwdHMob3Bjb2Rl
KSAmJiAhaXNTdG9yZShvcGNvZGUpOworICAgIH0KKwogICAgIH5NZW1vcnlWYWx1ZSgpOwogCiAg
ICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkocmV2
aXNpb24gMTk3Mjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29s
bGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDYgKzkwLDUwIEBAIHB1YmxpYzoKICAgICBpdGVy
YXRvciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQogICAgIGl0ZXJhdG9y
IGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CiAKKyAgICBjbGFzcyBj
b25zdF9pdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBjb25zdF9pdGVyYXRvcigpCisg
ICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4
KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0X2l0ZXJhdG9yKGNvbnN0
IFN1Y2Nlc3NvckNvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHNpemVfdCBpbmRleCkKKyAgICAgICAg
ICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgLCBtX2luZGV4KGlu
ZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRv
ciooKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5h
dChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRv
cisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgcmV0
dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNv
bnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KG1fY29sbGVjdGlvbiA9PSBvdGhlci5tX2NvbGxlY3Rpb24pOworICAgICAgICAgICAgcmV0dXJu
IG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJp
dmF0ZToKKyAgICAgICAgY29uc3QgU3VjY2Vzc29yQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOwor
ICAgICAgICBzaXplX3QgbV9pbmRleDsKKyAgICB9OworCisgICAgY29uc3RfaXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBjb25z
dF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcigqdGhpcywgc2l6
ZSgpKTsgfQorCiBwcml2YXRlOgogICAgIFN1Y2Nlc3Nvckxpc3QmIG1fbGlzdDsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272470</attachid>
            <date>2016-02-28 17:51:30 -0800</date>
            <delta_ts>2016-02-29 14:14:26 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>27539</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk3MzAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBA
CisyMDE2LTAyLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGhhdmUgZ2xvYmFsIHN0b3JlIGVsaW1pbmF0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ2NTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRzIGZhaXJseSBjb21wcmVo
ZW5zaXZlIGdsb2JhbCBzdG9yZSBlbGltaW5hdGlvbjoKKworICAgICAgICAxKSBJZiB5b3Ugc3Rv
cmUgdGhlIHJlc3VsdCBvZiBhIGxvYWQgd2l0aCBubyBpbnRlcmZlcmVuY2UgaW4gYmV0d2Vlbiwg
cmVtb3ZlIHRoZSBzdG9yZS4KKworICAgICAgICAyKSBJZiB5b3Ugc3RvcmUgdGhlIHNhbWUgdGhp
bmcgeW91IHN0b3JlZCBwcmV2aW91c2x5LCByZW1vdmUgdGhlIHN0b3JlLgorCisgICAgICAgIDMp
IElmIHlvdSBzdG9yZSBzb21ldGhpbmcgdGhhdCB5b3UgZWl0aGVyIGxvYWRlZCBwcmV2aW91c2x5
IG9yIHN0b3JlZCBwcmV2aW91c2x5IGFsb25nCisgICAgICAgICAgIGFyYml0cmFyaWx5IG1hbnkg
cGF0aHMsIHJlbW92ZSB0aGUgc3RvcmUuCisKKyAgICAgICAgNCkgSWYgeW91IHN0b3JlIHRvIHNv
bWV0aGluZyB0aGF0IGlzIHN0b3JlZCB0byBhZ2FpbiBpbiB0aGUgZnV0dXJlIHdpdGggbm8gaW50
ZXJmZXJlbmNlIGluCisgICAgICAgICAgIGJldHdlZW4sIHJlbW92ZSB0aGUgc3RvcmUuCisKKyAg
ICAgICAgUnVsZSAoNCkgaXMgc3VwZXIgcmVsZXZhbnQgdG8gRlRMIHNpbmNlIHRoZSBERkcgZG9l
cyBub3QgZWxpbWluYXRlIHJlZHVuZGFudCBQdXRTdHJ1Y3R1cmVzLgorICAgICAgICBBIGNvbnN0
cnVjdG9yIHRoYXQgcHJvZHVjZXMgYSBsYXJnZSBvYmplY3Qgd2lsbCBoYXZlIG1hbnkgcmVkdW5k
YW50IHN0b3JlcyB0byB0aGUgc2FtZSBiYXNlCisgICAgICAgIHBvaW50ZXIsIG9mZnNldCwgYW5k
IGhlYXAgcmFuZ2UsIHdpdGggbm8gY29kZSB0byBvYnNlcnZlIHRoYXQgaGVhcCByYW5lZyBpbiBi
ZXR3ZWVuLgorCisgICAgICAgIFRoaXMgZG9lc24ndCBoYXZlIGEgZGVjaXNpdmUgZWZmZWN0IG9u
IG1ham9yIGJlbmNobWFya3MsIGJ1dCBpdCdzIGFuIGVub3Jtb3VzIHdpbiBmb3IKKyAgICAgICAg
bWljcm9iZW5jaG1hcmtzOgorCisgICAgICAgIC0gMzAlIGZhc3RlciB0byBjb25zdHJ1Y3QgYW4g
b2JqZWN0IHdpdGggbWFueSBmaWVsZHMuCisKKyAgICAgICAgLSA1eCBmYXN0ZXIgdG8gZG8gbWFu
eSBzdG9yZXMgdG8gYSBnbG9iYWwgdmFyaWFibGUuCisKKyAgICAgICAgVGhlIGNvbXBpbGUgdGlt
ZSBjb3N0IHNob3VsZCBiZSB2ZXJ5IHNtYWxsLiBBbHRob3VnaCB0aGUgb3B0aW1pemF0aW9uIGlz
IGdsb2JhbCwgaXQgYWJvcnRzIGFzCisgICAgICAgIHNvb24gYXMgaXQgc2VlcyBhbnl0aGluZyB0
aGF0IHdvdWxkIGNvbmZvdW5kIHN0b3JlIGVsaW1pbmF0aW9uLiBGb3IgcnVsZXMgKDEpLSgzKSwg
d2UKKyAgICAgICAgcGlnZ3ktYmFjayB0aGUgZXhpc3RpbmcgbG9hZCBlbGltaW5hdGlvbiwgd2hp
Y2ggZ2l2ZXMgdXAgb24gaW50ZXJmZXJpbmcgc3RvcmVzLiBGb3IgcnVsZSAoNCksCisgICAgICAg
IHdlIHNlYXJjaCBmb3J3YXJkIHRocm91Z2ggdGhlIGN1cnJlbnQgYmxvY2sgYW5kIHRoZW4gZ2xv
YmFsbHkgYSBibG9jayBhdCBhIHRpbWUgKHNraXBwaW5nCisgICAgICAgIGJsb2NrIGNvbnRlbnRz
IHRoYW5rcyB0byBzdW1tYXJ5IGRhdGEpLCB3aGljaCBjb3VsZCBiZSBleHBlbnNpdmUuIEJ1dCBy
dWxlICg0KSBhYm9ydHMgYXMgc29vbgorICAgICAgICBhcyBpdCBzZWVzIGEgcmVhZCwgd3JpdGUs
IG9yIGVuZCBibG9jayAoUmV0dXJuIG9yIE9vcHMpLiBBbnkgQ2hlY2sgd2lsbCBjbGFpbSB0byBy
ZWFkIFRPUC4gQW55CisgICAgICAgIFBhdGNocG9pbnQgdGhhdCByZXN1bHRzIGZyb20gYW4gSW52
YWxpZGF0aW9uUG9pbnQgd2lsbCBjbGFpbSB0byByZWFkIFRPUCwgYXMgd2lsbCBhbnkKKyAgICAg
ICAgUGF0Y2hwb2ludHMgZm9yIElDcy4gVGhvc2UgYXJlIHVzdWFsbHkgc3ByaW5rbGVkIGFsbCBv
dmVyIHRoZSBwcm9ncmFtLgorCisgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGlzIG9wdGltaXph
dGlvbiByYXJlbHkga2lja3MgaW4uIFdoZW4gaXQgZG9lcyBraWNrIGluLCBpdCBtYWtlcyBwcm9n
cmFtcyBydW4KKyAgICAgICAgZmFzdGVyLiBXaGVuIGl0IGRvZXNuJ3Qga2ljayBpbiwgaXQncyB1
c3VhbGx5IE8oMSkgYmVjYXVzZSB0aGVyZSBhcmUgcmVhc29ucyBmb3IgYWJvcnRpbmcgYWxsCisg
ICAgICAgIG92ZXIgYSAibm9ybWFsIiBwcm9ncmFtIHNvIHRoZSBzZWFyY2ggd2lsbCBoYWx0IGFs
bW9zdCBpbW1lZGlhdGVseS4gVGhpcyBvZiBjb3Vyc2UgcmFpc2VzIHRoZQorICAgICAgICBxdWVz
dGlvbjogaG93IG11Y2ggbW9yZSBpbiBjb21waWxlIHRpbWUgZG8gd2UgcGF5IHdoZW4gdGhlIG9w
dGltaXphdGlvbiBkb2VzIGtpY2sgaW4/IFRoZQorICAgICAgICBvcHRpbWl6YXRpb24ga2lja3Mg
aW4gdGhlIG1vc3QgZm9yIHRoZSBtaWNyb2JlbmNobWFya3MgSSB3cm90ZSBmb3IgdGhpcyBwYXRj
aC4gQW1hemluZ2x5LCB0aGUKKyAgICAgICAgZWZmZWN0IG9mIHRoZSBvcHRpbWl6YXRpb24gYSB3
YXNoIGZvciBjb21waWxlIHRpbWU6IHdoYXRldmVyIGNvc3Qgd2UgcGF5IGRvaW5nIHRoZSBPKG5e
MikKKyAgICAgICAgc2VhcmNoZXMgaXMgYmFsYW5jZWQgYnkgdGhlIG1hc3NpdmUgcmVkdWN0aW9u
IGluIHdvcmsgaW4gdGhlIGJhY2tlbmQuIE9uIG9uZSBvZiB0aGUgdHdvCisgICAgICAgIG1pY3Jv
YmVuY2htYXJrcywgb3ZlcmFsbCBjb21waWxlIHRpbWUgYWN0dWFsbHkgc2hyYW5rIHdpdGggdGhp
cyBvcHRpbWl6YXRpb24gZXZlbiB0aG91Z2ggQ1NFCisgICAgICAgIGl0c2VsZiBjb3N0IG1vcmUu
IFRoYXQncyBub3QgdG9vIHN1cnByaXNpbmcgLSB0aGUgYmFja2VuZCBjb3N0cyBtdWNoIG1vcmUg
cGVyIGluc3RydWN0aW9uLCBzbworICAgICAgICB0aGluZ3MgdGhhdCByZW1vdmUgaW5zdHJ1Y3Rp
b25zIGJlZm9yZSB3ZSBnZXQgdG8gdGhlIGJhY2tlbmQgdGVuZCB0byBiZSBhIGdvb2QgaWRlYS4K
KworICAgICAgICBXZSBjb3VsZCBjb25zaWRlciBhZGRpbmcgYSBtb3JlIGFnZ3Jlc3NpdmUgdmVy
c2lvbiBvZiB0aGlzIGluIHRoZSBmdXR1cmUsIHdoaWNoIGNvdWxkIHNpbmsKKyAgICAgICAgc3Rv
cmVzIGludG8gY2hlY2tzLiBUaGF0IGNvdWxkIGJlIGNyYXp5IGZ1bjogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjE2MiNjMworCisgICAgICAgIEJ1dCBtYWlubHks
IEknbSBhZGRpbmcgdGhpcyBvcHRpbWl6YXRpb24gYmVjYXVzZSBpdCB3YXMgc3VwZXIgZnVuIHRv
IGltcGxlbWVudCBkdXJpbmcgdGhlCisgICAgICAgIFdlYkFzc2VtYmx5IENHIHN1bW1pdC4KKwor
ICAgICAgICAqIGIzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwOgorICAgICAg
ICAqIGIzL0IzTWVtb3J5VmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM1N1Y2Nlc3NvckNvbGxlY3Rp
b24uaDoKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246OmJlZ2luKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246OmVuZCk6CisgICAgICAgIChKU0M6
OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpjb25zdF9pdGVyYXRvcjo6Y29uc3RfaXRlcmF0b3Ip
OgorICAgICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6Y29uc3RfaXRlcmF0b3I6
Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpjb25z
dF9pdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xs
ZWN0aW9uOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpT
dWNjZXNzb3JDb2xsZWN0aW9uOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisKIDIwMTYt
MDItMjcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGVEwgc2hv
dWxkIGxvd2VyIGl0cyBhYnN0cmFjdCBoZWFwcyB0byBCMyBoZWFwIHJhbmdlcwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1v
blN1YmV4cHJlc3Npb25zLmNwcAkocmV2aXNpb24gMTk3Mjk5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NiwyNSArNjYsODUgQEAgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKIHR5
cGVkZWYgVmVjdG9yPE1lbW9yeVZhbHVlKiwgMT4gTWVtb3J5TWF0Y2hlczsKIAotc3RydWN0IElt
cHVyZUJsb2NrRGF0YSB7Ci0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Citj
bGFzcyBNZW1vcnlWYWx1ZU1hcCB7CitwdWJsaWM6CisgICAgTWVtb3J5VmFsdWVNYXAoKSB7IH0K
KworICAgIHZvaWQgYWRkKE1lbW9yeVZhbHVlKiBtZW1vcnkpCisgICAgeworICAgICAgICBNYXRj
aGVzJiBtYXRjaGVzID0gbV9tYXAuYWRkKG1lbW9yeS0+bGFzdENoaWxkKCksIE1hdGNoZXMoKSku
aXRlcmF0b3ItPnZhbHVlOworICAgICAgICBpZiAobWF0Y2hlcy5jb250YWlucyhtZW1vcnkpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtYXRjaGVzLmFwcGVuZChtZW1vcnkpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCByZW1vdmVJZihj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKLSAgICAgICAgb3V0LnByaW50KCJ7d3JpdGVz
ID0gIiwgd3JpdGVzLCAiLCBtZW1vcnlWYWx1ZXMgPSB7Iik7CisgICAgICAgIG1fbWFwLnJlbW92
ZUlmKAorICAgICAgICAgICAgWyZdIChIYXNoTWFwPFZhbHVlKiwgTWF0Y2hlcz46OktleVZhbHVl
UGFpclR5cGUmIGVudHJ5KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZS5y
ZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChWYWx1ZSogdmFsdWUp
IC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1lbW9yeVZhbHVlKiBtZW1v
cnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0b3IobWVtb3J5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZW50cnkudmFsdWUuaXNFbXB0eSgpOworICAgICAgICAgICAgfSk7CisgICAgfQogCisgICAgTWF0
Y2hlcyogZmluZChWYWx1ZSogcHRyKQorICAgIHsKKyAgICAgICAgYXV0byBpdGVyID0gbV9tYXAu
ZmluZChwdHIpOworICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gJml0ZXItPnZhbHVlOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgTWVtb3J5VmFsdWUqIGZpbmQoVmFs
dWUqIHB0ciwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGlmIChNYXRj
aGVzKiBtYXRjaGVzID0gZmluZChwdHIpKSB7CisgICAgICAgICAgICBmb3IgKFZhbHVlKiBjYW5k
aWRhdGVWYWx1ZSA6ICptYXRjaGVzKSB7CisgICAgICAgICAgICAgICAgaWYgKE1lbW9yeVZhbHVl
KiBjYW5kaWRhdGVNZW1vcnkgPSBjYW5kaWRhdGVWYWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmN0b3IoY2FuZGlkYXRlTWVtb3J5KSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGVNZW1vcnk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgb3V0LnByaW50KCJ7Iik7CiAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAgICAg
ICAgZm9yIChhdXRvJiBlbnRyeSA6IG1lbW9yeVZhbHVlcykKKyAgICAgICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fbWFwKQogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChl
bnRyeS5rZXkpLCAiPT4iLCBwb2ludGVyTGlzdER1bXAoZW50cnkudmFsdWUpKTsKLQotICAgICAg
ICBvdXQucHJpbnQoIn19Iik7CisgICAgICAgIG91dC5wcmludCgifSIpOwogICAgIH0KICAgICAK
LSAgICBSYW5nZVNldDxIZWFwUmFuZ2U+IHdyaXRlczsKLSAgICAKLSAgICAvLyBNYXBzIGFuIGFk
ZHJlc3MgYmFzZSB0byBhbGwgb2YgdGhlIE1lbW9yeVZhbHVlcyB0aGF0IGRvIHRoaW5ncyB0byBp
dC4gQWZ0ZXIgd2UncmUgZG9uZQotICAgIC8vIHByb2Nlc3NpbmcgYSBtYXAsIHRoaXMgdGVsbHMg
dXMgdGhlIHZhbHVlcyBhdCB0YWlsLiBOb3RlIHRoYXQgd2UgdXNlIGEgTWF0Y2hlcyBhcnJheQot
ICAgIC8vIGJlY2F1c2UgdGhvc2UgTWVtb3J5VmFsdWVzIGNvdWxkIGJlIHR1cm5lZCBpbnRvIElk
ZW50aXR5J3MsIGFuZCB3ZSBuZWVkIHRvIGNoZWNrIGZvciB0aGlzCi0gICAgLy8gYXMgd2UgZ28u
Ci0gICAgSGFzaE1hcDxWYWx1ZSosIE1hdGNoZXM+IG1lbW9yeVZhbHVlczsKK3ByaXZhdGU6Cisg
ICAgLy8gVGhpcyB1c2VzIE1hdGNoZXMgZm9yIHR3byByZWFzb25zOgorICAgIC8vIC0gSXQgY2Fu
bm90IGJlIGEgTWVtb3J5VmFsdWUqIGJlY2F1c2UgdGhlIGtleSBpcyBpbXByZWNpc2UuIE1hbnkg
TWVtb3J5VmFsdWVzIGNvdWxkIGhhdmUgdGhlCisgICAgLy8gICBzYW1lIGtleSB3aGlsZSBiZWlu
ZyB1bmFsaWFzZWQuCisgICAgLy8gLSBJdCBjYW4ndCBiZSBhIE1lbW9yeU1hdGNoZXMgYXJyYXkg
YmVjYXVzZSB0aGUgTWVtb3J5VmFsdWUqJ3MgY291bGQgYmUgdHVybmVkIGludG8gSWRlbnRpdHkn
cy4KKyAgICBIYXNoTWFwPFZhbHVlKiwgTWF0Y2hlcz4gbV9tYXA7Cit9OworCitzdHJ1Y3QgSW1w
dXJlQmxvY2tEYXRhIHsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAg
ICB7CisgICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICJ7cmVhZHMgPSAiLCByZWFkcywg
Iiwgd3JpdGVzID0gIiwgd3JpdGVzLCAiLCBzdG9yZXNBdEhlYWQgPSAiLCBzdG9yZXNBdEhlYWQs
CisgICAgICAgICAgICAiLCBtZW1vcnlWYWx1ZXNBdFRhaWwgPSAiLCBtZW1vcnlWYWx1ZXNBdFRh
aWwsICJ9Iik7CisgICAgfQorCisgICAgUmFuZ2VTZXQ8SGVhcFJhbmdlPiByZWFkczsgLy8gVGhp
cyBvbmx5IGdldHMgdXNlZCBmb3IgZm9yd2FyZCBzdG9yZSBlbGltaW5hdGlvbi4KKyAgICBSYW5n
ZVNldDxIZWFwUmFuZ2U+IHdyaXRlczsgLy8gVGhpcyBnZXRzIHVzZWQgZm9yIGJvdGggbG9hZCBh
bmQgc3RvcmUgZWxpbWluYXRpb24uCisKKyAgICBNZW1vcnlWYWx1ZU1hcCBzdG9yZXNBdEhlYWQ7
CisgICAgTWVtb3J5VmFsdWVNYXAgbWVtb3J5VmFsdWVzQXRUYWlsOwogfTsKIAogY2xhc3MgQ1NF
IHsKQEAgLTEwNCwyMCArMTY0LDMyIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIG1fcHJv
Yy5yZXNldFZhbHVlT3duZXJzKCk7CiAKKyAgICAgICAgLy8gU3VtbWFyaXplIHRoZSBpbXB1cmUg
ZWZmZWN0cyBvZiBlYWNoIGJsb2NrLCBhbmQgdGhlIGltcHVyZSB2YWx1ZXMgYXZhaWxhYmxlIGF0
IHRoZSBlbmQgb2YKKyAgICAgICAgLy8gZWFjaCBibG9jay4gVGhpcyBkb2Vzbid0IGVkaXQgY29k
ZSB5ZXQuCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAg
ICAgICAgIEltcHVyZUJsb2NrRGF0YSYgZGF0YSA9IG1faW1wdXJlQmxvY2tEYXRhW2Jsb2NrXTsK
ICAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKEhlYXBSYW5nZSB3cml0ZXMgPSB2YWx1ZS0+ZWZmZWN0cygpLndyaXRlcykKKyAgICAg
ICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSB2YWx1ZS0+ZWZmZWN0cygpOworICAgICAgICAg
ICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1lbW9yeSAmJiBtZW1vcnktPmlz
U3RvcmUoKQorICAgICAgICAgICAgICAgICAgICAmJiAhZGF0YS5yZWFkcy5vdmVybGFwcyhtZW1v
cnktPnJhbmdlKCkpCisgICAgICAgICAgICAgICAgICAgICYmICFkYXRhLndyaXRlcy5vdmVybGFw
cyhtZW1vcnktPnJhbmdlKCkpKQorICAgICAgICAgICAgICAgICAgICBkYXRhLnN0b3Jlc0F0SGVh
ZC5hZGQobWVtb3J5KTsKKyAgICAgICAgICAgICAgICBkYXRhLnJlYWRzLmFkZChlZmZlY3RzLnJl
YWRzKTsKKworICAgICAgICAgICAgICAgIGlmIChIZWFwUmFuZ2Ugd3JpdGVzID0gZWZmZWN0cy53
cml0ZXMpCiAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIoZGF0YSwgd3JpdGVzKTsKIAotICAg
ICAgICAgICAgICAgIGlmIChNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZh
bHVlPigpKQotICAgICAgICAgICAgICAgICAgICBhZGRNZW1vcnlWYWx1ZShkYXRhLCBtZW1vcnkp
OworICAgICAgICAgICAgICAgIGlmIChtZW1vcnkpCisgICAgICAgICAgICAgICAgICAgIGRhdGEu
bWVtb3J5VmFsdWVzQXRUYWlsLmFkZChtZW1vcnkpOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJCbG9jayAiLCAqYmxv
Y2ssICI6ICIsIGRhdGEsICJcbiIpOwogICAgICAgICB9CiAKKyAgICAgICAgLy8gUGVyZm9ybSBD
U0UuIFRoaXMgZWRpdHMgY29kZS4KICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBwb3N0T3Jk
ZXIgPSBtX3Byb2MuYmxvY2tzSW5Qb3N0T3JkZXIoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gcG9zdE9yZGVyLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgbV9ibG9jayA9IHBvc3RP
cmRlcltpXTsKQEAgLTEzMyw2ICsyMDUsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2ltcHVy
ZUJsb2NrRGF0YVttX2Jsb2NrXSA9IG1fZGF0YTsKICAgICAgICAgfQogCisgICAgICAgIC8vIFRo
ZSBwcmV2aW91cyBwYXNzIG1pZ2h0IGhhdmUgcmVxdWVzdGVkIHRoYXQgd2UgaW5zZXJ0IGNvZGUg
aW4gc29tZSBiYXNpYyBibG9jayBvdGhlciB0aGFuCisgICAgICAgIC8vIHRoZSBvbmUgdGhhdCBp
dCB3YXMgbG9va2luZyBhdC4gVGhpcyBpbnNlcnRzIHRoZW0uCiAgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFsdWVJ
bmRleCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgpIHsKICAg
ICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBtX3NldHMuZmluZChibG9jay0+YXQodmFsdWVJbmRl
eCkpOwpAQCAtMTYyLDMwICsyMzYsNjkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBtX3ZhbHVlLT5hczxN
ZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgaWYgKG1lbW9yeSAmJiBwcm9jZXNzTWVtb3J5QmVmb3Jl
Q2xvYmJlcihtZW1vcnkpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmIChIZWFw
UmFuZ2Ugd3JpdGVzID0gbV92YWx1ZS0+ZWZmZWN0cygpLndyaXRlcykKICAgICAgICAgICAgIGNs
b2JiZXIobV9kYXRhLCB3cml0ZXMpOwogICAgICAgICAKLSAgICAgICAgaWYgKE1lbW9yeVZhbHVl
KiBtZW1vcnkgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSkKLSAgICAgICAgICAgIHByb2Nl
c3NNZW1vcnkobWVtb3J5KTsKKyAgICAgICAgaWYgKG1lbW9yeSkKKyAgICAgICAgICAgIHByb2Nl
c3NNZW1vcnlBZnRlckNsb2JiZXIobWVtb3J5KTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdHJ1
ZSBpZiB3ZSBnb3QgcmlkIG9mIHRoZSBvcGVyYXRpb24uIElmIHlvdSBjaGFuZ2VkIElSIGluIHRo
aXMgZnVuY3Rpb24sIHlvdSBoYXZlIHRvCisgICAgLy8gc2V0IG1fY2hhbmdlZCBldmVuIGlmIHlv
dSBhbHNvIHJldHVybiB0cnVlLgorICAgIGJvb2wgcHJvY2Vzc01lbW9yeUJlZm9yZUNsb2JiZXIo
TWVtb3J5VmFsdWUqIG1lbW9yeSkKKyAgICB7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1lbW9y
eS0+Y2hpbGQoMCk7CisgICAgICAgIFZhbHVlKiBwdHIgPSBtZW1vcnktPmxhc3RDaGlsZCgpOwor
ICAgICAgICBIZWFwUmFuZ2UgcmFuZ2UgPSBtZW1vcnktPnJhbmdlKCk7CisgICAgICAgIGludDMy
X3Qgb2Zmc2V0ID0gbWVtb3J5LT5vZmZzZXQoKTsKKworICAgICAgICBzd2l0Y2ggKG1lbW9yeS0+
b3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAgICByZXR1cm4gaGFu
ZGxlU3RvcmVCZWZvcmVDbG9iYmVyKAorICAgICAgICAgICAgICAgIHB0ciwgcmFuZ2UsCisgICAg
ICAgICAgICAgICAgWyZdIChNZW1vcnlWYWx1ZSogY2FuZGlkYXRlKSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS0+b2Zmc2V0KCkgPT0gb2Zmc2V0CisgICAg
ICAgICAgICAgICAgICAgICAgICAmJiAoKGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gU3RvcmU4ICYm
IGNhbmRpZGF0ZS0+Y2hpbGQoMCkgPT0gdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgKChjYW5kaWRhdGUtPm9wY29kZSgpID09IExvYWQ4WiB8fCBjYW5kaWRhdGUtPm9wY29k
ZSgpID09IExvYWQ4UykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2FuZGlk
YXRlID09IHZhbHVlKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIGNhc2UgU3RvcmUx
NjoKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdG9yZUJlZm9yZUNsb2JiZXIoCisgICAgICAg
ICAgICAgICAgcHRyLCByYW5nZSwKKyAgICAgICAgICAgICAgICBbJl0gKE1lbW9yeVZhbHVlKiBj
YW5kaWRhdGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRl
LT5vZmZzZXQoKSA9PSBvZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICgoY2FuZGlk
YXRlLT5vcGNvZGUoKSA9PSBTdG9yZTE2ICYmIGNhbmRpZGF0ZS0+Y2hpbGQoMCkgPT0gdmFsdWUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChjYW5kaWRhdGUtPm9wY29kZSgpID09
IExvYWQxNlogfHwgY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBMb2FkMTZTKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiBjYW5kaWRhdGUgPT0gdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGVT
dG9yZUJlZm9yZUNsb2JiZXIoCisgICAgICAgICAgICAgICAgcHRyLCByYW5nZSwKKyAgICAgICAg
ICAgICAgICBbJl0gKE1lbW9yeVZhbHVlKiBjYW5kaWRhdGUpIC0+IGJvb2wgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlLT5vZmZzZXQoKSA9PSBvZmZzZXQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICYmICgoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBTdG9yZSAmJiBjYW5k
aWRhdGUtPmNoaWxkKDApID09IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IChjYW5kaWRhdGUtPm9wY29kZSgpID09IExvYWQgJiYgY2FuZGlkYXRlID09IHZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAKICAgICB2b2lkIGNsb2JiZXIoSW1wdXJlQmxvY2tE
YXRhJiBkYXRhLCBIZWFwUmFuZ2Ugd3JpdGVzKQogICAgIHsKICAgICAgICAgZGF0YS53cml0ZXMu
YWRkKHdyaXRlcyk7CiAgICAgICAgIAotICAgICAgICBkYXRhLm1lbW9yeVZhbHVlcy5yZW1vdmVJ
ZigKLSAgICAgICAgICAgIFsmXSAoSGFzaE1hcDxWYWx1ZSosIE1hdGNoZXM+OjpLZXlWYWx1ZVBh
aXJUeXBlJiBlbnRyeSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgZW50cnkudmFsdWUucmVt
b3ZlQWxsTWF0Y2hpbmcoCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoVmFsdWUqIHZhbHVlKSAt
PiBib29sIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNZW1vcnlWYWx1ZSogbWVtb3J5
ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBtZW1vcnktPnJhbmdlKCkub3ZlcmxhcHMod3JpdGVzKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZW50cnkudmFsdWUuaXNFbXB0eSgpOworICAgICAgICBkYXRhLm1lbW9y
eVZhbHVlc0F0VGFpbC5yZW1vdmVJZigKKyAgICAgICAgICAgIFsmXSAoTWVtb3J5VmFsdWUqIG1l
bW9yeSkgeworICAgICAgICAgICAgICAgIHJldHVybiBtZW1vcnktPnJhbmdlKCkub3ZlcmxhcHMo
d3JpdGVzKTsKICAgICAgICAgICAgIH0pOwogICAgIH0KIAotICAgIHZvaWQgcHJvY2Vzc01lbW9y
eShNZW1vcnlWYWx1ZSogbWVtb3J5KQorICAgIHZvaWQgcHJvY2Vzc01lbW9yeUFmdGVyQ2xvYmJl
cihNZW1vcnlWYWx1ZSogbWVtb3J5KQogICAgIHsKICAgICAgICAgVmFsdWUqIHB0ciA9IG1lbW9y
eS0+bGFzdENoaWxkKCk7CiAgICAgICAgIEhlYXBSYW5nZSByYW5nZSA9IG1lbW9yeS0+cmFuZ2Uo
KTsKQEAgLTMwMSwxMCArNDE0LDMzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogCi0gICAgICAgIGNhc2UgU3RvcmU4OgotICAgICAgICBjYXNlIFN0b3JlMTY6Cisg
ICAgICAgIGNhc2UgU3RvcmU4OiB7CisgICAgICAgICAgICBoYW5kbGVTdG9yZUFmdGVyQ2xvYmJl
cigKKyAgICAgICAgICAgICAgICBwdHIsIHJhbmdlLAorICAgICAgICAgICAgICAgIFsmXSAoTWVt
b3J5VmFsdWUqIGNhbmRpZGF0ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBjYW5kaWRhdGUtPm9wY29kZSgpID09IFN0b3JlOAorICAgICAgICAgICAgICAgICAgICAgICAg
JiYgY2FuZGlkYXRlLT5vZmZzZXQoKSA9PSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
U3RvcmUxNjogeworICAgICAgICAgICAgaGFuZGxlU3RvcmVBZnRlckNsb2JiZXIoCisgICAgICAg
ICAgICAgICAgcHRyLCByYW5nZSwKKyAgICAgICAgICAgICAgICBbJl0gKE1lbW9yeVZhbHVlKiBj
YW5kaWRhdGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRl
LT5vcGNvZGUoKSA9PSBTdG9yZTE2CisgICAgICAgICAgICAgICAgICAgICAgICAmJiBjYW5kaWRh
dGUtPm9mZnNldCgpID09IG9mZnNldDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTdG9yZTogewot
ICAgICAgICAgICAgYWRkTWVtb3J5VmFsdWUobV9kYXRhLCBtZW1vcnkpOworICAgICAgICAgICAg
aGFuZGxlU3RvcmVBZnRlckNsb2JiZXIoCisgICAgICAgICAgICAgICAgcHRyLCByYW5nZSwKKyAg
ICAgICAgICAgICAgICBbJl0gKE1lbW9yeVZhbHVlKiBjYW5kaWRhdGUpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBTdG9yZQorICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgY2FuZGlkYXRlLT5vZmZzZXQoKSA9PSBvZmZzZXQ7Cisg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0z
MTYsNiArNDUyLDgyIEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RmlsdGVyPgorICAgIGJvb2wgaGFuZGxlU3RvcmVCZWZvcmVDbG9iYmVyKFZhbHVlKiBwdHIsIEhl
YXBSYW5nZSByYW5nZSwgY29uc3QgRmlsdGVyJiBmaWx0ZXIpCisgICAgeworICAgICAgICBNZW1v
cnlNYXRjaGVzIG1hdGNoZXMgPSBmaW5kTWVtb3J5VmFsdWUocHRyLCByYW5nZSwgZmlsdGVyKTsK
KyAgICAgICAgaWYgKG1hdGNoZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoTm9wKCk7CisgICAgICAgIG1fY2hhbmdl
ZCA9IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZpbHRlcj4KKyAgICB2b2lkIGhhbmRsZVN0b3JlQWZ0ZXJDbG9iYmVyKFZhbHVlKiBw
dHIsIEhlYXBSYW5nZSByYW5nZSwgY29uc3QgRmlsdGVyJiBmaWx0ZXIpCisgICAgeworICAgICAg
ICBpZiAoZmluZFN0b3JlQWZ0ZXJDbG9iYmVyKHB0ciwgcmFuZ2UsIGZpbHRlcikpIHsKKyAgICAg
ICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoTm9wKCk7CisgICAgICAgICAgICBtX2NoYW5nZWQg
PSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9kYXRh
Lm1lbW9yeVZhbHVlc0F0VGFpbC5hZGQobV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlcj4KKyAgICBib29sIGZpbmRTdG9yZUFm
dGVyQ2xvYmJlcihWYWx1ZSogcHRyLCBIZWFwUmFuZ2UgcmFuZ2UsIGNvbnN0IEZpbHRlciYgZmls
dGVyKQorICAgIHsKKyAgICAgICAgLy8gV2UgY2FuIGVsaW1pbmF0ZSBhIHN0b3JlIGlmIGV2ZXJ5
IGZvcndhcmQgcGF0aCBoaXRzIGEgc3RvcmUgdG8gdGhlIHNhbWUgbG9jYXRpb24gYmVmb3JlCisg
ICAgICAgIC8vIGhpdHRpbmcgYW55IG9wZXJhdGlvbiB0aGF0IG9ic2VydmVzIHRoZSBzdG9yZS4g
VGhpcyBzZWFyY2ggc2VlbXMgbGlrZSBpdCBzaG91bGQgYmUKKyAgICAgICAgLy8gZXhwZW5zaXZl
LCBidXQgaW4gdGhlIG92ZXJ3aGVsbWluZyBtYWpvcml0eSBvZiBjYXNlcyBpdCB3aWxsIGFsbW9z
dCBpbW1lZGlhdGVseSBoaXQgYW4gCisgICAgICAgIC8vIG9wZXJhdGlvbiB0aGF0IGludGVyZmVy
ZXMuCisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCptX3ZhbHVl
LCAiOiBsb29raW5nIGZvcndhcmQgZm9yIHN0b3JlcyB0byAiLCAqcHRyLCAiLi4uXG4iKTsKKwor
ICAgICAgICAvLyBGaXJzdCBzZWFyY2ggZm9yd2FyZCBpbiB0aGlzIGJhc2ljIGJsb2NrLgorICAg
ICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgY29vbCB0byBnZXQgcmlkIG9mIHRoaXMgbGluZWFy
IHNlYXJjaC4gSXQncyBub3Qgc3VwZXIgY3JpdGljYWwgc2luY2UKKyAgICAgICAgLy8gd2Ugd2ls
bCBwcm9iYWJseSBiYWlsIG91dCB2ZXJ5IHF1aWNrbHksIGJ1dCBpdCAqaXMqIGFubm95aW5nLgor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleCArIDE7IGluZGV4IDwgbV9ibG9j
ay0+c2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2Jsb2Nr
LT5hdChpbmRleCk7CisKKyAgICAgICAgICAgIGlmIChNZW1vcnlWYWx1ZSogbWVtb3J5VmFsdWUg
PSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobWVtb3J5
VmFsdWUtPmxhc3RDaGlsZCgpID09IHB0ciAmJiBmaWx0ZXIobWVtb3J5VmFsdWUpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
RWZmZWN0cyBlZmZlY3RzID0gdmFsdWUtPmVmZmVjdHMoKTsKKyAgICAgICAgICAgIGlmIChlZmZl
Y3RzLnJlYWRzLm92ZXJsYXBzKHJhbmdlKSB8fCBlZmZlY3RzLndyaXRlcy5vdmVybGFwcyhyYW5n
ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCFtX2Jsb2NrLT5udW1TdWNjZXNzb3JzKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICAgICAgd29ya2xpc3QucHVz
aEFsbChtX2Jsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSk7CisKKyAgICAgICAgd2hpbGUgKEJhc2lj
QmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgICAgIEltcHVyZUJsb2Nr
RGF0YSYgZGF0YSA9IG1faW1wdXJlQmxvY2tEYXRhW2Jsb2NrXTsKKworICAgICAgICAgICAgTWVt
b3J5VmFsdWUqIG1hdGNoID0gZGF0YS5zdG9yZXNBdEhlYWQuZmluZChwdHIsIGZpbHRlcik7Cisg
ICAgICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2ggIT0gbV92YWx1ZSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGRhdGEud3JpdGVzLm92ZXJsYXBzKHJhbmdl
KSB8fCBkYXRhLnJlYWRzLm92ZXJsYXBzKHJhbmdlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgICAgIGlmICghYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIHdvcmtsaXN0LnB1c2hBbGwo
YmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlcj4KICAgICB2b2lkIGhh
bmRsZU1lbW9yeVZhbHVlKFZhbHVlKiBwdHIsIEhlYXBSYW5nZSByYW5nZSwgY29uc3QgRmlsdGVy
JiBmaWx0ZXIpCiAgICAgewogICAgICAgICBoYW5kbGVNZW1vcnlWYWx1ZSgKQEAgLTMzMiw3ICs1
NDQsNyBAQCBwcml2YXRlOgogICAgICAgICBNZW1vcnlNYXRjaGVzIG1hdGNoZXMgPSBmaW5kTWVt
b3J5VmFsdWUocHRyLCByYW5nZSwgZmlsdGVyKTsKICAgICAgICAgaWYgKHJlcGxhY2VNZW1vcnlW
YWx1ZShtYXRjaGVzLCByZXBsYWNlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYWRk
TWVtb3J5VmFsdWUobV9kYXRhLCBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSk7CisgICAgICAg
IG1fZGF0YS5tZW1vcnlWYWx1ZXNBdFRhaWwuYWRkKG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigp
KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXBsYWNlPgpAQCAtMzk2LDM5ICs2
MDgsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdm9p
ZCBhZGRNZW1vcnlWYWx1ZShJbXB1cmVCbG9ja0RhdGEmIGRhdGEsIE1lbW9yeVZhbHVlKiBtZW1v
cnkpCi0gICAgewotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkFk
ZGluZyBtZW1vcnk6ICIsICptZW1vcnksICJcbiIpOwotICAgICAgICAKLSAgICAgICAgTWF0Y2hl
cyYgbWF0Y2hlcyA9IGRhdGEubWVtb3J5VmFsdWVzLmFkZChtZW1vcnktPmxhc3RDaGlsZCgpLCBN
YXRjaGVzKCkpLml0ZXJhdG9yLT52YWx1ZTsKLQotICAgICAgICBpZiAobWF0Y2hlcy5jb250YWlu
cyhtZW1vcnkpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1hdGNoZXMuYXBwZW5k
KG1lbW9yeSk7Ci0gICAgfQotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVyPgogICAgIE1l
bW9yeU1hdGNoZXMgZmluZE1lbW9yeVZhbHVlKFZhbHVlKiBwdHIsIEhlYXBSYW5nZSByYW5nZSwg
Y29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgewogICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgICAgIGRhdGFMb2coKm1fdmFsdWUsICI6IGxvb2tpbmcgZm9yICIsICpwdHIsICIuLi5cbiIp
OworICAgICAgICAgICAgZGF0YUxvZygqbV92YWx1ZSwgIjogbG9va2luZyBiYWNrd2FyZCBmb3Ig
IiwgKnB0ciwgIi4uLlxuIik7CiAgICAgICAgIAotICAgICAgICBhdXRvIGZpbmQgPSBbJl0gKElt
cHVyZUJsb2NrRGF0YSYgZGF0YSkgLT4gTWVtb3J5VmFsdWUqIHsKLSAgICAgICAgICAgIGF1dG8g
aXRlciA9IGRhdGEubWVtb3J5VmFsdWVzLmZpbmQocHRyKTsKLSAgICAgICAgICAgIGlmIChpdGVy
ICE9IGRhdGEubWVtb3J5VmFsdWVzLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChWYWx1
ZSogY2FuZGlkYXRlVmFsdWUgOiBpdGVyLT52YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0ZU1lbW9yeSA9IGNhbmRpZGF0ZVZhbHVlLT5hczxNZW1v
cnlWYWx1ZT4oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcihjYW5kaWRh
dGVNZW1vcnkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGVN
ZW1vcnk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfTsKLQotICAgICAg
ICBpZiAoTWVtb3J5VmFsdWUqIG1hdGNoID0gZmluZChtX2RhdGEpKSB7CisgICAgICAgIGlmIChN
ZW1vcnlWYWx1ZSogbWF0Y2ggPSBtX2RhdGEubWVtb3J5VmFsdWVzQXRUYWlsLmZpbmQocHRyLCBm
aWx0ZXIpKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgRm91bmQgIiwgKm1hdGNoLCAiIGxvY2FsbHkuXG4iKTsKICAgICAgICAgICAgIHJl
dHVybiB7IG1hdGNoIH07CkBAIC00NDEsOCArNjI3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgfQog
CiAgICAgICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7Ci0gICAgICAgIFZlY3RvcjxCYXNpY0Js
b2NrKiwgOD4gc2Vlbkxpc3Q7Ci0KICAgICAgICAgd29ya2xpc3QucHVzaEFsbChtX2Jsb2NrLT5w
cmVkZWNlc3NvcnMoKSk7CiAKICAgICAgICAgTWVtb3J5TWF0Y2hlcyBtYXRjaGVzOwpAQCAtNDUw
LDExICs2MzQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2Nr
ID0gd29ya2xpc3QucG9wKCkpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBMb29raW5nIGF0ICIsICpibG9jaywgIlxuIik7Ci0gICAgICAg
ICAgICBzZWVuTGlzdC5hcHBlbmQoYmxvY2spOwogCiAgICAgICAgICAgICBJbXB1cmVCbG9ja0Rh
dGEmIGRhdGEgPSBtX2ltcHVyZUJsb2NrRGF0YVtibG9ja107CiAKLSAgICAgICAgICAgIE1lbW9y
eVZhbHVlKiBtYXRjaCA9IGZpbmQoZGF0YSk7CisgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWF0
Y2ggPSBkYXRhLm1lbW9yeVZhbHVlc0F0VGFpbC5maW5kKHB0ciwgZmlsdGVyKTsKICAgICAgICAg
ICAgIGlmIChtYXRjaCAmJiBtYXRjaCAhPSBtX3ZhbHVlKSB7CiAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBGb3VuZCBtYXRjaDog
IiwgKm1hdGNoLCAiXG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9y
eVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5
VmFsdWUuaAkocmV2aXNpb24gMTk3Mjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMjMgQEAgcHVibGljOgog
ICAgICAgICB9CiAgICAgfQogCisgICAgc3RhdGljIGJvb2wgaXNTdG9yZShPcGNvZGUgb3Bjb2Rl
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBTdG9yZTg6
CisgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNMb2FkKE9wY29kZSBvcGNv
ZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWNjZXB0cyhvcGNvZGUpICYmICFpc1N0b3JlKG9w
Y29kZSk7CisgICAgfQorCiAgICAgfk1lbW9yeVZhbHVlKCk7CiAKICAgICBpbnQzMl90IG9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxOTcyOTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtOTAsNiArOTAsNTAgQEAgcHVibGljOgogICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyBy
ZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CiAgICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4g
aXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KIAorICAgIGNsYXNzIGNvbnN0X2l0ZXJhdG9yIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9j
b2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgY29uc3RfaXRlcmF0b3IoY29uc3QgU3VjY2Vzc29yQ29sbGVj
dGlvbiYgY29sbGVjdGlvbiwgc2l6ZV90IGluZGV4KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rp
b24oJmNvbGxlY3Rpb24pCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOworICAg
ICAgICB9CisKKyAgICAgICAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7
CisgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9jb2xsZWN0aW9uID09
IG90aGVyLm1fY29sbGVjdGlvbik7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhl
ci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNv
bnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBj
b25zdCBTdWNjZXNzb3JDb2xsZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAgICAgIHNpemVfdCBt
X2luZGV4OworICAgIH07CisKKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIGNvbnN0X2l0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKIHByaXZh
dGU6CiAgICAgU3VjY2Vzc29yTGlzdCYgbV9saXN0OwogfTsKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5
NzMwNSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE5IEBACisyMDE2LTAyLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgQjMgc2hvdWxkIGhhdmUgZ2xvYmFsIHN0b3JlIGVsaW1pbmF0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ2NTgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGVzZSB0d28gYmVuY2htYXJr
cyBib3RoIHNwZWVkIHVwIHNpZ25pZmljYW50bHkgd2l0aCB0aGlzIGNoYW5nZS4KKworICAgICAg
ICAqIGpzL3JlZ3Jlc3MvYnVpbGQtbGFyZ2Utb2JqZWN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICoganMvcmVncmVzcy9idWlsZC1sYXJnZS1vYmplY3QuaHRtbDogQWRkZWQuCisgICAg
ICAgICoganMvcmVncmVzcy9tYW55LXJlcGVhdC1zdG9yZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBqcy9yZWdyZXNzL21hbnktcmVwZWF0LXN0b3Jlcy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9idWlsZC1sYXJnZS1vYmplY3QuanM6IEFk
ZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21hbnktcmVwZWF0LXN0b3Jl
cy5qczogQWRkZWQuCisKIDIwMTYtMDItMjggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBh
cHBsZS5jb20+CiAKICAgICAgICAgU3dpdGNoIHRvIGFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5mb2xk
ZXIgZm9yIDxhdHRhY2htZW50PiBmb2xkZXIgc3BlY2lhbC1jYXNlCkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2J1aWxkLWxhcmdlLW9iamVjdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9idWlsZC1sYXJnZS1vYmplY3QtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9idWlsZC1sYXJnZS1vYmpl
Y3QtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVz
cy9idWlsZC1sYXJnZS1vYmplY3QKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BB
U1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvYnVpbGQtbGFy
Z2Utb2JqZWN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9idWls
ZC1sYXJnZS1vYmplY3QuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvYnVpbGQtbGFyZ2Utb2JqZWN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Jl
Z3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvYnVpbGQt
bGFyZ2Utb2JqZWN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
cmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvbWFueS1yZXBlYXQtc3RvcmVzLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL21hbnktcmVwZWF0LXN0b3Jlcy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL21hbnktcmVwZWF0
LXN0b3Jlcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNS
ZWdyZXNzL21hbnktcmVwZWF0LXN0b3JlcworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9tYW55
LXJlcGVhdC1zdG9yZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L21hbnktcmVwZWF0LXN0b3Jlcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9tYW55LXJlcGVhdC1zdG9yZXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9t
YW55LXJlcGVhdC1zdG9yZXMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvYnVpbGQtbGFyZ2Utb2JqZWN0Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2J1aWxk
LWxhcmdlLW9iamVjdC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL2J1aWxkLWxhcmdlLW9iamVjdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM0IEBACit2YXIgZzsKKyhmdW5jdGlvbigpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDAwMDA7ICsraSkgeworICAgICAgICB2YXIgbyA9IHt9CisgICAgICAgIG8uYSA9IDA7Cisg
ICAgICAgIG8uYiA9IDE7CisgICAgICAgIG8uYyA9IDI7CisgICAgICAgIG8uZCA9IDM7CisgICAg
ICAgIG8uZSA9IDQ7CisgICAgICAgIG8uZiA9IDU7CisgICAgICAgIG8uZyA9IDY7CisgICAgICAg
IG8uaCA9IDc7CisgICAgICAgIG8uaSA9IDg7CisgICAgICAgIG8uaiA9IDk7CisgICAgICAgIG8u
ayA9IDEwOworICAgICAgICBvLmwgPSAxMTsKKyAgICAgICAgby5tID0gMTI7CisgICAgICAgIG8u
biA9IDEzOworICAgICAgICBvLm8gPSAxNDsKKyAgICAgICAgby5wID0gMTU7CisgICAgICAgIG8u
cSA9IDA7CisgICAgICAgIG8uciA9IDE7CisgICAgICAgIG8ucyA9IDI7CisgICAgICAgIG8udCA9
IDM7CisgICAgICAgIG8udSA9IDQ7CisgICAgICAgIG8udiA9IDU7CisgICAgICAgIG8udyA9IDY7
CisgICAgICAgIG8ueCA9IDc7CisgICAgICAgIG8ueSA9IDg7CisgICAgICAgIG8ueiA9IDk7Cisg
ICAgICAgIGcgPSBvOworICAgIH0KKyAgICByZXR1cm4gZzsKK30pKCk7CkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9tYW55LXJlcGVhdC1zdG9yZXMuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbWFueS1yZXBlYXQt
c3RvcmVzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvbWFueS1yZXBlYXQtc3RvcmVzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzgg
QEAKK3ZhciBnOworKGZ1bmN0aW9uKCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAw
MDA7ICsraSkgeworICAgICAgICBnID0gaSArIDA7CisgICAgICAgIGcgPSBpICsgMTsKKyAgICAg
ICAgZyA9IGkgKyAyOworICAgICAgICBnID0gaSArIDM7CisgICAgICAgIGcgPSBpICsgNDsKKyAg
ICAgICAgZyA9IGkgKyA1OworICAgICAgICBnID0gaSArIDY7CisgICAgICAgIGcgPSBpICsgNzsK
KyAgICAgICAgZyA9IGkgKyA4OworICAgICAgICBnID0gaSArIDk7CisgICAgICAgIGcgPSBpICsg
MTA7CisgICAgICAgIGcgPSBpICsgMTE7CisgICAgICAgIGcgPSBpICsgMTI7CisgICAgICAgIGcg
PSBpICsgMTM7CisgICAgICAgIGcgPSBpICsgMTQ7CisgICAgICAgIGcgPSBpICsgMTU7CisgICAg
ICAgIGcgPSBpICsgMDsKKyAgICAgICAgZyA9IGkgKyAxOworICAgICAgICBnID0gaSArIDI7Cisg
ICAgICAgIGcgPSBpICsgMzsKKyAgICAgICAgZyA9IGkgKyA0OworICAgICAgICBnID0gaSArIDU7
CisgICAgICAgIGcgPSBpICsgNjsKKyAgICAgICAgZyA9IGkgKyA3OworICAgICAgICBnID0gaSAr
IDg7CisgICAgICAgIGcgPSBpICsgOTsKKyAgICAgICAgZyA9IGkgKyAxMDsKKyAgICAgICAgZyA9
IGkgKyAxMTsKKyAgICAgICAgZyA9IGkgKyAxMjsKKyAgICAgICAgZyA9IGkgKyAxMzsKKyAgICAg
ICAgZyA9IGkgKyAxNDsKKyAgICAgICAgZyA9IGkgKyAxNTsKKyAgICB9CisgICAgcmV0dXJuIGc7
Cit9KSgpOwo=
</data>
<flag name="review"
          id="297247"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>