<?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>143833</bug_id>
          
          <creation_ts>2015-04-16 11:27:44 -0700</creation_ts>
          <short_desc>DFG bytecode parser should record the places where bytecode operands die and this should be preserved by write(SideState)/NodeMustGenerate</short_desc>
          <delta_ts>2015-04-19 15:28:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>143734</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1085988</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-16 11:27:44 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086121</commentid>
    <comment_count>1</comment_count>
      <attachid>250962</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-16 15:56:35 -0700</bug_when>
    <thetext>Created attachment 250962
work in progress

Starting to pass tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086673</commentid>
    <comment_count>2</comment_count>
      <attachid>251128</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-19 14:19:15 -0700</bug_when>
    <thetext>Created attachment 251128
passing some tests

Still need to test more things and run benchmarks.  The perf impact of this is the insertion of additional nodes and the fact that block-&gt;last() is no longer a terminal.  Getting the terminal requires a small backwards search.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086677</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-19 14:47:33 -0700</bug_when>
    <thetext>I&apos;m no longer sure about this.  It appears to require some dirty logic for inserting the KillHints in the &quot;right&quot; places and then maintaining them through transformations.  It would be super awesome if we could just use FullBytecodeLiveness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086682</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-19 15:28:31 -0700</bug_when>
    <thetext>The point of inserting KillHints was that this was supposed to be faster than consulting FullBytecodeLiveness late in the game.  But, as far as I can tell, even inserting KillHints incurs a 1% loss on SunSpider.

I&apos;m going to factor out the sloppy-terminal part of this patch.  Hopefully that is not responsible for any slow-down.  If it&apos;s not, then I&apos;ll move on to writing a Phantom inserter based on FullBytecodeLiveness.  Then I&apos;ll try to make that as fast as possible.  It seems like it shouldn&apos;t have to be slow - after all, liveness over bytecode is just fun with bitvectors.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250962</attachid>
            <date>2015-04-16 15:56:35 -0700</date>
            <delta_ts>2015-04-19 14:19:15 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>48157</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTg4LDEwICsxODgsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgTW92
SGludDogewotICAgICAgICAvLyBEb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLiBBIE1vdkhpbnQg
b25seSBpbmZvcm1zIHVzIGFib3V0IHdoYXQgd291bGQgaGF2ZSBoYXBwZW5lZAotICAgICAgICAv
LyBpbiBieXRlY29kZSwgYnV0IHRoaXMgY29kZSBpcyBqdXN0IGNvbmNlcm5lZCB3aXRoIHdoYXQg
aXMgYWN0dWFsbHkgaGFwcGVuaW5nIGR1cmluZwotICAgICAgICAvLyBERkcgZXhlY3V0aW9uLgor
ICAgIGNhc2UgTW92SGludDoKKyAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBLaWxsSGlu
dDoKKyAgICBjYXNlIFB1dEhpbnQ6IHsKKyAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byBkbyBhbnl0
aGluZy4gVGhlc2UganVzdCB0ZWxsIHVzIGFib3V0IHdoYXQgaGFwcGVuZWQgaW4gYnl0ZWNvZGUs
IGJ1dCB0aGVzZQorICAgICAgICAvLyB0aGluZ3MgZG9uJ3QgaGFwcGVuIGFsb25nIHRoZSBwYXRo
IHRoYXQgQUkgY2FyZXMgYWJvdXQuCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBA
IC0xMzYzLDkgKzEzNjUsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgIC8vIFRoaXMgY2xhaW1zIHRvIHJldHVybiBib3R0b20uCiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKLSAgICBjYXNlIFB1dEhpbnQ6Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ICAKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CiAgICAgICAgIFN0cnVjdHVyZVNl
dCBzZXQ7CiAgICAgICAgIApAQCAtMjEwMiw3ICsyMTAxLDYgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogCiAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVy
OgogICAgIGNhc2UgTG9vcEhpbnQ6Ci0gICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICBicmVh
azsKIAogICAgIGNhc2UgVW5yZWFjaGFibGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYg
KzcxLDE5IEBAIHZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG4KICAgICBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscywg
QWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKTsKIH0KIAordm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNl
VGVybWluYWwoTm9kZSogbm9kZSkKK3sKKyAgICBOb2RlQW5kSW5kZXggcmVzdWx0ID0gZmluZFRl
cm1pbmFsKCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIGFwcGVuZChub2RlKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgbV9ub2Rlcy5pbnNlcnQocmVzdWx0LmluZGV4ICsgMSwgbm9kZSk7Cisg
ICAgICAgIHJlc3VsdC5ub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgfQorICAgIAorICAg
IEFTU0VSVCh0ZXJtaW5hbCgpKTsKK30KKwogYm9vbCBCYXNpY0Jsb2NrOjppc0luUGhpcyhOb2Rl
KiBub2RlKSBjb25zdAogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7
ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJ
KHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYzLDE4ICs2Myw1MiBAQCBz
dHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgTm9kZSogYXQoc2l6
ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KICAgICBOb2RlKiYgb3BlcmF0b3Jb
XShzaXplX3QgaSkgeyByZXR1cm4gYXQoaSk7IH0KICAgICBOb2RlKiBvcGVyYXRvcltdKHNpemVf
dCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQotICAgIE5vZGUqIGxhc3QoKSBjb25zdCB7IHJl
dHVybiBhdChzaXplKCkgLSAxKTsgfQotICAgIE5vZGUqIHRha2VMYXN0KCkgeyByZXR1cm4gbV9u
b2Rlcy50YWtlTGFzdCgpOyB9CisKKyAgICBOb2RlQW5kSW5kZXggZmluZFRlcm1pbmFsKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHNpemVfdCBpID0gc2l6ZSgpOworICAgICAgICB3aGlsZSAoaS0t
KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYXQoaSk7CisgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSnVtcDoKKyAgICAgICAgICAgIGNhc2Ug
QnJhbmNoOgorICAgICAgICAgICAgY2FzZSBTd2l0Y2g6CisgICAgICAgICAgICBjYXNlIFJldHVy
bjoKKyAgICAgICAgICAgIGNhc2UgVW5yZWFjaGFibGU6CisgICAgICAgICAgICAgICAgcmV0dXJu
IE5vZGVBbmRJbmRleChub2RlLCBpKTsKKyAgICAgICAgICAgIC8vIFRoZSBiaXR0ZXIgZW5kIGNh
biBjb250YWluIFBoYW50b21zIGFuZCBLaWxsSGludHMuIFRoZXJlIHdpbGwgcHJvYmFibHkgb25s
eSBiZSBvbmUgb3IgdHdvIG9mIHRoZXNlLgorICAgICAgICAgICAgY2FzZSBQaGFudG9tOgorICAg
ICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICBjYXNlIEtpbGxIaW50Ogor
ICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vZGVBbmRJbmRleCgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBOb2RlQW5kSW5kZXgoKTsKKyAg
ICB9CisgICAgCisgICAgTm9kZSogdGVybWluYWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZpbmRUZXJtaW5hbCgpLm5vZGU7CisgICAgfQorICAgIAogICAgIHZvaWQgcmVzaXplKHNp
emVfdCBzaXplKSB7IG1fbm9kZXMucmVzaXplKHNpemUpOyB9CiAgICAgdm9pZCBncm93KHNpemVf
dCBzaXplKSB7IG1fbm9kZXMuZ3JvdyhzaXplKTsgfQogICAgIAogICAgIHZvaWQgYXBwZW5kKE5v
ZGUqIG5vZGUpIHsgbV9ub2Rlcy5hcHBlbmQobm9kZSk7IH0KLSAgICB2b2lkIGluc2VydEJlZm9y
ZUxhc3QoTm9kZSogbm9kZSkKKyAgICB2b2lkIGluc2VydEJlZm9yZVRlcm1pbmFsKE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBhcHBlbmQobGFzdCgpKTsKLSAgICAgICAgYXQoc2l6ZSgpIC0g
MikgPSBub2RlOworICAgICAgICBOb2RlQW5kSW5kZXggcmVzdWx0ID0gZmluZFRlcm1pbmFsKCk7
CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgYXBwZW5kKG5vZGUpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX25vZGVzLmluc2VydChyZXN1bHQuaW5kZXgsIG5vZGUpOwog
ICAgIH0KICAgICAKKyAgICB2b2lkIHJlcGxhY2VUZXJtaW5hbChOb2RlKiBub2RlKTsKKyAgICAK
ICAgICBzaXplX3QgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVybiBwaGlzLnNpemUoKSArIHNpemUo
KTsgfQogICAgIE5vZGUqIG5vZGUoc2l6ZV90IGkpIGNvbnN0CiAgICAgewpAQCAtOTMsMTUgKzEy
NywxNSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgTm9k
ZSogZmlyc3RPcmlnaW5Ob2RlKCk7CiAgICAgTm9kZU9yaWdpbiBmaXJzdE9yaWdpbigpOwogICAg
IAotICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSB7IHJldHVybiBsYXN0KCktPm51bVN1Y2Nl
c3NvcnMoKTsgfQorICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSB7IHJldHVybiB0ZXJtaW5h
bCgpLT5udW1TdWNjZXNzb3JzKCk7IH0KICAgICAKICAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29y
KHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGxhc3QoKS0+c3VjY2Vzc29y
KGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHRlcm1pbmFsKCktPnN1Y2Nlc3NvcihpbmRleCk7CiAg
ICAgfQogICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JGb3JDb25kaXRpb24oYm9vbCBjb25kaXRp
b24pCiAgICAgewotICAgICAgICByZXR1cm4gbGFzdCgpLT5zdWNjZXNzb3JGb3JDb25kaXRpb24o
Y29uZGl0aW9uKTsKKyAgICAgICAgcmV0dXJuIHRlcm1pbmFsKCktPnN1Y2Nlc3NvckZvckNvbmRp
dGlvbihjb25kaXRpb24pOwogICAgIH0KICAgICAKICAgICBjbGFzcyBTdWNjZXNzb3JzSXRlcmFi
bGUgewpAQCAtMTgzLDYgKzIxNyw5IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxC
YXNpY0Jsb2MKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBQYXJhbXM+CiAgICAgTm9kZSogYXBw
ZW5kTm9uVGVybWluYWwoR3JhcGgmLCBTcGVjdWxhdGVkVHlwZSwgUGFyYW1zLi4uKTsKICAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBQYXJhbXM+CisgICAgTm9kZSogcmVwbGFjZVRlcm1p
bmFsKEdyYXBoJiwgU3BlY3VsYXRlZFR5cGUsIFBhcmFtcy4uLik7CisgICAgCiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAogICAgIHZvaWQgZGlkTGluaygpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5l
cy5oCShyZXZpc2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
c2ljQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUsNyArNDUsMTUgQEAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gUGFyYW1zPgogTm9kZSogQmFzaWNCbG9jazo6YXBwZW5kTm9uVGVy
bWluYWwoR3JhcGgmIGdyYXBoLCBTcGVjdWxhdGVkVHlwZSB0eXBlLCBQYXJhbXMuLi4gcGFyYW1z
KQogewogICAgIE5vZGUqIHJlc3VsdCA9IGdyYXBoLmFkZE5vZGUodHlwZSwgcGFyYW1zLi4uKTsK
LSAgICBpbnNlcnRCZWZvcmVMYXN0KHJlc3VsdCk7CisgICAgaW5zZXJ0QmVmb3JlVGVybWluYWwo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBQ
YXJhbXM+CitOb2RlKiBCYXNpY0Jsb2NrOjpyZXBsYWNlVGVybWluYWwoR3JhcGgmIGdyYXBoLCBT
cGVjdWxhdGVkVHlwZSB0eXBlLCBQYXJhbXMuLi4gcGFyYW1zKQoreworICAgIE5vZGUqIHJlc3Vs
dCA9IGdyYXBoLmFkZE5vZGUodHlwZSwgcGFyYW1zLi4uKTsKKyAgICByZXBsYWNlVGVybWluYWwo
cmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTgyODU3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0gLyoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBA
IC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiQmFzaWNCbG9ja0xvY2F0aW9uLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVLaWxscy5oIgogI2lu
Y2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKQEAgLTUxNiw2ICs1MTcsOCBAQCBwcml2YXRlOgog
ICAgIHsKICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAor
ICAgICAgICBhZGRUb0dyYXBoKEtpbGxIaW50LCBPcEluZm8ob3BlcmFuZC5vZmZzZXQoKSkpOwor
ICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGU7CkBAIC04OTIsNiArODk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQ29k
ZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7
CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogbV9pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgIEJ5
dGVjb2RlS2lsbHMmIG1fYnl0ZWNvZGVLaWxsczsKICAgICAgICAgCiAgICAgICAgIFNjcmlwdEV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCk7IH0KICAgICAgICAgCkBAIC0xMDIyLDcgKzEwMjYsOCBAQCBwcml2YXRlOgogCiAjZGVm
aW5lIExBU1RfT1BDT0RFKG5hbWUpIFwKICAgICBtX2N1cnJlbnRJbmRleCArPSBPUENPREVfTEVO
R1RIKG5hbWUpOyBcCi0gICAgcmV0dXJuIHNob3VsZENvbnRpbnVlUGFyc2luZworICAgIGNvbnRp
bnVlSW5Mb29wID0gZmFsc2U7IFwKKyAgICBicmVhawogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKIHsKQEAgLTEwNDUsNiArMTA1MCw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUNhbGwoCiAgICAgaGFuZGxlQ2FsbCgKICAgICAgICAgcmVzdWx0LCBvcCwgSW5saW5l
Q2FsbEZyYW1lOjpraW5kRm9yKGtpbmQpLCBpbnN0cnVjdGlvblNpemUsIGNhbGxUYXJnZXQsCiAg
ICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCwgY2FsbExp
bmtTdGF0dXMpOworICAgIAorICAgIGFkZFRvR3JhcGgoS2lsbEhpbnQsIE9wSW5mbyhjYWxsZWUp
KTsKIH0KICAgICAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCkBAIC0xMTM4LDYg
KzExNDUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2FsbChJCiAgICAg
ICAgICYmIGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMs
IGZpcnN0RnJlZVJlZywgVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpLCBWaXJ0dWFsUmVnaXN0ZXIo
YXJndW1lbnRzKSwgZmlyc3RWYXJBcmdPZmZzZXQsIDAsIG1fY3VycmVudEluZGV4ICsgT1BDT0RF
X0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBvcCwgSW5saW5lQ2FsbEZyYW1lOjp2YXJhcmdzS2lu
ZEZvcihraW5kKSwgcHJlZGljdGlvbikpIHsKICAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRp
b24oKSkKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZENh
bGwoKTsKKyAgICAgICAgYWRkVG9HcmFwaChLaWxsSGludCwgT3BJbmZvKGNhbGxlZSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMTE3Niw4ICsxMTg0LDExIEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcygKIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6
ZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpCiB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpczsgKytpKQotICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpLCByZWdpc3Rlck9mZnNldCkpKTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2kpIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJlZ2lz
dGVyT2Zmc2V0KTsKKyAgICAgICAgYWRkVG9HcmFwaChLaWxsSGludCwgT3BJbmZvKHJlZy5vZmZz
ZXQoKSkpOworICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChyZWcpKTsKKyAgICB9CiB9
CiAKIHVuc2lnbmVkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmluZ0Nvc3QoQ2FsbFZhcmlhbnQgY2Fs
bGVlLCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKQEAgLTEzNTksNyArMTM3MCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGlu
ZUNhbGwoTm9kZSogY2EKICAgICAvLyBJZiB0aGVyZSB3YXMgYSByZXR1cm4sIGJ1dCBubyBlYXJs
eSByZXR1cm5zLCB0aGVuIHdlJ3JlIGRvbmUuIFdlIGFsbG93IHBhcnNpbmcgb2YKICAgICAvLyB0
aGUgY2FsbGVyIHRvIGNvbnRpbnVlIGluIHdoYXRldmVyIGJhc2ljIGJsb2NrIHdlJ3JlIGluIHJp
Z2h0IG5vdy4KICAgICBpZiAoIWlubGluZVN0YWNrRW50cnkubV9kaWRFYXJseVJldHVybiAmJiBp
bmxpbmVTdGFja0VudHJ5Lm1fZGlkUmV0dXJuKSB7Ci0gICAgICAgIEFTU0VSVChsYXN0QmxvY2st
PmlzRW1wdHkoKSB8fCAhbGFzdEJsb2NrLT5sYXN0KCktPmlzVGVybWluYWwoKSk7CisgICAgICAg
IEFTU0VSVChsYXN0QmxvY2stPmlzRW1wdHkoKSB8fCAhbGFzdEJsb2NrLT50ZXJtaW5hbCgpKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGNyZWF0ZWQgbmV3IGJsb2NrcyB0aGVuIHRoZSBs
YXN0IGJsb2NrIG5lZWRzIGxpbmtpbmcsIGJ1dCBpbiB0aGUKICAgICAgICAgLy8gY2FsbGVyLiBJ
dCBkb2Vzbid0IG5lZWQgdG8gYmUgbGlua2VkIHRvLCBidXQgaXQgbmVlZHMgb3V0Z29pbmcgbGlu
a3MuCkBAIC0xMzgwLDcgKzEzOTEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxs
KE5vZGUqIGNhCiAgICAgfQogICAgIAogICAgIC8vIElmIHdlIGdldCB0byB0aGlzIHBvaW50IHRo
ZW4gYWxsIGJsb2NrcyBtdXN0IGVuZCBpbiBzb21lIHNvcnQgb2YgdGVybWluYWxzLgotICAgIEFT
U0VSVChsYXN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKKyAgICBBU1NFUlQobGFzdEJs
b2NrLT50ZXJtaW5hbCgpKTsKIAogICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IGJhc2ljIGJs
b2NrIGZvciB0aGUgY29udGludWF0aW9uIGF0IHRoZSBjYWxsZXIuCiAgICAgUmVmUHRyPEJhc2lj
QmxvY2s+IGJsb2NrID0gYWRvcHRSZWYobmV3IEJhc2ljQmxvY2sobmV4dE9mZnNldCwgbV9udW1B
cmd1bWVudHMsIG1fbnVtTG9jYWxzLCBQTmFOKSk7CkBAIC0xMzkxLDcgKzE0MDIsNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2tUb0xpbmsgPSBpbmxpbmVTdGFja0VudHJ5Lm1f
dW5saW5rZWRCbG9ja3NbaV0ubV9ibG9jazsKICAgICAgICAgQVNTRVJUKCFibG9ja1RvTGluay0+
aXNMaW5rZWQpOwotICAgICAgICBOb2RlKiBub2RlID0gYmxvY2tUb0xpbmstPmxhc3QoKTsKKyAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrVG9MaW5rLT50ZXJtaW5hbCgpOwogICAgICAgICBBU1NF
UlQobm9kZS0+b3AoKSA9PSBKdW1wKTsKICAgICAgICAgQVNTRVJUKCFub2RlLT50YXJnZXRCbG9j
aygpKTsKICAgICAgICAgbm9kZS0+dGFyZ2V0QmxvY2soKSA9IGJsb2NrLmdldCgpOwpAQCAtMTgw
Miw3ICsxODEzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAg
bV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb25CbG9jay5nZXQoKTsKICAgICAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBsYW5kaW5nQmxvY2tzLnNpemUoKTsgaS0tOykKLSAgICAgICAgbGFuZGlu
Z0Jsb2Nrc1tpXS0+bGFzdCgpLT50YXJnZXRCbG9jaygpID0gY29udGludWF0aW9uQmxvY2suZ2V0
KCk7CisgICAgICAgIGxhbmRpbmdCbG9ja3NbaV0tPnRlcm1pbmFsKCktPnRhcmdldEJsb2NrKCkg
PSBjb250aW51YXRpb25CbG9jay5nZXQoKTsKICAgICAKICAgICBtX2N1cnJlbnRJbmRleCA9IG9s
ZE9mZnNldDsKICAgICAKQEAgLTI1NzEsNyArMjU4Miw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgfQogICAgIH0KIAotICAgIHdoaWxlICh0cnVl
KSB7CisgICAgYm9vbCBjb250aW51ZUluTG9vcCA9IHRydWU7CisgICAgd2hpbGUgKGNvbnRpbnVl
SW5Mb29wKSB7CiAgICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CiAgICAgICAgIAogICAg
ICAgICAvLyBEb24ndCBleHRlbmQgb3ZlciBqdW1wIGRlc3RpbmF0aW9ucy4KQEAgLTMxMjUsOSAr
MzEzNyw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAg
ICAgICBjYXNlIG9wX2ptcDogewogICAgICAgICAgICAgaW50IHJlbGF0aXZlT2Zmc2V0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVt
cCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKTsKICAgICAgICAgICAg
IGlmIChyZWxhdGl2ZU9mZnNldCA8PSAwKQogICAgICAgICAgICAgICAgIGZsdXNoRm9yVGVybWlu
YWwoKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3VycmVudEluZGV4
ICsgcmVsYXRpdmVPZmZzZXQpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2ptcCk7CiAg
ICAgICAgIH0KIApAQCAtMzI0Nyw4ICszMjU5LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJbmRleCht
X2dyYXBoLmZyZWV6ZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0YWJsZS5taW4gKyBp
KSkpLCB0YXJnZXQpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZsdXNoSWZUZXJtaW5h
bChkYXRhKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJmRhdGEpLCBn
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSk7Cisg
ICAgICAgICAgICBmbHVzaElmVGVybWluYWwoZGF0YSk7CiAgICAgICAgICAgICBMQVNUX09QQ09E
RShvcF9zd2l0Y2hfaW1tKTsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0zMjY3LDggKzMy
NzksOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgIFN3aXRjaENh
c2U6OndpdGhCeXRlY29kZUluZGV4KExhenlKU1ZhbHVlOjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmco
dGFibGUubWluICsgaSksIHRhcmdldCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZmx1
c2hJZlRlcm1pbmFsKGRhdGEpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5m
bygmZGF0YSksIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCkpKTsKKyAgICAgICAgICAgIGZsdXNoSWZUZXJtaW5hbChkYXRhKTsKICAgICAgICAgICAg
IExBU1RfT1BDT0RFKG9wX3N3aXRjaF9jaGFyKTsKICAgICAgICAgfQogCkBAIC0zMjg3LDEzICsz
Mjk5LDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgU3dpdGNo
Q2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgoTGF6eUpTVmFsdWU6Omtub3duU3RyaW5nSW1wbChpdGVy
LT5rZXkuZ2V0KCkpLCB0YXJnZXQpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZsdXNo
SWZUZXJtaW5hbChkYXRhKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8o
JmRhdGEpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpKSk7CisgICAgICAgICAgICBmbHVzaElmVGVybWluYWwoZGF0YSk7CiAgICAgICAgICAgICBM
QVNUX09QQ09ERShvcF9zd2l0Y2hfc3RyaW5nKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
b3BfcmV0OgotICAgICAgICAgICAgZmx1c2hGb3JSZXR1cm4oKTsKICAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9w
LT5tX3JldHVyblZhbHVlLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAgc2V0RGlyZWN0
KG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLCBJbW1lZGlhdGVTZXRXaXRoRmx1c2gpOwpA
QCAtMzMxNSwxNSArMzMyNiwxNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRC
bG9ja3MubGFzdCgpLm1fbmVlZHNFYXJseVJldHVybkxpbmtpbmcgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2RpZEVhcmx5UmV0dXJuID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmx1c2hGb3JSZXR1cm4oKTsKICAgICAg
ICAgICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgYWRkVG9HcmFwaChSZXR1cm4sIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7CiAgICAg
ICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQpOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
b3BfZW5kOgotICAgICAgICAgICAgZmx1c2hGb3JSZXR1cm4oKTsKICAgICAgICAgICAgIEFTU0VS
VCghaW5saW5lQ2FsbEZyYW1lKCkpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChSZXR1cm4sIGdl
dChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKKyAg
ICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9l
bmQpOwogCiAgICAgICAgIGNhc2Ugb3BfdGhyb3c6CkBAIC0zODQzLDE0ICszODU2LDIyIEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYnl0ZWNvZGVLaWxs
cy5mb3JFYWNoT3BlcmFuZEtpbGxlZEF0KAorICAgICAgICAgICAgY3VycmVudEluc3RydWN0aW9u
LCAvLyBVc2UgY3VycmVudEluc3RydWN0aW9uIHNpbmNlIHdlIGFscmVhZHkgY2xvYmJlcmVkIG1f
Y3VycmVudEluZGV4LgorICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Cisg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChLaWxsSGludCwgT3BJbmZvKHJlZy5vZmZzZXQoKSkp
OworICAgICAgICAgICAgfSk7CiAgICAgfQorICAgIAorICAgIHJldHVybiBzaG91bGRDb250aW51
ZVBhcnNpbmc7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayhCYXNpY0Jsb2Nr
KiBibG9jaywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKQogewogICAgIEFT
U0VSVCghYmxvY2stPmlzTGlua2VkKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0VtcHR5KCkpOwot
ICAgIE5vZGUqIG5vZGUgPSBibG9jay0+bGFzdCgpOworICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
dGVybWluYWwoKTsKICAgICBBU1NFUlQobm9kZS0+aXNUZXJtaW5hbCgpKTsKICAgICAKICAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKQEAgLTM5MjAsNiArMzk0MSw3IEBAIEJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICA6IG1fYnl0ZUNvZGVQYXJzZXIoYnl0ZUNv
ZGVQYXJzZXIpCiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX3Byb2ZpbGVk
QmxvY2socHJvZmlsZWRCbG9jaykKKyAgICAsIG1fYnl0ZWNvZGVLaWxscyhieXRlQ29kZVBhcnNl
ci0+bV9ncmFwaC5raWxsc0Zvcihjb2RlQmxvY2spKQogICAgICwgbV9jYWxsc2l0ZUJsb2NrSGVh
ZChjYWxsc2l0ZUJsb2NrSGVhZCkKICAgICAsIG1fcmV0dXJuVmFsdWUocmV0dXJuVmFsdWVWUikK
ICAgICAsIG1fZGlkUmV0dXJuKGZhbHNlKQpAQCAtNDEzMCw3ICs0MTUyLDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgICAgICAgICAgLy8gYXJlIGF0IHRoZSBl
bmQgb2YgYW4gaW5saW5lIGZ1bmN0aW9uLCBvciB3ZSByZWFsaXplZCB0aGF0IHdlCiAgICAgICAg
ICAgICAvLyBzaG91bGQgc3RvcCBwYXJzaW5nIGJlY2F1c2UgdGhlcmUgd2FzIGEgcmV0dXJuIGlu
IHRoZSBmaXJzdAogICAgICAgICAgICAgLy8gYmFzaWMgYmxvY2suCi0gICAgICAgICAgICBBU1NF
UlQobV9jdXJyZW50QmxvY2stPmlzRW1wdHkoKSB8fCBtX2N1cnJlbnRCbG9jay0+bGFzdCgpLT5p
c1Rlcm1pbmFsKCkgfHwgKG1fY3VycmVudEluZGV4ID09IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpICYmIGlubGluZUNhbGxGcmFtZSgpKSB8fCAhc2hvdWxkQ29udGludWVQYXJzaW5n
KTsKKyAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jay0+aXNFbXB0eSgpIHx8IG1fY3Vy
cmVudEJsb2NrLT50ZXJtaW5hbCgpIHx8IChtX2N1cnJlbnRJbmRleCA9PSBjb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLnNpemUoKSAmJiBpbmxpbmVDYWxsRnJhbWUoKSkgfHwgIXNob3VsZENvbnRp
bnVlUGFyc2luZyk7CiAKICAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWVQYXJzaW5nKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTgy
ODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGJs
b2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2gg
KGJsb2NrLT5sYXN0KCktPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGJsb2NrLT50
ZXJtaW5hbCgpLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBKdW1wOiB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIFN1Y2Nlc3NvciB3aXRoIG9uZSBwcmVkZWNlc3NvciAtPiBtZXJnZS4K
ICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5zdWNjZXNzb3IoMCktPnByZWRlY2Vzc29y
cy5zaXplKCkgPT0gMSkgewpAQCAtOTksMTcgKzk5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoZXh0cmVtZUxvZ2dpbmcpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguZGV0aHJlYWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4gYm91bmRhcnlOb2RlT3JpZ2lu
ID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJs
b2NrLT5sYXN0KCktPmNvbnZlcnRUb1BoYW50b20oKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoYmxvY2stPmxhc3QoKS0+cmVmQ291bnQoKSA9PSAxKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIHRlcm1pbmFsID0gYmxvY2stPnRlcm1pbmFsKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRlcm1pbmFsLT5pc1Rlcm1pbmFsKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4gYm91bmRhcnlOb2RlT3JpZ2lu
ID0gdGVybWluYWwtPm9yaWdpbjsKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpldHRp
c29uQmxvY2soYmxvY2ssIGpldHRpc29uZWRCbG9jaywgYm91bmRhcnlOb2RlT3JpZ2luKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nr
LT5hcHBlbmROb2RlKAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnJlcGxh
Y2VUZXJtaW5hbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3Bl
Y05vbmUsIEp1bXAsIGJvdW5kYXJ5Tm9kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKHRhcmdldEJsb2NrKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT50ZXJtaW5hbCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJDaGFuZ2VkID0gb3V0ZXJDaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTI5LDcgKzEzMSw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGNhc2UgU3dpdGNoOiB7Ci0gICAgICAgICAgICAgICAgICAgIFN3aXRjaERhdGEqIGRh
dGEgPSBibG9jay0+bGFzdCgpLT5zd2l0Y2hEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIFN3
aXRjaERhdGEqIGRhdGEgPSBibG9jay0+dGVybWluYWwoKS0+c3dpdGNoRGF0YSgpOwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gUHJ1bmUgb3V0IGNhc2VzIHRo
YXQgZW5kIHVwIGp1bXBpbmcgdG8gZGVmYXVsdC4KICAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEtPmNhc2VzLnNpemUoKTsgKytpKSB7CkBAIC0xNDksOCAr
MTUxLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBTd2l0Y2ggb24gY29uc3RhbnQgLT4gamV0dGlz
b24gYWxsIG90aGVyIHRhcmdldHMgYW5kIG1lcmdlLgotICAgICAgICAgICAgICAgICAgICBpZiAo
YmxvY2stPmxhc3QoKS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEZyb3plblZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5sYXN0KCktPmNoaWxkMSgpLT5j
b25zdGFudCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnRlcm1pbmFsKCktPmNo
aWxkMSgpLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5W
YWx1ZSogdmFsdWUgPSBibG9jay0+dGVybWluYWwoKS0+Y2hpbGQxKCktPmNvbnN0YW50KCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBUcmlTdGF0ZSBmb3VuZCA9IEZhbHNlVHJpU3RhdGU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jayA9IDA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5jYXNlcy5zaXplKCk7
IGZvdW5kID09IEZhbHNlVHJpU3RhdGUgJiYgaS0tOykgewpAQCAtMTgzLDExICsxODUsMTMgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZU9y
aWdpbiBib3VuZGFyeU5vZGVPcmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmxhc3QoKS0+Y29udmVydFRvUGhhbnRvbSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHRlcm1pbmFsID0gYmxvY2stPnRlcm1p
bmFsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZU9yaWdpbiBib3VuZGFyeU5v
ZGVPcmlnaW4gPSB0ZXJtaW5hbC0+b3JpZ2luOworCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gamV0dGlzb25lZEJsb2Nrcy5zaXplKCk7IGktLTspCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpldHRpc29uQmxvY2soYmxvY2ssIGpldHRpc29u
ZWRCbG9ja3NbaV0sIGJvdW5kYXJ5Tm9kZU9yaWdpbik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmxvY2stPmFwcGVuZE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnJlcGxhY2VUZXJtaW5hbCgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIGJvdW5k
YXJ5Tm9kZU9yaWdpbiwgT3BJbmZvKHRhcmdldEJsb2NrKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckNoYW5nZWQgPSBvdXRlckNoYW5n
ZWQgPSB0cnVlOwpAQCAtMjUzLDEzICsyNTcsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1f
Z3JhcGguZGV0aHJlYWQoKTsKICAgICAgICAgICAgIG1lcmdlQmxvY2tzKGJsb2NrLCB0YXJnZXRC
bG9jaywgbm9CbG9ja3MoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBOb2RlKiBi
cmFuY2ggPSBibG9jay0+bGFzdCgpOwotICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC0+aXNUZXJt
aW5hbCgpKTsKKyAgICAgICAgICAgIE5vZGUqIGJyYW5jaCA9IGJsb2NrLT50ZXJtaW5hbCgpOwog
ICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC0+b3AoKSA9PSBCcmFuY2ggfHwgYnJhbmNoLT5vcCgp
ID09IFN3aXRjaCk7Ci0gICAgICAgICAgICBicmFuY2gtPmNvbnZlcnRUb1BoYW50b20oKTsKLSAg
ICAgICAgICAgIEFTU0VSVChicmFuY2gtPnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAorCisgICAgICAgICAgICBibG9jay0+cmVw
bGFjZVRlcm1pbmFsKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBi
cmFuY2gtPm9yaWdpbiwgT3BJbmZvKHRhcmdldEJsb2NrKSk7CiAgICAgICAgIH0KICAgICB9CkBA
IC0zMTgsMTAgKzMxOSwxMSBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgLy8gUmVtb3Zl
IHRoZSB0ZXJtaW5hbCBvZiBmaXJzdEJsb2NrIHNpbmNlIHdlIGRvbid0IG5lZWQgaXQgYW55bW9y
ZS4gV2VsbCwgd2UgZG9uJ3QKICAgICAgICAgLy8gcmVhbGx5IHJlbW92ZSBpdDsgd2UgYWN0dWFs
bHkgdHVybiBpdCBpbnRvIGEgUGhhbnRvbS4KLSAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPmxh
c3QoKS0+aXNUZXJtaW5hbCgpKTsKLSAgICAgICAgTm9kZU9yaWdpbiBib3VuZGFyeU5vZGVPcmln
aW4gPSBmaXJzdEJsb2NrLT5sYXN0KCktPm9yaWdpbjsKLSAgICAgICAgZmlyc3RCbG9jay0+bGFz
dCgpLT5jb252ZXJ0VG9QaGFudG9tKCk7Ci0gICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT5sYXN0
KCktPnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgIE5vZGUqIHRlcm1pbmFsID0gZmlyc3RCbG9j
ay0+dGVybWluYWwoKTsKKyAgICAgICAgQVNTRVJUKHRlcm1pbmFsLT5pc1Rlcm1pbmFsKCkpOwor
ICAgICAgICBOb2RlT3JpZ2luIGJvdW5kYXJ5Tm9kZU9yaWdpbiA9IHRlcm1pbmFsLT5vcmlnaW47
CisgICAgICAgIHRlcm1pbmFsLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgIEFTU0VSVCh0
ZXJtaW5hbC0+cmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGpldHRpc29uZWRCbG9ja3Muc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2sgPSBqZXR0aXNvbmVkQmxvY2tzW2ldOwpAQCAtMzQyLDcg
KzM0NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25k
QmxvY2stPnNpemUoKTsgKytpKQogICAgICAgICAgICAgZmlyc3RCbG9jay0+YXBwZW5kKHNlY29u
ZEJsb2NrLT5hdChpKSk7CiAgICAgICAgIAotICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+bGFz
dCgpLT5pc1Rlcm1pbmFsKCkpOworICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+dGVybWluYWwo
KS0+aXNUZXJtaW5hbCgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZpeCB0aGUgcHJlZGVjZXNz
b3JzIG9mIG15IG5ldyBzdWNjZXNzb3JzLiBUaGlzIGlzIHRyaWNreSwgc2luY2Ugd2UgYXJlIGdv
aW5nIHRvIHJlc2V0CiAgICAgICAgIC8vIGFsbCBwcmVkZWNlc3NvcnMgYW55d2F5IGR1ZSB0byBy
ZWFjaGFiaWxpdHkgYW5hbHlzaXMuIEJ1dCB3ZSBuZWVkIHRvIGZpeCB0aGUKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNw
cAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNS
ZXRocmVhZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDYgKzM2MywxMCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxlRm9yT1NSLm9wZXJhbmQobm9kZS0+
dW5saW5rZWRMb2NhbCgpKSA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OgorICAgICAg
ICAgICAgICAgIG1fYXZhaWxhYmxlRm9yT1NSLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgp
KSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNp
b24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2OCw2ICsyNjgsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgICAKICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgY2Fz
ZSBab21iaWVIaW50OgorICAgIGNhc2UgS2lsbEhpbnQ6CiAgICAgY2FzZSBLaWxsU3RhY2s6CiAg
ICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgUGhpOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNiArMjc0LDI5IEBAIHZv
aWQgc3RhcnRDcmFzaGluZygpOwogCiBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzQ3Jhc2hpbmco
KTsKIAorc3RydWN0IE5vZGVBbmRJbmRleCB7CisgICAgTm9kZUFuZEluZGV4KCkKKyAgICAgICAg
OiBub2RlKG51bGxwdHIpCisgICAgICAgICwgaW5kZXgoVUlOVF9NQVgpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBOb2RlQW5kSW5kZXgoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCisgICAg
ICAgIDogbm9kZShub2RlKQorICAgICAgICAsIGluZGV4KGluZGV4KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFub2RlID09IChpbmRleCA9PSBVSU5UX01BWCkpOworICAgIH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW5vZGU7CisgICAg
fQorICAgIAorICAgIE5vZGUqIG5vZGU7CisgICAgdW5zaWduZWQgaW5kZXg7Cit9OworCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDgsMTggKzE0OCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIENoZWNrIGlm
IHdlIGhhZCBqdXN0IGtpbGxlZCBpdC4KICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCktPm9wKCkgPT0gUGhhbnRvbSB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBDaGVjaykgewog
ICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhab21iaWVIaW50
KTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQoMSk7CiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gRWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsK
LSAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHkgd2UgYXNzdW1lIHRoYXQgRENFIHJ1bnMgb25s
eSBvbmNlLgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAg
ICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5v
ZGVIYXNWYXJBcmdzKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJ
ZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsg
bm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5
LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0
U3RhY2s6CiAgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOgogICAgIGNhc2UgUHV0VG9Bcmd1bWVu
dHM6CisgICAgY2FzZSBLaWxsSGludDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2Fz
ZSBDcmVhdGVBY3RpdmF0aW9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjM5LDYgKzEyMzks
NyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKICAgICAgICAgY2FzZSBT
dG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgogICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAg
IGNhc2UgS2lsbEhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBC
b3R0b21WYWx1ZToKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwx
MyArNDgsMTMgQEAgdm9pZCBmb3JBbGxMaXZlTm9kZXNBdFRhaWwoR3JhcGgmIGdyYXBoLAogICAg
ICAgICAgICAgZnVuY3Rvcihub2RlKTsKICAgICB9CiAgICAgCi0gICAgREZHX0FTU0VSVChncmFw
aCwgYmxvY2stPmxhc3QoKSwgYmxvY2stPmxhc3QoKS0+b3JpZ2luLmZvckV4aXQuaXNTZXQoKSk7
CisgICAgREZHX0FTU0VSVChncmFwaCwgYmxvY2stPnRlcm1pbmFsKCksIGJsb2NrLT50ZXJtaW5h
bCgpLT5vcmlnaW4uZm9yRXhpdC5pc1NldCgpKTsKICAgICAKICAgICBBdmFpbGFiaWxpdHlNYXAm
IGF2YWlsYWJpbGl0eU1hcCA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbDsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHMuc2l6ZSgpOyBpLS07KSB7
CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHMu
dmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaSk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWdyYXBo
LmlzTGl2ZUluQnl0ZWNvZGUocmVnLCBibG9jay0+bGFzdCgpLT5vcmlnaW4uZm9yRXhpdCkpCisg
ICAgICAgIGlmICghZ3JhcGguaXNMaXZlSW5CeXRlY29kZShyZWcsIGJsb2NrLT50ZXJtaW5hbCgp
LT5vcmlnaW4uZm9yRXhpdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAg
ICAgIGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExvY2FsKApAQCAtNzEsNDkgKzcx
LDMxIEBAIHZvaWQgZm9yQWxsTGl2ZU5vZGVzQXRUYWlsKEdyYXBoJiBncmFwaCwKICAgICB9CiB9
CiAKKy8vIE5vdGUgdGhhdCB0aGlzIGRlZmluZXMgImtpbGwiIGluIHRoZSB1c3VhbCBsaWJlcmFs
IHdheS4gSXQncyB2YWxpZCB0byBoYXZlIGEga2lsbCBmb2xsb3dlZCBieQorLy8gYW5vdGhlciBr
aWxsLiBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gZmluZCB0aGUgKnJlYWwqIGtpbGwsIHlvdSBuZWVk
IGEgYmFja3dhcmRzIGFuYWx5c2lzIHRvIGZpbmQKKy8vIHRoZSBsYXN0IChpLmUuIGZpcnN0LWJh
Y2t3YXJkcykgb25lLiBXZSBkbyBpdCB0aGlzIHdheSBiZWNhdXNlIGl0J3MgYSBsb3QgbW9yZSBl
ZmZpY2llbnQgYW5kIGFsbAorLy8gb2YgdGhlIHVzZXJzIGNhbiBiZSBuYXR1cmFsbHkgYWRhcHRl
ZCB0byBpdCAtIGVpdGhlciBiZWNhdXNlIHRoZXkgdW5pZnkgdGhlIHJlZ2lvbnMgaW1wbGllZCBi
eSBhbGwKKy8vIGtpbGxzIChsaWtlIEFyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UpIG9yIGJlY2F1
c2UgdGhleSBkbyBhIGJhY2t3YXJkcyBhbmFseXNpcyBhbmQgaGF2ZSBhIGNoZWFwCisvLyByZWR1
bmRhbnQta2lsbCBjaGVjayAobGlrZSBNb3ZIaW50UmVtb3ZhbCkuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgotdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIENvZGVP
cmlnaW4gYmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit2
b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUFmdGVyLCBj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIENvZGVPcmlnaW4gYWZ0ZXIgPSBub2RlQWZ0
ZXItPm9yaWdpbi5mb3JFeGl0OwotICAgIAotICAgIGlmICghYmVmb3JlKSB7Ci0gICAgICAgIGlm
ICghYWZ0ZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIC8vIFRoZSB0cnVlIGJlZm9y
ZS1vcmlnaW4gaXMgdGhlIG9yaWdpbiBhdCBwcmVkZWNlc3NvcnMgdGhhdCBqdW1wIHRvIHVzLiBC
dXQgdGhlcmUgY2FuIGJlCi0gICAgICAgIC8vIG1hbnkgc3VjaCBwcmVkZWNlc3NvcnMgYW5kIHRo
ZXkgd2lsbCBsaWtlbHkgYWxsIGhhdmUgYSBkaWZmZXJlbnQgb3JpZ2luLiBTbywgaXQncyBiZXR0
ZXIKLSAgICAgICAgLy8gdG8gZG8gdGhlIGNvbnNlcnZhdGl2ZSB0aGluZy4KLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpOyBpLS07KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoaSk7Ci0gICAgICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRl
Y29kZShyZWcsIGFmdGVyKSkKLSAgICAgICAgICAgICAgICBmdW5jdG9yKHJlZyk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBDb2RlT3JpZ2luIGFmdGVyT3JpZ2luID0g
bm9kZUFmdGVyLT5vcmlnaW4uZm9yRXhpdDsKICAgICAKICAgICAvLyBJZiB3ZSBNb3ZIaW50IHNv
bWV0aGluZyB0aGF0IGlzIGxpdmUgYXQgdGhlIHRpbWUsIHRoZW4gd2Uga2lsbCB0aGUgb2xkIHZh
bHVlLgogICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5Tm90ZWQ7CiAgICAgaWYgKG5vZGVBZnRl
ci0+Y29udGFpbnNNb3ZIaW50KCkpIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG5v
ZGVBZnRlci0+dW5saW5rZWRMb2NhbCgpOwotICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRl
Y29kZShyZWcsIGFmdGVyKSkgeworICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29kZShy
ZWcsIGFmdGVyT3JpZ2luKSkgewogICAgICAgICAgICAgZnVuY3RvcihyZWcpOwogICAgICAgICAg
ICAgYWxyZWFkeU5vdGVkID0gcmVnOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChi
ZWZvcmUgPT0gYWZ0ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBiZWZvcmUgY291
bGQgYmUgdW5zZXQgZXZlbiBpZiBhZnRlciBpcywgYnV0IHRoZSBvcHBvc2l0ZSBjYW5ub3QgaGFw
cGVuLgotICAgIEFTU0VSVCghIWFmdGVyKTsKLSAgICAKLSAgICAvLyBEZXRlY3Qga2lsbHMgdGhl
IHN1cGVyIGNvbnNlcnZhdGl2ZSB3YXk6IGl0IGlzIGtpbGxlZCBpZiBpdCB3YXMgbGl2ZSBiZWZv
cmUgYW5kIGRlYWQgYWZ0ZXIuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gZ3JhcGguYmxvY2soMCkt
PnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyBpLS07KSB7Ci0gICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKTsKLSAgICAgICAgaWYg
KHJlZyA9PSBhbHJlYWR5Tm90ZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYg
KGdyYXBoLmlzTGl2ZUluQnl0ZWNvZGUocmVnLCBiZWZvcmUpICYmICFncmFwaC5pc0xpdmVJbkJ5
dGVjb2RlKHJlZywgYWZ0ZXIpKQotICAgICAgICAgICAgZnVuY3RvcihyZWcpOwotICAgIH0KKyAg
ICAvLyBJZiB3ZSBLaWxsSGludCBzb21ldGhpbmcsIGFzc3VtZSBsaWJlcmFsbHkgdGhhdCB0aGlz
IGlzIGEga2lsbCB0aGF0IHRoZSB1c2VyIHdhbnRzIHRvIGtub3cKKyAgICAvLyBhYm91dC4gU2Vl
IGNvbW1lbnQgYWJvdmUgdGhpcyBmdW5jdGlvbi4KKyAgICBpZiAobm9kZUFmdGVyLT5vcCgpID09
IEtpbGxIaW50KQorICAgICAgICBmdW5jdG9yKG5vZGVBZnRlci0+dW5saW5rZWRMb2NhbCgpKTsK
IH0KICAgICAKIC8vIFRlbGxzIHlvdSBhbGwgb2YgdGhlIG5vZGVzIHRoYXQgd291bGQgbm8gbG9u
Z2VyIGJlIGxpdmUgYWNyb3NzIHRoZSBub2RlIGF0IHRoaXMgbm9kZUluZGV4LgpAQCAtMTQwLDEy
ICsxMjIsOCBAQCB2b2lkIGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0pOwogCi0gICAgQ29kZU9yaWdpbiBiZWZvcmU7Ci0gICAgaWYgKG5vZGVJ
bmRleCkKLSAgICAgICAgYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpLT5vcmlnaW4u
Zm9yRXhpdDsKLQogICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKAotICAgICAgICBncmFwaCwgYmVm
b3JlLCBub2RlLAorICAgICAgICBncmFwaCwgbm9kZSwKICAgICAgICAgWyZdIChWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSB7CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAuY2xvc2VTdGFydGluZ1dp
dGhMb2NhbCgKICAgICAgICAgICAgICAgICByZWcsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NSwxMSArMzc1LDE0IEBA
IHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKICAgICAgICAgb3V0LnBy
aW50KCIgIiwgKmJsb2NrLT5wcmVkZWNlc3NvcnNbaV0pOwogICAgIG91dC5wcmludCgiXG4iKTsK
ICAgICBvdXQucHJpbnQocHJlZml4LCAiICBTdWNjZXNzb3JzOiIpOwotICAgIGZvciAoQmFzaWNC
bG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgewotICAgICAgICBvdXQucHJp
bnQoIiAiLCAqc3VjY2Vzc29yKTsKLSAgICAgICAgaWYgKG1fcHJlUG9zdE51bWJlcmluZy5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICBvdXQucHJpbnQoIiAoIiwgbV9wcmVQb3N0TnVtYmVyaW5nLmVk
Z2VLaW5kKGJsb2NrLCBzdWNjZXNzb3IpLCAiKSIpOwotICAgIH0KKyAgICBpZiAoYmxvY2stPnRl
cm1pbmFsKCkpIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+
c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAiLCAqc3VjY2Vzc29yKTsK
KyAgICAgICAgICAgIGlmIChtX3ByZVBvc3ROdW1iZXJpbmcuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgICAgIG91dC5wcmludCgiICgiLCBtX3ByZVBvc3ROdW1iZXJpbmcuZWRnZUtpbmQoYmxvY2ss
IHN1Y2Nlc3NvciksICIpIik7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgb3V0LnBy
aW50KCIgPGludmFsaWQ+Iik7CiAgICAgb3V0LnByaW50KCJcbiIpOwogICAgIGlmIChtX2RvbWlu
YXRvcnMuaXNWYWxpZCgpKSB7CiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYXRl
ZCBieTogIiwgbV9kb21pbmF0b3JzLmRvbWluYXRvcnNPZihibG9jayksICJcbiIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5jcHAJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNyArMzYx
LDcgQEAgYm9vbCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbAogCiBpbmxpbmUg
Ym9vbCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nlc3NvcnMoQmFzaWNCbG9jayog
YmFzaWNCbG9jaykKIHsKLSAgICBOb2RlKiB0ZXJtaW5hbCA9IGJhc2ljQmxvY2stPmxhc3QoKTsK
KyAgICBOb2RlKiB0ZXJtaW5hbCA9IGJhc2ljQmxvY2stPnRlcm1pbmFsKCk7CiAgICAgCiAgICAg
QVNTRVJUKHRlcm1pbmFsLT5pc1Rlcm1pbmFsKCkpOwogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcHJlSGVhZGVyID0g
cHJlZGVjZXNzb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgcHJlSGVhZGVyLT5sYXN0KCksIHByZUhlYWRlci0+bGFzdCgpLT5v
cCgpID09IEp1bXApOworICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBwcmVIZWFkZXIt
PnRlcm1pbmFsKCksIHByZUhlYWRlci0+dGVybWluYWwoKS0+b3AoKSA9PSBKdW1wKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgZGF0YS5wcmVIZWFkZXIgPSBwcmVIZWFkZXI7CiAgICAgICAg
IH0KQEAgLTIzNywxMCArMjM3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgIlxuIik7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRhdGEucHJlSGVhZGVyLT5pbnNlcnRCZWZv
cmVMYXN0KG5vZGUpOworICAgICAgICBkYXRhLnByZUhlYWRlci0+aW5zZXJ0QmVmb3JlVGVybWlu
YWwobm9kZSk7CiAgICAgICAgIG5vZGUtPm93bmVyID0gZGF0YS5wcmVIZWFkZXI7CiAgICAgICAg
IE5vZGVPcmlnaW4gb3JpZ2luYWxPcmlnaW4gPSBub2RlLT5vcmlnaW47Ci0gICAgICAgIG5vZGUt
Pm9yaWdpbi5mb3JFeGl0ID0gZGF0YS5wcmVIZWFkZXItPmxhc3QoKS0+b3JpZ2luLmZvckV4aXQ7
CisgICAgICAgIG5vZGUtPm9yaWdpbi5mb3JFeGl0ID0gZGF0YS5wcmVIZWFkZXItPnRlcm1pbmFs
KCktPm9yaWdpbi5mb3JFeGl0OwogICAgICAgICAKICAgICAgICAgLy8gTW9kaWZ5IHRoZSBzdGF0
ZXMgYXQgdGhlIGVuZCBvZiB0aGUgcHJlSGVhZGVyIG9mIHRoZSBsb29wIHdlIGhvaXN0ZWQgdG8s
CiAgICAgICAgIC8vIGFuZCBhbGwgcHJlLWhlYWRlcnMgaW5zaWRlIHRoZSBsb29wLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCShyZXZpc2lvbiAxODI4NTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NSw2ICs4NSw3IEBAIGJvb2wgbWF5RXhpdChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUpCiAgICAgY2FzZSBHZXRTY29wZToKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICBjYXNl
IENvdW50RXhlY3V0aW9uOgorICAgIGNhc2UgS2lsbEhpbnQ6CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAKICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJ
KHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03NDgsNiArNzQ4LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAg
ICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBL
aWxsU3RhY2s6CisgICAgICAgIGNhc2UgS2lsbEhpbnQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE4Mjg1NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNjQsNyArNjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFj
cm8oR2V0U3RhY2ssIE5vZGVSZXN1bHRKUykgXAogICAgIFwKICAgICBtYWNybyhNb3ZIaW50LCAw
KSBcCi0gICAgbWFjcm8oWm9tYmllSGludCwgMCkgXAorICAgIG1hY3JvKFpvbWJpZUhpbnQsIE5v
ZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhLaWxsSGludCwgTm9kZU11c3RHZW5lcmF0ZSkg
XAogICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhIYXJk
UGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0ZSkgLyogTGlrZSBQaGFudG9tLCBidXQgd2UgbmV2ZXIg
cmVtb3ZlIGFueSBvZiBpdHMgY2hpbGRyZW4uICovIFwKICAgICBtYWNybyhDaGVjaywgTm9kZU11
c3RHZW5lcmF0ZSkgLyogVXNlZCBpZiB3ZSB3YW50IGp1c3QgYSB0eXBlIGNoZWNrIGJ1dCBub3Qg
bGl2ZW5lc3MuIE5vbi1jaGVja2luZyB1c2VzIHdpbGwgYmUgcmVtb3ZlZC4gKi9cCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAvLyBhbHJlYWR5IGhhbmRsZWQgdGhlIGNhc2Ugd2hlcmUgdGhlIHByZWRlY2Vzc29yIGhhcyBt
dWx0aXBsZSBzdWNjZXNzb3JzLgogICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIGJsb2NrLCBibG9jay0+bnVtU3VjY2Vzc29ycygpID09IDEpOwogICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgY3JlYXRlTWF0ZXJpYWxpemUoYWxsb2NhdGlvbiwg
YmxvY2stPmxhc3QoKSk7CisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU1hdGVyaWFsaXplKGFs
bG9jYXRpb24sIGJsb2NrLT50ZXJtaW5hbCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTQ2MSw4ICs0NjEsOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgc2l6ZV90
IHVwc2lsb25JbnNlcnRpb25Qb2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOwotICAgICAgICAgICAg
Tm9kZSogdXBzaWxvbldoZXJlID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAgICAgIHNpemVfdCB1
cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+ZmluZFRlcm1pbmFsKCkuaW5kZXg7CisgICAg
ICAgICAgICBOb2RlKiB1cHNpbG9uV2hlcmUgPSBibG9jay0+dGVybWluYWwoKTsKICAgICAgICAg
ICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IHVwc2lsb25XaGVyZS0+b3JpZ2luOwogICAg
ICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNz
b3JzKCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVm
IDogbV9zc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKQEAgLTcw
OCw4ICs3MDgsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICAvLyBHb3R0YSBkcm9wIHNvbWUgVXBzaWxvbnMuCi0gICAgICAgICAgICBzaXplX3Qg
dXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2stPnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBO
b2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47CisgICAgICAg
ICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2stPmZpbmRUZXJtaW5hbCgp
LmluZGV4OworICAgICAgICAgICAgTm9kZU9yaWdpbiB1cHNpbG9uT3JpZ2luID0gYmxvY2stPnRl
cm1pbmFsKCktPm9yaWdpbjsKICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29y
QmxvY2sgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CiAgICAgICAgICAgICAgICAgZm9yIChTU0FD
YWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3Vj
Y2Vzc29yQmxvY2spKSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlE
ZWYtPnZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTgyODU3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0Nyw2ICs2NDcsNyBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIE5vdGlmeVdyaXRlOgogICAgICAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50
ZXI6CiAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgY2FzZSBLaWxsSGludDoKICAgICAg
ICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAg
ICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lu
a2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0MSw4ICs0NDEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfSB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0
aW9uUG9pbnQgPSBibG9jay0+c2l6ZSgpIC0gMTsKLSAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBz
aWxvbk9yaWdpbiA9IGJsb2NrLT5sYXN0KCktPm9yaWdpbjsKKyAgICAgICAgICAgIHNpemVfdCB1
cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+ZmluZFRlcm1pbmFsKCkuaW5kZXg7CisgICAg
ICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBibG9jay0+dGVybWluYWwoKS0+b3Jp
Z2luOwogICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2Nr
LT5zdWNjZXNzb3JzKCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRl
ZiogcGhpRGVmIDogc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxvY2spKSB7
CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYtPnZhbHVlKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNSw4ICszMzUs
OCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBzZWVtcyBkYW5nZXJvdXMgYmVjYXVzZSB0aGUg
VXBzaWxvbiB3aWxsIGhhdmUgYSBjaGVja2luZyBVc2VLaW5kLiBCdXQsIHdlIHdpbGwgbm90CiAg
ICAgICAgICAgICAvLyBhY3R1YWxseSBiZSBwZXJmb3JtaW5nIHRoZSBjaGVjayBhdCB0aGUgcG9p
bnQgb2YgdGhlIFVwc2lsb247IHRoZSBjaGVjayB3aWxsCiAgICAgICAgICAgICAvLyBhbHJlYWR5
IGhhdmUgYmVlbiBwZXJmb3JtZWQgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBvcmlnaW5hbCBTZXRM
b2NhbCB3YXMuCi0gICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxv
Y2stPnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBi
bG9jay0+bGFzdCgpLT5vcmlnaW47CisgICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlv
blBvaW50ID0gYmxvY2stPmZpbmRUZXJtaW5hbCgpLmluZGV4OworICAgICAgICAgICAgTm9kZU9y
aWdpbiB1cHNpbG9uT3JpZ2luID0gYmxvY2stPnRlcm1pbmFsKCktPm9yaWdpbjsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygp
OyBzdWNjZXNzb3JJbmRleC0tOykgewogICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nl
c3NvckJsb2NrID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CiAgICAgICAgICAg
ICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fY2FsY3VsYXRvci5waGlz
Rm9yQmxvY2soc3VjY2Vzc29yQmxvY2spKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
Myw2ICsxMjMsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAg
ICAgY2FzZSBLaWxsU3RhY2s6CiAgICAgY2FzZSBHZXRTdGFjazoKICAgICBjYXNlIE1vdkhpbnQ6
CisgICAgY2FzZSBLaWxsSGludDoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgY2FzZSBQaGFu
dG9tOgogICAgIGNhc2UgSGFyZFBoYW50b206CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE4Mjg1
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MzIsMTEgKzE4MzIsMTcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBj
YXNlIE1vdkhpbnQ6Ci0gICAgY2FzZSBab21iaWVIaW50OiB7CisgICAgY2FzZSBNb3ZIaW50OiB7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICByZWNvcmRTZXRM
b2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZExvY2FsKCksIFZpcnR1YWxSZWdpc3RlcigpLCBE
YXRhRm9ybWF0RGVhZCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEtpbGxI
aW50OgorICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgc3dp
dGNoIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIxLDExICsxOTIxLDE4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKLSAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgY2FzZSBab21iaWVIaW50OiB7
CisgICAgY2FzZSBNb3ZIaW50OiB7CiAgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBu
b2RlLCAiVW5leHBlY3RlZCBub2RlIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAgICAg
CisgICAgY2FzZSBab21iaWVIaW50OiB7CisgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVu
dE5vZGUtPnVubGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFk
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEtpbGxIaW50Ogor
ICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgc3dpdGNoIChu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQyLDExICsxNDQyLDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50
KG1fY3VycmVudE5vZGUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgICAgICAgICAgcmVjb3Jk
U2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIo
KSwgRGF0YUZvcm1hdERlYWQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGlmIChiZWxvbmdzSW5N
aW5pZmllZEdyYXBoKG1fY3VycmVudE5vZGUtPm9wKCkpKQogICAgICAgICAgICAgICAgICAgICBt
X21pbmlmaWVkR3JhcGgtPmFwcGVuZChNaW5pZmllZE5vZGU6OmZyb21Ob2RlKG1fY3VycmVudE5v
ZGUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNjgxLDcgKzY4MSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgfQogCiAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBsYXN0Tm9kZSBpcyBhIGJy
YW5jaCBvbiB0aGlzIG5vZGUuCi0gICAgICAgIE5vZGUqIGxhc3ROb2RlID0gbV9ibG9jay0+bGFz
dCgpOworICAgICAgICBOb2RlKiBsYXN0Tm9kZSA9IG1fYmxvY2stPnRlcm1pbmFsKCk7CiAgICAg
ICAgIHJldHVybiBsYXN0Tm9kZS0+b3AoKSA9PSBCcmFuY2ggJiYgbGFzdE5vZGUtPmNoaWxkMSgp
ID09IG1fY3VycmVudE5vZGUgPyBtX2Jsb2NrLT5zaXplKCkgLSAxIDogVUlOVF9NQVg7CiAgICAg
fQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRp
b25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhdGljRXhl
Y3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MywxNiArNjMs
MTYgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChibG9jay0+bGFzdCgp
LT5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGJsb2NrLT50ZXJtaW5hbCgpLT5vcCgpKSB7
CiAgICAgICAgICAgICBjYXNlIEJyYW5jaDogewotICAgICAgICAgICAgICAgIEJyYW5jaERhdGEq
IGRhdGEgPSBibG9jay0+bGFzdCgpLT5icmFuY2hEYXRhKCk7CisgICAgICAgICAgICAgICAgQnJh
bmNoRGF0YSogZGF0YSA9IGJsb2NrLT50ZXJtaW5hbCgpLT5icmFuY2hEYXRhKCk7CiAgICAgICAg
ICAgICAgICAgYXBwbHlDb3VudHMoZGF0YS0+dGFrZW4pOwogICAgICAgICAgICAgICAgIGFwcGx5
Q291bnRzKGRhdGEtPm5vdFRha2VuKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU3dpdGNoOiB7Ci0gICAg
ICAgICAgICAgICAgU3dpdGNoRGF0YSogZGF0YSA9IGJsb2NrLT5sYXN0KCktPnN3aXRjaERhdGEo
KTsKKyAgICAgICAgICAgICAgICBTd2l0Y2hEYXRhKiBkYXRhID0gYmxvY2stPnRlcm1pbmFsKCkt
PnN3aXRjaERhdGEoKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5j
YXNlcy5zaXplKCk7IGktLTspCiAgICAgICAgICAgICAgICAgICAgIGFwcGx5Q291bnRzKGRhdGEt
PmNhc2VzW2ldLnRhcmdldCk7CiAgICAgICAgICAgICAgICAgYXBwbHlDb3VudHMoZGF0YS0+ZmFs
bFRocm91Z2gpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVj
a0luamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODI4NTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMyw5ICsxMDMsMTAgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoYmxvY2stPmxhc3QoKS0+b3AoKSA9PSBSZXR1cm4pIHsKKyAgICAgICAgICAgIGlmIChi
bG9jay0+dGVybWluYWwoKS0+b3AoKSA9PSBSZXR1cm4pIHsKICAgICAgICAgICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgYmxvY2stPnNpemUoKSAt
IDEsIFNwZWNOb25lLCBDaGVja1RpZXJVcEF0UmV0dXJuLCBibG9jay0+bGFzdCgpLT5vcmlnaW4p
OworICAgICAgICAgICAgICAgICAgICBibG9jay0+ZmluZFRlcm1pbmFsKCkuaW5kZXgsIFNwZWNO
b25lLCBDaGVja1RpZXJVcEF0UmV0dXJuLAorICAgICAgICAgICAgICAgICAgICBibG9jay0+dGVy
bWluYWwoKS0+b3JpZ2luKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksMTAg
KzE4OSwyNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGUpLCBt
X215UmVmQ291bnRzLmdldChub2RlKSwgbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAgOyBp
IDwgYmxvY2stPnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICAgICAgYm9vbCBmb3VuZFRlcm1p
bmFsID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBibG9jay0+
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkp
OwotICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmlzVGVybWluYWwoKSk7
CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmlzVGVybWluYWwoKSkgeworICAgICAgICAgICAg
ICAgICAgICBmb3VuZFRlcm1pbmFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaiA9IGkgKyAxOyBqIDwgYmxvY2stPnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlID0gYmxvY2stPmF0KGopOworICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKG5vZGUpLCBub2RlLT5vcCgpID09IFBoYW50b20gfHwgbm9kZS0+b3AoKSA9PSBL
aWxsSGludCB8fCBub2RlLT5vcCgpID09IFBoYW50b21Mb2NhbCB8fCBub2RlLT5vcCgpID09IEZs
dXNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWyZdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUsIGVkZ2UpLCBzaG91bGROb3RIYXZlVHlwZUNoZWNrKGVkZ2UudXNlS2luZCgp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQorICAgICAgICAgICAgVkFMSURBVEUoKGJsb2NrKSwgZm91bmRUZXJtaW5hbCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnNp
emUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBpbmxpbmUgQ2FwYWJp
bGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBLaWxsU3RhY2s6CiAgICAgY2Fz
ZSBHZXRTdGFjazoKICAgICBjYXNlIE1vdkhpbnQ6CisgICAgY2FzZSBLaWxsSGludDoKICAgICBj
YXNlIFpvbWJpZUhpbnQ6CiAgICAgY2FzZSBQaGFudG9tOgogICAgIGNhc2UgSGFyZFBoYW50b206
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0OCw2ICs4NDgsNyBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIExvb3BIaW50OgogICAgICAgICBjYXNlIEFsbG9jYXRpb25Qcm9m
aWxlV2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNlIEtpbGxI
aW50OgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgIGNhc2UgUGhhbnRvbU5ld09i
amVjdDoKICAgICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgpAQCAtODYwLDggKzg2
MSwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwg
IlVucmVjb2duaXplZCBub2RlIGluIEZUTCBiYWNrZW5kIik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotCi0gICAgICAgIGlmICghbV9zdGF0ZS5pc1ZhbGlkKCkgJiYgIW1fbm9kZS0+
aXNUZXJtaW5hbCgpKSB7CisgICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc1Rlcm1pbmFs
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoIW1f
c3RhdGUuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBzYWZlbHlJbnZhbGlkYXRlQWZ0ZXJUZXJt
aW5hdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251128</attachid>
            <date>2015-04-19 14:19:15 -0700</date>
            <delta_ts>2015-04-19 14:19:15 -0700</delta_ts>
            <desc>passing some tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>63346</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTg4LDEwICsxODgsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgTW92
SGludDogewotICAgICAgICAvLyBEb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLiBBIE1vdkhpbnQg
b25seSBpbmZvcm1zIHVzIGFib3V0IHdoYXQgd291bGQgaGF2ZSBoYXBwZW5lZAotICAgICAgICAv
LyBpbiBieXRlY29kZSwgYnV0IHRoaXMgY29kZSBpcyBqdXN0IGNvbmNlcm5lZCB3aXRoIHdoYXQg
aXMgYWN0dWFsbHkgaGFwcGVuaW5nIGR1cmluZwotICAgICAgICAvLyBERkcgZXhlY3V0aW9uLgor
ICAgIGNhc2UgTW92SGludDoKKyAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBLaWxsSGlu
dDoKKyAgICBjYXNlIFB1dEhpbnQ6IHsKKyAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byBkbyBhbnl0
aGluZy4gVGhlc2UganVzdCB0ZWxsIHVzIGFib3V0IHdoYXQgaGFwcGVuZWQgaW4gYnl0ZWNvZGUs
IGJ1dCB0aGVzZQorICAgICAgICAvLyB0aGluZ3MgZG9uJ3QgaGFwcGVuIGFsb25nIHRoZSBwYXRo
IHRoYXQgQUkgY2FyZXMgYWJvdXQuCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBA
IC0xMzYzLDkgKzEzNjUsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgIC8vIFRoaXMgY2xhaW1zIHRvIHJldHVybiBib3R0b20uCiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKLSAgICBjYXNlIFB1dEhpbnQ6Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ICAKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CiAgICAgICAgIFN0cnVjdHVyZVNl
dCBzZXQ7CiAgICAgICAgIApAQCAtMjEwMiw3ICsyMTAxLDYgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogCiAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVy
OgogICAgIGNhc2UgTG9vcEhpbnQ6Ci0gICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICBicmVh
azsKIAogICAgIGNhc2UgVW5yZWFjaGFibGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYg
KzcxLDE5IEBAIHZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG4KICAgICBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscywg
QWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKTsKIH0KIAordm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNl
VGVybWluYWwoTm9kZSogbm9kZSkKK3sKKyAgICBOb2RlQW5kSW5kZXggcmVzdWx0ID0gZmluZFRl
cm1pbmFsKCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIGFwcGVuZChub2RlKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgbV9ub2Rlcy5pbnNlcnQocmVzdWx0LmluZGV4ICsgMSwgbm9kZSk7Cisg
ICAgICAgIHJlc3VsdC5ub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgfQorICAgIAorICAg
IEFTU0VSVCh0ZXJtaW5hbCgpKTsKK30KKwogYm9vbCBCYXNpY0Jsb2NrOjppc0luUGhpcyhOb2Rl
KiBub2RlKSBjb25zdAogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7
ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJ
KHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYzLDE4ICs2Myw1MiBAQCBz
dHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgTm9kZSogYXQoc2l6
ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KICAgICBOb2RlKiYgb3BlcmF0b3Jb
XShzaXplX3QgaSkgeyByZXR1cm4gYXQoaSk7IH0KICAgICBOb2RlKiBvcGVyYXRvcltdKHNpemVf
dCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQotICAgIE5vZGUqIGxhc3QoKSBjb25zdCB7IHJl
dHVybiBhdChzaXplKCkgLSAxKTsgfQotICAgIE5vZGUqIHRha2VMYXN0KCkgeyByZXR1cm4gbV9u
b2Rlcy50YWtlTGFzdCgpOyB9CisKKyAgICBOb2RlQW5kSW5kZXggZmluZFRlcm1pbmFsKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHNpemVfdCBpID0gc2l6ZSgpOworICAgICAgICB3aGlsZSAoaS0t
KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYXQoaSk7CisgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSnVtcDoKKyAgICAgICAgICAgIGNhc2Ug
QnJhbmNoOgorICAgICAgICAgICAgY2FzZSBTd2l0Y2g6CisgICAgICAgICAgICBjYXNlIFJldHVy
bjoKKyAgICAgICAgICAgIGNhc2UgVW5yZWFjaGFibGU6CisgICAgICAgICAgICAgICAgcmV0dXJu
IE5vZGVBbmRJbmRleChub2RlLCBpKTsKKyAgICAgICAgICAgIC8vIFRoZSBiaXR0ZXIgZW5kIGNh
biBjb250YWluIFBoYW50b21zIGFuZCBLaWxsSGludHMuIFRoZXJlIHdpbGwgcHJvYmFibHkgb25s
eSBiZSBvbmUgb3IgdHdvIG9mIHRoZXNlLgorICAgICAgICAgICAgY2FzZSBQaGFudG9tOgorICAg
ICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICBjYXNlIEtpbGxIaW50Ogor
ICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vZGVBbmRJbmRleCgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBOb2RlQW5kSW5kZXgoKTsKKyAg
ICB9CisgICAgCisgICAgTm9kZSogdGVybWluYWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZpbmRUZXJtaW5hbCgpLm5vZGU7CisgICAgfQorICAgIAogICAgIHZvaWQgcmVzaXplKHNp
emVfdCBzaXplKSB7IG1fbm9kZXMucmVzaXplKHNpemUpOyB9CiAgICAgdm9pZCBncm93KHNpemVf
dCBzaXplKSB7IG1fbm9kZXMuZ3JvdyhzaXplKTsgfQogICAgIAogICAgIHZvaWQgYXBwZW5kKE5v
ZGUqIG5vZGUpIHsgbV9ub2Rlcy5hcHBlbmQobm9kZSk7IH0KLSAgICB2b2lkIGluc2VydEJlZm9y
ZUxhc3QoTm9kZSogbm9kZSkKKyAgICB2b2lkIGluc2VydEJlZm9yZVRlcm1pbmFsKE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBhcHBlbmQobGFzdCgpKTsKLSAgICAgICAgYXQoc2l6ZSgpIC0g
MikgPSBub2RlOworICAgICAgICBOb2RlQW5kSW5kZXggcmVzdWx0ID0gZmluZFRlcm1pbmFsKCk7
CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgYXBwZW5kKG5vZGUpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX25vZGVzLmluc2VydChyZXN1bHQuaW5kZXgsIG5vZGUpOwog
ICAgIH0KICAgICAKKyAgICB2b2lkIHJlcGxhY2VUZXJtaW5hbChOb2RlKiBub2RlKTsKKyAgICAK
ICAgICBzaXplX3QgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVybiBwaGlzLnNpemUoKSArIHNpemUo
KTsgfQogICAgIE5vZGUqIG5vZGUoc2l6ZV90IGkpIGNvbnN0CiAgICAgewpAQCAtOTMsMTUgKzEy
NywxNSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgTm9k
ZSogZmlyc3RPcmlnaW5Ob2RlKCk7CiAgICAgTm9kZU9yaWdpbiBmaXJzdE9yaWdpbigpOwogICAg
IAotICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSB7IHJldHVybiBsYXN0KCktPm51bVN1Y2Nl
c3NvcnMoKTsgfQorICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSB7IHJldHVybiB0ZXJtaW5h
bCgpLT5udW1TdWNjZXNzb3JzKCk7IH0KICAgICAKICAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29y
KHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGxhc3QoKS0+c3VjY2Vzc29y
KGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHRlcm1pbmFsKCktPnN1Y2Nlc3NvcihpbmRleCk7CiAg
ICAgfQogICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JGb3JDb25kaXRpb24oYm9vbCBjb25kaXRp
b24pCiAgICAgewotICAgICAgICByZXR1cm4gbGFzdCgpLT5zdWNjZXNzb3JGb3JDb25kaXRpb24o
Y29uZGl0aW9uKTsKKyAgICAgICAgcmV0dXJuIHRlcm1pbmFsKCktPnN1Y2Nlc3NvckZvckNvbmRp
dGlvbihjb25kaXRpb24pOwogICAgIH0KICAgICAKICAgICBjbGFzcyBTdWNjZXNzb3JzSXRlcmFi
bGUgewpAQCAtMTgzLDYgKzIxNyw5IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxC
YXNpY0Jsb2MKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBQYXJhbXM+CiAgICAgTm9kZSogYXBw
ZW5kTm9uVGVybWluYWwoR3JhcGgmLCBTcGVjdWxhdGVkVHlwZSwgUGFyYW1zLi4uKTsKICAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBQYXJhbXM+CisgICAgTm9kZSogcmVwbGFjZVRlcm1p
bmFsKEdyYXBoJiwgU3BlY3VsYXRlZFR5cGUsIFBhcmFtcy4uLik7CisgICAgCiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAogICAgIHZvaWQgZGlkTGluaygpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5l
cy5oCShyZXZpc2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
c2ljQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUsNyArNDUsMTUgQEAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gUGFyYW1zPgogTm9kZSogQmFzaWNCbG9jazo6YXBwZW5kTm9uVGVy
bWluYWwoR3JhcGgmIGdyYXBoLCBTcGVjdWxhdGVkVHlwZSB0eXBlLCBQYXJhbXMuLi4gcGFyYW1z
KQogewogICAgIE5vZGUqIHJlc3VsdCA9IGdyYXBoLmFkZE5vZGUodHlwZSwgcGFyYW1zLi4uKTsK
LSAgICBpbnNlcnRCZWZvcmVMYXN0KHJlc3VsdCk7CisgICAgaW5zZXJ0QmVmb3JlVGVybWluYWwo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBQ
YXJhbXM+CitOb2RlKiBCYXNpY0Jsb2NrOjpyZXBsYWNlVGVybWluYWwoR3JhcGgmIGdyYXBoLCBT
cGVjdWxhdGVkVHlwZSB0eXBlLCBQYXJhbXMuLi4gcGFyYW1zKQoreworICAgIE5vZGUqIHJlc3Vs
dCA9IGdyYXBoLmFkZE5vZGUodHlwZSwgcGFyYW1zLi4uKTsKKyAgICByZXBsYWNlVGVybWluYWwo
cmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTgyODU3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0gLyoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBA
IC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiQmFzaWNCbG9ja0xvY2F0aW9uLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVLaWxscy5oIgogI2lu
Y2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKQEAgLTIxNyw2ICsyMTgsMjAgQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgIHZvaWQgY2xlYXJDYWNoZXMo
KTsKKyAgICAKKyAgICAvLyBDaGVjayBpZiBhIGJsb2NrIGlzIGVtcHR5IGVub3VnaCB0byBiZSBy
ZXB1cnBvc2VkIGZvciBhIGRpZmZlcmVudCBieXRlY29kZSBpbmRleC4KKyAgICBib29sIGlzU3Vm
ZmljaWVudGx5RW1wdHlGb3JSZXB1cnBvc2luZyhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7Cisg
ICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEtpbGxIaW50OgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQogCiAgICAgLy8gUGFyc2UgYSBzaW5nbGUgYmFzaWMgYmxvY2sgb2YgYnl0ZWNvZGUgaW5zdHJ1
Y3Rpb25zLgogICAgIGJvb2wgcGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCk7CkBAIC0zMTYsOCAr
MzMxLDYgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIE5vZGUqIHNldERpcmVjdChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkK
ICAgICB7Ci0gICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJhbmQub2Zmc2V0
KCkpLCB2YWx1ZSk7Ci0KICAgICAgICAgRGVsYXllZFNldExvY2FsIGRlbGF5ZWQoY3VycmVudENv
ZGVPcmlnaW4oKSwgb3BlcmFuZCwgdmFsdWUpOwogICAgICAgICAKICAgICAgICAgaWYgKHNldE1v
ZGUgPT0gTm9ybWFsU2V0KSB7CkBAIC0zMjUsMTMgKzMzOCwxNCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGRlbGF5ZWQuaGlu
dCh0aGlzLCBzZXRNb2RlKTsKICAgICAgICAgcmV0dXJuIGRlbGF5ZWQuZXhlY3V0ZSh0aGlzLCBz
ZXRNb2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpCiAg
ICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVlLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlW2ldLmV4ZWN1dGUodGhpcyk7
CisgICAgICAgIGZvciAoRGVsYXllZFNldExvY2FsJiBzZXRMb2NhbCA6IG1fc2V0TG9jYWxRdWV1
ZSkKKyAgICAgICAgICAgIHNldExvY2FsLmV4ZWN1dGUodGhpcyk7CiAgICAgICAgIG1fc2V0TG9j
YWxRdWV1ZS5yZXNpemUoMCk7CiAgICAgfQogCkBAIC01MzEsNiArNTQ1LDE3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9uLT5hZGRWYXJpYWJsZSh2YXJpYWJsZSk7CiAg
ICAgfQogICAgIAorICAgIHZvaWQgZmx1c2hEaXJlY3RBbmRLaWxsKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQorICAgIHsKKyAgICAg
ICAgYWRkVG9HcmFwaChLaWxsSGludCwgT3BJbmZvKG9wZXJhbmQub2Zmc2V0KCkpKTsKKyAgICAg
ICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgYXJndW1lbnRQb3NpdGlvbik7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZmx1c2hEaXJlY3RBbmRLaWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
IHsKKyAgICAgICAgZmx1c2hEaXJlY3RBbmRLaWxsKG9wZXJhbmQsIGZpbmRBcmd1bWVudFBvc2l0
aW9uKG9wZXJhbmQpKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBmbHVzaChJbmxpbmVTdGFja0Vu
dHJ5KiBpbmxpbmVTdGFja0VudHJ5KQogICAgIHsKICAgICAgICAgaW50IG51bUFyZ3VtZW50czsK
QEAgLTUzOCwxNSArNTYzLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBU1NFUlQoIW1faGFz
RGVidWdnZXJFbmFibGVkKTsKICAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9IGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRzLnNpemUoKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICAgICAgZmx1c2hEaXJlY3QoaW5saW5lU3RhY2tF
bnRyeS0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpDYWxsZWUpKSk7Cisg
ICAgICAgICAgICAgICAgZmx1c2hEaXJlY3RBbmRLaWxsKGlubGluZVN0YWNrRW50cnktPnJlbWFw
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSkpOwogICAgICAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAgICAgICAgZmx1c2hE
aXJlY3QoaW5saW5lU3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihKU1N0
YWNrOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0QW5kS2ls
bChpbmxpbmVTdGFja0VudHJ5LT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6
OkFyZ3VtZW50Q291bnQpKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbnVtQXJndW1l
bnRzID0gaW5saW5lU3RhY2tFbnRyeS0+bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IG51bUFyZ3VtZW50czsgYXJndW1lbnQtLSA+
IDE7KQotICAgICAgICAgICAgZmx1c2hEaXJlY3QoaW5saW5lU3RhY2tFbnRyeS0+cmVtYXBPcGVy
YW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkpOworICAgICAgICAgICAg
Zmx1c2hEaXJlY3RBbmRLaWxsKGlubGluZVN0YWNrRW50cnktPnJlbWFwT3BlcmFuZCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpKTsKICAgICAgICAgaWYgKG1faGFzRGVidWdn
ZXJFbmFibGVkKQotICAgICAgICAgICAgZmx1c2gobV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIo
KSk7CisgICAgICAgICAgICBmbHVzaERpcmVjdEFuZEtpbGwobV9jb2RlQmxvY2stPnNjb3BlUmVn
aXN0ZXIoKSk7CiAgICAgfQogCiAgICAgdm9pZCBmbHVzaEZvclRlcm1pbmFsKCkKQEAgLTYyMiw0
MCArNjQ3LDQwIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBkYXRhOwogICAgIH0KICAgICAK
KyAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQorICAgICAgICAgICAgZGF0YUxvZygi
ICAgICAgICBhcHBlbmRlZCAiLCBub2RlLCAiICIsIEdyYXBoOjpvcE5hbWUobm9kZS0+b3AoKSks
ICJcbiIpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKG5vZGUpOworICAgICAgICBy
ZXR1cm4gbm9kZTsKKyAgICB9CisgICAgCiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBv
cCwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkK
ICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKICAgICAgICAg
ICAgIFNwZWNOb25lLCBvcCwgY3VycmVudE5vZGVPcmlnaW4oKSwgRWRnZShjaGlsZDEpLCBFZGdl
KGNoaWxkMiksCiAgICAgICAgICAgICBFZGdlKGNoaWxkMykpOwotICAgICAgICBBU1NFUlQob3Ag
IT0gUGhpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwotICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChyZXN1bHQpOwogICAg
IH0KICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBFZGdlIGNoaWxkMSwgRWRnZSBj
aGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgpKQogICAgIHsKICAgICAgICAgTm9k
ZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAgU3BlY05vbmUsIG9wLCBj
dXJyZW50Tm9kZU9yaWdpbigpLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKLSAgICAgICAgQVNT
RVJUKG9wICE9IFBoaSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgocmVzdWx0
KTsKICAgICB9CiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8s
IE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAg
ICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCiAgICAgICAgICAg
ICBTcGVjTm9uZSwgb3AsIGN1cnJlbnROb2RlT3JpZ2luKCksIGluZm8sIEVkZ2UoY2hpbGQxKSwg
RWRnZShjaGlsZDIpLAogICAgICAgICAgICAgRWRnZShjaGlsZDMpKTsKLSAgICAgICAgQVNTRVJU
KG9wICE9IFBoaSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgocmVzdWx0KTsK
ICAgICB9CiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8xLCBP
cEluZm8gaW5mbzIsIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNo
aWxkMyA9IDApCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUo
CiAgICAgICAgICAgICBTcGVjTm9uZSwgb3AsIGN1cnJlbnROb2RlT3JpZ2luKCksIGluZm8xLCBp
bmZvMiwKICAgICAgICAgICAgIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxk
MykpOwotICAgICAgICBBU1NFUlQob3AgIT0gUGhpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZChyZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4g
YWRkVG9HcmFwaChyZXN1bHQpOwogICAgIH0KICAgICAKICAgICBOb2RlKiBhZGRUb0dyYXBoKE5v
ZGU6OlZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yKQpA
QCAtNjYzLDggKzY4OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3Jh
cGguYWRkTm9kZSgKICAgICAgICAgICAgIFNwZWNOb25lLCBOb2RlOjpWYXJBcmcsIG9wLCBjdXJy
ZW50Tm9kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsCiAgICAgICAgICAgICBtX2dyYXBoLm1fdmFy
QXJnQ2hpbGRyZW4uc2l6ZSgpIC0gbV9udW1QYXNzZWRWYXJBcmdzLCBtX251bVBhc3NlZFZhckFy
Z3MpOwotICAgICAgICBBU1NFUlQob3AgIT0gUGhpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZChyZXN1bHQpOworICAgICAgICBhZGRUb0dyYXBoKHJlc3VsdCk7CiAgICAgICAgIAog
ICAgICAgICBtX251bVBhc3NlZFZhckFyZ3MgPSAwOwogICAgICAgICAKQEAgLTg5Miw2ICs5MTYs
NyBAQCBwcml2YXRlOgogICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgICAgICBD
b2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBtX2lu
bGluZUNhbGxGcmFtZTsKKyAgICAgICAgQnl0ZWNvZGVLaWxscyYgbV9ieXRlY29kZUtpbGxzOwog
ICAgICAgICAKICAgICAgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZSgpIHsgcmV0dXJu
IG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsgfQogICAgICAgICAKQEAgLTk5Miw2ICsx
MDE3LDIwIEBAIHByaXZhdGU6CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKKyAgICAg
ICAgdm9pZCBoaW50KEJ5dGVDb2RlUGFyc2VyKiBwYXJzZXIsIFNldE1vZGUgc2V0TW9kZSA9IE5v
cm1hbFNldCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRpYXRl
TmFrZWRTZXQpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9vcGVyYW5kLmlzQXJndW1lbnQoKSB8
fCBwYXJzZXItPmZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwobV9vcGVyYW5kKSkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBOb3RlOiBuYWl2ZWx5LCB0aGlzIEtpbGxIaW50IG1ha2VzIGl0
IGFwcGVhciB0aGF0IHRoZSBsYXN0IE1vdkhpbnRlZCBub2RlKHMpCisgICAgICAgICAgICAgICAg
ICAgIC8vIG11c3QgYmUgYWxpdmUuIEJ1dCB3ZSBjb3VsZCBpZ25vcmUgdGhhdCBpZiB0aGVyZSBp
cyBhbiBvdmVybG9va2luZyBmbHVzaC4gVGhlCisgICAgICAgICAgICAgICAgICAgIC8vIEZUTCBi
YWNrZW5kIHdpbGwgZG8gdGhpcyBpbXBsaWNpdGx5LgorICAgICAgICAgICAgICAgICAgICBwYXJz
ZXItPmFkZFRvR3JhcGgoS2lsbEhpbnQsIE9wSW5mbyhtX29wZXJhbmQub2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHBhcnNlci0+YWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8obV9vcGVyYW5kLm9mZnNldCgpKSwg
bV92YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIE5vZGUqIGV4ZWN1dGUoQnl0
ZUNvZGVQYXJzZXIqIHBhcnNlciwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAobV9vcGVyYW5kLmlzQXJndW1lbnQoKSkKQEAgLTEwMTcsMTIg
KzEwNTYsMTMgQEAgcHJpdmF0ZToKIH07CiAKICNkZWZpbmUgTkVYVF9PUENPREUobmFtZSkgXAot
ICAgIG1fY3VycmVudEluZGV4ICs9IE9QQ09ERV9MRU5HVEgobmFtZSk7IFwKLSAgICBjb250aW51
ZQorICAgIG5leHRJbmRleCA9IG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChuYW1lKTsg
XAorICAgIGJyZWFrCiAKICNkZWZpbmUgTEFTVF9PUENPREUobmFtZSkgXAotICAgIG1fY3VycmVu
dEluZGV4ICs9IE9QQ09ERV9MRU5HVEgobmFtZSk7IFwKLSAgICByZXR1cm4gc2hvdWxkQ29udGlu
dWVQYXJzaW5nCisgICAgbmV4dEluZGV4ID0gbV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RI
KG5hbWUpOyBcCisgICAgY29udGludWVJbkxvb3AgPSBmYWxzZTsgXAorICAgIGJyZWFrCiAKIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBv
cCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewpAQCAtMTA0NSw2ICsxMDg1LDggQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICBoYW5kbGVDYWxsKAogICAgICAg
ICByZXN1bHQsIG9wLCBJbmxpbmVDYWxsRnJhbWU6OmtpbmRGb3Ioa2luZCksIGluc3RydWN0aW9u
U2l6ZSwgY2FsbFRhcmdldCwKICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJl
Z2lzdGVyT2Zmc2V0LCBjYWxsTGlua1N0YXR1cyk7CisgICAgCisgICAgYWRkVG9HcmFwaChLaWxs
SGludCwgT3BJbmZvKGNhbGxlZSkpOwogfQogICAgIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlQ2FsbCgKQEAgLTExMzgsNiArMTE4MCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVZhcmFyZ3NDYWxsKEkKICAgICAgICAgJiYgaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVz
dWx0LCBjYWxsTGlua1N0YXR1cywgZmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIodGhpc1Jl
ZyksIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpLCBmaXJzdFZhckFyZ09mZnNldCwgMCwgbV9j
dXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIG9wLCBJbmxpbmVD
YWxsRnJhbWU6OnZhcmFyZ3NLaW5kRm9yKGtpbmQpLCBwcmVkaWN0aW9uKSkgewogICAgICAgICBp
ZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlv
bigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOworICAgICAgICBhZGRUb0dyYXBoKEtpbGxIaW50LCBP
cEluZm8oY2FsbGVlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0xMTc2LDgg
KzEyMTksMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKAogCiB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0QXJndW1lbnRQaGFudG9tcyhpbnQgcmVnaXN0ZXJPZmZz
ZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKIHsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2kpCi0gICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJlZ2lzdGVyT2Zm
c2V0KSkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXM7ICsraSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICBhZGRUb0dyYXBoKEtpbGxI
aW50LCBPcEluZm8ocmVnLm9mZnNldCgpKSk7CisgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwg
Z2V0KHJlZykpOworICAgIH0KIH0KIAogdW5zaWduZWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluaW5n
Q29zdChDYWxsVmFyaWFudCBjYWxsZWUsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQpAQCAtMTM1OSw3ICsxNDA1LDEwIEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2EKICAgICAvLyBJZiB0aGVyZSB3YXMg
YSByZXR1cm4sIGJ1dCBubyBlYXJseSByZXR1cm5zLCB0aGVuIHdlJ3JlIGRvbmUuIFdlIGFsbG93
IHBhcnNpbmcgb2YKICAgICAvLyB0aGUgY2FsbGVyIHRvIGNvbnRpbnVlIGluIHdoYXRldmVyIGJh
c2ljIGJsb2NrIHdlJ3JlIGluIHJpZ2h0IG5vdy4KICAgICBpZiAoIWlubGluZVN0YWNrRW50cnku
bV9kaWRFYXJseVJldHVybiAmJiBpbmxpbmVTdGFja0VudHJ5Lm1fZGlkUmV0dXJuKSB7Ci0gICAg
ICAgIEFTU0VSVChsYXN0QmxvY2stPmlzRW1wdHkoKSB8fCAhbGFzdEJsb2NrLT5sYXN0KCktPmlz
VGVybWluYWwoKSk7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJz
aW5nKCkpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgQWxsb3dpbmcgcGFyc2luZyB0byBjb250
aW51ZSBpbiBsYXN0IGlubGluZWQgYmxvY2suXG4iKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VS
VChpc1N1ZmZpY2llbnRseUVtcHR5Rm9yUmVwdXJwb3NpbmcobGFzdEJsb2NrKSB8fCAhbGFzdEJs
b2NrLT50ZXJtaW5hbCgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGNyZWF0ZWQgbmV3
IGJsb2NrcyB0aGVuIHRoZSBsYXN0IGJsb2NrIG5lZWRzIGxpbmtpbmcsIGJ1dCBpbiB0aGUKICAg
ICAgICAgLy8gY2FsbGVyLiBJdCBkb2Vzbid0IG5lZWQgdG8gYmUgbGlua2VkIHRvLCBidXQgaXQg
bmVlZHMgb3V0Z29pbmcgbGlua3MuCkBAIC0xMzY3LDYgKzE0MTYsOCBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhCiAgICAgICAgICAgICAvLyBGb3IgZGVidWdnaW5n
IHB1cnBvc2VzLCBzZXQgdGhlIGJ5dGVjb2RlQmVnaW4uIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3Qg
bWF0dGVyCiAgICAgICAgICAgICAvLyBmb3IgcmVsZWFzZSBidWlsZHMgYmVjYXVzZSB0aGlzIGJs
b2NrIHdpbGwgbmV2ZXIgc2VydmUgYXMgYSBwb3RlbnRpYWwgdGFyZ2V0CiAgICAgICAgICAgICAv
LyBpbiB0aGUgbGlua2VyJ3MgYmluYXJ5IHNlYXJjaC4KKyAgICAgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgICAgICBSZXB1cnBvc2luZyBsYXN0IGJsb2NrIGZyb20gIiwgbGFzdEJsb2NrLT5ieXRlY29k
ZUJlZ2luLCAiIHRvICIsIG1fY3VycmVudEluZGV4LCAiXG4iKTsKICAgICAgICAgICAgIGxhc3RC
bG9jay0+Ynl0ZWNvZGVCZWdpbiA9IG1fY3VycmVudEluZGV4OwogICAgICAgICAgICAgaWYgKGNh
bGxlckxpbmthYmlsaXR5ID09IENhbGxlckRvZXNOb3JtYWxMaW5raW5nKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCkBAIC0xMzc5LDggKzE0MzAsMTEgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAor
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCkpCisgICAgICAgIGRh
dGFMb2coIiAgICBDcmVhdGluZyBuZXcgYmxvY2sgYWZ0ZXIgaW5saW5pbmcuXG4iKTsKKwogICAg
IC8vIElmIHdlIGdldCB0byB0aGlzIHBvaW50IHRoZW4gYWxsIGJsb2NrcyBtdXN0IGVuZCBpbiBz
b21lIHNvcnQgb2YgdGVybWluYWxzLgotICAgIEFTU0VSVChsYXN0QmxvY2stPmxhc3QoKS0+aXNU
ZXJtaW5hbCgpKTsKKyAgICBBU1NFUlQobGFzdEJsb2NrLT50ZXJtaW5hbCgpKTsKIAogICAgIC8v
IE5lZWQgdG8gY3JlYXRlIGEgbmV3IGJhc2ljIGJsb2NrIGZvciB0aGUgY29udGludWF0aW9uIGF0
IHRoZSBjYWxsZXIuCiAgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYobmV3
IEJhc2ljQmxvY2sobmV4dE9mZnNldCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBQTmFO
KSk7CkBAIC0xMzkxLDcgKzE0NDUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxs
KE5vZGUqIGNhCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2tUb0xpbmsgPSBpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9ibG9jazsK
ICAgICAgICAgQVNTRVJUKCFibG9ja1RvTGluay0+aXNMaW5rZWQpOwotICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2tUb0xpbmstPmxhc3QoKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrVG9M
aW5rLT50ZXJtaW5hbCgpOwogICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBKdW1wKTsKICAg
ICAgICAgQVNTRVJUKCFub2RlLT50YXJnZXRCbG9jaygpKTsKICAgICAgICAgbm9kZS0+dGFyZ2V0
QmxvY2soKSA9IGJsb2NrLmdldCgpOwpAQCAtMTgwMiw3ICsxODU2LDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRp
b25CbG9jay5nZXQoKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBsYW5kaW5nQmxvY2tz
LnNpemUoKTsgaS0tOykKLSAgICAgICAgbGFuZGluZ0Jsb2Nrc1tpXS0+bGFzdCgpLT50YXJnZXRC
bG9jaygpID0gY29udGludWF0aW9uQmxvY2suZ2V0KCk7CisgICAgICAgIGxhbmRpbmdCbG9ja3Nb
aV0tPnRlcm1pbmFsKCktPnRhcmdldEJsb2NrKCkgPSBjb250aW51YXRpb25CbG9jay5nZXQoKTsK
ICAgICAKICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZE9mZnNldDsKICAgICAKQEAgLTI1NzEsMjAg
KzI2MjUsMjUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICB9CiAgICAgfQogCi0gICAgd2hpbGUgKHRydWUpIHsKKyAgICBib29sIGNvbnRpbnVlSW5M
b29wID0gdHJ1ZTsKKyAgICB3aGlsZSAoY29udGludWVJbkxvb3ApIHsKICAgICAgICAgcHJvY2Vz
c1NldExvY2FsUXVldWUoKTsKICAgICAgICAgCiAgICAgICAgIC8vIERvbid0IGV4dGVuZCBvdmVy
IGp1bXAgZGVzdGluYXRpb25zLgogICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPT0gbGltaXQp
IHsKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCkp
CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIGVuZGluZyBibG9jayBhdCAiLCBjdXJyZW50
Q29kZU9yaWdpbigpLCAiXG4iKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gT3JkaW5h
cmlseSB3ZSB3YW50IHRvIHBsYW50IGEganVtcC4gQnV0IHJlZnVzZSB0byBkbyB0aGlzIGlmIHRo
ZSBibG9jayBpcwogICAgICAgICAgICAgLy8gZW1wdHkuIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Ug
Zm9yIGlubGluaW5nLCB3aGljaCBtaWdodCBvdGhlcndpc2UgY3JlYXRlCiAgICAgICAgICAgICAv
LyBzb21lIGVtcHR5IGJsb2NrcyBpbiBzb21lIGNhc2VzLiBXaGVuIHBhcnNlQmxvY2soKSByZXR1
cm5zIHdpdGggYW4gZW1wdHkKICAgICAgICAgICAgIC8vIGJsb2NrLCBpdCB3aWxsIGdldCByZXB1
cnBvc2VkIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgb25lLiBOb3RlIHRoYXQgdGhpcwogICAg
ICAgICAgICAgLy8gbG9naWMgcmVsaWVzIG9uIGV2ZXJ5IGJ5dGVjb2RlIHJlc3VsdGluZyBpbiBv
bmUgb3IgbW9yZSBub2Rlcywgd2hpY2ggd291bGQKLSAgICAgICAgICAgIC8vIGJlIHRydWUgYW55
d2F5IGV4Y2VwdCBmb3Igb3BfbG9vcF9oaW50LCB3aGljaCBlbWl0cyBhIFBoYW50b20gdG8gZm9y
Y2UgdGhpcwotICAgICAgICAgICAgLy8gdG8gYmUgdHJ1ZS4KLSAgICAgICAgICAgIGlmICghbV9j
dXJyZW50QmxvY2stPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIC8vIGJlIHRydWUgYW55d2F5Lgor
ICAgICAgICAgICAgaWYgKCFpc1N1ZmZpY2llbnRseUVtcHR5Rm9yUmVwdXJwb3NpbmcobV9jdXJy
ZW50QmxvY2spKQogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3Vy
cmVudEluZGV4KSk7CisgICAgICAgICAgICBlbHNlIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0
ZUNvZGVQYXJzaW5nKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBibG9jayBl
bXB0eTsgbm90IHBsYW50aW5nIGp1bXAuXG4iKTsKICAgICAgICAgICAgIHJldHVybiBzaG91bGRD
b250aW51ZVBhcnNpbmc7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yNjAxLDYgKzI2NjAsOCBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAg
ICAgUHJvZmlsZXI6Ok9yaWdpblN0YWNrKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1f
Y29kZUJsb2NrLCBjdXJyZW50Q29kZU9yaWdpbigpKSkpKTsKICAgICAgICAgfQogICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgbmV4dEluZGV4ID0gVUlOVF9NQVg7CisgICAgICAgIAogICAgICAg
ICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAKICAgICAgICAgLy8gPT09IEZ1bmN0aW9uIGVudHJ5IG9w
Y29kZXMgPT09CkBAIC0zMTI1LDkgKzMxODYsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9qbXA6IHsKICAgICAgICAgICAgIGlu
dCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZl
T2Zmc2V0KSk7CiAgICAgICAgICAgICBpZiAocmVsYXRpdmVPZmZzZXQgPD0gMCkKICAgICAgICAg
ICAgICAgICBmbHVzaEZvclRlcm1pbmFsKCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAs
IE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSk7CiAgICAgICAgICAgICBM
QVNUX09QQ09ERShvcF9qbXApOwogICAgICAgICB9CiAKQEAgLTMyNDcsOCArMzMwOCw4IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoU3dpdGNoQ2Fz
ZTo6d2l0aEJ5dGVjb2RlSW5kZXgobV9ncmFwaC5mcmVlemUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4odGFibGUubWluICsgaSkpKSwgdGFyZ2V0KSk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBmbHVzaElmVGVybWluYWwoZGF0YSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFN3
aXRjaCwgT3BJbmZvKCZkYXRhKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKSkpOworICAgICAgICAgICAgZmx1c2hJZlRlcm1pbmFsKGRhdGEpOwog
ICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNoX2ltbSk7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIApAQCAtMzI2Nyw4ICszMzI4LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKAogICAgICAg
ICAgICAgICAgICAgICBTd2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJbmRleChMYXp5SlNWYWx1ZTo6
c2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHRhYmxlLm1pbiArIGkpLCB0YXJnZXQpKTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGZsdXNoSWZUZXJtaW5hbChkYXRhKTsKICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJmRhdGEpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSk7CisgICAgICAgICAgICBmbHVzaElmVGVybWlu
YWwoZGF0YSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9zd2l0Y2hfY2hhcik7CiAgICAg
ICAgIH0KIApAQCAtMzI4NywxNCArMzM0OCwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoCiAgICAg
ICAgICAgICAgICAgICAgIFN3aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KExhenlKU1ZhbHVl
Ojprbm93blN0cmluZ0ltcGwoaXRlci0+a2V5LmdldCgpKSwgdGFyZ2V0KSk7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBmbHVzaElmVGVybWluYWwoZGF0YSk7CiAgICAgICAgICAgICBhZGRU
b0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZkYXRhKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpOworICAgICAgICAgICAgZmx1c2hJZlRlcm1pbmFs
KGRhdGEpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNoX3N0cmluZyk7CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIG9wX3JldDoKLSAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJu
KCk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpIHsKKyAgICAgICAgICAgICAg
ICBmbHVzaEZvclJldHVybigpOwogICAgICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9w
LT5tX3JldHVyblZhbHVlLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAgc2V0RGlyZWN0
KG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLCBJbW1lZGlhdGVTZXRXaXRoRmx1c2gpOwog
ICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZGlkUmV0dXJuID0gdHJ1ZTsKQEAg
LTMzMTgsMTIgKzMzNzksMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3JldCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFJldHVybiwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkpOworICAgICAgICAgICAgZmx1c2hGb3JSZXR1
cm4oKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3JldCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBvcF9lbmQ6Ci0gICAgICAgICAgICBmbHVzaEZvclJldHVybigpOwogICAgICAg
ICAgICAgQVNTRVJUKCFpbmxpbmVDYWxsRnJhbWUoKSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBo
KFJldHVybiwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSkpOworICAgICAgICAgICAgZmx1c2hGb3JSZXR1cm4oKTsKICAgICAgICAgICAgIExBU1Rf
T1BDT0RFKG9wX2VuZCk7CiAKICAgICAgICAgY2FzZSBvcF90aHJvdzoKQEAgLTM4NDMsMTQgKzM5
MDUsMzIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKG5leHRJbmRleCAhPSBV
SU5UX01BWCk7IC8vIFdlIHNob3VsZCBoYXZlIHNldCB0aGlzLgorICAgICAgICAKKyAgICAgICAg
Ly8gTWFzc2FnZSBPU1IgZXhpdCBzdGF0ZTogZmlyc3QgbWFrZSBzdXJlIHdlIGtub3cgd2hhdCBn
b3Qga2lsbGVkLgorICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2J5dGVjb2RlS2lsbHMuZm9y
RWFjaE9wZXJhbmRLaWxsZWRBdCgKKyAgICAgICAgICAgIG1fY3VycmVudEluZGV4LAorICAgICAg
ICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChLaWxsSGludCwgT3BJbmZvKHJlZy5vZmZzZXQoKSkpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIAorICAgICAgICAvLyBOZXh0IGlzc3VlIGFsbCBNb3ZIaW50cyBmb3IgYWxsIG9mIHRo
ZSB0aGluZ3MgdGhhdCBnb3QgZGVmaW5lZC4gVGhpcyBtYXkgaXNzdWUgbW9yZQorICAgICAgICAv
LyBLaWxsSGludHMgZm9yIGFsd2F5cy1saXZlIHRoaW5ncy4KKyAgICAgICAgZm9yIChEZWxheWVk
U2V0TG9jYWwmIHNldExvY2FsIDogbV9zZXRMb2NhbFF1ZXVlKQorICAgICAgICAgICAgc2V0TG9j
YWwuaGludCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIG1fY3VycmVudEluZGV4ID0gbmV4dElu
ZGV4OwogICAgIH0KKyAgICAKKyAgICByZXR1cm4gc2hvdWxkQ29udGludWVQYXJzaW5nOwogfQog
CiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jayogYmxvY2ssIFZlY3Rv
cjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cykKIHsKICAgICBBU1NFUlQoIWJsb2NrLT5p
c0xpbmtlZCk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNFbXB0eSgpKTsKLSAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmxhc3QoKTsKKyAgICBOb2RlKiBub2RlID0gYmxvY2stPnRlcm1pbmFsKCk7CiAg
ICAgQVNTRVJUKG5vZGUtPmlzVGVybWluYWwoKSk7CiAgICAgCiAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CkBAIC0zOTIwLDYgKzQwMDAsNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tF
bnRyeTo6SW5saW5lCiAgICAgOiBtX2J5dGVDb2RlUGFyc2VyKGJ5dGVDb2RlUGFyc2VyKQogICAg
ICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9wcm9maWxlZEJsb2NrKHByb2ZpbGVk
QmxvY2spCisgICAgLCBtX2J5dGVjb2RlS2lsbHMoYnl0ZUNvZGVQYXJzZXItPm1fZ3JhcGgua2ls
bHNGb3IoY29kZUJsb2NrKSkKICAgICAsIG1fY2FsbHNpdGVCbG9ja0hlYWQoY2FsbHNpdGVCbG9j
a0hlYWQpCiAgICAgLCBtX3JldHVyblZhbHVlKHJldHVyblZhbHVlVlIpCiAgICAgLCBtX2RpZFJl
dHVybihmYWxzZSkKQEAgLTQwODEsNyArNDE2Miw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQ29kZUJsb2NrKCkKICAgICAgICAgZG8gewogICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRC
bG9jaykgewogICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiB1c2UgdGhlIGxhc3Qg
YmxvY2suCi0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubnVtQmxvY2tzKCkgJiYgbV9ncmFw
aC5sYXN0QmxvY2soKS0+aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bnVtQmxvY2tzKCkgJiYgaXNTdWZmaWNpZW50bHlFbXB0eUZvclJlcHVycG9zaW5nKG1fZ3JhcGgu
bGFzdEJsb2NrKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBiZSBhIGJs
b2NrIGJlbG9uZ2luZyB0byB1cy4KICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5l
U3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2sgPT0gbV9ncmFwaC5sYXN0
QmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIC8vIEVpdGhlciB0aGUgYmxvY2sgaXMgbGlu
a2FibGUgb3IgaXQgaXNuJ3QuIElmIGl0J3MgbGlua2FibGUgdGhlbiBpdCdzIHRoZSBsYXN0CkBA
IC00MTA3LDggKzQxODgsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygp
CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJs
b2Nrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxhc3RC
ZWdpbiA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91
bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9jay0+Ynl0ZWNvZGVCZWdpbjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGFzdEJlZ2luLCBsYXN0QmVnaW4gPT0gVUlOVF9NQVggfHwgbGFzdEJlZ2luIDwgbV9jdXJyZW50
SW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VERkdC
eXRlQ29kZVBhcnNpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgICAgIGxhc3RCZWdpbiA9ICIsIGxhc3RCZWdpbiwgIiwgbV9jdXJyZW50SW5kZXggPSAiLCBt
X2N1cnJlbnRJbmRleCwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChsYXN0QmVnaW4gPT0gVUlOVF9NQVggfHwgbGFzdEJlZ2luIDwgbV9jdXJyZW50SW5kZXgp
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3Rh
Y2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuYXBwZW5kKFVubGlua2VkQmxvY2soYmxvY2suZ2V0KCkp
KTsKICAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdU
YXJnZXRzLmFwcGVuZChibG9jay5nZXQoKSk7CkBAIC00MTMwLDEwICs0MjEyLDEzIEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKICAgICAgICAgICAgIC8vIGFyZSBhdCB0
aGUgZW5kIG9mIGFuIGlubGluZSBmdW5jdGlvbiwgb3Igd2UgcmVhbGl6ZWQgdGhhdCB3ZQogICAg
ICAgICAgICAgLy8gc2hvdWxkIHN0b3AgcGFyc2luZyBiZWNhdXNlIHRoZXJlIHdhcyBhIHJldHVy
biBpbiB0aGUgZmlyc3QKICAgICAgICAgICAgIC8vIGJhc2ljIGJsb2NrLgotICAgICAgICAgICAg
QVNTRVJUKG1fY3VycmVudEJsb2NrLT5pc0VtcHR5KCkgfHwgbV9jdXJyZW50QmxvY2stPmxhc3Qo
KS0+aXNUZXJtaW5hbCgpIHx8IChtX2N1cnJlbnRJbmRleCA9PSBjb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLnNpemUoKSAmJiBpbmxpbmVDYWxsRnJhbWUoKSkgfHwgIXNob3VsZENvbnRpbnVlUGFy
c2luZyk7CisgICAgICAgICAgICBBU1NFUlQoaXNTdWZmaWNpZW50bHlFbXB0eUZvclJlcHVycG9z
aW5nKG1fY3VycmVudEJsb2NrKSB8fCBtX2N1cnJlbnRCbG9jay0+dGVybWluYWwoKSB8fCAobV9j
dXJyZW50SW5kZXggPT0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgJiYgaW5saW5l
Q2FsbEZyYW1lKCkpIHx8ICFzaG91bGRDb250aW51ZVBhcnNpbmcpOwogCi0gICAgICAgICAgICBp
ZiAoIXNob3VsZENvbnRpbnVlUGFyc2luZykKKyAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGlu
dWVQYXJzaW5nKSB7CisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VERkdCeXRl
Q29kZVBhcnNpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRG9uZSBwYXJzaW5n
ICIsICpjb2RlQmxvY2ssICJcbiIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSAwOwogICAg
ICAgICB9IHdoaWxlIChtX2N1cnJlbnRJbmRleCA8IGxpbWl0KTsKQEAgLTQxNDEsNiArNDIyNiw5
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKIAogICAgIC8vIFNob3Vs
ZCBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgaW5zdHJ1Y3Rpb25zLgogICAgIEFTU0VSVCht
X2N1cnJlbnRJbmRleCA9PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAg
CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlQ29kZVBhcnNpbmcoKSkKKyAgICAgICAg
ZGF0YUxvZygiRG9uZSBwYXJzaW5nICIsICpjb2RlQmxvY2ssICIgKGZlbGwgb2ZmIGVuZClcbiIp
OwogfQogCiBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksNyArNTks
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgc3dpdGNoIChibG9jay0+bGFzdCgpLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgc3dp
dGNoIChibG9jay0+dGVybWluYWwoKS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgSnVt
cDogewogICAgICAgICAgICAgICAgICAgICAvLyBTdWNjZXNzb3Igd2l0aCBvbmUgcHJlZGVjZXNz
b3IgLT4gbWVyZ2UuCiAgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+c3VjY2Vzc29yKDAp
LT5wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKQEAgLTk5LDE3ICs5OSwxOSBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmxhc3QoKS0+aXNU
ZXJtaW5hbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlT3JpZ2luIGJvdW5k
YXJ5Tm9kZU9yaWdpbiA9IGJsb2NrLT5sYXN0KCktPm9yaWdpbjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBibG9jay0+bGFzdCgpLT5jb252ZXJ0VG9QaGFudG9tKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5sYXN0KCktPnJlZkNvdW50KCkgPT0gMSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB0ZXJtaW5hbCA9IGJsb2NrLT50ZXJt
aW5hbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh0ZXJtaW5hbC0+aXNU
ZXJtaW5hbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlT3JpZ2luIGJvdW5k
YXJ5Tm9kZU9yaWdpbiA9IHRlcm1pbmFsLT5vcmlnaW47CisKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqZXR0aXNvbkJsb2NrKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2ssIGJvdW5kYXJ5Tm9k
ZU9yaWdpbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJsb2NrLT5yZXBsYWNlVGVybWluYWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBib3VuZGFyeU5vZGVPcmlnaW4sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0YXJnZXRCbG9jaykpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9j
ay0+dGVybWluYWwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVy
Q2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEyOSw3
ICsxMzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBjYXNlIFN3aXRjaDogewotICAgICAgICAgICAgICAgICAgICBT
d2l0Y2hEYXRhKiBkYXRhID0gYmxvY2stPmxhc3QoKS0+c3dpdGNoRGF0YSgpOworICAgICAgICAg
ICAgICAgICAgICBTd2l0Y2hEYXRhKiBkYXRhID0gYmxvY2stPnRlcm1pbmFsKCktPnN3aXRjaERh
dGEoKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIFBydW5l
IG91dCBjYXNlcyB0aGF0IGVuZCB1cCBqdW1waW5nIHRvIGRlZmF1bHQuCiAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5zaXplKCk7ICsraSkg
ewpAQCAtMTQ5LDggKzE1MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gU3dpdGNoIG9uIGNvbnN0
YW50IC0+IGpldHRpc29uIGFsbCBvdGhlciB0YXJnZXRzIGFuZCBtZXJnZS4KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCktPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogdmFsdWUgPSBibG9jay0+bGFzdCgp
LT5jaGlsZDEoKS0+Y29uc3RhbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT50
ZXJtaW5hbCgpLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgRnJvemVuVmFsdWUqIHZhbHVlID0gYmxvY2stPnRlcm1pbmFsKCktPmNoaWxkMSgpLT5j
b25zdGFudCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgVHJpU3RhdGUgZm91bmQgPSBGYWxz
ZVRyaVN0YXRlOwogICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0Qmxv
Y2sgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+
Y2FzZXMuc2l6ZSgpOyBmb3VuZCA9PSBGYWxzZVRyaVN0YXRlICYmIGktLTspIHsKQEAgLTE4Mywx
MSArMTg1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5kdW1wKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVh
ZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGVPcmlnaW4gYm91bmRhcnlOb2RlT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3Jp
Z2luOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5sYXN0KCktPmNvbnZlcnRU
b1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB0ZXJtaW5hbCA9
IGJsb2NrLT50ZXJtaW5hbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmln
aW4gYm91bmRhcnlOb2RlT3JpZ2luID0gdGVybWluYWwtPm9yaWdpbjsKKwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGpldHRpc29uZWRCbG9ja3Muc2l6ZSgp
OyBpLS07KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2NrKGJs
b2NrLCBqZXR0aXNvbmVkQmxvY2tzW2ldLCBib3VuZGFyeU5vZGVPcmlnaW4pOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5yZXBsYWNlVGVy
bWluYWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25l
LCBKdW1wLCBib3VuZGFyeU5vZGVPcmlnaW4sIE9wSW5mbyh0YXJnZXRCbG9jaykpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJDaGFuZ2Vk
ID0gb3V0ZXJDaGFuZ2VkID0gdHJ1ZTsKQEAgLTI1MywxMyArMjU3LDEwIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CiAgICAgICAgICAgICBtZXJnZUJsb2Nrcyhi
bG9jaywgdGFyZ2V0QmxvY2ssIG5vQmxvY2tzKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgTm9kZSogYnJhbmNoID0gYmxvY2stPmxhc3QoKTsKLSAgICAgICAgICAgIEFTU0VSVChi
cmFuY2gtPmlzVGVybWluYWwoKSk7CisgICAgICAgICAgICBOb2RlKiBicmFuY2ggPSBibG9jay0+
dGVybWluYWwoKTsKICAgICAgICAgICAgIEFTU0VSVChicmFuY2gtPm9wKCkgPT0gQnJhbmNoIHx8
IGJyYW5jaC0+b3AoKSA9PSBTd2l0Y2gpOwotICAgICAgICAgICAgYnJhbmNoLT5jb252ZXJ0VG9Q
aGFudG9tKCk7Ci0gICAgICAgICAgICBBU1NFUlQoYnJhbmNoLT5yZWZDb3VudCgpID09IDEpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKKworICAgICAgICAg
ICAgYmxvY2stPnJlcGxhY2VUZXJtaW5hbCgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVj
Tm9uZSwgSnVtcCwgYnJhbmNoLT5vcmlnaW4sIE9wSW5mbyh0YXJnZXRCbG9jaykpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMzE4LDEwICszMTksMTEgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAg
ICAgIC8vIFJlbW92ZSB0aGUgdGVybWluYWwgb2YgZmlyc3RCbG9jayBzaW5jZSB3ZSBkb24ndCBu
ZWVkIGl0IGFueW1vcmUuIFdlbGwsIHdlIGRvbid0CiAgICAgICAgIC8vIHJlYWxseSByZW1vdmUg
aXQ7IHdlIGFjdHVhbGx5IHR1cm4gaXQgaW50byBhIFBoYW50b20uCi0gICAgICAgIEFTU0VSVChm
aXJzdEJsb2NrLT5sYXN0KCktPmlzVGVybWluYWwoKSk7Ci0gICAgICAgIE5vZGVPcmlnaW4gYm91
bmRhcnlOb2RlT3JpZ2luID0gZmlyc3RCbG9jay0+bGFzdCgpLT5vcmlnaW47Ci0gICAgICAgIGZp
cnN0QmxvY2stPmxhc3QoKS0+Y29udmVydFRvUGhhbnRvbSgpOwotICAgICAgICBBU1NFUlQoZmly
c3RCbG9jay0+bGFzdCgpLT5yZWZDb3VudCgpID09IDEpOworICAgICAgICBOb2RlKiB0ZXJtaW5h
bCA9IGZpcnN0QmxvY2stPnRlcm1pbmFsKCk7CisgICAgICAgIEFTU0VSVCh0ZXJtaW5hbC0+aXNU
ZXJtaW5hbCgpKTsKKyAgICAgICAgTm9kZU9yaWdpbiBib3VuZGFyeU5vZGVPcmlnaW4gPSB0ZXJt
aW5hbC0+b3JpZ2luOworICAgICAgICB0ZXJtaW5hbC0+Y29udmVydFRvUGhhbnRvbSgpOworICAg
ICAgICBBU1NFUlQodGVybWluYWwtPnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgIAogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBqZXR0aXNvbmVkQmxvY2tzLnNpemUoKTsgaS0tOykgewogICAg
ICAgICAgICAgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrID0gamV0dGlzb25lZEJsb2Nrc1tp
XTsKQEAgLTM0Miw3ICszNDQsNyBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNlY29uZEJsb2NrLT5zaXplKCk7ICsraSkKICAgICAgICAgICAgIGZpcnN0QmxvY2st
PmFwcGVuZChzZWNvbmRCbG9jay0+YXQoaSkpOwogICAgICAgICAKLSAgICAgICAgQVNTRVJUKGZp
cnN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKKyAgICAgICAgQVNTRVJUKGZpcnN0Qmxv
Y2stPnRlcm1pbmFsKCktPmlzVGVybWluYWwoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBGaXgg
dGhlIHByZWRlY2Vzc29ycyBvZiBteSBuZXcgc3VjY2Vzc29ycy4gVGhpcyBpcyB0cmlja3ksIHNp
bmNlIHdlIGFyZSBnb2luZyB0byByZXNldAogICAgICAgICAvLyBhbGwgcHJlZGVjZXNzb3JzIGFu
eXdheSBkdWUgdG8gcmVhY2hhYmlsaXR5IGFuYWx5c2lzLiBCdXQgd2UgbmVlZCB0byBmaXggdGhl
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Myw2
ICszNjMsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX2F2YWlsYWJsZUZvck9TUi5v
cGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgWm9tYmll
SGludDoKKyAgICAgICAgICAgICAgICBtX2F2YWlsYWJsZUZvck9TUi5vcGVyYW5kKG5vZGUtPnVu
bGlua2VkTG9jYWwoKSkgPSBFZGdlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgsNiArMjY4LDcgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgCiAgICAgY2FzZSBNb3ZI
aW50OgogICAgIGNhc2UgWm9tYmllSGludDoKKyAgICBjYXNlIEtpbGxIaW50OgogICAgIGNhc2Ug
S2lsbFN0YWNrOgogICAgIGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIFBoaToKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYg
KzI3NCwyOSBAQCB2b2lkIHN0YXJ0Q3Jhc2hpbmcoKTsKIAogSlNfRVhQT1JUX1BSSVZBVEUgYm9v
bCBpc0NyYXNoaW5nKCk7CiAKK3N0cnVjdCBOb2RlQW5kSW5kZXggeworICAgIE5vZGVBbmRJbmRl
eCgpCisgICAgICAgIDogbm9kZShudWxscHRyKQorICAgICAgICAsIGluZGV4KFVJTlRfTUFYKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgTm9kZUFuZEluZGV4KE5vZGUqIG5vZGUsIHVuc2lnbmVk
IGluZGV4KQorICAgICAgICA6IG5vZGUobm9kZSkKKyAgICAgICAgLCBpbmRleChpbmRleCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghbm9kZSA9PSAoaW5kZXggPT0gVUlOVF9NQVgpKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICFub2RlOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBub2RlOworICAgIHVuc2lnbmVkIGluZGV4
OworfTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiBuYW1lc3BhY2UgV1RGIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCShyZXZpc2lvbiAx
ODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ4LDE4ICsxNDgsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAvLyBDaGVjayBpZiB3ZSBoYWQganVzdCBraWxsZWQgaXQuCiAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoYW50b20gfHwgbm9kZS0+Y2hpbGQxKCktPm9wKCkg
PT0gQ2hlY2spIHsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0Rmxh
Z3MoWm9tYmllSGludCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDEp
OwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBa
b21iaWVIaW50OiB7Ci0gICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5IHdlIGFzc3VtZSB0aGF0
IERDRSBydW5zIG9ubHkgb25jZS4KLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZp
cnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9u
IDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDggKzExMiw2IEBAIFZlY3RvcjxEaXNhc3NlbWJsZXI6
OkR1bXBlZE9wPiBEaXNhc3NlbWIKICAgICAgICAgYXBwZW5kKHJlc3VsdCwgb3V0LCBwcmV2aW91
c09yaWdpbik7CiAgICAgICAgIE5vZGUqIGxhc3ROb2RlRm9yRGlzYXNzZW1ibHkgPSBibG9jay0+
YXQoMCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrLT5hdChpKS0+d2lsbEhhdmVDb2RlR2VuT3JPU1Io
KSAmJiAhT3B0aW9uczo6c2hvd0FsbERGR05vZGVzKCkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgY3VycmVudExhYmVsOwogICAg
ICAgICAgICAgSGFzaE1hcDxOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsPjo6aXRlcmF0b3Ig
aXRlciA9IG1fbGFiZWxGb3JOb2RlLmZpbmQoYmxvY2stPmF0KGkpKTsKICAgICAgICAgICAgIGlm
IChpdGVyICE9IG1fbGFiZWxGb3JOb2RlLmVuZCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDcg
QEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0U3Rh
Y2s6CiAgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOgogICAgIGNhc2UgUHV0VG9Bcmd1bWVudHM6
CisgICAgY2FzZSBLaWxsSGludDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2FzZSBD
cmVhdGVBY3RpdmF0aW9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjM5LDYgKzEyMzksNyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKICAgICAgICAgY2FzZSBTdG9y
ZUJhcnJpZXJXaXRoTnVsbENoZWNrOgogICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgIGNh
c2UgS2lsbEhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBCb3R0
b21WYWx1ZToKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGb3JBbGxLaWxscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRm9yQWxsS2lsbHMuaAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMyAr
NDgsMTMgQEAgdm9pZCBmb3JBbGxMaXZlTm9kZXNBdFRhaWwoR3JhcGgmIGdyYXBoLAogICAgICAg
ICAgICAgZnVuY3Rvcihub2RlKTsKICAgICB9CiAgICAgCi0gICAgREZHX0FTU0VSVChncmFwaCwg
YmxvY2stPmxhc3QoKSwgYmxvY2stPmxhc3QoKS0+b3JpZ2luLmZvckV4aXQuaXNTZXQoKSk7Cisg
ICAgREZHX0FTU0VSVChncmFwaCwgYmxvY2stPnRlcm1pbmFsKCksIGJsb2NrLT50ZXJtaW5hbCgp
LT5vcmlnaW4uZm9yRXhpdC5pc1NldCgpKTsKICAgICAKICAgICBBdmFpbGFiaWxpdHlNYXAmIGF2
YWlsYWJpbGl0eU1hcCA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbDsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHMuc2l6ZSgpOyBpLS07KSB7CiAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHMudmly
dHVhbFJlZ2lzdGVyRm9ySW5kZXgoaSk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWdyYXBoLmlz
TGl2ZUluQnl0ZWNvZGUocmVnLCBibG9jay0+bGFzdCgpLT5vcmlnaW4uZm9yRXhpdCkpCisgICAg
ICAgIGlmICghZ3JhcGguaXNMaXZlSW5CeXRlY29kZShyZWcsIGJsb2NrLT50ZXJtaW5hbCgpLT5v
cmlnaW4uZm9yRXhpdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAg
IGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExvY2FsKApAQCAtNzEsNDkgKzcxLDM0
IEBAIHZvaWQgZm9yQWxsTGl2ZU5vZGVzQXRUYWlsKEdyYXBoJiBncmFwaCwKICAgICB9CiB9CiAK
Ky8vIE5vdGUgdGhhdCB0aGlzIGRlZmluZXMgImtpbGwiIGluIHRoZSB1c3VhbCBsaWJlcmFsIHdh
eS4gSXQncyB2YWxpZCB0byBoYXZlIGEga2lsbCBmb2xsb3dlZCBieQorLy8gYW5vdGhlciBraWxs
LiBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gZmluZCB0aGUgKnJlYWwqIGtpbGwsIHlvdSBuZWVkIGEg
YmFja3dhcmRzIGFuYWx5c2lzIHRvIGZpbmQKKy8vIHRoZSBsYXN0IChpLmUuIGZpcnN0LWJhY2t3
YXJkcykgb25lLiBXZSBkbyBpdCB0aGlzIHdheSBiZWNhdXNlIGl0J3MgYSBsb3QgbW9yZSBlZmZp
Y2llbnQgYW5kIGFsbAorLy8gb2YgdGhlIHVzZXJzIGNhbiBiZSBuYXR1cmFsbHkgYWRhcHRlZCB0
byBpdCAtIGVpdGhlciBiZWNhdXNlIHRoZXkgdW5pZnkgdGhlIHJlZ2lvbnMgaW1wbGllZCBieSBh
bGwKKy8vIGtpbGxzIChsaWtlIEFyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UpIG9yIGJlY2F1c2Ug
dGhleSBkbyBhIGJhY2t3YXJkcyBhbmFseXNpcyBhbmQgaGF2ZSBhIGNoZWFwCisvLyByZWR1bmRh
bnQta2lsbCBjaGVjayAobGlrZSBNb3ZIaW50UmVtb3ZhbCkuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgotdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIENvZGVPcmln
aW4gYmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit2b2lk
IGZvckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUFmdGVyLCBjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIENvZGVPcmlnaW4gYWZ0ZXIgPSBub2RlQWZ0ZXIt
Pm9yaWdpbi5mb3JFeGl0OwotICAgIAotICAgIGlmICghYmVmb3JlKSB7Ci0gICAgICAgIGlmICgh
YWZ0ZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIC8vIFRoZSB0cnVlIGJlZm9yZS1v
cmlnaW4gaXMgdGhlIG9yaWdpbiBhdCBwcmVkZWNlc3NvcnMgdGhhdCBqdW1wIHRvIHVzLiBCdXQg
dGhlcmUgY2FuIGJlCi0gICAgICAgIC8vIG1hbnkgc3VjaCBwcmVkZWNlc3NvcnMgYW5kIHRoZXkg
d2lsbCBsaWtlbHkgYWxsIGhhdmUgYSBkaWZmZXJlbnQgb3JpZ2luLiBTbywgaXQncyBiZXR0ZXIK
LSAgICAgICAgLy8gdG8gZG8gdGhlIGNvbnNlcnZhdGl2ZSB0aGluZy4KLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2Fs
cygpOyBpLS07KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaSk7Ci0gICAgICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29k
ZShyZWcsIGFmdGVyKSkKLSAgICAgICAgICAgICAgICBmdW5jdG9yKHJlZyk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKICAgICAvLyBJZiB3ZSBNb3ZIaW50IHNvbWV0
aGluZyB0aGF0IGlzIGxpdmUgYXQgdGhlIHRpbWUsIHRoZW4gd2Uga2lsbCB0aGUgb2xkIHZhbHVl
LgogICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5Tm90ZWQ7CiAgICAgaWYgKG5vZGVBZnRlci0+
Y29udGFpbnNNb3ZIaW50KCkpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG5vZGVB
ZnRlci0+dW5saW5rZWRMb2NhbCgpOwotICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29k
ZShyZWcsIGFmdGVyKSkgewotICAgICAgICAgICAgZnVuY3RvcihyZWcpOwotICAgICAgICAgICAg
YWxyZWFkeU5vdGVkID0gcmVnOworICAgICAgICBDb2RlT3JpZ2luIGFmdGVyT3JpZ2luID0gbm9k
ZUFmdGVyLT5vcmlnaW4uZm9yRXhpdDsKKyAgICAgICAgLy8gVGhlIG9yaWdpbiBtYXkgbm90IGJl
IHNldCwgaW4gd2hpY2ggY2FzZSB0aGlzIGlzIGEgUGhpIE1vdkhpbnQuIFRob3NlIGNhbm5vdCBr
aWxsCisgICAgICAgIC8vIGFueXRoaW5nLgorICAgICAgICBpZiAoISFhZnRlck9yaWdpbikgewor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG5vZGVBZnRlci0+dW5saW5rZWRMb2Nh
bCgpOworICAgICAgICAgICAgaWYgKGdyYXBoLmlzTGl2ZUluQnl0ZWNvZGUocmVnLCBhZnRlck9y
aWdpbikpIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKHJlZyk7CisgICAgICAgICAgICAgICAg
YWxyZWFkeU5vdGVkID0gcmVnOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIGlmIChiZWZvcmUgPT0gYWZ0ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAv
LyBiZWZvcmUgY291bGQgYmUgdW5zZXQgZXZlbiBpZiBhZnRlciBpcywgYnV0IHRoZSBvcHBvc2l0
ZSBjYW5ub3QgaGFwcGVuLgotICAgIEFTU0VSVCghIWFmdGVyKTsKLSAgICAKLSAgICAvLyBEZXRl
Y3Qga2lsbHMgdGhlIHN1cGVyIGNvbnNlcnZhdGl2ZSB3YXk6IGl0IGlzIGtpbGxlZCBpZiBpdCB3
YXMgbGl2ZSBiZWZvcmUgYW5kIGRlYWQgYWZ0ZXIuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyBpLS07KSB7Ci0g
ICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKTsK
LSAgICAgICAgaWYgKHJlZyA9PSBhbHJlYWR5Tm90ZWQpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgaWYgKGdyYXBoLmlzTGl2ZUluQnl0ZWNvZGUocmVnLCBiZWZvcmUpICYmICFncmFw
aC5pc0xpdmVJbkJ5dGVjb2RlKHJlZywgYWZ0ZXIpKQotICAgICAgICAgICAgZnVuY3RvcihyZWcp
OwotICAgIH0KKyAgICAvLyBJZiB3ZSBLaWxsSGludCBzb21ldGhpbmcsIGFzc3VtZSBsaWJlcmFs
bHkgdGhhdCB0aGlzIGlzIGEga2lsbCB0aGF0IHRoZSB1c2VyIHdhbnRzIHRvIGtub3cKKyAgICAv
LyBhYm91dC4gU2VlIGNvbW1lbnQgYWJvdmUgdGhpcyBmdW5jdGlvbi4KKyAgICBpZiAobm9kZUFm
dGVyLT5vcCgpID09IEtpbGxIaW50KQorICAgICAgICBmdW5jdG9yKG5vZGVBZnRlci0+dW5saW5r
ZWRMb2NhbCgpKTsKIH0KICAgICAKIC8vIFRlbGxzIHlvdSBhbGwgb2YgdGhlIG5vZGVzIHRoYXQg
d291bGQgbm8gbG9uZ2VyIGJlIGxpdmUgYWNyb3NzIHRoZSBub2RlIGF0IHRoaXMgbm9kZUluZGV4
LgpAQCAtMTQwLDEyICsxMjUsOCBAQCB2b2lkIGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5kZXgo
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogCi0gICAgQ29kZU9yaWdpbiBiZWZvcmU7Ci0g
ICAgaWYgKG5vZGVJbmRleCkKLSAgICAgICAgYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAt
IDEpLT5vcmlnaW4uZm9yRXhpdDsKLQogICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKAotICAgICAg
ICBncmFwaCwgYmVmb3JlLCBub2RlLAorICAgICAgICBncmFwaCwgbm9kZSwKICAgICAgICAgWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAuY2xv
c2VTdGFydGluZ1dpdGhMb2NhbCgKICAgICAgICAgICAgICAgICByZWcsCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NSw2
ICszNjUsMTUgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAg
IG91dC5wcmludCgiXG4iKTsKIH0KIAorYm9vbCBHcmFwaDo6dGVybWluYWxzQXJlVmFsaWQoKQor
eworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7
CisgICAgICAgIGlmICghYmxvY2stPnRlcm1pbmFsKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIEdyYXBoOjpkdW1wQmxvY2tI
ZWFkZXIoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4LCBCYXNpY0Jsb2NrKiBi
bG9jaywgUGhpTm9kZUR1bXBNb2RlIHBoaU5vZGVEdW1wTW9kZSwgRHVtcENvbnRleHQqIGNvbnRl
eHQpCiB7CiAgICAgb3V0LnByaW50KHByZWZpeCwgIkJsb2NrICIsICpibG9jaywgIiAoIiwgaW5D
b250ZXh0KGJsb2NrLT5hdCgwKS0+b3JpZ2luLnNlbWFudGljLCBjb250ZXh0KSwgIik6IiwgYmxv
Y2stPmlzUmVhY2hhYmxlID8gIiIgOiAiIChza2lwcGVkKSIsIGJsb2NrLT5pc09TUlRhcmdldCA/
ICIgKE9TUiB0YXJnZXQpIiA6ICIiLCAiXG4iKTsKQEAgLTM3NSwxMyArMzg0LDE2IEBAIHZvaWQg
R3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKICAgICAgICAgb3V0LnByaW50KCIg
IiwgKmJsb2NrLT5wcmVkZWNlc3NvcnNbaV0pOwogICAgIG91dC5wcmludCgiXG4iKTsKICAgICBv
dXQucHJpbnQocHJlZml4LCAiICBTdWNjZXNzb3JzOiIpOwotICAgIGZvciAoQmFzaWNCbG9jayog
c3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgewotICAgICAgICBvdXQucHJpbnQoIiAi
LCAqc3VjY2Vzc29yKTsKLSAgICAgICAgaWYgKG1fcHJlUG9zdE51bWJlcmluZy5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiAoIiwgbV9wcmVQb3N0TnVtYmVyaW5nLmVkZ2VLaW5k
KGJsb2NrLCBzdWNjZXNzb3IpLCAiKSIpOwotICAgIH0KKyAgICBpZiAoYmxvY2stPnRlcm1pbmFs
KCkpIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAiLCAqc3VjY2Vzc29yKTsKKyAgICAg
ICAgICAgIGlmIChtX3ByZVBvc3ROdW1iZXJpbmcuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAg
IG91dC5wcmludCgiICgiLCBtX3ByZVBvc3ROdW1iZXJpbmcuZWRnZUtpbmQoYmxvY2ssIHN1Y2Nl
c3NvciksICIpIik7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgb3V0LnByaW50KCIg
PGludmFsaWQ+Iik7CiAgICAgb3V0LnByaW50KCJcbiIpOwotICAgIGlmIChtX2RvbWluYXRvcnMu
aXNWYWxpZCgpKSB7CisgICAgaWYgKG1fZG9taW5hdG9ycy5pc1ZhbGlkKCkgJiYgdGVybWluYWxz
QXJlVmFsaWQoKSkgewogICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBEb21pbmF0ZWQgYnk6
ICIsIG1fZG9taW5hdG9ycy5kb21pbmF0b3JzT2YoYmxvY2spLCAiXG4iKTsKICAgICAgICAgb3V0
LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVzOiAiLCBtX2RvbWluYXRvcnMuYmxvY2tzRG9taW5h
dGVkQnkoYmxvY2spLCAiXG4iKTsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5h
bmNlIEZyb250aWVyOiAiLCBtX2RvbWluYXRvcnMuZG9taW5hbmNlRnJvbnRpZXJPZihibG9jayks
ICJcbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24g
MTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTYsNiArMTk2LDkgQEAgcHVibGljOgogICAgIAogICAgIC8vIENvZGVCbG9j
ayBpcyBvcHRpb25hbCwgYnV0IG1heSBhbGxvdyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIGJl
IGR1bXBlZCAoZS5nLiBJZGVudGlmaWVyIG5hbWVzKS4KICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mID0gV1RGOjpkYXRhRmlsZSgpLCBEdW1wQ29udGV4dCogPSAwKTsKKyAgICAKKyAgICBib29s
IHRlcm1pbmFsc0FyZVZhbGlkKCk7CisgICAgCiAgICAgZW51bSBQaGlOb2RlRHVtcE1vZGUgeyBE
dW1wTGl2ZVBoaXNPbmx5LCBEdW1wQWxsUGhpcyB9OwogICAgIHZvaWQgZHVtcEJsb2NrSGVhZGVy
KFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBCYXNpY0Jsb2NrKiwgUGhpTm9kZUR1
bXBNb2RlLCBEdW1wQ29udGV4dCopOwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYsIEVkZ2Up
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjEsNyArMzYxLDcgQEAgYm9vbCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbAog
CiBpbmxpbmUgYm9vbCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nlc3NvcnMoQmFz
aWNCbG9jayogYmFzaWNCbG9jaykKIHsKLSAgICBOb2RlKiB0ZXJtaW5hbCA9IGJhc2ljQmxvY2st
Pmxhc3QoKTsKKyAgICBOb2RlKiB0ZXJtaW5hbCA9IGJhc2ljQmxvY2stPnRlcm1pbmFsKCk7CiAg
ICAgCiAgICAgQVNTRVJUKHRlcm1pbmFsLT5pc1Rlcm1pbmFsKCkpOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkocmV2aXNpb24gMTgyODU3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcHJl
SGVhZGVyID0gcHJlZGVjZXNzb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgcHJlSGVhZGVyLT5sYXN0KCksIHByZUhlYWRlci0+
bGFzdCgpLT5vcCgpID09IEp1bXApOworICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBw
cmVIZWFkZXItPnRlcm1pbmFsKCksIHByZUhlYWRlci0+dGVybWluYWwoKS0+b3AoKSA9PSBKdW1w
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZGF0YS5wcmVIZWFkZXIgPSBwcmVIZWFkZXI7
CiAgICAgICAgIH0KQEAgLTIzNywxMCArMjM3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgIlxuIik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRhdGEucHJlSGVhZGVyLT5p
bnNlcnRCZWZvcmVMYXN0KG5vZGUpOworICAgICAgICBkYXRhLnByZUhlYWRlci0+aW5zZXJ0QmVm
b3JlVGVybWluYWwobm9kZSk7CiAgICAgICAgIG5vZGUtPm93bmVyID0gZGF0YS5wcmVIZWFkZXI7
CiAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luYWxPcmlnaW4gPSBub2RlLT5vcmlnaW47Ci0gICAg
ICAgIG5vZGUtPm9yaWdpbi5mb3JFeGl0ID0gZGF0YS5wcmVIZWFkZXItPmxhc3QoKS0+b3JpZ2lu
LmZvckV4aXQ7CisgICAgICAgIG5vZGUtPm9yaWdpbi5mb3JFeGl0ID0gZGF0YS5wcmVIZWFkZXIt
PnRlcm1pbmFsKCktPm9yaWdpbi5mb3JFeGl0OwogICAgICAgICAKICAgICAgICAgLy8gTW9kaWZ5
IHRoZSBzdGF0ZXMgYXQgdGhlIGVuZCBvZiB0aGUgcHJlSGVhZGVyIG9mIHRoZSBsb29wIHdlIGhv
aXN0ZWQgdG8sCiAgICAgICAgIC8vIGFuZCBhbGwgcHJlLWhlYWRlcnMgaW5zaWRlIHRoZSBsb29w
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCShyZXZpc2lv
biAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3IEBAIGJvb2wgbWF5RXhpdChHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUpCiAgICAgY2FzZSBHZXRTY29wZToKICAgICBjYXNlIFBoYW50b21Mb2NhbDoK
ICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgorICAgIGNhc2UgS2lsbEhpbnQ6CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NDgsNiArNzQ4LDcgQEAgc3RydWN0IE5vZGUg
ewogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAg
ICAgY2FzZSBLaWxsU3RhY2s6CisgICAgICAgIGNhc2UgS2lsbEhpbnQ6CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE4
Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsNyArNjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAgICAgbWFjcm8oR2V0U3RhY2ssIE5vZGVSZXN1bHRKUykgXAogICAgIFwKICAgICBtYWNybyhN
b3ZIaW50LCAwKSBcCi0gICAgbWFjcm8oWm9tYmllSGludCwgMCkgXAorICAgIG1hY3JvKFpvbWJp
ZUhpbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhLaWxsSGludCwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAogICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhIYXJkUGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0ZSkgLyogTGlrZSBQaGFudG9tLCBidXQg
d2UgbmV2ZXIgcmVtb3ZlIGFueSBvZiBpdHMgY2hpbGRyZW4uICovIFwKICAgICBtYWNybyhDaGVj
aywgTm9kZU11c3RHZW5lcmF0ZSkgLyogVXNlZCBpZiB3ZSB3YW50IGp1c3QgYSB0eXBlIGNoZWNr
IGJ1dCBub3QgbGl2ZW5lc3MuIE5vbi1jaGVja2luZyB1c2VzIHdpbGwgYmUgcmVtb3ZlZC4gKi9c
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAvLyBhbHJlYWR5IGhhbmRsZWQgdGhlIGNhc2Ugd2hlcmUgdGhlIHByZWRlY2Vz
c29yIGhhcyBtdWx0aXBsZSBzdWNjZXNzb3JzLgogICAgICAgICAgICAgICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIGJsb2NrLCBibG9jay0+bnVtU3VjY2Vzc29ycygpID09IDEpOwogICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY3JlYXRlTWF0ZXJpYWxpemUoYWxs
b2NhdGlvbiwgYmxvY2stPmxhc3QoKSk7CisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU1hdGVy
aWFsaXplKGFsbG9jYXRpb24sIGJsb2NrLT50ZXJtaW5hbCgpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQ2MSw4ICs0NjEsOCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAg
ICAgc2l6ZV90IHVwc2lsb25JbnNlcnRpb25Qb2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOwotICAg
ICAgICAgICAgTm9kZSogdXBzaWxvbldoZXJlID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAgICAg
IHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+ZmluZFRlcm1pbmFsKCkuaW5k
ZXg7CisgICAgICAgICAgICBOb2RlKiB1cHNpbG9uV2hlcmUgPSBibG9jay0+dGVybWluYWwoKTsK
ICAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IHVwc2lsb25XaGVyZS0+b3Jp
Z2luOwogICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2Nr
LT5zdWNjZXNzb3JzKCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRl
ZiogcGhpRGVmIDogbV9zc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykp
IHsKQEAgLTcwOCw4ICs3MDgsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAvLyBHb3R0YSBkcm9wIHNvbWUgVXBzaWxvbnMuCi0gICAgICAgICAg
ICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2stPnNpemUoKSAtIDE7Ci0gICAg
ICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47
CisgICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2stPmZpbmRU
ZXJtaW5hbCgpLmluZGV4OworICAgICAgICAgICAgTm9kZU9yaWdpbiB1cHNpbG9uT3JpZ2luID0g
YmxvY2stPnRlcm1pbmFsKCktPm9yaWdpbjsKICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayog
c3VjY2Vzc29yQmxvY2sgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CiAgICAgICAgICAgICAgICAg
Zm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9y
QmxvY2soc3VjY2Vzc29yQmxvY2spKSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5v
ZGUgPSBwaGlEZWYtPnZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BoYW50b21SZW1vdmFsUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAJKHJldmlzaW9uIDE4Mjg1NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBsYXN0Tm9kZSA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzb3Vy
Y2VJbmRleCA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3ROb2RlID0gYmxvY2st
PmF0KHNvdXJjZUluZGV4IC0gMik7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgZG9lc24ndCBuZWVkIHRvIHNwZWNpYWxpemUgZm9yIFBo
YW50b20uIGxhc3ROb2RlIGNvdWxkIGJlIGFueSBub2RlCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0aGF0IGlzbid0IHN1YmplY3QgdG8gRENFLiBCdXQgd2Uga2VlcCBpdCBzaW1wbGUgZm9y
IG5vdy4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Tm9kZS0+b3AoKSAhPSBQaGFu
dG9tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbGFzdE5vZGUtPm9yaWdpbi5mb3JF
eGl0ICE9IG5vZGUtPm9yaWdpbi5mb3JFeGl0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxhc3ROb2RlID0gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lv
biAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ3LDYgKzY0Nyw3IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgICAgIGNhc2UgQ29uc3RhbnRTdG9y
YWdlUG9pbnRlcjoKICAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNlIEtpbGxIaW50
OgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAg
ICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0
U3RhY2tTaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODI4NTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDQxLDggKzQ0MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgc2l6ZV90IHVwc2ls
b25JbnNlcnRpb25Qb2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOwotICAgICAgICAgICAgTm9kZU9y
aWdpbiB1cHNpbG9uT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOworICAgICAgICAgICAg
c2l6ZV90IHVwc2lsb25JbnNlcnRpb25Qb2ludCA9IGJsb2NrLT5maW5kVGVybWluYWwoKS5pbmRl
eDsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJsb2NrLT50ZXJtaW5h
bCgpLT5vcmlnaW47CiAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2Nr
IDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgewogICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3Vs
YXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JC
bG9jaykpIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFs
dWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM1
LDggKzMzNSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIHNlZW1zIGRhbmdlcm91cyBiZWNh
dXNlIHRoZSBVcHNpbG9uIHdpbGwgaGF2ZSBhIGNoZWNraW5nIFVzZUtpbmQuIEJ1dCwgd2Ugd2ls
bCBub3QKICAgICAgICAgICAgIC8vIGFjdHVhbGx5IGJlIHBlcmZvcm1pbmcgdGhlIGNoZWNrIGF0
IHRoZSBwb2ludCBvZiB0aGUgVXBzaWxvbjsgdGhlIGNoZWNrIHdpbGwKICAgICAgICAgICAgIC8v
IGFscmVhZHkgaGF2ZSBiZWVuIHBlcmZvcm1lZCBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlIG9yaWdp
bmFsIFNldExvY2FsIHdhcy4KLSAgICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9p
bnQgPSBibG9jay0+c2l6ZSgpIC0gMTsKLSAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9y
aWdpbiA9IGJsb2NrLT5sYXN0KCktPm9yaWdpbjsKKyAgICAgICAgICAgIHNpemVfdCB1cHNpbG9u
SW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+ZmluZFRlcm1pbmFsKCkuaW5kZXg7CisgICAgICAgICAg
ICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBibG9jay0+dGVybWluYWwoKS0+b3JpZ2luOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGJsb2NrLT5udW1TdWNj
ZXNzb3JzKCk7IHN1Y2Nlc3NvckluZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgQmFzaWNCbG9j
ayogc3VjY2Vzc29yQmxvY2sgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKICAg
ICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9jYWxjdWxh
dG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxODI4NTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTIzLDYgKzEyMyw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlw
ZSYgc3QKICAgICBjYXNlIEtpbGxTdGFjazoKICAgICBjYXNlIEdldFN0YWNrOgogICAgIGNhc2Ug
TW92SGludDoKKyAgICBjYXNlIEtpbGxIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKICAgICBj
YXNlIFBoYW50b206CiAgICAgY2FzZSBIYXJkUGhhbnRvbToKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNp
b24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzMiwxMSArMTgzMiwxNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAotICAgIGNhc2UgTW92SGludDoKLSAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICBjYXNlIE1v
dkhpbnQ6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgIHJl
Y29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lz
dGVyKCksIERhdGFGb3JtYXREZWFkKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNh
c2UgS2lsbEhpbnQ6CisgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTZXRMb2NhbDogewogICAg
ICAgICBzd2l0Y2ggKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5mbHVzaEZvcm1hdCgpKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MjEsMTEgKzE5MjEs
MTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgTW92SGludDoKLSAgICBjYXNlIFpvbWJp
ZUhpbnQ6IHsKKyAgICBjYXNlIE1vdkhpbnQ6IHsKICAgICAgICAgREZHX0NSQVNIKG1faml0Lmdy
YXBoKCksIG5vZGUsICJVbmV4cGVjdGVkIG5vZGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQor
ICAgICAgICAKKyAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwo
bV9jdXJyZW50Tm9kZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZv
cm1hdERlYWQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgS2ls
bEhpbnQ6CisgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTZXRMb2NhbDogewogICAgICAgICBz
d2l0Y2ggKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5mbHVzaEZvcm1hdCgpKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NDIsMTEgKzE0NDIsNiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAgICAgICAgICAgICAgY29tcGls
ZU1vdkhpbnQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgICAgICAg
ICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZExvY2FsKCksIFZpcnR1YWxS
ZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0KICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgaWYgKGJl
bG9uZ3NJbk1pbmlmaWVkR3JhcGgobV9jdXJyZW50Tm9kZS0+b3AoKSkpCiAgICAgICAgICAgICAg
ICAgICAgIG1fbWluaWZpZWRHcmFwaC0+YXBwZW5kKE1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUobV9j
dXJyZW50Tm9kZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODEsNyArNjgxLDcg
QEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGxhc3ROb2Rl
IGlzIGEgYnJhbmNoIG9uIHRoaXMgbm9kZS4KLSAgICAgICAgTm9kZSogbGFzdE5vZGUgPSBtX2Js
b2NrLT5sYXN0KCk7CisgICAgICAgIE5vZGUqIGxhc3ROb2RlID0gbV9ibG9jay0+dGVybWluYWwo
KTsKICAgICAgICAgcmV0dXJuIGxhc3ROb2RlLT5vcCgpID09IEJyYW5jaCAmJiBsYXN0Tm9kZS0+
Y2hpbGQxKCkgPT0gbV9jdXJyZW50Tm9kZSA/IG1fYmxvY2stPnNpemUoKSAtIDEgOiBVSU5UX01B
WDsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYz
LDE2ICs2MywxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKGJsb2Nr
LT5sYXN0KCktPm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmxvY2stPnRlcm1pbmFsKCkt
Pm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgQnJhbmNoOiB7Ci0gICAgICAgICAgICAgICAgQnJh
bmNoRGF0YSogZGF0YSA9IGJsb2NrLT5sYXN0KCktPmJyYW5jaERhdGEoKTsKKyAgICAgICAgICAg
ICAgICBCcmFuY2hEYXRhKiBkYXRhID0gYmxvY2stPnRlcm1pbmFsKCktPmJyYW5jaERhdGEoKTsK
ICAgICAgICAgICAgICAgICBhcHBseUNvdW50cyhkYXRhLT50YWtlbik7CiAgICAgICAgICAgICAg
ICAgYXBwbHlDb3VudHMoZGF0YS0+bm90VGFrZW4pOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTd2l0Y2g6
IHsKLSAgICAgICAgICAgICAgICBTd2l0Y2hEYXRhKiBkYXRhID0gYmxvY2stPmxhc3QoKS0+c3dp
dGNoRGF0YSgpOworICAgICAgICAgICAgICAgIFN3aXRjaERhdGEqIGRhdGEgPSBibG9jay0+dGVy
bWluYWwoKS0+c3dpdGNoRGF0YSgpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGRhdGEtPmNhc2VzLnNpemUoKTsgaS0tOykKICAgICAgICAgICAgICAgICAgICAgYXBwbHlDb3Vu
dHMoZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKICAgICAgICAgICAgICAgICBhcHBseUNvdW50cyhk
YXRhLT5mYWxsVGhyb3VnaCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Rp
ZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4
Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAzLDkgKzEwMywxMCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChibG9jay0+bGFzdCgpLT5vcCgpID09IFJldHVybikgeworICAgICAgICAg
ICAgaWYgKGJsb2NrLT50ZXJtaW5hbCgpLT5vcCgpID09IFJldHVybikgewogICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBibG9jay0+
c2l6ZSgpIC0gMSwgU3BlY05vbmUsIENoZWNrVGllclVwQXRSZXR1cm4sIGJsb2NrLT5sYXN0KCkt
Pm9yaWdpbik7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5maW5kVGVybWluYWwoKS5pbmRl
eCwgU3BlY05vbmUsIENoZWNrVGllclVwQXRSZXR1cm4sCisgICAgICAgICAgICAgICAgICAgIGJs
b2NrLT50ZXJtaW5hbCgpLT5vcmlnaW4pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4OSwxMCArMTg5LDI0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgo
bm9kZSksIG1fbXlSZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMCA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgICAgICBib29sIGZv
dW5kVGVybWluYWwgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8
IGJsb2NrLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+aXNUZXJt
aW5hbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aXNUZXJtaW5hbCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZvdW5kVGVybWluYWwgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBibG9jay0+c2l6ZSgpOyArK2opIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUgPSBibG9jay0+YXQoaik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPm9wKCkgPT0gUGhhbnRvbSB8fCBub2RlLT5v
cCgpID09IEtpbGxIaW50IHx8IG5vZGUtPm9wKCkgPT0gUGhhbnRvbUxvY2FsIHx8IG5vZGUtPm9w
KCkgPT0gRmx1c2gpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRy
ZW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIHNob3VsZE5vdEhhdmVUeXBlQ2hlY2soZWRnZS51
c2VLaW5kKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBWQUxJREFURSgoYmxvY2spLCBmb3VuZFRlcm1p
bmFsKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KGkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIGlubGlu
ZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEtpbGxTdGFjazoK
ICAgICBjYXNlIEdldFN0YWNrOgogICAgIGNhc2UgTW92SGludDoKKyAgICBjYXNlIEtpbGxIaW50
OgogICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIFBoYW50b206CiAgICAgY2FzZSBIYXJk
UGhhbnRvbToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQ4LDYgKzg0OCw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgIGNhc2UgQWxsb2Nh
dGlvblByb2ZpbGVXYXRjaHBvaW50OgogICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgIGNh
c2UgS2lsbEhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBQaGFu
dG9tTmV3T2JqZWN0OgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CkBAIC04
NjAsOCArODYxLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwg
bV9ub2RlLCAiVW5yZWNvZ25pemVkIG5vZGUgaW4gRlRMIGJhY2tlbmQiKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX3N0YXRlLmlzVmFsaWQoKSAmJiAh
bV9ub2RlLT5pc1Rlcm1pbmFsKCkpIHsKKyAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPmlz
VGVybWluYWwoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
IGlmICghbV9zdGF0ZS5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIHNhZmVseUludmFsaWRhdGVB
ZnRlclRlcm1pbmF0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY2xvc3VyZS1jYWxsLWV4
aXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9j
bG9zdXJlLWNhbGwtZXhpdC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvY2xvc3VyZS1jYWxsLWV4aXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNSBAQAorZnVuY3Rpb24gZm9vKG8sIGkpIHsKKyAgICByZXR1cm4gb1tpXSgpOworfQor
Citub0lubGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAg
ICB2YXIgcmVzdWx0ID0gZm9vKFtmdW5jdGlvbigpIHsgcmV0dXJuIDQyOyB9XSwgMCk7CisgICAg
aWYgKHJlc3VsdCAhPSA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsg
cmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9vKFtmdW5jdGlvbigpIHsgcmV0dXJuIDQzOyB9
XSwgMCk7CitpZiAocmVzdWx0ICE9IDQzKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBh
dCBlbmQ6ICIgKyByZXN1bHQ7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>